基于 Go 和 HTMX 构建,能自动扫描并识别网络中的所有设备,支持 IPv4 主动扫描和 IPv6 被动监听。 还能够进行深度解析设备信息,帮我们直接获取 MAC 地址、硬件厂商、主机名甚至操作系统类型。 并且内置可视化的 Web 仪表盘,能直观地看到网络拓扑和设备在线状态。 提供一键安装脚本,会自动检测系统类型并安装所需依赖,完成后启动即可使用。 适合网络管理员或者想排查家里有没有“蹭网”设备的朋友收藏备用。

先决条件

安装 reconYa 之前,请确保您的系统已安装以下软件:

  • Go 1.21 或更高版本-下载 Go
  • Node.js 18 或更高版本-下载 Node.js
  • nmap - 网络扫描工具(使用说明如下)

本地安装(推荐)

一键安装

1
2
3
git clone https://github.com/Dyneteq/reconya.git
cd reconya
./install.sh

该脚本将检查是否安装了 Node.js 18+ 和 npm,并在需要时引导您完成安装。

这将:

  • 检测您的操作系统(macOS、Windows、Debian 或基于 Red Hat 的系统)
  • 安装所有必需的依赖项(Go、nmap)
  • 配置 nmap 权限以进行 MAC 地址检测
  • 设置 reconYa 应用程序
  • 安装所有 Node.js 依赖项

安装完成后,请使用以下命令:

1
2
3
4
npm run start    # Start reconYa
npm run stop # Stop reconYa
npm run status # Check service status
npm run uninstall # Uninstall reconYa

然后打开浏览器,访问:http://localhost:3000
默认登录名:admin/password

手动安装

如果您更喜欢手动安装,或者脚本在您的系统上无法运行:

先决条件

  1. 安装 Go(1.21 或更高版本):https://golang.org/dl/

  2. 安装 Node.js(18 或更高版本):https://nodejs.org/

  3. 安装 nmap

    1
    2
    3
    4
    5
    6
    7
    8
    # macOS
    brew install nmap

    # Ubuntu/Debian
    sudo apt-get install nmap

    # RHEL/CentOS/Fedora
    sudo yum install nmap # or dnf install nmap
  4. 授予 nmap 权限(用于 MAC 地址检测):

    1
    2
    sudo chown root:admin $(which nmap)
    sudo chmod u+s $(which nmap)

设置和运行

  1. 克隆仓库:

    1
    2
    git clone https://github.com/Dyneteq/reconya.git
    cd reconya
  2. 设置后端:

    1
    2
    3
    4
    cd backend
    cp .env.example .env
    # Edit .env file to set your credentials
    go mod download
  3. 开始申请:

    1
    2
    cd backend
    go run ./cmd

    Windows 用户:如果遇到 SQLite CGO 错误,请使用:

    1
    2
    cd backend
    CGO_ENABLED=1 go run ./cmd

    scripts/start-windows.bat或者直接从项目根目录双击。

  4. 访问应用程序:

    • 打开浏览器:http://localhost:3008
    • 默认登录名:admin/ password(请查看您的.env配置文件以获取自定义凭据)

如何使用

  1. 使用您的凭据登录(默认:admin/ password
  2. 建立新网络
  3. 从下拉菜单中选择网络并开始扫描
  4. 设备会在被发现后自动显示在您的网络上。
  5. 点击设备即可查看详细信息,包括:
    • MAC地址和供应商信息
    • 打开端口并运行服务
    • 操作系统指纹
    • 设备屏幕截图(用于 Web 服务)
  6. 使用网络地图可视化设备位置
  7. 监控事件日志中的网络活动

IPv6被动监控

reconYa 包含先进的 IPv6 被动监控功能,可在网络扫描期间自动激活:

工作原理

  • 邻居发现协议 (NDP) - 监控 IPv6 邻居缓存中的活动设备
  • 接口监控- 检测网络接口上的 IPv6 地址
  • 自动分类- 识别链路本地地址、唯一本地地址和全局地址
  • 双栈集成- 通过 MAC 地址将 IPv6 地址链接到现有的 IPv4 设备

IPv6地址类型

  • 链路本地地址fe80::/10)- 本地网络段地址
  • 唯一本地fc00::/7)- 私有网络地址
  • 全球2000::/3)- 互联网可路由地址

