Bhagyarajbheesetty/LLDP-Scanner
GitHub: Bhagyarajbheesetty/LLDP-Scanner
一款基于 Python 和 Tkinter 的 Windows LLDP 网络设备发现工具,通过图形界面实时显示链路层邻居设备信息。
Stars: 0 | Forks: 0
# LLDP 网络设备扫描器(带 GUI)
一个轻量级的 Windows 应用程序,使用链路层发现协议(LLDP)发现网络设备,并通过图形用户界面实时显示其信息。
## 功能
- **现代化、响应式 GUI**:使用 Tkinter 构建;窗口在启动时最大化打开,但仍可完全自由调整大小。
- **双面板布局**:
- *左侧面板*:网络接口选择器 – 仅显示友好的接口名称(没有 `[NPF]` 杂乱字符),支持垂直展开,并自动选择第一个可用接口。
- *右侧面板*:控制按钮(开始/停止扫描、导出结果、清除结果)以及显示最新 LLDP 邻居的实时结果表。
- **实时 LLDP 发现**:显示 Chassis ID、Port ID、TTL、System Name、Port Description、System Capabilities 和 Management Address。
- **智能 Management Address 处理**:
- 自动解析 LLDP Management Address TLV。
- 以点分十进制格式(例如 `192.168.1.1`)提取并显示 IPv4 地址。
- 对于 IPv6 或其他地址类型,会平滑回退到原始数据。
- **结果导出**:在扫描期间或之后点击 **导出结果**,将整个表格保存为 CSV 文件(UTF-8 编码),文件名由用户选择。
- **结果过滤**:在结果表上方的 **搜索** 框中输入内容,可以根据任意列(接口、chassis ID、system name 等)实时过滤行。搜索框现在位于工具栏右侧,使布局更加整洁。
- **修复了接口选择器滚动条**:网络接口列表框现在包含可用的垂直和水平滚动条,方便在存在大量接口时进行平滑导航。
- **列可见性控制**:点击 **列** 按钮(或右键点击任意列标题),通过复选框菜单显示/隐藏列;可见性和列宽会在不同会话之间持久保存。
- **深色/浅色主题切换**:使用 **切换主题** 按钮在浅色(原生 Windows)和深色主题之间切换;偏好设置会被保存和恢复。
- **持久化设置**:应用程序会记住您上次选择的接口、窗口大小/位置、列宽、隐藏列、主题选择和搜索文本,并在下次启动时恢复它们。
- **内存高效**:将显示的表格限制为最近的 100 条记录,以避免无限制增长。
- **即插即用**:只需在 WinPcap-API 兼容模式下安装 Npcap。
- **单一可执行文件**:可使用 PyInstaller 打包,便于分发。
- **命令行界面**:原始 CLI(`python lldp_scanner.py`)仍然可供喜欢使用终端的用户使用。
## 前置条件
- **Windows 10/11**
- **Npcap** 需在 *WinPcap API 兼容模式* 下安装
(从 https://nmap.org/npcap/ 下载,并确保勾选 **"Install Npcap in WinPcap API-compatible Mode"** 选项)
- 应用程序必须**以管理员身份**运行,才能访问原始网络套接字。
## 构建说明
1. 将此仓库克隆或复制到 Windows 计算机。
2. **以管理员身份**打开命令提示符,并导航到项目文件夹。
3. 安装 Python 依赖:
pip install -r requirements.txt
4. 构建可执行文件:
build_exe.bat
这将创建 `dist\LLDP-scanner.exe`(GUI 版本)。
## 用法
### 使用 GUI(推荐)
1. 以管理员身份运行 `dist\LLDP-scanner.exe`。
窗口启动时会最大化,但您可以自由调整其大小。
2. 左侧面板列出所有可用的网络接口(仅显示友好名称)。默认会预选第一项。
3. 点击 **开始扫描** 以开始捕获所选接口上的 LLDP 数据包。
- 按钮会变灰,**停止扫描** 变为活动状态,状态栏会显示 `Scanning on `。
4. 发现的设备会显示在右侧的表格中,最新记录位于顶部。
- **Management Address** 列在可用时会显示可读的 IP 地址(例如 `192.168.1.1`)。
5. 使用表格上方的 **搜索** 框可以根据任意列即时过滤结果。搜索框现在位于工具栏右侧。
6. 点击 **列** 按钮(或右键点击任意列标题)以显示或隐藏列;您的可见性选择和列宽会被记住。
7. 点击 **切换主题** 以在浅色和深色外观之间切换;您的偏好设置将被保存。
8. 要停止捕获,请点击 **停止扫描**。控件将返回其初始状态。
9. 在扫描时或停止后(如果存在结果),点击 **导出结果** 将表格保存为您选择的 CSV 文件。
10. 点击 **清除结果** 以删除所有显示的记录。
11. 关闭窗口以退出应用程序。
### 使用命令行界面
原始命令行界面仍然可用:
1. 确保已安装 Python 3.8+。
2. 安装依赖:`pip install -r requirements.txt`
3. 运行脚本:`python lldp_scanner.py`
4. 按照提示选择接口并在控制台中查看 LLDP 信息。
## 工作原理
应用程序使用 Npcap/wpcap.dll 库(通过 Python 的 `ctypes`)捕获 EtherType 为 `0x88CC`(LLDP)的以太网帧。它会解析 LLDPDU(链路层发现协议数据单元)以提取设备信息。
GUI 版本运行一个简单的 Tkinter 界面,该界面会在接收到 LLDP 帧时实时更新。
## 注意事项
- LLDP 是一种链路层协议;您只能看到直接连接到所选接口的设备(不能跨路由器)。
- 如果未检测到 LLDP 流量,应用程序将保持空闲状态,直到有帧到达或您停止扫描。
- 可执行文件捆绑了 Python 解释器和必需的库;目标机器上不需要单独安装 Python(前提是已安装 Npcap)。
## 许可证
本项目按“原样”提供,用于教育目的。欢迎随意修改和重新分发。
*使用 Python、Tkinter 和 PyInstaller 构建。*
标签:LLDP, Python, Tkinter, 无后门, 桌面应用, 漏洞挖掘, 网络工具, 逆向工具