阅读:1391回复:5
编译无法通过啊,我实在是很菜
一个以太网的包结构我比较清楚,如果我能得到这个包,我可以得到源ip,可我不知道KNdisPacket和以太网的包的关系在那里,而且我不大会用softice,555555,请大虾继续执教
|
|
沙发#
发布于:2002-02-05 17:27
你可以参考如下代码:
NdisQueryPacket(Packet,NULL,&NdisBufferCount,&CurrentBuffer, NULL); if(NdisBufferCount) { //只考虑第一个buffer的情况。 NdisQueryBuffer(CurrentBuffer, &VirtualAddress, &CurrentLength); //VirtualAddress+14既指向ip包的指针。 } |
|
板凳#
发布于:2002-02-05 17:38
你可以参考如下代码: PIPHEADER什么的你看了linux里面的ipheader的定义吧!不给你贴了。 if(*((unsigned short)(VirtualAddress+12)==0x0800) { pipheader=(PIPHEADER)(VirtualAddress+14); if(pipheader->saddr=xxxx) { } } |
|
|
地板#
发布于:2002-02-06 12:09
这句话编译硬是if(*((unsigned char)(VirtualAddress+17))==1) 无法通过,我是在DS中作的,原码如下
NDIS_STATUS MyNdisAdapter::OnReceive (const KNdisPacket& Original, KNdisPacket& Repackaged) { KNdisBuffer buf; buf=Original.QueryFirstBuffer(); ASSERT (buf.IsValid()); PVOID VirtualAddress; PUINT Length; Length=(unsigned int *)buf.Length(); buf.Query(Length,&VirtualAddress); if(*((unsigned char)(VirtualAddress+17))==1) { Repackaged.CloneUp(Original); } return NDIS_STATUS_SUCCESS; } |
|
地下室#
发布于:2002-02-06 13:00
这句话编译硬是if(*((unsigned char)(VirtualAddress+17))==1) 无法通过,我是在DS中作的,原码如下 应该是if(*((unsigned char*)(VirtualAddress+17))==1)吧 |
|
5楼#
发布于:2002-02-06 20:56
PIPHEADER什么的你看了linux里面的ipheader的定义吧!不给你贴了。 不好意思,我的笔误。 (*((unsigned short*)(VirtualAddress+12))==0x0800) |
|
|