找出哪个用户在应用程序内创建了本地传入TCP连接

时间:2013-07-30 07:21:20

标签: linux sockets tcp udp uid

在Linux上,可以根据创建它们的用户或组来过滤源自localhost的数据包,即谁拥有该套接字:

iptables ... -m owner --uid-owner $USER --gid-owner $GROUP -p tcp ...

但是我想从程序的角度来看它,在localhost上运行并用C语言编写,接收数据包:我绑定到某个端口,这里有一个新的TCP连接/ UDP数据包。如何找出谁发送的?

2 个答案:

答案 0 :(得分:2)

奇怪的用例,但是嘿,也许这样的东西可以起作用 - 但它不是很漂亮:

  1. 使用accept获取fstat返回的fd的inode编号。
  2. 阅读/proc/self/net/tcp
  3. 解析并找到与inode编号匹配的行。
  4. 使用该行的uid。

答案 1 :(得分:1)

你做不到。您将获得远程IP地址和端口。就是这样。