Skip to content

hackliu/NetRadar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NetRadar - Network Asset Discovery & Port Scanner

Go Version License Platform

纯 C/S 架构的跨平台内网资产发现与端口扫描桌面应用。完全采用 Go 语言开发,基于 Fyne 原生 GUI 框架,零 Web 依赖。

Author


📖 目录


🚀 功能特性

核心扫描引擎

模块 功能 技术细节
IP 存活探测 多模式主机发现 ICMP / ICMPv6 / TCP / UDP / ARP / NDP / SCTP,支持混合模式交叉验证与置信度评分
端口扫描 10 种扫描方式 TCP Connect / SYN / ACK / NULL / FIN / Xmas / Window / Maimon / UDP / SCTP INIT
服务指纹识别 服务与版本检测 内置 62 个 Nmap Service Probes + Rapid7 Recog 指纹,支持 TLS/SSL 证书链分析
操作系统识别 被动 OS 指纹 TTL 分析、TCP 窗口大小、SMB 协商、HTTP Server 头、SSH Banner 综合推断
信息采集 13 个采集插件 NetBIOS / LLMNR / mDNS / UPnP SSDP / SNMP / SMB / SSH / HTTP / FTP / SMTP / Reverse DNS / ARP / OS Fingerprint

高级功能

  • CVE 漏洞关联: 基于离线 CVE 精简库的服务漏洞风险提示(严重/高危/中危/低危四级)
  • 网络路径追踪: UDP / ICMP / TCP 多协议 Traceroute
  • 服务深度枚举: SMB 共享列表、SNMP 系统信息、数据库(MySQL/PG/MSSQL/Redis/Mongo/ES)版本探测
  • Docker/K8s 检测: 自动识别容器化和编排平台服务
  • 定时扫描: 内置 Cron 调度器,支持周期性自动化扫描任务
  • 基线管理: 扫描结果标记为基线,后续自动对比变更

桌面 GUI

  • 纯原生界面: 基于 Fyne 工具包,OpenGL/Metal/DirectX 渲染,零 Web 依赖
  • 暗色/亮色主题: 内置专业暗色主题(默认)和亮色主题
  • 多标签结果: 存活主机、端口扫描、统计仪表盘、会话管理
  • 右键上下文菜单: 复制 IP/端口/Banner、浏览器打开 HTTP 服务、SSL 证书查看
  • 自适应布局: 配置面板 30% + 结果区 70%,可拖拽调整
  • 系统托盘: 最小化到托盘,后台持续运行
  • 桌面通知: 扫描完成自动弹出通知

CLI 命令行

scantool-cli alive     # 主机存活探测
scantool-cli portscan  # 端口扫描
scantool-cli fullscan  # 全功能扫描(存活 + 端口 + 指纹)
scantool-cli profile   # 管理扫描配置文件
scantool-cli update    # 更新指纹数据库
scantool-cli version   # 显示版本信息

数据管理

  • 会话保存/加载: 扫描结果持久化存储,支持历史回看
  • 会话对比: 两次扫描结果差异分析(新增/消失/变更)
  • 多格式导出: CSV / JSON / Excel / HTML / Markdown / PDF
  • 扫描 Profile: 内置快速/标准/深度三种预设,支持自定义导入导出
  • 指纹库在线更新: 一键从官方源下载最新指纹,SHA256 校验 + 自动备份

国际化

  • 简体中文(默认)、English 双语言支持
  • GUI 运行时切换语言(需重启生效)

🖥️ 快速开始

系统要求

操作系统 最低版本 备注
Windows 10 / 11 (64-bit) SYN 扫描需安装 Npcap
macOS 11+ (Intel / Apple Silicon) SYN 扫描需 root 权限
Linux X11 / Wayland 系统托盘需 libappindicator;SYN 扫描需 root 或 CAP_NET_RAW

下载预编译二进制

GitHub Releases 下载对应平台的最新版本:

