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

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

번호 제   목   글쓴이 날짜 조회
377 [DB] Linux에서 MYSQL 데이터 디렉토리 변경하기 제이네트워크 2023-01-14 7229
376 [DB] phpmyadmin에서 'mcrypt 확장모듈을 불러올 수 없습니다' 에러 시 제이네트워크 2023-01-14 7269
375 [DB] mysql에서 innodb 설치 및 옵션 설명 제이네트워크 2023-01-14 7456
374 [DB] [MySQL] mysql error 1364 Field doesn't have a default values 해결방법 입니다. 제이네트워크 2023-01-14 7284
373 [리눅스서버] 우분투서버 apt 에러 - 미러사이트 변경 제이네트워크 2021-12-29 17193
372 [리눅스서버] 아파치 웹서버에서 mod_rewrite 모듈 추가 설치하기 제이네트워크 2021-11-03 17808
371 [메일] Centos7 sendmail설치 제이네트워크 2021-09-09 21395
370 [리눅스서버] Centos7 에서 SQLSRV / PDO_SQLSRV 모듈 추가 설치 제이네트워크 2021-08-26 19110
369 [리눅스서버] Centos7 SFTP 설정 및 Chroot 처리 방법 제이네트워크 2021-08-18 18682
368 [리눅스서버] 리눅스서버에서 아파치웹 서버 / php 버전 노출방지 제이네트워크 2021-07-19 20021
367 [메일] 아웃룩 메일 수발신할 때 (메일오류코드 2) 제이네트워크 2021-05-28 22080
366 [메일] 리눅스 쉘에서 telnet으로 메일발송테스트 하기 제이네트워크 2021-05-27 18924
365 [PHP] php에서 shmop 모듈 추가 설치하기 제이네트워크 2021-05-27 15778
364 [PHP] php_ftp 추가 모듈 설치 하기 제이네트워크 2021-05-27 14194
363 [기타] ESXi 호스트의 root 로 접근이 불가능한 이슈 제이네트워크 2021-04-08 18846
362 [메일] [Sendmail 포트변경] Sendmail에서 smtp 포트를 587포트로 변경하기 제이네트워크 2020-12-20 21145
361 [메일] [Sendmail 스팸 IP ADDRESS 체크] 제이네트워크 2020-12-20 20856
360 [DB] [mysql 디비체크] myisamchk 사용 옵션 제이네트워크 2020-12-20 18009
359 [DB] mysql 로그 최적화 하기 제이네트워크 2020-12-20 18032
358 [리눅스서버] 아파치서버에서 동시접속자 수를 알아보려고 할 때 제이네트워크 2020-12-19 24163
357 [리눅스서버] Apache서버에 mod_url 추가 설치 제이네트워크 2020-12-19 24000
356 [리눅스서버] Cronlog 설정 하는 법 제이네트워크 2020-12-19 24296
355 [메일] [sendmail] 메일발송이 안될 때 (오류 Relaying temporarily denied. Cannot resolve PTR recor… 제이네트워크 2020-07-15 22982
354 [기타] 그누보드4(EUCKR)에서 그누보드5(UTF8)로 데이타이전 하기 제이네트워크 2020-06-28 24525
353 [리눅스서버] mkfs로 포맷이 안되는 경우 (오류 dev/sdb2 is apparently in use by the system; will not mak… 제이네트워크 2020-04-02 27327
352 [리눅스서버] 우분투18.04 vi 에디터에서 글자가 깨져 보일 때 제이네트워크 2019-11-17 27451
351 [리눅스서버] 우분투18.04 에서 rc.local 파일 사용하기 제이네트워크 2019-11-17 27782
350 [리눅스서버] [아파치conf 비교]apache2.2.x 와 apache-2.4.x 의 차이점 제이네트워크 2019-10-13 30342
349 [리눅스서버] 리눅스 컴파일에러 error : Autoconf version 2.68 or higher is required on CentOS 제이네트워크 2019-10-07 32427
348 [DB] MSSQL2016 에서 서버유지관리/ 백업스케쥴 실행시 에러가 날때 제이네트워크 2019-08-22 22847
347 [PHP] php에서 세션을 늘리는 방법 제이네트워크 2019-08-22 21326
346 [DB] [mysql]MySQL 5.6 SQL STRICT 모드 변경 방법 제이네트워크 2019-08-14 26582
345 [리눅스서버] vsftpd.conf 설정내용 제이네트워크 2019-08-14 29465
344 [리눅스서버] 리눅스 메인보드 교체후 네트워크 재설정 제이네트워크 2019-07-04 31015
343 [리눅스서버] SFTP 퍼미션 조정 및 chroot 설정으로 상위폴더 접근 제한하기 제이네트워크 2019-06-30 30924
342 [리눅스서버] SFTP 접속만 가능한 계정 만들기] 제이네트워크 2019-06-30 33556
341 [리눅스서버] CentOS7.x 버전에서 최신 node.js 설치하기 제이네트워크 2019-05-23 32127
340 [윈도우서버] 윈도우 설치 중 새 시스템 파티션을 만들거나 기존 시스템 파티션을 찾을 … 제이네트워크 2019-04-24 28684
339 [PHP] 그누보드5 서버이전 후 글 작성 및 member가입 작성안되는 경우 제이네트워크 2019-04-24 23209
338 [윈도우서버] 윈도우서버 com+ / dll 등록후 세션 로그아웃시 dll 적용안될 때 제이네트워크 2019-04-11 29102
 1  2  3  4  5  6  7  8  9  10