为了账号安全,请及时绑定邮箱和手机立即绑定

如何从Windows进行真正的Java ping?

如何从Windows进行真正的Java ping?

开心每一天1111 2019-10-30 14:32:01
我在网络上有一台试图通过Java程序ping的设备。通过我的Windows命令提示符,我可以ping设备地址,并在该地址上执行tracert。在线上,我已经看到,为了通过Java执行ping操作,您必须执行以下操作:InetAddress.getByName(address).isReachable(timeout);但是,当我在设备地址上使用此代码时,它始终在程序中返回false。我正在使用具有良好超时值的正确IPv4地址。另外,如果我使用本地主机地址,则可以正常工作。为什么我可以通过cmd而不是通过程序ping设备?我在各个地方都听说过,这不是真正的 ping。有没有更好的方法来模拟Java中的ping?谢谢
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

isReachable()如果可以获取特权,将使用ICMP ECHO REQUESTs ,否则将尝试在目标主机的端口7(Echo)上建立TCP连接。 因此,您的问题可能是配置问题,没有足够的权限在客户端计算机上执行此操作,或者是在服务器上的端口7问题(如果您的客户端没有权限执行此操作)。在您的情况下,可能两者都有,您都需要解决另一方面,以使其正常工作。

ICMP ECHO REQUEST


我在OSX和Linux客户端上测试了以下内容,并且在测试其他OSX,Linux和Windows Server计算机的可达性时可以使用。我没有Windows计算机作为客户端运行它。


import java.io.IOException;

import java.net.InetAddress;


public class IsReachable

{

    public static void main(final String[] args) throws IOException

    {

        final InetAddress host = InetAddress.getByName(args[0]);

        System.out.println("host.isReachable(1000) = " + host.isReachable(1000));

    }

}

根据我在这里阅读的内容。它显然是Windows的限制,并且ICMP PINGWindows 2000之前的系统调用都不支持Windows,因此默认情况下尝试连接到端口7,并且在您尝试“访问”的计算机上被阻止。Java尚不支持新的本机系统调用。权限是针对基于Unix的系统,因为它们需要root才能发送ICMP数据包。


如果要为Windows 2000及更高版本推出自己的Windows本机JNI ICMP PING,则可以使用IcmpSendEcho Function。


查看完整回答
反对 回复 2019-10-30
?
临摹微笑

TA贡献1982条经验 获得超2个赞

有点晚了,但是我在尝试做同样的事情时偶然发现了这一点。


一个对我有用的变通办法,是我直接使用命令行ping来完成的。


    public static boolean ping(String host)

{

    boolean isReachable = false;

    try {

        Process proc = new ProcessBuilder("ping", host).start();


        int exitValue = proc.waitFor();

        System.out.println("Exit Value:" + exitValue);

        if(exitValue == 0)

            isReachable = true;

    } catch (IOException e1) {

        System.out.println(e1.getMessage());

        e1.printStackTrace();

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

    return isReachable;

}


查看完整回答
反对 回复 2019-10-30
  • 3 回答
  • 0 关注
  • 424 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信