阅读:1356回复:6
为什么pathru的ip包和iris拦截的ip包不同呀
我在pathruj里面把QQ的连接数据包打印出来如下,
ffffffffffff0e04f3925d98045004e07f0080114ed6d223a33d223a3ff08908903a1223a33d223a3ff08908903a1d5e804811223a33d223a3ff08908903a1d5e80481100100000020464a4550464646434341454f4542454e45464341434143414341434143414141002001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 我不明白为什么开台前面会有那么多ff?在那些ff后是ip数据,但是与iris拦截的ip包相比较,就算把它转换为主机顺序,也与iris拦截的不同, 如果我以后要想对IP包进行处理,那怎么才能得到正确的IP数据? 在pathru中MPSendPackets的打印代码如下(代码是一位前辈的,我想应该不会错) //--------------------------------------------------------- int PacketSize; PUCHAR pPacketContent; PUCHAR pBuf; UINT BufLength; MDL * pNext; IN NDIS_PHYSICAL_ADDRESS HighestAcceptableMax; UINT i; //把数据包内容从Packet拷贝到pPacketContent DbgPrint(\"ndis51 in SendPackets\"); HighestAcceptableMax.HighPart = 0; HighestAcceptableMax.LowPart = -1; NdisQueryPacket( Packet,NULL,NULL,NULL,&PacketSize); Status= NdisAllocateMemory( &pPacketContent, 2000, 0,HighestAcceptableMax); if (Status!=NDIS_STATUS_SUCCESS ) return ; NdisZeroMemory (pPacketContent, 2000); NdisQueryBufferSafe(Packet->Private.Head, &pBuf, &BufLength, 32 ); NdisMoveMemory(pPacketContent, pBuf, BufLength); i = BufLength; pNext = Packet->Private.Head; for(;;) { if(pNext == Packet->Private.Tail) break; pNext = pNext->Next; //指针后移 if(pNext == NULL) break; NdisQueryBufferSafe(pNext,&pBuf,&BufLength,32); NdisMoveMemory(pPacketContent+i,pBuf,BufLength); i+=BufLength; } // //--------------------------------------------------------- //打印udp包,我专门对qq的连接数据包进行了试验 if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 17) { DbgPrint(\"UDP被拦截!\\n\"); for(i=0;i<2000;i++) DbgPrint(\"%x\",pPacketContent); return ; } NdisFreeMemory(pPacketContent, 2000, 0); |
|
沙发#
发布于:2003-08-25 15:20
----------------------------------------------------
以 太 网| IP首部 | TCP/UDP | 应用协议(FTP/HTTP...)| 首部(14)| (20) | 首部 | 或数据 | ---------------------------------------------------- |
|
板凳#
发布于:2003-08-25 16:50
楼上的说得对,前面12个f,其实是6个字节0xff,是广播地址;后面6个字节是自己网卡的物理地址
|
|
地板#
发布于:2003-08-28 14:53
最好这样:DbgPrint(\"%02x\",(unsigned char)pPacketContent);
|
|
地下室#
发布于:2003-08-29 19:22
你的输出信息是使用什么工具看到的?我想在安装网卡服务后用dbgview观察的,安装需要的xfilter.dll文件从哪里得到? :)
谢了! :D |
|
|
5楼#
发布于:2003-08-29 23:29
好好学习~~
|
|
|
6楼#
发布于:2003-09-09 11:29
谢谢了
|
|
|