使用 Java 写了一个局域网端口扫描器
一开始打算使用 web 来做的,但是发现浏览器没有那么高的权限,限制来自浏览器安全模型。浏览器不允许:创建任意 TCP Socket,主动向任意 IP:PORT 建立 TCP 连接,探测端口是否 open / closed / filtered
最终我改回了 Java 实现。并开源在了 https://github.com/hellodk34/LanPortScanner
直接下载 jar 包:https://github.com/hellodk34/LanPortScanner/releases
LanPortScanner - 局域网端口扫描器
一个用 Java 编写的局域网端口扫描工具,支持 TCP 和 HTTP 协议扫描。现成的 LanPortScanner.jar 文件(仅5.18KB)请在项目 release 页面下载。
我的使用场景举例
- 群晖 nas 设备接入了一个局域网,但是我没有局域网管理权限,可以借助本程序快速扫描群晖的 5000 web 端口
- 我的 x86 小主机安装了 immortalwrt 系统作为旁路网关使用,小主机开机后也可以借助本程序快速扫描出来 IP,可以使用 http 扫描 88 端口(luci web uhttpd 的服务端口默认是 80),也可以使用 tcp 扫描 1003 端口(dropbear ssh 服务默认端口是 22)
✨ 特性
- 🔍 支持 TCP 和 HTTP 两种协议扫描
- 🎯 精确的参数验证(IP格式、范围、端口等)
- ⚡ 多线程并发扫描,提高效率
- 📊 详细的扫描结果和统计信息
- 🔒 仅支持局域网IP扫描,确保安全
- 🔄 兼容 Java 8 到 Java 21+
🚀 快速开始
1. 编译项目
# Windows一键操作(双击运行)
build_win.bat
# linux/macOS一键操作
chmod +x build_linux.sh
./build_linux.sh
# 或者手动编译
javac -encoding UTF-8 LanPortScanner.java
jar cfe LanPortScanner.jar LanPortScanner LanPortScanner.class
2. 运行扫描
# TCP 扫描(默认2秒超时)
java -jar target/LanPortScanner.jar tcp 192.168.1.1 192.168.1.254 80
# HTTP 扫描(自定义超时3秒)
java -jar target/LanPortScanner.jar http 192.168.10.1 192.168.10.254 8080 3
# 跨网段扫描
java -jar target/LanPortScanner.jar tcp 192.168.0.1 192.168.1.254 22 5
📖 参数说明
java -jar LanPortScanner.jar <协议> <起始IP> <结束IP> <端口> [超时秒数]
| 参数 | 必需 | 说明 | 示例 |
|---|---|---|---|
| 协议 | ✅ | tcp 或 http(不区分大小写) |
tcp |
| 起始IP | ✅ | 起始IP地址(必须是局域网IP) | 192.168.1.1 |
| 结束IP | ✅ | 结束IP地址(必须是局域网IP) | 192.168.1.254 |
| 端口 | ✅ | 目标端口号(1-65535) | 80 |
| 超时时间 | ❌ | 超时秒数(默认2秒) | 3 |
📋 支持的局域网IP范围
- 10.0.0.0/8:10.0.0.0 - 10.255.255.255
- 172.16.0.0/12:172.16.0.0 - 172.31.255.255
- 192.168.0.0/16:192.168.0.0 - 192.168.255.255
🛡️ 安全特性
- ❌ 禁止扫描公网IP地址
- ❌ 严格的参数验证
- ❌ 防止IP范围错误
- ❌ 限制端口范围(1-65535)
📊 输出示例
========================================
🔍 局域网端口扫描器
========================================
协议类型: TCP
IP范围: 192.168.1.1 - 192.168.1.254
目标端口: 22
超时设置: 2 秒
扫描总数: 254 个IP
========================================
开始扫描...
✅ 发现设备: 192.168.1.100:22
✅ 发现设备: 192.168.1.150:22
========================================
🏁 扫描完成
========================================
总耗时: 15.23 秒
扫描IP数: 254
发现设备: 2 个
发现的设备列表:
- 192.168.1.100:22
- 192.168.1.150:22
========================================
⚠️ 注意事项
- 仅限局域网使用:本工具只能扫描局域网IP,无法扫描公网IP
- 遵守法律:请仅在自己拥有权限的网络中使用
- 性能建议:
- 建议扫描范围不要超过C类网段(254个IP)
- 可根据网络情况调整超时时间
- 大范围扫描时建议增加超时时间
🛠️ 技术细节
- 兼容性:Java 8 - Java 21+
- 并发:使用线程池实现并发扫描
- 协议支持:
- TCP:使用Socket连接测试
- HTTP:使用HttpURLConnection测试
- 编码:UTF-8
📦 依赖
本项目为纯Java实现,无外部依赖,可直接编译运行。
