Ping并使用三个八位字节的ipv4地址。 为什么它工作?

意外,我有一个错字,发现我可以ping和SSH到IP地址10.8.290 …正确的一个八位字节丢失。 有人可以向我解释吗? 这是协议的一部分还是一些linux-black-magic(我正在使用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的值。 一个字节可以存储从0255值,给出256值。 由于IPv4地址是一个4字节的值,传递290到第三个字节会导致整数溢出到第四个字节 – > 290256 => 34

它与协议“功能”无关。 ping只是不验证target命令行参数的单个八位字节的值,只是将其传递到较低级别的函数inet_aton()inet_aton()表示ascii到数字)。 这导致了ping 10.8.1.34

我不确定,但我期望其他版本的ping(在Windows,BSD)表现相同。