Usando Python e Scapy per fiutare ARP su Pi


12

Sto cercando di utilizzare un Raspberry Pi per trovare richieste ARP da un dispositivo wireless specifico sulla mia rete. È uno di quei pulsanti dash di Amazon. Qualcuno ha usato questo codice per ascoltare quando il trattino si connette al wifi.

from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      if pkt[ARP].hwsrc == '74:75:48:5f:99:30': # button 1
        print "Pushed Huggies"
      elif pkt[ARP].hwsrc == '10:ae:60:00:4d:f3': # button 2
        print "Pushed Elements"
      else:
        print "ARP Probe from unknown device: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)

Quando eseguo questo su Raspbian (con Python e Scapy installati), visualizzo un errore

"IndexError: Layer [ARP] not found"

Non ho familiarità con Scapy e mi immergo per la prima volta. Grazie per qualsiasi idea


L'hai mai fatto funzionare? Ho superato questo problema ma non riesco ancora a visualizzare una richiesta ARP dal mio pulsante
jbnunn,

@jbnunn questa risposta ha funzionato per me stackoverflow.com/questions/24415294/…
Katu

Risposte:


7

Anch'io sto facendo la stessa cosa. Quello che ho scoperto è che tcpdumpnon è stato installato.

Un semplice sudo apt-get install tcpdumperrore risolto per me.


6

Ho avuto lo stesso errore, ma ho scoperto che non accade in modo affidabile, a volte fallisce immediatamente con:

IndexError: Layer [ARP] not found

e a volte funziona per sempre.

Suggerimento: impostare count=0nella riga dell'annusatore di stampa per farlo funzionare per sempre, il conteggio sembra essere scaduto.

Inizialmente avevo installato Scapy dal sito Web, ma alla fine ho fatto:

apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy

e sembra funzionare bene quando funziona. Non sono sicuro di aver bisogno di tutto quanto sopra, ma python-scapy li ha raccomandati (e un sacco di routine grafiche) quando l'ho installato.

Addenda: Ogni volta che giocherò con il codice, la probabilità che venga eseguito senza crash cambia, quindi c'è qualcosa di veramente strano.


1

Abbiamo avuto lo stesso problema qui, e risulta che abbiamo dimenticato di verificare una condizione.

Basta aggiungere questa riga prima di tutti i blocchi if:

if pkt.haslayer(ARP):

0

sul mio Raspy B 2012 consuma> il 50% della CPU.

Quello che ho provato è stato

sniff (filtro = "tcp e porta 123", prn = print_summary, store = 0)

Ho reindirizzato le richieste del pulsante Dash all'IP della macchina su cui Scapy viene eseguito tramite il mio firewall. L'idea era di salvare risorse e non di monitorare tutto il traffico per gli indirizzi mac, ma solo di guardare le richieste di connessione sulla porta.

Questo consuma ~ 30% Cpu. Funziona su una macchina Ubuntu, ma su una Raspi B ci vogliono circa 5 minuti per iniziare a funzionare e quindi mostra le connessioni da tutta la mia rete - cosa non fa sulla macchina Ubuntu. Presumo sia rotto sull'immagine di Raspy Musicbox.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.