摘要
城市级IP定位精度在10—50公里,同城不同区域的流量来源在风控系统里往往分不开,中转出口因此容易混在正常流量中通过规则。艾瑞咨询数据显示,超过63%的风控团队承认城市级IP信息在识别同城中转出口攻击时基本失效。本文围绕高精度ip查询的精度分层展开,说明街道级字段如何把识别粒度推到1—5公里,如何结合risk_score、出口类型和网络类型做分层判定,并给出离线库部署参数、判定逻辑与适用边界,帮助风控团队判断这套方法在什么条件下值得接入。
一笔“看起来正常”的交易
一笔交易从“北京市”的IP发起,设备指纹正常,行为序列没毛病,风控规则全部放行。事后复盘才发现,这个IP来自同城的一个中转出口,攻击者就在离正常用户不到10公里的地方。
问题不在规则,在数据精度。城市级IP定位的精度大概10—50公里。这个粒度下,北京朝阳区的正常用户,和同处北京的一个中转出口IP,在风控系统里返回的城市字段都是“北京”。艾瑞咨询《2024年中国网络安全行业研究报告》里有个数据:超过63%的风控团队承认,城市级IP信息在识别同城中转出口攻击时“基本失效”。
规则再细,底层查询返回的粒度不够,同城内部的流量来源就分不开。
高精度ip查询把识别粒度推到1—5公里
高精度ip查询做的事,是在城市级字段之外,把IP映射到街道或更细的地理位置。城市级是10—50公里,高精度查询通常能做到1—5公里。
放到风控场景里,业务含义很直接:同一个城市内,城东住宅区和城西数据中心集群的IP,城市级结果里都是同一个城市名,高精度结果里分属不同街道或区县。风控系统第一次有了在“同城”内部做空间分层的依据。
做到这个精度靠的是多源融合:ISP的IP分配脉络、主动探测的网络延迟特征、脱敏后的用户校准样本、路由节点拓扑分析。IP数据云的街道级离线库覆盖IPv4和IPv6,返回国家、省、市、区县、街道多级字段,附带经纬度和行政区划代码。
从“查得到城市”到“判得了风险”
位置解决“在哪”,风险画像解决“多可疑”。在位置字段之外,0—100的连续风险评分(risk_score)基于IP历史行为、风险记录和风险情报关联生成,每日更新。
配合出口类型字段(proxy_type)和网络类型字段(usage_type),可以拼出一套分层判定逻辑:
- 出口类型标记为住宅中转,且risk_score>60:触发增强验证(短信、人脸或二次认证)
- usage_type为数据中心,且risk_score>70:限制敏感操作(提现、大额转账、批量查询)
- risk_score>85,且同ASN账号聚集:直接拒绝

核心逻辑不是一刀切限制,而是按风险等级分配处置成本。低风险放行,中风险加验证,高风险进人工或自动阻断。同城出口判定的实现逻辑
Python
import ipdatacloud
db = ipdatacloud.OfflineIPLib('/data/ipdb/ip_street_level.mmdb', enable_risk=True)
def assess(ip, asn_cnt=0):
info = db.query(ip)
proxy = info.get('proxy_type') # 住宅中转/数据中心中转,可能为空
usage = info.get('usage_type')
score = info.get('risk_score', 0)
if proxy in ('住宅中转', '数据中心中转') and score > 60:
return 'STEP_UP_AUTH'
if usage == '数据中心' and score > 70:
return 'RESTRICT_SENSITIVE'
if score > 85 and asn_cnt > 50:
return 'REJECT'
return 'PASS'
print(assess('203.0.113.45', asn_cnt=63))
部署侧关键参数:街道级库文件预留16GB以上内存,SSD存库文件和增量更新包。查询不走外网,单机QPS在离线库模式下可超过250万,扛实时交易风控的并发没问题。proxy_type依赖风险画像字段,基础版库可能为空,代码里做安全降级,不会误判为正常。
这套方法的边界在哪
高精度ip查询解决的是“同城内部的空间分层”,不是“定位到人”。它的价值是把城市级精度下分不开的同城中转出口流量,推到1—5公里的区分粒度,让风控规则在同城维度有了可操作的判断依据。
数据来源:
- 艾瑞咨询《2024年中国网络安全行业研究报告》
- IP数据云《街道级IP定位实战》(2026-04-28)