Ping is an diagnostic tool for verifying connectivity between two 
            hosts on a network. It sends ICMP Echo Request packets to a remote 
            IP address and watches for ICMP responses. The author of the initial 
            version of the ping program that we use today was Mike Muss. Many 
            other people have tweaked, rewritten, and variously abused ping 
            since then. 
            The name ping itself is somewhat colorful. Some people will claim 
            that it is an acronym standing for the Packet INternet Groper, this 
            is not the case. Ping was named after the sound of a sonar tracking 
            system. There is even a story claiming that a system administrator 
            wrote a script which repeatedly pinged a host on the network and 
            made an audible "pinging" alert for each 
            success. The system administrator was then able to methodically go 
            through his network checking BNC connectors until he found the dodgy 
            connector that had been plaguing his network — when the noises 
            stopped, he'd found his culprit. 
            Ping used to be a very good indicator of a machines ability to 
            receive and send IP packets in general. If you could ping a host, 
            you could also make an ftp or http connection. With the wider advent 
            of packet filtering for security, this is becoming less true. Many 
            firewalls explicitly disallow ICMP packets on the twin grounds that, 
            
            
              
              
                | 
                   1) people don't need to know what your internal network 
                  looks like,   | 
              
                | 
                   2) and, any protocol can be used to launch an attack, even 
                  ICMP.   | 
            Deciding whether to let ICMP through your firewall is a tough 
            call to make. There are certainly good uses for ICMP, but there are 
            also attacks based on ICMP (e.g., the 
"Ping of 
            Death", which used oversized ping packets to overload the IP 
            stack of the target — with often spectacular results). If you choose 
            to allow ICMP into your network make sure you've thought about the 
            repercussions.
            
There are additional flavors of the ping command that have been 
            written for other purposes. Among the most common is the fping 
            command. Which was written to ping a range of addresses, and is 
            commonly used in network scanners and monitors like saint and mon 
            (both of which are covered in this chapter). Another variation is 
            the Net::Ping module, which provides a perl implementation of Ping 
            functionality that can easily be used from within a script without 
            calling an external program. You might use the script something like 
            this: 
            
            Example 1. Using Net::Perl
            
              
              
                #!/usr/bin/perl -w
use strict;
use Net::Ping;
	  
my $host = $ARGV[0];
	  
my $p = Net::Ping->new("icmp");
	  
if ($p->ping($host)) {
    print "$host is alive.\n";
} else {
    print "$host is not reachable.\n";
}
	 | 
  
            
            
            Ping is most often used without additional arguments and shut off 
            with a Ctrl–c. The results 
            look like this: 
            
              
              
                [pate@cherry pate]$ ping mango
PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.
64 bytes from mango (192.168.1.1): icmp_seq=0 ttl=255 time=0.5 ms
64 bytes from mango (192.168.1.1): icmp_seq=1 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=2 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=3 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=4 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=5 ttl=255 time=0.3 ms
--- mango ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.3/0.3/0.5 ms
[pate@cherry pate]$ 
       | 
This output can split into 
            three sections. The first section, the single line starting with the 
            word 
"PING", shows an overview of the 
            command. The second section, the lines beginning with 
"64 bytes" show a running tally of the responses 
            received. The third section, everything after the line 
"--- mango ping statistics ---", shows a summary 
            of the results. In this case, the results are good, none of the 
            packets were dropped and they were all passed fairly quickly.
            
This example also shows another important point, you should not 
            rely on a single packet to diagnose your network. A series of five 
            or ten is much better, as you can count up to 40% data loss as 
            congestion on a network, and even a single packet dropped can be 
            attributed to a busy host on the other end. 
            There are several useful options to the ping command. These are 
            summarized in the following table: 
            
            Table 1. Ping Command Options
            
              
              
                | Switch | 
                Description | 
              
              
                | -c 
                  count  | 
                
                   Stop sending and receiving packets after count packets.   | 
              
                | -d | 
                
                   Set the SO_DEBUG on the socket used.   | 
              
                | -f | 
                
                   Send the packets as fast as possible. (flood)   | 
              
                | -i 
                  wait  | 
                
                   Set an interval of wait seconds 
                  between packets.   | 
              
                | -I 
                  〈device〉 | 
                
                   Sets the output interface.   | 
              
                | -l 
                  preload  | 
                
                   Sends preload packets as fast as 
                  possible, then drops back to normal mode.   | 
              
                | -n | 
                
                   Don't look up hostnames, just give IP addresses. (numeric) 
                    | 
              
                | -p 
                  pattern  | 
                
                   Specify up to 16 bytes of "pad 
                  data" to be sent with the packet.   | 
              
                | -q | 
                
                   Output only summary lines. (quiet)   | 
              
                | -r | 
                
                   Don't use routing tables to send the packet, just drop it 
                  out the local interface.   | 
              
                | -R | 
                
                   Set the Record Route option.   | 
              
                | -s 
                  packetsize  | 
                
                   Set the number of data bytes sent to packetsize.   | 
              
                | -T 
                  tsonly | 
                
                   Sends a ping with the timestamp option.   | 
              
                | -T 
                  tsandaddr | 
                
                   Collects timestamps and addresses   | 
              
                | -T 
                  tsprespec [host1 [host2 [host3 
                  [host4]]]]  | 
                
                   Collects timestamps and addresses from prespecified hops. 
                    | 
 
            These options can be combined to make ping even more helpful. One 
            thing that you cannot see is that the ping command used in the 
            previous section is likely to take several seconds to run and report 
            back. Using the -f switch will 
            reduce the time spent waiting for the command. Combining this with 
            the -c 10 and the -q switches will give you quick results 
            and easier output to read: 
            
              
              
                	[root@cherry /root]# ping -c 10 -fq mango
PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.
--- mango ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.9 ms
[root@cherry /root]# 
	
       | 
            Note: The -f and -l switches can only be used by root, as they 
            can cause serious network degradation if misused. 
 
            It might be of some benefit to test larger packets, using ping -c10 -s 1024 -qf will send larger 
            packets for you. This can be especially useful where you suspect 
            problems with fragmented packets. 
            To see the route that your packets are traversing, you can use 
            ping -c10 -R. This command produces 
            the following output: 
            
              
              
                	PING tbr.nailed.org (206.66.240.72) from 192.168.1.10 : 56(124) bytes of data.
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=0 ttl=239 time=217.2 ms
RR: 	192.168.1.10
	216.41.39.90
	serial0.mmgw32.bos1.Level3.net (209.244.39.25)
	208.218.130.22
	166.90.184.2
	so-6-0-0.mp2.NewYork1.level3.net (209.247.10.45)
	137.39.52.10
	180.ATM7-0.BR2.NYC9.ALTER.NET (152.63.22.229)
	lo0.XR2.NYC9.ALTER.NET (137.39.4.175)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=1 ttl=239 time=1940.8 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=2 ttl=239 time=250.6 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=3 ttl=239 time=230.3 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=4 ttl=239 time=289.8 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=5 ttl=239 time=1261.4 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=6 ttl=239 time=469.4 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=7 ttl=239 time=1272.3 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=8 ttl=239 time=353.1 ms	(same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=9 ttl=239 time=1281.1 ms	(same route)
--- tbr.nailed.org ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 217.2/756.6/1940.8 ms
	
       | 
            
            Note: The record route option specified by the -R switch is not honored by all routers 
            and hosts. Further, it contains only a limited space to hold router 
            addresses, traceroute may be a better tool for identifying the path 
            packets follow through a network.