Network-Interface

確定呼叫 IP 的程序的 PID

  • October 4, 2020

我的 wifi 卡正在嘗試連接到本地網路上看似隨機的 IP 地址。我想找出客戶端上的哪個程序正在嘗試建立此連接以確定原因。

這種情況尤其是 MacOS,但我也很好奇如何在其他 Linux/Unix 變體中做到這一點。mac通過Wifi連接到本地網路。我已經從擦除的驅動器上的 USB 重新安裝了 MacOS High Sierra,並且 wifi 卡仍然嘗試建立此連接。

使用 Wireshark 擷取網路流量的數據包顯示,網卡大約每 1 分 30 秒呼叫一次,嘗試通過發送 SYN 數據包連接到本地網路(192.168.86.173,埠 7000)上的 IP。然後會發生幾次 SYN 重新傳輸,因為客戶端嘗試訪問的 IP 沒有響應。

Wireshark 擷取從客戶端到未知 LAN 主機的嘗試連接

我有pingnmapIP 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列出所有套接字。

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