加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用PHP实现标准的IP?Whois查询

发布时间:2020-12-13 14:11:12 所属栏目:PHP教程 来源:网络整理
导读:????? 由于Internet的历史原因,apin负责整个网络IP的整体规划以及北美区 还有部分非洲地区的IP分配管理,与此相应的是,whois.apin.net是IP whois的root server,标准的IP whois查询方法是,首先向whois.apin.net查询某个IP属于哪个大区,然后再向该区的who

????? 由于Internet的历史原因,apin负责整个网络IP的整体规划以及北美区 还有部分非洲地区的IP分配管理,与此相应的是,whois.apin.net是IP whois的root server,标准的IP whois查询方法是,首先向whois.apin.net查询某个IP属于哪个大区,然后再向该区的whois 服务器查询此IP的whois详细信息。

????? 目前负责 IPV4的大区
????? whois.arin.net 美洲区 北美
????? whois.apnic.net 亚太区 包括亚洲和澳大利亚
????? whois.ripe.net 欧洲区 欧洲/中东(西亚)/北非
????? whois.lacnic.net 拉美区 拉丁美洲和加勒比海区域
????? 非洲网络的IP查询也在whois.arin.net
????? 向某个whois服务器提交whois查询的过程

?? 打开一个到whois服务器的43端口的连接,然后发送要查询的域名 和一个回车换行。如果要查询多个域名,请用空格分开然后从sokect中读取结果。最后服务器将自动断开连接。

用PHP实现
1.验证IP(用 ip2long代替 ereg)
2.向 whois.arin.net查询,如果数据库中没有相关信息,会给出一个Referral Server的URL,格式如下
??? ReferralServer:
然后根据此信息,继续查询

代码如下

whoisip.php

include_once "lang.inc.php";

$IP = isset($_GET['ip'])?$_GET['ip']:'blank';
if (-1 === ip2long($ip))
? die(str_replace('%IP%',$IP,$Text['ip_invalid']));

echo GetWhois($IP);

function GetWhois($IP)
{
? global $Text;
? $rootwhois = 'whois.arin.net';
? $buffer? = str_replace('%SERVER%',$rootwhois,$Text['sock_connect']);
? $buffer1 = ReadSocket($rootwhois,$IP);
? if ($buffer1 !== '')
? {
??? $whois = SubStrByTag("ReferralServer: whois://"," ",$buffer1);
??? //remove port number? ":43";
??? if ( ($pos=strpos($whois,":")) !== FALSE)??
??? {
????? $whois = substr($whois,$pos);
??? }??
??? if ($whois !== '')
??? {
????? $buffer .= str_replace('%SERVER%',$whois,$Text['sock_connect']);
????? $buffer .= ReadSocket($whois,$IP);
??? }
??? else
??? {
????? $buffer .= $buffer1;
??? }
? }
? return nl2br($buffer);
}

function SubStrByTag($firstTag,$secondTag,&$longStr)
{
? $firstPos = strpos ($longStr,$firstTag);
? $ret = '';
? if ($firstPos !== FALSE)??
? {
??? $secondPos = strpos ($longStr,$firstPos);
??? if ($secondPos !== FALSE)??
??? {
????? $firstPos += strlen($firstTag);
????? $ret = substr($longStr,$firstPos,$secondPos-$firstPos);
??? }
? }
? return $ret;
}

function ReadSocket($whois,$ip)
{
? global $Text;
? $buffer = '';
? if (!$sock = fsockopen( $whois,43,$errNum,$errStr,20))
? {
??? $buffer = str_replace('%SERVER%',$Text['sock_fail']);
? }
? else
? {
??? fputs($sock,"$ip ");???
??? //$buffer = fread($sock,8192);
??? while(!feof($sock))??????? $buffer.=fgets($sock,8192);
??? fclose($sock);???
? }
? return $buffer;
}

?>

语言文件:
lang.inc.php

$Text = Array(
'ip_invalid'=>'I want to get a valid IP,but it is [%IP%].',
'sock_connect'=>'Ask %SERVER% ...
',
'sock_fail'=>'Cannot connect to the host:%SERVER%'
);

?>

其他有名的whois服务器

1.Tucows (whois.opensrs.net) 一次只能一个连接
?? dnsstuff就是查询的它

2.BulkRegister (whois.bulkregiter.net) 小心它临时封IP,如果大量连接的话

3.Network Solutions (whois.networksolutions.com) 一天只能查1000次

4.Go Daddy (whois.godaddy.com)

5.whois.abuse.net

原文:http://www.im286.com/thread-1947087-1-1.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读