首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断开接口上的pcap_inject

断开接口上的pcap_inject
EN

Stack Overflow用户
提问于 2015-10-07 15:44:56
回答 1查看 815关注 0票数 1

我正在使用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,接口是无地址的,并且是混杂模式的:

代码语言:javascript
复制
auto eth1
iface eth1 inet manual
    up ifconfig eth1 promisc up
    down ifconfig eth1 promisc down
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 06:11:52

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

那么,通过在NIC上发送数据包,您期望得到什么有用的结果呢?

我知道pcap_open_live不知道打开的设备是否支持发送

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

所以我从pcap_inject (errno 100)那里得到了错误

在Linuxerrno.h中搜索100显示:

代码语言:javascript
复制
#define ENETDOWN    100 /* Network is down */

我想Linux网络不喜欢在send()系统调用下的接口上发送数据包,而libpcap就是这样做的。

这是意料之中的吗?

是。

如果我只使用cmd行中的tcpreplay,它就完成了,并且没有出现错误。

tcpreplay有很多用于发送数据包的不同机制。请参阅tcpreplay源代码中的sendpacket()源文件中的sendpacket.c。例如,它们中的一些可能会在死接口上悄悄丢弃正在发送的数据包,而不是报告错误,而且它可能正在使用这些机制之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32996721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档