조언을 구합니다

Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

통신사 ip 대역으로 접속 했을 경우 댓글창을 없애버리는걸 진행 중입니다...!!!

 

{@
    $band = explode(".", getenv('REMOTE_ADDR'));
    $range = $band[0].$band[1];
    $range_ = $band[0].$band[1].$band[2];
    if(!$is_logged && ($range == 203226 || $range == 211234 || ($range >= 22332 && $range <= 22363) || $range_ == 3970 || $range == 11070 || $range == 175223 || $range == 211246 || $range == 118235 || $range == 211246 || $range == 6143 || $range == 211234 || $range == 106102 || $range == 117111 || $range == 21136 || $range == 106101)):
        $rangein=true;
    else:
        $rangein=false;
    endif;
}

 

제가 작성했었던 통신사 ip 대역을 이용해 위와 같이 코드를 짜보았는데 부실한 부분이 있나 여쭙니다...!!

  • profile
    $arrayTureList = array('203226', '211234' ...);
    if(in_array($range, $arrayTrueList)):
    else:
    endif;

    이런식으로 가는게 더 나을듯합니다.
  • profile profile
    조언 고맙습니다
  • profile

    $ranges = array(

        '203.226.*.*',

        '211.234.*.*',

        ... 중략 ...

    );

    $rangein = Rhymix\Framework\Filters\IpFilter::inRanges($_SERVER['REMOTE_ADDR'], $ranges);

     

    이렇게 쓰면 보기도 훨씬 편하고, IP 대역 목록을 관리하기도 편하고, 두 자리짜리와 세 자리짜리가 우연히 붙어서 엉뚱한 대역을 가리키게 되는 문제도 미리 방지할 수 있습니다.

     

    IP 대역은 203.226.*.* 라고 쓰셔도 되고, 전문용어(?)로 203.226.0.0/16 이라고 쓰셔도 라이믹스는 잘 알아듣습니다. 요즘 IP 주소 고갈 때문에 대기업들마저 두 자리 대역을 온전히 할당받지 못하고 /18이나 /20 등으로 쪼개는 경우가 많은데, 이런 것까지 정확하게 판단할 수 있지요.

     

    결론: 이미 있는 함수를 최대한 활용합니다.^^

  • profile profile
    아 내부 함수에 좋은게 있었네요 ㅋㅋ
  • profile profile
    명쾌한 답변 고맙습니다 코어에서 제공하는 함수 리스트는 직접 찾아봐야 하는거겠죠?
  • profile profile

    이 방법대로 내부 함수를 이용하려고 오랫만에 스킨 폴더를 열었더니 현기증이 나네요.. ㅎㅎ

     

    {@
    $band = explode(".",getenv('REMOTE_ADDR'));
    $range = $band[0].$band[1];
    $range_ = $band[0].$band[1].$band[2];
    if(($range_ >= 203226192 && $range_ <= 203226252) || ($range_ >= 211234128 && $range_ <= 211234239) || ($range_ >= 211234244 && $range_ <= 211234255) || ($range >= 27160 && $range <= 27183) || ($range >= 22332 && $range <= 22363)):
    $rangein=true;
    elseif($range == 397 || $range == 11070 || $range == 175223 || $range == 211246 || $range == 118235 || $range == 211246):
    $rangein=true;
    elseif($range == 6143 || $range == 106102 || $range == 117111 || $range == 106101 || ($range_ >= 2112340 && $range_ <= 2112349) || ($range_ >= 21123410 && $range_ <= 21123495) || ($range_ >= 21136128 && $range_ <= 21136159) || ($range_ >= 21136224 && $range_ <= 21136255)):
    $rangein=true;
    else:
    $rangein=false;
    endif;
    }

     

    u플러스 대역의 211.234.0.0 ~ 211.234.95.255 에서 자리수가 맞지 않아 문제가 발생했더라구요 ㅋㅋ,,,

     

    특정 ip 에서 개인이 아닌 통신사 아이피로 잡히는 문제가 생겨서 위와 수정 했었는데요...


    array 방식으로 수정 하려할때 /11 /17 등등으로 딱 정확히 나눌수 없을땐 일일히 입력해 주어야 할까요?

  • profile profile

    나누어 떨어지지 않는 IP 대역이란 없습니다. 만약 /18과 /19 사이 어딘가에 걸쳐져 있는 것처럼 보이는 대역이 있다면 처음부터 잘못 입력되었거나, 인접한 대역을 각각 입력하기 귀찮아서 한 번에 적은 것이겠지요. 언급하신 유플러스 IP 대역은 211.234.0.0/18과 211.234.64.0/19를 함께 적어 놓은 것입니다.

    라이믹스에서는 그냥 211.234.0.0-211.234.95.255라고 써도 됩니다.

    매뉴얼 참고: https://rhymix.org/manual/misc/ipfilter