pingtop is a fast, keyboard-first multi-host ping monitor for people who live in the terminal.
Point it at a few hosts, a whole subnet, or a host list, and get a live Textual dashboard with RTT trends, loss stats, sortable columns, and per-host drill-down details.
It is built for the moment when ping is too small, dashboards are too heavy, and you just want to see what your network is doing right now.
- Monitor many hosts at once in a single live TUI
- Spot latency spikes instantly with inline RTT trend bars
- Sort by host, IP, RTT, avg, max, stddev, loss, state, or trend
- Inspect a selected host in a dedicated details panel
- Add, edit, delete, pause, and reset hosts without restarting the session
- Load targets from CLI args, CIDR ranges, or a hosts file
- Export the final snapshot to JSON or CSV
- Print a clean colored summary on exit
- Use raw ICMP directly instead of shelling out to
ping
Live network view
- Real-time host table with RTT, min/avg/max, stddev, loss, state, and trend columns
- Responsive layout that keeps the table useful on both wide and narrow terminals
- Stable numeric column widths, so values stay easy to scan while data updates
Designed for triage
- One-key sorting across every important signal
- A details panel with an expanded RTT graph for the selected host
- Global status strip showing active hosts, paused hosts, errors, sent packets, and total loss
Built for real sessions
- Add or fix targets in place instead of restarting
- Pause a noisy host, pause everything, or reset stats when you want a clean measurement window
- Deduplicate repeated hosts automatically when combining CLI args and
--hosts-file
Requirements:
- Python 3.10+
python -m pip install pingtop
After installation, run it directly:
pingtop 1.1.1.1 8.8.8.8
Monitor a few public resolvers:
pingtop 1.1.1.1 8.8.8.8 9.9.9.9
Use a faster sampling interval:
pingtop 1.1.1.1 8.8.8.8 --interval 0.2 --timeout 0.5
Expand a CIDR block into usable hosts automatically:
pingtop 10.22.76.19/30
Load hosts from a file:
pingtop --hosts-file hosts.txt
hosts.txt is newline-delimited. Blank lines and lines starting with # are ignored.
Monitor a host list and export the final snapshot:
pingtop --hosts-file hosts.txt --export snapshots/session.json
Write CSV explicitly:
pingtop 1.1.1.1 8.8.8.8 --export snapshots/session.csv
Enable debug logging while troubleshooting:
pingtop 10.0.0.1 10.0.0.2 --log-file pingtop.log --log-level debug
Disable the exit summary when you only want the TUI:
pingtop 1.1.1.1 --no-summary
Usage: pingtop [OPTIONS] [HOSTS]... Options: -i, --interval FLOAT ping interval in seconds -t, --timeout FLOAT timeout in seconds -s, --packet-size INTEGER ICMP payload size in bytes --hosts-file FILE newline-delimited host list --summary / --no-summary print a colored summary on exit --export FILE export final snapshot --export-format [json|csv] override export format --log-file FILE write logs to a file --log-level [debug|info|warning|error|critical] -h, --help
Session control:
aadd a hosteedit the selected hostddelete the selected hostspacepause or resume the selected hostppause or resume all hostsrreset statistics for the selected hostctrl+rreset statistics for all hostsishow or hide the details paneltabswitch focus between the table and details panelhor?open helpqquit
Sorting:
HhostGresolved IPSsequenceRlast RTTImin RTTAavg RTTMmax RTTTstddevLlost packetsPloss percentageUstateWtrend
Press the same sort key again to reverse the order.
By default, pingtop prints a compact colored summary with:
- overall status
- total hosts, tx, rx, and loss percentage
- lossy or down hosts
- top issues worth investigating first
If you export a snapshot, the file includes session config, aggregate stats, and per-host results.
pingtop uses ICMP sockets directly.
On Linux, non-root access depends on net.ipv4.ping_group_range. If you hit a permission error, inspect the current value:
cat /proc/sys/net/ipv4/ping_group_range
Then widen the allowed range so your user or group can open ICMP sockets:
sudo sysctl -w net.ipv4.ping_group_range='0 1001'
poetry install poetry run pytest poetry run ruff check . poetry run mypy src
- The raw ICMP implementation is derived from the original
pingtopproject. - The TUI is built with Textual.
If pingtop earns a place in your toolbox, star the repo.