Java检查系统所有端口的引言
Java开发时,有时需要查看系统中使用的端口号。本文将介绍如何使用Java编写程序查看系统中的所有端口,并逐步指导新开发者完成任务。
实现思路通过Java查看系统所有端口的功能java.net
包中的InetAddress
和java.net.Socket
类别完成。具体实现思路如下:
- 获取本机地址。
- 试着通过循环遍历所有端口来连接每个端口。
- 如果连接成功,则表示端口正在使用。
下面我们将逐步详细介绍每一步的实现情况。
实现步骤Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
获取系统中的网络接口2while (interfaces.hasMoreElements()) { NetworkInterface ni = interfaces.nextElement();
循环遍历每个网络接口3Enumeration<InetAddress> addresses = ni.getInetAddresses();
获取当前网络接口的所有IP地址4while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement();
循环遍历每个IP地址5if (!address.isLoopbackAddress()) {
排除回环地址6for (int port = 1; port <= 65535; port++) {
所有端口7遍历try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(address, port), timeout);
尝试连接每个端口8System.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地址循环遍历每个IP地址 PortScanner->>PortScanner: 排除回环地址 PortScanner->>PortScanner: 遍历所有端口 PortScanner->>PortScanner: 尝试连接每个端口 PortScanner->>PortScanner: 打印正在使用的端口号 PortScanner->>Developer: 输出结果
状态图以下是使用mermaid语法绘制的检查系统所有端口的状态图:
stateDiagram [*] --> 开始 开始 --> 获取网络接口 获取网络接口 --> 获取当前IP地址 获取当前IP地址 --> 排除回环地址 排除回环地址 --> 遍历所有端口 遍历所有端口 --> 尝试连接端口 尝试连接端口 --> 端口正在使用 尝试连接端口 --> 未使用端口 端口正在使用 --> 遍历
![](/images/780-200-2.jpg)