我正在从NDIS过滤器SendnetBufferList例程中获取数据包。在过滤该缓冲区之后,我将接受该缓冲区。
在NdisMedium802_3介质中,使用以太网报头(以太网帧)获取数据包。因此,我可以使用以太网报头轻松地分析ipv4 & ipv6。
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地址?
发布于 2019-07-03 05:42:23
您可以轻松地从NET_BUFFER_LIST获得协议信息:
filter.nEthProto = (USHORT)NET_BUFFER_LIST_INFO(pNBList, NetBufferListFrameType);
https://stackoverflow.com/questions/37772273
复制相似问题