Investigating False Reachability from InetAddress.isReachable()
InetAddress, a Java class for working with IP addresses, provides methods for various network-related tasks. One such method is isReachable(), used to determine if a host is accessible via a network. However, in some cases, this method might return false even when pinging the IP address succeeds.
Consider the following code snippet that attempts to check the reachability of a host:
InetAddress byName = InetAddress.getByName("173.39.161.140"); System.out.println(byName); System.out.println(byName.isReachable(1000));
If you run this code, you might encounter a situation where isReachable() returns false, despite the fact that you can ping the specified IP address.
To address this issue, an alternative approach is presented, which remains platform-independent and leverages information about open ports on the remote machine.
private static boolean isReachable(String addr, int openPort, int timeOutMillis) { // Any Open port on other machine // openPort = 22 - ssh, 80 or 443 - webserver, 25 - mailserver etc. try (Socket soc = new Socket()) { soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); return true; } catch (IOException ex) { return false; } }
By utilizing this code, you can determine the reachability of a host by attempting to establish a connection to a known open port on that host.
Update:
For a more concise version of the code snippet, refer to the following:
private static boolean isReachable(String addr, int openPort, int timeOutMillis) { try (Socket soc = new Socket()) { soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); return true; } catch (IOException ex) { return false; } }
By employing this approach, you can reliably determine the reachability of a host, even in scenarios where InetAddress.isReachable() does not provide an accurate indication.
The above is the detailed content of Why Does `InetAddress.isReachable()` Sometimes Return False Even When a Host is Pingable?. For more information, please follow other related articles on the PHP Chinese website!