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 중국어 웹사이트의 기타 관련 기사를 참조하세요!