JAVA 如何根据IP获取其他机器的CPU、内存、 磁盘状态等信息
时间: 2023-08-18 11:08:45 浏览: 218
要获取其他机器的CPU、内存、磁盘状态等信息,需要借助Java的Socket编程实现远程获取目标机器的系统状态信息。可以通过在目标机器上运行一个服务端程序,然后在本地机器上运行一个客户端程序来实现远程获取目标机器的系统状态信息。
以下是一个简单的示例代码:
服务端代码:
```
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端已连接:" + socket.getInetAddress());
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
String ip = (String) objectInputStream.readObject();
// 获取目标机器的系统状态信息
SystemInfo systemInfo = new SystemInfo(ip);
System.out.println(systemInfo.getCpuUsage());
System.out.println(systemInfo.getMemoryUsage());
System.out.println(systemInfo.getDiskUsage());
socket.close();
}
}
}
```
客户端代码:
```
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
String ip = "192.168.1.100"; // 目标机器的IP地址
Socket socket = new Socket(ip, 9999);
System.out.println("已连接服务端:" + socket.getInetAddress());
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
objectOutputStream.writeObject(ip);
socket.close();
}
}
```
其中,SystemInfo类用于获取目标机器的系统状态信息,示例代码如下:
```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInfo {
private String ip;
public SystemInfo(String ip) {
this.ip = ip;
}
public String getCpuUsage() throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("ssh " + ip + " top -bn1 | grep %Cpu | awk '{print $2}'");
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
return "CPU使用率:" + line;
}
public String getMemoryUsage() throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("ssh " + ip + " free -m | awk 'NR==2{printf(\"%s/%sMB %.2f%%\", $3,$2,$3*100/$2 )}'");
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
return "内存使用情况:" + line;
}
public String getDiskUsage() throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("ssh " + ip + " df -hl | awk '/^\\/dev/{printf(\"%s/%s (%s)\", $3,$2,$5);exit}'");
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
return "磁盘使用情况:" + line;
}
}
```
注意:需要在本地机器和目标机器上安装ssh,并且在本地机器上配置ssh免密码登录目标机器,才能实现远程获取目标机器的系统状态信息。
阅读全文