【问题标题】:Better way to handle linux kernel packet routing处理linux内核数据包路由的更好方法
【发布时间】:2014-07-07 13:49:08
【问题描述】:

这里是场景-

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

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

所以,我天真地更改了ip协议路由决策(不影响正常决策),添加如下子句-

  1. 如果没有与 cur dev && cur dev != test0 关联的 ip,则转到 3 否则转到 4
  2. 路由数据包并转到 5
  3. 设置开发=测试0;然后转到 1
  4. 丢帧
  5. 完成

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

【问题讨论】:

    标签: c linux-kernel routing network-protocols packet


    【解决方案1】:

    您可以桥接这两个接口并将单个 IP 地址分配给桥接接口。所以连接wifi的机器应该可以通过接口test0访问。

    【讨论】:

    • 不幸的是,这对我的情况没有帮助(已经测试过),因为 test0 在通过 wlan0 中继数据包之前添加了一些额外的标头,因此没有 test0 的设备可以将数据包发送到带有 test0 的设备,但反过来不行true 因为在后一种情况下接收设备将丢弃数据包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2015-08-06
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多