isReachable 与 ping的关系

byrbupt 2015-01-26 12:06:37
java中 利用isReachable来测试对端是否可达.

方法中说isReachable 优先使用 ICMP request 测试 对方是否存在,如果没有权限的话 将使用TCP在对端的7 (echo)端口建立TCP连接。

问题:截图发现 本地一直向 对端的7端口发送连接。 这是不是意味着 本地的 ICMP request 被关闭?
另外 使用 isReachable探测www.baidu.com 显示不可达。是因为百度防火墙拦截了么? 那ping 指令为什么可以直接到达?另外可以直接使用ping 指令,为什么isReachable 就不能发送 ICMP request, 两者应该是一回事吧?
import java.io.IOException;
import java.net.InetAddress;

public class InetAddressTest {
public static void main(String[] args) throws IOException {
InetAddress ip = InetAddress.getByName("www.baidu.com");
System.out.println("host是否可达" + ip.isReachable(4000));
System.out.println(ip.getHostAddress());
}
}
...全文
561 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
乔巴好萌 2015-01-26
  • 打赏
  • 举报
回复
引用 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() will use ICMP ECHO REQUESTs if the privilege can be obtained, otherwise it will try to establish a TCP connection on port 7 (Echo) of the destination host.
冥王之锤 2015-01-26
  • 打赏
  • 举报
回复
引用 4 楼 t_jl1979 的回复:
[quote=引用 3 楼 t_jl1979 的回复:] isReachable 使用的是TCP协议去连端口7. ping直接使用icmp协议去连接端口7. 两个不一样,如果对端对连接协议做了限制,结果也不一样。
更正下,icmp没有端口号的说法。也就是ping是没有端口限制的。[/quote] 所以两个是完全不一样的,一个TCP协议检测,一个ICMP协议检测。
冥王之锤 2015-01-26
  • 打赏
  • 举报
回复
引用 3 楼 t_jl1979 的回复:
isReachable 使用的是TCP协议去连端口7. ping直接使用icmp协议去连接端口7. 两个不一样,如果对端对连接协议做了限制,结果也不一样。
更正下,icmp没有端口号的说法。也就是ping是没有端口限制的。
冥王之锤 2015-01-26
  • 打赏
  • 举报
回复
isReachable 使用的是TCP协议去连端口7. ping直接使用icmp协议去连接端口7. 两个不一样,如果对端对连接协议做了限制,结果也不一样。
byrbupt 2015-01-26
  • 打赏
  • 举报
回复
isReachable和ping 都是 基于 ICMP 请求回应的服务,那防火墙应该是一块拦截 服务啊,怎么能拦截 java程序呢? 这个防火墙设置如何查看? 谢谢
乔巴好萌 2015-01-26
  • 打赏
  • 举报
回复
isReachable和ping是一样的 都是发送ICMP报文 如果你isReachable不行 而ping可以 有可能是你的防火墙 禁止了你的java发送ICMP报文 需要设置下

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