Skip to content

怎么判断 IP 是不是 CN2 线路?IP 归属地查 ISP + traceroute 两步验证 ​

买 VPS 的时候商家列表里写着「CN2 GIA 精品线路」,到手一测,晚高峰延迟 250ms 起步,还时不时掉包。这种落差太常见了——「伪 CN2」在国内服务器市场几乎是明着卖的套路:把普通 163 骨干的机器包装成精品线路,多收一倍的钱,不明就里的人根本分不出来。怎么拆穿它?

判断线路这事,核心套路就两步:先查 IP 归属地和 ISP,确认运营商身份;再 traceroute 看路由节点,验证到底走没走 CN2。第一步用归属地接口几秒钟搞定,第二步看关键节点段。这篇文章用 Shell 把两步串成一个脚本,买机器之前先跑一遍,心里就有底了。

一、CN2 到底是什么,为什么能查出来 ​

CN2(ChinaNet Next Carrying Network)是中国电信的下一代承载网,跟普通上网用的 163 骨干网(ChinaNet)是两套物理网络。对国内用户访问海外服务器来说,线路数据走哪张网,直接决定延迟和丢包:

  • 163 骨干(普通线路):高峰期国际出口挤,延迟高、抖动大,节点段常见的 IP 是 202.97.x.x;
  • CN2 线路:有独立的骨干节点,典型特征是一路能看到 59.43.x.x 的节点,延迟低、稳定;
  • CN2 内部还分 GT 和 GIA:GT 只在国际出口段走 CN2,国内段还是 163;GIA 全程走 CN2,是国内访问海外服务器体验最好的那一档。

所以判断方法很朴素:traceroute 一路看下去,出现 59.43.x.x 就是 CN2 的特征,全程都是 202.97.x.x 就是普通 163 骨干。这个判断法在 VPS 圈用了十几年,靠的是两张网的节点 IP 段长得不一样,很好识别。

但先别急着看路由——第一步得确认这台机器到底是什么运营商、在哪个国家。因为你 traceroute 的第一跳、第二跳往往是你自己家宽带的节点,不是服务器那头的;而且有些 VPS 商把机器挂在不同机房,查清楚归属地(比如说是香港,结果路由绕到美国)本身就是一条重要线索。

二、方案设计 ​

  1. 查归属地和 ISP:curl 调 https://ip9.com.cn/get?ip=<服务器IP>,拿到国家、运营商字段——先确认机器真实位置和运营商(电信/联通/移动/其他),排除「标香港实际在美西」这种货不对板;
  2. 路由追踪:traceroute -n -T -p 443 用 TCP 走 443 端口测(比默认 ICMP 更接近真实访问路径,也更容易穿过防火墙),一路记下节点 IP;
  3. 人工判读关键节点:脚本把每一跳打出来,你按 59.43 / 202.97 的出现情况下结论。

为什么只需要归属地接口 + traceroute?因为「CN2」这个标签本质上不是归属地接口能直接返回的字段——归属地接口给你的是运营商和 ASN 信息(比如中国电信、AS4809),它证明「这台机器属于电信网络」,但证明不了「你走的这条路由是 CN2」。所以正确姿势是接口定位身份 + 路由验证路径,两步缺一不可。

三、Shell 实现 ​

依赖:Debian/Ubuntu 需先装 apt install traceroute,CentOS 用 yum install traceroute;只有 mtr 的话把第 2 步的 traceroute 换成 mtr -zn -T -P 443 -m 15 效果一样。

bash
#!/bin/bash
# check_cn2.sh —— 判断服务器是否 CN2 线路(归属地 + 路由两步验证)
# 用法:./check_cn2.sh <服务器IP>

SERVER_IP="$1"
if [ -z "$SERVER_IP" ]; then
    echo "用法: $0 <服务器IP>"
    exit 1
fi

echo "== 第 1 步:IP 归属地 / ISP(确认机器真实位置与运营商) =="
curl -s --max-time 10 "https://ip9.com.cn/get?ip=$SERVER_IP" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); \
print('国家:', d['data']['country'], '| 省份:', d['data']['prov'], '| 城市:', d['data']['city'], '| 运营商:', d['data']['isp'] or '未知')"
echo

echo "== 第 2 步:TCP 443 路由追踪(看是否经过 CN2 节点) =="
traceroute -n -T -p 443 -m 15 "$SERVER_IP"
echo

echo "== 判读提示 =="
echo "一路频繁出现 59.43.x.x 节点      -> 走 CN2(GIA/全程 CN2 的典型特征)"
echo "出国段 59.43、国内段 202.97      -> CN2 GT 或半程 CN2,稳定性一般"
echo "全程 202.97.x.x 直到目标机房     -> 普通 163 骨干,商家说 CN2 就是夸大"
echo "路由绕道(如定位香港却经美国)   -> 线路货不对板,建议直接退款"

跑完的输出大概是这样的:

== 第 1 步:IP 归属地 / ISP ==
国家: 中国香港 | 运营商: 中国电信

== 第 2 步:TCP 443 路由追踪 ==
 1  192.168.1.1 ...
 5  202.97.x.x ...
 8  59.43.x.x ...
10  59.43.x.x ...
12  103.xxx.xxx.xxx ...

第 8、10 跳连续出现 59.43,基本可以断定这是 CN2 线路,配合延迟一测(稳定在 50ms 内),商家这次没吹牛。

脚本里的三个细节值得说:

  • curl 加了 --max-time 10:接口偶尔慢,别让脚本卡死;
  • 用 Python 只做 JSON 解析:curl 返回的 JSON 在纯 Shell 里解析太痛苦,这一步交给 Python 只是一行工具调用,主体逻辑还是 Shell,符合运维习惯;
  • TCP 443 而不是 ICMP:很多机房 ICMP 限速或屏蔽,TCP 追踪更接近你业务实际的路径。

四、落地注意事项 ​

  • GT 和 GIA 要分开看:59.43 出现 ≠ 全程 GIA。看「国内段」是否也有 59.43——国内段(你家宽带那一侧)能看到 CN2 节点,才是全程 GIA;只有出国段有,那是 GT,晚高峰照样可能卡;
  • 回程比去程重要:对国内访问海外服务器来说,回程(服务器 → 你)的线路质量才是实际体验的关键。本文脚本测的是去程,回程可以再用 besttrace 或在线回程测试工具看一遍,两边都过 59.43 才是真 GIA;
  • 多测几次,避开晚高峰:线路质量在 20:00-23:00 的晚高峰才见真章,白天测 20ms、晚上变 250ms 的机器,多半是普通线路在硬撑;
  • 归属地对不上就是大问题:如果机器 IP 查出来在某个国家,路由却绕了半个地球,说明机房货不对板,赶紧截图找商家理论;
  • 频率别打满:归属地接口免费版 60 次/分钟,测自己的几台机器绰绰有余,别写脚本去扫整个 IP 段就行。

总结 ​

「怎么判断 IP 是不是 CN2」没有银弹,但两步法足够可靠:先用 https://ip9.com.cn/get?ip=<服务器IP> 查归属地和 ISP,确认机器真实位置与运营商;再 traceroute 看节点,59.43 频繁出现是 CN2 特征、全程 202.97 是普通 163 骨干。要再精确一点的,IP9 VIP 版还提供 ip_asn 字段,能直接看到机器所在的自治域是不是中国电信 AS4809(CN2 归属的自治域),配合路由验证,判断基本就坐实了。买机器前跑一遍这个脚本,能省下不少冤枉钱和折腾时间。