首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从NDIS数据包缓冲区中识别ipv4或ipv6?

如何从NDIS数据包缓冲区中识别ipv4或ipv6?
EN

Stack Overflow用户
提问于 2016-06-12 08:40:53
回答 1查看 528关注 0票数 0

我正在从NDIS过滤器SendnetBufferList例程中获取数据包。在过滤该缓冲区之后,我将接受该缓冲区。

NdisMedium802_3介质中,使用以太网报头(以太网帧)获取数据包。因此,我可以使用以太网报头轻松地分析ipv4 & ipv6

代码语言:javascript
运行
复制
PPF_ETHERNET_HEADER pEthHeader = (PPF_ETHERNET_HEADER) pBuffer;

filter.nEthProto = pEthHeader->nProto;

System::MCopyMemory(&filter.aSrcMac, &pEthHeader->aSrcMac, 
sizeof(ETH_MAC_ADDRESS));

System::MCopyMemory(&filter.aDstMac, &pEthHeader->aDstMac, 
sizeof(ETH_MAC_ADDRESS));

if (filter.nEthProto == ETH_PROTO_IPV4) {

PPF_IPV4_HEADER pIpHeader = (PPF_IPV4_HEADER) (pBuffer + 
sizeof(PF_ETHERNET_HEADER));

/* IPV4 operations */

}

else if (filter.nEthProto == ETH_PROTO_IPV6)
{

PPF_IPV6_HEADER pIpHeader = (PPF_IPV6_HEADER) (pBuffer + 
sizeof(PF_ETHERNET_HEADER));

/* IPV6 operations */
}

这很好用。接下来,我将附加NdisMediumWirelessWan / NdisMediumIP介质。这是发送原始IP帧和外部以太网报头。

我的问题是如何检查包含ipv4或ipv6 的NDIS缓冲区是否带有以太网报头?以及如何设置Mac地址?

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 05:42:23

您可以轻松地从NET_BUFFER_LIST获得协议信息:

代码语言:javascript
运行
复制
filter.nEthProto = (USHORT)NET_BUFFER_LIST_INFO(pNBList, NetBufferListFrameType);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37772273

复制
相关文章

相似问题

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