在您拦截数据包之后,可以更改其头部或内容,然后再重新注入。以下是一些您可能需要记住的规则
注入数据包不一定需要先拦截它。您可以创建自己的数据包并将它们注入到已打开并绑定的 divert socket 中。上述头部规则仍然适用。
此外,您需要将 sockaddr_in
结构(请参阅示例程序)传递给 divert socket,这将告诉 socket 在哪里注入。如果您将结构置零或传递 NULL,divert socket 将尝试在出站方向(在网络上)注入数据包。相反,如果您使用本地接口之一的地址填充 sockaddr_in
结构,divert socket 将尝试在入站方向注入数据包,就好像它来自该接口一样。当然,所有地址都应以网络字节顺序排列。
注入看起来像是由您的主机转发的数据包必须包含传入接口的地址(实际上 - 任何有效的接口地址都可能有效)。
截至本文撰写时,divert socket 尚不处理被 divert 数据包的分片和重组 - 您始终获得网络上的原始分片,并且您不应注入大于 PMTU 的分片。预计分片/重组功能将在不久的将来添加。