9
votes

System.net.Webrequest Ne respectez pas le fichier d'hôtes

existe-t-il un moyen d'obtenir un system.net.webrequest ou system.net.webclient pour respecter les hôtes ou lmhosts fichier?

Par exemple: Dans mon fichier d'hôtes, j'ai: xxx

lorsque j'essaie de charger Bing dans un navigateur (c'est-à-dire et ff) il ne parvient pas à charger comme prévu. xxx

De même: xxx

pourquoi System.net.dns < / Code> Respectez le fichier d'hôtes mais system.net.webrequest ignorez-le? Que dois-je modifier pour que le fichier WebRequest respecte le fichier hosts?

Info supplémentaire:

  • Si je désactive IPv6 et définissez mon serveur DNS IPv4 sur 127.0.0.1, le code ci-dessus fonctionne (échoue) comme prévu. Toutefois, si j'ajoute que mes serveurs DNS normaux soient de retour comme alternatifs, le comportement inattendu reprend.
  • J'en ai reproduit ceci sur 3 boîtes Win7 et 2 Vista. La seule constante est le réseau de mon entreprise.
  • J'utilise .NET 3.5 SP1 et VS2008

    EDIT

    PER @RICHARD BEIER, j'ai essayé system.net traçage. Avec le traçage sur le WebRequest échoue comme il le devrait. Cependant, dès que je transformerai le traçage off le comportement revient au succès imprévu. J'ai reproduit cela sur les mêmes machines qu'auparavant en mode de débogage et de libération.

    edit 2

    Ceci s'est avéré être le proxy de la société qui nous donne problèmes. Notre solution était un script de configuration de proxy personnalisé pour nos machines de test qui avaient "Bing.com" point à la place du proxy par défaut.


4 commentaires

Je suppose que vous travaillez à travers un proxy sur votre réseau. Que fait votre navigateur?


IE et FF se comportent comme prévu (essayant de charger du serveur indiqué dans le fichier d'hôtes).


Avez-vous essayé ipconfig / flushdns ?


Oui, et ipconfig / displaydns affiche l'entrée dans le fichier hosts.


3 Réponses :


3
votes

J'utilise VS 2010 sur Windows 7, et je ne peux pas reproduire cela. J'ai fabriqué les mêmes hosts-fichier change et a exécuté le code suivant: xxx pré>

J'ai une exception sur la ligne marquée "* * *". Voici les détails de l'exception: P>

System.Net.WebException was unhandled
  Message=Unable to connect to the remote server
  Source=System
  StackTrace:
       at System.Net.HttpWebRequest.GetResponse()
       at ConsoleApplication2.Program.Main(String[] args) in c:\Data\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:line 17
  InnerException: System.Net.Sockets.SocketException
       Message=A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.0.0.1:80
       Source=System
       ErrorCode=10060
  • Activer Traçage système.net p> li>

  • contourner le problème en utilisant dns.gethostaddresses () pour le résoudre à une adresse IP. Ensuite, mettez la propriété intellectuelle dans l'URL - E.G. " http://10.0.0.1/ ". Ce n'est peut-être pas une option pour vous. P> li> ul>

    dans le thread ci-dessus, Mariyaatanasova_msft dit également: "httpwebrequest utilise dns.gethostenry pour résoudre l'hôte, vous pouvez donc avoir un résultat différent de DNS.GETHOSTADDRESSES". P> P>


3 commentaires

J'utilise VS2008 et 3.5 SP1. gethostenry me donne la même sortie que gethostaddress . Je vais regarder dans la traçabilité. Merci.


Tourné sur System.net Traçage selon votre suggestion. Avec le traçage, le WebRequest échoue comme prévu. Avec le traçage, il remonte à de manière inattendue. Les pensées?


C'est très étrange - je n'ai pas de bonne réponse. Hans Passant et Jonathan Stanton ont de bons points concernant les proxies. Mais si IE utilise un proxy et respecte toujours votre fichier d'hôtes, le fichier hosts doit également remplacer le proxy lors de l'utilisation de WebRequest. La seule chose que je peux suggérer est d'essayer de désactiver le proxy de toute façon, comme le suggère de Mwalker. Vous pouvez également essayer un sniffer de paquet tel que Wireshark ou moniteur réseau pour voir ce qui se passe sur le fil - mais je ne suis pas sûr que cela aidera. Si vous voyez une demande DNS pour www.bing.com, cela confirme qu'il n'utilise pas le fichier d'hosts, mais n'explique pas pourquoi.



7
votes

Je pense que @Hans Passant a repéré le problème ici. Il semble que vous ayez une configuration proxy dans IE.

WebRequest.Create("http://10.0.0.1").GetResponse(); // throws exception (expected) 


2 commentaires

Vous avez raison que je suis derrière un proxy d'entreprise mais je ne suis pas sûr de suivre votre logique. Je m'attendrais à ce que webrequest.create () présenterait un comportement identique à IE, mais ce n'est pas le cas. Bing.com dans IE Times Out essayer de charger 10.0.0.1


Vérifiez le web.config pour vous assurer que la défaillance de la valeur de valeur n'est pas configurée - en supprimant cela, ce qui précède.



0
votes

Vous devez écraser le proxy par défaut. Httpwebrequest & Webrequest définira un proxy par défaut si présent dans Internet Explorer et votre fichier hôtes forts> seront contournés forts>.

try
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.bing.com");
   request.Proxy = new WebProxy();
   request.Method = "POST";            
   request.AllowAutoRedirect = false;

   HttpWebResponse response = (HttpWebResponse)request.GetResponse();               
   if (response.StatusCode == HttpStatusCode.OK)
   {
      //some code here
   }
}
catch (exception e)
{
   //Some other code here
}


0 commentaires