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

클라우드플레어 사용시 클라이언트 실제 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 40

번호 제   목   글쓴이 날짜 조회
40 [기타] ESXi 호스트의 root 로 접근이 불가능한 이슈 제이네트워크 2021-04-08 28668
39 [기타] 그누보드4(EUCKR)에서 그누보드5(UTF8)로 데이타이전 하기 제이네트워크 2020-06-28 30991
38 [기타] [CloudFlare]클라우드플레어 사용시 클라이언트 실제 IP ADDRESS 찾기 제이네트워크 2019-01-19 35783
37 [기타] 크롬브라우저에서 플래시 항상허용후 설정값 저장하는 방법 제이네트워크 2018-12-01 31790
36 [기타] 윈도우7/윈도우10 winsxs 폴더 용량 줄이기 최적화 제이네트워크 2018-04-28 38077
35 [기타] [리눅스에러] /bin/sh^M: bad interpreter: No such file or directory 제이네트워크 2017-06-26 32124
34 [기타] 리눅스 named(bind) 설정 점검 사이트 제이네트워크 2017-06-11 30747
33 [기타] [에러]휴지통이 손상되었습니다. 라는 메시지와 함께 디스크접근이 안될 때 제이네트워크 2017-05-01 37509
32 [기타] tar 특정폴더에 압축을 풀어야 할 경우 사용 옵션 제이네트워크 2016-05-10 31200
31 [기타] [XE 1.8 설치시 에러]XE cannot connect to DB 제이네트워크 2015-04-11 36013
30 [기타] [무비메이커설치]무비메이커3.x 설치하기 제이네트워크 2015-03-07 37505
29 [기타] 2015년 개정된 사이트에서 전자세금계산서(국세청)를 발행시 설치해야 할 Act… 제이네트워크 2015-03-04 37046
28 [기타] 영상샘플 제이네트워크 2015-02-11 35156
27 [기타] [워드프레스]워드프레스 이전 후 도메인주소(URL)변경하기 제이네트워크 2014-11-27 44530
26 [기타] [구글 외부 메일 주소를 사용할때 네임서버 설정] (리눅스 bind의 경우) 제이네트워크 2014-06-13 38183
25 [기타] [네임서버]네이버웍스를 사용할 경우 MX 레코드 설정 (리눅스 bind의 경우) 제이네트워크 2014-06-13 48680
24 [기타] [워드프레스]영문으로 설치된 워드프레스 한글화 하기 제이네트워크 2014-06-06 37454
23 [기타] [워드프레스]Allowed memory size 부족 에러 제이네트워크 2014-02-17 40956
22 [기타] 윈도우7 IE10 64bit 혹은 윈도우8 64bit 에서 엑티브엑스(activeX) 실행 안될 때 제이네트워크 2013-11-19 42479
21 [기타] 익스플로러8(ie8)에서만 jpg 이미지가 보이지 않고 엑박 뜰 경우 조치 방법 제이네트워크 2013-09-23 46712
20 [기타] xe 설치시 msg_safe_mode_ftp_needed 혹은 msg_ftp_mkdir_fail 제이네트워크 2013-07-28 38867
19 [기타] [GPT 파티션 삭제 하는 법] 제이네트워크 2013-07-26 43809
18 [기타] 메일 첨부파일에 winmail.dat 파일만 첨부되었을때 확인방법 관리자 2012-01-30 51144
17 [기타] 프린트 큐에 취소/에러란 프린터물이 있을때 (프린트 큐삭제) 관리자 2011-08-31 41805
16 [기타] 설치 패키지를 열지 못했습니다. 패키지가 있는지, 액서스할 수 있는지 확… 관리자 2011-08-02 46992
15 [기타] 한글명으로 된 파일이 다운로드 되지 않을 때 관리자 2011-07-26 39336
14 [기타] URL 데이터의 처리-GET과POST 관리자 2011-06-17 50160
13 [기타] 검색엔진이 좋아하는 메타태그 만들기 관리자 2011-06-17 39438
12 [기타] RAID란 무엇인가? 관리자 2011-06-17 41670
11 [기타] 메일 전송을 위한 spf 설정 관리자 2011-06-17 43162
10 [기타] tracert / traceroute 명령어 관리자 2011-06-13 43427
9 [기타] 알아두면 유용한 윈도우 단축키들 관리자 2011-06-10 39024
8 [기타] 컴퓨터_ 전기요금 줄이는 10가지 방법 관리자 2011-06-10 38188
7 [기타] 알아두면 유익한 기본적인 컴퓨터용어[2] 관리자 2011-06-10 39362
6 [기타] 윈도우 메신저 삭제하기 관리자 2011-06-10 37484
5 [기타] 샌디브릿지PC 조립하기2 -동영상- 관리자 2011-06-10 39289
4 [기타] 샌드브리지 PC 조립하기 -동영상1- 관리자 2011-06-10 39062
3 [기타] 한글로 된 파일명을 가진 파일이 다운로드 되지 않을때 관리자 2011-06-02 37461
2 [기타] 무료로 사용가능 한 프리웨어 관리자 2011-05-16 40504
1 [기타] 제로보드 자동글 등록 방지 코드(링크참조) 관리자 2011-05-16 41314