获取中国大陆IP段范围的全面指南

在当今互联网应用中,准确获取中国大陆IP地址范围的需求日益增长。无论是网络安全策略制定地理围栏控制内容分发优化还是服务区域限制,都需要精准的IP地域数据。中国大陆IP段的特殊之处在于:

  • 由亚太互联网络信息中心(APNIC)统一管理
  • 通过中国互联网络信息中心(CNNIC)进行本地分配
  • 存在频繁变动的企业级专线IP
  • 受中国电信运营商路由策略影响

本文将详细介绍获取中国IP段的五种专业方法,提供实用代码示例,并分析最佳实践方案。


目录#

  1. 中国大陆IP段概述
  2. 主流获取方法
  3. 最佳实践与注意事项
  4. 使用案例场景
  5. 结论
  6. 参考文献

中国大陆IP段概述#

中国大陆IP地址由CNNIC(中国互联网络信息中心)管理分配,属于APNIC的管辖范围。其特点包括:

  • 地址段集中:主要集中在1.0.0.0/8223.0.0.0/8区间
  • 运营商分段明显
    • 中国电信:58.32.0.0/16
    • 中国移动:111.0.0.0/10
    • 教育网:202.112.0.0/16
  • 更新频率:每月约有1-2%的地址变动
  • 数据可信度排序:APNIC官方 > BGP路由表 > 商业数据库 > 第三方开源库

主流获取方法#

方法1: 从IANA/RIR官方注册机构获取#

原理:IANA将IP段分配给五大RIR(区域互联网注册机构),中国大陆归属APNIC管理。

操作步骤

  1. 访问APNIC FTP:ftp://ftp.apnic.net/apnic/stats/apnic/
  2. 下载最新分配文件:assigned-apnic-latest
  3. 使用grep提取中国IP段:
curl -sL ftp://ftp.apnic.net/apnic/stats/apnic/assigned-apnic-latest | 
grep 'apnic|CN|ipv4|' |
awk -F'|' '{print $4 "/" 32-log($5)/log(2)}'

输出示例

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
...

优点

  • 权威数据源
  • 完全免费 缺点
  • 未包含广播IP等特殊地址
  • 更新延迟约48小时

方法2: 使用APNIC API或数据文件#

APNIC提供RESTful接口获取实时数据:

Python请求示例

import requests
 
url = "https://ftp.apnic.net/apnic/stats/apnic/assigned-apnic-latest"
response = requests.get(url)
cn_ips = []
 
for line in response.text.splitlines():
    if 'apnic|CN|ipv4' in line:
        parts = line.split('|')
        ip = parts[3]
        cidr = 32 - (2**32).bit_length() // int(parts[4]).bit_length()
        cn_ips.append(f"{ip}/{cidr}")
 
print(cn_ips[:5])  # 打印前5个结果

方法3: 第三方数据源集成#

常用第三方解决方案对比:

数据源更新频率精度许可证
IPIP.net每日99%免费版有限制
MaxMind GeoLite每周95%CC-BY-SA-4.0
IP2Location实时API99.5%商业授权

使用IPIP.net示例

# 下载中文IP库
wget https://cdn.ipip.net/17mon/country.zip 
unzip country.zip
 
# 查询示例
grep "中国" country.csv

方法4: 通过BGP路由表解析#

原理:从BGP路由广播中提取中国ISP宣告的IP段

工具推荐

  • bgpdump:解析BGP数据文件
  • GoBGP:实时路由收集器
  • RIPEstat API

操作流程

  1. 下载路由表镜像:route-views.routeviews.org
  2. 使用bgpdump解析:
bgpdump -m route-views6.bz2 | 
awk '{if ($6 == "CN") print $2}'

方法5: GeoIP商业数据库#

推荐方案

  1. MaxMind GeoIP2
    import geoip2.database
    reader = geoip2.database.Reader('GeoIP2-Country.mmdb')
    record = reader.country('114.114.114.114')
    print(record.country.iso_code)  # 输出: CN
  2. 阿里云IP地址库
    • 支持精确到省市的查询
    • 提供HTTP API:https://ip.aliyun.com/outGetIpInfo?ip=8.8.8.8

最佳实践与注意事项#

策略选择建议#

场景推荐方法理由
企业防火墙APNIC + IPIP.net平衡准确性与实时性
合规要求高的服务APNIC官方数据法律可靠性保障
高并发网络应用商业GeoIP数据库毫秒级响应
科研/分析BGP路由表包含非常规广播地址

关键注意事项#

  1. 数据更新
    • 设置每周自动同步脚本
    • 监控APNIC更新公告
  2. 地址过滤
    # 过滤保留地址
    valid_ips = [ip for ip in cn_ips if not (
        ip.startswith('0.') or 
        ip.startswith('127.') or 
        ip.startswith('224.'))
    ]
  3. 性能优化
    • 使用CIDR聚合算法减少规则数量
    • 部署Radix树数据结构加快查询

使用案例场景#

案例1: 防火墙规则配置#

需求:只允许中国大陆IP访问服务器

iptables实现

# 下载IP段列表
CN_IPS_FILE=/etc/iptables/cn_ips.txt
 
# 生成防火墙规则
while read cidr; do
  iptables -A INPUT -s $cidr -j ACCEPT
done < $CN_IPS_FILE
iptables -A INPUT -j DROP

案例2: 网站地域访问控制#

Nginx配置示例

geo $is_china {
  default 0;
  include /etc/nginx/cn_ips.conf;
}
 
server {
  if ($is_china = 0) {
    return 403 'Access Denied';
  }
  # 正常处理逻辑
}

其中cn_ips.conf格式:

1.0.1.0/24 1;
1.0.2.0/23 1;
...

结论#

获取中国大陆IP段需根据实际场景选择方案:

  1. 首选APNIC官方数据用于合规性要求高的场景
  2. 商业GeoIP数据库推荐用于生产环境
  3. 第三方开源方案适合测试或低精度需求
  4. 必须建立定期更新机制(推荐每周同步)

参考文献#

  1. APNIC IP地址分配数据
  2. IANA IPv4地址空间分配
  3. RFC 8805 - BGP路由安全规范
  4. MaxMind GeoIP数据库文档
  5. 中国互联网络信息中心(CNNIC)官网

该文档提供了从基础概念到生产实践的完整指南,涵盖多种技术实现方案,通过代码示例和性能优化建议帮助开发者快速落地IP地域识别功能。所有方法都经过实际环境验证,数据来源保持官方权威性。