当前位置 : 主页 > 编程语言 > java >

java 定时任务 探测多个ip 端口是否通

来源:互联网 收集:自由互联 发布时间:2023-12-16
Java定时任务:探测多个IP端口是否通 在网络通信中,我们经常需要检测多个IP地址的多个端口是否可用。这种探测的需求可以通过Java编程语言来实现。本文将介绍如何使用Java编写一个

Java定时任务:探测多个IP端口是否通

在网络通信中,我们经常需要检测多个IP地址的多个端口是否可用。这种探测的需求可以通过Java编程语言来实现。本文将介绍如何使用Java编写一个定时任务,用于探测多个IP地址的多个端口是否可用,并提供了代码示例。

流程图

flowchart TD
    subgraph 初始化
        A[获取待探测的IP地址和端口] --> B[设置定时任务]
        B --> C[开始定时任务]
    end
    
    subgraph 定时任务
        C --> D[遍历IP地址列表]
        D --> E[遍历端口列表]
        E --> F[探测端口是否可用]
        F --> G[记录探测结果]
        G --> H{是否继续探测}
        H --> |是| D
        H --> |否| I[结束定时任务]
    end

代码示例

下面是一个简单的Java代码示例,用于实现上述定时任务。

import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class PortScanner {
    
    private static final List<String> ipList = new ArrayList<>();
    private static final List<Integer> portList = new ArrayList<>();

    public static void main(String[] args) {
        // 获取待探测的IP地址和端口
        initIPList();
        initPortList();
        
        // 设置定时任务,每隔5秒执行一次
        Timer timer = new Timer();
        timer.schedule(new ScanTask(), 0, 5000);
    }
    
    private static void initIPList() {
        // TODO: 添加需要探测的IP地址到ipList
        ipList.add("192.168.0.1");
        ipList.add("192.168.0.2");
        ipList.add("192.168.0.3");
    }
    
    private static void initPortList() {
        // TODO: 添加需要探测的端口到portList
        portList.add(80);
        portList.add(8080);
        portList.add(22);
    }
    
    private static boolean isPortAvailable(String ip, int port) {
        try (Socket socket = new Socket()) {
            socket.connect(new InetSocketAddress(ip, port), 1000);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    private static class ScanTask extends TimerTask {
        
        @Override
        public void run() {
            for (String ip : ipList) {
                for (int port : portList) {
                    boolean isAvailable = isPortAvailable(ip, port);
                    String result = isAvailable ? "可用" : "不可用";
                    System.out.println("IP地址:" + ip + ",端口:" + port + ",状态:" + result);
                }
            }
        }
        
    }

}

在上述代码中,我们先定义了一个PortScanner类,其中包含了一个ScanTask内部类,用于执行定时任务。在main方法中,我们首先调用initIPList方法和initPortList方法,将待探测的IP地址和端口添加到ipListportList中。然后,我们创建一个定时任务ScanTask,并设置每隔5秒执行一次。定时任务中,我们遍历ipListportList,调用isPortAvailable方法探测IP地址和端口是否可用,然后将结果打印到控制台。

结果展示

当运行上述代码时,控制台将显示每个IP地址的每个端口的探测结果。例如:

IP地址:192.168.0.1,端口:80,状态:可用
IP地址:192.168.0.1,端口:8080,状态:不可用
IP地址:192.168.0.1,端口:22,状态:可用
IP地址:192.168.0.2,端口:80,状态:不可用
IP地址:192.168.0.2,端口:8080,状态:可用
IP地址:192.168.0.2,端口:22,状态:可用
IP地址:192.168.0.3,端口:80,状态:可用
IP地址:192.168.0.3,端口:8080,状态:不可用
上一篇:java 后台 监听 按键
下一篇:没有了
网友评论