dhcp-script=/etc/detect_new_device.sh
Reference:
- https://wiki.openwrt.org/doc/howto/smtp.client
- https://fixmynix.com/send-mail-command-line-linux-openwrt/
- http://lifehacker.com/5506326/how-can-i-send-an-email-via-text-message
#!/bin/sh
# script to detect new dhcp lease
# this will be called by dnsmasq everytime a new device is connected
# with the following arguments
# $1 = add | old
# $2 = mac address
# $3 = ip address
# $4 = device name
notification_email="[email protected]"
if [ "$1" == "add" ]; then
msg="New device on `uci get system.@system[0].hostname`.`uci get dhcp.@dnsmasq[0].domain` $*"
echo `date` $msg >> /tmp/dhcpmasq.log
# encode colon (:) and send email
echo $msg | sed s/:/-/g | sendmail "$notification_email"
fi
This script only sends alerts if the mac address is not in the list
#!/bin/sh
# script to detect new dhcp lease
# this will be called by dnsmasq everytime a new device is connected
# with the following arguments
# $1 = add | old
# $2 = mac address
# $3 = ip address
# $4 = device name
known_mac_addr="/etc/known_mac_addr"
notification_email="[email protected]"
# check if the mac is in known devices list
grep -q "$2" "$known_mac_addr"
unknown_mac_addr=$?
if [ "$1" == "add" ] && [ "$unknown_mac_addr" -ne 0 ]; then
msg="New device on `uci get system.@system[0].hostname`.`uci get dhcp.@dnsmasq[0].domain` $*"
echo `date` $msg >> /tmp/dhcpmasq.log
# encode colon (:) and send email
echo $msg | sed s/:/-/g | sendmail "$notification_email"
fi
When a new device is added, dnsmasq calls detect_new_device.sh
with arguments add mac_addr ip_addr devicename
. The script checks if the device is new (if the dhcp lease hasn't expired, it calls with old
), then logs and emails (which eventually is a text message) the information.
Yes, Every 30 minutes will try DHCP add new lease or Update or remove lease. But you can specify every host own lease time or general lease time reduce to 2m (2 minutes).
I tried to use hostapd, but it was not ideal:
If somebody have better soution please share it.