Networking

如何在 /proc/fd 中找到有關套接字文件的更多資訊?

  • October 14, 2015

查看 /proc/$mypid/fd/,我看到了這些文件

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

因為我可以訪問程式碼,所以我知道這些套接字與 TCP 連接相關聯(一個是到某台機器上的埠 5672 的連接,另一個是到另一台機器上的埠 3306 的連接),但我想知道哪個套接字是綁定到哪個連接。我怎樣才能做到這一點?

更一般地說,我如何詢問作業系統套接字的另一端是什麼?

命令 lsof

一個不錯的選擇可能是lsof. 如前所述man lsof,它可以方便地獲取有關open files such as Internet sockets or Unix Domain sockets.


使用它

首先,大致了解/proc/$PID/fd/和列出的套接字編號。

例如,socket:[14240]您可能感興趣。

然後用於lsof -i -a -p $PID列印所有網路文件$PID使用的列表。

  • -i生成屬於使用者或程序的網路文件列表
  • -a邏輯組合或 AND 的給定參數
  • -p $PID僅選擇有關您的流程的資訊

以 PID 執行的瀏覽器的典型輸出2543可能是:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

和更多類似的行。

偉大的!現在仔細看看這個DEVICE專欄。它與我們之前列出的套接字相匹配/proc/$PID/fd/

並且感謝該NAME部分,我們可以說出我們套接字的另一端是什麼。

在現實世界的執行中,您可能會獲得大量輸出,但只是過濾或grep用於您感興趣的套接字。

我很確定可以組合所有命令,但這應該足以讓您入門。

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