阅读:1797回复:7
WINDOWS XP 中查看PACKET 长度为什么得出奇怪的长度?
各位高手:
我在 WINDOWS XP 中进行网络数据加密时,查看PACKET 长度为什么得出奇怪的长度值? NdisQueryPacket(Packet, NULL, &BufferCount, &CurrentBuffer, &TotalPacketLength); 执行后得到:TotalPacketLength=2310,还有一次TotalPacketLength=14008 随后就死机了,一般的TotalPacketLength不应该大于1514才对。这是我在本机上访问“网络邻居”时发现的,PING 和 FTP 均没有出现此怪事,恳请高手指教。 |
|
|
沙发#
发布于:2002-07-11 18:37
估计是自己改的吧,或者哪里你写错了。
呵呵! |
|
|
板凳#
发布于:2002-07-11 18:45
我没有改呀,我是在调用下面函数时出现的:
MPSendPackets( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets ) { for (i = 0; i < NumberOfPackets; i++) { PNDIS_PACKET Packet, MyPacket; Packet = PacketArray; NdisAllocatePacket(&Status, &MyPacket, pAdapt->SendPacketPoolHandle); if(Status == NDIS_STATUS_SUCCESS) { NdisQueryPacket(Packet, NULL, &BufferCount, &CurrentBuffer, &TotalPacketLength); DbgPrint(\"TotalPacketLength=%d\\n\",TotalPacketLength); } 按道理这里的PACKET 是系统的原包,长度不应该不对呀。很是郁闷,搞不懂,劳驾高手指教了。 [编辑 - 7/11/02 by hello2002] [编辑 - 7/11/02 by hello2002] [编辑 - 7/11/02 by hello2002] |
|
|
地板#
发布于:2003-02-19 13:10
我没有改呀,我是在调用下面函数时出现的: NdisQueryPacket(Packet, NULL, &BufferCount, &CurrentBuffer, &TotalPacketLength);TotalPacketLength得出来的可能是几个PACKET包的总长度吧。。可能是几个PACKET包的总长度。。 |
|
地下室#
发布于:2005-02-22 09:28
To: hello2002:
你好,你这个问题解决了吗?我在2003上也碰到了类似的问题,已经花了我很多时间了,还是搞不定,可以共享一下你的经验吗?谢谢! |
|
5楼#
发布于:2005-02-23 11:36
向大家学习
|
|
6楼#
发布于:2005-02-23 17:17
使用NdisQueryPacket时, 大多数能够得到正确的长度, 但并不能够总是得到正确的结果! 你可以用NDIS另外一个涵数来替代复制PACKET: NdisCopyFromPacketToPacket, 这你就不用担心PACKET的长度了.
|
|
7楼#
发布于:2005-03-18 22:36
我是在2000下的,抄了一段这个,是对的:
{ NdisQueryPacket(Packet, NULL, NULL, &firstBuffer, &totalLength); while( firstBuffer != NULL) { NdisQueryBufferSafe(firstBuffer, &pBuf, &totalLength, NormalPagePriority ); NdisGetNextBuffer(firstBuffer, &nextBuffer); firstBuffer = nextBuffer; } } 但是以下这些为什么要设置,还有哪些要设置? if (Status == NDIS_STATUS_SUCCESS) { PNDIS_PACKET_EXTENSION Old, New; Rsvd = (PRSVD)(MyPacket->ProtocolReserved); Rsvd->OriginalPkt = Packet; MyPacket->Private.Flags = NdisGetPacketFlags(Packet); MyPacket->Private.Head = Packet->Private.Head; MyPacket->Private.Tail = Packet->Private.Tail; NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK); NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket), NDIS_OOB_DATA_FROM_PACKET(Packet), sizeof(NDIS_PACKET_OOB_DATA)); NdisIMCopySendPerPacketInfo(MyPacket, Packet); NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet, &MediaSpecificInfo, &MediaSpecificInfoSize); if (MediaSpecificInfo || MediaSpecificInfoSize) { NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket, MediaSpecificInfo, MediaSpecificInfoSize); } NdisSend(&Status, pAdapt->BindingHandle, MyPacket); 我不知道如何得到的是不是一个完整的包,这个包的净载荷结尾是不是PBuf的最后,这个包有哪些数据,哪些要自己处理.我想加密解密。希望能得到各位的帮助和指点,十分谢谢! |
|