首页 > 解决方案 > 在 Java 中获取跨平台操作系统级别的套接字信息和状态的最有效方法是什么

问题描述

在我的一个项目中,我需要有效地解决这个问题,所以需要你的意见。我正在尝试保持实时的操作系统端口活动,它非常动态,所以我想将它们保存在我的数据结构中,比如,

|进程名|pid|端口号|状态|

例如在 Windows 中,我可以使用 shell 命令获取信息,依次为“netstat -ano | find”9000”,然后是“tasklist /fi pid eq 12200”

private static String PidtoProcessName(String pid) {
    
    Runtime rt = Runtime.getRuntime();
    String cmdOut = null;
    String[] cmdOutSegments = null;
    
    try {
        Process proc = rt.exec("cmd /c tasklist /fi \"pid eq " + pid + "\""); // tasklist /fi "pid eq 12200"
        
        BufferedReader stdInput = new BufferedReader(new 
                InputStreamReader(proc.getInputStream()));
        
        while ((cmdOut = stdInput.readLine()) != null) {
            cmdOutSegments = cmdOut.split(" ");
            //System.out.println(cmdOutSegments[0]);
            //System.out.println(cmdOut);
        }
        
    
    } catch (IOException e) {
        e.printStackTrace();
        cmdOutSegments = null;
    }
    
    return cmdOutSegments[0];
}

但是为每个端口运行 os shell 命令并进行解析,看起来跟踪动态端口活动效率不高,

您有什么想法吗,或者您可以建议第 3 方库来有效地解决这个问题,

谢谢,

标签: javasocketsoperating-systemport

解决方案


推荐阅读