web-dev-qa-db-fra.com

Pourquoi ServerVariable ["REMOTE_ADDR"] renvoie-t-il l'adresse IP du serveur?

J'ai le code suivant:

string ip = Request.ServerVariables["REMOTE_ADDR"];

Ce qui, dans l'environnement de test, renvoie l'adresse IP de l'utilisateur, mais lorsque nous déployons le site Web en production, cette variable a l'adresse IP du serveur où l'application est hébergée. De l'aide?

18
felixmm

À mon avis, il y a un proxy au milieu. Utilisez d'abord HTTP_X_FORWARDED_FOR, et si c'est null, alors utilisez REMOTE_ADDR

De l'article article MSDN :

Récupérer uniquement la variable serveur REMOTE_ADDR devrait suffire, mais j’ai trouvé des ressources en ligne qui suggéraient qu’un code de ce type vérifie également la variable HTTP_X_FORWARDED_FOR; si la demande provient d'un serveur proxy qui traduit l'adresse, c'est cette variable qui contient l'adresse correcte. Si vous demandez une variable de serveur qui n'existe pas, la propriété ServerVariables renvoie une chaîne vide. Par conséquent, même si cette propriété n'apparaît pas dans mes tests, la tentative de récupération de sa valeur ne pose pas de problème.

METTRE À JOUR:

Si les paramètres ont été modifiés pour un équilibreur de charge, vous devez demander à voir si l'adresse IP d'origine peut être transmise. Je sais que cela peut être fait avec le serveur ISA de Microsoft.

Si ce n'est pas une option, il existe d'autres variables de serveur que vous pouvez essayer et voir si elles produisent un résultat:

"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR"
"HTTP_X_FORWARDED"
"HTTP_X_REAL_IP"
"HTTP_VIA"
"HTTP_COMING_FROM"
"HTTP_FORWARDED_FOR"
"HTTP_FORWARDED"
"HTTP_FROM"
"HTTP_PROXY_CONNECTION"
"CLIENT_IP"
"FORWARDED"
23
zeroef

Pourquoi utilisez-vous d'anciennes variables de serveur de style VB au lieu de Request.UserHostAddress

Voir Bibliothèque MSDN .

Comme les autres l'ont indiqué, vous obtiendrez l'adresse IP du terminateur proxy inverse/SSL si les demandes ne semblent pas provenir du client d'origine (comme cela est possible au moins sur le serveur ISA, et probablement dans la plupart des autres proxys inverses).

Sinon, vous obtiendrez l'adresse publique du client (qui est probablement une adresse de routeur sur le site du client, car la plupart des réseaux locaux sont NAT-ed).

En quoi votre configuration dans l'environnement de production diffère-t-elle de votre environnement de test? 

Obtenez-vous réellement l'adresse IP du serveur Web ou d'un autre serveur du même réseau?

4

Je vois que c’est une vieille question mais je l’ai parcourue et je pense connaître la réponse. La réponse est plus simple que celles mentionnées ci-dessus ... Je viens de rencontrer le même problème aujourd'hui. Je parie que vous essayez d’obtenir l’adresse IP d’une page appelée par XMLHTTP qui renverra l’adresse IP du serveur puisque c’est celui qui fait la demande et non l’utilisateur.

0
Hamada