首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源|cscan 分布式资产安全扫描平台诞生记

开源|cscan 分布式资产安全扫描平台诞生记

作者头像
Gcow安全团队
发布2025-12-31 10:20:30
发布2025-12-31 10:20:30
3170
举报
文章被收录于专栏:Gcow安全团队Gcow安全团队

该扫描器作者为Gcow安全团队-唐小风,写下这段文字的时候,已经是凌晨三点。

屏幕上 cscan 的控制台还在疯狂跳动,一行行绿色的端口开放信息像瀑布一样流淌。看着任务管理器里几乎不仅不慢的 CPU 占用率,和那快得让我有点心惊肉跳的扫描进度,我长舒了一口烟气。

终于,我拥有了一个完全属于自己的、顺手的、不再臃肿的资产扫描工具。

做安全的朋友都知道,在这个圈子里,我们不仅缺漏洞,更缺好用的“铲子”。市面上的扫描器多吗?多,如过江之鲫。Nmap 是神,但它太重;Masscan 是快,但它太糙;各种语言写的小脚本满天飞,但一遇到大规模资产梳理,那个效果和资源占用能让你怀疑人生。

作为一名甲方安全建设者,我受够了在这个工具和那个工具之间切来切去,受够了维护那一堆支离破碎的脚本。

“为什么不能有一个既轻量、又高性能,还能把端口、指纹、POC 扫描一条龙搞定的东西?”

这个念头一旦产生,就像野草一样疯长。于是,我决定造轮子。这个轮子,就叫 cscan

index.png
index.png

一、 为什么是 Go-Zero?架构师的执念

决定重写的那一刻,我毫不犹豫地抛弃了Rust。不是 Rust 不好,而是我不会。

我要的是Go

但是,光用 Go 写个脚本是不够的。我要做的是一个平台,一个可以持续迭代、甚至可以微服务化的系统。这时候,go-zero 闯入了我的视野。

很多人问我,写个扫描器而已,至于上微服务框架吗? 我的回答是:至于。非常有必要。

Go-Zero 这种“契约优先”(API First)的设计理念,简直是强迫症患者的福音。在写下一行逻辑代码之前,我先用 .api 文件定义好了整个系统的灵魂。

你看,这是 cscan 的骨架,干净得让我着迷:

代码语言:javascript
复制
// 核心设计:任务、扫描、结果三权分立
syntax = "v1"

info (
	title:   "cscan 扫描平台核心 API"
	desc:    "集成端口扫描、指纹识别和漏洞扫描功能的API"
	author:  "txf"
	version: "v1.0.0"
)

// ... (省略部分鉴权代码)

// 任务系统:一切扫描的起点
@server (
	jwt:   Auth
	group: task
)
service newproject-api {
@doc "创建扫描任务"
@handler createTask
	post /api/task/create (CreateTaskReq) returns (CreateTaskReply)

    // ... 实时监控任务状态
@handler getTaskStatus
get /api/task/status/:taskId (GetTaskStatusReq) returns (GetTaskStatusReply)
}

// 结果系统:数据落地的港湾
@server (
	jwt:   Auth
	group: scan
)
service newproject-api {
@doc "获取端口扫描结果"
@handler getPortScanResults
get /api/scan/port/:taskId (GetPortScanResultsReq) returns (GetPortScanResultsReply)

    // ... 指纹与POC结果
@handler getFingerprintResults
get /api/scan/fingerprint/:taskId (GetFingerprintResultsReq) returns (GetFingerprintResultsReply)
}

通过 goctl 一键生成代码的那一刻,我感到了前所未有的掌控感。

代码语言:javascript
复制
goctl api go -api cscan.api -dir .

随着这行命令敲下,路由、Handler、Logic 层瞬间就位。我不再需要去纠结项目目录结构,不再需要去手写繁琐的 HTTP 解析。我只需要专注于最核心的业务逻辑:怎么让扫描更快、更准。

process.png
process.png

