模拟特定接口上的流量到达

时间:2015-12-21 12:02:41

标签: ethernet netfilter

我想模仿特定接口(例如eth0)上的流量到达。 我有非常严格的要求(很可能这是不可能的):

  1. 我需要模仿到达特定的界面。例如。关于eth0。在另一个接口(例如tap0)上发送数据包无法解决我的问题。
  2. 解决方案必须是自包含的,即不涉及另一台机器,不需要在接口之间连接电缆或 无论其他什么'外部'的解决方案。
  3. 为了提供一些上下文,我需要我发送的数据包遍历ip链(特别是我对netfilter钩子感兴趣) 就像到达定义的界面一样 例如,如果过滤表的FORWARD链中的iptables中存在规则,其接受规则是' -i eth0', 那么规则应匹配所请求机制发送的任何数据包。

1 个答案:

答案 0 :(得分:1)

您需要创建一个内核模块,手动将数据包注入网络堆栈。您需要的基本步骤是:

  1. 创建一个SKB
  2. 设置标题和数据
  3. 找到您要欺骗的设备的struct net_device(请参阅here
  4. skb->dev设置为步骤3中找到的net_device
  5. 调用netif_rx_ni(skb)将数据包推入堆栈
  6. 有一些代码在drivers/ipf/linux/pkt.c的{​​{1}}第691行(pkt_tx_rx_eth函数)执行绝大多数代码。您还可以看到内核TUN驱动程序如何执行它http://cdn.kerio.com/dwn/control/control-9.0.0-442/kerio-control-kipf-9.0.0-442-linux.tgz

    希望这有帮助!祝你好运。