Как связать запрос в расширении ISAPI с ответом в фильтре ISAPI?

Я создаю своего рода http sniffer для IIS6, для этого я использую как фильтр ISAPI, так и расширение ISAPI. Расширение - прочитать запрос. Фильтр - чтобы прочитать ответ.

Причина, по которой я использую расширение, заключается в том, что я не хочу заставлять пользователя переходить в режим совместимости IIS5 и поэтому не могу подписаться на SF_NOTIFY_READ_RAW_DATA.

Дело в том, что когда я читаю ответ, я хочу связать его с запросом, поэтому мне нужно дать уникальный идентификатор запросу и использовать его при чтении ответа.

Я читал, что раньше была возможность вызвать Serve rSupportFunction с SF_REQ_GET_CONNID, но это не поддерживается в IIS6.

Также я прочитал, что возможное решение - добавить заголовок клиента, а затем удалить его - это, вероятно, сработает, но выглядит менее элегантно, чем я надеялся реализовать.

Есть ли способ получить идентификатор фильтра (connID в EXTENSION_CONTROL_BLOCK) в фильтре?

цените ваш ответ, Сагив

1 ответ

У меня была такая же проблема несколько месяцев назад.

Я сделал следующее, чтобы решить проблему:

  1. На HttpFilterProc (фильтр ISAPI) я искал уведомление SF_NOTIFY_PREPROC_HEADERS.
  2. Затем я ввел свой собственный заголовок с GUID для запроса.
  3. На HttpExtensionProc (расширение ISAPI) я читаю свой заголовок и извлекаю GUID.
  4. Затем я прочитал содержание запроса и связал его с GUID.
  5. На OnSendRawData (ISAPI Filter) я читаю содержимое чанкованного ответа и снова подключаю его с GUID.

Таким образом, я связываю и содержимое запроса (из Расширения), и содержимое ответа (из фильтра)!

Другие вопросы по тегам