平台 文件
Windows 64-bit NetRadar-windows-amd64.zip
Linux 64-bit NetRadar-linux-amd64.tar.gz
macOS Intel NetRadar-darwin-amd64.tar.gz
macOS Apple Silicon NetRadar-darwin-arm64.tar.gz

🔧 编译构建

环境准备

# 需要 Go 1.22+
go version

# 克隆项目
git clone https://github.com/BI1IHA/NetRadar.git
cd NetRadar

# 安装依赖
go mod download

编译 CLI(无 GUI 依赖,全平台)

# Windows
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar-cli.exe ./cmd/scantool-cli

# Linux
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar-cli-linux ./cmd/scantool-cli

# macOS Intel
GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar-cli-darwin-amd64 ./cmd/scantool-cli

# macOS Apple Silicon
GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar-cli-darwin-arm64 ./cmd/scantool-cli

编译 GUI(需要 CGO + 平台图形库)

# Windows(需要 GCC + MinGW)
CGO_ENABLED=1 GOOS=windows go build -ldflags="-s -w -H windowsgui -X main.Version=1.0.0" -o dist/netradar.exe ./cmd/scantool

# Linux(需要 X11/Wayland 开发库)
CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar ./cmd/scantool

# macOS(需要 Xcode Command Line Tools)
CGO_ENABLED=1 go build -ldflags="-s -w -X main.Version=1.0.0" -o dist/netradar-darwin ./cmd/scantool

使用 Makefile

make build-cli      # 编译 CLI
make build-gui      # 编译 GUI
make build-all      # 全平台交叉编译 CLI
make test           # 运行测试
make vet            # 代码检查
make release        # 创建发布包

📚 使用指南

GUI 桌面模式

# Windows
.\netradar.exe

# Linux / macOS
./netradar

界面布局:

  • 左侧配置面板: 输入目标 IP/CIDR,选择探测方式和扫描类型,调节速率参数
  • 右侧结果区域: 四个标签页(存活主机、端口扫描、扫描统计、会话管理)
  • 底部状态栏: 进度条、实时扫描速率、已用时间
  • 底部日志面板: 可展开,支持按级别过滤

键盘快捷键:

快捷键 功能
Ctrl+Enter 开始扫描
Escape 停止扫描
Ctrl+S 保存当前会话
Ctrl+E 导出结果
Ctrl+Q 退出程序
F5 更新指纹库

CLI 命令行模式

存活探测

# ICMP Ping(最快速)
netradar-cli alive -t 192.168.1.0/24 -m icmp

# 混合模式(高准确率,推荐)
netradar-cli alive -t 192.168.1.0/24 -m hybrid -o alive.json

# TCP Ping 自定义端口
netradar-cli alive -t 10.0.0.0/16 --tcp-ports 22,80,443,3389 -m tcp

# 排除特定 IP
netradar-cli alive -t 192.168.0.0/16 --exclude 192.168.1.0/24

端口扫描

# Top 1000 端口 TCP SYN 扫描
netradar-cli portscan -t 192.168.1.1 --ports top1000 -s tcp_syn

# 自定义端口范围
netradar-cli portscan -t 192.168.1.0/24 --port-range 80,443,8000-8080,3306,6379

# UDP 扫描(较慢)
netradar-cli portscan -t 192.168.1.1 --ports top100 -s udp

# 全端口扫描
netradar-cli portscan -t 192.168.1.1 --ports all -s tcp_connect

全功能扫描

# 存活探测 + 端口扫描 + 指纹识别
netradar-cli fullscan -t 10.0.0.0/24 --ports top100 -o full_result.json

# 输出为 CSV 格式
netradar-cli fullscan -t 192.168.1.0/24 -o result.csv --output-format csv

# 静默模式 + 管道处理
netradar-cli alive -t 10.0.0.0/24 -o - -q | jq '.[] | .IP'

目标格式

# 单一 IP
192.168.1.1

# CIDR 网段
192.168.1.0/24
10.0.0.0/8
2001:db8::/64

