pom.xml:
- "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.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>ServerInfoPrintartifactId>
- <version>1.0-SNAPSHOTversion>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <configuration>
- <source>8source>
- <target>8target>
- 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
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
getMacAddress() throws Exception; -
- /**
- * 获取当前服务器所有符合条件的InetAddress
- */
- protected List
getLocalAllInetAddress() throws Exception { - List
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
getMacAddress() throws Exception { - List
result = null; -
- //1. 获取所有网络接口
- List
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
getMacAddress() throws Exception { - List
result = null; -
- //1. 获取所有网络接口
- List
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