Networking

/proc/ 中的連接pidp一世dpid/net/tcp 沒有出現在 /proc/net/tcp 中

  • October 10, 2019

我正在實現程式碼以獲取所有網路連接並將它們與使用它們的 PID 相關聯。

比如說,對於 tcp4,對於每個 pid,我正在列出/proc/pid/fd,在那裡搜尋到套接字的連結,讀取它們的 inode 編號並查找它們/proc/net/tcp以獲取有關連接的詳細資訊。

但是,如果我在中查找 inode 編號,/proc/net/tcp我得到連接比在/proc/[pid]/net/tcp. 例如,如果我在依賴 的同時執行上述過程/proc/net/tcp,我只能看到瀏覽器打開的套接字,而如果我依賴/proc/[pid]/net/tcp,我可以看到我的瀏覽器和“java”程序有打開的連接。

那麼我應該依賴/proc/net/tcp還是/proc/[pid]/net/tcp為此目的?我很困惑,因為 psutil 是 Python 中廣泛使用的包,/proc/net/tcp一方面正在使用,但如果我不查看/proc/[pid]/net/tcp.

/proc/net是一個符號連結/proc/self/net,所以/proc/net/proc/[pid]/net只有當程序[pid]和被檢查的程序/proc/net在不同的網路命名空間時才不同。

如果要列出所有套接字,則必須查看所有名稱空間;對於同一網路命名空間中的兩個程序,它們/proc/PID/ns/net將具有相同的 inode 編號。這樣您就可以列舉系統上所有不同的網路命名空間。

引用自:https://unix.stackexchange.com/questions/546087