Skip to content

DYY-Studio/LAN_Scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LAN Scanner

一个基于 Python 的高级局域网扫描与监控工具。底层使用 Scapy 进行网络包的构建与捕获,支持 IPv4 和 IPv6,提供了 交互式命令行界面 (CLI) 以便使用。

该项目旨在实现快速的设备发现、端口扫描、被动流量监听以及设备在线状态的心跳监控。

本项目是为计算机网络课程编写的,基于MIT许可公开

✨ 核心功能

  • 多协议设备发现 (Discovery):

    • 快速扫描: 利用 ARP (IPv4), ICMPv6 (IPv6), SSDP, mDNS, NetBIOS (UDP 137) 等协议进行广播/多播发现。
    • 全量扫描 (CIDR): 支持对指定网段进行 ARP/ICMP 暴力轮询扫描。
    • IPv4/IPv6 支持: 完美支持双栈网络环境。
  • 端口扫描 (Port Scan):

    • 支持 TCP SYN (半连接), TCP FIN, TCP XMAS 和 UDP 扫描。
    • 支持自定义端口列表和并发数设置。
  • 被动监听 (Passive Monitor):

    • 不主动发送探测包,通过监听广播/多播流量(如 DHCP, mDNS, ARP)被动发现网络中的设备。
  • 心跳监控 (Heartbeat):

    • 对已知设备定期发送单播探测包,实时监控设备在线/离线状态。
  • 厂商识别:

    • 解析 MAC 地址以识别设备制造商 (支持 manuf2)。
  • 终端界面:

    • 基于 TyperRich 构建的精美终端界面,支持 TUI 风格的实时监控面板。

🛠️ 安装与依赖

1. 系统要求

  • Python 3.10+ (代码中使用了 match-case 语法)。

  • 底层驱动:

    • Windows: 需要安装 Npcap (安装时请勾选 "Install Npcap in WinPcap API-compatible Mode")。
    • Linux/macOS: 需要安装 libpcap
  • 权限: 由于涉及发送 ARP/SYN 包,程序必须以 管理员 (Administrator/Root) 权限运行。

2. 安装 Python 依赖

项目包含核心依赖和 CLI 依赖,请运行以下命令安装:

# 安装核心服务依赖
pip install scapy>=2.7.0 pydantic flask psutil

# 安装命令行界面(CLI)所需的额外依赖
pip install typer rich manuf2

(注意:manuf2 是可选的,用于 MAC 厂商识别,建议安装)

🚀 使用指南

scanner_cli.py 提供了丰富的功能命令。

1. 列出网络接口 查看当前系统的网卡及其 IP/MAC 信息。

sudo python scanner_cli.py list-ifaces

2. 交互式网络监控 (推荐) 启动一个 TUI(终端用户界面) 面板,进行被动监听。你可以按键触发主动扫描。

sudo python scanner_cli.py monitor --manuf-instead
  • 界面操作:
    • [b]: 触发广播发现 (Broadcast)。
    • [s]: 触发全网段扫描 (CIDR Scan)。
    • [c]: 清除已离线的设备。
    • [q]: 退出。

3. 端口扫描 对特定 IP 进行 TCP SYN 扫描。

sudo python scanner_cli.py scan_ports 192.168.1.100 "22,80,443" --method syn

4. 局域网广播发现

sudo python scanner_cli.py broadcast 4 --manuf

📂 项目结构

LAN_SCANNER/
├── scanner_cli.py          # 命令行工具入口 (Typer/Rich)
├── requirements.txt        # 依赖列表
├── requirements_cli.txt    # CLI 额外依赖
└── service/                # 核心逻辑包
    ├── core.py    # 扫描引擎核心 (Scapy封装)
    ├── models.py           # Pydantic 数据模型 (HostDiscoveryResult, PortResult)
    └── utils.py            # 工具函数 (CIDR计算, SSDP解析等)

⚙️ 核心逻辑说明 (ScannerEngine)

ScannerEngine 是本项目的核心类,位于 service/core.py。它使用了 asyncioThreadPoolExecutor 来解决 Scapy 的同步阻塞问题,实现了高并发扫描。

  • 并发模型: 使用异步生成器 (AsyncGenerator) 流式返回扫描结果,前端或 CLI 可以实时显示发现的设备,无需等待扫描全部结束。
  • 协议指纹: 引擎会自动分析返回包的特征(如 UDP 端口、mDNS 记录、NetBIOS 响应)来推断设备的主机名 (Hostname) 和服务类型。

⚠️ 注意事项

  1. 防火墙: 某些防火墙可能会拦截发送的 ARP 或 SYN 包,导致扫描结果不全,建议在测试环境中暂时关闭防火墙。
  2. 网络合规: 请勿在未经授权的网络中运行全量扫描或端口扫描,这可能违反网络安全规定。

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages