Usando Python e Scapy para farejar o ARP no Pi

12

Estou tentando usar um Raspberry Pi para encontrar solicitações de 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 traço se conecta ao 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)

Quando executo isso no Raspbian (com o python e o scapy instalados), recebo um erro

"IndexError: Layer [ARP] not found"

Não estou familiarizado com scapy e apenas mergulhei pela primeira vez. Obrigado por todas as idéias.

user851
fonte
Você já conseguiu isso funcionando? Eu comecei passado essa questão, mas ainda não pode ver uma solicitação ARP do meu botão
jbnunn
@jbnunn esta resposta funcionou para mim stackoverflow.com/questions/24415294/…
Katu

Respostas:

7

Eu também estou fazendo a mesma coisa. O que eu descobri foi que tcpdumpnão estava instalado.

Um simples sudo apt-get install tcpdumpcorrigiu esse erro para mim.

riachos
fonte
6

Eu tive o mesmo erro, mas descobri que isso não acontece de maneira confiável, às vezes falha imediatamente com:

IndexError: Layer [ARP] not found

e às vezes corre para sempre.

Dica: Defina count=0na linha do sniff de impressão para que ela funcione para sempre, a contagem parece estar esgotada.

Inicialmente, instalei o scapy a partir do site, mas acabei fazendo:

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

e parece funcionar muito bem quando é executado. Não tenho certeza de que precisava de todas as opções acima, mas o python-scapy recomendou-as (e várias rotinas gráficas) quando eu a instalei.

Adendos: Cada vez que brinco com o código, a probabilidade de que ele seja executado sem que ocorram alterações é necessária, então há algo realmente estranho acontecendo.

wpns
fonte
1

Tivemos o mesmo problema aqui e, esquecemos de verificar uma condição.

Basta adicionar esta linha antes de todos os blocos if:

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

no meu Raspy B 2012, consome> 50% da CPU.

O que eu tentei foi

sniff (filter = "tcp e porta 123", prn = print_summary, store = 0)

Redirecionei as solicitações do botão Dash para o IP da máquina em que o Scapy é executado pelo meu Firewall. A idéia era salvar recursos e não monitorar todo o tráfego para endereços Mac, mas apenas observar as solicitações de conexão na porta.

Isso consome ~ 30% de CPU. Ele funciona em uma máquina Ubuntu, mas em um Raspi B leva cerca de 5 minutos para começar a trabalhar e mostra o Connections de toda a minha rede - o que não funciona na máquina Ubuntu. Presumo que esteja quebrado na imagem do Raspy Musicbox.

Peter Fleix
fonte