Ping
ping localhost 和 ping 127.0.0.1 有什麼區別?
執行以下操作以禁用 ping 回復後:
# sysctl net.ipv4.icmp_echo_ignore_all=1 # sysctl -p
我從 ping localhost 與 127.0.0.1 獲得不同的結果
# ping -c 3 localhost PING localhost(localhost (::1)) 56 data bytes 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.029 ms 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.035 ms 64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.101 ms --- localhost ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2042ms rtt min/avg/max/mdev = 0.047/0.072/0.101/0.022 ms
Ping 127.0.0.1 失敗:
ping -c 3 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. --- 127.0.0.1 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2032ms
為什麼這些結果不同?
該
ping
命令顯示將名稱解析到的地址。在這種情況下,它解析為 IPv6 本地主機地址,::1
. 另一方面,127.0.0.1
它是一個 IPv4 地址,因此它明確ping
使用 IPv4。您使用的
sysctl
僅影響 IPv4 ping,因此您會收到 的回复::1
,但不會收到127.0.0.1
.您從解析中獲得的地址
localhost
取決於您的 DNS 解析器的設置方式。localhost
可能設置在 中/etc/hosts
,但理論上您可以從實際的名稱伺服器中獲取它。至於如何丟棄 IPv6 ping,您可能需要查看
ip6tables
,因為 IPv6 似乎沒有類似sysctl
的。或者只是完全禁用 IPv6,如果您沒有在網路中使用它。(當然,這不是一個非常具有前瞻性的想法,但如果你目前沒有使用它,它是可行的。)