问题描述
java中利用isReachable来测试对端是否可达.方法中说isReachable优先使用ICMPrequest测试对方是否存在,如果没有权限的话将使用TCP在对端的7(echo)端口建立TCP连接。问题:截图发现本地一直向对端的7端口发送连接。这是不是意味着本地的ICMPrequest被关闭?另外使用isReachable探测www.baidu.com显示不可达。是因为百度防火墙拦截了么?那ping指令为什么可以直接到达?另外可以直接使用ping指令,为什么isReachable就不能发送ICMPrequest,两者应该是一回事吧?importjava.io.IOException;importjava.net.InetAddress;publicclassInetAddressTest{publicstaticvoidmain(String[]args)throwsIOException{InetAddressip=InetAddress.getByName("www.baidu.com");System.out.println("host是否可达"+ip.isReachable(4000));System.out.println(ip.getHostAddress());}}
解决方案
解决方案二:
isReachable和ping是一样的都是发送ICMP报文如果你isReachable不行而ping可以有可能是你的防火墙禁止了你的java发送ICMP报文需要设置下
解决方案三:
isReachable和ping都是基于ICMP请求回应的服务,那防火墙应该是一块拦截服务啊,怎么能拦截java程序呢?这个防火墙设置如何查看?谢谢
解决方案四:
isReachable使用的是TCP协议去连端口7.ping直接使用icmp协议去连接端口7.两个不一样,如果对端对连接协议做了限制,结果也不一样。
解决方案五:
引用3楼t_jl1979的回复:
isReachable使用的是TCP协议去连端口7.ping直接使用icmp协议去连接端口7.两个不一样,如果对端对连接协议做了限制,结果也不一样。
更正下,icmp没有端口号的说法。也就是ping是没有端口限制的。
解决方案六:
引用4楼t_jl1979的回复:
Quote: 引用3楼t_jl1979的回复:
isReachable使用的是TCP协议去连端口7.ping直接使用icmp协议去连接端口7.两个不一样,如果对端对连接协议做了限制,结果也不一样。更正下,icmp没有端口号的说法。也就是ping是没有端口限制的。
所以两个是完全不一样的,一个TCP协议检测,一个ICMP协议检测。
解决方案七:
引用2楼byrbupt的回复:
isReachable和ping都是基于ICMP请求回应的服务,那防火墙应该是一块拦截服务啊,怎么能拦截java程序呢?这个防火墙设置如何查看?谢谢
你说的是基于端口的设置但是现在很多是基于进程管理的也就是说你启动一个java去发送ICMP,这个和内置的应用服务肯定是不一样的http://blog.163.com/crazy20070501@126/blog/static/128659465201210910537998/你看下其中的“如果是添加自己的应用程序许可规则,可以通过下面的“允许允许另一程序”按钮进行添加,方法跟早期防火墙设置类似,点击后如下图”你也可以参考这里http://stackoverflow.com/questions/2448666/how-to-do-a-true-java-ping-from-windows/2448719#2448719中间人家是这么说的isReachable()willuseICMPECHOREQUESTsiftheprivilegecanbeobtained,otherwiseitwilltrytoestablishaTCPconnectiononport7(Echo)ofthedestinationhost.