首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论IP地址是什么,isReachable始终返回true

问无论IP地址是什么,isReachable始终返回true
EN

Stack Overflow用户
提问于 2012-07-21 05:38:56
回答 1查看 4.3K关注 0票数 3

因此,我一直在使用isReachable在我的java代码中"ping“地址。这段代码似乎是每个人都在使用的:

代码语言:javascript
复制
    try
    {
    InetAddress address = InetAddress.getByName("172.16.2.0");
    // Try to reach the specified address within the timeout
    // periode. If during this periode the address cannot be
    // reach then the method returns false.
    boolean reachable = address.isReachable(10000);
    System.out.println("Is host reachable? " + reachable);
    } catch (Exception e)
    {
    e.printStackTrace();
    }

我的问题是,无论我使用什么作为我的IP地址,它总是返回true。即使我将其更改为空字符串。你知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-21 05:49:05

一种通过java.net.InetAddress.isReachable()方法检查某个地址是否可达的方法。这些方法的实现是本机的,并尝试尽最大努力"ping“由InetAddress表示的地址。

令人惊讶的是,在java.net.InetAddress.isReachable()的Windows和Linux/Unix实现之间有许多不同之处。

虽然看起来很奇怪,但Windows并不正式支持ICMP "ping“系统调用。因此,Java SE 5实现尝试在端口7( echo服务)上打开TCP套接字,并希望得到某种类型的响应。

而Linux/Unix则支持ICMP "ping“系统调用。因此,java.net.InetAddress.isReachable()的实现首先尝试执行"ping“系统调用;如果此操作失败,它将回退到尝试打开端口7上的TCP套接字。

事实证明,在Linux/Unix中,ping系统调用需要根权限,因此大多数时候java.net.InetAddress.isReachable()都会失败,因为许多Java程序不是以根权限运行的。

正确的方法是ICMP协议。这是ping内部使用的。建议查看以收集知识并继续操作。

来自: Simone Bordet's Blog

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11587271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档