python: построить таблицу IP-потоков и обратиться к полезной нагрузке пакета - PullRequest
0 голосов
/ 23 октября 2019

Я анализирую 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 структуру полезной нагрузки пакета?

...