PING命令参数详解

《ping的参数!》  

ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]  [-w timeout] destination-list

Ping 命令可以用来验证与远程计算机的连接。(该命令只有在安装了TCP/IP协议后才能使用)  

【参数说明】 :  

-t :一直Ping指定的计算机,直到从键盘按下Ctrl+C中断。  

-a :将地址解析为计算机NetBios名。 

-n :发送count指定的ECHO数据包数,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助。能够测试发送数据包的返回平均时间,及时间的快慢程度。默认值为 4。  

-l :发送指定数据量的ECHO数据包。默认为 32 字节;最大值是65500byte。  

-f :在数据包中发送“不要分段”标志,数据包就不会被路由上的网关分段。通常你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。  

-i :将“生存时间”字段设置为TTL指定的值。指定TTL值在对方的系统里停留的时间。同时检查网络运转情况的。  

-v :tos 将“服务类型”字段设置为 tos 指定的值。  

-r :在“记录路由”字段中记录传出和返回数据包的路由。通常情况下,发送的数据包是通过一系列路由才到达目标地址的,通过此参数可以设定,想探测经过路由的个数。限定能跟踪到9个路由。  

-s :指定 count 指定的跃点数的时间戳。与参数-r差不多,但此参数不记录数据包返回所经过的路由,最多只记录4个。  

-j :利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源) IP 允许的最大数量为 9。  

-k :computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。  

-w:timeout 指定超时间隔,单位为毫秒。  destination-list:指定要 ping 的远程计算机。  一般情况下,通过ping目标地址,可让对方返回TTL值的大小,通过TTL值可以粗略判断目标主机的系统类型是Windows还是UNIX/Linux,一般情况下Windows系统返回的TTL值在100-130之间,而UNIX/Linux系统返回的TTL值在240-255之间。但TTL的值是可以修改的。故此种方法可作为参考.   

【一般操作方法如下】:  

C:\>ping www.yahoo com   

Pinging www.yahoo.akadns net [66.218.71.81] with 32 bytes of data:   
Reply from 66.218.71.81: bytes=32 time=160ms TTL=41   
Reply from 66.218.71.81: bytes=32 time=150ms TTL=41   
Reply from 66.218.71.81: bytes=32 time=160ms TTL=41   
Reply from 66.218.71.81: bytes=32 time=161ms TTL=41   
Ping statistics for 66.218.71.81:   
Packets: Sent = 4,Received = 4,Lost = 0 (0% loss),Approximate   
round trip times in milli-seconds:   
Minimum = 150ms,Maximum = 161ms,Average = 157ms
import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;


 public class PingTest {
     
     /**
     * 能否ping通IP地址
     * @param server IP地址
     * @param timeout 超时时长
     * @return true能ping通
     */
    public static boolean pingServer(String server, int timeout) {
        BufferedReader in = null;
        Runtime r = Runtime.getRuntime();

        String pingCommand = "ping " + server + " -n 1 -w " + timeout;
        try {
            Process p = r.exec(pingCommand);
            if (p == null) {
                return false;
            }
            in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                if (line.startsWith("Reply from")) {
                    return true;
                }
            }

        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

     /**
      * @param args
      */
     public static void main(String[] args) {
         System.out.println(pingServer("74.125.128.190",10));

     }

 }


==============================================================================================

method two
      public static boolean pingServer(String address) {
            Process process=null;
             try {
                 process = Runtime.getRuntime().exec("ping "+address);
             } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }  
                 InputStreamReader r = new InputStreamReader(process.getInputStream());  
                 LineNumberReader returnData = new LineNumberReader(r);  
          
                 String returnMsg="";  
                 String line = "";  
                 try {
                     while ((line = returnData.readLine()) != null) {  
                        // System.out.println(line);  
                         returnMsg += line;  
                     }
                 } catch (IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }  
                   
                 if(returnMsg.indexOf("100% loss")!=-1){  
                   //  System.out.println("与 " +address +" 连接不畅通.");  
                     return false;
                 }  
                 else{  
                  //   System.out.println("与 " +address +" 连接畅通.");  
                     return true;
                 }  
          
             }