在Java中,是否可以找出UNIX系统中已知PID使用的端口号?

在Java中,是否可以找出UNIX系统中已知PID使用的端口号?,java,Java,我试图通过在Unix系统(即Linux、Solaris和AIX)中提供已知进程号(PID)来实现Java中能够捕获端口号的最佳代码/类。我使用Socket类进行了检查,但它似乎不支持此解决方案 有人知道实现此解决方案的更好方法吗?您可以使用Runtime.getRuntime().exec 例如,fallowing代码显示了如何使用PID获取进程的tcp套接字 2046 public static void main(String[] args) { // TODO Auto-g

我试图通过在Unix系统(即Linux、Solaris和AIX)中提供已知进程号(PID)来实现Java中能够捕获端口号的最佳代码/类。我使用
Socket
类进行了检查,但它似乎不支持此解决方案


有人知道实现此解决方案的更好方法吗?

您可以使用
Runtime.getRuntime().exec

例如,fallowing代码显示了如何使用PID获取进程的tcp套接字

2046

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Process p=null;
    StringBuffer output = new StringBuffer();
    String command= "netstat  -p ";
    try{
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader =
                        new BufferedReader(new InputStreamReader(p.getInputStream()));

                    String line = "";
        while ((line = reader.readLine())!= null) {
            if(line.matches("^tcp.*2406.*"))
            output.append(line + "\n");

            //reader.close();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

     System.out.println(output);
}
我的系统中的输出是

tcp        0      0 192.168.2.239:52956     sc-in-f188.1e100.n:5228 ESTABLISHED 2406/chrome
我们知道这里的套接字是52956,您可以进一步解析字符串以查找套接字

提及


糟糕的方法是使用
Runtime.getRuntime().exec
@SebastianWalla这有什么帮助?既然
lsof
netstat
ps
已经存在,为什么还要为此编写Java代码?@OP你的意思可能是lsof+tcpdump的组合,但这只是我的猜测。请重新表述您的问题,使其有意义。您的意思是您想要找到的tcp套接字或unix套接字您上面展示的解决方案对我有效。netstat是一个不错的选择,因为它在大多数UNIX系统上都可用,特别是Linux、Solaris和AIX。我认为
netstat-pntu
可能是一种方法,因为它可以从tcp和udp读取信息。