Linux; executar script quando um host específico se torna acessível (efetua login no AP)

1

Eu tenho um Debian Linux rodando em um RasPi. Eu estou procurando uma maneira de executar um script quando outro sistema se torna disponível na rede (também se conecta no meu ponto de acesso Wi-Fi). O AP é um AVM Fritzbox e, como tal, não pode fazer o que eu gostaria de alcançar.

Então, eu gostaria de usar um dos RasPis que tenho disponível na minha rede para fazer isso. Está sempre ligado e pode monitorar a rede 24 horas por dia, 7 dias por semana. Depois que um host específico se conecta à rede, eu gostaria de executar um script que, por exemplo, me notifica sobre o evento.

    
por Hendrik Wiese 17.10.2015 / 11:50

2 respostas

2

Existe um utilitário chamado dhcpdump , ele escuta em uma interface de rede e copia o tráfego dhcp, ele também pode filtrar por endereço de hardware (MAC).

Você poderia usar isso com uma combinação de grep para acionar sua ação.

No meu laptop eu usei para monitorar via ethernet a solicitação do meu celular (via wifi) para um endereço 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)

---------------------------------------------------------------------------
    
por 17.10.2015 / 15:29
0

Você pode realizar o que precisa com um simples script de shell executando o tcpdump, conforme mostrado abaixo.

tcpdump -c 1 -nn '((port 67 or port 68) and ether host xx:xx:xx:xx:xx:xx)'

A execução do tcpdump acima esperará até que ele capture uma solicitação BOOTP / DHCP de um cliente com endereço MAC correspondente xx: xx: xx: xx: xx: xx e exit. Neste ponto, você pode fazer o que precisa, pois sabe que o cliente em que está interessado está conectado à sua rede e pedindo DHCP.

    
por 17.10.2015 / 16:38