Używanie Pythona i Scapy do wąchania ARP na Pi


12

Próbuję użyć Raspberry Pi, aby znaleźć żądania ARP z określonego urządzenia bezprzewodowego w mojej sieci. To jeden z tych przycisków Amazon. Ktoś użył tego kodu do nasłuchiwania, gdy myślnik łączy się z Wi-Fi.

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)

Kiedy uruchamiam to na Raspbian (z zainstalowanym Pythonem i scapy), pojawia się błąd

"IndexError: Layer [ARP] not found"

Zupełnie nie znam się na scapie i po raz pierwszy nurkuję. Dzięki za wszelkie pomysły.


Czy kiedykolwiek sprawiłeś, że to działało?
Przeszedłem

@jbnunn ta odpowiedź zadziałała dla mnie stackoverflow.com/questions/24415294/…
Katu

Odpowiedzi:


7

Ja też robię to samo. Znalazłem, że tcpdumpnie został zainstalowany.

Prosty sudo apt-get install tcpdumpnaprawił dla mnie ten błąd.


6

Miałem ten sam błąd, ale okazało się, że nie dzieje się to niezawodnie, czasami kończy się niepowodzeniem z:

IndexError: Layer [ARP] not found

a czasem działa wiecznie.

Wskazówka: Ustaw count=0w linii wąchania wydruku, aby działał wiecznie, liczenie wydaje się być przekroczone.

Początkowo zainstalowałem scapy ze strony internetowej, ale ostatecznie wykonałem:

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

i wydaje się, że działa dobrze, kiedy działa. Nie jestem pewien, czy potrzebowałem wszystkich powyższych, ale scaphon python polecił je (i kilka procedur graficznych) podczas instalacji.

Dodatek: Za każdym razem, gdy majstruję przy kodzie, istnieje prawdopodobieństwo, że będzie on działał bez powodowania awarii, więc dzieje się coś naprawdę dziwnego.


1

Mieliśmy ten sam problem i okazało się, że zapomnieliśmy sprawdzić jeden warunek.

Po prostu dodaj ten wiersz przed wszystkimi blokami if:

if pkt.haslayer(ARP):

0

na moim Raspy B 2012 zużywa> 50% procesora.

Próbowałem

sniff (filter = "tcp and port 123", prn = print_summary, store = 0)

Przekierowałem żądania przycisku Dash na adres IP komputera, na którym Scapy działa za pośrednictwem mojej zapory ogniowej. Chodziło o to, aby oszczędzać zasoby i nie monitorować całego ruchu dla adresów MAC, ale tylko obserwować żądania połączenia z portem.

To zużywa ~ 30% Cpu. Działa na komputerze Ubuntu, ale na Raspi B uruchomienie zajmuje około 5 minut, a następnie pokazuje Połączenia z całej mojej sieci - czego nie robi na komputerze Ubuntu. Zakładam, że jest zepsuty na obrazie Raspy Musicbox.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.