使用Python搜索PCAP文件并返回有关搜索查询的关键信息

时间:2019-03-19 14:23:09

标签: regex python-3.x expression pcap regular-language

我们已获得一个PCAP文件,我的工作是查找:

在用户被感染/攻击之前,他们使用了流行的搜索引擎(而非Google)来搜索某些信息。使用Python找出 1)哪些搜索引擎和2)他们用来进行此类搜索的关键字。 3)搜索引擎推荐了哪个网站,以及4)用户实际访问了哪个网站?

通过在Wireshark上打开PCAP文件,我已经找到了正确的答案:必应

尽管我仍然无法确定第2、3和4部分

但是,这显然不是赋值的目的,因为我必须使用Python返回信息

到目前为止,我的代码是:

pcapfile = open('nameofpcapfile.pcap', 'rb')

x = pcapfile.read()
decoded = x.decode("iso-8859-1")

searchengines = ["www.google.com", "www.yahoo.com", "www.ask.com", "www.bing.com",
                 "www.aol.com", "www.baidu.com", "www.wolframalpha.com",
                 "www.duckduckgo.com", "www.yandex.ru"]

searchenginesfound = []

for i in searchengines:
    if i in decoded:
        searchenginesfound.append(i)


if searchenginesfound.__len__() == 0:
    print("Search engine not found")
elif searchenginesfound.__len__() == 1:
    print("Search Engine used: ", searchenginesfound)
elif searchenginesfound.__len__() > 1:
    print("Search Engines used: ", searchenginesfound)

此代码能够成功返回bing.com作为使用的搜索引擎。但是,我不知道该如何处理第2、3和4部分

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

pcap具有严格的格式,可以分隔不同的数据包。在理想的情况下,您需要实现一个pcap解析器,使您可以逐个获取每个数据包进行学习。您使用了较重的方式,该方式只是将所有内容解析为文本(这在您的特定情况下是有效的:-)),所以这就是我要记录的内容。但是,我真的建议您研究一下:将每个数据包都当成自己的数据包要容易得多。

如果允许您使用库,则诸如scapydpkt之类的库可以帮助您解析pcaps。

首先,您需要知道要查找的内容。关键字实际上是链接到HTTP请求的参数。当您将其解析为文件时,它会匹配网址的?&参数,例如http://www.example.org/?param1=foo&param2=bar

在您要使用Bing的情况下,以下是您可以找到的参数列表:https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-web-api-v5-reference#query-parameters

要获取这些URL,您需要首先提取所有URL。为此,您可以使用正则表达式和Python内置的re模块。在网上寻找一个不错的网站,例如,以下是我为HTTP找到的网站:

regex = r"/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/"

然后,您需要先re.search(regex, decoded),然后使用groups()(在线查找:-))来查找所有URL。之后,您将可以split("&")获得各种关键字。

对于3)和4),您需要找到下一个HTTP答案和请求。这是不实现pcap解析器的棘手之处,因为您需要猜测它们在文本区域中的位置。您可能可以像在HTTP请求之前和之后一样查找HTTP标签,但这很麻烦。