linux - 如何使本地终止的 tcp 连接通过预路由和后路由?

标签 linux testing networking tcp netfilter

我正在开发一个使用 netfilter 队列过滤和破坏数据包的应用程序。它相当复杂并且需要表现良好,所以我想自动化一些严格的测试。为此,我需要能够通过我的系统路由一些 TCP 连接,但是,我不想依赖另外两台机器充当客户端和服务器。我更愿意运行发送数据的本地客户端和检查损坏结果的本地服务器。

问题是我的应用程序需要在 PREROUTING 阶段拦截数据包,因此本地客户端生成的数据包不能直接路由到环回接口(interface)。

所以我需要一些方法在预路由阶段之前注入(inject)数据包并在后路由阶段拦截它们。如果我能以某种方式使用流套接字来发送和接收数据,那就太好了!

最佳答案

我能想到的最直接的方法是使用 tun设备。 tun 设备允许您从用户空间注入(inject)数据包,这些数据包似乎是通过 tun 接口(interface)到达的。您可以自己编写代码来创建和操作 tun 接口(interface),也可以使用像 OpenVPN 这样的应用程序。已经这样做了。使用 OpenVPN 会很容易:没有特殊的原始套接字或任何东西:您只需向它发送封装在 UDP 中的 IP 数据包,它将使它们通过 tun 接口(interface)到达。

关于linux - 如何使本地终止的 tcp 连接通过预路由和后路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952698/

相关文章:

java - jenkins CI 中服务器节点未连接

java - 如何获取WiFi网络接口(interface)的MAC地址?

linux - 如果我将 tomcat 7 绑定(bind)到第二个 IP 地址,它会在需要时使用第一个 IP 地址吗?

iOS - 发布前测试应用程序商店二进制文件?

testing - Microsoft 测试管理器中的自动化测试 "build directory of the test run either does not exist or access permission is required"

javascript - 如何在 Ember.js 中测试组件方法?

unix - 为什么NFS默认使用UDP?

通过 vsyscall 页面的 Linux 系统调用策略

linux - HAL - UDISKS,人类可读,在 bash 脚本中将字节转换为千兆字节

linux - 启用mod_rewrite后无法访问网站