Headless network scanner: device inventory, open ports, alerts, Home Assistant export
4.6K
Headless edition of the DeviceShelf network scanner. It watches a LAN around the clock and keeps an inventory of what is on it: vendor, hostname, OS, device type, open ports and the services behind them. Alerts go out when something new appears, when a device drops offline, or when a port opens that was closed before.
Mirrored from ghcr.io/wealthwallet/deviceshelf-server — same digests, both
architectures (amd64, arm64).
Layer-2 discovery (ARP, mDNS, passive DHCP) only works when the container
shares the host's network namespace. That means network_mode: host on a Linux
host. It does not work on Docker Desktop for macOS or Windows, where the
container never sees the real LAN.
services:
deviceshelf:
image: deviceshelf/deviceshelf-server:latest
container_name: deviceshelf-server
restart: unless-stopped
network_mode: host
cap_add:
- NET_RAW # raw sockets for the ARP scan
- NET_BIND_SERVICE # UDP/67 for passive DHCP fingerprinting
environment:
DEVICESHELF_API_PORT: "8088"
DEVICESHELF_INTERVAL: "5m"
DEVICESHELF_PORTSCAN: "true"
volumes:
- ./data:/data
mkdir -p data && sudo chown 10001:10001 data
docker compose up -d
The dashboard is then on http://<host>:8088. Leave DEVICESHELF_API_TOKEN
unset and the server mints a random bearer token on first start and writes it
to data/DeviceShelf/api-token; read it back with
docker compose exec deviceshelf deviceshelf-server -token. It is deliberately
kept out of the log.
DEVICESHELF_API_VIEWER_TOKEN hands someone a view of
everything without the ability to change anything. Mutating requests are
rejected and the dashboard switches to a read-only view.DEVICESHELF_SNMP_TARGETS reads the ARP tables of your
routers and switches, so devices on segments the container cannot reach
directly still land in the inventory. SNMPv2c and v3 both work.DEVICESHELF_NOTIFY takes Apprise URLs (ntfy, Gotify,
Discord, mail, and about 120 more); DEVICESHELF_WEBHOOK posts raw JSON.new_device, device_online, device_offline and
new_port. Only the MQTT integration is needed./var/run/docker.sock read-only to monitor
containers; a read-only PVEAuditor token covers Proxmox VE.NET_ADMIN is not
needed. A bind mount has to be writable by that uid.DeviceShelf is proprietary, paid software: €59 once, no subscription. A 7-day
trial runs without a licence and without a card, and the same licence covers
the desktop apps for macOS, Windows and Linux as well as the iOS and Android
apps. Set DEVICESHELF_LICENSE to activate.
Scanning and identification happen on the host. Nothing about the network leaves it unless you switch on one of the optional lookups.
Content type
Image
Digest
sha256:f0174f055…
Size
94.6 MB
Last updated
about 7 hours ago
docker pull deviceshelf/deviceshelf-server