
1.
明确目标:保持“香港原生 IP 什么开头”的信息准确,意味着持续维护一份可靠的 IP 前缀列表(CIDR)并能回答“常见以哪几位开头”。准备工作包括:获得服务器/容器用于脚本运行、安装命令行工具(curl、jq、awk、ipcalc/sipcalc、whois)、Python 环境与依赖(ipaddress、requests、pyasn 可选)。
权限与合规:确认你有权保存并处理这些数据(商业库许可、隐私合规)。
2.
首选权威:APNIC 委派文件(ftp.apnic.net/stats/apnic/delegated-apnic-latest)是分配给香港(hk)地址块的权威起点。其次采集 BGP 路由表(RouteViews、RIPE RIS)、ISP WHOIS、RPKI ROA、商业 GeoIP(MaxMind/Ip2Location)作为校验。
优先级示例:APNIC(分配) > BGP(实际可达) > WHOIS(注册信息) > GeoIP(定位参考)。
3.
抓取并筛选 HK 条目(命令示例):
curl -s https://ftp.apnic.net/stats/apnic/delegated-apnic-latest | grep '|hk|' | grep '|ipv4|' > delegated-hk.txt
APNIC 格式为:registry|cc|type|start|value|date|status。将 start/count 转换为 CIDR,推荐用 Python 脚本或 ipcalc:示例 Python 片段:
python3 -c "import ipaddress,sys; s='203.80.0.0 65536'.split();print(list(ipaddress.summarize_address_range(ipaddress.IPv4Address(s[0]), ipaddress.IPv4Address(int(ipaddress.IPv4Address(s[0]))+int(s[1])-1))))"
4.
获取最新 BGP 前缀:使用 RouteViews 或 RIPE RIS MRT dump,或在线 API(bgp.he.net / stat.ripe.net)。命令示例(使用 bgp.tools API):curl -s "https://stat.ripe.net/data/announced-prefixes/data.json?resource=HK"。
比对逻辑:将 APNIC 得到的 CIDR 与 BGP 中 announce 的 CIDR 比对。若某些 APNIC 前缀长时间未被 BGP announce,应标记为“未见路由”,进一步核查是否撤销或归入 ISP 内部。
5.
WHOIS 查询:对关键前缀或 AS 进行 whois 查询以确认注册者和联系方式。示例:whois -h whois.apnic.net 203.80.0.0。
AS 关联:利用 pyasn 或 Team Cymru 的 IP-to-ASN 服务批量解析前缀对应的 ASN,记录 ASN 名称(ISP)以便追踪变动来源。
6.
主动探测:对每个待验证的网段执行少量 ping、traceroute、HTTP 请求,记录 RTT、反向 DNS(rdns)和 HTTP headers(有时 ISP 信息会出现在)。示例命令:ping -c3 203.80.0.1;traceroute 203.80.0.1。
GeoIP 校验:使用 MaxMind GeoIP2 或免费库进行定位核验,若 GeoIP 与预期不符,标注为“需要人工核验”。不要只凭 GeoIP 判定原生性,作为补充指标。
7.
工作流建议:每日/每小时拉取 APNIC 委派文件 → 解析为 CIDR → 与 BGP、WHOIS、GeoIP 做交叉校验 → 写入临时表并生成差异报告 → 根据策略自动更新生产表或触发人工复核。
cron 示例:0 * * * * /usr/bin/python3 /opt/ip-sync/sync_apnic_hk.py >> /var/log/ip-sync.log 2>&1。脚本应支持增量更新、回滚点与幂等操作。
8.
建议字段:cidr, start_ip, end_ip, prefix_len, source(APNIC/BGP/WHOIS/GeoIP), asn, as_name, last_seen_bgp, whois_updated, geo_country, confidence_score, status(active/deprecated/pending)。为查询“以什么开头”可建立 first_octet 字段或 prefix_bytes 索引。
索引策略:索引 cidr、start_ip、first_octet、asn 以保证检索速度。保留历史表记录变更并写入变更日志便于审计与回滚。
9.
持续监控:订阅 BGP 变更推送(例如 BGPStream),当出现 withdraw 或 origin AS 变更时,触发告警并自动将相关前缀标记为“待复核”。
RPKI:下载并核验 ROA,若前缀被标记为 invalid,应提高优先级人工检查,防范挂错或劫持。
10.
回滚策略:在自动更新前先写入临时表并生成差异,只有在 confidence_score 超过阈值(例如 0.8)时才自动合并,否则进入人工复核队列。保留历史快照以便快速回滚。
质量评分规则示例:APNIC +1,BGP seen +1,WHOIS 匹配 +0.5,GeoIP 匹配 +0.3,RPKI valid +0.5;总分 >=0.8 标记为高可信。
11.
问:如何快速得出“香港原生 IP 常以哪几位开头”?
答:从已验证的 CIDR 列表统计每个前缀的起始八位(first_octet)并排序频率,常见香港 IPv4 起始值包括 58、61、119、203、210、218、219、220、221、222、223 等,但这只是统计结果,不应仅凭一位判断,需结合 CIDR 与 ASN 校验。
12.
问:APNIC 文件中的 start+count 如何转换成标准 CIDR?
答:将 start 和 count(数量)转换为一个或多个 CIDR,需要把连续地址区间拆分成最小数量的 CIDR。可用 ipaddress.summarize_address_range 或 ipcalc/sipcalc 工具,或用 Python ipaddress 模块按 count 计算并生成 CIDR 列表。
13.
问:更新频率与告警阈值如何设定最合理?
答:建议 APNIC 拉取每日一次、BGP 监控实时或小时级、WHOIS 每日或每周。告警阈值:当 BGP withdraw 或 origin AS 变更时立即告警;当多源(BGP+WHOIS+GeoIP)失配导致 confidence_score 下降超过 0.3 时触发人工复核。