urlscan.io 是一项把网址交给远程浏览器跑一遍、再把过程记录下来的免费服务。它替你访问页面,留下截图、跳转链、请求过的域名和 IP、DOM 快照。对写博客、做运营、审友链的人来说,它像一张链接体检表:链接最终落在哪个域名、有没有顺手加载第三方脚本,都能在这里看到。
urlscan.io 做什么:远程浏览器替你打开链接
提交之后,urlscan 的自动流程会像普通用户那样访问这个地址,并记录由此产生的活动。官方文档列出的观察项包括:联系过的域名与 IP、从这些域名请求的资源(JavaScript、CSS 等)、页面截图、DOM 快照、页面写入的 cookie,以及 JavaScript 全局变量。整个过程在你的浏览器之外完成,不需要在本机打开目标页面。
拿到结果,可以按下面的顺序看:
- 截图:先看页面外观是否在冒充某个品牌或服务;
- DOM 与源码:看标题、表单提交地址、藏在页面里的跳转脚本;
- 请求清单:看加载了哪些第三方域名,有没有陌生的接口地址;
- 跳转链:看提交的短链最终落到哪里,中间经过几跳;
- 元数据:ASN、GeoIP、DNS 反查、Cisco Umbrella 排名、Wappalyzer 技术识别。
它还带钓鱼与品牌仿冒判定。官方文档写明,当前覆盖 1500 多个全球品牌,命中后会在结果里标出被仿冒的品牌。这类判定适合当线索用,不宜当结论:识别基于页面特征,误报和漏报都会出现。
提交一次扫描:网页端与 API 两种入口
轻量的用法是打开 urlscan.io 首页,把地址粘进输入框回车。结果通常要等一会儿才生成,页面会刷出截图与请求列表。要批量跑或接进自己的流程,走 API 更合适。

