it-swarm.com.de

Sind IP-Adressen mit und ohne führende Nullen gleich?

Ich habe ein Sicherheitssystem und die Netzwerkeinstellung erlaubt nur eine dreistellige IP-Adresse. Ich kann es nicht auf 192.168.2.100 setzen, sondern muss 192.168.002.100 verwenden.

Unterscheiden sich diese beiden IP-Adressen? Muss ich das LAN meines Routers so einstellen, dass es nur 192.168.xxx.xxx ist, damit dies korrekt funktioniert? Ich kann keine soliden Informationen darüber finden.

88
Brock Vond

Das hängt vom Werkzeug ab.

Für die meisten Zwecke sind die beiden gleich, aber nicht immer.

Wenn Sie beispielsweise eine dreistellige Zahl verwenden, die mit einer Null beginnt (oder eine zweistellige Zahl, die mit einer Null beginnt, danke @ Dietrich-Epp), geht ping davon aus, dass die Zahlen oktal sind.

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),
101

Angenommen, die gesamte von Ihnen verwendete Software verwendet Punkt-Dezimal und Subnetze korrekt. Ja, sie sind identisch.

192.168.0.1 ist beispielsweise nur die freundliche Punkt-Dezimal-Notation des Punkt-Binärwerts 11000000.10101000.00000000.00000001.

Unabhängig davon, ob Sie es als 192.168.0.1 oder 192.168.000.001 eingeben, sind beide gleich 11000000.10101000.00000000000001

65
Austin T French

Dies hängt von den Tools oder Funktionen ab, die ein bestimmtes Programm zum Analysieren der angegebenen Adresse verwendet. Sowohl Microsoft als auch Linux und andere Betriebssysteme verwenden eine POSIX compatibleinet_addr()-Routine zum Parsen von Adressen.

Viele TCP/IP-Programme wie Ping und FTP verwenden die Sockets-Funktion inet_addr (), um IP-Adresszeichenfolgen in 4-Byte-Adressen zu übersetzen. Diese Funktion akzeptiert eine IP-Adresse in Standard-Dezimal-, Oktal- und Hexadezimalschreibweise.
Microsoft KB115388 Ping und FTP lösen IP-Adresse mit führender Null als Oktal auf

Die Funktion inet_addr () konvertiert die Internet-Host-Adresse cp aus der IPv4-Zahlen-und-Punkt-Notation in binäre Daten in der Reihenfolge der Netzwerkbytes.

In allen obigen Formen können Komponenten der gepunkteten Adresse dezimal, oktal (mit einer führenden 0) oder hexadezimal mit einer führenden 0X angegeben werden. Adressen in jeder dieser Formen werden zusammenfassend als IPv4 Zahlen- und Punktnotation bezeichnet. Die Form, in der genau vier Dezimalzahlen verwendet werden, wird als IPv4-Punkt-Dezimal-Notation (oder manchmal als IPv4-Punkt-Quad-Notation) bezeichnet.
inet_addr (3): Routinen zum Ändern der Internetadresse - Linux man page

Aus diesem Grund erfordert Ihr spezielles System möglicherweise eine dreistellige Dezimalschreibweise für jedes Oktett. Dies ist jedoch nicht allgemein gültig. Achten Sie darauf, dass die richtige IP-Adresse eingegeben wird.

Natürlich funktionieren nur gültige Nummern für jeden Typ. Außerhalb des Bereichs liegende Oktal-, Hexa- oder Dezimalzahlen schlagen ebenfalls fehl oder verursachen Probleme. Octal 088, Hex 0xGG oder Decimal 280 sind ungültige Beispiele.

37
cde

Als Lightness Races in Orbit und andere haben darauf hingewiesen,

Die INET(3) man page beschreibt inet_addr und inet_aton, die Standardfunktionen für die Konvertierung der "IPv4-Notation von Zahlen und Punkten in Binärform". Es sagt

... Komponenten der gepunkteten Adresse können als Dezimalzahl, Oktalzahl (mit führender 0) oder Hexadezimalzahl (mit führender 0X) angegeben werden.

Technisch gesehen istNOeine IP-Adresse mit führenden Nullen nicht (immer) dieselbe wie eine ohne führende Nullen. In Ihrem Fall sind 192.168.2.100 und 192.168.002.100 jedoch identisch, da 002 == 2.

