Proc
以程式方式確定套接字文件的各個方面
我正在嘗試編寫一個程序(用 C 語言),作為其功能之一,它遍歷 procfs 以查找打開的套接字並確定諸如目標/源埠/地址之類的東西(類似於 netstat 和 lsof 所做的)。但是,一旦找到套接字文件,我不確定使用哪個系統呼叫。例如,假設我已經打電話回來
readlink
了。我可以用這些資訊做什麼,單獨使用系統 API 來獲取套接字的詳細資訊?/proc/123/fd/4``socket:[56789]
我試過跑步
strace
,netstat
但不清楚發生了什麼。我看到了read
,/proc/123/fdinfo/4
但我不明白這是怎麼回事。例如,
fdinfo
一個打開的連接(到 127.0.0.1:5000 的 TCP 連接)的文件顯示pos: 0 flags: 04002 mnt_id: 9
您首先需要閱讀
/proc/net/tcp
哪些列表,對於您的網路命名空間,所有打開的 TCP/IP 連接的詳細資訊(查看/proc/net/tcp6
TCP/IPv6 連接)。此資訊包括關聯的 inode 編號。該文件中的範例行是2: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 19691 1 0000000000000000 100 0 0 10 0
這
00000000:0016
意味著套接字正在偵聽0.0.0.0
埠 22。我們知道這是一個偵聽套接字,因為對等地址 (00000000:0000
) 全為零。我們可以看到這個套接字的 inode 是 19691。一旦掌握了這些數字,您就可以將它們與
/proc/<pid>/fd
. 例如,socket:[12345]
表示 inode 12345 處的套接字。