/proc/[pid]/net/tcp 中未出现在 /proc/net/tcp 中的连接

/proc/[pid]/net/tcp 中未出现在 /proc/net/tcp 中的连接

我正在实现代码来获取所有网络连接并将它们与使用它们的 PID 关联起来。

比如说,对于 tcp4,对于每个 pid,我列出/proc/pid/fd,在那里搜索套接字的链接,读取它们的索引节点号并查找它们以/proc/net/tcp获取有关连接的详细信息。

但是,如果我查找 inode 编号,/proc/net/tcp我会得到较少的连接比我在 中查找它们要好/proc/[pid]/net/tcp。例如,如果我在依赖时执行上述过程/proc/net/tcp,我只能看到浏览器打开的套接字,而如果我依赖/proc/[pid]/net/tcp,我可以看到我的兄弟和“java”进程有打开的连接。

那么我应该依靠/proc/net/tcp还是/proc/[pid]/net/tcp为了这个目的呢?我很困惑,因为 psutil 是 Python 中广泛使用的包,/proc/net/tcp一方面正在使用,但如果我不看/proc/[pid]/net/tcp.

答案1

/proc/net是 的符号链接/proc/self/net,因此仅当进程和检查的进程处于不同的状态时/proc/net和 才/proc/[pid]/net不同[pid]/proc/net网络命名空间

如果您想列出所有套接字,则必须查看所有名称空间;对于同一网络命名空间中的两个进程,它们/proc/PID/ns/net将具有相同的索引节点号。这样您就可以枚举系统上所有不同的网络名称空间。

相关内容