1. Tool Introduction
ping is the most fundamental and universally recognized network diagnostic utility, first written by Mike Muuss in 1983. It sends ICMP Echo Request packets to a target host and listens for ICMP Echo Reply packets, allowing a user to verify that a host is reachable across an IP network and to measure round-trip latency and packet loss. Despite its simplicity, ping remains an indispensable first step in nearly every network troubleshooting and reconnaissance workflow, and is present on virtually every operating system, including Kali Linux by default (via the iputils-ping package).
2. Installation
ping ships pre-installed on Kali Linux as part of iputils-ping. If missing:
sudo apt update
sudo apt install iputils-ping -y
Verify:
ping -V
Expected output:
ping from iputils 20221126
3. Syntax
ping [OPTIONS] <destination>
4. Command-Line Options (Full Reference)
-4— Use IPv4-6— Use IPv6-c <count>— Stop after sending (and receiving) this many packets-i <interval>— Wait interval seconds between sending each packet (default 1)-I <interface/address>— Specify network interface or source address-s <packetsize>— Set number of data bytes to send (default 56)-t <ttl>— Set IP Time To Live-W <timeout>— Time to wait for a response, in seconds-w <deadline>— Total time in seconds before ping exits regardless of packets sent/received-f— Flood ping (send packets as fast as possible; requires root)-q— Quiet output, only show summary at start/end-v— Verbose output-b— Allow pinging a broadcast address-B— Do not allow ping to change source address of probe-d— Set SO_DEBUG option on socket-D— Print timestamp before each line-n— Numeric output only, no DNS resolution of response addresses-r— Bypass normal routing tables, send directly to a host on an attached network-R— Record route (deprecated on many modern kernels)-L— Suppress loopback of multicast packets-A— Adaptive ping, wait for one response before sending next-U— Print full user-to-user latency-O— Report outstanding ICMP Echo Reply packets before next request-M <hint>— Path MTU discovery hint:do,dont,want-p <pattern>— Specify up to 16 pad bytes to fill sent packets-Q <tos>— Set Quality of Service bits (Type of Service) in the IP header-S <sndbuf>— Set socket send buffer size-T <timestamp option>— Set special IP timestamp options-m <mark>— Use the given mark to tag outgoing packets (with routing/firewall rules)-F <flow label>— IPv6 flow label-V— Show version-h, --help— Show help
5. Basic Usage
ping -c 4 8.8.8.8
Expected output:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=12.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=12.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=12.2 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 12.100/12.325/12.600/0.190 ms
6. Practical Examples
Example 1 — Basic reachability check with a fixed count
ping -c 4 192.168.1.1
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.512 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.489 ms
4 packets transmitted, 4 received, 0% packet loss
Example 2 — Adjust interval between packets
ping -i 2 -c 3 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=12.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=12.4 ms
Example 3 — Specify source interface
ping -I eth0 -c 3 192.168.1.10
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.601 ms
Example 4 — Set custom packet size
ping -s 1000 -c 3 192.168.1.10
1008 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.789 ms
Example 5 — Quiet mode with a total deadline
ping -q -w 5 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
--- 192.168.1.10 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.480/0.560/0.650/0.05 ms
Example 6 — Numeric output only (skip reverse DNS)
ping -n -c 3 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.2 ms
Example 7 — Set custom TTL to test hop distance
ping -t 1 -c 1 8.8.8.8
From 192.168.1.1: icmp_seq=1 Time to live exceeded
Example 8 — Timestamped output
ping -D -c 3 192.168.1.10
[1752912345.123456] 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.512 ms
Example 9 — Flood ping (lab/authorized testing only, requires root)
sudo ping -f -c 1000 192.168.1.10
.....
--- 192.168.1.10 ping statistics ---
1000 packets transmitted, 1000 received, 0% packet loss
Example 10 — Set response wait timeout
ping -c 3 -W 1 192.168.1.99
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
--- 192.168.1.99 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss
7. Common Use Cases
- Quick reachability/uptime check for a single host before further scanning.
- Baseline network latency and packet loss measurement.
- MTU/path troubleshooting via custom packet sizes and the “don’t fragment” flag.
- Simple scripting building block for host-alive checks in larger automation pipelines.
- Verifying firewall ICMP rules (confirming whether ICMP is blocked or allowed).
8. Automation with Bash
#!/bin/bash
# ping_check.sh - check reachability of a list of hosts
HOSTS_FILE="hosts.txt"
OUT="ping_results.csv"
echo "host,status" > "$OUT"
while read -r host; do
if ping -c 2 -W 1 -q "$host" > /dev/null 2>&1; then
echo "$host,UP" >> "$OUT"
else
echo "$host,DOWN" >> "$OUT"
fi
done < "$HOSTS_FILE"
echo "[+] Results saved to $OUT"
column -s, -t "$OUT"
9. Tips and Best Practices
- Always use
-c <count>in scripts to preventpingfrom running indefinitely. - Use
-Wto set a short timeout when scripting reachability checks across many hosts, to avoid long waits on unresponsive targets. - Remember that a host not responding to ping does not necessarily mean it is down — many hosts and firewalls block ICMP by default; cross-verify with a TCP-based probe (e.g.,
hping3 -S) when needed. - Avoid
-f(flood) mode outside of authorized, controlled lab testing, as it can constitute a denial-of-service attack. - Use
-nin scripts to avoid slow/unwanted reverse DNS lookups.
10. Troubleshooting
- “ping: socket: Operation not permitted”: some
pingimplementations require elevated privileges for raw ICMP sockets in restricted environments; trysudo. - 100% packet loss to a known-live host: the target or an intermediate firewall may be blocking ICMP; test with a TCP-based tool instead.
- “Destination Host Unreachable”: indicates a local routing issue — no route exists on the local machine or gateway to the destination.
- High/variable latency (jitter): often indicates network congestion; run over a longer period with
-cset high and reviewmdevin the summary. ping: unknown host: DNS resolution failure — verify/etc/resolv.confor try the numeric IP directly.
11. References
- Linux man page:
man ping(installed locally, part of iputils) - iputils GitHub repository: https://github.com/iputils/iputils
- Kali Linux tool page: https://www.kali.org/tools/iputils/