在Python中存储和查找IP包头字段

时间:2013-12-10 09:50:49

标签: python sqlite dictionary lookup-tables

我想创建一个简单的表(使用python),我可以在其中存储/搜索IP包头字段,即

源IP,目标IP,源端口,目标端口,计数

当我收到新的数据包标题字段时,我希望实现以下功能:

在表格中查找是否已添加包含这些字段的数据包,如果为true,则更新计数。

如果表中尚未存在数据包,请创建一个新条目,依此类推。

到目前为止,通过我的搜索,我有两个选择:

  1. 创建一个词典列表,每个词典都有上面提到的五个字段。 (Python list of dictionaries search

  2. 使用SQLite。

  3. 我想问一下创建数据包/流查找表的最佳方法(或最佳选择)是什么。表的预期大小为100-500个条目。

1 个答案:

答案 0 :(得分:0)

您可以使用集合中的defaultdict(list)来存储数据。我假设您希望基于源IP进行搜索,以便将源IP保持为密钥。

from collections import defaultdict
testDictionary = defaultdict(list)
testDictionary["192.168.0.1"] = ["10.10.10.1", 22, 8080, 0]
if testDictionary[sourceIP]:
    testDictionary[sourceIP][-1] += 1

由于您说您只有一个包含100-500个条目的表,因此您也可以使用

搜索目标IP
for sourceIP, otherHeader in testDictionary.items():
    if otherHeader[0] == destinationIP:
        testDictionary[sourceIP][-1] += 1

我不知道源IP和目标IP在所有情况下都是唯一的。为此,您可以决定选择什么。 defaultdict(list)的优点是你可以附加东西而不会覆盖以前的值。

for sourceIP, otherHeader in testDictionary.items():
    if otherHeader[0] != destinationIP:
        testDictionary[sourceIP].append(["10.10.10.2", 22, 8080, 1])
    else:
        testDictionary[sourceIP][-1] += 1

我不确定这正是您所寻找的,但我已根据说明尝试了解您的数据类型。

希望有所帮助。