murillohwg/port-scanner-Java
GitHub: murillohwg/port-scanner-Java
一个基于 Java Socket 编程的教育型 TCP 端口扫描器,用于探测目标主机 1-1024 端口的开放状态。
Stars: 0 | Forks: 0
# Java 端口扫描器
### 1. 项目描述
本项目是一个 Java TCP 端口扫描器的实现。该工具出于教育目的而开发,旨在加深对 Socket 编程和网络基础知识的了解。
端口扫描是渗透测试 (pentest) 或安全审计在**侦察**阶段的一项关键技术,用于识别目标主机上哪些端口和服务处于活动状态。
### 2. 主要功能
* 扫描特定主机上的 TCP 端口。
* 识别**开放**(服务正在监听)和**关闭**的端口。
* 简洁直接的命令行界面。
* 预定义的端口范围 (1-1024),覆盖最知名的常见服务端口。
### 3. 如何使用
#### 前置条件
* 已安装 Java Development Kit (JDK) 8 或更高版本,并配置了 PATH 环境变量。
#### 编译
导航到项目目录并使用以下命令编译 `.java` 文件:
```
javac PortScanner.java
```
#### 运行
从命令行运行程序,将目标主机(IP 或域名)作为参数传入:
Shell
java PortScanner
示例:
Shell
java PortScanner localhost
或
Shell
## java PortScanner google.com
4. 输出示例 (Output)
开始在主机上执行扫描:localhost...
## 端口 22 (ssh) - 开放
端口 25 (smtp) - 关闭
端口 80 (http) - 开放
端口 135 (msrpc) - 关闭
端口 443 (https) - 开放
...
端口 1024 - 关闭
扫描完成。
5. 代码工作原理(技术说明)
该扫描器的工作原理基于尝试与目标主机在定义范围内的每个端口建立 Socket 连接。
具体逻辑如下:
一个 for 循环遍历从 1 到 1024 的端口。
在循环内部,程序尝试创建一个新的 Socket 实例,将主机和当前端口作为参数传入 (new Socket(host, porta))。
如果连接成功建立(未抛出异常),则意味着该端口上有服务正在监听,因此将其标记为“开放”。
如果连接尝试失败并捕获到 java.net.ConnectException 或 java.net.SocketTimeoutException 类型的异常,则意味着该端口处于“关闭”或被阻止状态。
Socket 始终在 finally 块中关闭,以确保释放资源。
本项目是学习 Java 异常处理以及将 Socket 类应用于网络通信的绝佳机会。
6. 可能的改进与后续步骤
[ ] 实现多线程以加快扫描速度,同时测试多个端口。
[ ] 允许用户通过命令行参数指定自定义端口范围。
[ ] 添加服务检测功能(service grabbing/banner grabbing),以尝试识别开放端口上正在运行的服务。
[ ] 将结果保存到日志文件(.txt 或 .csv)中。
标签:JS文件枚举, Socket编程, 域名枚举, 插件系统, 数据统计, 端口扫描, 网络编程