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 默认扫什么,不是算法挑的,而是写死在源码里的几组"端口名单"。
- 名单在源码里集中定义。所有预定义端口组放在 common/config/constants.go,包括
MainPorts(默认主扫描清单,约 133 个)、WebPorts(常见 Web 服务端口)、DbPorts、ServicePorts、CommonPorts和AllPorts。 - 命令行参数决定用哪份名单。默认参数
-p的取值就是MainPorts的内容;你也可以直接把-p换成端口组名字或自定义端口。 - 每个组通过统一的映射表暴露给解析器。
GetPortGroups()函数把web、main、db、service、common、all这几个名字映射到对应的端口串,你在命令行里写组名时走的就是这张表。
所以"9100 在不在默认列表"这个问题,本质上就是"它还在不在这些常量字符串里"的问题。
9100 为什么被移出了默认清单
结论很直接:9100 是打印机的 RAW 端口,往它上面发探测数据可能真的触发一次打印,fscan 因此在 Issue #517 后把它从默认列表里删掉了。
- 端口属性冲突。9100 是网络打印服务的默认端口,不是"只读"的 Web 接口。扫描器发出的探测包对这类端口来说可能就是"要打印的字节流"。
- 副作用不划算。办公网里一台开着 9100 的打印机,被扫描器"问候"一次,可能就在纸上吐出一页乱码。轻则干扰办公,重则消耗纸张和打印任务队列。
- 修改方式很克制。你看源码注释就能明白意图——common/config/constants.go 里
WebPorts和MainPorts附近各留了一行注释:9100 已移除,该端口为打印机 RAW 端口,发送数据会触发打印。
这也是"为什么它这样做"的答案:收益(多一个端口指纹)远小于代价(打扰真实业务),所以宁可默认不扫,把决定权交给你。
一次扫描你实际会看到什么
fscan 对端口的判断分两步:先 TCP 全连接测试判断端口开没开,再对开放端口做协议特征识别(发探测包、比对响应)。输出大致长这样:
- 存活确认。ICMP 探测成功后先打印一行
(ICMP) Target '192.168.1.13' is alive。 - 开放端口逐行列出,格式是
IP:端口 open,比如192.168.1.13:9000 open。 - 命中 Web 指纹的端口会追加一行
WebTitle:http://IP:端口 状态码 标题,这是 Web 探测模块在端口指纹之后做的二次识别。 - 数据库、SSH、FTP 等服务会带出账号口令爆破结果,例如
MySQL:192.168.1.13:3306:root 123456。 - 结尾是
scan end,结果同时写入result.txt(可用-o改路径、-f换 json/txt 格式)。
也就是说,你看到的每一个open背后,都是"TCP 连接成功"这一个硬事实;后面的服务名和版本,才是探测包比对出来的推断。
想自己控制扫描范围,改这几个参数就够
最小操作集,按从粗到细排:
- 换整份名单:
./fscan -h 192.168.1.1/24 -p web,用端口组替代默认清单;组名有web、main、db、service、common、all。 - 精确指定端口:
./fscan -h 192.168.1.13 -p 21,22,80,3306,9100——想扫 9100?可以,自己显式加上,但前面说过它可能触发打印,请先确认目标。 - 排除个别端口:
-ep参数传逗号分隔的端口,如-ep 9100,适合"全都要但少几个"的场景。 - 端口数量大时用文件:
-pf指定端口文件,每行一个端口或范围,比在命令行里贴一串长列表好维护。 - 全端口扫描:
-p 1-65535对应AllPorts,耗时和并发压力都上一个量级,配合-t调线程数使用。
另外提醒:默认超时、重试等由内置配置管理,你不需要为了"能不能扫到"额外开什么开关——默认 133 个端口覆盖内网里绝大多数真实服务。
容易踩的坑
- 别假设老版本行为还在。9100 是"曾经默认扫、现在默认不扫"的端口,拿旧教程对照新版本的输出,对不上很正常。
-p和-ep是两套逻辑。前者整体替换默认清单,后者只在当前清单上做减法,写反了会得到和预期完全不同的端口集合。- 端口 open 不等于服务安全。fscan 会顺手做指纹、爆破和 Web 标题识别,这些动作本身也在向目标发包,生产环境扫描前最好和资产方打招呼。
- 代理环境下端口状态可能误判(项目历史修复项里有"代理端口误判"),如果你挂着代理扫描,发现某端口死活不出现或乱报,先怀疑这条。
- 对打印机、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),仅供参考