ISAPI过滤器介绍与使用
来源:互联网 发布:淘宝图片保护在哪里看 编辑:程序博客网 时间:2024/05/21 15:43
ISAPI过滤器介绍与使用
flyli
首先先介绍下ISAPI 筛选器是什么
ISAPI 筛选器是在启用 ISAPI 的 HTTP 服务器上运行的 DLL,用以筛选与服务器之间来回传送的数据。该筛选器注册事件的通知,例如登录或 URL 映射。当发生选定事件时,筛选器被调用,并且您可以监视及更改数据(在数据从服务器传输到客户端或相反的过程中)。可以使用 ISAPI 筛选器提供增强的 HTTP 请求记录(例如,跟踪登录到服务器的用户)、自定义加密、自定义压缩或其他身份验证方法。
在我看来ISAPI筛选器就是介于web服务器与用户之间的一个筛子,所有web服务器与用户之间的信息web服务器基本上都能截获,但是他有什么作用呢?
我使用的ISAPI过滤器开发工具是VC6.0
网上的教程已经很多了,在这里我就不在做详细的介绍了
我只说说几个比较有用的过滤器的功能
1.当有人再服务器上发送了非法字符,比如《色~~~情》这个词的话,可以直接将其过滤掉,可以选择的方式有替换和直接删除,具体实现方法如下所示
DWORD CWwwFilter::OnSendRawData(CHttpFilterContext* pCtxt, PHTTP_FILTER_RAW_DATA pRawData)
{
CString content((char *)pRawData->pvInData);
for(int i = 0; i < str_key_fill; i++)
{
str = str_keyword[i][0];
str = str.Mid(str.Find("=")+1);
content.Replace("web", "***");
content.ReleaseBuffer();
pCtxt->AllocMem(content.GetAllocLength());
pRawData->cbInData=content.GetAllocLength();
pRawData->cbInBuffer= content.GetAllocLength();
pRawData->cbInData=content.GetAllocLength();
strcpy((char*)pRawData->pvInData,content.GetBuffer(content.GetLength()));
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
此段代码的作用就是将所有网页中的“web”字符,替换成“***”,这样就形成了字符过滤的功能
但是要使OnSendRawData(一个当服务器向用户发送数据的时候被调用的函数)这个函数能被调用需要再GetFilterVersion(PHTTP_FILTER_VERSION pVer)这个函数中的 pVer->dwFlags标识符中添加SF_NOTIFY_SEND_RAW_DATA;
另外介绍一个在用户访问完网页后,服务器端记录下访问者访问的网页以及访问者ip的作用
此功能比较适合加在SF_NOTIFY_END_OF_NET_SESSION事件中,同样也是需要再pVer->dwFlags标示中加入SF_NOTIFY_END_OF_NET_SESSION标志,然后添加OnEndOfNetSession中,为什么添加到OnEndOfNetSession中呢?因为这个函数是在一次会话结束后调用的,最适合添加记录性的东西,当然再OnLog函数中添加也可以,不过你用了就会发现一些问题,其实我们并不需要如此频繁的记录这些日志的哈
DWORD CWwwFilter::OnEndOfNetSession(CHttpFilterContext* pfc)
{
// TODO: Add your specialized code here and/or call the base class
char buf[1000] = {0};
unsigned long buf_size = 1000;
CString str;
m_pRecordset->AddNew();///添加新记录
pfc->GetServerVariable("SERVER_NAME",buf,&buf_size);//被访问的域名
m_pRecordset->PutCollect("to_url",_variant_t(buf));
pfc->GetServerVariable("REMOTE_ADDR",buf,&buf_size);//客户的IP地址
m_pRecordset->PutCollect("from_IP",_variant_t(buf));
CTime tm;
tm=CTime::GetCurrentTime();
str=tm.Format("%Y年%m月%d日 %X");
m_pRecordset->PutCollect("time",_variant_t(str));
m_pRecordset->Update();
return CHttpFilter::OnEndOfNetSession(pfc);
}
其中比较重要的是GetServerVariable函数,具体的使用方法参见MSDN哈,我再从上面cp些文字下来也没有意义。。。其中还用到了数据库的操作,但是没有配合上下文,相信大家的水平应该看得懂哈。
最后声明下哈,以上函数都是我从我做的现实工程中拷贝过来的,上下文需要各位同僚自己补全,或者删除哈
其实isapi筛选器还有个变态的功能,记录密码。。。。不过这个我就不介绍了。。。见谅。。。。
呵呵,今天就写这么多了,呵呵,下次有好东西继续拿来分享,假如有兄弟再编写isapi的时候遇到了什么问题,或者有相应的项目合作的话,我愿意参加哈~
另外如果要转载我的文章,希望各位著名作者哈,原创的哈,先谢谢了:)
- ISAPI过滤器介绍与使用
- 使用ISAPI过滤器增强IIS的功能
- 使用ISAPI过滤器开发来增强IIS的功能
- 编写自己的ISAPI过滤器
- 用delphi编写ISAPI过滤器
- ISAPI筛选器介绍
- ISAPI筛选器介绍
- ISAPI开发介绍
- ISAPI开发介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark过滤器使用规则介绍
- Wireshark 过滤器使用规则介绍
- oracle 10g rac for linux (ASM) 修改modify public IP and vip
- emacs初学,大家有意见就提哈
- 接口模式 - 1.1 适配器模式 --代码实现(C#)
- 程序员的十层楼
- hibernate的lazy使用
- ISAPI过滤器介绍与使用
- ZOJ 1276 纪录路径的DP,生成括号的方法很有效
- linux内核源代码学习(1)内存映射模式
- 程序人生的开始
- 为网站技术“牛”人充电的“牛”文!
- 创意图片
- linux内核源代码学习(2)内存映射模式终于搞清楚了
- 外面的风景
- 生成随机数字