Java从PID获取TCP IP地址

Java从PID获取TCP IP地址,java,tcp,Java,Tcp,我有一个小应用程序,我在其中检查应用程序是否正在运行,如果它正在运行,我会获取进程的PID,然后尝试获取它打开的TCP连接的IP地址,但即使有多个不同的程序,我也总是会得到0.0.0.0:port,而不会得到实际的IP地址,在windows上打开资源监视器将显示正确的IP。在CMD中手动运行netstat也只能提供0.0.0.0:port 有没有办法获得资源监视器中显示的正确IP 命令:“netstat-an-ptcp-o” 以下是我用java获得它的方法: try {

我有一个小应用程序,我在其中检查应用程序是否正在运行,如果它正在运行,我会获取进程的PID,然后尝试获取它打开的TCP连接的IP地址,但即使有多个不同的程序,我也总是会得到
0.0.0.0:port
,而不会得到实际的IP地址,在windows上打开资源监视器将显示正确的IP。在CMD中手动运行netstat也只能提供
0.0.0.0:port

有没有办法获得资源监视器中显示的正确IP

命令:
“netstat-an-ptcp-o”
以下是我用java获得它的方法:

try {
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(appConstants.NETSTAT_COMMAND);

            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String inputLine = "";
            serverIPAddress = "";
            while ((inputLine = in.readLine()) != null) {
                if (inputLine.contains(appPIDNumber)) {
                    serverIPAddress = inputLine.substring(31, 54);
                    System.out.println("IP before edit: " + serverIPAddress);
                    if (serverIPAddress.equalsIgnoreCase("0.0.0.0:0")
                            || serverIPAddress.contains("0.0.0.0:0")
                            || serverIPAddress.equalsIgnoreCase("0.0.0.0")
                            || serverIPAddress.contains("0.0.0.0")
                            || serverIPAddress.equalsIgnoreCase("127.0.0.0")
                            || serverIPAddress.contains("127.0.0.0")
                            || serverIPAddress.equalsIgnoreCase("127.0.0.1")
                            || serverIPAddress.contains("127.0.0.1")
                            || serverIPAddress.equalsIgnoreCase("")) {
                        serverIPAddress = null;
                        System.out.println("IP ADDRESS FAIL");
                        break;
                    }
                    if (serverIPAddress.contains(":")) {
                        serverIPAddress = serverIPAddress.substring(0, serverIPAddress.lastIndexOf(":")).trim();
                        System.out.println("CORRECT IP ADDRESS: " + serverIPAddress);
                    }
                }
            }

        } catch (IOException e) {
            LoggingUtils.LogExceptions(LoggingConstants.ERROR, e.toString());
        }
        return serverIPAddress;
    }

netstat将只显示已建立连接的外部IP地址,而不显示仍在本地侦听的连接的外部IP地址。但听起来你已经意识到了这一点,并且正在寻找一个已建立的联系

我猜您的问题可能是由
inputLine.contains(appPIDNumber)
引起的。可能是appPIDNumber出现在前面的一行中吗?也许作为一个端口号?您应该特别检查PID列中的条目是否与PID匹配,而不仅仅是行的任何部分。即使这并没有导致您现在的错误,但代码中仍然存在一个bug,如果PID与列表开头的一个侦听端口匹配,那么它将随机失败

也许可以尝试
if(inputLine.trim().endsWith(“+appPIDNumber)){
,看看这是否有帮助

它打开的TCP连接的IP地址

如果您指的是它侦听的TCP IP:端口,那么它将是0.0.0.0:xxx,除非程序绑定到特定的IP地址和端口,这是不常见的。但是如果进程在本地主机中,您不需要它,您可以使用127.0.0.1作为示例。如果它是服务器,您只是想知道它是否正在运行,请尝试连接你不需要这些

如果您指的是它所连接的远程TCP IP:端口,那么您看到的是错误的行,或者是正确行中的错误列


如果你是指其他内容,请澄清。

注意:我在“+appPIDNumber”中添加了一个空格,以防止匹配“12345”如果我在寻找PID 2345。谢谢,这很有意义,我会尽快修复。如果无法修复,可能会发布您正在查看的PID以及从netstat调用中获得的输出,以便我们有更多的信息可供参考。;)