今天要对几万个 IP 地址获取 ANS,运营商,所属国家,网上有很多在线工具,但几万个 IP 不可能手动去查,我们知道可以通过 whois 去查看指定的 IP 地址详细信息,所以用 PHP 的 exec() 直接执行命令是否就可以,但遇到的问题是 ,IP 地址不同里面的 KEY 名称也可能不同,使用这个命令还稍微准确一点:whois x.x.x.x | egrep -i --color '(as)?origin|netname|org ,但是还是不方便获取我想要的,经查通过 whois 访问 whois.cymru.com 这个网站,能完美拿到简单统一结构的数据,代码如下:
<?php
/**
* Created by PhpStorm.
* User: songyumin
* Date: 2020/10/30
* Time: 16:30
*/
$str = file_get_contents("test.txt");//将整个文件内容读入到一个字符串中
$str_encoding = mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');//转换字符集(编码)
$arr = explode(",", $str_encoding);//转换成数组
foreach ($arr as $val) {
$query = 'whois -h whois.cymru.com " -f ' . trim($val) . '"';
$whoisResult = shell_exec($query);
$asnArray = explode('|', $whoisResult);
$cleanAsn = array_map('trim', $asnArray);
echo $cleanAsn[1].",".$cleanAsn[0].",".$cleanAsn[2].PHP_EOL;
}