【问题标题】:How to inject a raw L2 packet as an incoming packet to an interface on Linux?如何将原始 L2 数据包作为传入数据包注入 Linux 上的接口?
【发布时间】:2013-01-02 15:55:48
【问题描述】:

我需要将一些 L2 数据包(自定义)作为 Linux 中的传入数据包注入特定接口,以测试在其上运行的一些应用程序。

是否有任何库(首选 python)/示例可以提供帮助?我正在浏览 Scrapy 库,但看起来它只能将数据包作为传出数据包注入网络?

【问题讨论】:

  • 您是否只想将数据包注入特定接口,例如eth0 或者您是否想模拟一般进入 linux 堆栈的数据包?
  • 到特定接口,因为我们的堆栈与默认的 eth->IP->tcp->用户空间堆栈略有不同。

标签: linux network-programming packets


【解决方案1】:

如果您有可用的本机 linux bridge 模块,那么您可以通过这种方式使用它。创建桥梁

brctl addbr <brname>

现在创建一个虚拟的eth 对(默认名称veth0veth1)。 veth 是连接的 L2 设备

ip link add type veth
ifconfig veth0 up
ifconfig veth1 <some_ip> up

现在添加您的特定接口,比如说eth0,以及veth 对的一侧到此桥。

brctl addif <brname> eth0
brctl addif <brname> veth0

这会将这两个接口添加到网桥。现在,当您在veth0 上发送流量时,您应该也可以在eth0 上获得它(基于正常的 L2 交换机功能)。要在veth0 上发送流量,您只需将流量注入veth1,因为它们都是内部连接的。所以假设你想使用tcpreplay,就这样做

tcpreply -i veth1 yourpcap.pcap

告诉我们进展如何

【讨论】:

  • 谢谢,我接受这种方法,因为这应该是在一般设置中执行此操作的正确方法。在我们的例子中,我们没有这个可用的桥接模块。我最终编写了一个水龙头设备驱动程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2012-10-13
  • 2011-05-11
  • 2010-09-17
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多