Usando Python y Scapy para detectar ARP en Pi

12

Estoy tratando de usar una Raspberry Pi para encontrar solicitudes ARP de un dispositivo inalámbrico específico en mi red. Es uno de esos botones del tablero de Amazon. Alguien usó este código para escuchar cuando el tablero se conecta a 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)

Cuando ejecuto esto en Raspbian (con python y scapy instalado), recibo un error

"IndexError: Layer [ARP] not found"

No estoy familiarizado con el miedo y simplemente me sumerjo por primera vez. Gracias por cualquier idea

user851
fuente
¿Alguna vez lograste que esto funcionara? He superado ese problema, pero aún no puedo ver una solicitud ARP desde mi botón
jbnunn
@jbnunn esta respuesta funcionó para mí stackoverflow.com/questions/24415294/…
Katu

Respuestas:

7

Yo también estoy haciendo lo mismo. Lo que encontré fue que tcpdumpno estaba instalado.

Un simple sudo apt-get install tcpdumpsolucionó este error para mí.

Arroyos
fuente
6

Tuve el mismo error, pero descubrí que no ocurre de manera confiable, a veces falla inmediatamente con:

IndexError: Layer [ARP] not found

y a veces corre para siempre.

Sugerencia: Establezca count=0en la línea de rastreo de impresión para que se ejecute para siempre, el recuento parece ser tiempo de espera.

Inicialmente había instalado scapy desde el sitio web, pero terminé haciendo:

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

y parece funcionar bien cuando se ejecuta. No estoy seguro de que necesitara todo lo anterior, pero python-scapy los recomendó (y un montón de rutinas gráficas) cuando lo instalé.

Addenda: Cada vez que jugueteo con el código, la probabilidad de que se ejecute sin fallar cambia, por lo que hay algo realmente extraño.

wpns
fuente
1

Tuvimos el mismo problema aquí, y resulta que olvidamos verificar una condición.

Simplemente agregue esta línea antes de todos los bloques if:

if pkt.haslayer(ARP):
Roger Geng
fuente
0

en mi Raspy B 2012 consume> 50% de la CPU.

Lo que probé fue

sniff (filter = "tcp y puerto 123", prn = print_summary, store = 0)

Redirigí las solicitudes del botón Dash a la IP de la máquina donde Scapy se ejecuta a través de mi Firewall. La idea era guardar recursos y no monitorear todo el tráfico para direcciones de mac, sino solo ver las solicitudes de conexión en el puerto.

Esto consume ~ 30% de CPU. Funciona en una máquina Ubuntu, pero en una Raspi B tarda alrededor de 5 minutos en comenzar a funcionar y luego muestra Conexiones de toda mi red, lo que no funciona en la máquina Ubuntu. Supongo que está roto en la imagen de Raspy Musicbox.

Peter Fleix
fuente