클 라 이언 트 의 실제 IP 를 가 져 오 는 방법
12191 단어 자바
클 라 이언 트 의 IP 주 소 를 가 져 오 는 데 자주 사용 되 는 방법 은 request. getRemoteAddr () 입 니 다.그러나 아파 치, Nagix 등 리 버스 프 록 시 를 통과 하면 클 라 이언 트 의 실제 IP 를 얻 을 수 없다
4. 567917. 프 록 시 를 거 친 후에 클 라 이언 트 와 서비스 사이 에 중간 층 이 증가 하기 때문에 서버 는 클 라 이언 트 의 IP 를 직접 받 을 수 없고 서버 측 응용 도 요청 한 주 소 를 클 라 이언 트 에 게 직접 전달 할 수 없다.그러나 리 트 윗 요청 한 HTTP 헤드 메시지 에 X - FORWARDED - FOR 메시지 가 추가 됐다.기 존의 클 라 이언 트 IP 주소 와 원래 클 라 이언 트 가 요청 한 서버 주 소 를 추적 합 니 다
4. 567917. 예 를 들 어 역방향 대 리 를 사용 하면http://192.168.10.1:8081역방향 에이전트http://example.com이 경우 request. getRemoteAddr () 방법 으로 얻 은 IP 주 소 는 클 라 이언 트 의 실제 IP 가 아 닌 127.0.0.1 또는 192.168.10.1 입 니 다.방문http://example.com프 록 시 서버 접근http://192.168.10.1:8081따라서 request. getRemoteAddr () 가 가 져 온 IP 는 프 록 시 서버 의 IP 입 니 다
획득 방법
(1) 방법 1
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
(2) 방법 2: squid. conf 의 배합 파일 forwardfor 항목 의 기본 값 은 on 입 니 다. forwardfor 설정 off: X - Forward - for: unknown
//equalsIgnoreCase , 。
//isBlank 、 0
public String getIpAddr(HttpServletRequest request) {
String[] headers = ["x-forwarded-for","Proxy-Client-IP","WL-Proxy-Client-IP"]
String ip = null;
for(String header: headers){
if(StringUtils.isBlank(addr) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader(header);
}
}
if(StringUtils.isBlank(addr) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
(3) 다단 계 역방향 에이 전 트 를 사용 하면 X - Forward - for 의 값 이 하나 가 아니 라 IP 값 을 가 져 옵 니 다.
public static String getClientIP(HttpServletRequest request) {
String[] headers = {"x-forwarded-for","Proxy-Client-IP","WL-Proxy-Client-IP"};
String ip = null;
for(String header: headers){
if(StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader(header);
}
}
if(StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if(ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")){
// IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip= inet.getHostAddress();
}
}
//if(ip.contains(","){
if(StringUtils.isBlank(ip)){
if(ip.indexOf(",")>0){
ip= ip.substring(0,ip.indexOf(","));
}
}
return ip;
}
GO GO
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.