我目前正在用 C 语言开发一个项目,在该项目中,我捕获网络数据包,修改它们的标头(例如更改目标 IP),然后将修改后的数据包发送到新的目的地。但是,我遇到一个问题,在修改并发送数据包后,它最终被传递到原始目的地和新目的地。
尽管修改了捕获数据包的目标 IP,但修改后的数据包最终会被传送到原始目的地和新目的地。
这会导致修改后的数据包同时到达原始目的地和新目的地。
这种方法仍然会导致数据包到达两个目的地。
我确保数据包的标头(包括校验和)在修改后正确更新。
我确实不想想在这个项目中使用iptables或任何其他外部工具——我严格使用C库并且希望完全用代码来控制这个过程。
我不确定这个问题是否是由于我管理数据包捕获和修改的方式引起的,或者原始套接字与网络堆栈交互的方式是否有问题。
我已经在网上寻找解决方案好几天了,但我还没有找到任何真正解决我面临的问题的帖子。
有没有人遇到过类似的问题,或者有没有人对如何确保只有修改后的数据包发送到新目的地而不是原始数据包有任何建议?
在原始套接字行为或 Linux 内核如何在这种情况下处理路由方面,我可能会忽略一些具体的东西吗?
预先感谢您的帮助!
创建一个tun接口,给它一个静态ip为10.0.0.1,设置系统路由以将所有数据包导入tun接口。