freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:2167回复:16

怎样过滤截获packet里的内容?

楼主#
更多 发布于:2002-06-14 08:41
我在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);

}
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-14 08:56
在论坛里我以前还没看到过讨论过滤包的内容的欢迎大家一起讨论
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-14 09:16
是不是太简单啦没人感兴趣?
aceszjp
驱动牛犊
驱动牛犊
  • 注册日期2001-05-30
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-14 09:33
你使用这个输出可能有问题,因为这是内核程序
t<<\"udp found okokok\\n\";
你可以用debugprint输出,或者输出到文件里,或者与用户态程序通讯以输出信息
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-14 10:07
你使用这个输出可能有问题,因为这是内核程序
t<<\"udp found okokok\\n\";
你可以用debugprint输出,或者输出到文件里,或者与用户态程序通讯以输出信息




我用的是DriverStdio里的mointor调试的这里不关t<<的事。
真是奇怪我用vc在application里试过查找子串的函数没发现有错误。
可是在这里却不行啦真奇怪呀
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-14 12:41
在论坛里我以前还没看到过讨论过滤包的内容的欢迎大家一起讨论


哦?

 :P
[color=red]大头鬼! :P[/color]
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-14 15:23
我在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);

}
 

出现什么问题了?
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-18 09:20
问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是
乱码. 这是因为html文件的格式造成的吗???
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-18 13:22
问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是
乱码. 这是因为html文件的格式造成的吗???
http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-18 17:17
[quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是
乱码. 这是因为html文件的格式造成的吗???
http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote]


  过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!!
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-18 19:10
[quote][quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是
乱码. 这是因为html文件的格式造成的吗???
http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote]


  过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!! [/quote]

以下为乱猜的:

是否试过用其他的简单的英文字母。。。。。。。
如:UCHAR pTargetWord[] = \"ok\";

//////////////////////////////////////////////////////////

另:

看来,现在变成 一般性 的问题了。。。。。。。。。。。

你有无收到“有你过滤内容的包”。。。。。

如有者为你字符查找的问题。。。。。。

如没收到是你驱动的下层的问题。。。。。。。。




  :)
[color=red]大头鬼! :P[/color]
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-19 08:48
[quote][quote][quote]问题在这里我这段代码可以搜索到ftp下载文件里要过滤的关键字串,
但是对于http, 即网页的包里却不能做到过滤, 我发现包里的内容是
乱码. 这是因为html文件的格式造成的吗???
http有时的确会出现乱码的,因为好像从1.0开始就可以支持压缩格式(gunzip)。如果采用压缩格式,包里的内容完全有可能是乱码。不过很多服务器好像都是直接传HTML明文的。 [/quote]


  过滤文本格式的很简单但是怎样过滤用明文传送的html格式的包呢?望明示!!! [/quote]

以下为乱猜的:

是否试过用其他的简单的英文字母。。。。。。。
如:UCHAR pTargetWord[] = \"ok\";

:::::我试过啦.英文字母可以,但汉字不行,所有的汉字显示为乱码.
//////////////////////////////////////////////////////////

另:

看来,现在变成 一般性 的问题了。。。。。。。。。。。

你有无收到“有你过滤内容的包”。。。。。

如有者为你字符查找的问题。。。。。。

如没收到是你驱动的下层的问题。。。。。。。。

::::::::::肯定收到\"有你过滤内容的包\",不是我字符查找的问题,我认为是html网页的格式所造成的,只是我没找到解决办法.
\"驱动的下层的问题\"更是不可能有.


  :) [/quote]
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-06-19 10:35

以下为乱猜的:

是否试过用其他的简单的英文字母。。。。。。。
如:UCHAR pTargetWord[] = \"ok\";

:::::我试过啦.英文字母可以,但汉字不行,所有的汉字显示为乱码.
//////////////////////////////////////////////////////////

另:

看来,现在变成 一般性 的问题了。。。。。。。。。。。

你有无收到“有你过滤内容的包”。。。。。

如有者为你字符查找的问题。。。。。。

如没收到是你驱动的下层的问题。。。。。。。。

::::::::::肯定收到\"有你过滤内容的包\",不是我字符查找的问题,我认为是html网页的格式所造成的,只是我没找到解决办法.
\"驱动的下层的问题\"更是不可能有.


  :)

html网页(明文)格式不外乎就是一些<>括起来的标记再加上一些要显示的内容。如果是过滤文本的话,应该可以查找到啊。
freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-06-19 15:22
谁有高招解决在html格式的包里查找汉字字串???
partime
驱动牛犊
驱动牛犊
  • 注册日期2002-02-27
  • 最后登录2009-11-09
  • 粉丝0
  • 关注0
  • 积分211分
  • 威望61点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-18 23:44
html文本中的汉字是需要进行解码的
Url编码标准
x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 );

}
}
结果发现收到的数据包远远不够,为什么啊?
x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-03-04 21:08
续上:

pBuffer[ cbSize ] = 0;
dprintf( "%s", pBuffer );
ExFreePool( pBuffer );

}
}
游客

返回顶部