Как иметь sh 5-кортеж (SR C IP - Порт SR C - DST IP - Порт DST - Procotol) - PullRequest
0 голосов
/ 27 января 2020

Я сохраняю сетевые подключения в файле PCAP в виде 5-ти кортежей, и делаю так много поиска в этом списке с помощью Python. Однако тривиальное решение, которое сравнивает все 5 значений друг с другом, является чрезвычайно медленным. В моем списке есть объекты Session, в которых хранятся следующие данные: SrcIP: 192.168.0.1 SrcPort: 443 DstIP: 192.168.0.101 DstPort: 5000 Протокол: TCP Я хочу создать функцию ha sh в python, которая генерирует уникальный ha sh значение для каждого сеанса (5 кортежей) и хранить только это значение. Я прочитал следующие вопросы: Ha sh функция для SR C DST IP и порт Но все еще интересует решение, которое может быть достигнуто с помощью стандартных python модулей, таких как ipaddress и hashlib.

Я попробовал модуль ipaddress, и в результате я получил 5 различных значений, таких как:

import ipaddress

ip1 = ipaddress.ip_address('192.168.1.1')
ip2 = ipaddress.ip_address('255.255.255.255')
port1 = 445
port2 = 5001
protocol = 'tcp'
print(int(ip1))
print(int(ip2))
print(port1)
print(port2)
print(protocol)

Что выводит следующее:

3232235777
4294967295
445
5001
tcp

1 Ответ

1 голос
/ 27 января 2020

Быстро и просто: используйте python hash на строке, построенной с вашими значениями:

key = '{};{};{};{};{}'.format(src_ip, src_port, dst_ip, dst_port, protocol)
hashed_key = hash(key)

Пример:

key = '192.168.0.1;443;192.168.0.101;5000;TCP'
print(hash(key))

печатает

2213561766848318588

Для большего контроля над функцией хеширования, посмотрите на hashlib

...