先粘代码
String[] netStatStr = {"/bin/sh","-c","netstat -ano | grep 5296"};
String temp;
StringBuilder sb = null;
try(InputStream inputstream = Runtime.getRuntime().exec(netStatStr).getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputstream));){
sb = new StringBuilder();
while (null != (temp = bufferedReader.readLine())){
sb.append(temp + "\n");
}
}catch (IOException e){
LOGGER.error("",e);
}
原理很简单,就是利用Runtime类获得运行时环境去执行一个netstat的命令,该exec()方法返回的Process类型数据有一个getInputStream()方法,获得其输入流拿到命令查询结果字符串,sb就是最后拿到的查询结果,最后可以处理字符串拿到占用5296这个端口号的外部ip。
其中需要注意的是,如果在Linux中执行命令,netStatStr数组前两位元素格式不能变,不然会出现只执行netstat -ano没有执行后面的grep 5296,这也是踩了一个坑。如果是在window中执行命令,需要写成String[] netStatStr = {"cmd","-c","netstat -ano | findstr 5296"}这种格式,前两位元素也不能变。执行不同的命令改变第三个元素就行了。