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

woo*_*tok 10 linux networking network-programming

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

可能的情景

我有一个从eth0接收数据包的应用程序,从数据包中提取一些细节并通过eth1发送.现在情况很好,如果网络设置和真正的数据包实际流入我的系统.但是出于测试目的,我没有什么连接到我的eth0或eth1的端口,但我还是想创建一个PCAP(可能通过一个脚本)类似类型的流量,使我不必依靠外部物理网络连接上用于测试应用程序.

Zan*_*Jie 7

替换eth0lo

  1. 运行从中接收数据包lo并将数据包发送到的应用程序eth1
  2. 运行另一个发送数据包的程序(数据包生成器) lo

发送到的每个数据包lolo再次被接收,因此您的应用程序将从您的数据包生成器接收数据包.

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


thk*_*ala 5

有几种可能的解决方案:

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

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

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

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