I am checking whether the ipAddress is in 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) is 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();
}
I think you’ve misunderstood how to convert an IP address from
Stringtobyte[]. The proper way to do that is to parseStringto a sequence ofints, and then cast each of those to abyte. But fortunately,InetAddressalready has a method to handle that for you, so you can just write:(together with whatever validity-checking and error-handling you want).
Note that the above will also handle hostnames, by using DNS lookup. If you don’t want that, you’ll need to pre-check the IP-address, using something like this:
if you’re O.K. with only supporting IPv4.