Linux;当特定主机可访问时运行脚本(在 AP 上登录)

Linux;当特定主机可访问时运行脚本(在 AP 上登录)

我有一个在 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。

相关内容