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