java IP 주소 가져오기 예시
에이전트를 거친 후에 클라이언트와 서비스 사이에 중간층이 증가하기 때문에 서버는 클라이언트의 IP를 직접 받을 수 없고 서버 측 응용 프로그램도 요청된 주소를 전송하여 클라이언트에게 직접 되돌릴 수 없다.그러나 요청된 HTTP 헤더 정보에 X - FORWARDED - FOR 정보가 추가되었습니다.기존 클라이언트 IP 주소와 원래 클라이언트가 요청한 서버 주소를 추적합니다.우리가 방문할 때http://www.xxx.com/index.jsp/때, 사실은 우리 브라우저가 서버의 index에 진정으로 접근한 것이 아니다.jsp 파일이 아니라 프록시 서버에서 접근합니다http://192.168.1.110:2046/index.jsp프록시 서버는 인덱스에 접근하기 위해 접근한 결과를 브라우저에 되돌려줍니다.jsp의, 그래서 index.jsp에서 request를 통과합니다.getRemoteAddr() 방법으로 얻은 IP는 실제로 프록시 서버의 주소이며 클라이언트의 IP 주소가 아닙니다.
따라서 클라이언트의 실제 IP 주소를 얻을 수 있는 방법 1:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
그런데 제가 방문할 때.http://www.xxx.com/index.jsp/반환된 IP 주소는 항상 unknown이며 위에서 설명한 127.0.1 또는 192.168.110이 아닙니다.http://192.168.1.110:2046/index.jsp클라이언트의 실제 IP 주소로 돌아가 검증할 수 있는 방법을 썼습니다.원인은 스쿼드에서 나온다.squid.conf 파일 forwarded_for 항목은 기본적으로 on입니다. forwarded_for는 off로 설정되었습니다. X-Forwarded-For: unknown은 클라이언트의 실제 IP 주소를 얻을 수 있는 방법 2:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
그러나 만약에 다단계 역방향 에이전트를 통과한다면 X-Forwarded-For의 값은 하나가 아니라 일련의 Ip값이다. 도대체 어느 것이 진정한 사용자 측의 실제 IP일까?정답은 X-Forwarded-For 중 첫 번째 알 수 없는 유효한 IP 문자열을 찾는 것입니다.
예:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
사용자의 실제 IP: 192.168.1.110
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.