Scapy - 计算数据包中的层数。

Scapy - Counting the number of layers in a packet.

我正在尝试计算信标框架中元素层的数量。我想遍历所有层,直到到达最后一层。假设我将此数据包存储在变量 pkt 中:

>>> pkt.summary()
    "RadioTap / 802.11 Management 8L 34:bf:90:4a:bb:57 > ff:ff:ff:ff:ff:ff / Dot11Beacon / SSID='unknown' / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt"

数据包中有 13 Dot11Elt 层。要从所有这些层中提取信息,我需要遍历所有这些层。我为实现这一目标所做的努力:

eltlayers = pkt.getlayer(Dot11Elt)
for layer in len(eltlayers):  # problem lies here
    print layer[layer].ID     # This is field in Elt Layer 

但是 len 给我的是 Raw payload 的长度,而不是层数。问题是如何遍历数据包层或者是否有任何其他方法来获取层数?

您可以像这样提取 Dot11Elt 图层:

pkt_elt = pkt[Dot11Elt]
while isinstance(pkt_elt, Dot11Elt):
    print "tag id = %d" % pkt_elt.ID
    pkt_elt = pkt_elt.payload