技术博客
获取外网IP:登录安全与异常地域风控场景集成指南

获取外网IP:登录安全与异常地域风控场景集成指南

作者: 万维易源
2026-09-02
获取外网IP登录风控异地登录安全审计IP属地
# 获取外网IP:登录安全与异常地域风控场景集成指南 > 接口:获取外网IP(apiCode 632,接入点 1) · 免费 · POST/GET · JSON · 适用:后端、安全工程师 · 阅读约 7 分钟 ## 核心要点 - 在登录环节调用获取外网IP,用 `region`/`city`/`country` 给账号登录做地域画像与异地告警。 - 结合历史常用地,对"跨省/境外/非常用地"登录触发二次验证或人工审核。 - 用 `isp`/`country` 辅助识别出口代理与境外来源,但注意其只是参考信号,误判需可解。 ## Why:登录风控为什么需要它 账号被盗最常见的信号之一,就是"平时都在云南登录,今天突然从境外上线"。如果你能拿到每次登录的公网 IP 与归属地,就能: - 标记**异地登录**并发起二次验证; - 对**境外 / 代理出口**登录提高风险等级; - 为安全团队提供**可追溯的登录地理日志**。 获取外网IP 把"IP → 归属地"这一步免费封装好,你只需在登录流程里加一次调用。 ## What:集成点速览 | 项 | 值 | |----|----| | 调用时机 | 用户登录校验成功后,异步或同步查询本次登录 IP 属地 | | 关键字段 | `region` 省、`city` 市、`country` 国家、`en_name_short` 国家短码、`isp` 运营商 | | 错误兜底 | `showapi_res_code != 0` 或 `ret_code != 0` 时,不阻断登录,仅记日志降级 | | 计费 | 免费(注意档位限制,见[常见问题](https://www.showapi.com/guides/getip-faq-632)) | ## How:登录环节嵌入一次 IP 属地查询 数据表设计(登录日志): ```sql CREATE TABLE login_log ( id BIGINT PRIMARY KEY, user_id BIGINT, ip VARCHAR(64), region VARCHAR(32), city VARCHAR(32), country VARCHAR(32), isp VARCHAR(32), risk_level TINYINT, -- 0 正常 / 1 异地 / 2 高风险 created_at DATETIME ); ``` 登录服务伪代码(Python): ```python import requests APP_KEY = "YOUR_APPKEY" def enrich_login(user_id, client_ip): """查询本次登录的 IP 属地并写库;失败降级不阻断登录。""" try: r = requests.post( "https://route.showapi.com/632-1", params={"appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=3, # 登录链路超时从紧,避免拖慢主流程 ) data = r.json() body = data.get("showapi_res_body", {}) region, city = body.get("region"), body.get("city") country, isp = body.get("country"), body.get("isp") except Exception: region = city = country = isp = None # 降级:只记录 IP # 异地判断:与用户历史常用省对比 usual_regions = get_usual_regions(user_id) # 业务侧维护 risk = 0 if region and usual_regions and region not in usual_regions: risk = 1 if country and country not in ("中国", "本地局域网"): risk = max(risk, 2) # 境外来源更高风险 save_login_log(user_id, client_ip, region, city, country, isp, risk) if risk >= 1: trigger_step_up_verification(user_id) # 二次验证/告警 ``` 调用时序:用户提交凭证 → 校验通过 → 同步/异步调用获取外网IP → 落库 + 风险判定 → 异地则二次验证。 ## 返回示例与解析 ```json { "showapi_res_code": 0, "showapi_res_body": { "ip": "183.225.1.165", "region": "云南", "city": "昆明", "country": "中国", "en_name_short": "CN", "isp": "移动" } } ``` 判定要点:`region`/`city` 用于异地对比;`country`/`en_name_short` 用于境外识别;`isp` 作为代理/数据中心出口的辅助信号(如值为云厂商名可作为加分项,但非绝对)。 ## 进阶 / 边界 - **异步化**:登录是核心链路,建议把 IP 查询放消息队列异步处理,避免接口抖动拖慢登录;失败时仅记日志,不阻断用户。 - **不要唯 IP 论**:NAT、企业出口、VPN 都会让多个用户共享出口 IP 或显示为异地,务必结合设备指纹、历史行为综合判定,给误判留解(如"本次为常用设备则放行")。 - **隐私合规**:记录用户 IP 与属地需符合当地个人信息保护要求,明确告知并取得必要同意,数据最小化存储。 ## FAQ **Q:能不能只靠 IP 属地判断是不是盗号?** A:不能。IP 属地只是信号之一,NAT/企业出口/VPN 都会造成误判。应结合设备、历史行为做综合风控,并对异地登录提供二次验证而非直接封禁。 **Q:接口慢会不会拖垮登录?** A:建议异步调用并设短超时(如 3s),失败仅降级记日志,绝不阻断主登录流程。 **Q:为什么有时 `region` 是"本地局域网"?** A:请求从内网/IDC 出口发出时正常现象,详见[常见问题与边界](https://www.showapi.com/guides/getip-faq-632)。 **Q:免费接口能做生产风控吗?** A:可以,但需注意档位限制与可用性,高并发或大流量请提前评估档位并规划降级。 ## 相关能力 / 下一步阅读 - [获取外网IP:返回字段全解(IP / 经纬度 / 归属地 / 运营商)](https://www.showapi.com/guides/getip-fields-632) - [获取外网IP:用户地域分布分析怎么做(市场地域分析实战)](https://www.showapi.com/guides/getip-geo-analysis-632) - [获取外网IP:常见问题与边界(免费档位限制 / 内网·代理 / 字段缺失)](https://www.showapi.com/guides/getip-faq-632) - **本系列共 8 篇**:查看[获取外网IP 指南总目录](https://www.showapi.com/guides/getip-guides-632)