Gibt es einen bestimmten Datentyp zum Speichern von IP-Adressen in Java? Ich habe eine spezifische Funktionalitätsanforderung:
Ich weiß von java.net.inetaddress
, aber ich glaube, es gibt mir diese Funktionalität nicht. Irgendwelche Ideen?
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.
Ich würde java.net.InetAddress
oder eine seiner Unterklassen verwenden und einen benutzerdefinierten Vergleicher plus eine Bereichsklasse schreiben:
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.
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
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.
Wenn Ihr IP-Adressbereich im allgemeinen CIDR-Format dargestellt werden kann, können Sie Apache Common SubnetUtils
.