我有一个在 RasPi 上运行的 Debian Linux。我正在寻找一种当另一个系统在网络上可用时运行脚本的方法(又名登录我的 wifi AP)。 AP 是 AVM Fritzbox,因此无法实现我想要实现的目标。
因此,我想使用网络中可用的 RasPi 之一来执行此操作。它始终处于开启状态,可以 24/7 监控网络。一旦特定主机登录到网络,我想运行一个脚本来通知我该事件。
答案1
有一个名为 的实用程序dhcpdump
,它侦听网络接口并转储 dhcp 流量,它还可以按硬件地址 (MAC) 进行过滤。
您可以将其与 grep 结合使用来触发您的操作。
在我的笔记本电脑上,我用它通过以太网监控我的手机(通过 WiFi)对 IP 地址的请求。
dhcpdump -i eth0 -h cc:05:1b:1d:8f:6d |tee dhcp3.log
cat dhcp3.log
TIME: 2015-10-17 14:21:25.079
IP: 0.0.0.0 (cc:5:1b:1d:8f:6d) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 00000000
SECS: 65535
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: cc:05:1b:1d:8f:6d:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 3 (DHCPREQUEST)
OPTION: 50 ( 4) Request IP address 192.168.1.75
OPTION: 54 ( 4) Server identifier 192.168.1.254
OPTION: 57 ( 2) Maximum DHCP message size 1500
OPTION: 60 ( 13) Vendor class identifier dhcpcd 4.0.15
OPTION: 55 ( 9) Parameter Request List 1 (Subnet mask)
121 (Classless Static Route)
33 (Static route)
3 (Routers)
6 (DNS server)
28 (Broadcast address)
51 (IP address leasetime)
58 (T1)
59 (T2)
---------------------------------------------------------------------------
答案2
您可以使用运行 tcpdump 的简单 shell 脚本来完成您需要的操作,如下所示。
tcpdump -c 1 -nn '((port 67 or port 68) and ether host xx:xx:xx:xx:xx:xx)'
上述 tcpdump 运行将等待,直到捕获来自 MAC 地址与 xx:xx:xx:xx:xx:xx 匹配的客户端的 BOOTP/DHCP 请求,然后退出。此时,您可以执行您需要的操作,因为您知道您感兴趣的客户端已连接到您的网络并请求 DHCP。