Python 3.10+ · Linux · macOS · Windows

Your network,
rendered — not just measured.

xping turns ping, traceroute, DNS, TLS, HTTP and Wi-Fi checks into live, colour-coded terminal output — and tells you in plain words why the internet is not working. No root needed, one small dependency, every result also as JSON, CSV or Markdown.

$ pipx install xping
< 30 ms 30–300 ms ≥ 300 ms / loss
xping ping cloudflare.com

What it does

One tool for when the network acts up

Thirty-odd commands share one rendering language and one set of exit codes — the same colours mean the same thing whether you watch one ping or monitor a whole office.

Troubleshoot

Get a verdict

  • doctor — why the internet is not working, step by step, in plain words
  • health — a 0–100 score from loss, latency and jitter
  • net — interfaces, gateway, DNS, public IP, and whether a VPN carries your trafficNEW
  • wifi — signal, noise, SNR, channel crowding and what to do
Watch

See it over time

  • monitor — a live dashboard of all your checks, or a background serviceNEW
  • --watch / --until-up with desktop and webhook alerts
  • --fail-after — one blip is not an outage
  • history and report — trends and an HTML uptime page
Inspect

Ask a host about itself

  • http — status, redirects and a DNS → TLS → TTFB waterfall
  • tls, smtp — certificates, expiry, STARTTLS
  • dnscheck — SPF, DMARC, DKIM, DNSSEC, MX, NS
  • lookup, propagation, blocklist, whois
Trace & scan

Follow the path

  • trace, mtr — per hop, with AS names, also over TCP
  • tcp, udp, mtu, ntp, speedtest
  • portscan, sweep, ipscan across ranges
  • check — many checks from one file, one exit code

In the terminal

Same tool, six different questions

A sample of what each command prints. Every diagnostic also takes --json, --csv or --markdown, and its exit code says whether the check passed.

$ xping doctor

✔ Network interface en0 192.168.10.145 · internet through VPN utun4
✔ Default gateway 192.168.10.1 replied in 3.9 ms
✔ Internet (by IP) reached 3/3 — 1.1.1.1 in 142 ms
✔ DNS cloudflare.com → 104.16.132.229 in 23 ms
✔ Connection quality 0% loss, 151 ms average (through VPN utun4)
→ 151 ms is mostly the VPN tunnel, not your network
✔ Captive portal no login page
✔ HTTPS TLS 1.3; clock within 2s
 
✔ Everything looks good — this machine is online.

$ xping monitor --save --fail-after 3

State Check Type Target Now Trend Up For
● UP Router ping 192.168.10.1 3.2 ms ▂▁▁▃▂▁▂▁▁▂▂▁▁▂▁▁ 100% 2h03m
● UP Cloudflare DNS ping 1.1.1.1 12.4 ms ▂▁▁▃▂▁▂▁▁█▂▁▁▂▁▁ 99% 2h03m
● DOWN Database tcp db.lan:5432 – ▁▁▂▁▁▁▁▁▁▁▁▁×××× 93% 1m30s
● UP Certificate tls example.com 41 days ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪ 100% 2h03m
 
3 up · 1 down · running 2h03m · 14:32:10
 
$ xping monitor --save --fail-after 3 --install-service # keeps running in the background

$ xping trace 1.1.1.1 --asn

HOP AVG RTT HOST / IP
1 1.92 ms 192.168.10.1
2 9.84 ms 10.107.189.2 AS9009 M247
3 54.97 ms ae101-3201.core2.buc1.ro.m247.ro
4 * * * no response
5 61.57 ms 162.158.16.13 AS13335 CLOUDFLARENET
6 58.49 ms one.one.one.one (1.1.1.1)
 
✔ DESTINATION REACHED 1.1.1.1
firewall drops ping? xping trace HOST --tcp · xping mtr HOST --tcp

$ xping http https://example.com

Status 200 OK HTTP/2 · 1 redirect
 
DNS lookup 14 ms ██
TCP connect 21 ms ███
TLS handshake 46 ms ██████
Server response 118 ms ██████████████
Total 205 ms
 
Security headers 5/6 HSTS ✔ CSP ✔ X-Frame-Options ✘

$ xping dnscheck example.com

✔ ok SPF v=spf1 include:_spf.example.net -all
! warn DMARC p=none — reports only, spoofed mail is still delivered
✔ ok DKIM selector default, 2048-bit RSA
✔ ok DNSSEC signed, DS at the parent
✔ ok MX 2 servers, all resolve
 
DNS health score 84/100 (Good)

$ xping report --since 7d --compare -o weekly.html

✔ wrote weekly.html · 4 targets, 1,344 runs
 
One self-contained HTML page — no scripts, nothing loaded from the network:
· uptime, outages and downtime per target
· median and 95th percentile, −35.7 ms vs the week before
· a chart over time, failures marked, gaps left open
· every outage: when it began, when it ended, how long

Get it running

Pick your platform

Pure Python plus certifi for TLS — no compiled extensions. Every channel ships the man page; Homebrew, the PPA and COPR also set up tab completion.

brew install mehaskari/tap/xping

Man page and completion for bash, zsh and fish included. Upgrade with brew upgrade xping; the tap follows PyPI releases on its own.

sudo add-apt-repository ppa:mehdiaskari/xping sudo apt update sudo apt install xping

Built for Ubuntu 24.04 LTS (noble) and distributions based on it: Linux Mint 22, Pop!_OS 24.04. Tab completion for bash, zsh and fish is set up for you.

sudo dnf copr enable mehaskari/xping sudo dnf install xping

Current Fedora releases and EPEL 10 (RHEL, AlmaLinux, Rocky 10), x86_64 and aarch64. Man page and completion for bash, zsh and fish included.

pipx install xping

Any platform with Python 3.10 or newer (pip install xping works too). Then set up tab completion once: xping completion --install.

sudo snap install xping

Newest builds from main: sudo snap install xping --edge.

pipx install xping xping doctor xping deps

TCP, HTTP, TLS, DNS, scans and net work out of the box; ping and traceroute use Windows' own ping / tracert. xping deps shows what is available.

  1. Clone the repository — git clone https://github.com/mehaskari/xping
  2. Enter the directory — cd xping
  3. Install — pip install .
  4. Tab completion — xping completion --install

No root, no setcap

ping, trace and mtr use the unprivileged ICMP sockets of macOS and Linux, so they run as you. Run as root and xping uses raw sockets; with neither, the system ping and traceroute.

First steps

xping doctor — is the internet working?
xping 1.1.1.1 — ping, then suggestions
xping check --init — your own checks


MIT licensed Python stdlib + certifi · no root needed CI on Ubuntu, macOS, Windows · Python 3.10–3.14 PyPI · Homebrew · PPA · COPR · Snap