Код, который вы используете, предполагает наличие информационного тега для всех элементов dot11.Это было правдой, когда большинство из них не были реализованы.В настоящее время scapy поддерживает еще несколько (например, WPA Microsoft для конкретного поставщика), которые этого не делают.Код, который вы связали, теперь устарел
Однако в (очень) последней версии разработки scapy теперь есть специальная функция, которая всегда будет оставаться согласованной: network_stats
, которая реализует код, который вы показали:
data = b'\x00\x00\x12\x00.H\x00\x00\x00\x02\x8f\t\xa0\x00\x01\x01\x00\x00\x80\x00\x00\x00\xff\xff\xff\xff\xff\xffDH\xc1\xb7\xf0uDH\xc1\xb7\xf0u\x10\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x11\x00\x00\x06SSID76\x01\n\x82\x84\x0c\x12\x18$0H`l\x03\x01\x080\x18\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x04\x00\x0f\xac\x02\x01\x00\x00\x0f\xac\x02\x0c\x00'
pkt = RadioTap(data)
nstats = pkt[Dot11Beacon].network_stats()
assert nstats == {
'channel': 8,
'crypto': {'WPA2'},
'rates': [130, 132, 12, 18, 24, 36, 48, 72, 96, 108],
'ssid': 'SSID76'
}
Он доступен только в Dot11Beacon, так как это единственное место, где это действительно имеет смысл, поэтому вам нужно вызывать его конкретно на этом слое (вам нужно проверить, что слой установлен на пакете вначале)