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

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

谢谢

打开并阅读以下内容:

/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等处找到。请参阅第一行的标题以获取(简要)描述。