A self-hosted network discovery tool that scans your local network and identifies connected devices. Runs as a lightweight Docker container with a web interface powered by FastAPI.
I run a lot of containers on my home network and prefer giving each one a static IP. The annoying part was always figuring out which IPs were available — checking router tables, pinging addresses one by one, or just picking one and hoping it didn't collide with something else. I built findip so I could open one page, see every free address on the subnet, and pick one in seconds.
findip continuously monitors your local network, discovering devices via IP scanning and mDNS (Avahi). It exposes the results through a clean web API so you can see what's on your network at a glance.
Key features:
- Automatic network device discovery
- mDNS/Avahi-based name resolution
- Persistent scan state across restarts
- Web API on port 80 (v1) and port 8080 (v2)
- Designed for always-on home server deployments
- Docker and Docker Compose
- The
findip:v2image built or imported on your host - A
br0bridge network configured in Docker
git clone https://github.com/rohanpandula/findip.git
cd findip
docker compose up -dThe app will be available at http://<your-static-ip> (default: 10.0.0.69).
findip/
├── docker-compose.yml # Container definition and networking
├── supervisord_fixed.conf # Process manager config (app, avahi, dbus)
└── data/ # Runtime state (gitignored)
└── scan_state.json # Persistent scan results
The container runs three services managed by supervisord:
| Service | Purpose | Port |
|---|---|---|
| app_v1 | Original API (main:app) |
80 |
| app_v2 | Updated API (main_v2:app) |
8080 |
| avahi | mDNS discovery daemon | — |
| dbus | System message bus (avahi dependency) | — |
The container attaches to an external Docker bridge network (br0) with a static IP address. This allows it to sit directly on your LAN and perform accurate network scans.
To set up the br0 network on your Docker host:
docker network create \
--driver=bridge \
--subnet=10.0.0.0/24 \
--gateway=10.0.0.1 \
-o parent=eth0 \
br0Adjust the subnet, gateway, and parent interface to match your network.
| Environment Variable | Description | Default |
|---|---|---|
STATE_FILE |
Path to the persistent scan state file | /data/scan_state.json |
MIT
