프록시 서버를 통해 웹 사이트에 연결된 클라이언트의 IP 주소를 수집하는 방법이 있습니까?프록시를 통해 연결된 클라이언트의 IP 주소 찾기
전체 설정은 내부 LAN이고 sysadmin을 통해 프록시 시스템도 제어 할 수 있습니다. 웹 사이트 서버 측에 PHP5를 사용하고 있습니다.
PHP에서 $_SERVER['REMOTE_ADDR']
을 시도했지만이 변수는 프록시의 IP 주소 만 저장합니다.
아이디어가 있으십니까?
프록시 서버를 통해 웹 사이트에 연결된 클라이언트의 IP 주소를 수집하는 방법이 있습니까?프록시를 통해 연결된 클라이언트의 IP 주소 찾기
전체 설정은 내부 LAN이고 sysadmin을 통해 프록시 시스템도 제어 할 수 있습니다. 웹 사이트 서버 측에 PHP5를 사용하고 있습니다.
PHP에서 $_SERVER['REMOTE_ADDR']
을 시도했지만이 변수는 프록시의 IP 주소 만 저장합니다.
아이디어가 있으십니까?
(PHP에서) 표준 솔루션입니다.
프록시에 따라 다릅니다. 일부 프록시는 원본 IP 주소 인 X-Forwarded-For 헤더를 제공하는 헤더를 추가하지만 대부분의 회사에서 프록시를 사용하여 희귀 한 내부 네트워크 구조를 숨길 수 있습니다. 이것이 사실이라면 당신은 쉽게 할 수 없을 것입니다.
프록시를 제어 할 수있는 경우 프록시 문서를 읽어 해당 헤더를 추가하는 방법을 확인하십시오.
+1 정확하고 정교하게 설명됩니다. – karim79
PHP는 XFF 헤더를 서버 변수로 구문 분석합니까? –
X-Forwarded-For
은 클라이언트의 IP 주소를 얻는 유일한 방법입니다. 프록시에서 활성화 할 수있는 방법이 있는지 확인하십시오.
일부 프록시에서는 요청이 여러 프록시를 통과 할 때 기존 XFF 헤더를 처리하는 방법을 제공합니다. 여기에 고려해야 할 사항이 있습니다.
if ($_SERVER['HTTP_X_FORWARDED_FOR']){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else{
$ip = $_SERVER['REMOTE_ADDR'];
}
그러나 첫 번째 대답으로 모든 일이 실제로 설정되는 헤더에 따라 달라 말한다 :
이 코드는 프록시를 통해 연결하는 클라이언트의 IP 주소를 가져 오는 데 사용할 수 있습니다.
public static String getClientIpAddr(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.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
그러나 프록시가 투명 할 때만 감지합니다.
프록시 서버 사용하지 않음 : 아래
는 HTTP 프록시에 대한 정보입니다 클라이언트request.getHeader("HTTP_X_FORWARDED_FOR")
의
request.getRemoteAddr()
= IP 주소를 = 값 없음 또는 표시 없음투명 프로 사용 xies : 클라이언트
를 사용하여 일반 익명 프록시의
HTTP_X_FORWARDED_FOR
= 실제 IP 주소 : 프록시 서버의 프록시 서버의
request.getRemoteAddr()
= IP 주소HTTP_X_FORWARDED_FOR
= IP 주소Ummm .. Java입니다. 질문이 PHP로 태그되었습니다. – StackOverflowed
실제로 이것은 작동하지 않습니다. 'HTTP_X_FORWARD_FOR'대신 'HTTP_X_FORWARDED_FOR' – lauhub