说明一下,是用ndis中间层截获网络数据包,这个函数是过滤函数,pPacketData为包的内容,在后面的tcp判断中,总是进不去(用红色标识),请大家帮忙看看
部分代码如下:
BOOLEAN FltCheckFilterRules(PPassthruFilterList pFilterList, PUCHAR pPacketData, ULONG nDataLen, BOOLEAN bIncludeETHdr)
{ int nLeavingLen = nDataLen;

PETHeader pEtherHdr;
PIPHeader pIpHdr;
PTCPHeader pTcpHdr;
PUDPHeader pUdpHdr;

// ´Ó»º³åÇøÖÐÝÍÈ¡³öIPÍ·
// Èç¹û°üº¬ÒÔÌ«Í·£¬¾ÍÒªÏȼì²éÒÔÌ«Í·
if(bIncludeETHdr)
{
DBGPRINT(("ETHeader"));
if(nLeavingLen < sizeof(ETHeader))
{
DBGPRINT(("nLeavinglen < sizeof(ETHeader)"));
return TRUE;
}
nLeavingLen -= sizeof(ETHeader);

pEtherHdr = (PETHeader)pPacketData;

if(pEtherHdr->type != 0x8) // 处理ip包
{
DBGPRINT(("this ethhdr is not ip protocl"));
return TRUE;
}
pIpHdr = (PIPHeader)(pEtherHdr + 1);
}
else
{
pIpHdr = (PIPHeader)pPacketData;
}


if(nLeavingLen < sizeof(IPHeader))
{
DBGPRINT(("11111"));
return TRUE;
}
nLeavingLen -= sizeof(IPHeader);


// 
if(((pIpHdr->iphVerLen >> 4) & 0x0f) == 6)
{
DBGPRINT(("IpV6,and return"));
return TRUE;
}
// 这里是为了调试打印出ip包的部分信息,结果ipPrttocol一直为17(udp) 不知道为什么
DBGPRINT(("%d",pIpHdr->ipChecksum));
DBGPRINT(("%d",pIpHdr->ipProtocol));
DBGPRINT(("%d",pIpHdr->ipSource));