HOME > 이용안내
이용안내
 
작성일 : 19-01-19 13:31
[기타] [CloudFlare]클라우드플레어 사용시 클라이언트 실제 IP ADDRESS 찾기
 글쓴이 : 제이네트워크
조회 : 30,366  

클라우드플레어 사용시 클라이언트 실제 IP ADDRESS 찾기


$_SERVER['REMOTE_ADDR'] 를 잘 사용하고 있었는데, 클라우드플레어 를 적용시키니, 엉뚱한 IP주소를 받아온다.

검색해보니, $_SERVER["HTTP_CF_CONNECTING_IP"] 를 쓰라고 한다.

 

가장 높은 추천을 받은 글에서는 다음과 같은 설명이 적혀 있다.

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {

  $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];

}

정리하자면  $_SERVER['HTTP_X_FORWARDED_FOR'] 에 대한 내용은 아래로 정리 할 수 있겠다.


$_SERVER['REMOTE_ADDR'] : 기존의 클라이언트 IP 확인용

$_SERVER['HTTP_X_FORWARDED_FOR'] : 프록시 를 통해 올 경우. 클라이언트 IP확인용

$_SERVER["HTTP_CF_CONNECTING_IP"] : 클라우드플레어 같은 경우. 클라이언트 IP확인용.


============================================


CloudFlare DNS / client  IP 식별법  (샘플코드)

Cloudflare의 ips는 공개적으로 저장되어 있으므로 여기에서 볼 수 있습니다.
그러면 ip가 cloudflare인지 확인하십시오 (HTTP 헤더 HTTP_CF_CONNECTING_IP에서 실제 IP를 얻을 수 있습니다).

이 기능을 사용하여 모든 비 cf 연결을 비활성화하거나 반대의 경우에는 common.php 나 pagestart.php와
같은 다른 모든 스크립트보다 먼저 호출되는 단일 PHP 스크립트 파일을 사용하는 것이 좋습니다.


function ip_in_range($ip, $range) {
    if (strpos($range, '/') == false)
        $range .= '/32';

    // $range is in IP/CIDR format eg 127.0.0.1/24
    list($range, $netmask) = explode('/', $range, 2);
    $range_decimal = ip2long($range);
    $ip_decimal = ip2long($ip);
    $wildcard_decimal = pow(2, (32 - $netmask)) - 1;
    $netmask_decimal = ~ $wildcard_decimal;
    return (($ip_decimal & $netmask_decimal) == ($range_decimal & $netmask_decimal));
}

function _cloudflare_CheckIP($ip) {
    $cf_ips = array(
        '199.27.128.0/21',
        '173.245.48.0/20',
        '103.21.244.0/22',
        '103.22.200.0/22',
        '103.31.4.0/22',
        '141.101.64.0/18',
        '108.162.192.0/18',
        '190.93.240.0/20',
        '188.114.96.0/20',
        '197.234.240.0/22',
        '198.41.128.0/17',
        '162.158.0.0/15',
        '104.16.0.0/12',
    );
    $is_cf_ip = false;
    foreach ($cf_ips as $cf_ip) {
        if (ip_in_range($ip, $cf_ip)) {
            $is_cf_ip = true;
            break;
        }
    } return $is_cf_ip;
}

function _cloudflare_Requests_Check() {
    $flag = true;

    if(!isset($_SERVER['HTTP_CF_CONNECTING_IP']))   $flag = false;
    if(!isset($_SERVER['HTTP_CF_IPCOUNTRY']))       $flag = false;
    if(!isset($_SERVER['HTTP_CF_RAY']))             $flag = false;
    if(!isset($_SERVER['HTTP_CF_VISITOR']))         $flag = false;
    return $flag;
}

function isCloudflare() {
    $ipCheck        = _cloudflare_CheckIP($_SERVER['REMOTE_ADDR']);
    $requestCheck   = _cloudflare_Requests_Check();
    return ($ipCheck && $requestCheck);
}

// Use when handling ip's
function getRequestIP() {
    $check = isCloudflare();

    if($check) {
        return $_SERVER['HTTP_CF_CONNECTING_IP'];
    } else {
        return $_SERVER['REMOTE_ADDR'];
    }
}


이 스크립트를 사용하려면 매우 간단합니다.


$ip = getRequestIP();
$cf = isCloudflare();

if($cf) echo "Cloudflare :D<br>";
else    echo "Not cloudflare o_0";

echo "Your actual ip address is: ". $ip;


이 스크립트는 실제 IP 주소와 요청이 CloudFlare 인지 아닌지를 알수 있습니다.







Cloud server Streaming service Domain Cloud Firewall

 
 

Total 377

