繁体   English   中英

Python:.payload在Scapy中究竟是什么?

[英]Python: what exactly does .payload in scapy?

我正在尝试了解分析信标帧的Python脚本。 但是我被卡在.payload上。 查看Python文档并进行研究并没有帮助我。 我发现有效载荷是帧承载的数据。

def insert_ap(pkt):
    ## Done in the lfilter param
    # if Dot11Beacon not in pkt and Dot11ProbeResp not in pkt:
    #     return
    bssid = pkt[Dot11].addr3
    if bssid in aps:
        return
    p = pkt[Dot11Elt]
    cap = pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}"
                      "{Dot11ProbeResp:%Dot11ProbeResp.cap%}").split('+')
    ssid, channel = None, None
    crypto = set()
    while isinstance(p, Dot11Elt):
        if p.ID == 0:
            ssid = p.info
        elif p.ID == 3:
            channel = ord(p.info)
        elif p.ID == 48:
            crypto.add("WPA2")
        elif p.ID == 221 and p.info.startswith('\x00P\xf2\x01\x01\x00'):
            crypto.add("WPA")
        p = p.payload # HERE IT IS
    if not crypto:
        if 'privacy' in cap:
            crypto.add("WEP")
        else:
            crypto.add("OPN")
    print "NEW AP: %r [%s], channed %d, %s" % (ssid, bssid, channel,
                                               ' / '.join(crypto))
    aps[bssid] = (ssid, channel, crypto)

aps = {}
sniff(iface='mon0', prn=insert_ap, store=False,
      lfilter=lambda p: (Dot11Beacon in p or Dot11ProbeResp in p))

有效负载函数编写在while循环中。 只要数据包是Dot11Elt的实例,循环就处于活动状态。 但是.payload的作用是什么不再是Dot11Elt(?)

谢谢!

packet.payload只是指向下一层的指针。

看一下Scapy文档

例如,如果pkt是这样构造的:

pkt = Dot11()/foo()/IP()/TCP()

在您的示例中, p最初设置为pkt[Dot11] 因此, p.payloadpkt[Dot11].payload ,它指向foo对象。 在循环结束时, p前进到p.payload 只要p的类型为Dot11Elt ,循环将继续运行。

如果我们假设Dot11foo均为Dot11Elt类型,则循环将运行直到p指向IP层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM