首页 文章

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

提问于
浏览
9

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

可能的情景

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

3 回答

  • 1

    eth0 替换为 lo

    • 运行从 lo 接收数据包的应用程序并将数据包发送到 eth1

    • 运行另一个程序(数据包生成器),将数据包发送到 lo

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

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

  • 4

    有几种可能的解决方案:

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

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

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

    • 中间地带:使用例如Linux虚拟机VirtualBox . 我不确定所需的确切网络配置,但据我所知,这应该工作 .
  • 7

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

相关问题