有没有一种方法可以在Linux中使用用户空间或内核的C语言获取所有打开的套接字(套接字地址或套接字描述符)列表?
谢谢。
谢谢。
打开并阅读以下内容:
/proc/net/tcp
- 一个已打开的TCP套接字列表
/proc/net/udp
- 一个已打开的UDP套接字列表
/proc/net/raw
- 列出所有的“原始”套接字
这些就像是您使用文件句柄打开和读取的“常规”文件,并且将为您提供有关每个套接字的所有可能需要的信息。
在目录/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()函数来获取本地地址族、地址等信息(如果已绑定)。
这个程序可能对你有用,它展示了如何解析/net/proc/*文件。你可以参考sockstat.c
原始数据可以在/proc/net/tcp、/proc/net/udp等位置找到。请参考第一行的标题(简短)描述。