是否可以找到哪个用户位于本地主机TCP连接的另一端


这是一个

编程问题,但它非常特定于Linux/Unix。如果我从本地主机获得TCP连接,有没有一种简单的方法可以判断哪个用户在C程序中建立了连接而无需掏钱?我知道这对于Unix域套接字来说并不难。

我已经知道远程 IP 地址是本地主机(::1 或 127.0.0.1(,并且我知道远程端口号。我不知道的是建立连接的进程的有效用户 ID。有什么办法可以发现这一点吗?

在 Linux 上,/proc/net/tcp包含有关系统上打开的 TCP 套接字的信息。对于连接的套接字,条目如下所示(标头是文件的一部分,其他行已删除(:

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
  11: 0100007F:C9CB 0100007F:0016 01 00000000:00000000 00:00000000 00000000  1000        0 978132 ...

第二列和第三列具有套接字的终结点,uid列具有创建套接字的进程的有效 UID。 /proc/net/tcp6与IPv6类似。(那里的 IP 地址是 127.0.0.1,因此八位字节的顺序似乎相反。

如果要跟踪持有套接字的实际进程,则需要遍历所有/proc/$PID/fd/$N条目,并将套接字符号链接中的索引节点编号与 tcp 套接字表中提到的索引节点编号进行比较。但是,除非您是超级用户,否则您只能看到自己进程的文件描述符。

相关内容

  • 没有找到相关文章

最新更新