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();
}
source to share
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.
source to share