有没有办法在用户空间或内核中使用C获取Linux中所有开放套接字(套接字地址或套接字描述符)的列表?
谢谢
答案 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等处找到。请参阅第一行的标题以获取(简洁)描述。