在我的Kali Linux虚拟机(2023.2,64位,amd64)上,与Ubuntu或Debian虚拟机相比,我体验到了为进程显示的功能的差异-而不是行为。以我目前的理解,我看不出是什么原因。
示例
我尝试检查一个进程的功能,这里是ping
命令的进程。为此,我首先在Debian 11 VM上执行一组命令,然后在Kali VM上执行相同的命令。
在Debian 11虚拟机上
$ ll $(which ping)
-rwxr-xr-x 1 root root 77432 Feb 2 2021 /usr/bin/ping
$ getcap $(which ping)
/usr/bin/ping cap_net_raw=ep
$ ping -c 100 8.8.8.8 > /dev/null &
[1] 358812
$ PINGPID=$!
$ getpcaps $PINGPID
358812: cap_net_raw=p
$ grep Cap /proc/$PINGPID/status
CapInh: 0000000000000000
CapPrm: 0000000000002000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
$ capsh --decode=0000000000002000
0x0000000000002000=cap_net_raw
正如我们所看到的,在我们的Debian VM上,
getpcaps
显示流程的已分配/可用功能CapPrm
的/proc/$PINGPID/status
输出也显示了预期输出
Kali虚拟机上
$ ll $(which ping)
-rwxr-xr-x 1 root root 90568 Nov 27 2022 /usr/bin/ping
$ getcap $(which ping)
/usr/bin/ping cap_net_raw=ep
$ ping -c 100 8.8.8.8 > /dev/null &
[1] 1479508
$ PINGPID=$!
$ getpcaps $PINGPID
1479508: =
┌──(kali㉿kali-max-20)-[~]
└─$ grep Cap /proc/$PINGPID/status
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
正如我们所见
getpcaps
未显示进程的已分配/可用功能CapPrm
不包含预期的输出
提问
造成这种产量差异的原因是什么?据我所知,在行为上没有区别…
谢谢你的任何提示。
1条答案
按热度按时间fhg3lkii1#
在source code of iputils/ping/ping.c中,就在调用
main_loop
之前,我们可以看到对dropcapabilities()
的调用。这个调用已经在
iputils
源代码的最新版本中引入。由于这一变化,旧版本的ping
(例如在我的Debian和Ubuntu虚拟机上)显示了不同的行为wrt。与我的Kali虚拟机上的ping
相比,它的性能更好。由于@yvs2014的评论,我终于能够理解这不是不同发行版的问题,而是
ping
版本的问题。再次感谢!