使用NFQUEUE

时间:2015-05-15 21:36:09

标签: linux sockets network-programming firewall iptables

我正在尝试解决以下问题,

  1. 我的输出链中有一个iptables规则,如果数据包符合某些条件,则将其排队并使用NFQUEUE将其发送到用户空间

  2. 用户空间程序接收它,一旦收到它,它会检查数据包是否是tcp数据包,如果是,则修改数据包的内容

  3. 修改后,它发出并且我能够看到它到现在它正常工作,我能够重新计算校验和并验证它并更新数据包的长度,一切都得到了正确的反映我能够使用wireshark确认它,我也能看到数据包到达目的地。我正在修改的数据包是HTTP GET数据包。

  4. 初始TCP握手发生,在初始握手之后,我发出修改后的HTTP GET数据包,我从服务器收到响应,但在此之后,客户端由于某种原因生成TCP RST数据包并将其发送到目的地,我不知道为什么会发生这种情况,早在Google搜索时,有人报告说这可能是由于序列号无序,但在我的情况下,因为我正在修改TCP握手后的第一个数据包,序列号将与我最后一个属于TCP握手的ACK数据包相同。

  5. 我怀疑内核模块的某些部分正在缓存HTTP GET请求数据包的长度,一旦我修改它并更新长度,缓存的部分就不会得到更新,并且作为一个原因,客户端正在发送TCP RST数据包。

  6. 有人可以帮我解决上述情况。

0 个答案:

没有答案