국내 통신사를 클라이언트 ip로 비교해서 통신회사를 알려줄 수 있는 방법이 있을까요?
특정 통신사에게 적용 또는 허용을 구현하고 싶어도 ip가 어디 통신사인지 판별해 줄수 있는 방법이 없는 것 같아 혹시 어디에 그런게 있나 해서요.
국내 통신사를 클라이언트 ip로 비교해서 통신회사를 알려줄 수 있는 방법이 있을까요?
특정 통신사에게 적용 또는 허용을 구현하고 싶어도 ip가 어디 통신사인지 판별해 줄수 있는 방법이 없는 것 같아 혹시 어디에 그런게 있나 해서요.
geoip_isp_by_name 함수를 쓰기 위해 확장프로그램을 설치하면 데이터베이스 까지 설치되어 자체서버에서 즉시 값을 확인 가능한건가요??
그리고 주기적으로 업데이트 시 데이터베이스가 갱신되는건지 궁금하네요.
매번 api에서 검사를 하는게 문제가 되겠네요.... 캐시를 적용해서 쓰던지 고민을 해봐야겠습니다.
두분 답변 정말 감사합니다.
세션에 넣어야 할 것 같기도 하네요.....아리송...
통신사 IP 분배의 최소 단위는 /24 입니다. 마지막 자리는 한 세트라는 거죠.
즉, 123.45.67.89의 통신사를 찾았다면 123.45.67.* 대역 전체가 똑같다고 가정해도 됩니다.
이걸 감안해서 캐시 처리하면 효율이 꽤 높아질 것입니다.
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>";직접 해보진 않았습니다.