FScan 端口扫描:为什么扫描结果里会有 9100 端口?默认端口组与排除实操完整指南
【免费下载链接】fscan一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。(An intranet comprehensive scanning tool, enabling one-click automated, all-round vulnerability scanning)项目地址: https://gitcode.com/GitHub_Trending/fs/fscan
FScan 是一款内网综合扫描工具,一次运行即可完成存活探测、端口扫描、服务指纹识别和漏洞扫描。它的端口扫描默认覆盖约 150 个常用端口,而 9100 这个端口曾因出现在默认列表里、又会"偷偷触发打印"成为社区讨论的焦点。本文带你搞清楚它的来龙去脉,以及如何精确控制扫描的端口范围。
🤔 扫描结果里那个 9100 端口,到底从哪来的
用 FScan 扫一段内网时,有些老版本的结果里会冒出9100 open这样的行。很多人的第一反应是:我哪台机器跑着 9100 服务?
答案可能让你意外——9100 是网络打印(RAW Printing)的默认端口。办公网里的共享打印机、打印服务器经常开着它,而早期版本的 FScan 默认端口列表里包含了它,所以它"合法"地出现在结果里。更微妙的是,FScan 对开放端口默认会发送探测数据做服务识别,而往 9100 发数据会直接触发打印机出纸——于是办公区的打印机开始不停地吐测试页,FScan 的 Issue #517 就是这么来的 😄。
🔍 先看懂 FScan 的整体流程:为什么端口列表决定扫描行为
要理解 9100 为什么被扫,先看 FScan 端口扫描的完整链路。一次扫描按四步走:
- 存活探测:ICMP ping 确认哪些主机在线(
is alive); - 端口扫描:多线程并发对默认端口组做 TCP 连接测试,快速圈出开放端口;
- 服务指纹识别:从
core/portfinger/的探测库里挑选探测包发给开放端口,识别出 HTTP、Redis、MySQL 等协议; - 插件漏洞扫描:命中的服务交给对应插件(findnet、MS17-010、webpoc 等)做进一步检测。
第二步的"端口从哪来"由配置层的端口组决定。在 common/config/constants.go 中定义了五组预定义端口:
| 端口组 | 内容 | 典型场景 |
|---|---|---|
main(默认) | 约 150 个端口:SSH、SMB、数据库、中间件、监控等 | 不传-p时直接使用 |
web | Top 常见 Web 端口(80、443、8080、9090 等) | 专项 Web 资产梳理 |
db/service/common | 数据库 / 核心服务 / 最常用端口子集 | 缩小扫描面 |
all | 1-65535 | 全端口摸底 |
注意一个细节:web组里有 Prometheus 监控的9090,但9100 并不在其中。9100 之所以曾被默认扫到,是因为它属于"办公网高频出现的常见端口",而不是某个 Web 服务列表的成员——这也是很多人对它的误解来源。
🖨️ 为什么 9100 在默认列表里待了很久,现在又不见了
9100 的"罪名"很简单:它对主动探测不友好。
大多数端口的协议指纹探测是发请求、收 banner,代价可忽略;但 9100 是裸 TCP 打印通道,发进去的字节会被打印机当作业处理。FScan 的默认探测策略会对开放端口发送通用探测数据,这在内网里等于给每台打印机都塞了一张测试页。
于是 FScan 把 9100 从默认端口组中移除,并在代码里留了明确注释:
注意:9100 已移除,该端口为打印机 RAW 端口,发送数据会触发打印(Issue #517)
你可以在 common/config/constants.go 的WebPorts与MainPorts定义处看到这行注释。服务指纹库 core/portfinger/nmap-service-probes.txt 里也保留了Exclude T:9100-9107这样的排除规则——这套探测体系沿袭了 nmap 的保守做法:对已知会引发副作用的端口,宁可跳过。
所以,如果你在当前版本的 FScan 默认扫描结果里看到 9100,通常只有两种解释:一是你显式指定了包含 9100 的端口列表(-p或-pf),二是你用的还是老版本二进制。
🛠️ 三种方式精确控制 FScan 的端口扫描范围
控制端口范围不需要改源码,三个官方参数就够(参数定义见 common/flag.go):
方式一:-ep排除端口——保留默认端口组,只挖掉个别端口:
fscan -h 192.168.0.0/16 -ep 9100,9101方式二:-p显式指定端口——最精确的控制方式,支持端口组关键字(main、web、db、all)或手写端口串,也可以直接用host:port形式只扫单个端口:
fscan -h 192.168.1.13 -p 80,443,3306 fscan -h 192.168.1.13:9000方式三:-pf从文件加载端口——端口清单长时(比如几千个),维护成文件再传入更清爽:
fscan -h 192.168.0.0/16 -pf my_ports.txt另外提醒一句:排除端口的参数是-ep,不是-pn。如果你从别处抄了-pn 9100的命令,FScan 会直接报"flag provided but not defined",这也是一类常见坑。
⚠️ 涉及 9100 的三个常见误解与排查建议
- 误解一:9100 是监控端口。监控组件 Prometheus 用的是 9090,9100 只是打印端口。结果里看到 9090 才该去查监控暴露面,看到 9100 先找打印机 😅。
- 误解二:看到 9100 open 说明有异常服务。在办公网里它大概率就是打印服务器。排查思路很简单:先查资产台账确认设备归属,再确认该 TCP 通道是否需要保留——非必要开放端口建议直接关闭,这本身也是缩小攻击面的常规动作。
- 误解三:主动扫描必然无害。FScan 已经内置了"副作用意识":对 9100-9107 这类端口,探测体系里保留了排除规则,避免探测数据产生物理世界里的连锁反应。你在自定义端口列表时也应有同样的意识:扫描前评估目标端口是否会把探测数据当成业务数据(打印、固件升级、日志写入等)。
生产环境建议的稳妥姿势:明确用-p指定必要端口,配合-ep挖掉副作用端口,把扫描范围变成可复现、可审计的配置。
收尾:把端口列表变成你的决策
FScan 端口扫描的价值不在于"扫得多",而在于你清楚每个端口为什么被扫、扫它有什么代价。9100 的故事正是一个缩影:一个默认端口的取舍背后,是工具对"探测副作用"的权衡。
想深挖机制,可以直接看端口组定义 common/config/constants.go、参数注册 common/flag.go,以及服务指纹识别引擎 core/portfinger/;插件层的端口支持约束(例如 NetBIOS 只支持 137/139)也值得在定制扫描方案时留意。
【免费下载链接】fscan一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。(An intranet comprehensive scanning tool, enabling one-click automated, all-round vulnerability scanning)项目地址: https://gitcode.com/GitHub_Trending/fs/fscan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考