Scan anything you can name
A single IP, a CIDR block, a range, or a text, CSV, or Excel file. --discover finds the network you're on and scans it.
IPMG pings hosts in parallel, resolves their names, remembers every scan, and tells you what moved. Run it from the terminal or from a private dashboard on your own machine.
uv tool install ipmg
Features
One tool for the quick check and the scheduled audit — the same engine powers the CLI and the dashboard.
A single IP, a CIDR block, a range, or a text, CSV, or Excel file. --discover finds the network you're on and scans it.
--stream prints each host the moment it answers, above a live progress bar — and writes clean lines when piped to a log.
Every scan is kept in local SQLite. --compare and ipmg diff report outages, new hosts, and moved names.
--scan-ports checks SSH, HTTP, HTTPS, RDP, SMB, databases, and more on every host that answers — or the ports you choose.
Excel, CSV, JSON, or Markdown, one row per host. Spreadsheet formulas in exported values are neutralized.
ipmg dashboard serves live monitoring, history, and inventory on 127.0.0.1 — fully offline, nothing uploaded.
Install
The installer brings its own Python through uv, so your system Python doesn't matter — it works on RHEL 8 and on images with no Python at all.
IPMG uses your system's ping. Minimal Linux images may need it: sudo apt-get install -y iputils-ping (or dnf, zypper, apk).
curl -sSL https://raw.githubusercontent.com/sameeralam3127/ipmg/main/install.sh | bash
On a minimal server or container, add -s -- --with-deps after bash to install curl, tar, gzip, and ping too.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv tool install ipmg
Run both lines in PowerShell. ping ships with Windows, and CI runs the full test suite and a live scan on Windows for every change.
uv tool install ipmg # or: pipx install ipmg
Installs IPMG as an isolated application. Upgrade later with uv tool upgrade ipmg.
python3 -m venv ~/.venvs/ipmg
~/.venvs/ipmg/bin/pip install ipmg
Use a virtual environment: Ubuntu 23.04+, Debian 12+, and Fedora 38+ block pip installs into the system Python.
ipmg --version
Command builder
Pick a command and what you want to know. Every flag is explained, so the command you copy is one you understand. Prefer to read? Every command is also in the command reference.
ipmg --input 192.168.1.0/24 --stream
Change detection
IPMG compares a scan with the previous scan of the same targets and ranks every difference. Latency only counts when it clears both an absolute and a relative threshold, so normal jitter stays out of the report.
ipmg diff # two latest scans
ipmg diff 12 14 # two specific scans
ipmg diff --fail-on-change # exit 2 for cron or CI
Reachable in the baseline, not reachable now
An IP address the baseline never saw
An IP the current scan no longer covers
A known hostname moved to a different IP
Status moved between failure modes, e.g. Timeout → Unreachable
Recovered since the baseline
Same IP, different PTR record
Moved past both thresholds (5 ms and 25% by default)
Dashboard
ipmg dashboard starts a private server on 127.0.0.1:8080 with live progress over WebSockets, scan history, change reports, and a host inventory. The demo below runs entirely in your browser with sample data.
Releases
Every merge to main is tested on six Python versions and three operating systems, then released automatically to PyPI.
No. IPMG runs the same ping command you would run by hand — no raw sockets, no special capabilities.
No. It sends ICMP echo requests, and with --scan-ports it opens and immediately closes TCP connections. Nothing is written and nothing logs in.
In ~/.ipmg/dashboard.db, on your machine only. Point it elsewhere with --db, or skip storing a scan with --no-history.
--interval 5 repeats a scan every five minutes. For unattended runs, use cron or a systemd timer with --compare, then ipmg diff --fail-on-change so a change shows up as exit code 2.
Something is dropping ICMP — a host firewall, a VPN, or a cloud security group. Try ping by hand against one address: if that fails too, it's the network, not IPMG.
It binds to 127.0.0.1 and has no authentication by design. To reach it from another machine, use an SSH tunnel, or put an authenticating reverse proxy in front of it.
ipmg --discover
Only scan networks you are authorized to scan. Unauthorized scanning may violate your organization's policies or the law.