질문/조언질답게시판

국내 통신사를 클라이언트 ip로 비교해서 통신회사를 알려줄 수 있는 방법이 있을까요?

 

특정 통신사에게 적용 또는 허용을 구현하고 싶어도 ip가 어디 통신사인지 판별해 줄수 있는 방법이 없는 것 같아 혹시 어디에 그런게 있나 해서요.

  • profile

    http://ip-api.com/json/ip주소

    를 활용해도 될거 같구요.

     

    <?php
    $IP = $_SERVER['REMOTE_ADDR'];
    
    $User_Agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0';
    $Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
    $Accept_Language = 'en-US,en;q=0.5';
    $Referer = 'http://whatismyipaddress.com/';
    $Connection = 'keep-alive';
    
    $HTML = file_get_contents("http://whatismyipaddress.com/ip/$IP", false, stream_context_create(array('http' => array('method' => 'GET', 'header' => "User-Agent: $User_Agent\r\nAccept: $Accept\r\nAccept-Language: $Accept_Language\r\nReferer: $Referer\r\nConnection: $Connection\r\n\r\n"))));
    
    preg_match_all('/<th>(.*?)<\/th><td>(.*?)<\/td>/s', $HTML, $Matches, PREG_SET_ORDER);
    
    $ISP = $Matches[3][2];
    $City = $Matches[11][2];
    $State = $Matches[10][2];
    $ZIP = $Matches[15][2];
    $Country = $Matches[9][2];
    ?>
    <body>
        <table align="center">
            <tr><td>ISP :</td><td><?php echo $ISP;?></td></tr>
            <tr><td>City :</td><td><?php echo $City;?></td></tr>
            <tr><td>State :</td><td><?php echo $State;?></td></tr>
            <tr><td>Zipcode :</td><td><?php echo $ZIP;?></td></tr>
            <tr><td>Country :</td><td><?php echo $Country;?></td></tr>
        </table>
    </body>

     

    <?php
    $isp = geoip_isp_by_name('www.example.com');
    if ($isp) {
        echo 'This host IP is from ISP: ' . $isp;
    }
    ?>

     

    $json=file_get_contents("https://extreme-ip-lookup.com/json/$ip");
    extract(json_decode($json,true));
    echo "ISP: $isp ($city, $region, $country)<br>";

     

    직접 해보진 않았습니다.

  • profile profile

    geoip_isp_by_name 함수를 쓰기 위해 확장프로그램을 설치하면 데이터베이스 까지 설치되어 자체서버에서 즉시 값을 확인 가능한건가요??

    그리고 주기적으로 업데이트 시 데이터베이스가 갱신되는건지 궁금하네요.

  • profile profile
    직접 해보지 않았는데 ㅠㅠ
    geoip 모듈이랑 라이브러리 설치하고 db 쪽은 cron으로 업데이트 가능한걸로 알고 있습니다.
  • profile
    https://github.com/xe-public/xe-module-loginlog/blob/master/loginlog.admin.view.php#L171

    이러한 KISA 아이피 서치 api를 사용하시면 구현이 가능합니다.

    이 모듈을 잘 뜯어 보시면 구현하는데 어려움이 없으실 것 같습니다.

    다만 매번 해당 아이피를 검사하다보면 성능에 문제가 발생될테니 캐시를 잘 분배해서 만들어보세요
  • profile

    매번 api에서 검사를 하는게 문제가 되겠네요.... 캐시를 적용해서 쓰던지 고민을 해봐야겠습니다.
    두분 답변 정말 감사합니다.

     

    세션에 넣어야 할 것 같기도 하네요.....아리송...

  • profile

    통신사 IP 분배의 최소 단위는 /24 입니다. 마지막 자리는 한 세트라는 거죠.

    즉, 123.45.67.89의 통신사를 찾았다면 123.45.67.* 대역 전체가 똑같다고 가정해도 됩니다.

    이걸 감안해서 캐시 처리하면 효율이 꽤 높아질 것입니다.

  • ?
    https://namu.wiki/w/%ED%86%B5%EC%8B%A0%EC%82%AC%20IP
    여기보시면 통신사아이피 정리해둔게 있습니다. 이것참고하셔도좋습니다.