【问题标题】:Using Python to search through a PCAP file and return key information about the search query使用 Python 搜索 PCAP 文件并返回有关搜索查询的关键信息
【发布时间】:2023-03-12 11:20:02
【问题描述】:

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

在用户被感染/攻击之前,他们使用流行的搜索引擎(不是谷歌)来搜索一些信息。使用 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 部分

有什么建议吗?

【问题讨论】:

  • 使用pcapq 应用程序。它对 pcap 文件运行查询。

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


【解决方案1】:

pcaps 具有严格的格式,允许分隔不同的数据包。在一个完美的世界里,你需要实现一个 pcap 解析器,让你一个一个地获取每个数据包进行学习。您使用了较重的方式,它只是将所有内容解析为文本(在您的非常具体的情况下有效:-)),所以这就是我将要记录的内容。但是,我真的建议您研究一下:当您拥有每个数据包时,它会容易得多。

如果您被允许使用库,scapydpkt 等库可以帮助您解析 pcap。

首先,您需要知道自己在寻找什么。关键字实际上是链接到 HTTP 请求的参数。当您将其解析为文件时,它会匹配 url 的 ?& 参数,例如 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。为此,您可以使用正则表达式和 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 请求之前和之后,但这很混乱。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2020-10-25
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多