Eu também estou fazendo a mesma coisa. O que eu encontrei foi que tcpdump
não foi instalado.
Um simples sudo apt-get install tcpdump
corrigiu esse erro para mim.
Estou tentando usar um Raspberry Pi para encontrar solicitações ARP de um dispositivo sem fio específico na minha rede. É um daqueles botões de traço da Amazon. Alguém usou esse código para ouvir quando o painel se conecta ao 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)
Quando executo isso no Raspbian (com o python e o scapy instalados), recebo um erro
"IndexError: Layer [ARP] not found"
Eu não estou familiarizado com o scapy e estou mergulhando pela primeira vez. Obrigado por qualquer ideia.
Eu também estou fazendo a mesma coisa. O que eu encontrei foi que tcpdump
não foi instalado.
Um simples sudo apt-get install tcpdump
corrigiu esse erro para mim.
Eu tive o mesmo erro, mas descobri que isso não acontece de forma confiável, às vezes falha imediatamente com:
IndexError: Layer [ARP] not found
e às vezes corre para sempre.
Dica: defina count=0
na linha sniff de impressão para que ela seja executada para sempre. A contagem parece ser de tempo limite.
Eu inicialmente instalei o scapy no site, mas acabei fazendo:
apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy
e parece correr bem quando é executado. Não tenho certeza se eu precisava de todos os itens acima, mas o python-scapy recomendou-os (e um monte de rotinas de gráficos) quando o instalei.
Addenda: Cada vez que eu mexer com o código, a probabilidade de que ele seja executado sem alterar as batidas, então há algo realmente estranho acontecendo.
Tivemos o mesmo problema aqui, e nos esquecemos de verificar uma condição.
Basta adicionar esta linha antes de todos os blocos if:
if pkt.haslayer(ARP):
no meu Raspy B 2012, ele consome > 50% do CPU.
O que eu tentei foi
sniff (filter="tcp e porta 123", prn = print_summary, store = 0)
Eu redirecionei as solicitações do botão do Dash para o IP da máquina onde o Scapy é executado através do meu Firewall. A ideia era salvar recursos e não monitorar todo o tráfego para endereços MAC, mas apenas para assistir solicitações de conexão na porta.
Isso consome ~ 30% da CPU. Ele funciona em uma máquina Ubuntu, mas em um Raspi B leva cerca de 5 minutos para começar a funcionar e depois mostra conexões de toda a minha rede - o que não funciona na máquina Ubuntu. Eu suponho que ele está quebrado na imagem do Raspy Musicbox.