Java 如何运行PING命令并获取PING主机摘要?

Java 如何运行PING命令并获取PING主机摘要?,java,command-line,ping,Java,Command Line,Ping,您好,我需要使用Java代码执行PING命令,并获取PING主机的摘要。如何在Java中实现这一点?正如viralpatel指定的那样,您可以使用Runtime.exec() 下面是一个例子 class pingTest { public static void main(String[] args) { String ip = "127.0.0.1"; String pingResult = ""; String pingCmd =

您好,我需要使用Java代码执行
PING
命令,并获取PING主机的摘要。如何在Java中实现这一点?

正如viralpatel指定的那样,您可以使用
Runtime.exec()

下面是一个例子

class pingTest {

    public static void main(String[] args) {
        String ip = "127.0.0.1";
        String pingResult = "";

        String pingCmd = "ping " + ip;
        try {
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(pingCmd);

            BufferedReader in = new BufferedReader(new
            InputStreamReader(p.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
                pingResult += inputLine;
            }
            in.close();

        } catch (IOException e) {
            System.out.println(e);
        }

    }
}
输出

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
ping 127.0.0.1和32字节的数据:

127.0.0.1的回复:bytes=32次查看我正在制作的java ping库:


也许它可以帮助

InetAddress
类有一个使用ECMP回显请求(aka ping)来确定主机可用性的方法

String ipAddress = "192.168.1.10";
InetAddress inet = InetAddress.getByName(ipAddress);
boolean reachable = inet.isReachable(5000);
如果上述
reachable
变量为true,则表示主机已在给定时间内(以毫秒为单位)使用ECMP Echo Reply(又名pong)正确应答

注意:并非所有实现都必须使用ping:

一个典型的实现将使用ICMP回显请求,如果特权 可以获取,否则它将尝试建立TCP连接 在目标主机的端口7(Echo)上


因此,该方法可用于检查主机可用性,但不能普遍用于检查基于ping的检查。

下面的代码可在Windows和Linux系统上运行

public static boolean isReachable(String url) throws MalformedURLException {
        if (!url.contains("http") && !url.contains("https")) {
            url = "http://" + url;
        }
        URL urlObj = new URL(url);
        url = urlObj.getHost();
        url = "ping " + url;
        try {
            Process p = Runtime.getRuntime().exec(url);
            BufferedReader inputStream = new BufferedReader(
                    new InputStreamReader(p.getInputStream()));
            String s = "";
            while ((s = inputStream.readLine()) != null) {
                if (s.contains("Packets: Sent") || s.contains("bytes of data")) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

我想在html中附加它的输出,而不是println,当我尝试这样做时,它会持续执行很长一段时间,然后我取消它!我应该怎么做才能将其添加到html?我想您正在使用
servlet
,然后您可以使用printwriter对象将文本添加到servlet html中。您能在这方面帮助我吗?我不知道这就是为什么我向you@bhesh-gurung我创建了一个小型java库。还有很多工作(从今天开始)它只支持UNIX?如果你想让你的库变得有用,你也应该包括Windows支持。在Windows下,java似乎不使用ping,默认为端口7上的TCP连接,端口7通常被防火墙阻止。在Unix下,ping需要根访问权限,因此通常也默认为端口7。因此,isReachable在生产环境中是无用的。易受命令注入的影响,
s.contains(“数据字节”)
将出现在windows上的每个ping输出上,而不管是向上还是向下状态。因此,除非进程无法启动,否则此代码将始终返回true