是否可以通过 strace ping 一个主机?

是否可以通过 strace ping 一个主机?

我正在做这个

$ strace -f ping -s 1 www.google.com
execve("/bin/ping", ["ping", "-s", "1", "www.google.com"],
   [/* 80 vars */]) = 0
getuid()                                = 1001
setuid(1001)                            = 0
getuid()                                = 1001
geteuid()                               = 1001
capget({_LINUX_CAPABILITY_VERSION_3, 0}, NULL) = 0
capget({_LINUX_CAPABILITY_VERSION_3, 0}, {0, 0, 0}) = 0  
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EPERM (Operation not permitted)
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(1025), 
     sin_addr=inet_addr("74.125.28.105")}, 16) = 0
write(3, "ping: icmp open socket: Operatio"..., 48
     ping: icmp open socket: Operation not permitted) = 48
close(3)                                = 0
exit_group(2)                           = ?
+++ exited with 2 +++

我已经排除了很多多余的行,但问题的关键是它返回退出代码 2。

如果我执行 ping 而不进行 stracing,我会收到退出代码 0。

运行 strace 时我是否缺少一些选项?

答案1

这是一个有效的问题,它不是命令的重复strace sudo。过去曾经/bin/pingsetuid可执行文件,因此在过去的某个时间点,它可能是重复的,但今天它不是重复的。

sudosetuid可执行文件。 ping使用cap_net_raw。因此,我相信答案是strace也需要授予cap_net_raw

setcap cap_net_raw+p /usr/bin/strace

这对我有用。

或者...也许setuid/cap_net_raw情况是发行版的功能。我正在使用 RHEL 7。

相关内容