繁体   English   中英

如何从NDIS数据包缓冲区知道ipv4或ipv6?

[英]How to know ipv4 or ipv6 from NDIS packet buffer?

我从NDIS筛选器SendnetBufferList例程获取数据包。 在里面,我接受过滤后的缓冲区。

NdisMedium802_3介质的情况下,获取带有以太网头 (以太网帧)的数据包。 因此,我可以使用以太网标头轻松分析ipv4ipv6

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介质。 这将发送没有以太网头的RAW IP帧

我的问题是如何检查没有以太网头的 NDIS缓冲区包含ipv4ipv6 还有如何设置Mac地址

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

filter.nEthProto = (USHORT)NET_BUFFER_LIST_INFO(pNBList, NetBufferListFrameType);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM