【发布时间】:2020-08-05 02:32:56
【问题描述】:
有没有办法让System.Net.WebRequest 或System.Net.WebClient 尊重hosts 或lmhosts 文件?
例如:在我的主机文件中,我有:
10.0.0.1 www.bing.com
当我尝试在浏览器(IE 和 FF)中加载 Bing 时,它无法按预期加载。
Dns.GetHostAddresses("www.bing.com")[0]; // 10.0.0.1
WebRequest.Create("http://10.0.0.1").GetResponse(); // throws exception (expected)
WebRequest.Create("http://www.bing.com/").GetResponse(); // unexpectedly succeeds
同样:
WebClient wc = new WebClient();
wc.DownloadString("http://www.bing.com"); //succeeds
为什么System.Net.Dns 尊重主机文件而System.Net.WebRequest 忽略它?我需要更改哪些内容才能使 WebRequest 尊重主机文件?
附加信息:
- 如果我禁用 IPv6 并将我的 IPv4 DNS 服务器设置为 127.0.0.1,上述代码将按预期工作(失败)。但是,如果我将正常的 DNS 服务器作为备用服务器添加回来,意外的行为会再次出现。
- 我已经在 3 个 Win7 和 2 个 Vista 盒子上复制了这个。唯一不变的是我公司的网络。
- 我正在使用 .NET 3.5 SP1 和 VS2008
编辑
根据@Richard Beier 的建议,我尝试了System.Net 追踪。跟踪 ON 时,WebRequest 会失败。但是,一旦我将跟踪 OFF 关闭,行为就会恢复到意外的成功。我已经在调试和发布模式下在与以前相同的机器上重现了这个。
编辑 2
这原来是公司代理给我们带来的问题。我们的解决方案是为我们的测试机器定制一个代理配置脚本,让“bing.com”指向 DIRECT 而不是默认代理。
【问题讨论】:
-
我猜您正在通过网络中的代理工作。你的浏览器是做什么的?
-
IE 和 FF 都按预期运行(尝试从 hosts 文件中指示的服务器加载)。
-
你试过
ipconfig /flushdns吗? -
是的,
ipconfig /displaydns显示 hosts 文件中的条目。