提交接口是 POST https://urlscan.io/api/v1/scan,请求体给出 url 与 visibility 两个字段,返回里带 uuid、结果页地址和结果 API 地址。官方的 Quickstart 指南说明,结果至少要 30 秒才会生成,需要拿 uuid 轮询;没完成时结果接口返回 404,已被删除的扫描返回 410。截图和 DOM 各有固定地址,拼上 uuid 就能取。
不想自己写轮询,可以用官方 Python 客户端 urlscan-python。2025 年 5 月 21 日的官方博客介绍了这个库,示例里用上下文管理器打开 Client,提交与取结果各一行。用 curl 也能完成,只是错误码和重试要自己处理。
结果页先看四块:判定、页面、清单、明细
| 区块 | 能读到什么 | 什么场景下用 |
|---|---|---|
| verdicts 判定 | 恶意评分、分类、被仿冒的品牌 | 快速区分钓鱼页与正常页 |
| page 页面 | 最终 URL、状态码、服务器头、TLS 签发者与证书天数 | 判断是否被跳转、证书是否刚签发 |
| lists 清单 | 联系过的域名、IP、ASN、证书、响应哈希 | 找同族站点、做横向关联 |
| data 明细 | 每次请求与响应、cookie、控制台消息、全局变量、重定向链 | 定位可疑脚本与跳转逻辑 |
结果接口文档把这些内容拆进 task、page、lists、data、meta、stats、verdicts 七个顶层键。恶意评分是 verdicts.urlscan.score,数值范围从 -100 到 100,越靠近 100 越可疑。系统标签 labels 只在商业版 urlscan Pro 里返回,社区版拿不到,看到别人截图里有这个字段也不必意外。
第三方博客 phish.report 记录过一套关联方法:先翻 HTTP 明细,挑一个在不同部署里名字稳定的资源文件,再按文件名或响应哈希回搜,把同一套模板的站点串起来。这个方法不依赖判定分数,适合需要写复盘的时候用。
可见性、配额与几个常见坑
三种可见性怎么选
提交时选的可见性,决定谁能看到这份结果,这一点比多数人想的更要紧。
- public:进入首页与公开搜索结果,任何人都能查到;
- unlisted:不出现在公开页面和搜索结果里,但 urlscan Pro 中经过审核的安全研究人员与安全公司可见;
- private:只有提交者本人可见,把 uuid 分享给别人才能看。
可见性说明页还写着,扫描会在保留期结束后从系统中删除。如果链接里带手机号、邮箱、订单号这类能指向具体个人的信息,不要用 public。想留证据又要收窄范围,unlisted 是折中方案;只做自查就用 private。公开文章里引用结果页时,也顺手确认一下页面本身有没有不该露出的内容。
配额与速率限制
配额同时作用于网页端和 API,按分钟、小时、天三个窗口分别计算。只有返回 HTTP 200 的请求才计数,超限后同一动作返回 429。窗口按固定时段重置,日窗口在 UTC 零点归零,也就是北京时间早上八点前后才会刷新。每次响应都带 X-Rate-Limit 系列头,能读出当前动作在哪个窗口还剩多少,也可以直接请求 /api/v1/quotas 查额度,细节在 速率限制文档里。
免费账号的配额页显示,公开扫描每天 2500 次、unlisted 每天 500 次、private 每天 25 次、搜索请求每天 500 次。数字随账号状态变化,以你账号里的配额页为准。未登录时接口只给很小的额度,且按 IP 计算,所以真要用,先注册账号、建一个 API key。
几个容易踩的点:
- 扫描结果不等于页面真实内容。目标站点可能对自动化访问返回另一个版本,或者直接弹人机验证;
- 只能看到匿名可见的部分。需要登录才出现的内容,扫描拿不到;
- 公开结果会被别人搜到,也可能被搜索引擎收录;
- 判定分数不是证据链,既会误报,也会被有意规避。
官方在 2026 年 4 月 15 日的一篇研究文章里给了个很实用的观察点:用 Ultraviolet、Scramjet 这类客户端代理框架搭的钓鱼页,会在请求明细里留下 uv.bundle.js、uv.config.js、uv.handler.js 这些文件名,以及 __uv$config 这样的全局对象。作者的建议很直接——在 HTTP 明细里按文件名翻一遍,比只看截图更有信息量。对应的技术标签 tech.proxy.ultraviolet 与 tech.proxy.scramjet 目前只在 Pro 版提供。
适合谁,以及怎么开始
它适合三类人:写文章要核实外链的博主、需要审核落地页的运营、做初筛的安全与运维同学。它不适合当判断依据的全部,也替代不了本地沙箱和日志分析。
上手可以按这个顺序走:
- 先扫自己的站点,熟悉结果页里各块的位置;
- 再扫一条自己确认安全的短链,看跳转链是怎么被记录的;
- 遇到可疑链接,用 unlisted 提交,减少别人顺着结果页找到你;
- 需要日常巡检时接 API,把结论写进自己的记录表。
如果平时还会在浏览器里处理来路不明的数据,CyberChef 这类工具可以先做解码和格式判断;想自己搭自动化浏览器流程,可以参考 browser-use 的实践记录。看结果里的证书信息时,ACME 证书自动化那篇能帮你判断证书刚签发意味着什么。
常见问题
扫一次要等多久?
接口文档写的是至少 30 秒,页面复杂时会更久。结果没生成时接口返回 404,别当成提交失败。
结果一定会公开吗?
不一定。可见性在提交时决定,只有 public 才会进入首页和公开搜索。拿不准用途时先用 private,确认无害再考虑公开。
能不能只查技术栈?
可以看 page 里的 Server 头,以及 meta 中 Wappalyzer 的识别结果。识别基于页面特征,单页应用与自研框架常常认不出来。
© 版权声明
文章版权归作者所有,转载需注明出处。未声明原创的皆为网络收集,如有侵权请邮箱lishiwenhuagx@sina.com联系下架处理。




