1.
1) 目标:区分真实位于香港的数据中心IP和通过CDN/Anycast/代理伪装的IP。
2) 应用场景:准入白名单、广告投放地域校验、DDoS溯源、合规审计。
3) 风险:伪造归属会导致策略失效(误放行或误封),影响业务可用性。
4) 技术点:结合GeoIP库、ASN、Reverse DNS、traceroute与多点延迟测量综合判定。
5) 输出需求:生成可供运维和安全团队快速审阅的CSV/HTML报告,包含置信度评分与证据链。
6) 性能考虑:并发检测时需限流,避免自家VPS出站被触发防火墙或触及速率限制。
2.
判定标准与检测指标(5+项)
1) GeoIP库匹配:使用MaxMind GeoIP2或ip2location进行初步国家/城市判断(置信度字段)。
2) ASN与ISP核验:通过Team Cymru RDAP或Whois查询ASN,检查ASN是否属于香港的主要机房提供商(如 PCCW、HKT、HKIX 互联等)。
3) 反向DNS与域名:检查PTR记录与域名是否包含hk、hkt、pccw等关键词。
4) 网络路径(traceroute):从多个检测点追踪路由,判断是否经由亚太/香港骨干或直接进入香港交换节点。
5) 延迟与丢包:实际Ping或TCP握手延迟低于阈值(例如:从香港测点到目标延迟 < 30ms 且丢包 <2% 计为强证据)。
6) HTTP/TLS证书与SNI:检查证书链与SNI是否有CDN特征(如 Cloudflare/其他Anycast 提示可能非原生)。
3.
真实案例:一次批量检测报告与服务器配置示例
1) 背景:运维团队对100个疑似香港IP批量检测,目的是确认哪些为香港原生IP以加入白名单。
2) 检测点:使用香港VPS(AS的示例:ASN 9808 PCCW-HKT)、新加坡和东京各1个检测点交叉验证。
3) 典型服务器配置举例:VPS型号:4 vCPU / 8GB RAM / 100Mbps 公网带宽;网络:香港机房直连 HKIX;响应时间(到本地HTTP 200):平均 18ms。
4) 结果摘要:在100个IP中,判定为“香港原生”72个,“疑似CDN/Anycast”20个,“非香港”8个。
5) 报告示例(表格展示):下表为部分样例结果,包含IP/ASN/ISP/City/Country/Latency/判定。
| IP |
ASN |
ISP |
City |
Country |
Latency(ms) |
判定 |
| 203.198.23.5 |
AS9808 |
PCCW-HKT |
Hong Kong |
HK |
16 |
香港原生 |
| 104.21.12.34 |
AS13335 |
Cloudflare |
Anycast |
多地 |
22 |
疑似Anycast/CDN |
| 203.205.45.66 |
AS45090 |
LocalISP-HK |
Hong Kong |
HK |
12 |
香港原生 |
4.
自动化脚本示例(Python)与步骤说明
1) 本示例使用requests、geoip2、subprocess做并发简单检测并输出CSV/HTML。
2) 步骤:读取IP列表 -> GeoIP2查询 -> RDAP/Whois获取ASN -> 多点Ping/Traceroute -> 综合打分 -> 导出报告。
3) 判定逻辑示例:GeoIP国家为HK得30分;ASN列表匹配得40分;平均延迟<30ms得20分;traceroute命中HK交换节点得10分;总分>=70判定为原生。
4) 脚本片段示例(关键逻辑,用于运维参考):
import csv, subprocess, socket
import geoip2.database, requests
geo = geoip2.database.Reader('/path/to/GeoLite2-City.mmdb')
def ping_ms(ip):
p = subprocess.run(['ping','-c','3','-W','1',ip], capture_output=True, text=True)
if p.returncode!=0: return 999
out = p.stdout
# 简单解析平均延迟
if 'rtt min/avg/max/mdev' in out:
avg = out.split('rtt min/avg/max/mdev = ')[1].split('/')[1]
return float(avg)
return 999
def score_ip(ip):
score = 0
try:
r = geo.city(ip)
if r.country.iso_code == 'HK': score += 30
except: pass
# RDAP/Whois简化:使用 TeamCymru API(示例)
asn_info = requests.get('https://api.opencymru.com/v1/asn/' + ip).json()
asn = asn_info.get('asn','')
if asn in ['AS9808','AS45090']: score += 40
latency = ping_ms(ip)
if latency < 30: score += 20
# traceroute检查略(可用scapy或subprocess实现)
return score, latency
# 导出CSV
with open('report.csv','w',newline='') as f:
w=csv.writer(f); w.writerow(['IP','Score','Latency'])
for ip in ['203.198.23.5','104.21.12.34','203.205.45.66']:
s,l = score_ip(ip)
w.writerow([ip,s,l])
5) 注意点:生产环境需处理并发限制、远程检测点部署、多次采样与异常重试。
5.
运维与安全结合的落地建议(5+项)
1) 多源验证:仅依赖单一GeoIP不可靠,建议结合ASN+traceroute+延迟。
2) 部署检测点:在香港、新加坡、日本等地部署轻量检测VPS以做横向比对。
3) 自动化策略:检测脚本定期运行并将结果输出至集中化SIEM或运维工单。
4) 白名单策略:对于“高置信度香港原生IP”可放行,但对“疑似CDN/Anycast”保留人工复核。
5) DDoS防御联动:当检测到短时间内大量“伪香港IP”新增访问,建议触发流量清洗或更严格的速率限制。
6.
总结与扩展:如何把报告接入CI/监控体系
1) 输出格式:建议同时导出CSV、HTML和JSON,便于导入监控系统与人工查看。
2) CI集成:在CI/CD中加入IP核验步骤,部署前校验配置中白名单的可靠性。
3) 告警规则:当“香港原生IP比例<阈值”或“疑似Anycast占比突增”时发出告警。
4) 数据保留:保存历史检测记录用于趋势分析与溯源,保留至少90天样本。
5) 未来扩展:可接入基于机器学习的异常检测模型,利用路由行为、响应指纹等进一步提升判定准确率。
来源:自动化脚本示例 帮你批量检测怎么知道是香港原生ip并输出报告