Java从PID获取TCP IP地址
我有一个小应用程序,我在其中检查应用程序是否正在运行,如果它正在运行,我会获取进程的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 {
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调用中获得的输出,以便我们有更多的信息可供参考。;)