確定呼叫 IP 的程序的 PID
我的 wifi 卡正在嘗試連接到本地網路上看似隨機的 IP 地址。我想找出客戶端上的哪個程序正在嘗試建立此連接以確定原因。
這種情況尤其是 MacOS,但我也很好奇如何在其他 Linux/Unix 變體中做到這一點。mac通過Wifi連接到本地網路。我已經從擦除的驅動器上的 USB 重新安裝了 MacOS High Sierra,並且 wifi 卡仍然嘗試建立此連接。
使用 Wireshark 擷取網路流量的數據包顯示,網卡大約每 1 分 30 秒呼叫一次,嘗試通過發送 SYN 數據包連接到本地網路(192.168.86.173,埠 7000)上的 IP。然後會發生幾次 SYN 重新傳輸,因為客戶端嘗試訪問的 IP 沒有響應。
我有
ping
和nmap
IP 192.168.86.173,但是沒有反應。我使用了網路掃描器,但該 IP 上沒有顯示任何設備。我查找了埠 7000,只發現了一個使用 UDP 而不是 TCP 的文件伺服器。( https://www.auditmypc.com/tcp-port-7000.asp ),以及用於汽車測試的 Gryphon 使用 TCP ( http://www.networksorcery.com/enp/protocol/ip/ports07000.htm)。
我嘗試關閉桌面上的所有應用程序,然後使用
lsof -i tcp
. 從手冊頁:-一世
$$ i $$ 選擇任何 Internet 地址與 i 中指定的地址匹配的文件列表。如果未指定地址,此選項將選擇所有 Internet 和 x.25 (HP-UX) 網路文件的列表。
該程序未列出,即使在發送 SYN 和重新傳輸 SYN 數據包時執行此程序,也不會顯示任何程序。有沒有辦法確定我的客戶端上的哪個程序正在嘗試建立此連接?
是否有一個
netstat
只顯示嘗試的傳出連接的命令,我可以在一個循環中執行,返回一個PID
和命令名稱?我想我無法從中獲取
PID
或命令名稱,Wireshark
因為它的級別太低了?
如果 syn 數據包是實際連接嘗試的一部分,您可以在適當的時候列出套接字和程序,例如:
netstat -apn | grep SYN_SENT
這適用於 Linux。該
-p
標誌列出了擁有套接字的程序的名稱。您可以細化/更改grep
條件以獲得您所追求的線。對於 MacO,您可以執行以下操作:
lsof -i -P | grep -i "SYN_SENT"
回到 Linux,另一種方法是通過將伺服器重定向到本地程序來在該地址/埠設置伺服器:
# iptables -t nat -A OUTPUT -p tcp --dport 7000 -j DNAT --to-destination 127.0.0.1:7777 $ nc -l 7777
現在,由於連接將建立,您將有更多時間
netstat -p...
在套接字關閉之前執行命令。netstat -apn | grep 7000
而且您可能還可以觸發該連接上的一些 tcp 數據流,這可以讓您了解有關客戶端的更多資訊。
在 Linux 中你會使用
ss
,但你提到了 MacOS,它netstat
肯定有。請注意,您可能必須以 root 身份執行netstat
才能lsof
列出所有套接字。