阅读:1684回复:11
自己做了校验和以后怎么兰屏???
iphead=(PIP_HEADER)(PktBuffer+14);
//这个地方为自己分配的buffer应该可以操作 my_checksum=CheckSum((USHORT*)iphead,20); iphead->HeaderCRC=my_checksum 请大虾们指点 |
|
最新喜欢:baoyib... |
沙发#
发布于:2003-05-23 01:09
校验和有多个,不同的包计算方法不同
看以前有关nat的帖子 |
|
|
板凳#
发布于:2003-05-23 03:29
我这里做的是ip包的,ip校验和
|
|
地板#
发布于:2003-05-23 09:10
是你做的操作有问题,是不是在原先的buffer上修改的?
|
|
|
地下室#
发布于:2003-05-23 10:00
是你做的操作有问题,是不是在原先的buffer上修改的?这个地方不是很明白,原先的buffer为什么不能改? |
|
|
5楼#
发布于:2003-05-23 10:37
对于传进来的那个buffer,只有只读的权限,修改就会有问题了
|
|
|
6楼#
发布于:2003-05-23 11:57
那个buffer使我自己分配的
兰屏的问题同样出现在我对buffer(自己分配)进行加密操作上 我的机器装不上softice怎么办? |
|
7楼#
发布于:2003-05-23 12:17
我加密的流程:
//分配缓冲用于存放从Packet buffer 中拷贝的数据 NdisAllocateBuffer(&Status,&PktBuffer ,pAdapt->SendBufferPoolHandle,MemoryVA,TotalPacketLength); //分配用于存储加密后的数据 NdisAllocateBuffer(&Status,&PktBuffer_out ,pAdapt->SendBufferPoolHandle,MemoryVA,TotalPacketLength); //Chain到MyPacket上 NdisChainBufferAtBack(MyPacket,PktBuffer_out); //释放PktBuffer NdisFreeBuffer(PktBuffer); |
|
8楼#
发布于:2003-05-23 12:23
把你的checksum函数贴出来看看,可能你那函数有问题
|
|
9楼#
发布于:2003-05-23 14:16
这是我的校验和计算函数:
USHORT CheckSum(USHORT *addr,USHORT len) { USHORT nleft = len; ULONG sum = 0; USHORT answer = 0; //把check报头二进制数据以2字节为单位累加起来 while(nleft > 1) { sum += *addr++; nleft -= 2; } //若check报头为奇数个字节,会剩下最后一字节。把最后一个字节 //视为一个2字节数据的高字节,这个2字节数据的低字节为0,继续累加 if( nleft == 1) { *(UCHAR *)(&answer)=*(UCHAR *)addr; answer = answer & 0xff00; sum += answer; } sum = (sum>>16) + (sum&0xffff); sum += (sum>>16); answer = (USHORT) ~sum; DBGPRINT(\"校验和是新的\\n\"); return answer; } 下面是调用: iphead=(PIP_HEADER)(PktBuffer+14); my_checksum=CheckSum((USHORT*)iphead,20); iphead->HeaderCRC=my_checksum;//新家 DBGPRINT(\"校验和是新的,已经替换\\n\"); 另外:对于 函数NdisAllocateMemory(&MemoryVA,2000,0,HighestAcceptableAddress) HighestAcceptableAddress怎么设置 我在加密模块中用该函数重新又分配一段内存,怎么分配不了?谢谢大虾 [编辑 - 5/23/03 by qishi1997] [编辑 - 5/23/03 by qishi1997] |
|
10楼#
发布于:2003-05-23 15:04
蓝屏不知道,但是,你算的CHCKSUM不对,先要把原CHECKSUM置为0,再算!
|
|
11楼#
发布于:2003-05-23 16:19
是不是?
iphead=(PIP_HEADER)(PktBuffer+14); iphead->HeaderCRC=0; my_checksum=CheckSum((USHORT*)iphead,20); iphead->HeaderCRC=my_checksum; |
|