【问题标题】:WinDivert: changing GET request in tcp packetWinDivert:更改 tcp 数据包中的 GET 请求
【发布时间】:2014-06-10 16:25:43
【问题描述】:

我正在尝试使用 pydivert(WinDivert for python)更改简单的 GET 请求

我似乎遇到的是数据包长度的问题。
当我重写 url 使其具有相同数量或更少的字母时,它可以工作:
IE。 GET /?a=asdf => GET /?a=z

但是当我在请求中添加更多字母时,浏览器会循环并结束 什么都不显示

下面是我使用的示例代码

filter_ = "true and tcp.PayloadLength > 0" 
with Handle(filter=filter_) as handle:

 while True:

        packet = handle.receive()

        if packet.payload[0:3]=="GET":
            packet.payload=packet.payload.replace("GET /?a=asdf","GET /?a=gfdsazzz")
        handle.send(packet)

<?php
  echo $_GET['a'];
?>

是否在某处设置了最大数据包大小。如果是,那么如何增加呢?

如果这对你来说是一个提示,那么如果我将在控制台中打印所有数据包 然后我清楚地看到服务器响应了该请求,因为看到 packet.payload 和gfdsazzz

【问题讨论】:

    标签: python tcp wfp


    【解决方案1】:

    直接的问题是您没有更新 TCP/IP 标头以反映新的数据包长度。

    但是,还有其他更严重的问题:

    1. 如您所述,新数据包可能超过最大数据包大小 (MTU)
    2. TCP Seq/Ack 编号需要更改,连接两端将不再同步。
    3. 编辑:另一个问题是 URL 可能会在多个数据包之间拆分,尤其是对于长 URL。

    第二个和第三个问题不容易解决。

    如果您希望使用 WinDivert 修改 TCP 流,更好的解决方案是使用 WinDivert 将流量重定向到本地代理服务器,并让代理服务器编辑流。有关使用此想法的示例程序,请参阅TorWall

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2013-04-10
      • 2018-10-17
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      相关资源
      最近更新 更多