如何使用C获取Linux中的开放套接字列表?

时间:2009-05-08 20:45:44

标签: c linux networking sockets kernel

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

谢谢

4 个答案:

答案 0 :(得分:16)

打开并阅读以下内容:

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分: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()以获取本地地址系列,地址等(如果已绑定)。

答案 3 :(得分:0)

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