8

有没有办法在用户空间或内核中使用 C 来获取 Linux 中所有打开的套接字(套接字地址或套接字描述符)的列表?

谢谢

4

4 回答 4

19

打开并阅读以下内容:

/proc/net/tcp- 打开的 TCP 套接字列表

/proc/net/udp- 打开的 UDP 套接字列表

/proc/net/raw- 列出所有“原始”套接字

这些就像您使用文件句柄打开和读取的“常规”文件,它们将为您提供您可能需要的有关每个套接字的所有信息。

于 2009-05-08T20:52:10.580 回答
4

该程序可能对您有用,并演示了如何解析 /net/proc/* 文件sockstat.c

于 2009-05-08T21:25:33.840 回答
3

在目录 /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() 以获取本地地址族、地址等(如果已绑定)。

于 2009-05-08T20:54:47.300 回答
0

原始数据可以在 /proc/net/tcp、/proc/net/udp 等中找到。有关(简洁)描述,请参阅第一行的标题。

于 2009-05-08T20:53:14.917 回答