Konverter IP mellem IPv4 og numerisk format i java
Det kan gøres ved at bruge InetAddress
som følger.
//Converts a String that represents an IP to an int.
InetAddress i= InetAddress.getByName(IPString);
int intRepresentation= ByteBuffer.wrap(i.getAddress()).getInt();
//This convert an int representation of ip back to String
i= InetAddress.getByName(String.valueOf(intRepresentation));
String ip= i.getHostAddress();
Her er en måde at konvertere IP til nummer. Jeg fandt det en gyldig måde at udføre opgaven i Java .
public long ipToLong(String ipAddress) {
String[] ipAddressInArray = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipAddressInArray.length; i++) {
int power = 3 - i;
int ip = Integer.parseInt(ipAddressInArray[i]);
result += ip * Math.pow(256, power);
}
return result;
}
Det er også sådan, du ville implementere det i Scala .
def convertIPToLong(ipAddress: String): Long = {
val ipAddressInArray = ipAddress.split("\\.")
var result = 0L
for (i <- 0 to ipAddressInArray.length-1) {
val power = 3 - i
val ip = ipAddressInArray(i).toInt
val longIP = (ip * Math.pow(256, power)).toLong
result = result +longIP
}
result
}
Kodestykket leveret af QuakeCore vil kaste "java.net.UnknownHostException:Unable to resolve host" på den del, hvor du vil konvertere det tilbage til streng
men ideen om at bruge InetAddress-klassen er korrekt. Her er, hvad du vil gøre:
try {
InetAddress inetAddressOrigin = InetAddress.getByName("78.83.228.120");
int intRepresentation = ByteBuffer.wrap(inetAddressOrigin.getAddress()).getInt(); //1314120824
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(intRepresentation);
byte[] b = buffer.array();
InetAddress inetAddressRestored = InetAddress.getByAddress(b);
String ip = inetAddressRestored.getHostAddress();//78.83.228.120
} catch (UnknownHostException e) {
e.printStackTrace(); //
}
P.S.:Hvis du vil gøre dette for en liste over IP'er, skal du validere dem for at være sikker på, at de ikke har undernetmasker, for eksempel:78.83.228.0/8
I dette tilfælde bliver du nødt til at udjævne dem:78.83.228.0/8
=>
78.83.228.0
78.83.228.1
78.83.228.2
78.83.228.3
78.83.228.4
78.83.228.5
78.83.228.6
78.83.228.7