getDistrict($ip); // 获取IPIP.net数据 $data = IPinfo::getInfo($ip); // 获取ipinfo.io数据 $country = getCountry($data['country']); // 解析国家2位编码 $qqwry = new QQWry('qqwry.dat'); $detail = $qqwry->getDetail($ip); // 获取纯真IP数据 $info['ip'] = $data['ip']; $info['as'] = $data['as']; $info['city'] = $data['city']; $info['region'] = $data['region']; $info['country'] = $data['country'] . ' - ' . $country['en']; $info['country'] .= "(" . $country['cn'] . ")"; $info['timezone'] = $data['timezone']; $info['loc'] = $data['loc']; $info['isp'] = $data['isp']; if ($addr[0] == '中国' || $detail['country'] == '中国') { $info['country'] = 'CN - China(中国)'; $info['timezone'] = 'Asia/Shanghai'; $flagErr = false; if ($addr[1] == '' || $addr[2] == '') { if ($detail['region'] != '' && $detail['city'] != '') { $addr[1] = $detail['region']; // 修正IPIP.net数据 $addr[2] = $detail['city']; } else { $flagErr = true; // 国内数据不全 } } if (!$flagErr) { // 国内数据可用 $cityLoc = getLoc($addr[1], $addr[2]); // 获取城市经纬度 $info['region'] = $cityLoc['region']; $info['city'] = $cityLoc['city']; $info['loc'] = $cityLoc['lat'] . ',' . $cityLoc['lon']; } } } if (filter_var($ip, \FILTER_VALIDATE_IP,\FILTER_FLAG_IPV4)) { // 录入纯真库数据 $info['scope'] = tryCIDR($detail['beginIP'], $detail['endIP']); $info['detail'] = $detail['dataA'] . $detail['dataB']; } else { $info['scope'] = $info['ip']; $info['detail'] = $info['as'] . ' ' . $info['isp']; } if ($_GET['cli'] == "true") { // 使用命令行模式 $cli = "IP: ".$info['ip'] . PHP_EOL; $cli .= "AS: ".$info['as'] . PHP_EOL; $cli .= "City: ".$info['city'] . PHP_EOL; $cli .= "Region: ".$info['region'] . PHP_EOL; $cli .= "Country: ".$info['country'] . PHP_EOL; $cli .= "Timezone: ".$info['timezone'] . PHP_EOL; $cli .= "Location: ".$info['loc'] . PHP_EOL; $cli .= "ISP: ".$info['isp'] . PHP_EOL; $cli .= "Scope: ".$info['scope'] . PHP_EOL; $cli .= "Detail: ".$info['detail'] . PHP_EOL; return $cli; } $info['status'] = 'T'; header('Content-Type: application/json; charset=utf-8'); // 以JSON格式发送 return json_encode($info); } function checkSpecial($ip) { // 检查特殊IP地址并返回说明 if ('::1' === $ip) { return 'localhost IPv6 access'; } if (stripos($ip, 'fe80:') === 0) { return 'link-local IPv6 access'; } if (strpos($ip, '127.') === 0) { return 'localhost IPv4 access'; } if (strpos($ip, '10.') === 0) { return 'private IPv4 access'; } if (preg_match('/^172\.(1[6-9]|2\d|3[01])\./', $ip) === 1) { return 'private IPv4 access'; } if (strpos($ip, '192.168.') === 0) { return 'private IPv4 access'; } if (strpos($ip, '169.254.') === 0) { return 'link-local IPv4 access'; } return null; } function tryCIDR($beginIP, $endIP) { // 给定IP范围,尝试计算CIDR $tmp = ip2long($endIP) - ip2long($beginIP) + 1; if (pow(2, intval(log($tmp, 2))) == $tmp) { // 判断是否为2的整数次方 return $beginIP . '/' . (32 - log($tmp, 2)); } else { return $beginIP . ' - ' . $endIP; } } function main() { $ip = $_GET['ip']; if (!filter_var($ip, \FILTER_VALIDATE_IP)) { // 输入IP不合法 if ($_GET['cli'] == "true") { echo "Illegal IP format" . PHP_EOL; } else { header('Content-Type: application/json; charset=utf-8'); $reply = array(); $reply['status'] = 'F'; $reply['message'] = 'Illegal IP format'; echo json_encode($reply); } exit; } echo getIPInfo($ip); } main();