模拟流量到达特定接口

Emulate arrival of traffic on specific interface

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

  1. 我需要在特定界面上模拟到达。例如。在 eth0 上。在另一个接口(例如 tap0)上发送数据包并不能解决我的问题。
  2. 解决方案必须是独立的,即不涉及另一台机器,不需要在接口之间连接电缆或 任何其他 'external' 解决方案。

为了提供一些上下文,我需要我发送的数据包来遍历 ip 链(特别是我对 netfilter 挂钩感兴趣) 就像到达定义的界面一样。 例如,如果过滤器 table 的 FORWARD 链中的 iptables 中存在规则,其接受规则为 '-i eth0', 那么该规则应该匹配所请求机制发送的任何数据包。

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

  1. 创建一个 SKB
  2. 设置headers和数据
  3. 找到您要欺骗的设备的 struct net_device(参见 here
  4. skb->dev 设置为在步骤 3
  5. 中找到的 net_device
  6. 调用netif_rx_ni(skb)将数据包推入堆栈

http://cdn.kerio.com/dwn/control/control-9.0.0-442/kerio-control-kipf-9.0.0-442-linux.tgz in drivers/ipf/linux/pkt.c at line 691 (the pkt_tx_rx_eth function). You can also see how the kernel TUN driver does it here.

中有一些代码可以完成大部分工作

希望对您有所帮助!祝你好运。