确定调用 IP 的进程的 PID

确定调用 IP 的进程的 PID

我的 wifi 卡正在尝试连接到本地网络上看似随机的 IP 地址。我想找到客户端上的哪个进程正在尝试建立此连接以确定原因。

这种情况在 MacOS 上尤其明显,但我也很好奇如何在其他 Linux/Unix 变体中做到这一点。 Mac 通过 Wifi 连接到本地网络。我已从已擦除的驱动器上的 USB 重新安装了 MacOS High Sierra,但 wifi 卡仍尝试建立此连接。

使用 Wireshark 对网络流量进行数据包捕获显示,网卡大约每 1 分 30 秒就会发出一次呼叫,尝试通过发送 SYN 数据包来连接到本地网络上的 IP(192.168.86.173,端口 7000)。然后,由于客户端尝试访问的 IP 没有响应,因此会多次重新传输 SYN。

Wireshark 捕获从客户端到未知 LAN 主机的尝试连接

我有pingIP nmap192.168.86.173,但没有反应。我使用了网络扫描仪,但该 IP 上没有显示任何设备。

我查找了端口 7000,只找到了一个使用 UDP 的文件服务器,而不是 TCP。 (https://www.auditmypc.com/tcp-port-7000.asp),以及使用 TCP 进行汽车测试的称为 Gryphon 的东西(http://www.networksorcery.com/enp/protocol/ip/ports07000.htm)。

我尝试关闭桌面上的所有应用程序,然后使用lsof -i tcp.从手册页:

-i [i] 选择其 Internet 地址与 i 中指定的地址匹配的文件列表。如果未指定地址,则此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。

该进程未列出,即使在发送 SYN 和重新传输 SYN 数据包时运行该进程,也不会显示任何进程。有没有办法确定客户端上的哪个进程正在尝试建立此连接?

是否有一个netstat命令仅显示尝试的传出连接,我可以在循环中运行该命令并返回PID命令名称?

我想我无法PID从中获取 或 命令名称,Wireshark因为它的级别太低?

答案1

如果 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 身份运行netstatandlsof才能列出所有套接字。

相关内容