0
点赞
收藏
分享

微信扫一扫

java查看系统所有端口

前端王祖蓝 2024-01-05 阅读 10

Java查看系统所有端口的实现

引言

在进行Java开发时,有时需要查看系统中正在使用的端口号。本文将介绍如何使用Java编写程序来查看系统中所有的端口,并逐步指导刚入行的开发者完成这个任务。

实现思路

要实现查看系统所有端口的功能,可以通过Java的java.net包中的InetAddressjava.net.Socket类来完成。具体的实现思路如下:

  1. 获取本机地址。
  2. 通过循环遍历所有端口,尝试连接每个端口。
  3. 若连接成功,则表示该端口正在使用。

下面我们将逐步详细介绍每一步的实现。

实现步骤

步骤 代码 功能
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地址 --> 排除回环地址
    排除回环地址 --> 遍历所有端口
    遍历所有端口 --> 尝试连接端口
    尝试连接端口 --> 端口正在使用
    尝试连接端口 --> 端口未被使用
    端口正在使用 --> 遍历
举报

相关推荐

0 条评论