gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:40:33 24 4
gpt4 key购买 nike

这是一个编程问题,但它非常特定于 Linux/Unix。如果我从 localhost 获得 TCP 连接,是否有一种简单的方法可以告诉哪个用户在 C 程序中建立了连接而无需退出?我知道这对于 Unix 域套接字来说并不难。

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

最佳答案

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

  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 条目,并比较 inode 编号在套接字符号链接(symbolic link)到 tcp 套接字表中提到的 inode 号。但是你只能看到你自己进程的文件描述符,除非你是 super 用户。

关于linux - 是否可以找到哪个用户位于本地主机 TCP 连接的另一端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com