c - 处理 Linux 内核数据包路由的更好方法

标签 c linux-kernel routes network-protocols packet

这是场景 -

  1. 我有两个接口(interface) wlan0 和 test0(逻辑)。
  2. 我无法控制 wlan0 设备驱动程序,但我可以完全控制 test0 设备驱动程序 (xD)。
  3. test0 实际上使用 wlan0(内部)发送一些数据包
  4. wlan0 没有关联的 IP,但 test0 有

现在,当我尝试向连接到 wlan0 的任何设备发送 ping 命令时。数据包到达目标设备,目标设备以 ping 响应进行响应。数据包在 wlan0 处接收并推送到 ip 协议(protocol)。但是 ip 协议(protocol)会丢弃该数据包,因为在尝试在内核内部路由数据包时存在与 wlan0 关联的 ip 协议(protocol)。

因此,我天真地通过添加如下子句来更改 ip 协议(protocol)路由决策(不影响正常决策) -

  1. 如果没有与 cur dev && cur dev != test0 关联的 IP,则转到 3,否则转到 4
  2. 路由数据包并转到 5
  3. 设置 dev = test0;并转到 1
  4. 放下框架
  5. 完成

所以,现在我可以发送和接收数据包,但这个解决方案并不好,因为对于给定场景中我想要支持的每个协议(protocol),我必须添加该子句(例如 ARP)。 所以,我的问题是在这种情况下处理数据包路由的更好方法/方法应该是什么。

最佳答案

您可以桥接这两个接口(interface)并为桥接接口(interface)分配一个 IP 地址。因此连接到 wifi 的机器应该可以通过接口(interface) test0 访问。

关于c - 处理 Linux 内核数据包路由的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740498/

相关文章:

c - 如何使用 C 系统调用和管道处理文件 I/O?

javascript - 如何在 HERE Map API 上获取方向多段线而不是实线

c - 为什么结构按照最高数据类型分配大小?

c - 为什么这不能正确打印我输入的用户名?

linux - mmap/dev/mem时的缓存和 volatile 内存

linux-kernel - 无法访问打开的/arch/x86/syscalls/syscall_32.tbl

ASP.NET MVC 区域本地化

php - 克莱因路线不返回任何内容

c - 我怎样才能让这个循环运行得更快?

c - 为指向函数的指针编写一个 getter