当前位置: 首页 > 图灵资讯 > 技术篇> java查看系统所有端口

java查看系统所有端口

来源:图灵教育
时间:2024-01-05 14:47:47

Java检查系统所有端口的引言

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

实现思路

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

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

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

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