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.