번호 제   목   글쓴이 날짜 조회
337 [윈도우서버] 윈도우서버 com+ dll 등록방법] 제이네트워크 2019-04-11 30228
336 [윈도우서버] ERR_TOO_MANY_REDIRECTS 해결방법 제이네트워크 2019-03-30 33757
335 [리눅스서버] Wildcard SSL 인증서 설치시에러 [warn] _default_ VirtualHost overlap on port 443, 제이네트워크 2019-03-30 31944
334 [DB] MSSQL SERVER 테이블변경시 제한시간이 만료되었습니다. 라는 에러발생시 제이네트워크 2019-01-30 24562
333 [DB] MSSQL 1씩 자동증가값 제어(ID 사양 변경 안될 경우) 제이네트워크 2019-01-30 24456
332 [DB] mysql-5.7.x 이상 버전에서 비번 변경 후 에러가 나올 때 제이네트워크 2019-01-22 24553
331 [리눅스서버] mysqli.so php추가 모듈 설치 제이네트워크 2019-01-21 33826
330 [기타] [CloudFlare]클라우드플레어 사용시 클라이언트 실제 IP ADDRESS 찾기 제이네트워크 2019-01-19 30367
329 [리눅스서버] CentOs7 부팅시 rc.local 파일 실행되도록 설정 (1) 제이네트워크 2019-01-16 31908
328 [윈도우서버] iis 버전 버젼 version 확인 방법 제이네트워크 2019-01-14 29409
327 [윈도우서버] Windows 10 자동 업데이트 완전 끄기 제이네트워크 2019-01-11 26418
326 [윈도우서버] 윈도우서버 IIS7.5 다운로드 업로드 용량 늘리기 제이네트워크 2018-12-13 27276
325 [리눅스서버] CentOS7 SSH 접속포트 변경과 방화벽 오픈 제이네트워크 2018-12-10 31513
324 [기타] 크롬브라우저에서 플래시 항상허용후 설정값 저장하는 방법 제이네트워크 2018-12-01 27245
323 [DB] MSSQL2008 로그 줄이기 제이네트워크 2018-11-29 23090
322 [리눅스서버] NFS 연결오류시 mount.nfs: Input/output error 제이네트워크 2018-11-16 37219
321 [리눅스서버] [CentOS 7] Python 3을 Cent7에서 yum으로 인스톨 하는 방법 제이네트워크 2018-11-02 35801
320 [리눅스서버] [우분투서버 Ubuntu network device명 확인 및 변경] 제이네트워크 2018-06-21 36160
319 [윈도우서버] [윈도우10 원격데스크톱 오류 CredSSP 암호화 Oracle 수정 때문] 제이네트워크 2018-06-21 35373
318 [리눅스서버] CentOS7 SSH 실행방법 정리 제이네트워크 2018-06-16 34254
317 [기타] 윈도우7/윈도우10 winsxs 폴더 용량 줄이기 최적화 제이네트워크 2018-04-28 32922
316 [리눅스서버] VSFTP 에서 사용하는 port를 변경하기 제이네트워크 2018-04-26 41089
315 [리눅스서버] named 2차 네임서버로 zone transfer 권한 문제 제이네트워크 2018-04-13 33706
314 [리눅스서버] 리눅스 apache에서 동시 접속자 수 체크 제이네트워크 2018-03-30 34978
313 [메일] [다음- 스마트워크 MX 레코드 설정방법] 제이네트워크 2018-02-19 28431
312 [리눅스서버] swap 메모리 추가하기 제이네트워크 2017-12-07 29830
311 [DB] mtysql 5.7 이상버전에서 root 패스워드 변경시 제이네트워크 2017-11-25 23071
310 [윈도우미디어] 익명 사용자 인증 플러그 인 오류 때문에 Windows Media 서비스 시작할 수 없습… 제이네트워크 2017-11-25 25619
309 [리눅스서버] [리눅스서버] [리눅스서버]CentOS-6.9 yum 오류날때 제이네트워크 2017-11-08 29575
308 [리눅스서버] vsFTPd 사용시 디렉토리 목록 조회가 안될때 제이네트워크 2017-10-30 30670
307 [DB] [mysql] mysql 덤프파일 복구시 에러시 - Got a packet bigger than 'max_allowed_packet&… 제이네트워크 2017-09-14 22813
306 [PHP] 사이트별 allow_url_fopen허용해 주기 제이네트워크 2017-09-12 23986
305 [리눅스서버] [zip모듈 추가설치]php 컴파일 없이 zip 모듈 추가 설치 제이네트워크 2017-08-30 31627
304 [리눅스서버] [openssl]php에 openssl 추가모듈 설치하기 제이네트워크 2017-08-30 33633
303 [리눅스서버] [NFS에러] NFS에서 에러 메세지 Stale NFS file handle 발생하는 경우 제이네트워크 2017-07-28 33437
302 [리눅스서버] CentOS 5.11.x 에서 php-5.1.4 소스설치시 mysqli 에러로 make 안될때 제이네트워크 2017-07-25 30151
301 [리눅스서버] [리눅스서버]CentOS- 5.11.yum 오류날때 제이네트워크 2017-07-24 29585
300 [리눅스서버] 리눅스에서 파일 인코딩 확인하기 및 변환하기(iconv 명령) utf-8 ↔ euc-kr 제이네트워크 2017-06-27 31821
299 [기타] [리눅스에러] /bin/sh^M: bad interpreter: No such file or directory 제이네트워크 2017-06-26 27371
298 [리눅스서버] [NFS 에러] mount.nfs: Stale NFS file handle 제이네트워크 2017-06-21 28928
 1  2  3  4  5  6  7  8  9  10