2011-08-07 29 views
0

我正在爲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

我在幾個月前有同樣的問題。

我做了以下解決問題:

  1. 在HttpFilterProc(ISAPI篩選器),我找了通知SF_NOTIFY_PREPROC_HEADERS。
  2. 然後,我將自己的頭與GUID注入請求。
  3. 關於HttpExtensionProc(ISAPI擴展)我讀了我的頭文件並提取了GUID。
  4. 然後我讀取請求內容並將其與GUID連接。
  5. On OnSendRawData(ISAPI篩選器)我讀取(分塊)的響應內容並再次將其與GUID連接。

通過這種方式,我將請求內容(來自擴展名)和響應內容(來自過濾器)都鏈接起來!

相關問題