GitHub 热榜上每隔一阵就会冒出一个让你忍不住感叹“怎么现在才有人做出来”的项目,Web-Check 就是我最近非常上头的一个。它是一个开源的情报收集工具,核心玩法是把一个网站背后能公开查到的信息尽量全部挖出来,集中展现在一个页面上。网站的基础设施、DNS 记录、SSL 证书、安全头部、重定向链路、开放端口、技术栈指纹,甚至页面里暴露的邮箱和链接,都会一览无余。业内管这类玩法叫 OSINT,也就是开源情报,意思是所有信息都来自公开渠道,不搞任何“特殊手段”,但因为汇总得足够全,效果相当震撼。这篇文章我打算从功能拆解、部署实践、原理分析和踩坑记录几个角度,把 Web-Check 完整聊一遍。
这篇文章主要写给两类人:一类是日常做网站运维、安全自查、竞品技术调研的从业者,另一类是自己有网站想搞明白“我到底暴露了多少信息”的站长。下面我尽量讲得直白一点,把每条信息的含义和背后的逻辑都拆开,方便你拿过去直接做参考。
1. 项目概述与核心思路:为什么一个网页能“看清”一个网站
1.1 从“查看源代码”到“信息聚合”的进化
很多人理解网站分析,还停留在浏览器右键“查看源代码”的阶段。看源代码能看到什么?最多就是 HTML 结构、引用的 CSS 和 JS 文件,遇到压缩过的代码甚至什么都读不出来。真正专业的分析应该是多维度的:这个网站跑在哪台服务器上、IP 在哪个地区、域名注册了多久、用的什么 DNS 服务商、有没有做 CDN 加速、SSL 证书是谁签发的、网站启用了哪些安全响应头、有没有直接暴露在公网上的端口。这些信息单看任何一个都只是碎片,但拼在一起就能还原出一个网站的大致骨架。
Web-Check 做的事情就是把上述所有碎片集中起来,用一眼能看懂的面板形式呈现。我最初是在 GitHub 热榜上刷到这个项目的,当时觉得不过是个“花哨的探测工具”,后来真正用了才发现,这个工具的价值不在于它单点功能多强,而在于信息聚合效率极高。以前做一次基础信息收集,我要分别打开 DNS 查询工具、证书查询网站、HTTP 响应头检查工具、端口扫描器,花上十几分钟才能凑齐资料。现在丢一个域名进去,十几个模块一次性跑完,省下来的时间相当可观。
1.2 OSINT 思路在网站分析中的价值
OSINT 这个词最初来自情报领域,意思是只利用公开的、合法可获取的信息来做分析和判断。用在网站分析上,逻辑也很清晰:只要网站上线了,它就必须在 DNS 系统里留下域名记录,必须从某个 IP 提供内容,必须配置 SSL 证书,必须响应 HTTP 请求。这些行为本身就会留下大量数字痕迹。Web-Check 所做的,就是把这些痕迹系统性地收集、整理、可视化。
这套思路最大的价值在于:你不需要对目标做任何主动攻击或非法探测,所有数据都是目标自己“主动公开”的。域名信息可以查 WHOIS,证书信息在 TLS 握手时会主动发给你,响应头是服务器每次响应都会带的,就连开放端口都是服务器“愿意”响应你才测得到的。正因为这种被动属性,Web-Check 才成了很多安全测试和资产盘点场景中的标准开头——先做信息收集,再决定下一步动作。我自己做网站群资产盘点时,第一步基本都会用这类工具先把全量域名的基本信息拉一遍,后面再决定哪些需要进一步细查。
2. 核心模块拆解与关键参数解析
2.1 网络与 DNS 层:信息收集的起点
Web-Check 页面最靠前的几个模块通常都和网络层相关,包括 IP 地理位置、托管商信息、DNS 记录解析和 DNS 泄露检测。地理位置这一项很好理解,根据 IP 库把服务器所在城市和经纬度标出来。托管商信息则能告诉你这个 IP 归属哪家机构,比如是云服务商还是一家传统 IDC。这两个信息结合起来,基本能判断一个站点是否使用了 CDN。如果解析出的 IP 属于 Cloudflare、Akamai 这类 CDN 服务商,那么你看到的就只是边缘节点,源站还在后面藏着;如果直接解析到某个机房的 IP,那大概率是没做 CDN 防护的裸奔状态。
DNS 记录部分值得细说。Web-Check 会一次性拉取 A、AAAA、CNAME、MX、NS、TXT、SOA 等常见记录类型,并把它们分类展示。A 记录是 IPv4 地址,AAAA 记录是 IPv6 地址,CNAME 是别名指向,MX 记录决定邮件发送到哪个服务器,NS 记录标明域名的权威 DNS 归属,TXT 记录则大多用来存放 SPF、DKIM、DMARC 这类邮件验证信息。你把这些记录摆在一起,能读出很多隐藏信息:MX 记录指向第三方邮件服务商,说明这个公司大概率在用企业邮局托管;NS 记录指向 Cloudflare,说明域名解析走了它们的平台;TXT 记录里如果 SPF 配置写得宽泛,说明邮件反欺诈方面可能有隐患。这些细节对安全评估和竞品调研都非常有参考价值。
2.2 SSL 证书与安全头部:安全状态的“体检报告”
SSL 证书模块是我每次都会重点看的部分。Web-Check 会从 TLS 握手过程中提取目标站点的证书信息,包括颁发机构、签发时间、过期时间、签名算法,以及 SAN 字段里包含的域名列表。SAN 字段尤其有价值,因为一张证书通常不会只签一个域名,而是会带上一批相关域名。看到 SAN 列表,就等于拿到了一张“同族域名清单”,这在做资产扩展梳理时非常好用。举个例子,你查一个主域名,结果证书 SAN 里带着 staging.xxx.com、api.xxx.com、admin.xxx.com,后续要做什么心里就有数了。
安全头部模块给的是 HTTP 响应头里的安全相关字段,包括 Content-Security-Policy、Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 等。头部缺失本身不一定是漏洞,但可以反映一个团队的安全工程水平。CSP 缺失说明站点对 XSS 攻击的缓解措施偏弱,X-Frame-Options 缺失说明存在被点击劫持的可能性,HSTS 未启用说明对 HTTPS 强制的力度不够。如果一个网站这些头部全部配置齐全,那说明它的运维团队至少在安全基础面上下了功夫。
2.3 页面指纹与技术栈识别:一秒定位“骨骼”
技术栈识别这块也是亮点。Web-Check 会根据响应头里的 Server 字段、X-Powered-By 字段、cookie 名称、HTML 中的特征信息,综合判断目标网站用了什么 Web 服务器、后端语言、前端框架、CMS 系统。比如响应头里出现 nginx,HTML 里出现 wp-content 路径,那大概率就是 Nginx 加 WordPress 的组合。当你需要批量评估一群网站的技术构成时,这个模块能帮你快速分类,不用一个个去翻源码。
链接和邮箱提取模块也很有意思。它会扫描目标页面里的 mailto 链接、联系方式、外链和内链,把结果单独列出来。这个功能在做钓鱼演练或者日常安全检查时特别好用。如果页面上直接暴露出完整的公司邮箱格式,那么后续社工测试或者钓鱼演练就有了明确的素材依据。很多人没意识到,一个看似无害的“联系我们”页面,可能已经暴露了公司的邮箱命名规则和一大批有效账号名,这是值得警惕的。
3. 实操过程与核心环节实现:从一行命令到完整部署
3.1 最快上手:Docker 一行命令跑起来
如果你只是想快速体验一下这个工具,最省事的方式是用 Docker。只要机器上装了 Docker,执行下面这一行命令就够了:
docker run --rm -p 3000:3000 lissy93/web-check等镜像拉取完成后,打开浏览器访问 http://localhost:3000 ,输入你想查的域名,页面就会开始逐项收集信息。整个过程不需要安装 Node.js,不需要配环境变量,也不需要考虑依赖冲突。这也是 Web-Check 最推荐的上手路径,对于只想尝鲜的人来说,五分钟内就可以看到完整报告了。
需要注意,用 Docker 跑默认实例时,部分模块会受到内置 API Key 配额限制,某些高级查询可能会出现超时或拿不到数据的情况。这属于预期内的现象,原因后面专门说。
3.2 自托管与源码部署:真正可控的玩法
如果你打算把 Web-Check 作为长期使用的基础工具,我建议直接源码部署。先到 GitHub 仓库把代码克隆下来,然后按顺序执行安装和构建命令:
git clone https://github.com/lissy93/web-check.git cd web-check npm install npm run build npm run start这套流程走完,服务默认会在 3000 端口启动。前提是你的机器上已经装好了 Node.js 20 以上的版本,npm 版本也别太旧。我自己的服务器上是 Node.js 20 LTS,整个构建过程很顺利,基本没有遇到兼容性问题。如果是在公司内网部署,注意给服务器放行对应端口,并确认能否正常出网访问外部 DNS 和 HTTPS 服务,因为 Web-Check 在运行时需要向目标站点发起大量网络请求。
自托管最大的好处是可以自己控制环境变量。仓库的 .env 文件里预留了多个第三方服务的 API Key 配置位,包括安全头部查询、端口扫描增强、IP 地理位置解析等模块。填上了对应的 Key,这些模块的查询质量和稳定性都会提升一个档次。不填也能跑,但部分高级功能会降级,这也是在线 Demo 和自托管体验差距的来源之一。
3.3 查询目标的高级用法与结果解读
Web-Check 的常规用法是输入一个网址然后点查询,但稍微深入一步就会发现它还能做很多事。比如它可以只针对某个子域名做检查,也可以直接检查 IP 地址本身。当你输入 https://example.com 这种完整 URL 时,它会自动提取出域名部分再开始探测。对于在线服务来说,这是非常友好的设计。
拿到结果后,我个人的解读顺序是:先看地理位置和托管商,判断是否套了 CDN;再看 DNS 记录,确认邮件服务和解析归属;接着看 SSL 证书的 SAN 字段和颁发机构,梳理同族资产;最后看安全头部和开放端口,给出整体安全水平评价。按这个顺序走一遍,一个网站从“只有一个域名”到“大致画像清晰”基本就完成了。这套解读方法论也适合教给团队里的新人,比漫无目的地一个个模块乱点高效得多。
4. 常见问题与排查技巧实录
4.1 高频踩坑:解析失败、超时与数据缺失
在实际使用过程中,有几个问题是比较高频出现的,这里整理成速查表方便你直接对照:
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| 输入域名后一直转圈没结果 | 目标站点响应慢,或者被防火墙拦截了探测请求 | 换个网络环境重试,或者先查在线 Demo 验证域名本身是否可探测 |
| SSL 证书模块显示 Unknown | 目标使用了不常见的证书链,导致提取超时 | 手动用 openssl s_client 命令拉一次证书看看细节 |
| 端口扫描结果与预期不符 | 目标服务器有云安全组或防火墙规则,屏蔽了外部探测 | 区分“端口真实开放”和“允许被探测”,以前者为准 |
| 安全头部数据大量缺失 | 未配置对应 API Key,查询服务被限流 | 自托管时在 .env 里补全第三方服务 Key 再重建 |
| 技术栈识别不准 | 目标站是前后端分离的单页应用,指纹特征大多在客户端 JS 中 | 配合浏览器渲染后的页面信息一起判断 |
有个印象很深的例子。我同事跑一个政府门户网站,结果 SSL 证书信息一直加载不出来,但浏览器访问完全正常。最后拿 curl 手动拉证书才发现,那台服务器对不携带特定 User-Agent 的 TLS 探测请求直接不做响应。这种“非标准但合法”的行为在旧系统上非常常见,遇到时用在线证书查询工具绕一下就行,不必卡死在一个工具上。
4.2 实战判断技巧:如何从结果反推网站状态
读结果这件事,除了知道每个字段什么意思,更重要的是建立“组合判断”的思维。比如只看到某个域名解析出来的 IP 位于海外,不能直接说这是海外站点,还要结合 NS 记录和证书信息综合判断。如果 NS 记录是国内云厂商,但 IP 在海外,那“国内团队做了海外业务部署”的可能性就很大。
再说开放端口模块。很多人看到 80 和 443 开放就觉得正常,看到 22 端口开放就开始紧张。我的判断标准是这样的:22 端口开放本身不致命,关键是它是否对全网开放、是否采用密钥登录、有没有暴露在非标准的高位端口上。如果一台机器只开放 80 和 443,其余全部关闭,那它的暴露面明显小于那种把 22、3306、6379 全都裸露在公网上的主机。这类信息在一个页面里就能看到,省去了逐个扫描的步骤。
邮件相关配置也很值得留意。如果一个域名的 TXT 记录里缺失 SPF,或者 SPF 配置成了+all这种宽松策略,这说明该域名的邮件伪造防御基本为零,任何人都能伪造该域名的发件人。这对于安全评估来说是重要的线索。我在做钓鱼演练前的信息收集中,就经常靠这部分结果确定哪些域名更容易被“借用”名义。
4.3 合规边界与使用注意事项
我必须特别强调一下合规问题。Web-Check 的定位是信息收集和信息聚合,它对站点做的是非入侵式探测,但即便这样,使用时依然要把握好权限边界。对属于你自己的网站、你所在公司托管的网站,或者已获得明确授权的目标做检查,这是合理合法的。但对未授权的网站做大规模的端口探测和资产梳理,就可能触碰到当地法律法规的红线。我在团队内部推动这套工具落地时,专门写了一份使用规范,核心原则就一句话:先确权,再扫描;先自查,再他查。
另外,Web-Check 查到的信息很多是“某个时间点的快照”,尤其 IP 地理归属、端口开放状态这类信息,随时都可能变化。分析结果时不要把它当作永远不变的真相,要养成“关键结论用其他工具交叉验证”的习惯。比如我用 Web-Check 看证书,同时也用 openssl 命令直接拉一次证书比对;看 DNS 记录,再找一两个公共 DNS 查询平台核对一下。交叉验证不是不信任工具,而是为了避免把偶然的解析错误当成事实输出。
5. 工具选型解析:为什么 Web-Check 值得留一套自托管
如果要给 Web-Check 找一个同类定位,市面上其实有不少分散的工具能做其中一块事情,但能像它一样把所有模块整合进一个开源项目里的,确实不多。在线版的 DNS 查询工具很多,但大多只能查记录;在线版的证书查询工具也不少,但很少顺带给你展示 SAN 列表和签发者全貌。Web-Check 的价值在于“一站式”,它把安全自查、网络诊断、资产盘点、技术调研这些场景里常用的能力,全部打包在一个界面里,而且完全开源,可供二次开发。
自托管还有一个很实际的理由:隐私。用线上版查询目标域名时,你的查询行为会经过第三方服务的服务器。如果你在帮客户做敏感资产调研,这个行为路径可能就不太合适。自己部署一套,所有请求都从你自己的服务器发出,查询记录掌握在你自己手里。这一点对于安全行业的人来说尤其重要,因此我强烈建议不要只把 Web-Check 当作一个“在线小工具”用,而应该在自己的 VPS 或者内网环境里常驻一套。
部署之后的扩展空间也很大。因为项目完全开源,你可以修改前端展示方式,增加自定义模块,甚至把它接到自己的告警系统里。比如每周定时对核心资产跑一轮 Web-Check,把结果和上周做对比,有变化就触发通知。这种自动化巡检的思路,比单纯拿工具查一次要有价值得多。
写在最后的个人体会
用 Web-Check 这段时间,我最大的感受是:市面上很多工具都在做“单点深挖”,Web-Check 则是在做“广度聚合”,而这种广度恰恰是日常排查中最稀缺的。以前查一个陌生网站,思路是“想到什么查什么”,现在有了这套工具,我改成“先把全景图拉出来,再挑重点看细节”。信息收集环节的时间至少压缩了一半,而且不容易漏项。
如果你也准备自建一套,我建议装完之后,先拿自己的博客、公司官网、甚至一个不用的老域名各跑一遍。对比不同站点的输出结果,你会在很短时间内建立起一套自己的判读直觉:什么配置是常态,什么配置是异常,哪些组合需要进一步深挖。这套直觉,才是比工具本身更值钱的东西。