pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ServerInfoPrint</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Boot.java:
import os.AbstractServerInfo;
import os.LinuxServerInfo;
import os.WindowsServerInfo;
import java.util.List;
public class Boot {
public static void printServerInfo() throws Exception {
String osName = System.getProperty("os.name").toLowerCase();
AbstractServerInfo serverInfo;
//根据不同操作系统类型选择不同的数据获取方法
if (osName.startsWith("windows")) {
serverInfo = new WindowsServerInfo();
} else if (osName.startsWith("linux")) {
serverInfo = new LinuxServerInfo();
}else{//其他服务器类型
serverInfo = new LinuxServerInfo();
}
System.out.println( "server info:" );
System.out.println( "macAddress list:" );
List<String> macAddressList = serverInfo.getMacAddress();
if( macAddressList == null ){
return;
}
for( String macAddress:macAddressList ){
System.out.println( " " + macAddress );
}
}
public static void main(String[] args) throws Exception {
printServerInfo();
}
}
AbstractServerInfo.java:
package os;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public abstract class AbstractServerInfo {
/**
* 获取Mac地址
*/
public abstract List<String> getMacAddress() throws Exception;
/**
* 获取当前服务器所有符合条件的InetAddress
*/
protected List<InetAddress> getLocalAllInetAddress() throws Exception {
List<InetAddress> result = new ArrayList<>(4);
// 遍历所有的网络接口
for (Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); networkInterfaces.hasMoreElements(); ) {
NetworkInterface iface = (NetworkInterface) networkInterfaces.nextElement();
// 在所有的接口下再遍历IP
for (Enumeration inetAddresses = iface.getInetAddresses(); inetAddresses.hasMoreElements(); ) {
InetAddress inetAddr = (InetAddress) inetAddresses.nextElement();
//排除LoopbackAddress、SiteLocalAddress、LinkLocalAddress、MulticastAddress类型的IP地址
if (!inetAddr.isLoopbackAddress() /*&& !inetAddr.isSiteLocalAddress()*/
&& !inetAddr.isLinkLocalAddress() && !inetAddr.isMulticastAddress()) {
result.add(inetAddr);
}
}
}
return result;
}
/**
* 获取某个网络接口的Mac地址
*/
protected String getMacByInetAddress(InetAddress inetAddr) {
try {
byte[] mac = NetworkInterface.getByInetAddress(inetAddr).getHardwareAddress();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
stringBuffer.append("-");
}
//将十六进制byte转化为字符串
String temp = Integer.toHexString(mac[i] & 0xff);
if (temp.length() == 1) {
stringBuffer.append("0" + temp);
} else {
stringBuffer.append(temp);
}
}
return stringBuffer.toString().toUpperCase();
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
}
LinuxServerInfo.java:
package os;
import java.net.InetAddress;
import java.util.List;
import java.util.stream.Collectors;
public class LinuxServerInfo extends AbstractServerInfo {
@Override
public List<String> getMacAddress() throws Exception {
List<String> result = null;
//1. 获取所有网络接口
List<InetAddress> inetAddresses = getLocalAllInetAddress();
if (inetAddresses != null && inetAddresses.size() > 0) {
//2. 获取所有网络接口的Mac地址
result = inetAddresses.stream().map(this::getMacByInetAddress).distinct().collect(Collectors.toList());
}
return result;
}
}
WindowsServerInfo.java:
package os;
import java.net.InetAddress;
import java.util.List;
import java.util.stream.Collectors;
public class WindowsServerInfo extends AbstractServerInfo {
@Override
public List<String> getMacAddress() throws Exception {
List<String> result = null;
//1. 获取所有网络接口
List<InetAddress> inetAddresses = getLocalAllInetAddress();
if (inetAddresses != null && inetAddresses.size() > 0) {
//2. 获取所有网络接口的Mac地址
result = inetAddresses.stream().map(this::getMacByInetAddress).distinct().collect(Collectors.toList());
}
return result;
}
}
步骤:
cmd
cd E:\git\ServerInfoPrint
mvn clean
mvn install
cd E:\git\ServerInfoPrint\target\classes
jar cvf ServerInfoPrinter.jar ./
打开 ServerInfoPrinter.jar 中的 META-INF/MANIFEST.MF 文件,在最后面添加一行"Main-Class: Boot"
java -jar ServerInfoPrinter.jar