fscan 为什么不再默认扫描 9100 端口:端口探测机制解析
2026/9/18 5:24:39 网站建设 项目流程

fscan 为什么不再默认扫描 9100 端口:端口探测机制解析

【免费下载链接】fscan一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。(An intranet comprehensive scanning tool, enabling one-click automated, all-round vulnerability scanning)项目地址: https://gitcode.com/GitHub_Trending/fs/fscan

内网扫描工具 fscan 跑完一轮默认扫描后,有人翻结果发现:9100 这个端口居然不见了。它明明出现在常用的 Web 端口清单里,历史上也常被用来暴露 Prometheus 监控面板,为什么 fscan 的默认列表里把它拿掉了?这不是 bug,而是一次刻意的取舍。这篇机制解析带你把 fscan 的端口探测从"选哪些端口"到"怎么判断端口活着"一步步拆开看,并给你控制扫描范围的最小操作集。

一个端口是怎么被挑进扫描列表的

先给结论:fscan 默认扫什么,不是算法挑的,而是写死在源码里的几组"端口名单"。

  1. 名单在源码里集中定义。所有预定义端口组放在 common/config/constants.go,包括MainPorts(默认主扫描清单,约 133 个)、WebPorts(常见 Web 服务端口)、DbPortsServicePortsCommonPortsAllPorts
  2. 命令行参数决定用哪份名单。默认参数-p的取值就是MainPorts的内容;你也可以直接把-p换成端口组名字或自定义端口。
  3. 每个组通过统一的映射表暴露给解析器。GetPortGroups()函数把webmaindbservicecommonall这几个名字映射到对应的端口串,你在命令行里写组名时走的就是这张表。

所以"9100 在不在默认列表"这个问题,本质上就是"它还在不在这些常量字符串里"的问题。

9100 为什么被移出了默认清单

结论很直接:9100 是打印机的 RAW 端口,往它上面发探测数据可能真的触发一次打印,fscan 因此在 Issue #517 后把它从默认列表里删掉了。

  1. 端口属性冲突。9100 是网络打印服务的默认端口,不是"只读"的 Web 接口。扫描器发出的探测包对这类端口来说可能就是"要打印的字节流"。
  2. 副作用不划算。办公网里一台开着 9100 的打印机,被扫描器"问候"一次,可能就在纸上吐出一页乱码。轻则干扰办公,重则消耗纸张和打印任务队列。
  3. 修改方式很克制。你看源码注释就能明白意图——common/config/constants.go 里WebPortsMainPorts附近各留了一行注释:9100 已移除,该端口为打印机 RAW 端口,发送数据会触发打印。

这也是"为什么它这样做"的答案:收益(多一个端口指纹)远小于代价(打扰真实业务),所以宁可默认不扫,把决定权交给你。

一次扫描你实际会看到什么

fscan 对端口的判断分两步:先 TCP 全连接测试判断端口开没开,再对开放端口做协议特征识别(发探测包、比对响应)。输出大致长这样:

  1. 存活确认。ICMP 探测成功后先打印一行(ICMP) Target '192.168.1.13' is alive
  2. 开放端口逐行列出,格式是IP:端口 open,比如192.168.1.13:9000 open
  3. 命中 Web 指纹的端口会追加一行WebTitle:http://IP:端口 状态码 标题,这是 Web 探测模块在端口指纹之后做的二次识别。
  4. 数据库、SSH、FTP 等服务会带出账号口令爆破结果,例如MySQL:192.168.1.13:3306:root 123456
  5. 结尾是scan end,结果同时写入result.txt(可用-o改路径、-f换 json/txt 格式)。

也就是说,你看到的每一个open背后,都是"TCP 连接成功"这一个硬事实;后面的服务名和版本,才是探测包比对出来的推断。

想自己控制扫描范围,改这几个参数就够

最小操作集,按从粗到细排:

  1. 换整份名单:./fscan -h 192.168.1.1/24 -p web,用端口组替代默认清单;组名有webmaindbservicecommonall
  2. 精确指定端口:./fscan -h 192.168.1.13 -p 21,22,80,3306,9100——想扫 9100?可以,自己显式加上,但前面说过它可能触发打印,请先确认目标。
  3. 排除个别端口:-ep参数传逗号分隔的端口,如-ep 9100,适合"全都要但少几个"的场景。
  4. 端口数量大时用文件:-pf指定端口文件,每行一个端口或范围,比在命令行里贴一串长列表好维护。
  5. 全端口扫描:-p 1-65535对应AllPorts,耗时和并发压力都上一个量级,配合-t调线程数使用。

另外提醒:默认超时、重试等由内置配置管理,你不需要为了"能不能扫到"额外开什么开关——默认 133 个端口覆盖内网里绝大多数真实服务。

容易踩的坑

  1. 别假设老版本行为还在。9100 是"曾经默认扫、现在默认不扫"的端口,拿旧教程对照新版本的输出,对不上很正常。
  2. -p-ep是两套逻辑。前者整体替换默认清单,后者只在当前清单上做减法,写反了会得到和预期完全不同的端口集合。
  3. 端口 open 不等于服务安全。fscan 会顺手做指纹、爆破和 Web 标题识别,这些动作本身也在向目标发包,生产环境扫描前最好和资产方打招呼。
  4. 代理环境下端口状态可能误判(项目历史修复项里有"代理端口误判"),如果你挂着代理扫描,发现某端口死活不出现或乱报,先怀疑这条。
  5. 对打印机、IoT 这类"端口即业务"的设备,宁可显式-ep排除,也不要在默认扫描里赌它没副作用。

延伸阅读:端口组常量与映射表见 common/config/constants.go,命令行参数定义在 common/flag.go,Web 端口探测逻辑在 core/web_scanner.go。

【免费下载链接】fscan一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。(An intranet comprehensive scanning tool, enabling one-click automated, all-round vulnerability scanning)项目地址: https://gitcode.com/GitHub_Trending/fs/fscan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询