`

Java简单实现Ping功能

 
阅读更多

基本需求: 定时测试被监控的设备是否可以ping通,如果ping不通的需要发出告警信息。

方案思路: 运用java调用服务器的自身命令来简单实现ping功能 ,本文只是讲述如何运用Java简单实现Ping的功能,至于告警信息的发送方式有很多种(比如短信 、邮件 、Syslog 、MSN 等等),在以前的文章中已经描述过,这里就不再一一详述了。

实现方式 : 根据不同的情况可分为如下两种
直接调用监控服务器的ping命令去测试需要监控的设备
通过指定服务器测试能否ping通 需要监控的设备 (运用Mina实现 )
下面将给出上述的两种实现的详细过程:

一、直接调用服务器本身的ping命令
TestPingCmd.java
Java代码 
package michael.net; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 
import java.text.MessageFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.concurrent.ArrayBlockingQueue; 
import java.util.concurrent.ThreadPoolExecutor; 
import java.util.concurrent.TimeUnit; 
 
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/ 
public class TestPingCmd { 
 
    /**
     * @param args
     * @throws Exception
     */ 
    public static void main(String[] args) throws Exception { 
 
        // 读取txt文件中的IP列表 
         TestPingCmd pinger = new TestPingCmd(); 
        List<String> iplist = pinger 
                .getIpListFromTxt("d:/test/idc_ping_ip.txt"); 
 
        // List<String> iplist = new ArrayList<String>(); 
        // iplist.add("222.*.*.*"); 
        // iplist.add("222.*.*.*"); 
        // iplist.add("222.*.*.*"); 
        // iplist.add("222.*.*.*"); 
        // iplist.add("222.*.*.*"); 
        ThreadPoolExecutor executorPool = new ThreadPoolExecutor(50, 60, 60, 
                TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50), 
                new ThreadPoolExecutor.CallerRunsPolicy()); 
        long startTime = System.currentTimeMillis(); 
        final int maxCount = 4; 
        for (final String ip : iplist) { 
            executorPool.execute(new Runnable() { 
                public void run() { 
                    TestPingCmd pinger = new TestPingCmd(); 
                    Integer countSucce = pinger.doPingCmd(ip, maxCount); 
                    if (null != countSucce) { 
                        System.out.println("host:[ " + ip + " ] ping cout: " 
                                + maxCount + " success: " + countSucce); 
 
                    } else { 
                        System.out 
                                .println("host:[ " + ip + " ] ping cout null"); 
                    } 
                } 
 
            }); 
        } 
        while (executorPool.getActiveCount() > 0) { 
            Thread.sleep(100); 
        } 
        System.out.println("complete ping jobs count = " + iplist.size() 
                + " , total used time(ms) = " 
                + (System.currentTimeMillis() - startTime)); 
        executorPool.shutdown(); 
    } 
 
    /**
     * @param destIp
     * @param maxCount
     * @return
     */ 
    public Integer doPingCmd(String destIp, int maxCount) { 
        LineNumberReader input = null; 
        try { 
            String osName = System.getProperties().getProperty("os.name"); 
            String pingCmd = null; 
            if (osName.startsWith("Windows")) { 
                pingCmd = "cmd /c ping -n {0} {1}"; 
                pingCmd = MessageFormat.format(pingCmd, maxCount, destIp); 
            } else if (osName.startsWith("Linux")) { 
                pingCmd = "ping -c {0} {1}"; 
                pingCmd = MessageFormat.format(pingCmd, maxCount, destIp); 
            } else { 
                System.out.println("not support OS"); 
                return null; 
            } 
            Process process = Runtime.getRuntime().exec(pingCmd); 
            InputStreamReader ir = new InputStreamReader(process 
                    .getInputStream()); 
            input = new LineNumberReader(ir); 
            String line; 
            List<String> reponse = new ArrayList<String>(); 
 
            while ((line = input.readLine()) != null) { 
                if (!"".equals(line)) { 
                    reponse.add(line); 
                    // System.out.println("====:" + line); 
                } 
            } 
            if (osName.startsWith("Windows")) { 
                return parseWindowsMsg(reponse, maxCount); 
            } else if (osName.startsWith("Linux")) { 
                return parseLinuxMsg(reponse, maxCount); 
            } 
 
        } catch (IOException e) { 
            System.out.println("IOException   " + e.getMessage()); 
 
        } finally { 
            if (null != input) { 
                try { 
                    input.close(); 
                } catch (IOException ex) { 
                    System.out.println("close error:" + ex.getMessage()); 
 
                } 
            } 
        } 
        return null; 
    } 
 
    private int parseWindowsMsg(List<String> reponse, int total) { 
        int countTrue = 0; 
        int countFalse = 0; 
        for (String str : reponse) { 
            if (str.startsWith("来自") || str.startsWith("Reply from")) { 
                countTrue++; 
            } 
            if (str.startsWith("请求超时") || str.startsWith("Request timed out")) { 
                countFalse++; 
            } 
        } 
        return countTrue; 
    } 
 
    private int parseLinuxMsg(List<String> reponse, int total) { 
        int countTrue = 0; 
        for (String str : reponse) { 
            if (str.contains("bytes from") && str.contains("icmp_seq=")) { 
                countTrue++; 
            } 
        } 
        return countTrue; 
    } 
 
    /**
     * @param filepath
     * @return list
     */ 
    public List<String> getIpListFromTxt(String filepath) { 
        BufferedReader br = null; 
        List<String> iplist = new ArrayList<String>(); 
        try { 
            File file = new File(filepath); 
            br = new BufferedReader(new FileReader(file)); 
            while (br.ready()) { 
                String line = br.readLine(); 
                if (null != line && !"".equals(line)) { 
                    iplist.add(line); 
                } 
            } 
        } catch (Exception e) { 
            e.printStackTrace(System.out); 
 
        } finally { 
            if (null != br) { 
                try { 
                    br.close(); 
                } catch (Exception ex) { 
                    ex.printStackTrace(System.out); 
                } 
            } 
        } 
        return iplist; 
    } 
 


读取文件中IP列表(1001个IP)运行结果:
complete ping jobs count = 1001 , total used time(ms) = 483536


二、通过指定服务器去ping测试

       主要思路:利用Mina在指定的第三方服务器上运行server端,然后实现客户端和 第三方 服务器建立socket连接,发送ping任务的消息给第三方服务器,第三方服务器再把执行结果实时反馈给客户端。
       代码包括四个类:
服务端:PingServerIoHandler.java PingServer.java
客户端:PingClientIoHandler.java PingClient.java
Java代码 
package michael.mina.ping; 
 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 
import java.text.MessageFormat; 
 
import org.apache.mina.core.service.IoHandlerAdapter; 
import org.apache.mina.core.session.IdleStatus; 
import org.apache.mina.core.session.IoSession; 
 
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/ 
public class PingServerIoHandler extends IoHandlerAdapter { 
    private String logId = "SERVER:: "; 
    private int msgCount = 0; 
 
    @Override 
    public void exceptionCaught(IoSession pSession, Throwable pCause) 
            throws Exception { 
        System.out.println(logId + "发生异常:" + pCause.getLocalizedMessage()); 
    } 
 
    @Override 
    public void messageReceived(IoSession pSession, Object pMessage) 
            throws Exception { 
        String msg = String.valueOf(pMessage); 
        msgCount++; 
        System.out.println(logId + "收到客户端第 " + msgCount + " 条消息:" + msg); 
        pSession.write(msgCount); 
 
        if (msg.startsWith("ping")) { 
            String destIp = msg.split(" ")[1]; 
            doPingCmd(pSession, destIp); 
        } 
 
    } 
 
    @Override 
    public void messageSent(IoSession pSession, Object pMessage) 
            throws Exception { 
        System.out.println(logId + "发出消息:" + pMessage); 
    } 
 
    @Override 
    public void sessionClosed(IoSession pSession) throws Exception { 
        System.out.println(logId + "one client closed "); 
    } 
 
    @Override 
    public void sessionCreated(IoSession pSession) throws Exception { 
        System.out.println(logId + "sessionCreated "); 
    } 
 
    @Override 
    public void sessionIdle(IoSession pSession, IdleStatus pStatus) 
            throws Exception { 
        super.sessionIdle(pSession, pStatus); 
    } 
 
    @Override 
    public void sessionOpened(IoSession pSession) throws Exception { 
        System.out.println(logId + "sessionOpened "); 
    } 
 
    private Integer doPingCmd(IoSession pSession, String destIp) { 
        LineNumberReader input = null; 
        int maxCount = 4; 
        try { 
            String osName = System.getProperties().getProperty("os.name"); 
            String pingCmd = null; 
            if (osName.startsWith("Windows")) { 
                pingCmd = "cmd /c ping -n {0} {1}"; 
                pingCmd = MessageFormat.format(pingCmd, maxCount, destIp); 
            } else if (osName.startsWith("Linux")) { 
                pingCmd = "ping -c {0} {1}"; 
                pingCmd = MessageFormat.format(pingCmd, maxCount, destIp); 
            } else { 
                System.out.println("not support OS"); 
                return null; 
            } 
            Process process = Runtime.getRuntime().exec(pingCmd); 
            InputStreamReader ir = new InputStreamReader(process 
                    .getInputStream()); 
            input = new LineNumberReader(ir); 
            String line; 
 
            while ((line = input.readLine()) != null) { 
                if (!"".equals(line)) { 
                    pSession.write(line); 
                } 
            } 
        } catch (IOException e) { 
            System.out.println("IOException   " + e.getMessage()); 
 
        } finally { 
            if (null != input) { 
                try { 
                    input.close(); 
                } catch (IOException ex) { 
                    System.out.println("close error:" + ex.getMessage()); 
 
                } 
            } 
        } 
        return null; 
    } 


Java代码 
package michael.mina.ping; 
 
import java.net.InetSocketAddress; 
import java.nio.charset.Charset; 
 
import org.apache.mina.core.service.IoAcceptor; 
import org.apache.mina.filter.codec.ProtocolCodecFilter; 
import org.apache.mina.filter.codec.textline.TextLineCodecFactory; 
import org.apache.mina.filter.logging.LoggingFilter; 
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; 
 
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/ 
public class PingServer { 
 
    private static final int PORT = 54321; 
 
    /**
     * @param args
     * @throws Exception
     */ 
    public static void main(String[] args) throws Exception { 
        IoAcceptor acceptor = new NioSocketAcceptor(); 
 
        acceptor.getFilterChain().addLast("logger", new LoggingFilter()); 
        acceptor.getFilterChain().addLast( 
                "codec", 
                new ProtocolCodecFilter(new TextLineCodecFactory(Charset 
                        .forName("UTF-8")))); 
        acceptor.setHandler(new PingServerIoHandler()); 
        acceptor.bind(new InetSocketAddress(PORT)); 
 
        System.out.println("服务端已启动,监听端口:" + PORT); 
 
    } 
 



Java代码 
package michael.mina.ping; 
 
import org.apache.mina.core.service.IoHandlerAdapter; 
import org.apache.mina.core.session.IdleStatus; 
import org.apache.mina.core.session.IoSession; 
 
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/ 
public class PingClientIoHandler extends IoHandlerAdapter { 
 
    private String logId = "CLIENT:: "; 
 
    @Override 
    public void exceptionCaught(IoSession pSession, Throwable pCause) 
            throws Exception { 
        System.out.println(logId + "发生异常:" + pCause.getLocalizedMessage()); 
    } 
 
    @Override 
    public void messageReceived(IoSession pSession, Object pMessage) 
            throws Exception { 
        String count = String.valueOf(pMessage); 
        System.out.println(logId + "服务端收到的消息数 = " + count); 
    } 
 
    @Override 
    public void messageSent(IoSession pSession, Object pMessage) 
            throws Exception { 
        System.out.println(logId + "发出消息:" + pMessage); 
    } 
 
    @Override 
    public void sessionClosed(IoSession pSession) throws Exception { 
        System.out.println(logId + "one client closed "); 
    } 
 
    @Override 
    public void sessionCreated(IoSession pSession) throws Exception { 
        System.out.println(logId + "sessionCreated "); 
    } 
 
    @Override 
    public void sessionIdle(IoSession pSession, IdleStatus pStatus) 
            throws Exception { 
        super.sessionIdle(pSession, pStatus); 
    } 
 
    @Override 
    public void sessionOpened(IoSession pSession) throws Exception { 
        System.out.println(logId + "sessionOpened "); 
    } 


Java代码 
package michael.mina.ping; 
 
import java.net.InetSocketAddress; 
import java.nio.charset.Charset; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
 
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 
import org.apache.mina.core.future.ConnectFuture; 
import org.apache.mina.core.session.IoSession; 
import org.apache.mina.filter.codec.ProtocolCodecFilter; 
import org.apache.mina.filter.codec.textline.TextLineCodecFactory; 
import org.apache.mina.transport.socket.SocketConnector; 
import org.apache.mina.transport.socket.nio.NioSocketConnector; 
 
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/ 
public class PingClient { 
 
    private static final int PORT = 54321; 
 
    /**
     * IP列表
     * @param ipList
     */ 
    public void createPingClient(List<String> ipList) { 
        SocketConnector connector = new NioSocketConnector(); 
 
        DefaultIoFilterChainBuilder chain = connector.getFilterChain(); 
 
        // 设定过滤器一行一行读取数据 
        chain.addLast("codec", new ProtocolCodecFilter( 
                new TextLineCodecFactory(Charset.forName("UTF-8")))); 
 
        // 注册消息处理器 
        connector.setHandler(new PingClientIoHandler()); 
        connector.setConnectTimeoutMillis(30 * 1000L); 
        // 连接服务器 
        ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 
                54321)); 
        cf.awaitUninterruptibly(); 
        IoSession session = cf.getSession(); 
        for (String ip : ipList) { 
            session.write("ping " + ip); 
        } 
        session.getCloseFuture().awaitUninterruptibly(); 
        connector.dispose(); 
        System.out.println("-------------------"); 
    } 
 
    /**
     * 控制台输入
     * @param ipList
     */ 
    public void createPingClient() { 
        SocketConnector connector = new NioSocketConnector(); 
 
        DefaultIoFilterChainBuilder chain = connector.getFilterChain(); 
 
        // 设定过滤器一行一行读取数据 
        chain.addLast("codec", new ProtocolCodecFilter( 
                new TextLineCodecFactory(Charset.forName("UTF-8")))); 
 
        // 注册消息处理器 
        connector.setHandler(new PingClientIoHandler()); 
        connector.setConnectTimeoutMillis(30 * 1000L); 
        // 连接服务器 
        ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 
                54321)); 
        cf.awaitUninterruptibly(); 
        IoSession session = cf.getSession(); 
        Scanner input = new Scanner(System.in).useDelimiter("\\r\\n"); 
        while (input.hasNext()) { 
            String s = input.next(); 
            if (s.equals("quit")) { 
                break; 
            } 
            session.write(s); 
        } 
        // cf.getSession().getCloseFuture().awaitUninterruptibly(); 
        connector.dispose(); 
    } 
 
    /**
     * @param args
     * @throws Exception
     */ 
    public static void main(String[] args) throws Exception { 
        PingClient tester = new PingClient(); 
        List<String> iplist = new ArrayList<String>(); 
        iplist.add("192.168.8.89"); 
        iplist.add("192.168.8.93"); 
        iplist.add("192.168.8.109"); 
        iplist.add("192.168.8.117"); 
        iplist.add("192.168.8.118"); 
        tester.createPingClient(iplist); 
    } 
 


BTW:先运行server端,在运行client端( )。
server端日志如下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
服务端已启动,监听端口:54321
SERVER:: sessionCreated
SERVER:: sessionOpened
SERVER:: 收到客户端第 1 条消息:ping 192.168.8.89
SERVER:: 发出消息:1
SERVER:: 收到客户端第 2 条消息:ping 192.168.8.93
SERVER:: 收到客户端第 3 条消息:ping 192.168.8.109
SERVER:: 收到客户端第 4 条消息:ping 192.168.8.117
SERVER:: 收到客户端第 5 条消息:ping 192.168.8.118
SERVER:: 发出消息:正在 Ping 192.168.8.89 具有 32 字节的数据:
SERVER:: 发出消息:来自 192.168.8.89 的回复: 字节=32 时间=5ms TTL=60
SERVER:: 发出消息:来自 192.168.8.89 的回复: 字节=32 时间=3ms TTL=59
SERVER:: 发出消息:来自 192.168.8.89 的回复: 字节=32 时间=4ms TTL=59
SERVER:: 发出消息:来自 222.73.88.89 的回复: 字节=32 时间=41ms TTL=59
SERVER:: 发出消息:192.168.8.89 的 Ping 统计信息:
SERVER:: 发出消息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
SERVER:: 发出消息:往返行程的估计时间(以毫秒为单位):
SERVER:: 发出消息: 最短 = 3ms,最长 = 41ms,平均 = 13ms
SERVER:: 发出消息:2
SERVER:: 发出消息:正在 Ping 192.168.8.93 具有 32 字节的数据:
SERVER:: 发出消息:来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
SERVER:: 发出消息:来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
SERVER:: 发出消息:来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
SERVER:: 发出消息:来自 192.168.8.93 的回复: 字节=32 时间=3ms TTL=59
SERVER:: 发出消息:192.168.8.93 的 Ping 统计信息:
SERVER:: 发出消息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
SERVER:: 发出消息:往返行程的估计时间(以毫秒为单位):
SERVER:: 发出消息: 最短 = 3ms,最长 = 4ms,平均 = 3ms
SERVER:: 发出消息:3
SERVER:: 发出消息:正在 Ping 192.168.8.109 具有 32 字节的数据:
SERVER:: 发出消息:来自 192.168.8.109 的回复: 字节=32 时间=13ms TTL=249
SERVER:: 发出消息:来自 192.168.8.109 的回复: 字节=32 时间=36ms TTL=249
SERVER:: 发出消息:来自 192.168.8.109 的回复: 字节=32 时间=61ms TTL=249
SERVER:: 发出消息:来自 192.168.8.109 的回复: 字节=32 时间=83ms TTL=249
SERVER:: 发出消息:192.168.8.109 的 Ping 统计信息:
SERVER:: 发出消息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
SERVER:: 发出消息:往返行程的估计时间(以毫秒为单位):
SERVER:: 发出消息: 最短 = 13ms,最长 = 83ms,平均 = 48ms
SERVER:: 发出消息:4
SERVER:: 发出消息:正在 Ping 192.168.8.117 具有 32 字节的数据:
SERVER:: 发出消息:来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
SERVER:: 发出消息:来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
SERVER:: 发出消息:来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
SERVER:: 发出消息:来自 192.168.8.117 的回复: 字节=32 时间=5ms TTL=249
SERVER:: 发出消息:192.168.8.117 的 Ping 统计信息:
SERVER:: 发出消息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
SERVER:: 发出消息:往返行程的估计时间(以毫秒为单位):
SERVER:: 发出消息: 最短 = 4ms,最长 = 5ms,平均 = 4ms
SERVER:: 发出消息:5
SERVER:: 发出消息:正在 Ping 192.168.8.118 具有 32 字节的数据:
SERVER:: 发出消息:来自 192.168.8.118 的回复: 字节=32 时间=3ms TTL=251
SERVER:: 发出消息:来自 192.168.8.118 的回复: 字节=32 时间=3ms TTL=251
SERVER:: 发出消息:来自 192.168.8.118 的回复: 字节=32 时间=5ms TTL=251
SERVER:: 发出消息:来自 192.168.8.118 的回复: 字节=32 时间=4ms TTL=251
SERVER:: 发出消息:192.168.8.118 的 Ping 统计信息:
SERVER:: 发出消息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
SERVER:: 发出消息:往返行程的估计时间(以毫秒为单位):
SERVER:: 发出消息: 最短 = 3ms,最长 = 5ms,平均 = 3ms

client端日志如下 :
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
CLIENT:: sessionCreated
CLIENT:: sessionOpened
CLIENT:: 发出消息:ping 192.168.8.89
CLIENT:: 发出消息:ping 192.168.8.93
CLIENT:: 发出消息:ping 192.168.8.109
CLIENT:: 发出消息:ping 192.168.8.117
CLIENT:: 发出消息:ping 192.168.8.118
CLIENT:: 服务端收到的消息数 = 1
CLIENT:: 服务端收到的消息数 = 正在 Ping 192.168.8.89 具有 32 字节的数据:
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.89 的回复: 字节=32 时间=5ms TTL=60
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.89 的回复: 字节=32 时间=3ms TTL=59
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.89 的回复: 字节=32 时间=4ms TTL=59
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.89 的回复: 字节=32 时间=41ms TTL=59
CLIENT:: 服务端收到的消息数 = 192.168.8.89 的 Ping 统计信息:
CLIENT:: 服务端收到的消息数 = 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
CLIENT:: 服务端收到的消息数 = 往返行程的估计时间(以毫秒为单位):
CLIENT:: 服务端收到的消息数 = 最短 = 3ms,最长 = 41ms,平均 = 13ms
CLIENT:: 服务端收到的消息数 = 2
CLIENT:: 服务端收到的消息数 = 正在 Ping 192.168.8.93 具有 32 字节的数据:
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.93 的回复: 字节=32 时间=4ms TTL=59
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.93 的回复: 字节=32 时间=3ms TTL=59
CLIENT:: 服务端收到的消息数 = 192.168.8.93 的 Ping 统计信息:
CLIENT:: 服务端收到的消息数 = 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
CLIENT:: 服务端收到的消息数 = 往返行程的估计时间(以毫秒为单位):
CLIENT:: 服务端收到的消息数 = 最短 = 3ms,最长 = 4ms,平均 = 3ms
CLIENT:: 服务端收到的消息数 = 3
CLIENT:: 服务端收到的消息数 = 正在 Ping 192.168.8.109 具有 32 字节的数据:
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.109 的回复: 字节=32 时间=13ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.109 的回复: 字节=32 时间=36ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.109 的回复: 字节=32 时间=61ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.109 的回复: 字节=32 时间=83ms TTL=249
CLIENT:: 服务端收到的消息数 = 192.168.8.109 的 Ping 统计信息:
CLIENT:: 服务端收到的消息数 = 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
CLIENT:: 服务端收到的消息数 = 往返行程的估计时间(以毫秒为单位):
CLIENT:: 服务端收到的消息数 = 最短 = 13ms,最长 = 83ms,平均 = 48ms
CLIENT:: 服务端收到的消息数 = 4
CLIENT:: 服务端收到的消息数 = 正在 Ping 192.168.8.117 具有 32 字节的数据:
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.117 的回复: 字节=32 时间=4ms TTL=249
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.117 的回复: 字节=32 时间=5ms TTL=249
CLIENT:: 服务端收到的消息数 = 192.168.8.117 的 Ping 统计信息:
CLIENT:: 服务端收到的消息数 = 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
CLIENT:: 服务端收到的消息数 = 往返行程的估计时间(以毫秒为单位):
CLIENT:: 服务端收到的消息数 = 最短 = 4ms,最长 = 5ms,平均 = 4ms
CLIENT:: 服务端收到的消息数 = 5
CLIENT:: 服务端收到的消息数 = 正在 Ping 192.168.8.118 具有 32 字节的数据:
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.118 的回复: 字节=32 时间=3ms TTL=251
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.118 的回复: 字节=32 时间=3ms TTL=251
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.118 的回复: 字节=32 时间=5ms TTL=251
CLIENT:: 服务端收到的消息数 = 来自 192.168.8.118 的回复: 字节=32 时间=4ms TTL=251
CLIENT:: 服务端收到的消息数 = 192.168.8.118 的 Ping 统计信息:
CLIENT:: 服务端收到的消息数 = 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
CLIENT:: 服务端收到的消息数 = 往返行程的估计时间(以毫秒为单位):
CLIENT:: 服务端收到的消息数 = 最短 = 3ms,最长 = 5ms,平均 = 3ms

分享到:
评论

相关推荐

    Java简单实现Ping功能.doc

    Java简单实现Ping功能

    用java实现ping的几种方式

    用java实现ping的几种方式:纯Java实现ICMP的ping命令,JAVA调用外部EXE实现PING功能,ICMP Ping in Java(JDK 1.5 and above),最简单的办法,直接调用CMD

    基于socket实现Ping功能的源代码

    基于socket的网络编程技术,用到SOCK_RAW的原始套接字类型。里面对简单ICMP协议和IP协议有着很完整的诠释和定义。可以交流zhaquanmin@163.com

    Java简单实现调用命令行并获取执行结果示例

    主要介绍了Java简单实现调用命令行并获取执行结果,结合实例形式分析了Java调用ping命令并获取执行结果相关操作技巧,需要的朋友可以参考下

    c语言实现如果cmd中的ping.rar

    该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...

    WebApplicaitons:在一个项目下为大学课程实现的Java Web应用程序

    Web应用程序在一个项目下为大学课程实现的Java Web应用程序该项目包含6个任务: 任务1:使用两种模式对文件中的行进行计数:串行和并行任务2:保存网站内容,打印其头部,搜索电子邮件和超链接任务3:创建可以ping通...

    基于SNMP协议的网络拓扑发现程序

    操作界面十分简单,只有“开始探测”,“设置参数”和“群Ping”三个功能,分别对应“空格”,“S”和“P”三个快捷键,其中设置参数功能提供更改参数设置的机会,群Ping功能可以对指定(用户输入)子网内的主机...

    网络听诊管理监控系统.part01

    实现端系统杀毒软件定时启动功能。 资产管理 1. 显示分布式网络环境中的网络互连设备资源列表,并实现对网络互连设备各种资源信息的实时查询浏览; 2. 显示UNIX、WINTEL平台端系统的硬件和软件各种资源列表; 3....

    javasnmp源码-awesome-star:真棒明星

    支付宝支付宝支付宝围棋SDK,集成简单,功能完善,持续更新,支持公钥证书和普通公钥进行签名和验签。 我在 Go 中解决的 100 多个流行的 LeetCode 问题的集合。 Linux 的 Darwin/macOS 仿真层 GO Simple Tunnel - 一...

    nagios完整配置文档

    3. 简单地插件设计使得用户可以方便地扩展自己服务的检测方法;  4. 并行服务检查机制;  5. 具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种 关系可被用来发现和明晰主机宕机或不可...

    Google Android SDK开发范例大全(完整版)

    在 Eclipse 中用 Java 语言编程非常简单;Eclipse 提供一个丰富的 Java 环境,包括上下文敏感帮助和代码提示。Java 代码通过编译后,Android Developer Tools 可确保适当地将它打包,包括 AndroidManifest.xml 文件...

    TCP/IP教程TCP/IP基础

    3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP...

    TCP/IP技术大全

    3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP...

    TCP/IP详解

    3.6 简单邮件传输协议(SMTP) 26 3.7 网络文件系统(NFS) 26 3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP...

    TCP/IP技术大全(中文PDF非扫描版)

    3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP寻址 29 4.1.1 二进制和十进制数 30 4.1.2 IPv4地址格式 30 ...

    TCP-IP技术大全

    3.8 简单网络管理协议(SNMP) 27 3.9 TCP/IP和系统结合 27 3.10 内部网概述 28 3.11 小结 28 第二部分 命名和寻址 第4章 IP网络中的名字和地址 29 4.1 IP寻址 29 4.1.1 二进制和十进制数 30 4.1.2 IPv4地址格式 30 ...

    TCPIP协议详解(4-1)

    LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 今天的X.500 157 16.5 LDAP...

Global site tag (gtag.js) - Google Analytics