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

在linux中模拟网络接口上的传入数据包,linux,networking,network-programming,Linux,Networking,Network Programming,如果您通常通过接口(如eth0)发送pcap的tcpreplay,则数据包将出站,即通过网卡出站。是否有任何方法可以使PCAP入站,以便我的系统将其作为入站数据包进行处理 可能的情景 我有一个应用程序,它从eth0接收数据包,从数据包中提取一些细节并通过eth1发送。现在,如果网络已经建立,真正的数据包实际流入我的系统,情况就好了。但出于测试目的,我没有任何东西连接到我的eth0或eth1端口,但我仍然希望从pcap(可能通过脚本)创建类似类型的流量这样我就不必依赖外部物理网络连接来测试应用程序

如果您通常通过接口(如eth0)发送pcap的tcpreplay,则数据包将出站,即通过网卡出站。是否有任何方法可以使PCAP入站,以便我的系统将其作为入站数据包进行处理

可能的情景


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

是否要在同一台计算机上通过特定的网卡/接口发送和接收数据包?

我知道的唯一方法就是设置一个跳出/回送服务器。

eth0
替换为
lo

  • 运行从
    lo
    接收数据包并将数据包发送到
    eth1
  • 运行另一个程序(数据包生成器),将数据包发送到
    lo
  • 发送到
    lo
    的每个数据包都将被
    lo
    再次接收,因此您的应用程序将从数据包生成器接收数据包


    如果您的
    lo
    正忙于处理其他数据包,您可以通过内核参数
    max\u loop=x

    添加更多环回设备。有几种可能的解决方案:

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

    • 正确的解决方案:在我看来,您正在寻找的是一种通过物理网络接口模拟流量的方法。在Linux(可能还有其他类似Unix的系统)上实现这一点的典型方法是创建一个虚拟接口。查看有关TUN/TAP接口的简单教程

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

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


    好的,这清楚地表明我的方法(我所知道的唯一方法)对您没有任何用处。抱歉。您是否尝试将出站(eth0)流量重定向到入站(eth1)接口?@Satish,您能告诉我您将如何做吗?我想做一些事情,比如将流量从一个接口重定向到另一个接口,比如带有路由规则的LAN流量将点击我想要重定向到ppp接口的接口,我该怎么做?您需要您的数据包像“真实”流量一样命中iptables输入/转发链,还是可以忽略防火墙?您只需要数据包的dst mac与eth0匹配,还是需要内核“认为”数据包是通过eth0接收的,即数据包的内部结构指向eth0作为发起人?我希望内核“认为”数据包是通过eth0接收的…即数据包的内部结构指向eth0作为发起人…+1这似乎在我的系统上起作用。这就是说,
    lo
    不是以太网接口,因此在某种程度上可能存在问题。事实上,
    tcpreplay
    在很长一段时间内都不能与环回接口一起工作,即使现在输出一个警告…@user956030,你能举个例子吗?