阅读:2587回复:33
斑竹们请进来...
原问题:
封包packet定义为PNDIS_PACKET结构。 我现在想从此包中得到源IP地址和目标IP地址,能实现吗?怎样实现? 小弟急用,请那位大侠帮帮忙!! ////////////////////////////// (新问题: 偶把它放到自已的程序里进行编译时,ExAllocatePool()函数编译时提示没定义,后来偶把\"ntddk.h\"头文件包含进来也不行,小弟查了DDK看了一下,但问题还是没办法解决,因fracker版主不在线,小弟急死了!还请各老大指点一二.) fracker版主的贴子如下: 把Packet里面的数据Dump出来: //////////////////////////// UINT CopyPacketData( PNDIS_PACKET pPacket, PCHAR pData, UINT iSize ) { UINT iLength; UINT iPos; PNDIS_BUFFER pNextBuffer; PCHAR pBuffer; iPos = 0; NdisQueryPacket( pPacket, NULL, NULL, &pNextBuffer, &iLength ); if( iLength > iSize ) return iPos; while( pNextBuffer ) { NdisQueryBuffer( pNextBuffer, &pBuffer, &iLength ); if( iLength > iSize - iPos || !pBuffer ) break; NdisMoveMemory( pData + iPos, pBuffer, iLength ); NdisGetNextBuffer( pNextBuffer, &pNextBuffer ); iPos += iLength; } return iPos; } ///////////////////////////////////////////////// typedef struct _EthHead { EthAddr DestAddr; EthAddr SourAddr; unsigned short SrvType; } EthHead, * PEthHead; typedef struct _IpHead { unsigned char HeaderLength_Version; unsigned char TypeOfService; // Type of service unsigned short TotalLength; // total length of the packet unsigned short Identification; // unique identifier unsigned short FragmentationFlags; // flags unsigned char TTL; // Time To Live unsigned char Protocol; // protocol (TCP, UDP etc) unsigned short CheckSum; // IP Header checksum unsigned int sourceIPAddress; // Source address unsigned int destIPAddress; // Destination Address } IpHead, *PIpHead; u_long GetSrcIpFromPacket( PNDIS_PACKET pPacket ) { PCHAR pData; UINT iTotal; PEthHead pEthHdr; PIpHead pIpHdr; NdisQueryPacket( pPacket, NULL, NULL, NULL, &iTotal ); pData = ExAllocatePool( NonPagedPool, iTotal ); CopyPacketData( pPacket, pData, iTotal ); pEthHdr = ( PEthHead )pData; pIpHdr = ( PIpHead )( pData + sizeof( EthHead ) ); return pIpHdr->sourceIPAddress; } [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] [编辑 - 11/6/02 by bhjinhou] |
|
沙发#
发布于:2002-11-06 09:37
你的文件是cpp的?
|
|
|
板凳#
发布于:2002-11-06 09:39
你的文件是cpp的? 不是,是 c 的 |
|
地板#
发布于:2002-11-06 09:40
include <ntddk.h> or <wdm.h>
|
|
|
地下室#
发布于:2002-11-06 09:43
你的编译环境设置的对吗
|
|
|
5楼#
发布于:2002-11-06 09:44
include <ntddk.h> or <wdm.h> sorry,我的贴子写错了,在程序里我也把<ntddk.h> 加上了,但还是不行。 |
|
6楼#
发布于:2002-11-06 09:46
想不通,我认为不是程序的问题。可能是你的编译环境问题。
|
|
7楼#
发布于:2002-11-06 09:46
你的编译环境设置的对吗 多谢,在这之前我已经编译两个驱动序都测试通过的,哦!我用的是2kDDK编译。 |
|
8楼#
发布于:2002-11-06 09:47
就这一个函数的声明找不到吗?你是在VC集成环境下还是在DOS提示符下编译的?
如果是在前者,则将Tools->Options->Directory中Include目录选项下的\\NTDDK\\inc目录提至最前试试。 |
|
|
9楼#
发布于:2002-11-06 09:47
#undef ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, \'kcaP\') 加上这两句,肯定搞定!! 放分!!! |
|
|
10楼#
发布于:2002-11-06 09:50
#undef ExAllocatePool <ntddk.h>里面本身就含有这两句哦。 不过还是要试试看先. |
|
11楼#
发布于:2002-11-06 09:59
#undef ExAllocatePool 不行哦!问题还是老样。 请继续关注!! 编译提示是这样子的: packet.c<151>:error c4013:\'ExAllocatePoolWithTag\' undefined;assuming extern returning int packet.c,151.:error c4047:\'=\':\'void *\'differs in levels of indirection from \'int \' 就这两行. [编辑 - 11/6/02 by bhjinhou] |
|
12楼#
发布于:2002-11-06 10:04
你是放在自己写的头文件中吗??假如是packet.h
#ifndef __PACKET_H #define __PACKET_H .... 接着放上两句,然后其他文件include <packet.h> |
|
|
13楼#
发布于:2002-11-06 10:08
你是放在自己写的头文件中吗??假如是packet.h packet.h是自已写的,还是不行提示还是老样子。 |
|
14楼#
发布于:2002-11-06 10:12
那你在DOS下用BUILD编译试以下。
|
|
|
15楼#
发布于:2002-11-06 10:16
那你在DOS下用BUILD编译试以下。 我现在用的是Windows2000高级服务器版,不能换到DOS下。 ________________________________________________ 做程序真烦人... |
|
16楼#
发布于:2002-11-06 10:28
再加两句试一下:
#undef ExAllocatePool #undef ExAllocatePoolWithTag #define ExAllocatePoolWithQuota(a,b) xAllocatePoolWithQuotaTag(a,b,\' kdD\') #define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, \'kcaP\') |
|
|
17楼#
发布于:2002-11-06 10:31
sorry,我写错了。用不着再加!
|
|
|
18楼#
发布于:2002-11-06 10:35
sorry,我写错了。用不着再加! 没关系的,我的那些头文件: #include \"ndis.h\" #include \"xpassthru.h\" #include \"minihook.h\" #include \"prothook.h\" #include \"packet.h\" #include <ntddk.h> #include \"recv.h\" #include \"send.h\" 统一放到 prexsim.h 预编译头文件里会不会有问题。 程序入口是从xpassthru.c开始。 编译提示还是: packet.c<151>:error c4013:\'ExAllocatePoolWithTag\' undefined;assuming extern returning int 就这一两句了。 [编辑 - 11/6/02 by bhjinhou] |
|
19楼#
发布于:2002-11-06 10:41
你应该将packet.h放在ntddk.h后面!!
|
|
|
上一页
下一页