bool checkdnsrr ( string $host [, string $type ] ) (PHP 4, PHP 5)

Dns 서버에는 호스트에 대한 정보, 다양한 리소스 레코드를 저장하고 있어서 checkdnsrr 함수로 레코드 여부를 판단할 수 있습니다. 레코드값이 존재하면 true를, 없으면 false를 반환합니다.

 리소스 레코드       의 미
 A 호스트의 32비트 ipv4 주소
 CNAME 호스트의 엘리어스 이름
 MX 메일교환기(도메인의 메일전송 담당호스트: mail exchanger)
 NS 하위 도메인에 대한 DNS 서버
 PTR ip주소를 호스트 이름으로 매핑
 AAAA 호스트의 64비트 ipv6 주소(PHP 5에 추가)

이 함수는 부울형으로만 판단할 수 있으며, 리소스 레코드는 반환하지 않습니다. 레코드를 반환값으로 하려면, dns_get_record함수를 사용하여야 합니다.

다음 그림으로 리소스 레코드를 확인할 수 있습니다.


예제 (ex #1

 <?php
 
// 윈도우 환경이라면....
 
if (!function_exists('checkdnsrr') && 
           (strtoupper(substr(PHP_OS03)) === 'WIN')) { 

       function checkdnsrr($host$type='MX') {
           if (empty(
$host
)) { return; }
           
$arr = array(
 
'A','MX','NS','SOA','PTR','CNAME','AAAA','A6','SRV',
 
'NAPTR','TXT','ANY'
);
           if (!
in_array(strtoupper($type),$arr
)) { return; }
           
$hostname escapeshellcmd($host
);

           
exec('%SystemRoot%\System32\nslookup -type='.$type.' '.$hostname$output
);
           foreach(
$output as $line
){
                if (
preg_match('/^'.$hostname.'/',$line)) {
                  return true
                } 

           }
       }
 }

 if(
checkdnsrr('empal.com''MX') == true
){
      echo 
"이 도메인은 MX 레코드가 있습니다."
;
 } else {
      echo 
"이 도메인은 MX 레코드가 없습니다."
;
 }

 if(
checkdnsrr('yahoo.co.kr''CNAME') == true
){
      echo 
"엘리어스 이름이 존재합니다."
;
 } else {
      echo 
"엘리어스 이름이 존재하지 않습니다."
;
 }

 
// ANY는 모든 리소스의 레코드를 확인합니다.
 // 무료 도메인을 사용하더라도 상위 도메인은 레코드가 있으므로 이 값은 true입니다.
 
if(checkdnsrr('test.dothome.co.kr''ANY') == true
){
      echo 
"실제 존재하는 도메인입니다."
;
 } else {
      echo 
"존재하지 않는 도메인입니다."
;
 }
 
 
?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag SMTP

댓글을 달아 주세요

포트 번호를 반환하는 getservbyname 함수

int getservbyname ( string $service , string $protocol )
(PHP 4, PHP 5)

이 함수는 서비스 이름과 전송 프로토콜로 포트번호를 반환하는 함수입니다. $protocol에 TCP 또는 UDP로 포트번호를 반환받을 수 있습니다. 유닉스에는 서비스와 포트번호가 "/etc/services"에 저장되고, 프로토콜은 "/etc/protocol"에 저장됩니다.

예제 (ex #1
 <?php
 
echo getservbyname('http''tcp'); 
// http 포트는 보통 80입니다.
 /*
 결과:
 80
 */
 
?>

예제 (ex #2

 <?php
 $services 
= array(
 
'http''ftp''ssh''telnet''imap','smtp''nicname',
 
'gopher''finger''pop3'
);

 foreach (
$services as $serv
) {
    
$port getservbyname($serv'tcp'
);
    echo 
$serv ": " $port "<br />\n"
;
 }

 
/*
 결과:
 http: 80
 ftp: 21
 ssh: 
 telnet: 23
 imap: 143
 smtp: 25
 nicname: 43
 gopher: 70
 finger: 79
 pop3: 110
 */
 
?>


서비스 이름을 반환하는 getservbyport 함수

getservbyname와는 반대되는 기능으로 포트번호로 서비스이름을 반환합니다. 

string getservbyport ( int $port , string $protocol )
(PHP 4, PHP 5)

예제 (ex #3
 <?php
 
echo getservbyport (80'tcp'); 
// http 포트는 보통 80입니다.
 /*
 결과:
 http
 */
 
?>

클라이언트가 서버에 접속하기 위해 필요한 포트번호나 서비스이름을 알아둘 필요가 있기 때문에 핵심적인 기능을 하는 getservbyname함수와, getservbyport함수를 알아 둘 필요가 있습니다.


아래 주소에서 해당하는 많은 포트번호를 제공합니다.
http://www.iana.org/assignments/port-numbers
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

프로토콜 번호를 반환하는 getprotobyname 함수

int getprotobyname ( string $name )
(PHP 4, PHP 5)

이 함수는 tcp/ip 프로토콜에 연결된 프로토콜 번호를 반환하며, 반환값이 없으면 -1를 리턴합니다. 그리고 파일은 유닉스는 "/etc/protocals"에, 윈도우는 "%SystemRoot%\System32\drivers\etc\protocol"에 저장됩니다.

예제 (ex #1
 <?php
 $prot 
getprotobyname('tcp'
);
 if (
$prot == -1
) {
    echo 
'에러;
 } else {
    echo '
Protocol 
#' . $prot;
 
}

 
/*
 결과:
 Protocol #6
 */
 
?>

예제 (ex #2

 <?php
 $arr
=array("ip","icmp","ggp","tcp","egp","pup","udp","hmp","xns-idp","rdp","rvd" 
);

 foreach(
$arr as $k=>$v
) {
      echo 
$arr[$k] .": "getprotobyname ($v)."<br />"
;
 }

 
/*
 결과:
 ip: 0
 icmp: 1
 ggp: 3
 tcp: 6
 egp: 8
 pup: 12
 udp: 17
 hmp: 20
 xns-idp: 22
 rdp: 27
 rvd: 66
 */
 
?>


프로토콜 이름을 반환하는 getprotobynumber 함수


string getprotobynumber ( int $number )
(PHP 4, PHP 5)

getprotobyname함수와 반대되는 기능으로 프로토콜 번호로 이름을 반환받는데, 반환값이 있으면 프로토콜이름을, 없으면 false를 반환합니다.

예제 (ex #3
 <?php
 
echo getprotobynumber(6)."<br/>"
;
 echo 
getprotobynumber(17)."<br/>"
;
 echo 
getprotobynumber(100)."<br/>"
;

 
/*
 결과:
 tcp
 udp
 */
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

string gethostbyaddr ( string $ip_address ) (PHP 4, PHP 5)

gethostbyname ( gethostbynamel ) 함수는 호스트이름으로 ip주소를 출력하지만 gethostbyaddr 는 반대로 ip주소로 호스트이름을 출력합니다.

예제 (ex #1
 <?php
    
if($host gethostbyaddr ("69.147.125.xx"
)) {
       print(
$host); 
// 출력: ir1.fp.vip.ac4.yahoo.com
    
}
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

string gethostbyname ( string $hostname ) (PHP 4, PHP 5)

이 함수는 하나의 ip주소로 반환합니다.

예제 (ex #1
 <?php
 
if($ip gethostbyname("yahoo.com"
)) {
    print (
$ip); 
// 출력: 67.195.160.xx
 
}
 
?>


모든 ip주소를 배열로 반환하는 gethostbynamel 함수

array gethostbynamel ( string $hostname ) (PHP 4, PHP 5)

예제 (ex #1
 <?php
 
if($ip gethostbynamel("yahoo.com"
)) {
    
print_r ($ip
);
 }

 
/*
 Array
 (
    [0] => 67.195.160.xx
    [1] => 69.147.125.xx
    [2] => 72.30.2.xx
    [3] => 98.137.149.xx
    [4] => 209.191.122.xx
 )
 */
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

int getmxrr ( string $hostname , array $mxhosts [, array $ weight ] )

Searches DNS for MX records corresponding to hostname 에 대응이 되는 MX 레코드를 찾기위해 DNS를 찾습니다. 레코드값이 있으면 TRUE를 없으면 FALSE를 반환합니다.

윈도우에서 nslookup.exe에 mx값을 요청했을때 출력입니다. 이를 기초로 함수를 작성할 수 있습니다.


예제 (ex #1

 <?php
 
// 윈도우환경 일때
 
if(strtoupper(substr(PHP_OS03)) === 'WIN'
) {
    function 
getmxrr($host, &$hosts, &$weight=false
) {
       
$hosts 
= array();
       
$weight 
= array();
       
$preference 
= array();
       
$records 
= array();
       
exec('%SystemRoot%\System32\nslookup.exe -q=mx '.escapeshellarg($host), $arr
);
       foreach(
$arr as $line
) {
          if (
preg_match("/.*mail exchanger = (.*)/",
                         
$line$records
)) {
     
$hosts[] = trim($records[1
]);
    }
    if (
preg_match("/.*MX preference = ([0-9]+)/",
                         
$line$preference
)) {
     
$weight[] = trim($preference[1
]);
    }
       }
       return( 
count($hosts) > 
);
   }
 }
 else {
   
getmxrr($host$mxhosts$weight
);
 }

 
/*
    $mxhosts = mail exchanger 값
    $weight = MX preference 값
 */
 
print_r(array($mxhosts,$weight
);

 
/* 결과
 Array
 (
    [0] => Array
        (
            [0] => m.mx.mail.yahoo.com
            [1] => a.mx.mail.yahoo.com
            [2] => b.mx.mail.yahoo.com
            [3] => c.mx.mail.yahoo.com
            [4] => d.mx.mail.yahoo.com
            [5] => e.mx.mail.yahoo.com
            [6] => f.mx.mail.yahoo.com
            [7] => g.mx.mail.yahoo.com
            [8] => h.mx.mail.yahoo.com
            [9] => i.mx.mail.yahoo.com
            [10] => j.mx.mail.yahoo.com
            [11] => k.mx.mail.yahoo.com
            [12] => l.mx.mail.yahoo.com
        )
    [1] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 1
            [4] => 1
            [5] => 1
            [6] => 1
            [7] => 1
            [8] => 1
            [9] => 1
            [10] => 1
            [11] => 1
            [12] => 1
        )
 )
 */
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag SMTP

댓글을 달아 주세요