IE WPAD代理設置工作原理

WPAD代表Web Proxy Auto-Discovery Protocol,是客戶端通過DHCP或DNS協議探測代理服務器配置腳本url的一種方式。當IE定位腳本並將腳本下載到本地之後,就可以通過該腳本來爲不同的url選擇相應的代理服務器。目前主流瀏覽器一般都支持WPAD。本文主要介紹IE中WPAD相應的工作原理以及常見WPAD相關的問題的解決方案。

工作流程

當IE Internet Options連接中配置爲自動發現設置時,IE會根據以下方式來探測WPAD.dat文件

  • DHCP(252 option)
  • DNS A record query
  • NetBios

如果DHCP配置了WPAD的地址,IE則使用該地址發送http get請求得到相應的WPAD.dat文件。即使該地址請求失敗,IE也不會繼續使用DNS探測的結果。

如果DHCP服務器沒有提供WPAD信息,DNS探測結果就會被採用。例如用戶的計算機名爲pc.department.branch.example.com,IE會按照如下url順序來請求WPAD.dat文件。

如果DNS探測仍然失敗,IE則通過Netbios來請求WPAD。

當Netbios請求仍然失敗的話,IE則會嘗試直接發送網絡請求。

DHCP WPAD探測邏輯

IE通過調用DhcpRequestParams方法來得到DHCP 252 option。根據MSDN對該方法的描述,該返回結果會在本地緩存起來。

DHCP clients store data obtained from a DHCP server in their local cache. If the DHCP client cache contains all data requested in the RecdParams array of a DhcpRequestParams function call, the client returns data from its cache. If requested data is not available in the client cache, the client processes the DhcpRequestParams function call by submitting a DHCP-INFORM message to the DHCP server。

因此DHCP-INFORM消息只在第一次或者cache被清空的時候被髮送。以下是一個DHCP-INFORM消息的示例。

複製代碼
55     10.0.0.101  255.255.255.255 DHCP        DHCP:Request, MsgType = INFORM, TransactionID = 0x33276787 
56     10.0.0.1      10.0.0.101  DHCP          DHCP:Reply, MsgType = ACK, TransactionID = 0x33276787 
  Frame: Number = 56, Captured Frame Length = 371, MediaType = ETHERNET 
……
 - Dhcp: Reply, MsgType = ACK, TransactionID = 0x33276787 
    OpCode: Reply, 2(0x02) 
    Hardwaretype: Ethernet 
    HardwareAddressLength: 6 (0x6) 
   …… 
  + MessageType: ACK - Type 53 
  + ServerIdentifier: 10.0.0.1 - Type 54 
  + SubnetMask: 255.255.0.0 - Type 1 
  + DHCPEOptionsVendorSpecificInformation: 
  + DomainName: ctest.local - Type 15 
  + DomainNameServer: 10.0.0.1 - Type 6 
  + WPAD: http://consto.ctest.local/WPAD.dat - Type 252 
  + End:
複製代碼

 

另外有兩點值得注意:

  • IE只支持IPv4 DHCP的探測,不支持IPv6 DHCP探測
  • IE會嘗試通過所有的網絡卡來探測DHCP設置。

當IE得到WPAD.dat文件的地址,IE發送http get請求得到WPAD.dat文件,這與通過IE地址欄寫入url發送請求一樣。一旦WPAD.dat文件返回成功,IE會將該WPAD.dat的地址存進註冊表HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings中。另外將WPAD.dat文件寫進IE緩存目錄Temporary Internet Files。當IE再次發送其他網頁請求的時候,IE會從註冊表中讀取WPAD.dat的地址,之後發現緩存中可以找到該地址對應的文件緩存,之後使用該文件來確定相應的代理服務器。

常見問題

在使用IE過程中有以下兩種問題比較常見,

1. DHCP服務器上更新了252 option的WPAD.dat地址,但是IE並沒有按照新地址的WPAD.dat文件來使用代理服務器。 這種情況多數是由於IE緩存了WPAD.dat的地址在註冊表HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings。

2. WPAD.dat文件內容被更新,但是IE並沒有按照的新WPAD.dat文件來使用代理服務器。 這種情況多數是由於IE緩存了WPAD.dat文件,沒有去請求新的WPAD.dat的內容。

解決方案

對於第一個問題,我們可以執行如下步驟來清空不同級別的緩存,

清空DHCP緩存

ipconfig /release

ipconfig /renew  

清空DNS緩存

ipconfig /flushDNS  

清空註冊表WPAD.dat地址緩存

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\SavedLegacySettings  

清空IE緩存

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

對於第二個問題,可以從客戶端和服務器兩個方面去解決,

  • 在客戶端清空IE緩存。
  • 在服務器端爲WPAD.dat文件添加cache-control: no-cache http header,這樣WPAD.dat文件將不會被IE緩存。即使服務器WPAD.dat內容被頻繁更新客戶端也會及時得到。不過這樣會對性能有一定的影響,畢竟要多發送請求來得到WPAD.dat文件。

調試方法 

如果上述解決方案對你遇到的問題不起作用,也可以嘗試通過以下方式來查找問題發生的原因,對於這類問題一般的調試方法是通過Process Monitor Networ Monitor, 通過process monitor來追蹤註冊表訪問情況和本地緩存中wpad文件的訪問情況,通過network monitor來抓包查看是否發送了wpad相關請求。

Process Monitor

Network Monitor

 

發佈了93 篇原創文章 · 獲贊 16 · 訪問量 151萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章