簡體   English   中英

Java從PID獲取TCP IP地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM