웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
국내 IP 조회하는 클래스.(소켓사용)
2003.01.17 03:54
<?
/*
국내 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
/*
국내 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
제목 | 글쓴이 | 날짜 |
---|---|---|
[동영상강좌] 제20회차 - 다중 if문 | 아이티스터디 | 2006.02.02 |
firefox에서 location.href안 먹힐 때 해결법 [1] | 꿀벙이 | 2006.02.24 |
게임상의 캐릭터와 대화하는 것 같이 보이기(?) [4] | 세강 :D | 2006.02.24 |
두가지 색으로 깜박거리는 텍스트 | keymove | 2006.03.17 |
3D 메세지 나타나기... | 왜,그러지 | 2006.04.05 |
텍스트 위에 네온 빛이 이동하는 효과.. | 왜,그러지 | 2006.04.05 |
마우스 따라다니는 아날로그 시계 [1] | 왜,그러지 | 2006.04.05 |
DHTML 계산기 | 왜,그러지 | 2006.04.05 |
마우스 따라다니 면서 원형을 그리면서 돌아가는것... | 왜,그러지 | 2006.04.07 |
홈페이지 TOP 버튼 만들어 보기 [7] | 인테리어뱅크 | 2006.04.10 |
드래그금지 태그 풀어보기 [2] | 인테리어뱅크 | 2006.04.10 |
페이지를 풀창으로 띄우는 방법 [1] | 인테리어뱅크 | 2006.04.11 |
[동영상] 제1강 자바 스크립트의 기본 개념 | 인테리어뱅크 | 2006.04.11 |
[동영상] 제2강 연산자 [1] | 인테리어뱅크 | 2006.04.11 |
트렌지션 테이블. | java | 2006.04.15 |
텍스트 색상이 플래시처럼 바뀌는 소스. | java | 2006.04.15 |
둥그렇게 말리는 듯한 느낌의 공지소스.. | java | 2006.04.15 |
Textarea안에서의 타이핑되는 텍스트! | java | 2006.04.15 |
스크롤되다가 마우스를 가져가면 멈추는 광고판 [2] | java | 2006.04.22 |
스크롤바 색상 제너레이터 [1] | java | 2006.04.22 |
//간단하게 줄여봅니다.^^
$ip = "127.0.0.1"; //ip or domain 단, whois 는 국내 도메인만 가능
$fp = fsockopen("whois.nic.or.kr", 43, $errno, $errstr,30);
fputs($fp,$ip);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />n";
} else {
fwrite($fp, "n"); //fgets()사용시 에러
$string =fread($fp,1024);
fclose($fp);
echo $string;
}
?>