bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2587回复:33

斑竹们请进来...

楼主#
更多 发布于:2002-11-06 09:30
原问题:
封包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]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-06 09:37
你的文件是cpp的?
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-06 09:39
你的文件是cpp的?

不是,是 c 的
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-06 09:40
include <ntddk.h> or <wdm.h>
生命驱动,活力无限!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-06 09:43
你的编译环境设置的对吗
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-06 09:44
include <ntddk.h> or <wdm.h>

sorry,我的贴子写错了,在程序里我也把<ntddk.h> 加上了,但还是不行。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2002-11-06 09:46
想不通,我认为不是程序的问题。可能是你的编译环境问题。
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-06 09:46
你的编译环境设置的对吗

多谢,在这之前我已经编译两个驱动序都测试通过的,哦!我用的是2kDDK编译。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-06 09:47
就这一个函数的声明找不到吗?你是在VC集成环境下还是在DOS提示符下编译的?
如果是在前者,则将Tools->Options->Directory中Include目录选项下的\\NTDDK\\inc目录提至最前试试。
Tom_lyd
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-06 09:47
#undef ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, \'kcaP\')
加上这两句,肯定搞定!!
放分!!!
生命驱动,活力无限!
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-06 09:50
#undef ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, \'kcaP\')
加上这两句,肯定搞定!!
放分!!!
 

<ntddk.h>里面本身就含有这两句哦。
不过还是要试试看先.
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-06 09:59
#undef ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, \'kcaP\')
加上这两句,肯定搞定!!
放分!!!
 


不行哦!问题还是老样。
请继续关注!!

编译提示是这样子的:
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]
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-06 10:04
你是放在自己写的头文件中吗??假如是packet.h
#ifndef __PACKET_H
#define __PACKET_H
....
接着放上两句,然后其他文件include <packet.h>
生命驱动,活力无限!
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-11-06 10:08
你是放在自己写的头文件中吗??假如是packet.h
#ifndef __PACKET_H
#define __PACKET_H
....
接着放上两句,然后其他文件include <packet.h>


packet.h是自已写的,还是不行提示还是老样子。
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-11-06 10:12
那你在DOS下用BUILD编译试以下。
生命驱动,活力无限!
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-11-06 10:16
那你在DOS下用BUILD编译试以下。


我现在用的是Windows2000高级服务器版,不能换到DOS下。


________________________________________________
做程序真烦人...
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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\')
生命驱动,活力无限!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-11-06 10:31
sorry,我写错了。用不着再加!
生命驱动,活力无限!
bhjinhou
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2008-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-11-06 10:41
你应该将packet.h放在ntddk.h后面!!
生命驱动,活力无限!
上一页
游客

返回顶部