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 scans hosts in parallel, finds the ones that block ping, checks web services, identifies devices by name and MAC address, remembers every scan, and tells you what moved. Run it from the terminal, or from IPMG Web, a private dashboard your whole team can open.
uv tool install "ipmg[web]"
Features
One tool for the quick check and the scheduled audit — the same engine powers the CLI and IPMG Web.
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.
--probe icmp,tcp tries a TCP connection when ping gets no answer, and --scan-ports lists the services listening on every host.
Excel, CSV, JSON, JSON Lines, or Markdown, written while the scan runs, so an interrupted scan keeps its results and can be resumed.
ipmg web --lan prints the link to share and the firewall step. Live scans, history, changes, inventory, and scheduled scans, fully offline.
--http-check catches failing web services and expiring certificates; --snmp asks switches and routers for their uptime and interfaces, and alerts when one reboots or an uplink goes down.
--mac adds each host's MAC address and vendor on your LAN, spots devices that moved IP, and ipmg wake wakes them.
Slack, Teams, webhook, and email alerts, exit codes for cron and CI, a GitHub Action, systemd and launchd templates, and Prometheus metrics.
Install
The installer brings its own Python through uv, so your system Python doesn't matter — it works on RHEL 8 and 9 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.
irm https://raw.githubusercontent.com/sameeralam3127/ipmg/main/install.ps1 | iex
Run it in PowerShell 5.1 or 7; no administrator rights needed. It installs uv if missing, installs IPMG, and adds it to your PATH. ping ships with Windows, and CI runs the full test suite and a live scan on Windows for every change.
uv tool install --python ">=3.10" "ipmg[web]" # or: pipx install "ipmg[web]"
Installs IPMG as an isolated application. --python ">=3.10" lets uv fetch a new enough Python where the system's is older, as on RHEL 9.
python3 -m venv ~/.venvs/ipmg
~/.venvs/ipmg/bin/pip install ipmg
Use a virtual environment and Python 3.10 or newer: Ubuntu 23.04+, Debian 12+, and Fedora 38+ block pip installs into the system Python, and on an older Python pip quietly installs IPMG 3.
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
A checked URL that passed now fails
An IP address the baseline never saw
An IP the current scan no longer covers
A known hostname or MAC address moved to a different IP
A different device answers at the same IP
A checked URL answers differently
Status moved between failure modes, e.g. Timeout → Unreachable
A switch or router's uptime started again (--snmp)
An enabled interface that was up stopped passing traffic
The device answers the scan, but its agent stopped answering
Recovered since the baseline
Same IP, different PTR record
Moved past both thresholds (5 ms and 25% by default)
A failing check passes again
An interface that went down is up again
The device's agent answers again
IPMG Web
ipmg web starts a private server with live progress, scan history, change reports, a host inventory with Wake-on-LAN, and scheduled scans. ipmg web --lan lets your team open it: it prints the link with this machine's address and tells you if the firewall is in the way. The demo below runs entirely in your browser with sample data.
Releases
Every merge to main is tested on five Python versions, three operating systems, and nine Linux distributions, then released automatically to PyPI and as a Docker image.
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.
Yes: create a schedule in IPMG Web, run --interval 5 to repeat a scan every five minutes, or use the systemd and launchd templates. For cron and CI, --fail-on-down exits with code 3 when hosts are down, and ipmg diff --fail-on-change exits with code 2 when anything changed.
Something is dropping ICMP — a host firewall, a VPN, or a cloud security group. Add --probe icmp,tcp so hosts that block ping are found by a TCP connection instead.
Yes: ipmg web --lan prints the link to share. Every request needs the access token in that link, and every response carries a strict Content-Security-Policy. It speaks plain HTTP, so on a network you don't trust use an SSH tunnel or a reverse proxy with TLS.
ipmg --discover
Only scan networks you are authorized to scan. Unauthorized scanning may violate your organization's policies or the law.