Os endereços IP com e sem zeros à esquerda são os mesmos?

83

Eu tenho um sistema de segurança e a configuração de rede permite apenas um endereço IP de três dígitos. Eu não posso configurá-lo para 192.168.2.100 , em vez disso, eu tenho que usar 192.168.002.100 .

Esses dois endereços IP são diferentes? Preciso definir a LAN do meu roteador como 192.168.xxx.xxx para que isso funcione corretamente? Não consigo encontrar nenhuma informação sólida sobre isso.

    
por Brock Vond 28.12.2014 / 03:45

10 respostas

64

Supondo que todo o software que você está usando esteja usando ponto-decimal e sub-redes corretamente, sim, eles são os mesmos.

192.168.0.1, por exemplo, é apenas a notação ponto-decimal amigável do valor binário de ponto 11000000.10101000.00000000.00000001.

Se você digitar 192.168.0.1 ou 192.168.000.001, ambos serão iguais a 11000000.10101000.00000000.00000001

    
por 28.12.2014 / 03:56
99

Depende da ferramenta.

Para a maioria dos propósitos, os dois serão os mesmos, mas nem sempre.

Por exemplo, se você usar um número de 3 dígitos começando com zero (ou um de dois dígitos começando com zero, obrigado @ Dietrich-Epp), o ping irá assumir que os números são octal.

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users>ping 011.012.013.014

Pinging 9.10.11.12 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 9.10.11.12:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
    
por 28.12.2014 / 05:08
35

Depende das ferramentas ou funções que qualquer programa usa para analisar o endereço fornecido. Tanto a Microsoft quanto o Linux, bem como outros sistemas operacionais, usam uma POSIX compatível com a inet_addr() rotina para análise endereços.

Many TCP/IP programs such as Ping and FTP use the inet_addr() sockets function to translate IP address strings into 4-byte addresses. This function accepts an IP address in standard decimal, octal, and hexadecimal notation.
Microsoft KB115388 Ping and FTP Resolve IP Address with Leading Zero as Octal

The inet_addr() function converts the Internet host address cp from IPv4 numbers-and-dots notation into binary data in network byte order.

In all of the above forms, components of the dotted address can be specified in decimal, octal (with a leading 0), or hexadecimal, with a leading 0X). Addresses in any of these forms are collectively termed IPv4 numbers-and-dots notation. The form that uses exactly four decimal numbers is referred to as IPv4 dotted-decimal notation (or sometimes: IPv4 dotted-quad notation).
inet_addr(3): Internet address change routines - Linux man page

Assim, seu sistema específico pode exigir uma notação decimal de três dígitos para cada octeto, mas isso não é universal, e deve-se tomar cuidado para garantir que o endereço IP correto seja inserido.

É claro que apenas números válidos para cada tipo funcionarão. Números octais, hexadecimais ou decimais fora da faixa também falharão ou causarão problemas. Octal 088, hexadecimal 0xGG ou decimal 280 são todos exemplos inválidos.

    
por 28.12.2014 / 18:42
12

Como Lightness Races in Orbit e outros apontaram,

A página INET(3) man descreve inet_addr e inet_aton , as funções padrão usadas para converter a "notação de números e pontos IPv4 em forma binária". Diz

...components of the dotted address can be specified in decimal, octal (with a leading 0), or hexadecimal, with a leading 0X).

Então, tecnicamente, NÃO , um endereço IP com zeros à esquerda não é (sempre) o mesmo que um sem zeros à esquerda. No seu caso, no entanto, 192.168.2.100 e 192.168.002.100 são idênticos, porque 002 == 2 .

Qualquer interface de usuário que requeira que cada componente tenha exatamente três caracteres de comprimento, com zeros à esquerda incorretamente necessários quebrados.

    
por 30.12.2014 / 09:18
5

Algumas implementações consideram octetos com zeros à esquerda como decimal, outras implementações os consideram octal. Enquanto o octeto estiver no intervalo de 0 a 7, isso não fará diferença. Por exemplo, 192.168.002.100 seria interpretado como 192.168.2.100 em ambas as implementações.

Mas se você digitar um endereço como 192.168.010.100 , ele poderá ser interpretado como 192.168.10.100 ou 192.168.8.100 , dependendo da implementação. Também não é improvável que implementações existam, o que consideraria zeros à esquerda como um erro de sintaxe. Além disso, há cenários em que o software pode insistir que você tenha que usar a representação canônica por um motivo ou outro. Por todas essas razões, recomendo evitar zeros à esquerda quando você escreve um endereço IP.

Se você escrever um software que precise analisar um endereço IP, recomendo aceitar zeros à esquerda, mas enviar um aviso para um local apropriado quando acontecer.

Ligeiramente relacionadas, há implementações que permitem que você tenha menos de quatro componentes na notação pontilhada. Quando há menos de quatro componentes, o último componente tem mais de 8 bits e os componentes anteriores têm exatamente 8 bits. Por exemplo, 192.168.612 seria realmente uma maneira válida de escrever 192.168.2.100 . Mas, novamente, usar essa notação não é recomendado.

    
por 30.12.2014 / 19:54
0

