Por que posso pingar 127.1?

10

Eu sei que o IPv6 permite que zeros consecutivos sejam omitidos. Mas e quanto ao IPv4? Não encontrei nenhuma referência a isso na Internet, incluindo a Wikipedia e o RFC 791 - Internet Protocol. Este documento sugere que "zeros à esquerda podem ser omitido "em um endereço IPv4 (procure pelo termo 'omitido'). Não é específico o suficiente.

Confira esta sessão de shell:

[~]$ ping -c 1 127.1
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[~]$ ping -c 1 127.0.1
PING 127.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms

--- 127.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
[~]$ ssh 127.1 :
The authenticity of host '127.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.1' (ECDSA) to the list of known hosts.
[email protected]'s password: 

Claramente, tanto o ping quanto o ssh entendem que 127.1 e 127.0.1 são iguais a 127.0.0.1. Onde isso é especificado?

    
por Alexandre de Verteuil 01.07.2013 / 06:22

2 respostas

13

Há uma postagem sobre estouro de pilha há cerca de um ano perguntando algo semelhante ( este post ).

A principal razão é como inet_aton() ( página de manual ) converte os octetos no endereço binário. / p>

a.b.c.d

Each of the four numeric parts specifies a byte of the address; the bytes are assigned in left-to-right order to produce the binary address.

a.b.c

Parts a and b specify the first two bytes of the binary address. Part c is interpreted as a 16-bit value that defines the rightmost two bytes of the binary address. This notation is suitable for specifying (outmoded) Class B network addresses.

a.b

Part a specifies the first byte of the binary address. Part b is interpreted as a 24-bit value that defines the rightmost three bytes of the binary address. This notation is suitable for specifying (outmoded) Class C network addresses.

a

The value a is interpreted as a 32-bit value that is stored directly into the binary address without any byte rearrangement.

Isso não é definido por POSIX.anything - mas está amplamente disponível.

    
por 01.07.2013 / 14:59
3

É uma relíquia dos velhos tempos do endereçamento classista. 127.1 significa rede 127 , host 1 . (E, sim, 127.257 é legal porque a rede 127 pode ter mais de 256 hosts.

    
por 01.07.2013 / 13:41