如何将ISAPI扩展中的请求链接到ISAPI过滤器中的响应?

问题描述:

我正在为IIS6构建一种http嗅探器,为此我使用了ISAPI筛选器和ISAPI扩展。 扩展 - 读取请求。 过滤器 - 读取响应。如何将ISAPI扩展中的请求链接到ISAPI过滤器中的响应?

我使用扩展的原因是我不想强制用户更改为IIS5兼容模式,因此无法订阅SF_NOTIFY_READ_RAW_DATA。

问题是,当我读取响应时,我想将它链接到请求,所以我需要为请求提供唯一标识符,并在读取响应时使用它。

我读过,曾经有一个选项用SF_REQ_GET_CONNID调用ServerSupportFunction,但IIS6不支持这个选项。

另外我已经读过,可能的解决方案是追加客户头,然后将其删除 - 这可能会起作用,但似乎没有我希望实现的优雅。

有什么办法可以在过滤器中获得连接ID(connID在EXTENSION_CONTROL_BLOCK中)?

感谢您回应, Sagiv

我在几个月前有同样的问题。

我做了以下解决问题:

  1. 在HttpFilterProc(ISAPI筛选器),我找了通知SF_NOTIFY_PREPROC_HEADERS。
  2. 然后,我将自己的头与GUID注入请求。
  3. 关于HttpExtensionProc(ISAPI扩展)我读了我的头文件并提取了GUID。
  4. 然后我读取请求内容并将其与GUID连接。
  5. On OnSendRawData(ISAPI筛选器)我读取(分块)的响应内容并再次将其与GUID连接。

通过这种方式,我将请求内容(来自扩展名)和响应内容(来自过滤器)都链接起来!