网络 函数
目录
- checkdnsrr — 给指定的主机(域名)或者IP地址做DNS通信检查
- closelog — 关闭系统日志链接
- dns_check_record — 别名 checkdnsrr
- dns_get_mx — 别名 getmxrr
- dns_get_record — 获取指定主机名的 DNS 纪录
- fsockopen — 打开 Internet 或者 Unix 套接字连接
- gethostbyaddr — 获取指定 IP 地址对应的 Internet 主机名
- gethostbyname — 返回主机名对应的 IPv4地址。
- gethostbynamel — 获取互联网主机名对应的 IPv4 地址列表
- gethostname — 获取主机名
- getmxrr — 获取 Internet 主机名对应的 MX 记录
- getprotobyname — Get protocol number associated with protocol name
- getprotobynumber — Get protocol name associated with protocol number
- getservbyname — 获取互联网服务协议对应的端口
- getservbyport — Get Internet service which corresponds to port and protocol
- header — 发送原生 HTTP 头
- header_register_callback — 调用一个 header 函数
- header_remove — 删除之前设置的 HTTP 头
- headers_list — 返回已发送的 HTTP 响应头(或准备发送的)
- headers_sent — 检测消息头是否已经发送
- http_clear_last_response_headers — Clears the stored HTTP response headers
- http_get_last_response_headers — Retrieve last HTTP response headers
- http_response_code — 获取/设置响应的 HTTP 状态码
- inet_ntop — Converts a packed internet address to a human readable representation
- inet_pton — Converts a human readable IP address to its packed in_addr representation
- ip2long — 将 IPV4 的字符串互联网协议转换成长整型数字
- long2ip — 将长整型转化为字符串形式带点的互联网标准格式地址(IPV4)
- net_get_interfaces — 获取网络接口
- openlog — Open connection to system logger
- pfsockopen — 打开持久的 Internet 或 Unix 套接字连接
- request_parse_body — Read and parse the request body and return the result
- setcookie — 发送 Cookie
- setrawcookie — 发送未经 URL 编码的 cookie
- socket_get_status — 别名 stream_get_meta_data
- socket_set_blocking — 别名 stream_set_blocking
- socket_set_timeout — 别名 stream_set_timeout
- syslog — Generate a system log message
+添加备注
用户贡献的备注 5 notes
claudiu at cnixs dot com ¶
17 years ago
A simple and very fast function to check against CIDR.
Your previous examples are too complicated and involves a lot of functions call.
Here it is (only with arithmetic operators and call only to ip2long () and split() ):
<?php
function ipCIDRCheck ($IP, $CIDR) {
list ($net, $mask) = split ("/", $CIDR);
$ip_net = ip2long ($net);
$ip_mask = ~((1 << (32 - $mask)) - 1);
$ip_ip = ip2long ($IP);
$ip_ip_net = $ip_ip & $ip_mask;
return ($ip_ip_net == $ip_net);
}
?>
call example: <?php echo ipCheck ("192.168.1.23", "192.168.1.0/24"); ?>
Anton Avramov - lukav at lukav dot com ¶
7 years ago
An improved version of claudiu at cnixs dot com not using split and working with the following:
ip: 192.168.101.123, CIRD: 192.168.101.144/24
<?php
function ipCIDRCheck ($IP, $CIDR) {
list ($net, $mask) = explode ('/', $CIDR);
$ip_net = ip2long ($net);
$ip_mask = ~((1 << (32 - $mask)) - 1);
$ip_ip = ip2long ($IP);
return (($ip_ip & $ip_mask) == ($ip_net & $ip_mask));
}
?>
Anonymous ¶
8 years ago
improved version of philippe-at-cyberabuse.org's answer:
<?php
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 = (1 << (32 - substr(strstr($net, "/"), 1))) - 1;
$bits2 = str_pad(decbin($net), 32, "0", STR_PAD_LEFT);
$final = "";
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 array($start, long2ip(bindec($final)));
}
?>
David GASTALDIN ¶
17 years ago
Here a IP-Range to CIDRs function that I wrote for the purpose of filling my Postfix client.cidr with ripe-ncc data to block spamming from useless countries. Strcmp functions are meant to work around the silly PHP string comparison which inevitably tries compare strings as numbers when possible. I'll make no comment about that fact ... bit I have to bite my tong hard :
function PlageVersCIDRs($ip_min, $ip_max) {
$cidrs = array();
$ip_min_bin = sprintf('%032b', $ip_min);
$ip_max_bin = sprintf('%032b', $ip_max);
$ip_cour_bin = $ip_min_bin;
while (strcmp($ip_cour_bin, $ip_max_bin) <= 0) {
$lng_reseau = 32;
$ip_reseau_bin = $ip_cour_bin;
while (($ip_cour_bin[$lng_reseau - 1] == '0') && (strcmp(substr_replace($ip_reseau_bin, '1', $lng_reseau - 1, 1), $ip_max_bin) <= 0)) {
$ip_reseau_bin[$lng_reseau - 1] = '1';
$lng_reseau--;
}
$cidrs[] = long2ip(bindec($ip_cour_bin)).'/'.$lng_reseau;
$ip_cour_bin = sprintf('%032b', bindec($ip_reseau_bin) + 1);
}
return $cidrs;
}
philippe-at-cyberabuse.org ¶
23 years ago
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));
}