import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
/**
* 系统工具类
* @author zql
* @createTime 2020-11-30 22:12:42
* @version 1.1
* @modifyLog 1.1 优化代码
*
*/
public class SystemUtil {
/**
* 获得本机的IP
* @author zql
* @createTime 2020-11-30 22:13:02
*
* @return
*/
public static String getLocalIp() {
String localIp = null;
try {
localIp = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// TODO :zql,2020-10-14,[使用时打印日志]
e.printStackTrace();
System.err.println(e.getMessage());
}
return localIp;
}
/**
* 获得本机的名称
* @author zql
* @createTime 2020-11-30 22:13:15
*
* @return 本机名称
*/
public static String getLocalName() {
String localName = null;
try {
localName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
// TODO :zql,2020-10-14,[使用时打印日志]
e.printStackTrace();
System.err.println(e.getMessage());
}
return localName;
}
/**
* 获得本机的MAC地址
* @author zql
* @createTime 2020-11-30 22:13:34
*
* @return 本机的MAC地址
*/
public static String getLocalMac() {
String localMac = null;
try {
byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
if (Objects.isNull(mac)) {
System.err.println("获取网卡 MAC 地址失败,网卡可能被禁用!");
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
sb.append("-");
}
// 字节转为整数
int temp = mac[i] & 0xff;
String s = Integer.toHexString(temp);
if (s.length() == 1) {
sb.append("0").append(s);
} else {
sb.append(s);
}
}
localMac = sb.toString().toUpperCase();
} catch (SocketException e) {
// TODO :zql,2020-10-14,[使用时打印日志]
e.printStackTrace();
System.err.println(e.getMessage());
} catch (UnknownHostException e) {
// TODO :zql,2020-10-14,[使用时打印日志]
e.printStackTrace();
System.err.println(e.getMessage());
}
return localMac;
}
/**
* 获取来访者ip地址
* @author zql
* @createTime 2020-11-30 22:14:23
*
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {
String ipAddr = null;
String ignore = "unknown";
// 代理进来,则透过防火墙获取真实IP地址
final String[] HEADERS_TO_TRY = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP",
"HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP",
"HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR", "X-Real-IP" };
for (String header : HEADERS_TO_TRY) {
String ip = request.getHeader(header);
if (StringUtil.isNotBlank(ip) && !ignore.equalsIgnoreCase(ip)) {
ipAddr = ip;
break;
}
}
// 如果没有代理,则获取真实ip,StringUtil工具:https://blog.csdn.net/mr_zql/article/details/100059370
if (StringUtil.isBlank(ipAddr) || ignore.equalsIgnoreCase(ipAddr)) {
ipAddr = request.getRemoteAddr();
}
ipAddr = ipAddr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddr;
return ipAddr;
}
/**
* 获取来访者的浏览器版本
* @author zql
* @createTime 2020-11-30 22:20:38
*
* @param request
* @return
*/
public static String getRequestBrowserInfo(HttpServletRequest request) {
String browserVersion = null;
String header = request.getHeader("user-agent");
if (StringUtil.isBlank(header)) {
return "";
}
browserVersion = BrowserVerEnum.getVersion(header);
return browserVersion;
}
/**
* 获取系统版本信息
* @author zql
* @createTime 2020-11-30 22:20:24
*
* @param request
* @return
*/
public static String getRequestSystemInfo(HttpServletRequest request) {
String systemInfo = null;
String header = request.getHeader("user-agent");
if (StringUtil.isBlank(header)) {
return "";
}
// 得到用户的操作系统
systemInfo = SystemInfoEnum.getInfo(header);
return systemInfo;
}
/**
* 判断是否为合法IP
* @author zql
* @createTime 2020-11-30 22:18:02
*
* @param ipAddress
* @return
*/
public static boolean isValidIp(String ipAddress) {
String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
Pattern pattern = Pattern.compile(ip);
Matcher matcher = pattern.matcher(ipAddress);
return matcher.matches();
}
/**
* 浏览器版本
* @author zql
* @createTime 2020-12-05 15:02:36
* @version 1.0
*
*/
enum BrowserVerEnum {
IE_6("MSIE 6.0", "IE 6"),
IE_7("MSIE 7.0", "IE 7"),
IE_8("MSIE 8.0", "IE 8"),
IE_9("MSIE 9.0", "IE 9"),
IE_10("MSIE 10.0", "IE 10"),
IE_11("rv:11.0", "IE 11"),
FIREFOX("Firefox", "Firefox"),
CHROME("Chrome", "Chrome"),
SAFARI("Safari", "Safari"),
CAMINO("Camino", "Camino"),
KONQUEROR("Konqueror", "Konqueror");
private String flag;
private String ver;
private BrowserVerEnum(String flag, String ver) {
this.flag = flag;
this.ver = ver;
}
public String getFlag() {
return this.flag;
}
public String getVer() {
return this.ver;
}
public static String getVersion(String header) {
BrowserVerEnum[] bvs = BrowserVerEnum.values();
for (BrowserVerEnum bv : bvs) {
if (header.indexOf(bv.getFlag()) > 0) {
return bv.getVer();
}
}
return "Undefined";
}
}
/**
* 用户的操作系统
* @author zql
* @createTime 2020-12-05 15:02:36
* @version 1.0
*
*/
enum SystemInfoEnum {
WINDOWS_VISTA_SERVER_2008("NT 6.0", "Windows Vista/Server 2008"),
WINDOWS_SERVER_2003("NT 5.2", "Windows Server 2003"),
WINDOWS_XP("NT 5.1", "Windows XP"),
WINDOWS_VISTA("NT 6.0", "Windows Vista"),
WINDOWS_7("NT 6.1", "Windows 7"),
WINDOWS_SLATE("NT 6.2", "Windows Slate"),
WINDOWS_9("NT 6.3", "Windows 9"),
WINDOWS_10("NT 10.0", "Windows 10"),
WINDOWS_2000("NT 5", "Windows 2000"),
WINDOWS_NT4("NT 4", "Windows NT4"),
WINDOWS_ME("Me", "Windows Me"),
WINDOWS_98("98", "Windows 98"),
WINDOWS_95("95", "Windows 95"),
MAC("Mac", "Mac"),
UNIX("Unix", "UNIX"),
LINUX("Linux", "Linux"),
SUNOS("SunOS", "SunOS");
private String flag;
private String info;
private SystemInfoEnum(String flag, String info) {
this.flag = flag;
this.info = info;
}
public String getFlag() {
return this.flag;
}
public String getInfo() {
return this.info;
}
public static String getInfo(String header) {
SystemInfoEnum[] sis = SystemInfoEnum.values();
for (SystemInfoEnum si : sis) {
if (header.indexOf(si.getFlag()) > 0) {
return si.getInfo();
}
}
return "Undefined";
}
}
}
普通项目需要引入的包
servlet-api-2.5.jar
commons-lang-2.5.jar