使用 Python 搜索 PCAP 文件和有关搜索查询的 return 关键信息
Using Python to search through a PCAP file and return key information about the search query
我们得到了一个 PCAP 文件,我的工作是找到:
在用户得到infected/attacked之前,他们使用了一个流行的搜索引擎(不是Google)来搜索一些信息。使用 Python 找出 1) 哪个搜索引擎和 2) 他们使用哪些关键字进行此类搜索。 3) 搜索引擎推荐了哪个网站 4) 用户实际访问了哪个网站?
通过在 Wireshark 上打开 PCAP 文件,我已经找到了正确答案:Bing
虽然我还不能确定第 2、3、4 部分
但这显然不是作业的目的,因为我必须使用 Python 来 return 信息
我目前的代码是:
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)
此代码能够成功returnbing.com作为搜索引擎使用。但是,我不知道如何处理第 2、3 和 4 部分
有什么建议吗?
pcaps 有严格的格式,允许分隔不同的数据包。在一个完美的世界里,你需要实现一个 pcap 解析器,让你一个一个地获取每个数据包进行研究。您使用了更重的方法,它只是将所有内容解析为文本(这在您的特定情况下有效:-)),所以这就是我将要记录的内容。但是,我真的建议您研究一下:当您拥有每个数据包时,它会容易得多。
如果允许您使用库,scapy
或 dpkt
等库可以帮助您解析 pcaps。
首先,您需要知道自己在寻找什么。关键字实际上是链接到 HTTP 请求的参数。当您将其解析为文件时,它匹配 url 的 ?
和 &
参数,例如 http://www.example.org/?param1=foo¶m2=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 请求之前和之后,但这很混乱。
我们得到了一个 PCAP 文件,我的工作是找到:
在用户得到infected/attacked之前,他们使用了一个流行的搜索引擎(不是Google)来搜索一些信息。使用 Python 找出 1) 哪个搜索引擎和 2) 他们使用哪些关键字进行此类搜索。 3) 搜索引擎推荐了哪个网站 4) 用户实际访问了哪个网站?
通过在 Wireshark 上打开 PCAP 文件,我已经找到了正确答案:Bing
虽然我还不能确定第 2、3、4 部分
但这显然不是作业的目的,因为我必须使用 Python 来 return 信息
我目前的代码是:
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)
此代码能够成功returnbing.com作为搜索引擎使用。但是,我不知道如何处理第 2、3 和 4 部分
有什么建议吗?
pcaps 有严格的格式,允许分隔不同的数据包。在一个完美的世界里,你需要实现一个 pcap 解析器,让你一个一个地获取每个数据包进行研究。您使用了更重的方法,它只是将所有内容解析为文本(这在您的特定情况下有效:-)),所以这就是我将要记录的内容。但是,我真的建议您研究一下:当您拥有每个数据包时,它会容易得多。
如果允许您使用库,scapy
或 dpkt
等库可以帮助您解析 pcaps。
首先,您需要知道自己在寻找什么。关键字实际上是链接到 HTTP 请求的参数。当您将其解析为文件时,它匹配 url 的 ?
和 &
参数,例如 http://www.example.org/?param1=foo¶m2=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 请求之前和之后,但这很混乱。