# IP 范围
192.168.1.1-192.168.1.254

# 混合格式(逗号分隔)
192.168.1.1,10.0.0.0/24,172.16.1.1-172.16.1.50

# 从文件导入
-t @targets.txt

📁 项目结构

NetRadar/
├── cmd/
│   ├── scantool/             # GUI 桌面应用入口
│   └── scantool-cli/         # CLI 命令行入口(6 个子命令)
├── internal/
│   ├── engine/
│   │   ├── alive/            # 主机存活探测(ICMP/TCP/UDP/ARP/NDP)
│   │   ├── portscan/         # 端口扫描(10 种方式 + 自适应速率)
│   │   ├── fingerprint/      # 指纹匹配引擎(62 探针 + TLS/HTTP)
│   │   ├── enrich/           # 信息采集插件(13 个)
│   │   └── traceroute/       # 多协议路径追踪
│   ├── config/               # 配置管理 + Profile 系统
│   ├── model/                # 数据模型与类型定义
│   ├── storage/              # 会话持久化 + 对比 diff
│   ├── update/               # 指纹库/应用更新(SHA256 校验)
│   ├── scheduler/            # Cron 定时扫描调度器
│   ├── netutil/              # IP 解析/速率控制/网络工具
│   ├── oui/                  # OUI 厂商数据库(1000+ 条目)
│   ├── cve/                  # CVE 关联查询
│   ├── lock/                 # 界面锁定模式
│   ├── util/                 # 辅助工具(IP 计算/DNS/编码/WHOIS)
│   ├── report/               # 报告生成(PDF/HTML/Markdown)
│   ├── i18n/                 # 国际化(中/英)
│   └── logger/               # 结构化日志(slog)
├── gui/
│   ├── scancontroller.go     # 扫描生命周期管理
│   ├── notify.go             # 桌面通知 + 系统托盘
│   ├── theme/                # 自定义亮/暗主题
│   ├── panels/               # 5 个 UI 面板
│   └── dialogs/              # 9 个对话框
├── assets/                   # 嵌入资源(配置/Profile)
├── fingerprints/             # 嵌入式指纹库
├── build/                    # 构建与打包脚本
├── Makefile                  # 构建/测试/打包
├── config.example.json       # 配置文件示例
└── README.md

统计: 62 个 Go 源文件 · ~29,000 行代码 · 26 个包 · 6 个测试包


⚙️ 配置说明

配置文件位置

操作系统 路径
Windows %APPDATA%\scantool\config.json
macOS ~/Library/Application Support/scantool/config.json
Linux ~/.config/scantool/config.json

主要配置项

{
  "theme": "dark",              // 主题: dark / light
  "language": "zh-CN",          // 语言: zh-CN / en-US
  "max_concurrency": 1000,      // 全局最大并发连接数
  "default_timeout": 3000000000, // 默认超时(纳秒,3 秒)
  "default_retries": 2,         // 默认重试次数
  "proxy": "",                  // HTTP 代理地址
  "auto_clean_days": 90,        // 历史会话自动清理天数
  "lock_timeout": 1800000000000 // 界面锁定超时(纳秒,30 分钟)
}

完整配置项参见 config.example.json

扫描 Profile

内置三套预设配置:

Profile 端口范围 探测方式 适用场景
Quick Scan Top 100 ICMP + TCP 快速网络摸底
Standard Scan Top 1000 ICMP + TCP + ARP 常规资产盘点
Deep Scan 全端口 全部方法 深度安全评估

🔒 权限说明

功能 Windows macOS Linux
TCP Connect 扫描 ✅ 标准用户 ✅ 标准用户 ✅ 标准用户
TCP SYN 扫描 需 Npcap 需 root 需 root / CAP_NET_RAW
ICMP Ping 需管理员 需 root 需 root / CAP_NET_RAW
ARP Ping 需 Npcap ❌ 不支持 需 root
NDP (IPv6) 需 Npcap 需 root 需 root

