채택완료

방문자 특정 IP 걸러내기

2020-01-03 (금) 23:00:58 3,751

접속자집계에서 66.249. 로 시작하는 구글 아이피가 실제 방문자로 나타나서 방문자 수가 정확하지가 않습니다.

66.249. 로 시작하는 아이피는 방문자로 표시 하지 않는 방법이 있을까요?

답변 3개 / 댓글 4개

채택된 답변
+20 포인트

헥갈리니까요.

Copy
// 여기부터

<?php if( substr( $_SERVER['REMOTE_ADDR'] , 0, 6 ) == "66.249" ) { ?>
<?php } else { ?>

      // 여기있던것만 쓰세요.
<?php } ?>

// 여기까지 조건문 걷어내고요.


    if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

    // 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함

 

    //***** 여기부터 *************************************************

    // 아래 변수를 추가하고
    $is_goo_bot_ip = (substr($_SERVER['REMOTE_ADDR'], 0, 6) == "66.249");

    // 원래 아래와 같던것을

    // if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR'])

    // 아래와 같이 바꾸시면 되요.
    if ( ! $is_goo_bot_ip && ( get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR'] ) )

    //****** 여기까지만 변경 **************************************
    {
        set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장

        // $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
        $remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
        $referer = "";
        if (isset($_SERVER['HTTP_REFERER']))
            $referer = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_REFERER'])));
        $user_agent  = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_USER_AGENT'])));
        $vi_browser = '';
        $vi_os = '';
        $vi_device = '';
        if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) {
            include_once(G5_BBS_PATH.'/visit_browscap.inc.php');
        }
        $sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) ";

        $result = sql_query($sql, FALSE);
        // 정상으로 INSERT 되었다면 방문자 합계에 반영
        if ($result) {
            $sql = " insert {$g5['visit_sum_table']} ( vs_count, vs_date) values ( 1, '".G5_TIME_YMD."' ) ";
            $result = sql_query($sql, FALSE);

            // DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
            if (!$result) {
                $sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + 1 where vs_date = '".G5_TIME_YMD."' ";
                $result = sql_query($sql);
            }

            // INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
            // 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)

            // 오늘
            $sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = '".G5_TIME_YMD."' ";
            $row = sql_fetch($sql);
            $vi_today = $row['cnt'];

            // 어제
            $sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = DATE_SUB('".G5_TIME_YMD."', INTERVAL 1 DAY) ";
            $row = sql_fetch($sql);
            $vi_yesterday = $row['cnt'];

            // 최대
            $sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
            $row = sql_fetch($sql);
            $vi_max = $row['cnt'];

            // 전체
            $sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} ";
            $row = sql_fetch($sql);
            $vi_sum = $row['total'];

            $visit = '오늘:'.$vi_today.',어제:'.$vi_yesterday.',최대:'.$vi_max.',전체:'.$vi_sum;

            // 기본설정 테이블에 방문자수를 기록한 후
            // 방문자수 테이블을 읽지 않고 출력한다.
            // 쿼리의 수를 상당부분 줄임
            sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
        }
    }

답변에 대한 댓글 1개

접근을 차단하는게 아니고 단지 방문자로 표기가 되지 않았으면 합니다.
Copy
if( substr( $_SERVER['REMOTE_ADDR'] , 0, 6 ) == "66.249" ) {

   // 팻쑤. 로그 작성안함

} else {

   // 로그 작성함

}

답변에 대한 댓글 3개

어느 파일을 손봐야 하나요? 찾을려면 시간이 걸릴 것 같아서........... 감사합니다.
어느 부분을 손봐야 하는지도 좀 알려주세요.
<?php if( substr( $_SERVER['REMOTE_ADDR'] , 0, 6 ) == "66.249" ) { ?>
<?php } else { ?>
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR'])
{
set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장

// $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
$remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
$referer = "";
if (isset($_SERVER['HTTP_REFERER']))
$referer = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_REFERER'])));
$user_agent = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_USER_AGENT'])));
$vi_browser = '';
$vi_os = '';
$vi_device = '';
if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) {
include_once(G5_BBS_PATH.'/visit_browscap.inc.php');
}
$sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) ";

$result = sql_query($sql, FALSE);
// 정상으로 INSERT 되었다면 방문자 합계에 반영
if ($result) {
$sql = " insert {$g5['visit_sum_table']} ( vs_count, vs_date) values ( 1, '".G5_TIME_YMD."' ) ";
$result = sql_query($sql, FALSE);

// DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
if (!$result) {
$sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + 1 where vs_date = '".G5_TIME_YMD."' ";
$result = sql_query($sql);
}

// INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
// 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)

// 오늘
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = '".G5_TIME_YMD."' ";
$row = sql_fetch($sql);
$vi_today = $row['cnt'];

// 어제
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = DATE_SUB('".G5_TIME_YMD."', INTERVAL 1 DAY) ";
$row = sql_fetch($sql);
$vi_yesterday = $row['cnt'];

// 최대
$sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_max = $row['cnt'];

// 전체
$sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_sum = $row['total'];

$visit = '오늘:'.$vi_today.',어제:'.$vi_yesterday.',최대:'.$vi_max.',전체:'.$vi_sum;

// 기본설정 테이블에 방문자수를 기록한 후
// 방문자수 테이블을 읽지 않고 출력한다.
// 쿼리의 수를 상당부분 줄임
sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
}
}
?>
<?php } ?>

---------------------------------------------------------------------------------------------------------------------------------

이렇게 했는데 맞나요?

답변을 작성하려면 로그인이 필요합니다.