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

时间:2011-08-07 12:53:44

标签: isapi-extension

我正在为IIS6构建一种http嗅探器,因为我正在使用ISAPI过滤器和ISAPI扩展。 扩展 - 读取请求。 过滤 - 阅读回复。

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

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

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

此外,我已经读过一个可能的解决方案是附加客户标题然后删除它 - 这可能会起作用,但似乎不如我希望实现的那么优雅。

有没有办法在过滤器中获取连接ID(在EXTENSION_CONTROL_BLOCK中为connID)?

感谢您的回复, Sagiv

1 个答案:

答案 0 :(得分:1)

几个月前我遇到了同样的问题。

我做了以下事情来解决问题:

  1. 在HttpFilterProc(ISAPI过滤器)上,我查找了通知SF_NOTIFY_PREPROC_HEADERS。
  2. 然后,我为请求注入了自己的带有GUID的标头。
  3. 在HttpExtensionProc(ISAPI扩展)上,我读取了我的标题并提取了GUID。
  4. 然后我阅读了请求内容并将其与GUID连接。
  5. 在OnSendRawData(ISAPI过滤器)上我读取(分块)响应内容并再次将其与GUID连接。
  6. 这样我就连接了请求内容(来自扩展)和响应内容(来自过滤器)!