我试图在Java中实现最好的代码/类,通过在Unix系统(即Linux、Solaris和AIX )中提供一个已知的进程号(PID)来捕获端口号。我查看了Socket类,但它似乎不支持这个解决方案?
有谁知道找到这个解决方案的更好方法吗?
发布于 2017-05-23 06:16:27
您可以使用Runtime.getRuntime().exec
例如,融合代码展示了如何使用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,您可以进一步解析用于查找套接字的字符串
请参阅
https://stackoverflow.com/questions/44126505
复制相似问题