Addr is illegal

I am checking if ipAddress is in a private category or not. So I wrote this method below. And I am getting this as an exception -

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

      

ipAddress (172.18.36.81) - 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();
}

      

+3


source to share


2 answers


I think you misunderstood how to convert an IP address from String

to byte[]

. The correct way to do this is to parse s String

into a sequence int

and then translate each of them into byte

. But luckily it InetAddress

already has a method to handle this for you, so you can simply write:

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

      

(along with any validation and error handling).



Note that the above also handles hostnames using DNS lookups. If you don't want this, you need to check the IP address beforehand using something like this:

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

      

if you are OK with IPv4 only support.

+8


source


Internet addresses submitted to this method must be in byte arrays of 4 or 16 bytes. Stop this in the debugger after your decoding and see how long it takes; the exception tells you that it is not one of these two. Then figure out how to fix the encoding.



+1


source







All Articles