hello2002
驱动牛犊
驱动牛犊
  • 注册日期2002-06-02
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1797回复:7

WINDOWS XP 中查看PACKET 长度为什么得出奇怪的长度?

楼主#
更多 发布于:2002-07-11 18:35
各位高手:
       我在 WINDOWS XP 中进行网络数据加密时,查看PACKET 长度为什么得出奇怪的长度值?
NdisQueryPacket(Packet, NULL, &BufferCount, &CurrentBuffer, &TotalPacketLength);

执行后得到:TotalPacketLength=2310,还有一次TotalPacketLength=14008 随后就死机了,一般的TotalPacketLength不应该大于1514才对。这是我在本机上访问“网络邻居”时发现的,PING 和 FTP 均没有出现此怪事,恳请高手指教。

asdfasdf asdfa fasdf
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-11 18:37
估计是自己改的吧,或者哪里你写错了。

呵呵!
有点意思。。。 呵呵!
hello2002
驱动牛犊
驱动牛犊
  • 注册日期2002-06-02
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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]
asdfasdf asdfa fasdf
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-19 13:10
我没有改呀,我是在调用下面函数时出现的:
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]


NdisQueryPacket(Packet, NULL, &BufferCount, &CurrentBuffer, &TotalPacketLength);TotalPacketLength得出来的可能是几个PACKET包的总长度吧。。可能是几个PACKET包的总长度。。
frog_huang
驱动牛犊
驱动牛犊
  • 注册日期2002-06-05
  • 最后登录2008-05-02
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-22 09:28
To: hello2002:
你好,你这个问题解决了吗?我在2003上也碰到了类似的问题,已经花了我很多时间了,还是搞不定,可以共享一下你的经验吗?谢谢!
makefriend8
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2014-06-27
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望111点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-23 11:36
向大家学习
LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-23 17:17
使用NdisQueryPacket时, 大多数能够得到正确的长度, 但并不能够总是得到正确的结果! 你可以用NDIS另外一个涵数来替代复制PACKET: NdisCopyFromPacketToPacket, 这你就不用担心PACKET的长度了.
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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的最后,这个包有哪些数据,哪些要自己处理.我想加密解密。希望能得到各位的帮助和指点,十分谢谢!
游客

返回顶部