Допустим, мы нюхаем пакеты со scapy и хотим посмотреть на значения внутри. Во многом это связано с использованием scapy документации , чтобы найти, какие атрибуты имеет каждый слой. Вы также можете сделать это в вашем интерпретаторе python / scapy с помощью dir(packet)
, чтобы увидеть, какие атрибуты и методы у него есть. Например:
>>> dir(packet)
...
'show',
'show2',
'show_indent',
'show_summary',
'sniffed_on',
'sprintf',
'src',
...
Чтобы динамически получить атрибут источника из пакета, нам нужно использовать функцию getattr , которая может получать как методы, так и атрибуты из объекта.
# Required if you are not using the scapy interpreter
from scapy.all import sniff, IP
layer = "IP"
field = "src"
# Sniff 4 packets, filtering for packets with an IP layer
packet_list = sniff(filter="ip", count=4)
# Choose first packet arbitrarily
packet0 = packet_list[0]
# We can get the attribute reflexively because python allows it
field_value = getattr(packet0[layer], field)
# Print this information
print("Layer: ", layer, " Field: ", field, " Value: ", field_value)
---
> Layer: IP Field: src Value: 192.168.1.246