Я получаю пакеты из подпрограммы SendnetBufferList фильтра NDIS. Внутри этого я принимаю буфер после фильтрации этого буфера.
В случае NdisMedium802_3 средний, получая пакет с Ethernet-заголовок (Кадры Ethernet). Так что я могу легко анализировать ipv4 & ipv6 используя заголовок Ethernet.
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 кадры без заголовка Ethernet.
Мои вопросы, как я могу проверить NDIS буфер содержит ipv4 или же ipv6 без заголовка Ethernet ? а также как я могу установить MAC-адрес ?
Задача ещё не решена.
Других решений пока нет …