Networking
如何在 /proc/fd 中找到有關套接字文件的更多資訊?
查看 /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
用於您感興趣的套接字。我很確定可以組合所有命令,但這應該足以讓您入門。