Erro ao farejar pacotes usando “SNIFF” em “SCAPY” (python)

1

Eu queria farejar quadros de beacon da rede sem fio. Instalei scapy e configurei o wlan0 para o modo monitor. então no terminal,

-

  1. entrei no comando Scapy para abrir a scapy.
  2. Então, no Scapy, eu coloco: conf.iface="wlan0"
  3. Então eu usei o comando sniff como: p=sniff(count=1)
  4. Mas deu-me erro como:

    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    File "/usr/local/lib/python2.7/dist-packages/scapy/sendrecv.py", line 561, in sniff
    s = L2socket(type=ETH_P_ALL, *arg, **karg)
    File "/usr/local/lib/python2.7/dist-packages/scapy/arch/linux.py", line 459, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
    File "/usr/lib/python2.7/socket.py", line 191, in __init__
    _sock = _realsocket(family, type, proto)
    error: [Errno 1] Operation not permitted
    

Por favor me ajude. Eu estou tentando usar scapy para detectar quadro de baliza da rede. Além disso, por favor, deixe-me saber o que devo colocar como filtro para capturar apenas os quadros de baliza.

    
por Amit 23.06.2015 / 08:23

2 respostas

0
#!/usr/bin/env python
from scapy.all import *

ap_list = []
def myPacketHandler(pkt) :
    if pkt.haslayer(Dot11) :
        #type 0 = Management subtype 4 = Beacon
        if pkt.type == 0 and pkt.subtype == 8 :
            if pkt.addr2 not in ap_list :
                ap_list.append(pkt.addr2)
                print "AP MAX: %s with SSID: %s" % (pkt.addr2, pkt.info)

sniff(iface="mon0", prn = myPacketHandler, store=0)

Editar (sair após 500 balizas - podem ser as mesmas balizas):

#!/usr/bin/env python
from scapy.all import *
import sys

ap_list = []
d = {'counter' : 0}
def myPacketHandler(pkt) :
    if pkt.haslayer(Dot11) :
        #type 0 = Management subtype 4 = Beacon
        if pkt.type == 0 and pkt.subtype == 8 :
            d['counter'] += 1
            if d['counter']>500:
                sys.exit()
            if pkt.addr2 not in ap_list :
                ap_list.append(pkt.addr2)
                print "AP MAX: %s with SSID: %s" % (pkt.addr2, pkt.info)

sniff(iface="mon0", prn = myPacketHandler, store=0)
    
por aldwinaldwin 23.06.2015 / 11:12
0

Acabei de perceber que não estava usando o scapy como admin (sudo). Eu corro o scapy novamente com sudo e funcionou. Postando a resposta para ajudar alguém com problemas semelhantes.

Mas ainda não consigo descobrir o que usar como filtro.

    
por Amit 23.06.2015 / 08:38