System.Net.WebRequest
orファイル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
hostsファイルを尊重するのにSystem.Net.WebRequest
無視するのはなぜですか? WebRequest が hosts ファイルを尊重するようにするには、何を変更する必要がありますか?
追加情報:
- IPv6 を無効にして IPv4 DNS サーバーを 127.0.0.1 に設定すると、上記のコードは期待どおりに機能 (失敗) します。ただし、通常の DNS サーバーを代替として追加すると、予期しない動作が再開されます。
- これを 3 台の Win7 ボックスと 2 台の Vista ボックスで再現しました。唯一の定数は、私の会社のネットワークです。
- .NET 3.5 SP1 と VS2008 を使用しています
編集
@Richard Beier の提案に従って、System.Net
トレースを試みました。トレースをオンにすると、正常にWebRequest
失敗します。ただし、トレースをオフにするとすぐに、動作は予期しない成功に戻ります。以前と同じマシンで、デバッグ モードとリリース モードの両方でこれを再現しました。
編集 2
これは、問題を引き起こしている会社のプロキシであることが判明しました。私たちのソリューションは、"bing.com" が既定のプロキシではなく DIRECT を指す、テスト マシン用のカスタム プロキシ構成スクリプトでした。