在Java中,是否可以找出UNIX系统中已知PID使用的端口号?
我试图通过在Unix系统(即Linux、Solaris和AIX)中提供已知进程号(PID)来实现Java中能够捕获端口号的最佳代码/类。我使用在Java中,是否可以找出UNIX系统中已知PID使用的端口号?,java,Java,我试图通过在Unix系统(即Linux、Solaris和AIX)中提供已知进程号(PID)来实现Java中能够捕获端口号的最佳代码/类。我使用Socket类进行了检查,但它似乎不支持此解决方案 有人知道实现此解决方案的更好方法吗?您可以使用Runtime.getRuntime().exec 例如,fallowing代码显示了如何使用PID获取进程的tcp套接字 2046 public static void main(String[] args) { // TODO Auto-g
Socket
类进行了检查,但它似乎不支持此解决方案
有人知道实现此解决方案的更好方法吗?您可以使用
Runtime.getRuntime().exec
例如,fallowing代码显示了如何使用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,您可以进一步解析字符串以查找套接字
提及
糟糕的方法是使用
Runtime.getRuntime().exec
@SebastianWalla这有什么帮助?既然lsof
、netstat
和ps
已经存在,为什么还要为此编写Java代码?@OP你的意思可能是lsof+tcpdump的组合,但这只是我的猜测。请重新表述您的问题,使其有意义。您的意思是您想要找到的tcp套接字或unix套接字您上面展示的解决方案对我有效。netstat是一个不错的选择,因为它在大多数UNIX系统上都可用,特别是Linux、Solaris和AIX。我认为netstat-pntu
可能是一种方法,因为它可以从tcp和udp读取信息。