我将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