WinDivert:在tcp数据包中更改GET请求

时间:2014-06-10 16:25:44

标签: python tcp wfp

我试图用pydivert改变简单的GET请求(WinDivert for python)

我似乎遇到的是数据包长度问题 当我重写url所以它有相同数量或更少的字母时它起作用:
即。 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'];
?>

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

如果这对您有所提示,那么我是否会在控制台中打印所有数据包 然后我清楚地看到服务器响应了该请求,因为请参阅包含gfdsazzz

的packet.payload

1 个答案:

答案 0 :(得分:2)

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

然而,还有其他更严重的问题:

  1. 如您所述,新数据包可能超过最大数据包大小(MTU)
  2. 需要更改TCP Seq / Ack编号,并且不再在连接的两端同步。
  3. 编辑:另一个问题是URL可能在多个数据包之间分开,特别是对于长URL。
  4. 第二和第三个问题不容易修复。

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