【问题标题】:Using pcapy or scapy to monitor self-generated (HTTP) network traffic使用 pcapy 或 scapy 监控自生成 (HTTP) 网络流量
【发布时间】:2012-08-18 00:57:14
【问题描述】:

我需要监控某个网站在处理时需要多长时间才能做出响应。我想嗅探端口 80 上的流量,但前提是与目标站点交换流量。我已经搜索过,似乎 pcapy 或 scapy 是适合这项工作的工具,但它们似乎比我需要的更深。我正在研究以下脚本:

Network traffic monitor with pcapy in python

我想我需要改变

def __handle_packet(self, header, data):
    # method is called for each packet by dispatch call (pcapy)
    self._dispatch_bytes_sum += header.getlen() #header.getlen() #len(data)
    logger.debug("header: (len:{0}, caplen:{1}, ts:{2}), d:{3}".format(header.getlen(), header.getcaplen(), header.getts(), len(data)))
    #self.dumper.dump(header, data)

以某种方式仅解包/处理发往目标站点的数据包。请注意,这适用于 LAN 上的 Windows XP 机器,浏览器启动流量至关重要。

任何指针表示赞赏?

【问题讨论】:

标签: python networking network-programming pcap scapy


【解决方案1】:

scapy 的问题在于它无法处理重新组装TCP streams。您正在寻找的 HTTP 可能嵌入在 TCP 流中。引用文档:

Scapy 基于刺激/响应模型。此模型不适用于 TCP 堆栈。另一方面,TCP 流经常被用作交换基于刺激/响应的消息的管道。

就像你说的,scapy 更适合低层的东西。例如,您可以跟踪 DHCP 请求的 IP 数据包。与许多网络工具一样,TCP 的复杂性和基于流的性质意味着,一旦您跨过该层,就很难重新组装所有内容并处理所有重传以及边缘情况以及连贯地提取数据。

您能否使用 curl 或 urllib 之类的东西,看看需要多长时间才能回复响应?

【讨论】:

  • 是的,我目前正在使用 selenium 来执行此操作,因为它会从浏览器生成流量。我希望被动地嗅探浏览器生成的流量是可能的,因为并不总是可以配置相应的 selenium 会话,但从你所说的来看,这看起来将是一个相当大的挑战。
  • @reckoner 是的,嗅探 TCP 很重要。它是有状态的。您可以设置连接并为多个请求保持打开状态,或者可能会为每个 HTTP 请求设置一个新连接。您当然可以编写一些代码,假设 TCP 始终可靠并且以您知道仅在特定情况下有效的特定方式运行。
  • @reckoner scapy 也有点烦人,因为我上次尝试使用它时只在 python 2.6 中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
相关资源
最近更新 更多