웹마스터 팁

<?
/*
     국내 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
제목 글쓴이 날짜
자신의 디비내용을 출력해주는 소스 [출처: phpschool.com] [5] 석이™ 2003.02.05
제로보드식 에러페이지 만들기 [2] .zeve 2003.02.04
야구 자료실 2 (목록 만들기) 한꼬마 2003.02.02
야구 자료실 만들기 1 [8] file 한꼬마 2003.01.30
PHP,자바스크립트 활용하기 #1 -무단링크라는 것은... [21] ☆좀비파우더™ 2003.01.30
^.^ 그림을 DB에 집어넣어 버리기.. [13] 아이쿠 2003.01.30
lotto 번호 추출기 [7] 갑빠™ 2003.01.29
제로보드 코멘트 수정 기능 구현!! [13] teslaMINT 2003.01.28
NZEO 쪽지 수신 허용/거부 따라하기 ~(=ㅁ=)~ [12] teslaMINT 2003.01.28
[제로카운터 수정하기#4-초보용] 인트로에서 카운트 체크하고 메인에서 카운트 보여주기 [3] 김태훈 2003.01.22
[제로카운터 수정하기#3-초보용] 어제 오늘 방문자수 변경하기 김태훈 2003.01.22
[제로카운터 수정하기#2-초보용] 새로 설치후 예전 방문자수로 고치기(최고방문자수 문제해결됨) 김태훈 2003.01.22
[제로카운터 수정하기#1-초보용] 테이블 다 지우고 새로 설치하기 [2] 김태훈 2003.01.22
엔지오 처럼 주소 /?channel=about 식으로 만들기 [18] 위니 2003.01.21
국내 IP 조회하는 클래스.(소켓사용) [1] 행복한고니 2003.01.17
텍스트 링크, 배너 링크*랜덤 (틀팁포함) [3] 둘리나라™ 2003.01.16
파일 하나로 끝내는-_- NZEO 북마크...-_-a [14] ineal 2003.01.13
웹 인증 보호, 윈도우 로그인 폼 이용 (authenticate) [9] file 둘리나라™ 2003.01.13
[동주아빠] PHP 게시판(끝.29강) - 삭제(delete_ok.php) [18] 손병목 2003.01.11
[동주아빠] PHP 게시판(28강) - 삭제(delete.php) 손병목 2003.01.11