我使用这部分代码来ping通Java中的ip地址,但只有ping通本地主机才能成功,而对于其他主机,程序会说该主机不可访问。我禁用了防火墙,但是仍然有此问题
public static void main(String[] args) throws UnknownHostException, IOException { String ipAddress = "127.0.0.1"; InetAddress inet = InetAddress.getByName(ipAddress); System.out.println("Sending Ping Request to " + ipAddress); System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable"); ipAddress = "173.194.32.38"; inet = InetAddress.getByName(ipAddress); System.out.println("Sending Ping Request to " + ipAddress); System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable"); }
输出为:
Sending Ping Request to 127.0.0.1 Host is reachable Sending Ping Request to 173.194.32.38 Host is NOT reachable
InetAddress.isReachable()根据javadoc:
InetAddress.isReachable()
“如果可以获取特权,典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。”
选项1(ICMP)通常需要管理(root)权限。
(root)