尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Shodan与Censys实战对比:从资产测绘到暴露面排查
做安全的日常离不开三样东西威胁情报、资产测绘、日志分析。今天我想聊的是渗透测试和资产排查里最常用到的两个外部测绘工具Shodan 和 Censys。先说个小事很多新人查资料时会把 Censys 拼成 Cencys别笑这个拼写错误非常普遍但背后暴露的其实是对这两个工具定位的不清晰。这篇不打算写成工具文档的复读机我想从实际使用者的角度把这两个工具之间的关系、查询语法、实操套路、常见坑一条龙讲透。不管你是刚入行等攻防小白还是偶尔需要做外部资产排查的运维应该都能从里面挖到点东西。1. 两个工具到底是什么为什么总被一起提起1.1 Shodan 更像“互联网设备的实时索引”Shodan 做的事情本质上就是持续扫描全网公网 IP把暴露出来的端口、服务、设备类型、Banner 信息收集起来做成一个可检索的数据库。你可以把它理解成一个“面向设备而不是网页的搜索引擎”。它和你平时用的百度、谷歌最大的区别在于普通搜索引擎收录的是 HTML 页面Shodan 收录的是“某个 IP 的某个端口正在运行什么服务”。比如你打开一个公网 IP 的 22 端口如果服务器返回了 SSH 的版本信息Shodan 就会把这段版本号抓下来索引进数据库里。这种抓取方式叫 Banner 识别核心就一句话连接端口、读取返回、打上指纹标签。在实际使用中Shodan 的数据粒度更偏向设备侧。比如它会对设备类型做分类路由、打印机、摄像头、工控设备、数据库服务都有对应的标签。还会关联一些公开漏洞编号方便你快速判断某个暴露服务的风险程度。对于安全评估来说它最大价值是“快”一个 IP 段丢进去哪些端口开了、跑着什么服务、大概是什么系统几分钟就能拉出清单。1.2 Censys 更像“用证书和服务绘制互联网资产图谱”Censys 是另一类测绘工具它的数据获取方式跟 Shodan 不太一样。Shodan 更依赖轻量级的 Banner 抓取Censys 则会做更结构化的主动扫描尤其是对 TLS/SSL 证书相关数据的收集数据完整度比很多同类工具都高。什么叫“证书相关数据”简单说任何一个站点只要在公网提供 HTTPS 服务它的 SSL 证书就会被扫描器抓下来。证书里面有域名、组织名、颁发机构、有效期这些字段。Censys 把这些证书数据整理成结构化 JSON你可以直接搜“某个域名关联过哪些 IP”“某张证书还签过哪些域名”这在做企业资产发现的时候特别好用。Censys 的另一个特点是字段非常细。它不光记录端口和服务名还会把 HTTP 返回头、HTML 页面标题、TLS 握手中的加密套件、证书链信息都存下来。因为数据是结构化的查询表达式可以组合得非常复杂。比如你可以搜“所有在 443 端口跑 HTTP 服务、并且页面标题是‘后台管理’的 IP”这种组合用 Shodan 也能做但 Censys 的字段层级感更清晰适合做批量分析。1.3 两者不是竞品是互补很多人刚接触这两个工具时总想问“哪个更好”答案其实是“两个都别放过”。Shodan 的设备指纹、行业分类、漏洞关联更细Censys 在证书图谱、结构化字段、历史数据上更有优势。做一轮正经的外部暴露面排查我通常的做法是 Censys 先出资产线索Shodan 再补服务和设备细节两个数据源交叉验证。举个例子你在 Censys 里看到某个 IP 的 443 端口挂着一张证书证书里写了域名 A但 Shodan 里这个 IP 的另一个端口跑着数据库服务主机名却解析到了域名 B。这时候你就能意识到域名 A 和域名 B 背后可能是同一套基础设施资产归属关系就串起来了。单靠其中一个工具很难把这个链条拉完整。2. 上手前必须懂的几个核心概念2.1 搜的是“指纹”不是“网页”这两个工具都不是普通搜索引擎别用搜网页的习惯去搜。你在里面输入一个关键词返回的不是网页正文而是“某 IP 的某端口返回了包含这个关键词的 Banner 或页面片段”。这个理念很重要。因为很多人不知道该怎么提查询条件一上来就输公司名、域名发现结果和预期差别很大。正确的姿势是先想清楚你要找什么类型的设备、什么端口、什么服务再用对应的字段去限定。比如你想找公网上的 MongoDB 数据库你用关键词去搜字符串是低效的直接用product:MongoDB或者port:27017这种字段查询几秒钟就能定位。2.2 读懂一条结果记录无论是 Shodan 还是 Censys一条结果记录通常包含这些维度IP 地址和端口号资产暴露的具体位置。服务标识和版本比如 OpenSSH 7.4、Microsoft IIS 10.0。主机名:反查 DNS 得到的主机名有时能帮你判断这个 IP 归属哪个系统。地理和网络信息国家、城市、运营商、ASN 编号。时间戳扫描器最后一次抓到该信息的时间判断数据新鲜度。原始 Banner 或 HTTP 响应最原始的指纹内容排查时经常要看。在 Shodan 里这些字段是平的一眼能扫完Censys 里则是嵌套 JSON 结构有点类似“展开更多”的感觉。第一次用 Censys 的人会觉得字段太多了但用多了反而会喜欢这种结构化因为它能把证书链、HTTP 响应头这些“深层信息”完整展示出来。2.3 免费账号与权限差异这两个工具都有免费门槛但免费额度和限制不太一样。Shodan 免费账号可以手动搜索但结果只展示前面一小部分API 调用次数极其有限想一次性拉大量数据基本不可能。Censys 的免费账号也有类似限制单次搜索可以看到的数量有限高级查询和导出功能不一定开放。给新手的建议先拿免费账号练手理解数据结构和查询逻辑。真要用于工作比如要给一个 IP 段做完整排查还是需要付费级别的支持。别指望免费额度扛业务这是血泪经验。3. 实操用两个工具做一次外部暴露面排查3.1 先说清楚授权边界在做任何实际操作之前我必须把这句话放到最前面对这种互联网测绘工具的使用一定要在自己有权限的范围内进行。公司授权的评估项目、自己负责的资产、公开的测试靶场都可以。对着未授权的目标乱扫乱查不仅违反平台条款也可能触碰法律红线这一点没有灰色空间。下面所有演示用的 IP 段我都会用文档保留地址段 192.0.2.0/24案例人物和公司也全是虚拟代称。你可以照着这个流程把目标换成你有权限的资产。3.2 用 Censys 找主机和证书线索假设某个安全评估项目里某公司提供了一段授权范围内的 IP 段 192.0.2.0/24要求梳理清楚互联网侧暴露了哪些服务。我的第一步是先把这段 IP 整体丢进 Censys 的主机搜索里看一眼大致情况。在 Censys 的搜索框里输入ip:192.0.2.0/24这个查询会返回该段内所有被发现的主机。注意不是每个 IP 都会有记录很多 IP 可能没有任何端口对外开放那就不会出现在结果里这不奇怪。先看返回的主机数量再逐个点开看开放端口。接下来重点看证书字段。在 Censys 里如果某个 IP 的 443 端口挂着证书你会看到services.tls.certificates.leaf_data.names这个字段里面是证书关联的域名列表。把这些域名单独抽出来经常能发现一些意外的子域名或历史域名这些就是潜在的资产线索。还可以直接用域名反查services.tls.certificates.leaf_data.names: example.com这是一个非常高频的用法。它的核心价值在于你不需要先知道 IP只需要知道域名就能把曾经或正在使用这个域名的公网主机找出来。对于企业自有资产梳理这一步通常能捞出一批没记录在资产管理台账里的系统。3.3 用 Shodan 补服务指纹和端口画像Censys 把“有哪些主机在线、有哪些证书”这种大方向摸清楚之后就该 Shodan 上场了。在 Shodan 搜索框里输入同样的 IP 段net:192.0.2.0/24Shodan 的结果会按端口聚合展示。你会看到哪些端口是这个段里最常见的比如 22、443、3389点进去又能看到具体是哪些 IP 在开放。这一步的价值是把暴露面从“存在哪些主机”细化成“每台主机开放了哪些端口”。如果某个 IP 特别关键比如是核心业务系统的出口地址我会单独点开它的详情页看hostnames、product、operating_system这几个字段。hostnames能帮你判断这台机器对应的域名product能看出中间件或数据库类型operating_system则给出操作系统版本参考后面做渗透测试方案时这些信息都是基础依据。特别提醒一点看到端口开放别急着高兴先确认一下数据里的时间戳。Shodan 的扫描不是实时触发的有些记录可能已经过了几周甚至更久。时间越久的数据越不能直接作为“当前状态”来评估。3.4 交叉核对与汇报输出两个工具的数据都拿到手以后最核心的一步是交叉核对。我会把相同 IP 在两边的端口集合放到一起对比正常情况下两边应该能看到一致的端口但也确实会遇到对不上的情况。这种差异不一定代表工具错了更多是扫描周期和探测策略不同导致的。比如 Shodan 侧重常见端口扫描Censys 的探测端口列表可能跟 Shodan 并不完全重叠。某端口 Shodan 没扫到、Censys 有记录这很常见。处理方式就是两边的并集都保留并在备注里标注数据来源和发现时间。最后输出一份简单的暴露面清单大致长这样IP 地址开放端口服务指纹证书域名处置建议192.0.2.1022, 443, 3389OpenSSH 7.4 / nginx / RDPexample.com限制 3389 来源 IP关注 SSH 版本192.0.2.236379Redis 未授权访问特征明显无禁止公网暴露加认证改端口这份清单可以直接作为评估报告的附表也可以导入到资产台账里做持续跟踪。4. 核心查询语法与脚本化4.1 Shodan 查询语法拆解Shodan 的查询语法核心就是“字段:取值”。我把日常最常用的几个列出来每个都给一个可直接套用的示例。net:192.0.2.0/24按 IP 段搜最适合做资产范围排查。port:3389按端口搜配合其他字段使用能快速定位远程桌面暴露情况。hostname:example.com按主机名搜索适合找挂在某域名下的主机。product:OpenSSH按产品名称搜索找特定中间件或软件。http.title:后台管理按页面标题搜索经常用来定位暴露的管理后台页面这个对中文关键词也友好。ssl:example.com按证书关键内容搜索能挖出绑定了该域名证书的 IP。vuln:CVE-2024-XXXX按公开漏洞编号搜索可以快速找出可能受某个已知漏洞影响的设备注意这里只是筛选线索实际验证必须通过授权测试。before:2024-01-01和after:2024-06-01按时间范围过滤看历史暴露记录很有用。把这几个字段组合起来查询能力会提升一个量级。比如net:192.0.2.0/24 port:3389 country:US这是同时限定 IP 段、端口和地理位置定位到指定国家特定段内的远程桌面服务。再比如http.title:后台管理 product:Apache这能帮你找到跑在 Apache 上的后台管理页面是资产排查里很有用的组合。4.2 Censys 查询语法拆解Censys 的字段是嵌套结构看起来比 Shodan 复杂但只要记住“先大类后小类”的规律就不难。我最常用的几个ip:192.0.2.0/24主机段查询和 Shodan 的 net 作用一样。services.port:443限定开放端口注意端口字段在 services 下面。services.service_name:HTTP按服务名过滤。services.http.response.html_title:后台管理按页面标题搜对应 Shodan 的 http.title。services.tls.certificates.leaf_data.names:example.com按证书里的域名搜索这是 Censys 最核心的用法之一。services.http.response.body:login按 HTTP 响应正文关键词搜适合找登录页或特定特征。Censys 还支持逻辑操作符和括号比如services.port:443 AND services.service_name:HTTP AND services.http.response.html_title:后台管理这种多条件组合在 Censys 里写起来特别顺手。它的整个字段体系就是一颗 JSON 树查询条件和树形结构一一对应。如果你熟悉 JSON 结构上手 Censys 会非常快。4.3 用 Python API 把查询变成批量任务手动在网页上点搜索适合临时用但真正给一段大网段做排查时手动方式效率太低我一般都会写脚本调 API。Shodan 和 Censys 都有官方 Python 库直接把搜索逻辑搬进脚本里。Shodan 这边的示例import shodan api shodan.Shodan(你的APIKey) def search_target(query): try: result api.search(query) print(f匹配总数: {result[total]}) for item in result[matches]: print(item[ip_str], item[port], item.get(product, )) except shodan.APIError as e: print(f请求失败: {e}) search_target(net:192.0.2.0/24 port:3389)Censys 这边的示例from censys.search import CensysHosts h CensysHosts(api_id你的API_ID, api_secret你的API_SECRET) hits h.search( ip:192.0.2.0/24, fields[ip, services.port, services.service_name] ) for hit in hits: print(hit)跑完以后可以统一保存成 JSON 或者 CSV再生成报表。有一点必须注意API Key 相当于账号密码千万别直接写在代码仓库里更别往群里贴。建议用环境变量或者配置文件来管理。4.4 搜索结果备份与后续利用搜索结果不要看完就关。做评估时我会把原始搜索结果导出保存一份 JSON、一份 CSV干脆利落。导出不只是为了自己看也方便后续到报告里做证据留存。尤其是发现高危端口或敏感信息时原始的时间戳和 Banner 截图都是重要记录。这些导出数据还有一个用途是建立资产台账。把每次排查的结果归档下一轮排查时对比差异哪些端口新开了、哪些服务变了、哪些证书失效了一目了然。暴露面管理的核心就是持续跟踪不是扫一次就完事。5. 常见问题与排查技巧实录5.1 为什么搜不到某些资产这是被问得最多的一个问题。明明某公司有公网 IP怎么两个工具都搜不到原因不外乎这几种第一目标 IP 根本没有对外开放端口。很多企业的公网出口是防火墙和 NAT内部服务没有映射出来那自然搜不到。第二扫描周期和覆盖范围问题。任何测绘工具都不是全时扫描短时间内新上线的资产没有被索引到很正常。第三CDN 遮挡。很多站点套了 CDN扫描器采到的是 CDN 节点的地址真实源站 IP 不会直接暴露在扫描结果里。遇到这种情况我的思路是用证书和域名关联去侧面找。在 Censys 里搜证书域名往往能挖出一批历史绑定过的 IP再结合目标授权范围内已有的资产清单来定位不要强行用工具去猜。5.2 两边的结果不一致怎么办Shodan 和 Censys 两边结果对不上太正常了。原因有三类一是端口探测列表不同两边并不是所有端口都扫二是扫描时间窗口不同服务变更导致一前一后记录不同三是握手深度不同有些服务需要特定协议交互才能识别两边识别结果会有差异。处理原则很简单以两边并集为准同时标注数据来源和时间。如果两边在同一个端口上识别出了不同的服务再结合 Banner 原文和证书信息做二次判断实在拿不准就做一次授权范围内的主动验证。5.3 API 配额不够用怎么办做批量任务最头疼的就是配额。我的几个方法是先用手动界面做小范围试探明确要查哪几个端口、哪几个域名然后再把查询整理成少量高价值的 API 请求对在线资产分批次查询避开高峰时段把已经查过的结果缓存到本地文件同一查询下次直接读缓存不再重复调用 API。5.4 如何区分云厂商 IP 和真实业务资产现在很多业务跑在公有云上扫出来的结果里有大量云服务商共用 IP看着热闹但分不清是不是目标资产。这时候要重点看两个字段一个是isp或org另一个是证书或主机名。如果目标公司用的是自有专线理论上资产会落在特定运营商的 ASN 段里如果业务本身部署在公有云上那你就要结合证书域名和主机名来判断归属。能关联到目标域名和证书的 IP哪怕 IP 地理位置再奇怪也可能是真实业务资产。反过来什么都没有关联的“裸 IP”先放到低优先级别浪费时间。5.5 端口清单太长时的风险排序思路第一次做排查的人面对一大片端口列表往往容易焦虑。其实不用按经验给个排序思路优先处理那些管理通道和数据存储类的端口端口与服务风险信号加固建议3389 RDP远程管理面直接暴露限制来源 IP、开启网络级认证22/2222 SSH远程管理面直接暴露禁用密码登录、密钥认证、来源限制23 Telnet明文传输极危险全部替换为 SSH6379 Redis未授权访问高发启用认证、绑定内网、禁止公网3306 MySQL / 1433 MSSQL数据库直接暴露禁用公网监听、来源白名单445 SMB内网横向常见入口公网必须禁止9200 Elasticsearch未授权数据泄露高发启用认证、网络隔离5900 VNC远程桌面类弱口令高发禁止公网暴露原则很简单越是方便远程管理、越是存数据的端口暴露在公网的风险就越高。排查时优先盯这些端口处置顺序基本不会跑偏。做多了之后我自己最大的感受是工具之间没有绝对的优劣关键是你有没有一套清晰的排查逻辑。最开始我也喜欢只看 Shodan 的端口列表后来慢慢养成习惯任何外部资产排查都先用 Censys 拉证书和域名关联再用 Shodan 补服务和设备信息两边交叉比对整个资产暴露面才会立体起来。另外提醒一句所有扫描排查务必确认授权边界没有授权的测试既不专业也会给自己惹上麻烦。希望这一套流程能帮你在下一轮排查里少走点弯路。
RELATED

