Datentyp zum Speichern von IP-Adressen

8

Gibt es einen bestimmten Datentyp zum Speichern von IP-Adressen in Java? Ich habe eine spezifische Funktionalitätsanforderung:

  1. Wenn Sie einen IP-Bereich und eine IP-Adresse angeben, geben Sie true zurück, wenn sie in den IP-Bereich fallen, andernfalls false. Zum Beispiel: Bereich 10.10.10.1-10.10.11.255 und IP 10.10.10.192 sollte true zurückgeben.

Ich weiß von java.net.inetaddress , aber ich glaube, es gibt mir diese Funktionalität nicht. Irgendwelche Ideen?

    
n3o 30.12.2011, 08:45
quelle

7 Antworten

11

Eine IP (IPv4) ist 32 Bit (die gleiche Größe wie ein Int in Java). Da Sie Vergleiche mit unsignierten Ints durchführen möchten (wenn Sie IPs über 128.0.0.0 unterstützen müssen), müssen Sie stattdessen Longs verwenden.

%Vor%

Seit 168430081 <= 168430272 && 168430272 <= 168430591 , (also 168430272 ist zwischen 168430081 und 168430272) ist Ihre IP im Bereich.

    
Paulpro 30.12.2011, 08:54
quelle
6

Ich würde java.net.InetAddress oder eine seiner Unterklassen verwenden und einen benutzerdefinierten Vergleicher plus eine Bereichsklasse schreiben:

  • Das Warten und Debuggen ist einfacher mit dem expliziten Typ InetAddress statt nur mit Longs: Ihr Debugger zeigt tatsächlich "10.10.10.1" und nicht "168430081"
  • IPv6 ist entweder kein Thema oder kann ohne viel Aufwand implementiert werden.

Ein Nachteil von InetAddress ist, dass getByName zu einem DNS-Zugriff führt. Vielleicht möchten Sie sich auch die Guava % helfer-Klasse com.google.common.net.InetAddresses ansehen Vermeiden Sie die Strafe für DNS.

%Vor%     
nd. 30.12.2011 09:46
quelle
3

Für IPv4 würde ich int -Werte verwenden. Konvertiere die IP-Adresse in eine Nummer und du kannst Zahlenoperationen verwenden.

Wenn Sie Vergleiche zwischen 127.x.x.x (loop back lan) bis 128.x.x.x durchführen möchten, was unwahrscheinlich ist, aber Sie sagen, dass Sie das tun, können Sie den oberen Bit- und Bereichsvergleich umdrehen.

Verwenden Sie das Beispiel von @ user1. Überprüfen Sie, ob 210.210.210.192 zwischen 210.210.210.1 und 210.210.211.255

liegt %Vor%

Die letzte IP-Adresse liegt im Bereich, da -757935615 & lt; = -757935424 & amp; & amp; -757935424 & lt; = -757935105

    
Peter Lawrey 30.12.2011 08:55
quelle
2

Konvertiere die IP-Adresse in eine lange Ganzzahl. Siehe Gegeben eine Liste von IP-Adressen, Wie findest du Min, Max? für eine nette Diskussion zum selben Thema.

    
Muse 30.12.2011 08:52
quelle
2

versuche das:

%Vor%     
Ray Tayek 30.12.2011 09:25
quelle
2

Wenn Ihr IP-Adressbereich im allgemeinen CIDR-Format dargestellt werden kann, können Sie Apache Common SubnetUtils .

%Vor%     
Philip 08.03.2016 00:35
quelle
0

Benutze einfach das primitive long

von java     
Bohemian 30.12.2011 08:47
quelle

Tags und Links