Ping 并使用三个八位字节 ipv4 地址。为什么它有效?
Ping and use three octet ipv4 addresses. Why is it working?
我不小心打错了字,发现我可以 ping 和 ssh 到 IP 地址 10.8.290
... 缺少一个八位字节。有人可以向我解释吗?这是协议的一部分还是某些 linux-黑魔法(我使用的是 Debian)?
user@ws:~$ ping -c3 10.8.290
PING 10.8.290 (10.8.1.34) 56(84) bytes of data.
64 bytes from 10.8.1.34: icmp_req=1 ttl=62 time=0.910 ms
64 bytes from 10.8.1.34: icmp_req=2 ttl=62 time=0.686 ms
64 bytes from 10.8.1.34: icmp_req=3 ttl=62 time=0.708 ms
--- 10.8.290 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.686/0.768/0.910/0.100 ms
user@ws:~$ ssh root@10.8.290
The authenticity of host '10.8.290 (10.8.1.34)' can't be established.
ECDSA key fingerprint is 21:bd:7e:fb:1e:6d:1e:c1:e9:11:c0:a9:73:a8:cf:85.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.
之所以有效,是因为您对 IP 地址的第三个字节使用了值 290
。一个字节可以存储从 0
到 255
的值,给出 256
值。由于 IPv4 地址是一个 4 字节值,将 290
传递给第三个字节会导致整数溢出到第 4 个字节 -> 290
- 256
=> 34
它与 协议 "feature" 无关。 ping
只是不验证 target
命令行参数的各个八位字节的值,只是将其传递给较低级别的 C 函数 inet_aton()
(aton 表示 ascii 到数字)。这导致 ping 10.8.1.34
。
我不确定,但我希望其他版本的 ping(在 Windows、BSD 上)表现相同。
我不小心打错了字,发现我可以 ping 和 ssh 到 IP 地址 10.8.290
... 缺少一个八位字节。有人可以向我解释吗?这是协议的一部分还是某些 linux-黑魔法(我使用的是 Debian)?
user@ws:~$ ping -c3 10.8.290
PING 10.8.290 (10.8.1.34) 56(84) bytes of data.
64 bytes from 10.8.1.34: icmp_req=1 ttl=62 time=0.910 ms
64 bytes from 10.8.1.34: icmp_req=2 ttl=62 time=0.686 ms
64 bytes from 10.8.1.34: icmp_req=3 ttl=62 time=0.708 ms
--- 10.8.290 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.686/0.768/0.910/0.100 ms
user@ws:~$ ssh root@10.8.290
The authenticity of host '10.8.290 (10.8.1.34)' can't be established.
ECDSA key fingerprint is 21:bd:7e:fb:1e:6d:1e:c1:e9:11:c0:a9:73:a8:cf:85.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.
之所以有效,是因为您对 IP 地址的第三个字节使用了值 290
。一个字节可以存储从 0
到 255
的值,给出 256
值。由于 IPv4 地址是一个 4 字节值,将 290
传递给第三个字节会导致整数溢出到第 4 个字节 -> 290
- 256
=> 34
它与 协议 "feature" 无关。 ping
只是不验证 target
命令行参数的各个八位字节的值,只是将其传递给较低级别的 C 函数 inet_aton()
(aton 表示 ascii 到数字)。这导致 ping 10.8.1.34
。
我不确定,但我希望其他版本的 ping(在 Windows、BSD 上)表现相同。