웹마스터 팁

<?
/*
     국내 Whois에서 해당 IP를 조회하고, 정보를 리턴해주는 클래스

        Scripted by 행복한고니(gonom9@empal.com)
*/

class whoisClass
{
        var $ip, $errno, $errstr;
        var $pattern = "^[[]+( IP 사용 기관 정보 )";
        var $result;

        //IP를 입력하고 결과값(한글) 배열을 반환한다.
        function query_ip($ip){
                $this->ip = $ip;
                $str = $this->getStr();
                if(!$str) return false;
                $str_num = count($str);

                for($i=0 ; $i<$str_num; $i++){
                        if(eregi("조회하신 IP주소의 사용기관 정보는 아래와 같습니다.", $str[$i]) == 1) $Start_Capture = 13;
                        if($Start_Capture != 0){
                                switch($Start_Capture){
                                        case 11:
                                                $result = explode("-",ereg_replace("IP 주소            : ","",$str[$i]));
                                                $this->result["start_ip"] = $result[0];
                                                $this->result["end_ip"] = $result[1];
                                                break;
                                        case 9:
                                                $this->result["isp"] = ereg_replace("연결 ISP명         : ","",$str[$i]);
                                                break;
                                        case 4:
                                                $this->result["org_id"] = ereg_replace("기관고유번호       : ","",$str[$i]);
                                                break;
                                        case 3:
                                                $this->result["org_name"] = ereg_replace("기관명             : ","",$str[$i]);
                                                break;
                                        case 2:
                                                $this->result["city"] = ereg_replace("시도명             : ","",$str[$i]);
                                                break;
                                        case 1:
                                                $this->result["address"] = ereg_replace("주소               : ","",$str[$i]);
                                }
                                $Start_Capture--;
                        }
                }
                return $this->result;
        }

        //Private
        function getStr(){
                $fp = fsockopen("whois.nic.or.kr", 43, $this->errno, $this->errstr,10) or exit();
                fputs($fp, $this->ip."rn");

                $string = "";
                while(!feof($fp)){
                        $string .= fgets($fp, 128);
                }
                fclose($fp);
                if($string) return $string;
                else return false;
        }
}
?>

사용법은 아래쪽에 제가 올린 것과 같습니다. -_-;;
뽑아오는 정보에도 변함이 없지만, 소켓을 사용했다는 점이 틀립니다.
즉, whois의 웹페이지를 통하지 않고 바로 43번 소켓으로 접속해서 정보를 뽑아옵니다.
혹시 이게 의심나시는 분은 텔넷으로 whois.nic.or.kr의 43번 포트에 접속해서 아이피를 적고 엔터쳐보시길....
바로 정보가 튀어나옵니다. ^^;;
소켓의 접속시간은 10초로 제한했습니다. 10초안에 whois에서 정보를 빼오지 못하면 false 값을 리턴하도록 했습니다. -_-;; 때때로 페이지가 멈춰버리는 현상이 생겨서요....

*** 주의점
소켓 라이브러리를 사용했기때문에 PHP에서 소켓사용이 가능해야 합니다.
phpinfo()를 출력해보고 옵션에 --enable-sockets 가 있는지 확인하세요~ ^^
아래것보다 빠른 속도와 조금 더 높은 성공률이 장점입니당~
(참고 : WinAPM에서는 소켓을 사용할 수 없는 것 같더군요)

아래에 제가 썼던 글입니다.
http://www.nzeo.com/bbs/zboard.php?id=p_study&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=609