PHP: 네트워크 관련 함수 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<muscat_setupcheckdnsrr>
view the version of this page
Last updated: Wed, 29 Jan 2003

LXVI. 네트워크 관련 함수

차례
checkdnsrr --  인터넷 호스트 네임이나 IP 어드레스에 대응되는 DNS 레코드를 체크함
closelog -- 시스템 로그에 기록을 못하도록 연결을 닫습니다.
debugger_off -- PHP 내부 디버거 사용을 멈춥니다.
debugger_on -- PHP 내부 디버거를 사용합니다.
define_syslog_variables -- syslog에 연관된 모든 상수를 초기화합니다.
dns_check_record -- Synonym for checkdnsrr()
dns_get_mx -- Synonym for getmxrr()
dns_get_record --  Fetch DNS Resource Records associated with a hostname
fsockopen --  인터넷이나 유닉스 도메인의 소켓 연결을 열어줍니다.
gethostbyaddr --  주어진 IP 어드레스에 대응이 되는 인터넷 호스트 이름을 가져옵니다.
gethostbyname --  주어진 인터넷 호스트 이름에 대응되는 IP 어드레스를 가져옵니다.
gethostbynamel --  주어진 인터넷 호스트 이름에 대응이 되는 IP 어드레스의 목록을 가져옵니다.
getmxrr --  주어진 인터넷 호스트 이름에 대응이 되는 MX 레코드를 가져옵니다.
getprotobyname --  프로토콜과 조합된 프로토콜 번호를 가져옵니다.
getprotobynumber --  프로토콜 번호와 조합된 프로토콜의 이름을 가져옵니다.
getservbyname --  인터넷 서비스와 프로토콜과 조합이 되어있는 포트 번호를 가져옵니다.
getservbyport --  포트와 프로토콜에 대응이 되는 인터넷 서비스를 가져옵니다.
ip2long --  (IPv4) 인터넷 프로토콜의 점이 찍혀 있는 주소를 포함한 문자열을 고유의 주소로 바꾸어줍니다.
long2ip --  (IPv4) 인터넷 네크워크 주소를 인터넷 표준의 점이 찍혀있는 문자열로 바꿉니다.
openlog -- 시스템 로그에 연결합니다
pfsockopen --  지속적인 인터넷이나 유닉스 소켓 연결을 엽니다.
socket_get_status --  존재하는 소켓의 자원에 대한 정보를 반환합니다.
socket_set_blocking -- 소켓의 모드를 설정 (blocking 모드/ non-blocking 모드)
socket_set_timeout -- 소켓에서의 시간초과 주기
syslog -- 시스템 로그 메시지를 생성합니다.


User Contributed Notes
네트워크 관련 함수
add a note add a note
oliviert at videotron dot ca
18-Feb-1999 09:31

If u wanna do one of these function on windows95, u have to install the lastest winsock before , if else php will crash with a message of wsock32.dll

()

philip at cornado dot c()m
04-Jul-2001 09:18

View a few Networking PHP PEAR classes here :

philip at cornado dot c()m
04-Jul-2001 09:20

More socket functions can be seen here :

philippe-at-cyberabuse.org
15-Dec-2001 02:46

PHP miss CIDR functions.

This one will convert a CIDR like this:
0.0.0.0/16 -> 0.0.0.0 - 0.0.255.255
127.0/16 -> 127.0.0.0 - 127.0.255.255
etc...

function cidrconv($net) {
$start=strtok($net,"/");
$n=3-substr_count($net, ".");
if ($n>0) { for ($i=$n;$i>0;$i--) $start.=".0"; }
$bits1=str_pad(decbin(ip2long($start)),32,"0","STR_PAD_LEFT");
$net=pow(2,(32-substr(strstr($net,"/"),1)))-1;
$bits2=str_pad(decbin($net),32,"0","STR_PAD_LEFT");
for ($i=0;$i<32;$i++) {
if ($bits1[$i]==$bits2[$i]) $final.=$bits1[$i];
if ($bits1[$i]==1 and $bits2[$i]==0) $final.=$bits1[$i];
if ($bits1[$i]==0 and $bits2[$i]==1) $final.=$bits2[$i];
}
return $start." - ".long2ip(bindec($final));
}

