Вот решение ( Java + Windows ), чтобы определить, является ли базовая машина физической или виртуальной.
Примеры виртуальных машин:
Производитель
- Xen
- Корпорация Майкрософт
- innotek GmbH
- Red Hat
- VMware, Inc.
Модель
- HVM domU
- Виртуальная машина
- VirtualBox
- KVM
VMware Virtual Platform
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public abstract class OSUtil {
public static final List<String> readCmdOutput(String command) {
List<String> result = new ArrayList<>();
try {
Process p=Runtime.getRuntime().exec("cmd /c " + command);
p.waitFor();
BufferedReader reader=new BufferedReader(
new InputStreamReader(p.getInputStream())
);
String line;
while((line = reader.readLine()) != null) {
if(line != null && !line.trim().isEmpty()) {
result.add(line);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static final String readCmdOutput(String command, int lineNumber) {
List<String> result = readCmdOutput(command);
if(result.size() < lineNumber) {
return null;
}
return result.get(lineNumber - 1);
}
public static final String getBiosSerial() {
return readCmdOutput("WMIC BIOS GET SERIALNUMBER", 2);
}
public static final String getHardwareModel() {
return readCmdOutput("WMIC COMPUTERSYSTEM GET MODEL", 2);
}
public static final String getHardwareManufacturer() {
return readCmdOutput("WMIC COMPUTERSYSTEM GET MANUFACTURER", 2);
}
public static void main(String[] args) {
System.out.println("BIOS Serial: " + getBiosSerial());
System.out.println("Hardware Model: " + getHardwareModel());
System.out.println("Hardware Manufacturer: " + getHardwareManufacturer());
}
}
Вы можете использовать вывод, чтобы решить, является ли это виртуальной машиной или физической машиной:
Физическая производительность машины:
Серийный номер BIOS: 2HC3J12
Модель оборудования: Inspiron 7570
Производитель оборудования: Dell Inc.
Выход виртуальной машины:
Серийный номер BIOS: 0
Модель оборудования: Innotec GmBH
Производитель оборудования: Virtual Box