特征

  • 被动检测- 不产生网络流量,仅监控现有流量
  • 实时更新- IPv6 地址显示在设备列表和详细信息中
  • 跨平台- 可在 Linux、macOS 和 Windows 上运行
  • 自动激活- 扫描时启动,闲置时停止

配置

编辑backend/.env文件进行自定义:

1
2
3
4
5
6
7
8
9
10
11
12
LOGIN_USERNAME=admin
LOGIN_PASSWORD=your_secure_password
DATABASE_NAME="reconya-dev"
JWT_SECRET_KEY="your_jwt_secret"
SQLITE_PATH="data/reconya-dev.db"

# IPv6 Monitoring Configuration
IPV6_MONITORING_ENABLED=true
IPV6_MONITOR_INTERFACES=
IPV6_MONITOR_INTERVAL=30
IPV6_LINK_LOCAL_MONITORING=true
IPV6_MULTICAST_MONITORING=false

架构

  • 后端:Go API,使用 HTML 模板和 SQLite 数据库(端口 3008)
  • Web界面:HTML和原生JS
  • 扫描:基于 nmap 集成的多策略网络发现
  • 数据库:SQLite 用于设备存储和事件日志记录

扫描算法

发现过程

Reconya 采用多层扫描方法,将 nmap 集成与原生 Go 实现相结合:

1. 网络发现(每 30 秒一次)

  • 多种 nmap 策略,带自动回退功能
  • ICMP ping 扫描(特权模式)
  • TCP 连接探测到常用端口(回退)
  • ARP 表查找以解析 MAC 地址

2. 设备识别

  • IEEE OUI 数据库用于供应商识别
  • 多方法主机名解析(DNS、NetBIOS、mDNS)
  • 通过 nmap 进行操作系统指纹识别
  • 基于端口和厂商的设备类型分类

3. 端口扫描(后台工作进程)

  • 扫描活动服务的前 100 个端口
  • 服务检测和横幅广告抓取
  • 并发扫描与工作池模式

4. Web 服务检测

  • 自动发现 HTTP/HTTPS 服务
  • 使用无头 Chrome 浏览器进行屏幕截图
  • 服务元数据提取(标题、服务器标头)

故障排除

常见问题

安装问题

  • 如果./install.sh失败,请尝试再次运行。sudo ./install.sh
  • 手动安装时,请确保已安装 Node.js 18 或更高版本。
  • 赶紧npm run status去检查一下缺少了什么
  • npm run install再次尝试运行

未找到设备

  • 运行npm run status以检查 nmap 是否已安装和配置
  • 请检查您是否与目标设备位于同一网段。

服务无法启动

  • 运行npm run stop以终止任何卡住的进程
  • 检查npm run status依赖关系问题
  • 请确保端口 3000 和 3008 可用。

缺少 MAC 地址

  • 运行npm run status以验证 nmap 权限
  • MAC 地址仅在同一网段内可见
  • 某些设备可能不会响应 ARP 请求。

权限被拒绝错误

  • 安装程序应自动处理 nmap 权限。
  • 如果问题仍然存在,请手动运行:sudo chmod u+s $(which nmap)

服务持续崩溃。

  • 检查依赖项是否已正确安装。npm run status
  • 请确认您的.env配置是否正确
  • 尝试停止并重新启动:npm run stop && npm run start

Windows SQLite CGO 错误

  • 如果您看到“二进制文件编译时使用了 ‘CGO_ENABLED=0’,go-sqlite3 需要 cgo 才能运行”:

    1
    2
    3
    4
    cd backend
    CGO_ENABLED=1 go run ./cmd
    # or for building:
    make build-cgo
  • 请确保您已安装 C 编译器(例如 TDM-GCC 或 Visual Studio 生成工具)。

卸载 reconYa

要彻底移除 reconYa 及其(可选)依赖项:

1
npm run uninstall

卸载过程将:

  • 停止所有正在运行的 reconYa 进程
  • 删除应用程序文件和数据
  • 移除 nmap setuid 权限
  • (可选)移除系统依赖项(Go、Node.js、nmap)

注意:由于系统依赖项可能被其他应用程序使用,因此在删除它们之前,系统会要求您确认。

GitHub:http://github.com/Dyneteq/reconya