【问题标题】:Is it possible to recreate a request from the packets programatically?是否可以以编程方式从数据包创建请求?
【发布时间】:2020-09-04 18:26:57
【问题描述】:

对于我正在制作的脚本,我需要能够查看随请求发送的参数。 这可以通过 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 以及与该请求一起发送的参数?”

【问题讨论】:

    标签: python fiddler sniffing


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多