这种开发体验,真的,一旦习惯了就回不去了。

二、 核心能力:不仅是快,更是全

cscan 不仅仅是一个端口扫描器,我给它的定义是“资产发现与风险识别的一站式平台”。

  1. 极速端口扫描:利用 Go 的 goroutine 优势,我直接调用nabbu的SDK作为端口扫描组件。它像一只不知疲倦的猎犬,嗅探着每一个开放的端口,同时还能精准识别 Banner 和协议。
  2. 指纹识别(Fingerprint):端口开了只是第一步。它是 Nginx 还是 Apache?是 Tomcat 还是 WebLogic?我通过近三年互联网公开收集整理的指纹集成了大量的指纹库,请求发出,瞬间回传技术栈信息。这对于后续的渗透测试至关重要。(同时只要扫描过的目标,后续新增自定义指纹,都能做到快速识别)
指纹管理
指纹管理
资产管理
资产管理
  1. POC 漏洞扫描:基于指纹识别的结果,自动调度对应的 POC 进行验证。再也不用盲目地打 Payload 了,精准打击,一击必中。
POC管理
POC管理

而在数据结构的设计上,我力求简洁明了:

代码语言:javascript
复制
// 扫描结果的标准化定义
type (
	ScanResult {
		Type string      `json:"type"` // 结果类型(portscan, fingerprint, pocscan)
		Data interface{} `json:"data"` // 泛型数据,灵活兼容
	}
    // ...
	FingerprintResult {
		URL          string            `json:"url"`
		Title        string            `json:"title"`
		Server       string            `json:"server"`
		Technologies []string          `json:"technologies"` // 这一眼就能看透对方底裤
	}
)
代码语言:javascript
复制

三、 前端 Vue3 + Element Plus:给极客的温柔

作为一个常年写后端的直男,写前端对我来说无异于绣花。

但是,我不希望 cscan 只是一个冰冷的命令行工具。我希望它有一个现代化的、清爽的 Dashboard。

于是我硬着头皮上了 Vue3 + Element Plus

代码语言:javascript
复制
npm create vite@latest ui -- --template vue

那个周末,我为了调一个 CSS 的 Flex 布局,陪AI模型熬掉了半盒烟。但当看到扫描任务在网页上实时滚动进度条,当看到扫描结果以漂亮的表格呈现时,我觉得一切都值了。

现在,你只需要简单几步,就能拥有这套前后端分离的现代化扫描平台:

代码语言:javascript
复制
git clone https://github.com/tangxiaofeng7/cscan.git
cd cscan
# 直接启动
docker-compose up -d --build

四、 开源的心声:我想换你一个 Star

说实话,把这个项目开源出来,我是有过犹豫的。

每一行代码都是AI的心血,每一个逻辑判断都藏着我对网络攻防的理解。但转念一想,开源精神不就是“独乐乐不如众乐乐”吗?

既然我已经造好了这个轮子,为什么不让更多的人用上它?也许你会发现我代码里的 Bug(请务必提 Issue!),也许你会觉得某个功能还可以优化(欢迎 PR!),也许它能帮你快速完成了某次紧急的资产盘点任务。

如果 cscan 能在你的工作中起到哪怕一点点的帮助,那我在那些深夜里敲击键盘的声音,就有了回响。

项目地址:

https://github.com/tangxiaofeng7/cscan

如果你觉得这个项目还不错,或者你认可这种 Go-Zero + Vue3 的全栈开发模式,请不要吝啬你的 Star

那颗小小的星星,对于坐在屏幕前的我来说,是最大的鼓励,也是我继续维护、更新、死磕性能的动力。

兄弟们,Star 走一波,扫码加入工具交流群,我们 GitHub 见!


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Gcow安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 为什么是 Go-Zero?架构师的执念
  • 二、 核心能力:不仅是快,更是全
  • 三、 前端 Vue3 + Element Plus:给极客的温柔
  • 四、 开源的心声:我想换你一个 Star
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档