Todo mundo está complicando demais com RFCs, classes de IP e outras coisas. Simplesmente execute alguns testes para ver como o ping
comando analisa a entrada IP pelo usuário (remoção estranha de palha):
> 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 ping
comando (no Windows) permite usar diferentes formatos de endereço IP. Um endereço IPv4 pode ser dividido em quatro partes (“dotted-quad”) da seguinte maneira: A.B.C.D
e o ping
comando permite que você deixe de fora alguns, preenchendo o padrão da 0
seguinte maneira:
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 peça, se estiver abaixo de 255 (o máximo para um octeto), ela será tratada como um octeto como acima, mas se for maior que 255, será convertida e rolada para o próximo campo (ou seja mod 256
).
Existem alguns casos extremos, como fornecer mais de quatro partes não parece funcionar (por exemplo, google.com
o IP do ping não funcionará para um 0.74.125.226.4
ou outro 74.125.226.4.0
).
Você também pode usar a notação hexadecimal na forma de quad-dotted e flat, mas deve formatá-la pré-pendente 0x
para cada octeto.
Portanto, existem várias maneiras de representar um endereço IP (IPv4). Você pode usar o formato plano ou quadriculado (ou pontilhado triplo, pontilhado duplo ou mesmo pontilhado único) e, para cada um, pode usar (ou até misturar e combinar) decimal, octal e hexadecimal. Por exemplo, você pode executar ping google.com
das seguintes maneiras:
google.com
(nome do domínio)
74.125.226.4
(decimal pontilhado)
1249763844
(decimal simples)
0112.0175.0342.0004
(octal pontilhado)
011237361004
(octal plano)
0x4A.0x7D.0xE2.0x04
(hexadecimal pontilhado)
0x4A7DE204
(hexágono plano)
74.0175.0xe2.4
(ಠ_ಠ)
(Graças a Deus que o suporte à notação binária não foi adicionado!)
Aplicação :
No seu caso, o ping 192.168.072
usa o terceiro formato na tabela acima ( A.B.0.C
), então você está realmente 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 resolvido.
Observe que, embora o ping
comando do Windows permita uma variedade tão grande de formatos para a entrada e interprete formatos fora do padrão da maneira vista, isso não significa necessariamente que você possa usar esses formatos em qualquer lugar. Alguns programas podem forçar você a fornecer todas as quatro partes de um quadriculado pontilhado, outros podem não permitir a mistura e correspondência de decimal e octal, e assim por diante.
Além disso, os endereços IPv6 complicam ainda mais a aceitabilidade da lógica de análise e do formato de entrada.
Adendo :
syss apontou que, se você usar um caractere inválido em um dos números (por exemplo, um 8
ou 9
ao usar octal, a g
no modo hexadecimal etc.), então ping
é inteligente o suficiente para reconhecer isso e interpretá-lo como uma string (-al? URL em vez de como um endereço IP numérico.
(Como alguém que teve vários 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 ele parece processar corretamente todas as variações de entrada; caso, pelo menos 3 1 +3 2 +3 3 +3 4 = 120 variações.)
Portanto, ao especificar 010.020.030.040
o ping 8.16.24.32
como esperado, a passagem 010.020.030.080
para ping
será tratada como uma URL em vez de um endereço IP - como o foo.bar.baz.com
que poderia (mas infelizmente não existe). Em outras palavras, ele tenta executar 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 na primeira etapa.
O mesmo acontece com 090.010.010.010
o caractere inválido em um octeto diferente. Da mesma forma, 0xf.0xf.0xf.0xf
pings 15.15.15.15
, mas 0xh1.0x1.0xg0.0f
falha.
Bem, acho que é isso que você ganha por não ser fluente em várias bases de números.
Provavelmente é mais fácil e seguro garantir sempre o uso de endereços com quatro pontos pontilhados ("40q"? "Quaddy-quad"? "Cutie-q"?).
Então vá em frente e aprenda algumas bases numéricas . Você será capaz de se exibir e ser a vida das festas e, como se costuma dizer, existem 10 tipos de pessoas: quem conhece binário e quem não conhece.
Não vamos nem pensar em endereços IPv6; Eu acho que eles são um dos 111 selos !!!