断开连接的接口上的pcap_inject

时间:2015-10-07 15:44:56

标签: c linux libpcap tcpreplay

我尝试使用libpcap实现存储在.pcap文件中的重播数据包。 这个过程非常简单:我会用' pcap_open_offline'打开pcap文件。然后将数据包传递到使用pcap_open_live打开的设备,并通过接口发送pcap_inject

现在NIC没有连接以太网电缆。我知道pcap_open_live无法判断设备是否支持发送,因此我从pcap_inject(errno 100)收到错误。这是预期的吗?如果我只是使用cmd行中的tcpreplay,它会在没有插入以太网电缆的情况下完成并且不会出现错误。

任何人都知道tcpreplay / tcpedit如何处理"死了"接口? tcpreplay重写数据包标题,而我试图将它们原始发送?任何帮助表示赞赏!

我在Ubuntu 14.04上,接口是无地址且处于promisc模式:

auto eth1
iface eth1 inet manual
    up ifconfig eth1 promisc up
    down ifconfig eth1 promisc down

1 个答案:

答案 0 :(得分:1)

  

现在NIC没有连接以太网电缆。

那么你期望通过在该NIC上发送数据包获得什么有用的结果?

  

我知道pcap_open_live无法判断设备是否支持发送

设备是否启动可能会随着时间的推移而发生变化,因此,当您实际尝试发送数据包时,您从pcap_open_live()获得的任何答案都可能不正确。

  

所以我从pcap_inject(errno 100

中得到错误

在Linux中搜索100 errno.h显示:

#define ENETDOWN    100 /* Network is down */

我猜想,当人们尝试在一个send()系统调用失败的接口上发送数据包时,Linux网络不喜欢它,这就是libpcap的作用。

  

这是预期的吗?

  

如果我只是使用cmd行中的tcpreplay,它就会完成并且不会出现错误

tcpreplay有一大堆用于发送数据包的不同机制。请参阅tcpreplay源代码中sendpacket()源文件中的sendpacket.c。例如,其中一些可能会静默丢弃在死接口上发送的数据包,而不是报告错误,并且可能正在使用其中一种机制。