模拟linux中网络接口上的传入数据包

时间:2012-08-10 12:36:57

标签: linux networking network-programming

如果您通常通过一个名为eth0的接口发送pcap的tcpreplay,则数据包是出站的,即将通过网卡发送。有什么方法可以让pcaps入站,以便我的系统应该将其作为入站数据包处理?

可能的情景

我有一个从eth0接收数据包的应用程序,从数据包中提取一些细节并通过eth1发送。现在情况很好,如果网络设置和真正的数据包实际流入我的系统。但是出于测试目的,我没有任何连接到我的eth0或eth1端口,但我仍然希望从pcap创建类似的流量(可能通过脚本),这样我就不必依赖外部物理网络连接用于测试应用程序。

3 个答案:

答案 0 :(得分:7)

eth0替换为lo

  1. 运行从lo接收数据包并将数据包发送到eth1
  2. 的应用程序
  3. 运行另一个程序(数据包生成器),将数据包发送到lo
  4. 发送到lo的每个数据包将再次由lo接收,因此您的应用程序将从您的数据包生成器接收数据包。

    如果你的lo忙于其他数据包,你可以通过内核参数max_loop=x添加更多的环回设备

答案 1 :(得分:4)

有几种可能的解决方案:

  • 快速而肮脏的解决方案:由于您有两个物理连接,您是否考虑过使用跳线连接机器上的两个以太网端口?然后,您就可以使用libpcap通过eth1发送数据包,并通过eth0接收数据包。当然,这个解决方案需要物理访问机器,你也会失去正常使用这些连接的能力。

  • 正确的解决方案:在我看来,您正在寻找的是一种通过物理网络接口模拟流量的方法。在Linux(以及可能的其他类Unix系统)上执行此操作的典型方法是创建TAP虚拟接口。有关TUN / TAP接口的简单教程,请查看here

    不幸的是,tpcreplay似乎还不支持TUN / TAP接口。你可能能够以某种方式使它工作,但我怀疑它会很尴尬。

  • 中间地带:在例如Linux上使用Linux虚拟机VirtualBox。我不确定所需的确切网络配置,但据我所知,这应该有效。

答案 2 :(得分:1)

您是否希望通过特定的网卡/接口在同一台计算机上发送和接收数据包? 我知道如何做到这一点的唯一方法是设置一个反弹/回显服务器。