如何散列 5 元组(SRC IP - SRC PORT - DST IP - DST PORT - Procotol )



我将PCAP文件中的网络连接存储为5元组,并使用Python在该列表中进行了大量搜索。然而,将所有 5 个值相互比较的微不足道的解决方案非常慢。 我的列表包含存储以下数据的会话对象, 来源IP : 192.168.0.1 来源 : 443 密码 : 192.168.0.101 港口 : 5000 协议:技术合作计划 我想在 python 中创建一个哈希函数,为每个会话(5 个元组(生成一个唯一的哈希值并仅存储该值。我读了以下问题: SRC 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

快速而简单:利用 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

相关内容

最新更新