我正在使用libpcap实现重放存储在.pcap文件中的数据包。这个过程非常简单:我会用'pcap_open_offline‘打开pcap,然后将数据包传递给用pcap_open_live打开的设备,并通过接口用pcap_inject发送它们。
现在NIC没有连接到它的以太网电缆。我知道pcap_open_live不会告诉打开的设备是否支持发送,所以我从pcap_inject (errno 100)那里得到了错误。这是意料之中的吗?如果我只是从cmd行使用tcpreplay,它完成并没有出现错误,无论是否插入以太网电缆。
有人知道tcpreplay/tcpedit如何处理“死”接口吗?tcpreplay是否重写数据包报头,而我试图将它们原始发送?任何帮助都是非常感谢的!
我使用的是Ubuntu14.04,接口是无地址的,并且是混杂模式的:
auto eth1
iface eth1 inet manual
up ifconfig eth1 promisc up
down ifconfig eth1 promisc down发布于 2015-10-08 06:11:52
现在NIC没有连接到它的以太网电缆。
那么,通过在NIC上发送数据包,您期望得到什么有用的结果呢?
我知道
pcap_open_live不知道打开的设备是否支持发送
设备是否启动会随着时间的推移而改变,因此,您从pcap_open_live()获得的任何答复在实际发送数据包时都可能是不正确的。
所以我从pcap_inject (
errno 100)那里得到了错误
在Linuxerrno.h中搜索100显示:
#define ENETDOWN 100 /* Network is down */我想Linux网络不喜欢在send()系统调用下的接口上发送数据包,而libpcap就是这样做的。
这是意料之中的吗?
是。
如果我只使用cmd行中的tcpreplay,它就完成了,并且没有出现错误。
tcpreplay有很多用于发送数据包的不同机制。请参阅tcpreplay源代码中的sendpacket()源文件中的sendpacket.c。例如,它们中的一些可能会在死接口上悄悄丢弃正在发送的数据包,而不是报告错误,而且它可能正在使用这些机制之一。
https://stackoverflow.com/questions/32996721
复制相似问题