Maison >Java >javaDidacticiel >Comment obtenir la véritable adresse IP du client en Java
En JSP, la méthode pour obtenir l'adresse IP du client est : request.getRemoteAddr() Cette méthode est efficace dans la plupart des cas. Cependant, la véritable adresse IP du client ne peut pas être obtenue via des logiciels de proxy inverse tels qu'Apache et Squid.
Si un logiciel de proxy inverse est utilisé, lors du proxy inverse de l'URL de http://192.168.1.110:2046/ vers l'URL de http://www.javapeixun.com.cn/, utilisez la méthode request.getRemoteAddr() L'adresse IP obtenue est : 127.0.0.1 ou 192.168.1.110, pas la véritable IP du client.
Après le passage par le proxy, du fait de l'ajout d'une couche intermédiaire entre le client et le service, le serveur ne peut pas obtenir directement l'adresse IP du client, et l'application côté serveur ne peut pas renvoyer directement l'adresse au client en transmettant la requête . Cependant, les informations X-FORWARDED-FOR sont ajoutées aux informations d'en-tête HTTP de la requête transférée. Utilisé pour suivre l'adresse IP du client d'origine et l'adresse du serveur demandée par le client d'origine. Lorsque nous visitons http://www.javapeixun.com.cn /index.jsp/, en fait, ce n'est pas notre navigateur qui accède réellement au fichier index.jsp sur le serveur, mais le serveur proxy accède en premier à http:// 192.168.1.110 : 2046/index.jsp, le serveur proxy renvoie les résultats consultés à notre navigateur. Parce que c'est le serveur proxy qui accède à index.jsp, index.jsp est obtenu via la méthode request.getRemoteAddr(). en fait l'adresse du serveur proxy, pas l'adresse IP du client.
Nous pouvons donc obtenir la première méthode pour obtenir la véritable adresse IP du client :
public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }
Mais lorsque je visite http://www.5a520.cn /index.jsp/, l'adresse IP renvoyée est toujours inconnue , qui n'est pas non plus 127.0.0.1 ou 192.168.1.110 comme indiqué ci-dessus. Lorsque je visite http://192.168.1.110:2046/index.jsp, la véritable adresse IP du client peut être renvoyée et j'ai écrit un. méthode pour le vérifier. La raison réside dans Squid. L'élément forwarded_for dans le fichier de configuration de squid.conf est activé par défaut. Si forwarded_for est désactivé, alors : , si le proxy inverse multi-niveaux est transmis, la valeur de X-Forwarded-For n'est pas seulement une, mais une série de valeurs IP. Laquelle est la véritable adresse IP du vrai client ?
La réponse est de prendre la première chaîne IP valide non inconnue dans X-Forwarded-For. Par exemple :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!