Utiliser Python et Scapy pour flairer ARP sur Pi


12

J'essaie d'utiliser un Raspberry Pi pour trouver des demandes ARP à partir d'un appareil sans fil spécifique sur mon réseau. C'est l'un de ces boutons de tableau de bord Amazon. Quelqu'un a utilisé ce code pour écouter lorsque le tableau de bord se connecte au 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)

Lorsque j'exécute cela sur Raspbian (avec python et scapy installés), j'obtiens une erreur

"IndexError: Layer [ARP] not found"

Je ne connais pas du tout la scapy et je plonge juste pour la première fois. Merci pour toutes les idées.


Avez-vous déjà réussi à le faire fonctionner? J'ai dépassé ce problème mais je ne vois toujours pas de demande ARP depuis mon bouton
jbnunn

@jbnunn cette réponse a fonctionné pour moi stackoverflow.com/questions/24415294/…
Katu

Réponses:


7

Moi aussi je fais la même chose. Ce que j'ai trouvé, c'est qu'il tcpdumpn'était pas installé.

Un simple a sudo apt-get install tcpdumpcorrigé cette erreur pour moi.


6

J'ai eu la même erreur, mais j'ai constaté que cela ne se produit pas de manière fiable, parfois il échoue immédiatement avec:

IndexError: Layer [ARP] not found

et parfois ça tourne pour toujours.

Astuce: défini count=0dans la ligne d'impression sniff pour qu'il s'exécute pour toujours, le nombre semble être dépassé.

J'avais initialement installé scapy à partir du site Web, mais j'ai fini par faire:

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

et il semble fonctionner très bien quand il fonctionne. Je ne sais pas si j'avais besoin de tout ce qui précède, mais python-scapy les a recommandés (et un tas de routines graphiques) lorsque je l'ai installé.

Addenda: Chaque fois que je tripote le code, la probabilité qu'il s'exécute sans planter les modifications, il se passe donc quelque chose de vraiment bizarre.


1

Nous avons eu le même problème ici, et il s'avère que nous avons oublié de vérifier une condition.

Ajoutez simplement cette ligne avant tous les blocs if:

if pkt.haslayer(ARP):

0

sur mon Raspy B 2012, il consomme> 50% du CPU.

J'ai essayé

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

J'ai redirigé les demandes du bouton Dash vers l'adresse IP de la machine sur laquelle Scapy s'exécute via mon pare-feu. L'idée était d'économiser des ressources et non de surveiller tout le trafic pour les adresses mac mais seulement de regarder les demandes de connexion sur le port.

Cela consomme environ 30% de CPU. Cela fonctionne sur une machine Ubuntu, mais sur un Raspi B, cela prend environ 5 minutes pour commencer à fonctionner, puis affiche les connexions de tout mon réseau - ce qu'il ne fait pas sur la machine Ubuntu. Je suppose que son image Raspy Musicbox est cassée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.