相关推荐

自定义操作符高级用法:C++/Python/Kotlin 实践与陷阱

自定义操作符高级用法:C++/Python/Kotlin 实践与陷阱

从第一次写出一个像样的运算符重载到真正觉得自己“会了”自定义操作符,中间隔了整整好几个项目的毒打。这玩意儿乍一看就是给类加上加减乘除,写几行operator函数,似乎没什么难度。但当你开始处理赋值语义、类型转换、链式调用,甚…

📅 2026/10/19 7:56:12
Python深度学习实战指南:用PyTorch从零构建图像分类模型

Python深度学习实战指南:用PyTorch从零构建图像分类模型

"Python深度学习:从入门到实战"这个标题,看起来像是某门课的目录,但它其实是一件很典型的事。我接触过不少想入行的朋友,拿着类似的教程啃了三个月,能搬别人的代码跑通一个猫狗分类,但让他换一个…

📅 2026/10/19 7:56:12
diagram-design不是画图:信息结构、图类型选型与工作流实践

diagram-design不是画图:信息结构、图类型选型与工作流实践

先说一个我自己的观察:在一个技术团队里,最容易被随便对待的交付物,往往就是图。代码要过Review,文档要校稿,但流程图、架构图、时序图经常是谁有空谁画,画完没人再看。直到有一天,一位刚入职的…

