这是场景 -
- 我有两个接口(interface) wlan0 和 test0(逻辑)。
- 我无法控制 wlan0 设备驱动程序,但我可以完全控制 test0 设备驱动程序 (xD)。
- test0 实际上使用 wlan0(内部)发送一些数据包
- wlan0 没有关联的 IP,但 test0 有
现在,当我尝试向连接到 wlan0 的任何设备发送 ping 命令时。数据包到达目标设备,目标设备以 ping 响应进行响应。数据包在 wlan0 处接收并推送到 ip 协议(protocol)。但是 ip 协议(protocol)会丢弃该数据包,因为在尝试在内核内部路由数据包时存在与 wlan0 关联的 ip 协议(protocol)。
因此,我天真地通过添加如下子句来更改 ip 协议(protocol)路由决策(不影响正常决策) -
- 如果没有与 cur dev && cur dev != test0 关联的 IP,则转到 3,否则转到 4
- 路由数据包并转到 5
- 设置 dev = test0;并转到 1
- 放下框架
- 完成
所以,现在我可以发送和接收数据包,但这个解决方案并不好,因为对于给定场景中我想要支持的每个协议(protocol),我必须添加该子句(例如 ARP)。 所以,我的问题是在这种情况下处理数据包路由的更好方法/方法应该是什么。
最佳答案
您可以桥接这两个接口(interface)并为桥接接口(interface)分配一个 IP 地址。因此连接到 wifi 的机器应该可以通过接口(interface) test0 访问。
关于c - 处理 Linux 内核数据包路由的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740498/