Verwenden von Python und Scapy, um nach ARP auf Pi zu suchen


12

Ich versuche, mit einem Raspberry Pi ARP-Anforderungen von einem bestimmten drahtlosen Gerät in meinem Netzwerk zu finden. Es ist eine dieser Amazon Dash-Schaltflächen. Jemand hat diesen Code verwendet, um zuzuhören, wenn der Bindestrich eine Verbindung zum WLAN herstellt.

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)

Wenn ich dies auf Raspbian (mit installiertem Python und Scapy) ausführe, erhalte ich eine Fehlermeldung

"IndexError: Layer [ARP] not found"

Ich kenne mich mit Scapy nicht aus und tauche zum ersten Mal ein. Vielen Dank für alle Ideen.


Hast du das jemals zum Laufen gebracht? Ich habe dieses Problem
überwunden,

Antworten:


7

Auch ich mache das Gleiche. Was ich fand war, dass tcpdumpnicht installiert wurde.

Ein einfacher sudo apt-get install tcpdumpbehebt diesen Fehler für mich.


6

Ich hatte den gleichen Fehler, fand ihn aber nicht zuverlässig, manchmal schlägt er sofort fehl mit:

IndexError: Layer [ARP] not found

und manchmal läuft es für immer.

Tipp: Stellen Sie count=0in der Druck-Sniff-Zeile ein, dass sie für immer ausgeführt wird.

Ich hatte scapy ursprünglich von der Website installiert, tat aber schließlich Folgendes:

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

und es scheint gut zu laufen, wenn es läuft. Ich bin mir nicht sicher, ob ich all das benötige, aber Python-Scapy hat es empfohlen (und eine Reihe von Grafikroutinen), als ich es installiert habe.

Nachtrag: Jedes Mal, wenn ich mit dem Code experimentiere, ändert sich die Wahrscheinlichkeit, dass er ohne Absturz ausgeführt wird, so dass etwas wirklich Seltsames passiert.


1

Wir hatten hier das gleiche Problem, und es stellte sich heraus, dass wir vergessen haben, eine Bedingung zu überprüfen.

Fügen Sie einfach diese Zeile vor allen if-Blöcken ein:

if pkt.haslayer(ARP):

0

Auf meinem Raspy B 2012 sind es> 50% der CPU.

Was ich versucht habe, war

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

Ich habe die Dash-Button-Anfragen an die IP des Rechners umgeleitet, auf dem Scapy über meine Firewall ausgeführt wird. Die Idee war, Ressourcen zu sparen und nicht den gesamten Datenverkehr auf Mac-Adressen zu überwachen, sondern nur Verbindungsanfragen auf dem Port zu überwachen.

Dies verbraucht ~ 30% CPU. Es funktioniert auf einem Ubuntu-Computer, aber auf einem Raspi B dauert es ungefähr 5 Minuten, bis es funktioniert, und zeigt dann Verbindungen von überall in meinem Netzwerk an - was es auf dem Ubuntu-Computer nicht tut. Ich gehe davon aus, dass das Raspy Musicbox-Image kaputt ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.