Appearance
怎么查网站服务器的 IP 归属地?站长自查指南(附 PHP 批量工具)
想查一个网站的服务器在哪,核心就两步:把域名解析成 IP,再查这个 IP 的归属地。真动手会发现一个域名可能解析出好几个 IP,有的显示"阿里云"有的显示"美国"——哪个才是真身?这篇讲清楚原理,再给一个 PHP 工具,域名丢进去,IP、省市、运营商一次列全。
一、先搞懂:域名、IP、归属地三者的关系
浏览器访问网站,第一步是 DNS 解析——把 www.example.com 换成服务器的 IP。所以"查网站服务器 IP"本质上就是一次 DNS 查询,拿到 IP 再查归属地。这里有个关键认知:
一个域名可能对应多个 IP。 套了 CDN 的网站,DNS 返回的是边缘节点 IP,不同地区解析结果可能不一样;没套 CDN 但做了多线接入的服务器也会返回多个 IP。所以多 IP 本身就是信息——大概率套了 CDN 或做了多线接入。
归属地返回的"省市 + 运营商"直接告诉你服务器在哪个机房:显示"浙江杭州 阿里云",就是托管在阿里云杭州机房;显示"美国 加利福尼亚",服务器就在海外。国内服务器还要备案,查出来在海外的大多就是没备案的站。
二、PHP 实现:域名列表换 IP 归属地表
选 PHP 是因为站长手里最容易有的环境就是它——虚拟主机、宝塔面板都自带,命令行能跑,丢到网站目录也能当网页工具用。核心就两个内置能力:dns_get_record() 做解析,file_get_contents() 调归属地接口。
php
<?php
// geo.php —— 批量查网站服务器 IP 归属地;用法: php geo.php <域名1> [域名2 ...]
function query_ipgeo(string $ip): ?array {
$url = 'https://ip9.com.cn/get?ip=' . rawurlencode($ip);
$ctx = stream_context_create(['http' => ['timeout' => 5]]);
$body = @file_get_contents($url, false, $ctx);
if ($body === false) return null; // 网络异常
$json = json_decode($body, true);
if (($json['ret'] ?? 0) !== 200) return null; // 非法 IP 或限速
return $json['data'] ?? [];
}
function lookup_domain(string $domain): void {
$records = @dns_get_record($domain, DNS_A); // IPv4 A 记录;IPv6 用 DNS_AAAA
if (!$records) {
echo "[$domain] 解析失败(域名不存在或没有 A 记录)\n";
return;
}
echo "== $domain\n";
foreach ($records as $r) {
$ip = $r['ip'];
$geo = query_ipgeo($ip);
if (!$geo) {
echo " $ip 查询失败(限速或网络问题)\n";
continue;
}
$loc = ($geo['country'] ?? '') . ($geo['prov'] ?? '') . ($geo['city'] ?? '');
printf(" %-16s %-10s %-14s %s\n",
$ip, $loc, $geo['isp'] ?? '', $geo['ip_type'] ?? '');
// ip_type 为 VIP 版字段:ISP=家庭宽带 BUS=企业宽带 IDC=机房
}
}
if ($argc < 2) {
echo "用法: php geo.php <域名1> [域名2 ...]\n";
exit(1);
}
for ($i = 1; $i < $argc; $i++) {
lookup_domain($argv[$i]);
usleep(300000); // 限速防超免费额度(60次/分钟/IP)
}把上面代码存成 geo.php,终端执行 php geo.php www.ip9.com.cn,会输出每个 IP 对应的省市、运营商和 IP 类型,一行一个。查 IPv6 就把 DNS_A 换成 DNS_AAAA,接口支持 IPv6 直接传。
三、结果怎么读:CDN、多线、机房一眼看穿
拿到表格后,按下面几条判断:
- 多个 IP、归属地跨省、运营商是云厂商:几乎可断定套了 CDN——多个 IP 跨省且 isp 是云服务商,就是边缘节点,不是源站。
- 单个 IP 且 isp 是电信/联通/移动:源站直连,就在归属地那个城市。
- country 不是中国:服务器在海外。顺手在 beian.miit.gov.cn 查下备案,没备案 + 海外 IP 是常见组合。
- ip_type 显示 IDC:确认是机房 IP。
ip_type、ip_asn是 VIP 版字段;免费版的省市、运营商判断"国内/海外"已经够用。
看 CDN 时别钻牛角尖:查到边缘节点后不必执着"挖源站",你看到的就是访客实际访问的节点,判断"站在哪、快不快"已经足够,挖源站属于攻击前置动作。
四、落地注意事项
- DNS 有缓存和多线路:本地 DNS 不同解析结果可能不一样,换 114.114.114.114 这类公共 DNS 再对比。
- 批量要限速:免费接口 60 次/分钟/IP,代码里已加 0.3 秒间隔,几十个域名没问题,量大就分批。
- 失败要容错:查询失败只打印提示不中断,别让一个域名挂掉后面全停。
- 用途要正当:查自己/友链/联盟站点、识别钓鱼站服务器位置都没问题,拿去搞攻击就是另一回事。
总结
查网站服务器 IP 归属地是站长最常用的排查动作:确认机房、判断 CDN、识别海外服务器,一个 PHP 脚本全搞定。解析用 dns_get_record,归属地用 https://ip9.com.cn/get?ip=xxx——免费版返回国家、省市、运营商,够日常用;要机房类型(IDC/ISP/BUS)再看 VIP 版的 ip_type 字段,说明见官网 https://www.ip9.com.cn。工具在手,再有人问"这网站服务器在哪",三秒给答案。