阅读:2167回复:16
怎样过滤截获packet里的内容?
我在IP filter hook驱动里想过滤得到的包里的内容却没搞成.
下面是我的源码请高手指出错误我非常感激!!! PF_FORWARD_ACTION myKIPFilter::ReceiveHandler ( IPHeader *PacketHeader, PUCHAR Packet, ULONG PacketLength, ULONG RecvInterfaceIndex, IPAddr RecvLinkNextHop ) { PUCHAR pByte; IPHeader * pPacketHeader = (IPHeader *) PacketHeader; UCHAR pTargetWord[] = \"黄色\"; UCHAR *pStr = pTargetWord; if(pPacketHeader->iph_protocol == PROT_UDP) { if( FoundTargetWord( Packet + sizeof(UDP_HEADER), pStr, sizeof(pTargetWord) - 1, PacketLength - sizeof(UDP_HEADER)) != 0 ) { t<<\"udp found okokok\\n\"; } else t<<\"udp not found!!!\\n\"; } if(pPacketHeader->iph_protocol == PROT_TCP) { if( FoundTargetWord( Packet + sizeof(TCP_HEADER), pStr, sizeof(pTargetWord) - 1, PacketLength - sizeof(TCP_HEADER)) != 0 ) { t<<\"tcp found okokok\\n\"; } else t<<\"tcp not found!!\\n\"; } } ULONG myKIPFilter::FoundTargetWord(UCHAR *sourceStr, UCHAR *targetStr, ULONG sLength, ULONG tLength) { ULONG packetPos = 0; BOOLEAN foundFlag; while( packetPos + tLength <= sLength ) { foundFlag = TRUE; for( USHORT i = 0 ; i < tLength; i++ ) { if( sourceStr[ i + packetPos ] != targetStr ) { foundFlag = FALSE; break; } } if( foundFlag ) { return( 1 ); t<<\"found!!!\"; } packetPos++; } return(0); } |
|
沙发#
发布于:2002-06-14 08:56
在论坛里我以前还没看到过讨论过滤包的内容的欢迎大家一起讨论
|
|
板凳#
发布于:2002-06-14 09:16
是不是太简单啦没人感兴趣?
|
|
地板#
发布于:2002-06-14 09:33
你使用这个输出可能有问题,因为这是内核程序
t<<\"udp found okokok\\n\"; 你可以用debugprint输出,或者输出到文件里,或者与用户态程序通讯以输出信息 |
|
地下室#
发布于:2002-06-14 10:07
你使用这个输出可能有问题,因为这是内核程序 我用的是DriverStdio里的mointor调试的这里不关t<<的事。 真是奇怪我用vc在application里试过查找子串的函数没发现有错误。 可是在这里却不行啦真奇怪呀 |
|
5楼#
发布于:2002-06-14 12:41
在论坛里我以前还没看到过讨论过滤包的内容的欢迎大家一起讨论 哦? :P |
|
|
6楼#
发布于:2002-06-14 15:23
我在IP filter hook驱动里想过滤得到的包里的内容却没搞成. 出现什么问题了? |
|
7楼#
发布于:2002-06-18 09:20
问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是 乱码. 这是因为html文件的格式造成的吗??? |
|
8楼#
发布于:2002-06-18 13:22
问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 |
|
9楼#
发布于:2002-06-18 17:17
[quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote] 过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!! |
|
10楼#
发布于:2002-06-18 19:10
[quote][quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote] 过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!! [/quote] 以下为乱猜的: 是否试过用其他的简单的英文字母。。。。。。。 如:UCHAR pTargetWord[] = \"ok\"; ////////////////////////////////////////////////////////// 另: 看来,现在变成 一般性 的问题了。。。。。。。。。。。 你有无收到“有你过滤内容的包”。。。。。 如有者为你字符查找的问题。。。。。。 如没收到是你驱动的下层的问题。。。。。。。。 :) |
|
|
11楼#
发布于:2002-06-19 08:48
[quote][quote][quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote] 过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!! [/quote] 以下为乱猜的: 是否试过用其他的简单的英文字母。。。。。。。 如:UCHAR pTargetWord[] = \"ok\"; :::::我试过啦.英文字母可以,但汉字不行,所有的汉字显示为乱码. ////////////////////////////////////////////////////////// 另: 看来,现在变成 一般性 的问题了。。。。。。。。。。。 你有无收到“有你过滤内容的包”。。。。。 如有者为你字符查找的问题。。。。。。 如没收到是你驱动的下层的问题。。。。。。。。 ::::::::::肯定收到\"有你过滤内容的包\",不是我字符查找的问题,我认为是html网页的格式所造成的,只是我没找到解决办法. \"驱动的下层的问题\"更是不可能有. :) [/quote] |
|
12楼#
发布于:2002-06-19 10:35
html网页(明文)格式不外乎就是一些<>括起来的标记再加上一些要显示的内容。如果是过滤文本的话,应该可以查找到啊。 |
|
13楼#
发布于:2002-06-19 15:22
谁有高招解决在html格式的包里查找汉字字串???
|
|
14楼#
发布于:2002-07-18 23:44
html文本中的汉字是需要进行解码的
Url编码标准 |
|
15楼#
发布于:2004-03-04 21:06
搂主,我想问您个问题。我为什么只能查看到http协议的文件头,但是内容都没有啊?
我使这样干的: if( iph->ipProtocol == 6 ) { tcph=(TCPHeader *)Packet; port = ntohs( tcph->sourcePort ); cbSize = PacketLength - sizeof(TCPHeader); if( port == 110 ) { dprintf("recv [[*%d*]] bytes pop3 data from IP:[[*%x*]]<-->Port:[[*%d*]]", cbSize, iph->ipSource, port); pBuffer = (PCHAR)ExAllocatePool( NonPagedPool, cbSize + 1 ); RtlCopyMemory( pBuffer, Packet + sizeof(TCPHeader), cbSize); pBuffer[ cbSize ] = '\0'; dprintf( "%s", pBuffer ); ExFreePool( pBuffer ); } } 结果发现收到的数据包远远不够,为什么啊? |
|
16楼#
发布于:2004-03-04 21:08
续上:
pBuffer[ cbSize ] = 0; dprintf( "%s", pBuffer ); ExFreePool( pBuffer ); } } |
|