阅读:1692回复:17
怎样从packet包信息得到IP地址?(fracker版主请进...)
封包packet定义为PNDIS_PACKET结构。
我现在想从此包中得到源IP地址和目标IP地址,能实现吗?怎样实现? 小弟急用,请那位大侠帮帮忙!! [编辑 - 11/5/02 by bhjinhou] [编辑 - 11/17/02 by bhjinhou] |
|
最新喜欢:goodbi... |
沙发#
发布于:2002-11-05 11:10
关注!
|
|
板凳#
发布于:2002-11-05 11:14
拷贝一段程序给你吧,把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; } |
|
地板#
发布于:2002-11-05 11:22
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; } |
|
地下室#
发布于:2002-11-05 11:23
同理,你要取目标地址也一样,注意判断这个包是否是IP包,注意边界检查。
|
|
5楼#
发布于:2002-11-05 11:28
拷贝一段程序给你吧,把Packet里面的数据Dump出来: 谢谢版主,我是个新手,还有些不明白, pData,iSize这两个参数应具体传递那个值?? |
|
6楼#
发布于:2002-11-05 12:51
在GetSrcIpFromPacket这个函数里面已经给你演示了阿。
|
|
7楼#
发布于:2002-11-05 14:54
在GetSrcIpFromPacket这个函数里面已经给你演示了阿。 [br] 我明白了,多谢! |
|
8楼#
发布于:2002-11-05 17:15
在GetSrcIpFromPacket这个函数里面已经给你演示了阿。 多谢. 我编译了一下,下面的两个结构找不到,它们应该包含在那个头文件 EthAddr ,EthAddr |
|
9楼#
发布于:2002-11-05 17:17
请关注!!!
|
|
10楼#
发布于:2002-11-05 19:22
哦,Sorry,还有个定义没有给你。
typedef struct _EthAddr { unsigned char AddrByte[6]; }EthAddr, * PEthAddr; |
|
11楼#
发布于:2002-11-05 19:28
哦,Sorry,还有个定义没有给你。 多谢!多谢! 但 ExAllocatePool(NonPagedPool, iTotal) 函数编译不通过!!没定义!! 怎么办? [编辑 - 11/5/02 by bhjinhou] [编辑 - 11/5/02 by bhjinhou] |
|
12楼#
发布于:2002-11-05 19:51
在线等候........
|
|
13楼#
发布于:2002-11-16 11:28
编译时有没有加入
-DNDIS_WDM=1 的选项呢? sources文件里加。 |
|
|
14楼#
发布于:2002-11-16 18:37
好象是你已经搞定了吧?
|
|
15楼#
发布于:2002-11-17 08:59
多谢各位了!!
偶已经搞定了 |
|
16楼#
发布于:2003-05-09 09:52
to:bhjinhou
你这个程序的源代码还在吗?我想能不能发给我看看,我刚学,无从下手啊,请帮帮我,好吗? wangsj47@sina.com |
|
|
17楼#
发布于:2003-05-22 15:12
发给我吧。wzxyilove@163.net
|
|
|