readyblue Asked: 2015-07-16 02:09:48 +0800 CST2015-07-16 02:09:48 +0800 CST 2015-07-16 02:09:48 +0800 CST 如何找到正在ping localhost的进程 772 如何找到向 localhost 发出 ping 的进程?虽然它不是脚本,但 ping 命令可以简单地从进程表中 grep。 我使用过wireshark,但找出真正导致ping的进程没有帮助。 非常感谢任何提示。 linux 3 个回答 Voted Best Answer Arul Selvan 2015-07-17T17:28:46+08:002015-07-17T17:28:46+08:00 该命令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 GioMac 2015-07-17T22:13:36+08:002015-07-17T22:13:36+08:00 您可以使用 systemtap 来执行此操作,它可以监控所有子系统,因此您无需检查特定时刻的系统状态 - 您可以记录事件: https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html Tomasz Klim 2015-07-16T02:46:40+08:002015-07-16T02:46:40+08:00 发送 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 个没有。
该命令
sudo lsof -n |grep "st=07"
似乎有效。为了测试它,我
ping
在一个终端上运行如下所示以生成 ICMP 数据包在另一个终端上,我运行
lsof
如下所示。您可以看到输出显示进程和作为 ICMP 数据包来源的 pid。来源:https ://stackoverflow.com/questions/23327689/identify-the-pid-of-process-which-is-transmitting-icmp-packets
您可以使用 systemtap 来执行此操作,它可以监控所有子系统,因此您无需检查特定时刻的系统状态 - 您可以记录事件:
https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html
发送 ICMP Echo Request 数据包需要 root 权限。所以你有2个选择:
示例命令:
然后检查第二个命令的所有结果,如果特定的二进制文件有 SUID 位:
从权限列表中可以看出,第 3 和第 4 个程序有 SUID 位,而第 1 和第 2 个没有。