Java查看系统所有端口的实现
引言
在进行Java开发时,有时需要查看系统中正在使用的端口号。本文将介绍如何使用Java编写程序来查看系统中所有的端口,并逐步指导刚入行的开发者完成这个任务。
实现思路
要实现查看系统所有端口的功能,可以通过Java的java.net
包中的InetAddress
和java.net.Socket
类来完成。具体的实现思路如下:
- 获取本机地址。
- 通过循环遍历所有端口,尝试连接每个端口。
- 若连接成功,则表示该端口正在使用。
下面我们将逐步详细介绍每一步的实现。
实现步骤
步骤 | 代码 | 功能 |
---|---|---|
1 | Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); |
获取系统中的网络接口 |
2 | while (interfaces.hasMoreElements()) { NetworkInterface ni = interfaces.nextElement(); |
循环遍历每个网络接口 |
3 | Enumeration<InetAddress> addresses = ni.getInetAddresses(); |
获取当前网络接口的所有IP地址 |
4 | while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement(); |
循环遍历每个IP地址 |
5 | if (!address.isLoopbackAddress()) { |
排除回环地址 |
6 | for (int port = 1; port <= 65535; port++) { |
遍历所有端口 |
7 | try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(address, port), timeout); |
尝试连接每个端口 |
8 | System.out.println("端口 " + port + " 正在使用"); |
打印正在使用的端口号 |
代码实现
下面将逐步给出每一步所需的代码,并对其进行注释说明。
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.InetSocketAddress;
import java.util.Enumeration;
public class PortScanner {
public static void main(String[] args) {
int timeout = 200; // 连接超时时间
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
Enumeration<InetAddress> addresses = ni.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (!address.isLoopbackAddress()) {
for (int port = 1; port <= 65535; port++) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(address, port), timeout);
System.out.println("端口 " + port + " 正在使用");
} catch (Exception e) {
// 连接失败,该端口未被使用
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
序列图
下面是使用mermaid语法绘制的查看系统所有端口的序列图:
sequenceDiagram
participant Developer
participant PortScanner
Developer->>PortScanner: 开始运行程序
PortScanner->>PortScanner: 获取系统中的网络接口
PortScanner->>PortScanner: 循环遍历每个网络接口
PortScanner->>PortScanner: 获取当前网络接口的所有IP地址
PortScanner->>PortScanner: 循环遍历每个IP地址
PortScanner->>PortScanner: 排除回环地址
PortScanner->>PortScanner: 遍历所有端口
PortScanner->>PortScanner: 尝试连接每个端口
PortScanner->>PortScanner: 打印正在使用的端口号
PortScanner->>Developer: 输出结果
状态图
下面是使用mermaid语法绘制的查看系统所有端口的状态图:
stateDiagram
[*] --> 开始
开始 --> 获取网络接口
获取网络接口 --> 获取当前IP地址
获取当前IP地址 --> 排除回环地址
排除回环地址 --> 遍历所有端口
遍历所有端口 --> 尝试连接端口
尝试连接端口 --> 端口正在使用
尝试连接端口 --> 端口未被使用
端口正在使用 --> 遍历