Ping

ping localhost 和 ping 127.0.0.1 有什麼區別?

  • March 17, 2018

執行以下操作以禁用 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,如果您沒有在網路中使用它。(當然,這不是一個非常具有前瞻性的想法,但如果你目前沒有使用它,它是可行的。)

引用自:https://unix.stackexchange.com/questions/430207