python - 是否可以以编程方式从数据包创建请求?

标签 python fiddler sniffing

对于我正在制作的脚本,我需要能够查看随请求发送的参数。 这可以通过 Fiddler 实现,但我正在尝试自动化该过程。

Here首先是一些屏幕截图。正如您在 Fiddler 的第一张图片中看到的,我可以看到请求的 URL 以及随该请求发送的参数。

我尝试使用 scapy 使用下面的代码进行一些数据包嗅探,看看是否可以获得类似的结果,但我得到的是第二张图片。基本上,我可以将数据包的源和目的地作为 IP 地址获取,但数据包本身只是字节。

def sniffer():
    t = AsyncSniffer(prn = lambda x: x.summary(), count = 10)
    t.start()
    time.sleep(8)
    results = t.results
    print(len(results))
    print(results)
    print(results[0])

据我了解,建立 TCP 连接后,请求会被分解为多个 IP 数据包,然后发送到目的地。我希望能够复制 Fiddler 的功能,在其中我可以看到请求的 url,然后看到发送过来的参数值。

仅通过从数据包收集的信息来重新创建请求的信息是否可行?

或者这种差异是因为嗅探是在第 2 层完成的,然后 Fiddler 可能在转换为 IP 数据包之前/之后在第 3/4 层进行操作,因此它实际上看到了原始请求本身的内容和数据包组合的结果?如果我的理解有误,请指正。

基本上,我的问题归结为:“是否有一个 python 模块可以用来复制 Fiddler 的功能来识别请求的目标 URL 以及随该请求发送的参数?”

最佳答案

嗅探的流量是 HTTPS 流量 - 因此仅通过嗅探您将看不到 HTTP 请求/响应的任何详细信息,因为它是通过 SSL/TLS 加密的。

Fiddler 是一个具有 HTTPS 拦截功能的代理,这与网络级别的嗅探流量完全不同。这意味着对于客户端应用程序,Fiddler“模仿”服务器,对于服务器应用程序,Fiddler 模仿客户端。这允许 Fiddler 解密请求/响应并将其显示给您。

如果你想在 python 级别执行请求拦截,我建议你使用 mitmproxy而不是 fiddler 。该代理还可以执行 HTTPS 拦截,但它是用 Python 编写的,因此更容易集成到您的 Python 环境中。

或者,如果您只想查看 Python 程序的请求/响应详细信息,通过以适当的方式设置日志级别可能会更容易。例如,请参阅这个问题:Log all requests from the python-requests module

关于python - 是否可以以编程方式从数据包创建请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746333/

相关文章:

python - 如何将引号/撇号添加到 psycopg2 中的列值?

c# - 为什么使用 Fiddler 时 HttpWebRequest 对象的性能会提高?

php - 将 PHP cURL 与 HTTP 调试代理一起使用

android 如何从第三方应用程序的 Intent 中嗅探额外的参数值

mysql - 对 phpMyAdmin 嗅探的响应

python - 如何获得范围内的所有变量?

python - 如何在 pyspark 中重命名数据框的列?

unit-testing - 使用 TestDriven.NET 在 Fiddler 中捕获 HTTP 流量

linux - 使用 socket raw 嗅探 802.3 eth 数据包

带有nans的python数组初始化(预分配)