3 Stimmen

adr hat eine unzulässige Länge

Ich überprüfe, ob die ipAddress in der Kategorie "Privat" ist oder nicht. Also habe ich diese Methode unten geschrieben. Und ich erhalte die folgende Ausnahme.

java.net.UnknownHostException: addr is of illegal length
    at java.net.InetAddress.getByAddress(InetAddress.java:948)
    at java.net.InetAddress.getByAddress(InetAddress.java:1324)

ipAdresse (172.18.36.81) ist String

if(isPrivateIPAddress(ipAddress)) {

            return null;
        }

private static boolean isPrivateIPAddress(String ipAddress) {

    byte[] byteArray = null;
    InetAddress ia = null;
    try {
        byteArray = ipAddress.getBytes("UTF-16LE");
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    try {
        ia = InetAddress.getByAddress(byteArray);
    } catch (UnknownHostException e) {

        e.printStackTrace();
    }

    return ia.isSiteLocalAddress();
}

9voto

ruakh Punkte 167025

Ich glaube, Sie haben falsch verstanden, wie man eine IP-Adresse von String a byte[] . Der richtige Weg, dies zu tun, ist die Analyse von String zu einer Folge von int s, und dann jede davon in eine byte . Aber zum Glück, InetAddress hat bereits eine Methode, um das für Sie zu erledigen, also können Sie einfach schreiben:

private static boolean isPrivateIPAddress(String ipAddress)
{
    return InetAddress.getByName(ipAddress).isSiteLocalAddress();
}

(zusammen mit der von Ihnen gewünschten Gültigkeitsüberprüfung und Fehlerbehandlung).

Beachten Sie, dass die obige Methode auch Hostnamen behandelt, indem sie DNS-Lookup verwendet. Wenn Sie das nicht wollen, müssen Sie die IP-Adresse vorab überprüfen, indem Sie etwas wie das Folgende verwenden:

if(! Pattern.matches("(\\d{1,3}\\.){3}\\d{1,3}", ipAddress)
    throw new IllegalArgumentException();

wenn es für Sie in Ordnung ist, nur IPv4 zu unterstützen.

1voto

arcy Punkte 12464

Internetadressen, die an diese Methode übergeben werden, müssen in Byte-Arrays vorliegen, die entweder 4 oder 16 Bytes lang sind. Halten Sie nach der Dekodierung in einem Debugger an und sehen Sie nach, wie lang sie ist; die Ausnahme sagt Ihnen, dass sie nicht eine dieser beiden ist. Finden Sie dann heraus, wie Sie die Kodierung korrigieren können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X