📅 2026/10/19 7:56:12
MORE NEWS

更多资讯

📰

开源CLI代码审查工具:基于LLM与Git Diff的轻量级自动化方案

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套可嵌入真实开发流水线的开源代码审查协作者“open-code-review”这个名字乍看平平无奇,甚至有点像某个被遗忘在GitHub角落的冷门仓库。但如果你最近在终端里敲过git commit,在P…

📰

SA522平台tac5x1x音频Codec驱动适配实战:从无声到正常

1. 为什么sa522上的tac5x1x适配成了硬骨头先交代一下背景。最近接手了一个项目,主控平台是高通的SA522系列,板子上挂的是一颗型号为tac5x1x的音频编解码芯片。任务看起来很简单:把驱动适配好,让音频通路能跑起来。结果这个"看…

📰

Spring AI知识库问答机器人:RAG完整实践与踩坑指南

RAG(Retrieval-Augmented Generation,检索增强生成)这几年几乎成了知识库问答机器人的默认架构,但真要在Spring AI里把一套知识库问答机器人完整跑通,很多人还是卡在第一步:文档进来了,向量也存…

📰

ArtCraft:面向物理实现的创意生产方法论

1. 项目概述:ArtCraft 不是“艺术手作”的简单拼贴,而是一套可落地的创意生产方法论ArtCraft 这个词乍看像英文单词组合,但实际在中文语境里它早已脱离字面意思,演变成一种被大量创作者自发使用的实践标签。我最早在某高校数字媒体…

📰

PyTorch复现Basisformer:锂电池SOC预测与部署实践

做电池系统的人应该都有这种体验:同一块电池,静置两小时测出来的开路电压能查表查到SOC,可一旦进入动态工况,电压曲线和SOC之间就没有那么强的对应关系了。和做BMS的同事聊起来,大家普遍觉得最烦的部分就是SOC&#xf…

📰

AIGC内容工业化实操指南:AI漫剧与短视频生产变现全流程

这两年做内容的人应该都有一个明显的感觉:“一个人干翻一个团队”的时代,真的来了。过去做一个漫剧号或者短视频账号,你需要编剧、画师、配音、剪辑、运营,至少三到五个人才能勉强维持日更。现在借助AIGC(AI生成内容&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