有没有办法在用户空间或内核中使用 C 来获取 Linux 中所有打开的套接字(套接字地址或套接字描述符)的列表?
谢谢
打开并阅读以下内容:
/proc/net/tcp
- 打开的 TCP 套接字列表
/proc/net/udp
- 打开的 UDP 套接字列表
/proc/net/raw
- 列出所有“原始”套接字
这些就像您使用文件句柄打开和读取的“常规”文件,它们将为您提供您可能需要的有关每个套接字的所有信息。
该程序可能对您有用,并演示了如何解析 /net/proc/* 文件sockstat.c
在目录 /proc/self/fd 中有虚假的符号链接,为您提供所有打开的文件描述符 - 套接字提供如下内容:
lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921]
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918]
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395]
使用 opendir、readdir() 迭代它们,然后使用 readlink() 询问它们
如果您知道 FD 4 是一个套接字,则可以在其上调用 getsockname() 以获取本地地址族、地址等(如果已绑定)。
原始数据可以在 /proc/net/tcp、/proc/net/udp 等中找到。有关(简洁)描述,请参阅第一行的标题。