Apenas uma pequena dica: Em alguns casos, é importante usar prefixos zero nos endereços IP. Um exemplo, é o Apache .htaccess nega regras.

Se você usa algo como

deny from 11.22.33.22

O Apache é tão estúpido que também bloqueia o acesso dos seguintes IPs:

111.22.33.22

11.22.33.221

211.22.33.221

e, em geral, qualquer endereço IP que inclua 11.22.33.22

Então, só para ter certeza de que você não bloqueará nenhum IP que você não quisesse bloquear, você deve usar:

deny from 011.022.033.022

para garantir que o Apache bloqueie o acesso somente a partir do endereço IP 11.22.33.22.

    
por 18.01.2016 / 07:27
0

tenha cuidado com isso. DEVE ser o mesmo, mas NÃO !
Eu não poderia encontrar uma explicação para isso, mas eu posso definitivamente dizer que no Windows e Linux endereços IP com e sem zeros à esquerda não são os mesmos! talvez isso tenha a ver com a conversão de outros formatos como hex ou binário.

da minha experiência com o windows e linux não é ferramenta dependend mas os dependend parece porque estou executando em algum problema usando ips como 10.08.03.100:

  • nota: "10.08.0.1" e 10.09.0.1 não foram encontrados
  • nota: "10.010.0.1" foi resolvido para 10.8.0.1

linux / debian7 / 8: mesmos resultados com a ferramenta "ping" e "snmpget"

user@test:~$ ping 10.7.0.1
PING 10.7.0.1 (10.7.0.1) 56(84) bytes of data.
^C
--- 10.7.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.07.0.1
PING 10.07.0.1 (10.7.0.1) 56(84) bytes of data.
^C
--- 10.07.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
^C
--- 10.8.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.08.0.1
**ping: unknown host 10.08.0.1**
user@test:~$ ping 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
^C
--- 10.9.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.09.0.1
ping: unknown host 10.09.0.1
user@test:~$ ping 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
^C
--- 10.10.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

user@test:~$ ping 10.010.0.1
PING 10.010.0.1 (10.8.0.1) 56(84) bytes of data.
^C
--- 10.010.0.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1001ms

windows7 / 8/10: mesmos resultados com a ferramenta "ping" e "telnet"

(desculpe, eu não tenho um windows em inglês na mão, erro diz que o host não pôde ser encontrado)

C:\Users\user>ping 10.7.0.1

Ping wird ausgeführt für 10.7.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.07.0.1

Ping wird ausgeführt für 10.7.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.8.0.1

Ping wird ausgeführt für 10.8.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.08.0.1
Ping-Anforderung konnte Host "10.08.0.1" nicht finden. Überprüfen Sie den Namen,

C:\Users\user>ping 10.9.0.1

Ping wird ausgeführt für 10.9.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.09.0.1
Ping-Anforderung konnte Host "10.09.0.1" nicht finden. Überprüfen Sie den Namen,

C:\Users\user>ping 10.10.0.1

Ping wird ausgeführt für 10.10.0.1 mit 32 Bytes Daten:
STRG-C
^C
C:\Users\user>ping 10.010.0.1

Ping wird ausgeführt für 10.8.0.1 mit 32 Bytes Daten:
STRG-C
^C
    
por 15.07.2017 / 17:30
-4

Os dois endereços IP são diferentes.

No entanto:

  • As pessoas geralmente as consideram iguais.
  • Alguns softwares os considerariam iguais.
  • Alguns softwares, em algumas plataformas, os considerarão diferentes.

Se isso soa confuso, é porque não há um padrão governando o modo como endereços IP devem ser escritos, então programadores diferentes em diferentes pontos da história e em plataformas diferentes, todos tinham idéias diferentes sobre o que deveria ser feito. / p>

Os endereços IP são, na verdade, binários, e as pessoas tendem a usar uma notação decimal pontilhada para representar os endereços IP. O software pode aceitar várias bases numéricas (isto é, decimal, octal, hex) e interpretar as coisas de várias formas com base em como você as escreve. Como você escreve, pode dizer ao software em que base você está escrevendo.

Eu aconselho: não use zeros à esquerda se você quiser usar a notação decimal pontuada. Alguns softwares consideram que um sinalizador significa que você está digitando um número octal. Se você pretende inserir um número decimal, não obterá os resultados esperados.

Eu pedi um pergunta semelhante e recebi algumas boas respostas, então se você quiser ler as RFCs, há boas informações a serem obtidas.

    
por 10.07.2015 / 16:20
-6

Deve funcionar de qualquer maneira. Você pode até fazer ping com números de três dígitos e o computador entenderá o endereço IP.

Editar : o Windows irá lê-lo como octal, isso só funciona para o Linux.

    
por 28.12.2014 / 03:46
-11

O zero inicial não tem sentido. Os octetos são (base-10) 0-255 números, não seqüências de caracteres.

Desde que eu não sei exatamente o que você está perguntando (ou que você sabe que pergunta perguntar :)): Dito isto, o IP # deve estar na mesma sub-rede da sua rede. Se você escolher 11.12.13.14 dentro de uma máscara de sub-rede de 192.168.0.0, esse dispositivo não poderá falar ou usar essa sub-rede.

    
por 28.12.2014 / 03:52

Tags