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

问题描述 投票:0回答:1

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

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

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

虽然我仍然无法确定第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部分

有什么建议?

regex python-3.x expression pcap regular-language
1个回答
0
投票

pcaps具有严格的格式,允许分隔不同的数据包。在一个完美的世界中,您需要实现一个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

要获得这些,您需要先提取所有网址。为此你可以使用正则表达式和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解析器变得棘手的地方,因为你需要猜测它们在你的blob文本中的位置。您可以查找HTTP标记,因为它们在HTTP请求之前和之后,但这很麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.