> Java > java지도 시간 > 본문

Java에서 클라이언트의 실제 IP 주소를 얻는 방법

WBOY
풀어 주다: 2023-05-10 11:46:05
앞으로
1435명이 탐색했습니다.

JSP에서 클라이언트의 IP 주소를 얻는 방법은 request.getRemoteAddr()입니다. 이 방법은 대부분의 경우에 효과적입니다. 그러나 Apache, Squid와 같은 역방향 프록시 소프트웨어를 통해서는 클라이언트의 실제 IP 주소를 얻을 수 없습니다.

역방향 프록시 소프트웨어를 사용하는 경우 http://192.168.1.110:2046/ URL을 http://www.javapeixun.com.cn/ URL로 역방향 프록시할 때 request.getRemoteAddr() 메서드를 사용하세요. 획득한 IP 주소는 클라이언트의 실제 IP가 아닌 127.0.0.1 또는 192.168.1.110입니다.

프록시 이후에는 클라이언트와 서비스 사이에 중간 계층이 추가되어 서버가 클라이언트의 IP를 직접 얻을 수 없으며, 서버 측 애플리케이션이 요청을 전달하여 클라이언트에 주소를 직접 반환할 수 없습니다. 그러나 전달된 요청의 HTTP 헤더 정보에는 X-FORWARDED-FOR 정보가 추가됩니다. 원래 클라이언트 IP 주소와 원래 클라이언트가 요청한 서버 주소를 추적하는 데 사용됩니다. http://www.javapeixun.com.cn /index.jsp/를 방문했을 때 실제로 서버에 있는 index.jsp 파일에 실제로 접근하는 것은 우리 브라우저가 아니고, 프록시 서버가 http://에 먼저 접근하는 것입니다. 192.168.1.110: 2046/index.jsp, 프록시 서버는 index.jsp에 액세스하는 프록시 서버이므로 request.getRemoteAddr() 메서드를 통해 index.jsp를 가져옵니다. 실제로 클라이언트의 IP 주소가 아닌 프록시 서버의 주소입니다.

따라서 클라이언트의 실제 IP 주소를 얻는 첫 번째 방법을 얻을 수 있습니다.

public String getRemortIP(HttpServletRequest request) {   if (request.getHeader("x-forwarded-for") == null) {    return request.getRemoteAddr();   }   return request.getHeader("x-forwarded-for");  }
로그인 후 복사

하지만 http://www.5a520.cn /index.jsp/를 방문하면 반환된 IP 주소는 항상 알 수 없습니다. , 이는 또한 위에 표시된 대로 127.0.0.1 또는 192.168.1.110이 아닙니다. http://192.168.1.110:2046/index.jsp를 방문하면 클라이언트의 실제 IP 주소가 반환될 수 있으며 다음과 같이 썼습니다. 확인하는 방법. 그 이유는 오징어에 있습니다. squid.conf 구성 파일의forwarded_for 항목은 기본적으로 on입니다.forwarded_for가 off로 설정된 경우, 다중 레벨 역방향 프록시가 전달되면 X-Forwarded-For의 값은 단지 하나가 아니라 일련의 IP 값 중 실제 클라이언트의 실제 IP는 무엇입니까?

답은 X-Forwarded-For에서 알 수 없는 첫 번째 유효한 IP 문자열을 가져오는 것입니다. 예:

위 내용은 Java에서 클라이언트의 실제 IP 주소를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