在PHP中解析IP地址和范围

时间:2015-05-06 07:57:25

标签: php parsing ip

我正在编写一个脚本,从whois.iana.org和区域whois返回一个IP的国家/地区。 没问题。

为了最大程度地减少查询,我希望能够从whois服务器存储ip范围,并将该范围的返回国家/地区存储在数据库中,以防万一来自同一个类的另一个ip地址我可以先在数据库中搜索,而不是向whois服务器发送请求。

这是我到目前为止所做的:

    $ip = @$_GET['ip']."\r\n";
echo whois_get($ip);

//Open connection to whois server and fetch data
function whois_query($ip, $server) {
    $fp = @fsockopen($server, 43, $errno, $errdesc);

if ($fp === false) {
    error_report('Error opening the socket: ' . $errno . ' - ' . $errdesc . "\n");
    return false;
}

if (fputs($fp, $ip) === false) {
    error_report('Error writing to the socket' . "\n");
    return false;
}
$answer = '';
while (!feof($fp)) {
    $answer .= fread($fp, 8192);
}
fclose($fp);
return $answer;

};
function whois_get($ip) {
    $string = whois_query($ip, 'whois.iana.org');
    preg_match('/whois\..+/', $string, $whoisServer);
    if (array_key_exists('0', $whoisServer)) {
        if ($whoisServer[0] == "whois.arin.net") {
             $ip = "n ".$ip; 
        }
        $whoisInfo = whois_query($ip, $whoisServer[0]);
        $country = getCountry($whoisInfo);
        return "<b>Country:</b>".$country." \r\n";

    } else {
    return "UNKNOWN";
}
}

function getCountry($data){
    preg_match('/ountry\:\s*[A-Z]{2}/', $data, $country);
    $whoisCountry = $country[0];
    $whoisCountry = preg_replace('/ountry\:/', '', $whoisCountry);
    $whoisCountry = preg_replace('/\s+/', '', $whoisCountry);
    return $whoisCountry;
}

任何人都可以告诉我如何为ipv4和ipv6地址执行此操作?我知道你不能在这里使用正则表达式。

如何解析从whois服务器返回的数据?

如何在本地数据库中搜索以确定IP属于哪个范围?

0 个答案:

没有答案