![如何持續監控連接到本機套接字的PID?](https://rvso.com/image/168802/%E5%A6%82%E4%BD%95%E6%8C%81%E7%BA%8C%E7%9B%A3%E6%8E%A7%E9%80%A3%E6%8E%A5%E5%88%B0%E6%9C%AC%E6%A9%9F%E5%A5%97%E6%8E%A5%E5%AD%97%E7%9A%84PID%EF%BC%9F.png)
一些本地行程正在連接和斷開到連接埠 1234 上的 127.0.0.1。
我想記錄與此連接埠(或伺服器進程)的所有連接。
我試過了
ss -tpn | grep 1234
它顯示一個列表,但隨後停止;它不會繼續記錄新連接,因此我無法捕獲套接字或所有者的 PID。
我可以使用什麼工具來發現連接和斷開套接字的PID?
答案1
有一個“監視”工具可以做到這一點,或者您可以
while true; do sleep 2; clear; ss -tulnp | grep 1234 ; done
將程式碼附加到文件中並追蹤它。這可能會產生CPU使用率,但可能會幫助你找到你想要的東西。
Linux 監視指令
答案2
您可以使用兩種工具來監視connect
Linux 上的 TCP 事件:
- tcpconnect.py在密件副本工具中(pkgs.org,譴責)
- tcpconnect.bt在 bpftrace 中(pkgs.org,譴責)
兩者之間的區別在於,前者提供了自訂輸出的選項(例如,按 PID 或連接埠號過濾),而後者是一個更簡單的工具,不提供花哨的選項。
對於您的用例,最簡單的選項是安裝 bcc 並運行:
tcpconnect.py -P 1234
如果您使用發行版的套件管理器安裝這些工具,請記住,某些發行版不會將它們放置tcpconnect
在/usr/bin
其他位置,而是將它們放置在其他位置/usr/share
。因此,如果找不到這些文件,請務必檢查您的發行版放置這些文件的位置。
答案3
雖然ss
僅轉儲套接字統計訊息,並且您需要模擬連續轉儲(使用watch
或while
循環),但netstat
具有連續模式(-c
)。
netstat -ntcp | grep ' 127.0.0.1:1234'
請注意,如果您只需要捕獲客戶端 pid,則 127... 之前的兩個空格不是拼寫錯誤。
範例輸出:
$ netstat -ntcp | grep ' 127.0.0.1:1234'
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:35720 127.0.0.1:1234 ESTABLISHED 22655/nc
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:35720 127.0.0.1:1234 ESTABLISHED 22655/nc
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
答案4
watch -n 1 -d 'lsof -n -itcp:1234'
不是日誌記錄,而是強大的即時監控和亮點...
$ man watch
- -n 1 - 每 1 秒
- -d - 突出顯示差異
$ man lsof
- -n - 不解析 ip 到域。
- -itcp:1234 - 任何與 tcp 連接埠 1234 交互