Java >> Java tutorial >  >> Java

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


Java tag