我的 wifi 卡正在尝试连接到本地网络上看似随机的 IP 地址。我想找到客户端上的哪个进程正在尝试建立此连接以确定原因。
这种情况在 MacOS 上尤其明显,但我也很好奇如何在其他 Linux/Unix 变体中做到这一点。 Mac 通过 Wifi 连接到本地网络。我已从已擦除的驱动器上的 USB 重新安装了 MacOS High Sierra,但 wifi 卡仍尝试建立此连接。
使用 Wireshark 对网络流量进行数据包捕获显示,网卡大约每 1 分 30 秒就会发出一次呼叫,尝试通过发送 SYN 数据包来连接到本地网络上的 IP(192.168.86.173,端口 7000)。然后,由于客户端尝试访问的 IP 没有响应,因此会多次重新传输 SYN。
我有ping
IP nmap
192.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 身份运行netstat
andlsof
才能列出所有套接字。