Iterate e decodifica i livelli Dot11Elt - Scapy

0

Obiettivo

Voglio ripetere i livelli di Dot11Elt di un frame beacon che ho catturato con Scapy. Voglio anche decodificare il .info di ogni strato ID .

def packet_handler(packet) :

    if packet.haslayer(Dot11) :
        if packet.subtype == 8 :
            for i in packet.getlayer(Dot11Elt) :
                print i.info

def main() :

    sniff(count = 50, prn = packet_handler)

if __name__ == "__main__" :
    main()

Risultati

Questo mi dà solo le informazioni di ID = 0 che è SSID

Voglio essere in grado di scorrere i livelli per arrivare a ID = 1 , ID = 3 e così via.

Inoltre, non ho idea di cosa sia questo tipo di codifica che ottengo quando stampo

  • packet.getlayer(Dot11Elt)
  • packet(Dot11Elt)

    
posta TT4M.C 24.07.2016 - 02:50
fonte

2 risposte

1

Qui vai amico. puoi avere quello che vuoi

 from netaddr.core import NotRegisteredError
 from netaddr import *
 from scapy.all import *
 import logging  
 import logging.handlers

 PROBE_REQUEST_TYPE=0
 PROBE_REQUEST_SUBTYPE=4

 WHITELIST =   ['18:dc:56:f0:40:40','34:a3:95:b1:2b:d9','48:13:7e:57:ae:b6','98:0c:a5:17:7d:2d'] 
 my_logger = logging.getLogger('agentlogger')
 handler = logging.handlers.RotatingFileHandler('tplink3022.log',    mode='a', maxBytes=1048576, backupCount=10, encoding=None, delay=0)
my_logger.addHandler(handler)

def PacketHandler(pkt):
if pkt.haslayer(Dot11):

    if pkt.type==PROBE_REQUEST_TYPE and pkt.subtype ==      PROBE_REQUEST_SUBTYPE:
        PrintPacket(pkt)
def mac_info(mac):
    global macf
    maco = EUI(mac)
    try:
        macf = maco.oui.registration().org
    except NotRegisteredError:
        macf = "Not available"
    return macf
def PrintPacket(pkt):
    print "Probe Request Captured:"
    try:
        extra = pkt.notdecoded
    except:
        extra = None
    if extra!=None:
        signal_strength = -(256-ord(extra[-4:-3]))
    else:
        signal_strength = -100
        print "No signal strength found"    
    mac_info(pkt.addr2)
    print "Time: %s   Source: %s SSID: %s MANF: %s RSSi: %d"%(pkt.time,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,macf,signal_strength)

    str = "%s,%s,%s,%s,%d\n"%(pkt.time,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,macf,signal_strength)
WriteToFile(str)

def WriteToFile(str):
    my_logger.warn(str)

def main():
    from datetime import datetime
    print "[%s] Starting scan"%datetime.now()
    print "Scanning :"
    try:
        sniff(iface=sys.argv[1],prn=PacketHandler,count=0,store=0)
    except:
          print'[!] Eroor : Failed to initialize sniffing'    


if __name__=="__main__":
    main()'
    
risposta data 01.02.2017 - 10:56
fonte
0

Considerate le informazioni in link , devi eseguire un'iterazione su di esse in questo modo:

dot11elt = packet.getlayer(Dot11Elt)
while dot11elt:
     print dot11elt.ID, dot11elt.info
     dot11elt = dot11elt.payload.getlayer(Dot11Elt)
    
risposta data 14.10.2017 - 12:15
fonte

Leggi altre domande sui tag