gpt4 book ai didi

java - Java 中的 isReachable 似乎没有按照预期的方式工作

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:13 25 4
gpt4 key购买 nike

我正在使用 Clojure,但我可以阅读 Java,因此这不是 Clojure 特定的问题。这似乎甚至无法在 Java 中运行。

我正在尝试使用 isReachable 实现一些“ping”功能。我使用的代码是这样的:

(.isReachable (java.net.InetAddress/getByName "www.microsoft.com") 5000)

由我的一个好 friend 翻译成 Java:

public class NetTest {
public static void main (String[] args) throws Exception{
String host = "acidrayne.net";
InetAddress a = InetAddress.getByName(host);

System.out.println(a.isReachable(10000));
}
}

这两个都返回 false。我想我一定是做错了,但谷歌研究告诉我不同​​的说法。我很困惑!

最佳答案

更新以回应评论这是错误的:

使用 Unix/Linux ??

http://bordet.blogspot.com/2006/07/icmp-and-inetaddressisreachable.html说:

Linux/Unix, instead, supports an ICMP "ping" system call. So the implementation of java.net.InetAddress.isReachable() first tries to perform the "ping" system call**; if this fails, it falls back trying to open a TCP socket on [sic - to] port 7, as in Windows.

It turns out that in Linux/Unix the ping system call requires root privileges, so most of the times java.net.InetAddress.isReachable() will fail, because many Java programs are not run as root , and because the target address unlikely has the echo service up and running. Too bad.

下面来自@EJP 的评论表明关于回声服务的部分是错误的,错误的错误:

That's not correct. isReachable returns true if it gets a ConnectException trying to connect to port 7, as that proves that the host is up and able to send RST segments.

在这种情况下,我会使用 WireShark、tcpdump(Windows 上的 WinDump)或 snoop (Solaris) 等数据包嗅探器来确认网络上到底发生了什么。

关于java - Java 中的 isReachable 似乎没有按照预期的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com