Todo mundo está complicando demais com RFCs, classes IP e coisas do tipo. Simplesmente execute alguns testes para ver como o comando ping
analisa a entrada IP pelo usuário (chaff externo removido):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
Como você pode ver, o comando ping
(no Windows) permite usar diferentes formatos de endereço IP. Um endereço IPv4 pode ser dividido em quatro partes ("com quatro pontos") da seguinte forma: A.B.C.D
e o comando ping
permite que você deixe um pouco de fora, preenchendo um padrão de 0
da seguinte forma:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
Se você fornecer apenas uma única parte, se ela for menor que 255 (o máximo de um octeto), ela será tratada como um octeto como acima, mas se for maior que 255, ela será convertida e rolada para o próximo campo (ou seja, mod 256
).
Existem alguns casos extremos, como fornecer mais de quatro partes, que parecem não funcionar (por exemplo, o ping do IP de google.com
não funcionará para 0.74.125.226.4
ou 74.125.226.4.0
).
Você também pode usar a notação hexadecimal em forma quadriculada e plana pontilhada, mas deve formatá-la com 0x
pré-pendente para cada octeto.
Portanto, existem várias maneiras de representar um endereço IP (IPv4). Você pode usar o formato quádruplo plano ou pontilhado (ou pontilhado-triplo, pontilhado-duplo ou até mesmo pontilhado-único), e para cada um, você pode usar (ou mesmo misturar e combinar) decimal, octal e hexadecimal. Por exemplo, você pode efetuar ping de google.com
das seguintes maneiras:
-
google.com
(nome de domínio) -
74.125.226.4
(decimal pontuado) -
1249763844
(decimal fixo) -
0112.0175.0342.0004
(octal pontilhado) -
011237361004
(octal plano) -
0x4A.0x7D.0xE2.0x04
(hexadecimais pontilhadas) -
0x4A7DE204
(hexa plana) -
74.0175.0xe2.4
(ಠ_ಠ)
(Ainda bem que o suporte à notação binária não foi adicionado!)
Aplicativo :
No seu caso, o ping 192.168.072
usa o terceiro formato da tabela acima ( A.B.0.C
), portanto, você está pingando 192.168.0.072
. Além disso, como você tem um zero à esquerda na última parte, ele é tratado como octal, que em decimal é 58.
Mistério solucionado.
Observe que, embora o comando ping
do Windows permita uma variedade tão grande de formatos para a entrada e interprete formatos não-padrão das maneiras vistas, isso não significa necessariamente que você pode usar esses formatos em todos os lugares. Alguns programas podem forçá-lo a fornecer todas as quatro partes de um quadrilátero pontilhado, outros podem não permitir misturar e combinar decimal e octal, e assim por diante.
Além disso, os endereços IPv6 complicam ainda mais a lógica de análise e a aceitabilidade do formato de entrada.
Adendo :
syss apontou que, se você usar um caractere inválido em um dos números (por exemplo, 8
ou 9
ao usar octal, g
no modo hexadecimal etc.), então ping
é inteligente o suficiente para reconhecer isso e interpretá-lo como uma string (-al? -ic?) URL em vez de um endereço IP numérico.
(Como alguém que teve inúmeros aneurismas e ataques cardíacos tentando escrever código supostamente “simples” para acomodar o número exponencialmente explosivo de permutações de valores de dados, eu aprecio que - parece - processar corretamente todos as variações de entrada, neste caso, pelo menos 3 1 +3 2 +3 3 +3 4 = 120 variações.)
Portanto, ao especificar 010.020.030.040
enviará ping 8.16.24.32
conforme o esperado, passar 010.020.030.080
para ping
será tratado como um URL em vez de um endereço IP, como foo.bar.baz.com
, o que poderia (mas infelizmente não) existir. Em outras palavras, ele tenta fazer ping no subdomínio 010
no subdomínio 020
no domínio 030
no domínio de nível superior 080
. No entanto, como 080
não é um TLD válido (como .com
, .net
e seus amigos), a conexão falha logo no primeiro passo.
O mesmo acontece com 090.010.010.010
, em que o caractere inválido está em um octeto diferente. Da mesma forma, 0xf.0xf.0xf.0xf
pings 15.15.15.15
, mas 0xh1.0x1.0xg0.0f
falha.
Ah, bem, acho que é isso que você recebe por não ser fluente em várias bases de números.
Provavelmente, é mais fácil e seguro apenas usar sempre endereços quad-com quatro pontos ("40q"? "quaddy-quad"? "cutie-q"?).
Então vá em frente e aprenda algumas bases numéricas . Você poderá se mostrar e ser a vida das festas e, como dizem, há 10 tipos de pessoas: aquelas que conhecem o binário e as que não conhecem.
Não vamos nem pensar sobre endereços IPv6; Eu acho que eles são um dos 111 selos !!!