Я анализирую pcap
файлы с сеансами TLS, используя dpkt
модуль python. Во время синтаксического анализа я создаю таблицу потоков, ключом которой является общий 5-кортеж (srcIP, srcPort, dstIP, dstPort, протокол), а значением является полезная нагрузка TLS:
flows = dict()
for ts, pkt in pcap:
# parse and validate the packet
...
records = list()
try:
records, bytes_used = dpkt.ssl.tls_multi_factory(tcp.data)
except dpkt.ssl.SSL3Exception:
continue
except dpkt.dpkt.NeedData:
continue
if len(records) <= 0:
continue
for r in records:
if r.type != TLS_HANDSHAKE:
continue
if len(r.data) == 0:
continue
flow_key = ((ip.src, tcp.sport), (ip.dst , tcp.dport), ip.p)
flows[flow_key] = records
return flows
Теперь, после того, как pcap былпроанализировав и построив таблицу потоков, я хочу обработать flow_table и его значение в другой функции:
def process_tls_flows(flows):
for key, val in flows.items():
print("tls flow %s:%d -> %s:%d protocol 0x%x" \
% (socket.inet_ntop(socket.AF_INET, key[0][0]), key[0][1], \
socket.inet_ntop(socket.AF_INET, key[1][0]), key[1][1], key[2]));
Но смогу ли я использовать val
, как если бы это было раньше, например:
records = dpkt.ssl.tls_multi_factory(tcp.data)
Сохранит ли объект val
структуру полезной нагрузки пакета?