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

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

번호 제   목   글쓴이 날짜 조회
297 [PHP] Internet explorer 11 한글 링크 클릭시 두번 클릭해야 되는 현상(한글인코딩문제… 제이네트워크 2015-03-03 29733
296 [윈도우서버] 윈도우서버 com+ / dll 등록후 세션 로그아웃시 dll 적용안될 때 제이네트워크 2019-04-11 29737
295 [메일] [아웃룩 outlook] 아웃룩 보낼편지함 삭제 안될 경우 해결법 제이네트워크 2016-08-02 29786
294 [리눅스서버] [BIND - 네임서버 존파일에서 SRV 레코드 추가] 제이네트워크 2016-11-18 29837
293 [리눅스서버] swap 메모리 추가하기 제이네트워크 2017-12-07 29872
292 [리눅스서버] vsftpd.conf 설정내용 제이네트워크 2019-08-14 30159
291 [DB] Mssql 시스템 프로지져 삭제 복구 관리자 2011-06-17 30191
290 [리눅스서버] CentOS 5.11.x 에서 php-5.1.4 소스설치시 mysqli 에러로 make 안될때 제이네트워크 2017-07-25 30197
289 [wowza] IP CAMERA 및 DVR영상(rtsp)을 wowza server 3.x 통해서 스트리밍하기(wowza restreaming) 제이네트워크 2014-08-26 30217
288 [리눅스서버] CentOS(리눅스)버전, 혹은 APM(apache, php, mysql) 버전 확인하려고 할때 사용하는 … 제이네트워크 2015-09-07 30240
287 [윈도우서버] 윈도우서버 com+ dll 등록방법] 제이네트워크 2019-04-11 30272
286 [리눅스서버] [아파치SSL 에러] File size limit exceeded$HTTPD -DSSL 해결법 제이네트워크 2016-06-22 30285
285 [메일] 리눅스 sendmail 로 폼메일사용시 nobody@localhost.localhost.com 으로 발송될 경우 (1) 제이네트워크 2016-07-06 30326
284 [기타] [CloudFlare]클라우드플레어 사용시 클라이언트 실제 IP ADDRESS 찾기 제이네트워크 2019-01-19 30402
283 [DB] mysql 로그파일 줄이기 관리자 2011-05-17 30490
282 [DB] mysql 디비생성 스크립트 관리자 2011-05-16 30582
281 [DB] [mysql] mysql 에서 캐릭터셋(characterset) 설정 확인 제이네트워크 2013-08-06 30605
280 [메뉴얼] Asrock IKVM Menual 제이네트워크 2014-03-31 30608
279 [메일] [sendmail]메일 수발신이 느릴때 (sendmail이 정상동작 하나 느리게 작동할 때) 제이네트워크 2015-09-22 30613
278 [리눅스서버] 리눅스에서 CPU 정보 및 CPU 코어개수, 물리 CPU 수를 확인하는 방법 제이네트워크 2017-04-27 30657
277 [리눅스서버] 리눅스 root 패스워드 재설정 관리자 2011-06-17 30679
276 [리눅스서버] 리눅스서버에서 chracterset 을 맞출려고 할 때 제이네트워크 2015-08-25 30698
275 [리눅스서버] vsFTPd 사용시 디렉토리 목록 조회가 안될때 제이네트워크 2017-10-30 30707
274 [기타] 영상샘플 제이네트워크 2015-02-11 30867
273 [메일] [sendmail]센드메일 버전체크 하기 (리눅스서버에서) 제이네트워크 2017-04-04 30935
272 [리눅스서버] 리눅스에서 공백이 포함된 디렉토리 처리 제이네트워크 2016-07-26 30947
271 [리눅스서버] [아파치conf 비교]apache2.2.x 와 apache-2.4.x 의 차이점 제이네트워크 2019-10-13 31061
270 [리눅스서버] centos7 에서 서비스(Vsftp) 시작 명령어 관련 제이네트워크 2017-05-16 31114
269 [리눅스서버] [apache] mod_ruid2 모듈 설치시 에러 mod_ruid2.c:45:28: error: sys/capability.h: No such file … 제이네트워크 2015-11-06 31115
268 [리눅스서버] [우분투]ubuntu 15.10 서버 네트워크 설정 및 ufw 방화벽 제이네트워크 2016-03-24 31117
267 [DB] [mysql]설치시 에러 - No curses/termcap library found 제이네트워크 2013-01-07 31121
266 [DB] Can't find file: './mysql/***.frm' (errno: 13)문제 관리자 2011-06-17 31193
265 [리눅스서버] [named] dig 명령어 사용법 제이네트워크 2015-02-14 31289
264 [메뉴얼] windowsmediaplayer 인코더 제이네트워크 2011-05-23 31326
263 [스크립트언어] [ASP] ASP에서 글 내용 한줄씩 프린트 하기 관리자 2011-06-17 31336
262 [윈도우서버] [iis7.x ASP 에러] An error occurred on the server when processing the URL 제이네트워크 2015-05-04 31378
261 [윈도우서버] [asp]windows2003 IIS6.X 설정백업 제이네트워크 2014-12-09 31420
260 [리눅스서버] [ 우분투정리 ubuntu ] 제이네트워크 2016-10-25 31422
259 [wowza] Wowza Media Server 3.5.2 리눅스(윈도우동일) RPM버전 디렉토리 구조 제이네트워크 2013-03-19 31440
258 [스크립트언어] [PHP] checking lex output file root... ./configure: line 2554: lex: command not found 컴파일에… 관리자 2011-06-17 31472
 1  2  3  4  5  6  7  8  9  10