下一页 上一页 目录

7. 高级问题

7.1 数据包篡改

在您拦截数据包之后,可以更改其头部或内容,然后再重新注入。以下是一些您可能需要记住的规则

IP 头部的所有其他部分都可以修改,您有责任确保它们的合理性。

7.2 无需拦截即可注入

注入数据包不一定需要先拦截它。您可以创建自己的数据包并将它们注入到已打开并绑定的 divert socket 中。上述头部规则仍然适用。

此外,您需要将 sockaddr_in 结构(请参阅示例程序)传递给 divert socket,这将告诉 socket 在哪里注入。如果您将结构置零或传递 NULL,divert socket 将尝试在出站方向(在网络上)注入数据包。相反,如果您使用本地接口之一的地址填充 sockaddr_in 结构,divert socket 将尝试在入站方向注入数据包,就好像它来自该接口一样。当然,所有地址都应以网络字节顺序排列。

注入看起来像是由您的主机转发的数据包必须包含传入接口的地址(实际上 - 任何有效的接口地址都可能有效)。

7.3 分片

截至本文撰写时,divert socket 尚不处理被 divert 数据包的分片和重组 - 您始终获得网络上的原始分片,并且您不应注入大于 PMTU 的分片。预计分片/重组功能将在不久的将来添加。


下一页 上一页 目录