如何找到向本地主机发出 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
答案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 个程序没有。