/WatchYourLAN

Lightweight network IP scanner. Can be used to notify about new hosts and monitor host online/offline history

Primary LanguageGoMIT LicenseMIT

WatchYourLAN


Docker Go Report Card Maintainability Docker Image Size (latest semver) Docker Pulls

Lightweight network IP scanner with web GUI. Features:

  • Send notification when new host is found
  • Monitor hosts online/offline history
  • Keep a list of all hosts in the network
  • Send data to InfluxDB2 to make a Grafana dashboard

Warning

This is version 2.0. Version 1.0 can be found in this brunch: v1

Caution

BREAKING CHANGES! Version 2.0 is not compatible with v1.0. For now v2.0 docker images will be released under v2 tag. It will be tagged latest in a few weeks (probably, in October).

Screenshot_1

More screenshots

Expand

Screenshot_5
Screenshot_2
Screenshot_3
Screenshot_4

Quick start

Expand

Replace $YOURTIMEZONE with correct time zone and $YOURIFACE with network interface you want to scan. Network mode must be host. Set $DOCKERDATAPATH for container to save data:

docker run --name wyl \
	-e "IFACES=$YOURIFACE" \
	-e "TZ=$YOURTIMEZONE" \
	--network="host" \
	-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
    aceberg/watchyourlan:v2

Web GUI should be at http://localhost:8840

Config

Expand

Configuration can be done through config file, GUI or environment variables

Basic config

Variable Description Default
TZ Set your timezone for correct time
HOST Listen address 0.0.0.0
PORT Port for web GUI 8840
THEME Any theme name from https://bootswatch.com in lowcase or additional sand
COLOR Background color: light or dark dark
NODEPATH Path to local node modules
SHOUTRRR_URL Link to any notification service supported by Shoutrrr (gotify, email, telegram and others) or Generic Webhook

Scan settings

Variable Description Default
IFACES Interfaces to scan. Could be one or more, separated by space. Currently docker0 is not supported, as arp-scan wouldn't work with it correctly
TIMEOUT Time between scans (seconds) 120
ARP_ARGS Arguments for arp-scan. See man arp-scan for more. Enable debug log level to see resulting command. (Example: -r 1)
LOG_LEVEL Log level: debug, info, warn or error info
TRIM_HIST Remove history after (hours) 48
HIST_IN_DB Store History in DB - if false, the History will be stored only in memory and will be lost on app restart. Though, it will keep the app DB smaller (and InfluxDB is recommended for long term History storage) false
USE_DB Either sqlite or postgres sqlite
PG_CONNECT Address to connect to PostgreSQL. (Example: postgres://username:password@192.168.0.1:5432/dbname?sslmode=disable). Full list of URL parameters here

InfluxDB2 config

This config matches Grafana's config for InfluxDB data source

Variable Description Default Example
INFLUX_ENABLE Enable export to InfluxDB2 false true
INFLUX_SKIP_TLS Skip TLS Verify false true
INFLUX_ADDR Address:port of InfluxDB2 server https://192.168.2.3:8086/
INFLUX_BUCKET InfluxDB2 bucket test
INFLUX_ORG InfluxDB2 org home
INFLUX_TOKEN Secret token, generated by InfluxDB2

Config file

Expand

Config file name is config_v2.yaml. Example:

arp_args: ""
color: dark
hist_in_db: false
host: 0.0.0.0
ifaces: enp4s0
influx_addr: ""
influx_bucket: ""
influx_enable: false
influx_org: ""
influx_skip_tls: false
influx_token: ""
log_level: info
nodepath: ""
pg_connect: ""
port: "8840"
shoutrrr_url: "gotify://192.168.0.1:8083/AwQqpAae.rrl5Ob/?title=Unknown host detected&DisableTLS=yes"
theme: sand
timeout: 60
trim_hist: 48
use_db: sqlite

Options

Expand
Key Description Default
-d Path to config dir /data/WatchYourLAN
-n Path to node modules (see below)

Local network only

Expand

By default, this app pulls themes, icons and fonts from the internet. But, in some cases, it may be useful to have an independent from global network setup. I created a separate image with all necessary modules and fonts. Run with Docker:

docker run --name node-bootstrap          \
    -p 8850:8850                          \
    aceberg/node-bootstrap
docker run --name wyl \
	-e "IFACES=$YOURIFACE" \
	-e "TZ=$YOURTIMEZONE" \
	--network="host" \
	-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
    aceberg/watchyourlan:v2 -n "http://$YOUR_IP:8850"

Or use docker-compose

API

Expand

Moved to docs/API.md

Thanks

Expand