![](/img/trans.png)
[英]How to parse ip address from /proc/PID/net/tcp and /proc/PID/net/tcp6 files in Java?
[英]Java getting TCP IP address from PID
我有一個小應用程序,在其中檢查應用程序是否正在運行,如果正在運行,則獲取進程的PID,然后嘗試獲取它打開的TCP連接的IP地址,但是即使使用多個不同的程序,我也總是得到0.0.0.0:port
而不是實際IP地址,在Windows上打開資源監視器會顯示正確的IP。 在CMD中手動運行netstat只會給我0.0.0.0:port
。
有沒有辦法獲得資源監視器中顯示的正確IP?
命令: "netstat -an -p tcp -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地址,但不會顯示仍僅在本地偵聽的連接。 但是聽起來您已經意識到這一點,並且正在尋找已建立的連接。
我的猜測是您的問題可能是由inputLine.contains(appPIDNumber)
引起的。 是appPIDNumber出現在較早的行中嗎? 也許作為端口號? 您應該專門檢查PID列中的條目是否與您的PID匹配,而不僅僅是行的任何部分。 即使這現在並沒有引起您的錯誤,它仍然是您代碼中的錯誤,如果PID與列表開頭的某個偵聽端口相匹配,它仍將使其隨機失敗。
也許嘗試if (inputLine.trim().endsWith(" "+appPIDNumber)) {
代替,看看是否有幫助。
打開的TCP連接的IP地址
如果您的意思是它偵聽的TCP IP:端口,那么它將是0.0.0.0:xxx,除非程序已綁定到特定的IP地址和端口,這是不常見的。 但是,如果該進程位於本地主機中,則不需要它,例如,可以使用127.0.0.1。 如果這是一台服務器,而您只是想知道它是否正在運行,請嘗試連接它。 您不需要所有這些。
如果您要連接的遠程TCP IP:port是在錯誤的行或正確的列中查看。
如果您再次表示其他意思,請澄清。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.