无特权时自动降级: 若检测到权限不足,自动降级为 TCP Connect 模式,确保基本扫描功能可用。


🏗️ 技术架构

┌──────────────────────────────────────┐
│           GUI 层 (gui/)              │
│      Fyne 原生渲染                   │
│      (OpenGL/Metal/DirectX)          │
└──────────────┬───────────────────────┘
               │ Channel + 回调
┌──────────────▼───────────────────────┐
│        应用逻辑层 (internal/)        │
│  配置 / 调度 / 会话 / 报告           │
└──────────────┬───────────────────────┘
               │
┌──────────────▼───────────────────────┐
│     扫描引擎核心 (engine/)           │
│  存活探测 / 端口扫描 / 指纹匹配      │
│  信息采集 / 路径追踪 / CVE 关联      │
└──────────────┬───────────────────────┘
               │
┌──────────────▼───────────────────────┐
│    数据与指纹库 (assets/ + ~/.config/)│
│  nmap-probes / Recog / OUI / CVE     │
└───────────────────────────────────────┘

关键技术选型

组件 技术 说明
GUI 框架 Fyne v2.5+ 跨平台原生渲染,无 Web 依赖
网络包操作 gopacket + pcap + x/net 原始套接字构造与捕获
并发模型 Goroutine + Worker Pool + Token Bucket 精细化速率控制
指纹解析 自研正则状态机 兼容 Nmap probes 全部指令
配置存储 encoding/json + embed JSON 本地文件 + 编译期嵌入
日志系统 log/slog (Go 1.21+) 结构化日志,支持轮转
CLI 框架 spf13/cobra 子命令路由与参数解析
国际化 golang.org/x/text 中英双语支持

❓ FAQ

Q: 为什么 SYN 扫描提示权限不足?

A: TCP SYN 半开扫描需要构造原始网络包,这需要系统最高权限。Windows 下请安装 Npcap;Linux/macOS 下请使用 sudo 运行。也可以使用 TCP Connect 模式(无需特权)。

Q: 指纹库显示"built-in",如何在线更新?

A: 工具 → 更新指纹库 → 点击"Update Selected"即可从官方 GitHub 源下载最新指纹库文件。更新前会自动备份当前版本。

Q: 如何进行定时自动扫描?

A: 会话管理 → 定时任务 → 添加任务,设置 Cron 表达式和目标参数即可。例如 0 2 * * 0 表示每周日凌晨 2 点执行。

Q: 如何对比两次扫描结果?

A: 首先完成两次扫描并保存会话。然后在会话管理中选择两个会话 → 点击"对比",系统会自动计算主机/端口/服务的变化。

Q: macOS 提示"无法验证开发者"怎么办?

A: 在系统设置 → 隐私与安全性中点击"仍要打开",或使用 xattr -cr /path/to/netradar 命令移除隔离标记。


📜 第三方许可

本工具集成了以下开源组件,用户需遵守各组件的开源协议:

组件 许可协议 用途
Nmap Service Probes NPSL 服务指纹识别
Rapid7 Recog BSD-3 HTTP 组件指纹增强
IEEE OUI Database IEEE Public Data MAC 地址厂商识别
CVE / NVD Data MITRE / NIST Public 漏洞关联提示
Fyne GUI Toolkit BSD-3 跨平台 GUI 框架
gopacket BSD-3 网络包构造与捕获
Cobra Apache-2.0 CLI 框架

⚠️ 免责声明

本工具仅供授权的网络安全评估、资产管理和合规检查使用。

  • 使用者有义务确保在合法授权范围内使用本工具
  • 未经授权对网络进行扫描可能违反法律法规
  • 工具作者不对任何滥用行为承担责任
  • 首次启动时需同意授权使用协议方可进入主界面

📄 许可证

本项目采用 MIT License


👤 作者

刘大硕 (BI1IHA)


Built with Go + Fyne | NetRadar

About

NetRadar - Network Asset Discovery & Port Scanner. Pure native C/S desktop app built with Go + Fyne.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages