終了コード4では、Fpingは機能しません。
一方:
$ fping 8.8.8.8
$
$ echo $?
4
$ fping -h
$ echo $?
4
次に、fpingコードでif-sに関連するいくつかの詳細フラグに注釈を付けてビルドし、次のことを確認します。
./build/usr/local/sbin/fping: icmp: unknown protocol
ストレス:
execve("/usr/bin/fping", ["fping", "ya.ru"], 0xbec606ec /* 23 vars */) = 0
brk(NULL) = 0x1268000
uname({sysname="Linux", nodename="blablabla.com", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f8c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=40040, ...}) = 0
mmap2(NULL, 40040, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f82000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\371p\1\0004\0\0\0"..., 512) = 512
_llseek(3, 944172, [944172], SEEK_SET) = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 3000) = 3000
_llseek(3, 937548, [937548], SEEK_SET) = 0
read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\3\f"..., 53) = 53
fstat64(3, {st_mode=S_IFREG|0755, st_size=947172, ...}) = 0
mmap2(NULL, 1013128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e6e000
mprotect(0xb6f50000, 65536, PROT_NONE) = 0
mmap2(0xb6f60000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe2000) = 0xb6f60000
mmap2(0xb6f63000, 9608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6f63000
close(3) = 0
set_tls(0xb6f8cdd0) = 0
mprotect(0xb6f60000, 8192, PROT_READ) = 0
mprotect(0x515000, 4096, PROT_READ) = 0
mprotect(0xb6f8e000, 4096, PROT_READ) = 0
munmap(0xb6f82000, 40040) = 0
brk(NULL) = 0x1268000
brk(0x1289000) = 0x1289000
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=627, ...}) = 0
read(3, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 627
read(3, "", 4096) = 0
close(3) = 0
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=40040, ...}) = 0
mmap2(NULL, 40040, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f82000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/arm-linux-gnueabihf/libnss_compat.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\254\r\0\0004\0\0\0"..., 512) = 512
_llseek(3, 21220, [21220], SEEK_SET) = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
_llseek(3, 20892, [20892], SEEK_SET) = 0
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51) = 51
fstat64(3, {st_mode=S_IFREG|0644, st_size=22300, ...}) = 0
mmap2(NULL, 87672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e58000
mprotect(0xb6e5d000, 61440, PROT_NONE) = 0
mmap2(0xb6e6c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0xb6e6c000
close(3) = 0
mprotect(0xb6e6c000, 4096, PROT_READ) = 0
munmap(0xb6f82000, 40040) = 0
exit_group(4) = ?
+++ exited with 4 +++
ベストアンサー1
これは、プロセスの機能やファイル権限(インターネット上のどこにも記載されているsetuidビット)とは何の関係もありません。また、ファイアウォールルール、ICMP ブロックなどは含まれません。そしてカーネルは明らかにICMPが何であるかを知っています。たとえば、
$ sysctl net.ipv4 | grep icmp | wc -l
8
そして
$ grep ICMP /etc/protocols
icmp 1 ICMP # internet control message protocol
libnss_compat.so.2と同様に、nsswitch.confが開かれ、読み込まれた後にプロセスが終了することがわかります。 nsswitch.confを開き、以下を確認してください。
protocols: compat
services: compat
従来のエミュレーションオプション、一部のディストリビューションではデフォルトです。それらを次に変えてください。文書。
今
$ fping 8.8.8.8
8.8.8.8 is alive