🌐 局域网扫描器 - 开发与使用文档

项目地址:https://github.com/benbenbendang/scanner_nmap

1. 项目简介

本项目是一个基于 Python 开发的局域网主机扫描工具。它不仅具备强大的网络探测功能,更拥有独特的赛博朋克 (Cyberpunk) 风格图形界面。软件旨在帮助网络管理员或极客用户快速识别当前网段内的存活主机、检测操作系统类型以及开放端口。


2. 功能特性 (Features)

🛠 核心功能

  • 网卡自动识别:启动时自动读取系统网络接口信息(IP/子网掩码),支持用户下拉选择目标网卡。
  • ARP 存活扫描:利用 ARP 协议(二层网络)快速、准确地发现同一局域网内的所有在线设备。
  • 操作系统指纹识别:通过发送 ICMP 数据包并分析 TTL(生存时间)值,启发式地判断目标是 Windows、Linux/Android 还是网络设备。
  • 端口安全检测:对发现的主机进行常用端口(如 21, 22, 80, 445, 3389 等)扫描,评估开放服务情况。
  • 多线程处理:扫描过程在独立线程中运行,保证界面流畅不卡顿,并提供实时进度反馈。

🎨 界面风格 (UI/UX)

  • 赛博朋克主题:采用极深黑色背景 (#050505) 搭配霓虹青、霓虹粉和荧光绿。

  • 硬核排版:全界面使用 Consolas 等宽字体,模拟黑客终端的视觉体验。

  • 动态交互:扫描时状态栏实时更新,按钮和进度条具备高对比度视觉反馈。

    image-20260206004235619


3. 开发过程回顾

第一阶段:核心逻辑构建 (scanner_core.py)

  • 依赖库选择
    • scapy:强大的数据包处理库,用于构造 ARP 请求和 ICMP 包。
    • psutil & socket:用于获取本机网卡信息和进行 TCP 端口连接测试。
  • 实现逻辑
    1. 网卡获取:遍历系统网卡,筛选出 IPv4 地址。
    2. ARP 广播:向局域网广播 ARP 请求 (ff:ff:ff:ff:ff:ff),收集响应的 MAC 和 IP 地址。
    3. OS 探测:发送 ICMP Echo Request,根据返回包的 TTL 值(64/128/255)估算操作系统类型。
    4. 端口扫描:使用 socket.connect_ex 快速探测目标主机的关键端口。

第二阶段:GUI 原型与迭代 (gui.py)

  • 初步实现:使用 CustomTkinter 搭建基础窗口,实现列表展示。
  • 风格尝试
    • 版本 A (二次元风):尝试了粉色调、圆角设计和背景图片,增加了趣味性。
    • 版本 B (赛博朋克风 - 最终版):根据需求彻底重构。移除了所有圆角,改为直角边框;使用了高饱和度的霓虹色描边;字体统一为代码风格,营造出“未来科技”的沉浸感。
  • 多线程优化:为了防止扫描时界面假死,将 ScannerCore.full_scan 放入 threading.Thread 中运行,并通过回调函数更新 UI 进度条。

4. 使用方法

环境要求

  • 操作系统:Windows (推荐), Linux, macOS
  • Python 版本:Python 3.7+
  • 依赖库
    1
    pip install customtkinter scapy psutil Pillow
  • 特殊驱动 (Windows):需要安装 Npcap (安装时勾选 “WinPcap API-compatible Mode”),以便 Scapy 能正常收发数据包。

运行步骤

  1. 启动软件
    在终端中运行:
    1
    python gui.py
  2. 选择网卡
    在界面左上角的下拉菜单中,选择你想要扫描的网卡(例如 WLANEthernet)。
  3. 开始扫描
    点击 [ EXECUTE_SCAN ] 按钮。
  4. 查看结果
    • IP_ADDRESS: 主机 IP
    • MAC_ADDRESS: 物理地址
    • OS_DETECTED: 操作系统推测
    • OPEN_PORTS: 开放的端口列表
      扫描过程中,底部状态栏会显示当前进度。

5. 开发者信息