如何查找正在 ping 本地主机的进程

如何查找正在 ping 本地主机的进程

如何找到向本地主机发出 ping 命令的进程?虽然它不是脚本,但 ping 命令可以简单地从进程表中 grep 出来。

我已经使用过 wireshark,但它对于找出实际导致 ping 的进程没有任何帮助。

非常感谢您的提示。

答案1

该命令sudo lsof -n |grep "st=07"似乎有效。

为了测试它,我ping在一个终端上运行如下所示的程序来生成 ICMP 数据包

arul@cheetah:~$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.049 ms

在另一个终端上,我运行了lsof如下所示的命令。您可以看到输出显示了进程和 ICMP 数据包的源 pid。

arul@cheetah:~$ sudo lsof -n |grep "st=07"
ping       3344                   arul    3u      raw                         0t0     602086 00000000:0001->00000000:0000 st=07

来源:https://stackoverflow.com/questions/23327689/identify-the-pid-of-process-which-is-transmitting-icmp-packets

答案2

您可以使用 systemtap 来完成此操作,它可以监视所有子系统,因此您不需要检查特定时刻的系统状态 - 您可以记录事件:

https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html

答案3

发送 ICMP Echo Request 数据包需要 root 权限。因此您有 2 个选择:

  • 检查进程表中是否存在以 root 帐户或 SUID 位运行的进程
  • 检查“ping”过程

示例命令:

ps aux |grep ping
ps aux |grep root |grep -v \\[

然后检查第二个命令的所有结果,看看特定的二进制文件是否具有 SUID 位:

ls -l `which dhclient`
ls -l `which getty`
ls -l `which passwd`
ls -l `which ping`

从权限列表中可以看出,第 3 和第 4 个程序具有 SUID 位,而第 1 和第 2 个程序没有。

相关内容