philippe-at-cyberabuse.org
12-Oct-2002 10:49

... and this one will do the opposite (o return NULL for invalid netblocks) :

1.0.0.0 1.0.255.255 -> 1.0.0.0/16
1.0.0.0 1.3.255.255 -> 1.0.0.0/14
192.168.0.0 192.168.0.255 -> 192.168.0.0/24

function ip2cidr($ip_start,$ip_end) {
if(long2ip(ip2long($ip_start))!=$ip_start or long2ip(ip2long($ip_end))!=$ip_end) return NULL;
$ipl_start=(int)ip2long($ip_start);
$ipl_end=(int)ip2long($ip_end);
if($ipl_start>0 && $ipl_end<0) $delta=($ipl_end+4294967296)-$ipl_start;
else $delta=$ipl_end-$ipl_start;
$netmask=str_pad(decbin($delta),32,"0","STR_PAD_LEFT");
if(ip2long($ip_start)==0 && substr_count($netmask,"1")==32) return "0.0.0.0/0";
if($delta<0 or ($delta>0 && $delta%2==0)) return NULL;
for($mask=0;$mask<32;$mask++) if($netmask[$mask]==1) break;
if(substr_count($netmask,"0")!=$mask) return NULL;
return "$ip_start/$mask";
}

trevor-hemsley at nospam dot dial dot pipex dot com
16-Oct-2002 06:53

Previous example of IP range to CIDR list does not cope with ranges as well as the perl Net::Netmask range2cidrlist() function. In PHP this looks like

<?
function imask($this)
{
// use base_convert not dechex because dechex is broken and returns 0x80000000 instead of 0xffffffff
return base_convert((pow(2,32) - pow(2, (32-$this)))), 10, 16);
}

function imaxblock($ibase, $tbit)
{
while ($tbit > 0)
{
$im = hexdec(imask($tbit-1));
$imand = $ibase & $im;
if ($imand != $ibase)
{
break;
}
$tbit--;
}
return $tbit;
}

function range2cidrlist($istart, $iend)
{
// this function returns an array of cidr lists that map the range given
$s = explode(".", $istart);
// PHP ip2long does not handle leading zeros on IP addresses! 172.016 comes back as 172.14, seems to be treated as octal!
$start = "";
$dot = "";
while (list($key,$val) = each($s))
{
$start = sprintf("%s%s%d",$start,$dot,$val);
$dot = ".";
}
$end = "";
$dot = "";
$e = explode(".",$iend);
while (list($key,$val) = each($e))
{
$end = sprintf("%s%s%d",$end,$dot,$val);
$dot = ".";
}
$start = ip2long($start);
$end = ip2long($end);
$result = array();
while ($end > $start)
{
$maxsize = imaxblock($start,32);
$x = log($end - $start + 1)/log(2);
$maxdiff = floor(32 - floor($x));
$ip = long2ip($start);
if ($maxsize < $maxdiff)
{
$maxsize = $maxdiff;
}
array_push($result,"$ip/$maxsize");
$start += pow(2, (32-$maxsize));
}
return $result;
}
?>

03-Apr-2003 04:11
Alternative cidr_conv function - a little easier to follow

function cidr_conv($cidr_address) {
 $first = substr($cidr_address, 0, strpos($cidr_address, "/"));
 $netmask = substr(strstr($cidr_address, "/"), 1);

 $first_bin = str_pad(decbin(ip2long($first)), 32, "0", STR_PAD_LEFT);
$netmask_bin = str_pad(str_repeat("1", (integer)$netmask), 32, "0", STR_PAD_RIGHT);
 
 for ($i = 0; $i < 32; $i++) {
   if ($netmask_bin[$i] == "1")
     $last_bin .= $first_bin[$i];
   else
     $last_bin .= "1";
}

 $last = long2ip(bindec($last_bin));

 return "$first - $last";
}

add a note add a note

<muscat_setupcheckdnsrr>
 Last updated: Wed, 29 Jan 2003
show source | credits | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: /
Last updated: Fri May 23 21:10:19 2003 CEST