2013-01-18 21 views
2

我需要在Linux中将某些L2数据包(定制的)作为传入数据包注入特定接口,以测试运行在其上的某些应用程序。如何将原始L2数据包作为传入数据包注入Linux上的接口?

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

+0

你要注入数据包只对特定的接口,例如'eth0'还是要模拟未来包一般进入linux堆栈? – auny

+0

到一个特定的接口,导致我们有一个比默认eth-> IP-> tcp->用户空间堆栈略有不同的堆栈。 – wei

回答

3

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

brctl addbr <brname> 

现在创建一个虚拟eth对(默认名称veth0veth1)。 veths连接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 

让我们知道如何去

+0

谢谢,我接受这种方法,因为这应该是在一般设置中执行此操作的正确方法。在我们的例子中,我们没有可用的桥接模块。我最终编写了一个tap设备驱动程序。 – wei