Jede Benutzeroberfläche, für die jede Komponente genau drei Zeichen lang sein muss und die falsch angeforderte führende Null enthält, ist fehlerhaft.

13

Einige Implementierungen betrachten Oktette mit führenden Nullen als dezimal, andere als oktal. Solange sich das Oktett im Bereich von 0 bis 7 befindet, macht dies keinen Unterschied. So würde beispielsweise 192.168.002.100 in beiden Implementierungen als 192.168.2.100 interpretiert.

Wenn Sie jedoch eine Adresse als 192.168.010.100 eingeben, kann sie je nach Implementierung entweder als 192.168.10.100 oder als 192.168.8.100 interpretiert werden. Es ist auch nicht unwahrscheinlich, dass Implementierungen existieren, bei denen führende Nullen als Syntaxfehler angesehen werden. Darüber hinaus gibt es Szenarien, in denen Software möglicherweise darauf besteht, dass Sie die kanonische Darstellung aus dem einen oder anderen Grund verwenden müssen. Aus all diesen Gründen empfehle ich, beim Schreiben einer IP-Adresse führende Nullen zu vermeiden.

Wenn Sie Software schreiben, die eine IP-Adresse analysieren muss, würde ich empfehlen, führende Nullen zu akzeptieren, aber in diesem Fall eine Warnung an eine geeignete Stelle auszugeben.

Etwas verwandt gibt es Implementierungen, die es Ihnen ermöglichen, weniger als vier Komponenten in der gepunkteten Notation zu haben. Wenn es weniger als vier Komponenten gibt, hat die letzte Komponente mehr als 8 Bits und die früheren Komponenten haben genau 8 Bits. Zum Beispiel wäre 192.168.612 eine gültige Möglichkeit, 192.168.2.100 zu schreiben. Die Verwendung dieser Notation wird jedoch nicht empfohlen.

6
kasperd

Sei vorsichtig damit. esSOLLTEgleich sein, aber es istNICHT!
Ich konnte keine Erklärung dafür finden, aber ich kann definitiv sagen, dass auf Windows und Linux IP-Adressen mit und ohne führende Nullen nicht dasselbe sind! Vielleicht hat dies mit der Konvertierung von anderen Formaten wie Hex oder Binär zu tun.

aus meiner Erfahrung mit Windows und Linux ist es nicht toolabhängig, sondern os-abhängig, da ich mit IPS wie 10.08.03.100 ein Problem habe:

  • hinweis: "10.08.0.1" und 10.09.0.1 konnten nicht gefunden werden
  • hinweis: "10.010.0.1" wird in 10.8.0.1 aufgelöst

Linux/Debian7/8: gleiche Ergebnisse mit Tool "Ping" und "Snmpget"

[email protected]:~$ 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

[email protected]:~$ 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

[email protected]:~$ 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

[email protected]:~$ ping 10.08.0.1
**ping: unknown Host 10.08.0.1**
[email protected]:~$ 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

[email protected]:~$ ping 10.09.0.1
ping: unknown Host 10.09.0.1
[email protected]:~$ 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

[email protected]:~$ 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: gleiche ergebnisse mit tool "ping" und "telnet"

(Entschuldigung, ich habe kein englisches Fenster zur Hand, der Fehler sagt, dass der Host nicht gefunden werden konnte.)

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
0
vchrizz

Nur ein kleiner Tipp: In einigen Fällen ist es wichtig, in den IP-Adressen Null-Präfixe zu verwenden. Ein Beispiel ist Apache .htaccess Deny Rules.

Wenn du so etwas verwendest

deny from 11.22.33.22

Apache ist so dumm, dass auch der Zugriff von den folgenden IPs blockiert wird:

111.22.33.22

11.22.33.221

211,22,33,221

und im Allgemeinen jede IP-Adresse, die11.22.33.22 enthält

Um sicherzugehen, dass Sie keine IP-Adressen blockieren, die Sie nicht blockieren wollten, sollten Sie Folgendes verwenden:

deny from 011.022.033.022

um sicherzugehen, dass Apache den Zugriff nur von der IP-Adresse 11.22.33.22 blockiert.

0
Nick Gar