【问题标题】:How do I modify a HTTP response packet with winpcap?如何使用 winpcap 修改 HTTP 响应数据包?
【发布时间】:2010-05-10 11:23:43
【问题描述】:

这里有两个问题:

  1. 如果内容被编码怎么办:gzip...
  2. 我是否还需要更改标头部分以使 HTTP 数据包有效(如果有校验和?)

更新

有实际经验的人能否详细说明所涉及的步骤?

我使用winpcap 和bpf tcp and src port 80 来过滤流量,所以我的工作在于这个回调函数:

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

【问题讨论】:

  • 你需要为这个问题提供更多背景信息,你想做什么?
  • 我正在尝试修改 HTTP 响应数据包。我通过wireshark看到很多数据包都被编码了。
  • 您似乎混淆了 HTTP(一种流协议),它可能运行在各种网络协议和 IP(基于数据包/路由的网络协议)之上。在您了解其中的区别之前,您将遇到很多问题。
  • 呃,不是这样。正如 BalusC 在您的 cmets 中指出的那样,您混淆了传输层和应用程序层,这将影响您是否得到对您有帮助的答案。您的整个问题是关于您需要采取哪些特殊步骤来修改 HTTP 数据,无论您是在谈论在应用程序层修改 HTTP 流还是在传输层修改 TCP 数据包,当这些数据包发生时,这真的很重要包含 HTTP 数据。
  • 我认为这是您最好询问您要解决的问题而不是询问如何实施您提出的特定解决方案的情况之一和。您的方法似乎充其量是令人困惑的,因此对于我们其他人来说,了解全局会更有帮助。

标签: c http networking winpcap


【解决方案1】:

WinPcap 不允许您更改已发送的数据包。

如果数据包已发送,WinPcap 不会阻止它到达目的地。

如果您想发送另一个响应 - 除了已发送的响应之外 - 我不确定您要达到什么目的。

【讨论】:

    【解决方案2】:
    1. 用 GZIP 解压器解压。
    2. 删除Content-Encoding 标头并添加一个Content-Length 标头,表示新的字节长度。

    也就是说,为了获得更好的答案,您需要在问题中提供更多上下文。这就是气味。您正在尝试实现什么,并且您认为修改 HTTP 响应是正确的解决方案?

    【讨论】:

    • 我这样做是为了兴趣。您确定我不需要更改其他标头信息,例如 ethernet/tcp/ip/http 层中的校验和吗?
    • HTTP 规范没有说明带有校验和的标头。它显然是自定义标题。您还应该阅读 HTTP 规范以引起兴趣:)
    • 但是 tcp/ip 层中有校验和。如果我只更改内容而不更改校验和,恐怕数据包将无效。
    • 啊,这样。您想修改代表 gzip 压缩 HTTP 响应一部分的 TCP/IP 数据包?不,您不能在每个 TCP/IP 数据包的基础上执行此操作。您必须缓冲代表整个 HTTP 响应的所有数据包,解压缩其正文并使用更改的标头重新发送它。
    • 您是否需要关心校验和取决于您将如何实施您的解决方案。您将如何以及在何处捕获数据包?您是在制作透明代理服务器,还是只是在嗅探数据包并打算再次发送它们 - 在这种情况下,您如何停止原始数据包?- 您无法真正将重复发送到目的地。
    【解决方案3】:

    libpcap 用于捕获。如果你想修改和注入网络数据包,你需要另一个库,例如libnet

    【讨论】:

    • 它可以 1) 进行数据包注入和 2) 完成数据包处理(即使没有自动构造函数)。除了一些用于 gzip 解压缩的外部例程之外,我看不出您还需要什么。
    【解决方案4】:

    winpcap 是尝试修改 TCP 流的一种奇怪方法 - 您没有解释为什么要尝试这样做,但您应该可以通过编写自己的 HTTP 代理来实现这一点。这样,您将获得一个直接的数据流,您可以截取、记录和修改您心中的内容。完成此操作后,从 request 标头中删除 Accept-Encoding,然后您将永远不需要首先处理压缩响应。

    没有 HTTP 校验和,但较低层有校验和;通过在应用程序级别上作为代理服务器运行,您可以让网络堆栈为您处理所有这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多