Por que posso executar ping em 127.1?


11

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

Confira esta sessão do 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.
alex@127.1's password: 

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



1
Isso é um estilo de notação antiga, mas sim: ela não funciona :-)
— Sander Steffann

1
@nerdwaller: Envie isso como resposta. (Os pontos de bónus se você descobrir o porquê ping 0.0.0.0ou ping 0funciona da mesma maneira ...)
— user1686

Respostas:


14

Há uma postagem Stack Overflow de cerca de um ano atrás, perguntando algo semelhante ( esta postagem ).

O principal motivo é como inet_aton()( página de manual ) converte os octetos no endereço binário.

abcd

Cada uma das quatro partes numéricas especifica um byte do endereço; os bytes são atribuídos na ordem da esquerda para a direita para produzir o endereço binário.

abc

As partes aeb especificam os dois primeiros bytes do endereço binário. A parte c é interpretada como um valor de 16 bits que define os dois bytes mais à direita do endereço binário. Essa notação é adequada para especificar endereços de rede Classe B (obsoletos).

ab

A parte a especifica o primeiro byte do endereço binário. A parte b é interpretada como um valor de 24 bits que define os três bytes mais à direita do endereço binário. Essa notação é adequada para especificar endereços de rede Classe C (obsoletos).

uma

O valor a é interpretado como um valor de 32 bits que é armazenado diretamente no endereço binário sem nenhum rearranjo de bytes.

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


1
Incrível, e também verifiquei a postagem que você vinculou no Stack Overflow. Ele teve ótimas idéias sobre como diferentes sistemas numéricos podem ser usados. A Wikipedia diz que 0.0.0.0/8 é a rede atual. Presumo que 0.0.0.0/32 deve ser o host atual e que o ping espera apenas / 32 "redes". Eu não encontrei uma referência explícita embora.
— Alexandre de Verteuil 01/07/2013

2
@AlexandredeVerteuil: o ping espera hosts , não redes ... então sim, / 32 para IPv4.
— user1686

3

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


127,257 significado em particular 127.0.1.1, um endereço que eu realmente ver em ativador servidor KMS antigo que trabalhou no Windows 8.0
— Paul Stelian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.