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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值