Obtenir l’adresse IP du client demandé (message SOAP)

J’ai construit un service ASMX et, dans le code, traite un journal des erreurs provenant d’ELMAH. J’ajoute dans la firebase database tous les champs et j’en ajoute quelques uns. L’un est l’adresse IP du client demandé …

Mais je ne peux pas (veuillez lire, je ne sais pas comment) obtenir ça …

Je suis habitué à

ssortingng ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (ipAddress == "") ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

Mais bien sûr ici, cela ne s’applique pas car ce n’est pas une requête HTML mais une requête SOAP

dans l’en-tête ALL_HTTP, j’obtiens toutes ces informations:

 HTTP_CONNECTION:Keep-Alive HTTP_CONTENT_LENGTH:440331 HTTP_CONTENT_TYPE:text/xml; charset=utf-8 HTTP_EXPECT:100-continue HTTP_HOST:www.mydomainname.com HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074) HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA HTTP_SOAPACTION:"http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors" 

Où et comment puis-je obtenir l’adresse IP demandée?

Notez que je n’utilise aucun type d’authentification (pour le moment) … 🙂

Vous devriez pouvoir utiliser HttpContext.Current.Request.UserHostAddress, mais cela ne sera pas fiable si la machine demandeuse est derrière un serveur proxy ou un périphérique NAT. Vous obtiendrez l’adresse du serveur proxy à la place.


Je tiens à préciser que l’adresse IP n’est pas un identifiant unique approprié. Il n’identifie pas un ordinateur. Au mieux, il identifie l’adresse de la couche réseau qu’une interface réseau particulière d’un ordinateur particulier utilise à un moment donné. À un autre moment, cette même interface réseau pourrait utiliser une adresse IP différente. À un autre moment, le même ordinateur peut avoir plusieurs interfaces réseau. Vous ne pouvez pas dire.

Je crois me souvenir d’avoir lu que les concepteurs des protocoles TCP / IP ont délibérément expliqué qu’une adresse IP ne pouvait pas être utilisée comme identifiant unique d’un ordinateur. Malheureusement, il semble que trop peu de personnes aient lu cela.