emrecdr/netlens

GitHub: emrecdr/netlens

一款面向家庭网络的 Python CLI 安全审计工具,集设备发现、指纹识别、漏洞评估、流量分析、WiFi 安全检测和变更追踪于一体,帮助用户全面掌握局域网资产与风险状况。

Stars: 0 | Forks: 0

# NetLens [![版本](https://img.shields.io/github/v/release/emrecdr/netlens?display_name=tag&sort=semver&label=version&color=blue)](https://github.com/emrecdr/netlens/releases) [![Python](https://img.shields.io/badge/python-3.13%2B-blue)](https://www.python.org/downloads/) [![更新日志](https://img.shields.io/badge/changelog-keep%20a%20changelog-orange)](CHANGELOG.md) 一款 Python CLI 工具,可深度扫描本地网络以发现设备,按类型对其进行分类,评估其安全状况,分析流量模式,检测固件漏洞,审计 WiFi 安全,跟踪随时间推移的变更,并映射网络拓扑。 专为个人/家庭网络安全审计而构建。 ## 使用场景 - **家庭网络审计** — 发现您网络上的每一台设备,查看它们暴露了哪些端口,并获得可操作的安全修复建议 - **IoT 设备盘点** — 通过类型和置信度评分识别智能音箱、摄像头、集线器、打印机和其他 IoT 设备 - **安全评估** — 测试默认凭据、弱 TLS、过时固件、开放的管理面板以及已知的 CVE - **流量监控** — 捕获并分析每个设备的流量模式、DNS 查询和信标行为 - **变更检测** — 跟踪随时间出现/消失的设备,比较扫描结果,并在发生变更时获取警报 - **网络分区规划** — 获取分区建议(受信任/IoT/隔离区)和防火墙规则 - **WiFi 安全** — 检测流氓接入点、隐藏的 SSID 和弱加密 ## 系统要求 - **Python 3.13+** - **nmap** 系统二进制文件 ``` # macOS brew install nmap # Debian/Ubuntu sudo apt-get install nmap ``` ## 安装 ``` # Clone 并使用 uv 安装 git clone && cd netlens uv sync # 可选:macOS WiFi 扫描支持 uv sync --extra macos ``` ## 快速开始 ``` # 使用 root 进行完整扫描(效果最佳 — 启用 ARP、流量捕获、WiFi、OS 检测) sudo uv run netlens scan # 无 root 扫描(功能受限,无流量/WiFi) uv run netlens scan # 扫描特定 subnet sudo uv run netlens scan 192.168.1.0/24 # 查看安全发现 uv run netlens risks # 生成 HTML 报告 uv run netlens report ``` ## 命令 ### 扫描 | 命令 | 描述 | |---------|-------------| | `netlens scan [NETWORK]` | 完整的网络发现和安全审计 | | `netlens watch [NETWORK]` | 持续监控 — 设备变更时发出警报 | ### 分析 | 命令 | 描述 | |---------|-------------| | `netlens risks` | 按严重程度排序的安全发现及修复建议 | | `netlens traffic` | 每个设备的流量模式、DNS 查询、异常情况 | | `netlens segment` | 网络区域建议和防火墙规则 | | `netlens topology` | ASCII 网络拓扑图(网关 → 交换机 → 设备) | ### 历史记录与报告 | 命令 | 描述 | |---------|-------------| | `netlens history` | 列出过去的扫描及其设备/发现计数 | | `netlens diff ` | 比较两次扫描 — 新增、移除、变更的设备 | | `netlens report` | 生成自包含的 HTML 安全报告 | | `netlens devices` | 查看、标记和注释设备配置文件 | ### 设置 | 命令 | 描述 | |---------|-------------| | `netlens setup-geoip` | 下载 MaxMind GeoIP 数据库用于流量地理定位 | ### 全局标志 | 标志 | 描述 | |------|-------------| | `--version`, `-V` | 打印 `netlens ` 并退出 | | `--quiet`, `-q` | 抑制预检和后续步骤面板 | | `--no-color` | 禁用 ANSI 颜色(适用于 CI 日志) | | `--no-progress` | 禁用实时扫描仪表板 | | `--theme {auto,dark,light}` | 颜色主题变体 | ## 扫描选项 每个 `netlens scan` 标志、其功能及其影响的[阶段](#scan-pipeline)。显示了带有值标志的默认设置。 | 标志 | 默认值 | 作用 | 阶段 | |------|---------|--------------|-------| | `--full` | 关闭 (前 ~1000 个端口) | 扫描所有 65535 个 TCP 端口 | 2 (指纹识别) | | `--deep` | 关闭 | 启用 NSE 漏洞脚本、DHCP 流氓检测、SNMP 团体字符串探测以及流量捕获期间的 ARP 跟踪 | 1, 3, 6 | | `--ports TEXT` | — | 自定义端口列表(例如 `22,80,443` 或 `1-1024`)— 覆盖 `--full` | 2 | | `--timeout INT` | 10 | 每台主机的扫描超时时间(以秒为单位) | 2 | | `--capture-time INT` | 60 | 流量捕获持续时间(以秒为单位) | 6 | | `--skip-creds` | 关闭 | 跳过默认密码测试 (SSH/Telnet/HTTP) | 5 | | `--skip-traffic` | 关闭 | 跳过数据包捕获(速度更快,但会失去信标检测) | 6 | | `--skip-wifi` | 关闭 | 跳过 WiFi 环境扫描 | 7 | | `--skip-topology` | 关闭 | 跳过网络拓扑映射 | 扫描后 | | `--wifi-interface TEXT` | 自动检测 | 用于监听模式的 WiFi 接口(例如 `en0`) | 7 | | `--json` | 关闭 | 将结果以 JSON 格式输出到标准输出(机器可读) | 输出 | | `--verbose`, `-v` | 关闭 | 显示扫描持续时间和每个阶段的额外详情 | 输出 | ### 常见组合 ``` # 最重度的扫描 — 所有端口 + 深度检查(速度慢但彻底) sudo uv run netlens scan --full --deep # 快速分诊 — 仅发现和分类,无 creds/traffic/wifi uv run netlens scan --skip-creds --skip-traffic --skip-wifi # 自定义端口集(覆盖 --full) uv run netlens scan --ports 22,80,443,8080 # 更长的流量捕获,用于捕获低速率 beaconing sudo uv run netlens scan --capture-time 300 # 适配 CI / 日志的输出 uv run netlens --no-progress --no-color scan --json ``` ## 扫描流水线 NetLens 按顺序运行 7 个阶段。每个阶段都可以独立失败,而不会阻塞其他阶段。 | # | 阶段 | 作用 | 需要 root 权限? | |---|-------|-------------|-------------| | 1 | **发现** | ARP + mDNS + SSDP + DHCP 流氓检测 | 否(回退到 `arp -a`) | | 2 | **指纹识别** | nmap 端口/服务、MAC 供应商、SNMP 探测、横幅抓取、favicon 哈希 | 否(仅连接扫描) | | 3 | **SNMP 深度探测** | 接口表、ARP/路由表、团体字符串审计 | 否 | | 4 | **分类** | 设备类型分配(12 个类别)、固件提取、置信度评分 | 否 | | 5 | **安全审计** | 12 项并行安全检查(见下文) | 否 | | 6 | **流量分析** | 数据包捕获、DNS 提取、异常检测 | 是 | | 7 | **WiFi 安全** | 附近的网络、流氓 AP 检测、加密审计 | 是 | ### 安全检查(第 5 阶段) | 检查 | 严重程度 | 检测内容 | |-------|----------|----------------| | 默认凭据 | CRITICAL | 使用常见默认值(root/root, admin/admin)的 SSH/Telnet/HTTP 登录 | | CVE 查询 | CRITICAL–LOW | 通过 NVD API 根据 CPE/产品名称发现的已知漏洞 | | 固件过时 | HIGH | 设备固件落后于制造商的最新版本 | | TLS/SSL 分析 | HIGH–MEDIUM | 过期的证书、弱加密算法、自签名证书 | | 管理面板 | MEDIUM | 无需身份验证即可访问的 `/admin`、`/login`、`/console` | | UPnP 控制面 | HIGH | 接受 SOAP 命令的可控 UPnP 服务 | | MQTT 注入 | HIGH | 接受发布命令的未经身份验证的 MQTT 代理 | | REST API 暴露 | MEDIUM | 常见端口上未经身份验证的 API 端点 | | DNS 重绑定 | MEDIUM | 容易受到 DNS 重绑定攻击的设备 | | 协议安全 | MEDIUM | Telnet、FTP、未加密的 HTTP、弱 SSH 密码 | | HTTP 方法 | MEDIUM | 启用了危险的方法(PUT、DELETE、TRACE) | | 打印机漏洞 | MEDIUM | SNMP 团体字符串、默认管理密码 | ### 设备类型(第 4 阶段) 路由器、网关、托管交换机、智能家居集线器、智能音箱、智能电视、媒体播放器、媒体服务器、打印机、IP 摄像头、IoT 传感器、移动设备、单板计算机。 ## 权限级别 NetLens 自动检测权限并优雅降级: | 功能 | 带 `sudo` | 不带 `sudo` | |---------|------------|-----------------| | ARP 扫描 | 原始套接字(快速、完整) | `arp -a` 回退(仅限缓存) | | 端口扫描 | SYN 扫描 + 操作系统检测 | 仅连接扫描 | | 流量捕获 | 完整的数据包嗅探 | 跳过 | | WiFi 扫描 | 监听模式 / CoreWLAN | 跳过 | | LLDP/CDP 拓扑 | 被动帧嗅探 | 仅限网关 | | DHCP 流氓检测 | 监听流氓服务器 | 跳过 | | 安全检查 | 运行所有检查 | 运行所有检查 | ## 输出格式 所有命令均支持用于机器可读输出的 `--json`。终端表格会根据您的终端宽度自动调整列的可见性。 ### HTML 报告 ``` # 单次扫描报告 uv run netlens report # 特定扫描的报告 uv run netlens report --scan-id abc123 # 对比报告(前后) uv run netlens report --scan-id abc123 --compare def456 # 自定义输出路径 uv run netlens report -o my-report.html ``` 报告是自包含的 HTML 文件(所有 CSS 均为内联,无外部依赖)。 ## 数据存储 | 内容 | 位置 | |------|----------| | 扫描历史记录 + 设备配置文件 | `~/.netlens/history.db` (SQLite) | | HTML 报告 | `docs/reports/`(相对于工作目录) | | GeoIP 数据库 | `~/.netlens/geoip/`(可选) | ## GeoIP 设置(可选) 流量目的地地理定位需要免费的 MaxMind 数据库: 1. 在 [maxmind.com](https://www.maxmind.com/en/geolite2/signup) 创建一个免费账户 2. 生成一个许可证密钥 3. 运行:`uv run netlens setup-geoip` ## 默认端口集 NetLens 默认扫描 33 个常见的 IoT 端口: ``` 21, 22, 23, 25, 53, 80, 81, 443, 554, 631, 1883, 1900, 3000, 3689, 5000, 5353, 5683, 6668, 8000, 8008, 8009, 8080, 8443, 8883, 9000, 9100, 49152, 49153, 49154 ``` 使用 `--full` 扫描所有 65535 个端口,或使用 `--ports` 指定自定义列表。 ## 持续监控 ``` # Watch 模式 — 每 5 分钟扫描一次,发生变化时发出警报 sudo uv run netlens watch # 自定义间隔(秒) sudo uv run netlens watch -i 600 # 轻量级 watch(跳过 traffic 和 WiFi) sudo uv run netlens watch --skip-traffic --skip-wifi ``` ## 网络分段 ``` # 从最新扫描获取 zone 建议 uv run netlens segment # Verbose — 显示每次分配的依据 uv run netlens segment -v ``` 将设备分配到 4 个区域:**TRUSTED**、**SMART_HOME**、**IOT_ISOLATED**、**QUARANTINE**。生成用于区域间通信的防火墙规则。 ## 设备配置文件 ``` # 列出所有已知设备配置文件 uv run netlens devices list # 深入了解特定设备 uv run netlens devices show AA:BB:CC:DD:EE:FF # 显示设备的扫描历史记录 uv run netlens devices show AA:BB:CC:DD:EE:FF --history # 标记和注释设备 uv run netlens devices edit AA:BB:CC:DD:EE:FF --name "Living Room TV" --label smart-tv --label trusted ``` ## 开发 ``` # 安装 dev 依赖 uv sync --group dev # 运行 tests uv run pytest -q # Lint 和格式化 uv run ruff check src/ tests/ uv run ruff format src/ tests/ ``` ### 发布 仓库根目录的 `VERSION` 文件是唯一的权威来源。`pyproject.toml`、 `netlens.__version__`、`pip show netlens` 和 `netlens --version` 都从 该文件中读取。有关发布流程,请参见 [docs/RELEASING.md](docs/RELEASING.md)。 ## 技术栈 | 组成部分 | 技术 | |-----------|-----------| | 语言 | Python 3.13+ | | 包管理器 | uv | | CLI 框架 | Typer | | 终端 UI | Rich | | 数据包操作 | Scapy | | 端口扫描 | nmap via python-nmap | | mDNS 发现 | zeroconf | | UPnP 发现 | ssdp | | SSH 测试 | asyncssh | | Telnet 测试 | telnetlib3 | | SNMP 查询 | pysnmp 7 | | CVE 查询 | nvdlib (NVD API) | | HTTP 客户端 | httpx | | 数据模型 | Pydantic | | XML 解析 | defusedxml | | MAC 供应商 | mac-vendor-lookup | | GeoIP | geoip2 (MaxMind) | | 报告 | Jinja2 | | 数据库 | SQLite (stdlib) | | 代码检查/格式化工具 | ruff | | 测试 | pytest | ## 许可证 私有 — 个人/家庭网络安全审计工具。
标签:AES-256, Nmap, Python CLI, WiFi安全, 固件指纹识别, 家庭网络, 局域网扫描, 开源安全工具, 插件系统, 无线安全, 流量捕获, 漏洞评估, 物联网设备, 网络安全, 网络审计, 网络拓扑, 虚拟驱动器, 设备发现, 运行时操纵, 逆向工具, 逆向工程平台, 防御绕过, 隐私保护