我将网络连接存储为5个元组的PCAP文件,并使用Python在该列表中进行了很多搜索。但是,将所有5个值相互比较的简单解决方案非常慢。我的列表中包含Session对象,该对象存储以下数据,SrcIP:192.168.0.1SrcPort:443DstIP:192.168.0.101DstPort:5000协议:TCP我想在python中创建一个哈希函数,该函数为每个会话(5个元组)生成一个唯一的哈希值,并仅存储该值。我阅读了以下问题:Hash function for SRC DST IP and Port但是仍然对可以使用默认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
:
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