首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何捕获pcap中的数据包,跳过以太网报头

如何捕获pcap中的数据包,跳过以太网报头
EN

Stack Overflow用户
提问于 2015-07-01 09:22:49
回答 2查看 1.4K关注 0票数 1

我正在使用fp = pcap_open_dead(DLT_EN10MB,65535);来捕获pcap格式的帧。但是,如果我想跳过以太网头fp = pcap_open_dead(**DLT_XXX** ),我应该使用什么。我的模块正在第三层工作,所以我想从第三层开始捕获数据包。

代码语言:javascript
运行
复制
fp = pcap_open_dead(DLT_EN10MB,65535);
if (NULL == fp)
{
    FPA_ERROR_PRINT("unable to open the dead interface \n");
    return 1;

在这方面的任何帮助都将受到高度赞赏。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 18:46:13

我正在使用fp = pcap_open_dead(DLT_EN10MB,65535);来捕获pcap格式的帧。

您的意思大概是“以pcap格式将帧写入文件”;"pcap_open_dead“中的”死“表示”不活“,如”您不能从其中捕获数据包“。

(这是必要的,因为pcap_dump_open()调用不以DLT_值和快照长度作为类型,而是接受pcap_t *并从中获取DLT_值和快照长度。如果您是从用pcap_open_live()pcap_create()/pcap_activate()打开的实时捕获中保存数据包,或者是从pcap_open_offline()打开的另一个捕获文件中保存数据包,那么这样做很方便,但是如果数据包不是来自libpcap/WinPcap的话,就不太方便了。

但是,如果我想跳过以太网头,应该使用什么fp = pcap_open_dead(DLT_XXX )。我的模块正在第三层工作,所以我想从第三层开始捕获数据包。

如果“第三层”的意思是"IP",所以您的所有数据包都是IPv4或IPv6数据包,则需要DLT_RAW

然而,跳过以太网报头是您的工作。如果提供捕获的帧的任何机制都是提供以太网报头的帧,则必须跳过以太网报头--并丢弃以太网报头中的类型/长度字段对于IPv4来说不是0x0800或IPv6中的0x86dd以外的帧--并计算出适当的捕获长度和连接长度(比捕获和打开的长度少了14个字节;如果其中任何一个小于或等于14,则丢弃该帧),并将这些帧连同指向以太网报头后的数据的指针交给pcap_dump()

票数 0
EN

Stack Overflow用户

发布于 2015-07-01 13:44:09

我觉得你做不到。解析数据包缓冲区时,需要手动跳过以太网报头部分。

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

https://stackoverflow.com/questions/31157387

复制
相关文章

相似问题

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