广告
返回顶部
首页 > 资讯 > 操作系统 >Java代码如何判断linux系统windows系统
  • 379
分享到

Java代码如何判断linux系统windows系统

Java判断linux系统Java判断windows系统 2023-01-10 09:01:25 379人浏览 独家记忆
摘要

目录Java代码判断linux系统windows系统Java在Linux与windows系统下获取主板序列号,cpu序列号以及Mac地址总结Java代码判断linux系统window

Java代码判断linux系统windows系统

在使用硬件SDK的时候,往往有windows、linux两套。

本地开发的时候使用windows,打包发布的时候使用linux,来回切换很麻烦。

可以使用下面的判断来加载不同版本的SDK。

package Commom;
 
public class osSelect {
 
    public static boolean isLinux() {
        return System.getProperty("os.name").toLowerCase().contains("linux");
    }
 
    public static boolean isWindows() {
        return System.getProperty("os.name").toLowerCase().contains("windows");
    }
 
}

Java在Linux与windows系统下获取主板序列号,cpu序列号以及mac地址

概述:

实现了获取当前操作系统名称,主板序列号,CPU序列号,mac地址的相关方法函数。

应对的场景是信创设备无法正常识别我们的加密狗,对于软件license的限制,我们通过系统当前日期以及绑定对方设备进行限制。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class DmcUtils {
 
 
	
	public static String getOSName() {
		return System.getProperty("os.name").toLowerCase();
	}
 
	// 主板序列号 windows
	public static String getMainBordId_windows() {
		String result = "";
		try {
			File file = File.createTempFile("realhowto", ".vbs");
			file.deleteOnExit();
			FileWriter fw = new java.io.FileWriter(file);
 
			String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
					+ "Set colItems = objWMIService.ExecQuery _ \n" + "   (\"Select * from Win32_BaseBoard\") \n"
					+ "For Each objItem in colItems \n" + "    Wscript.Echo objItem.SerialNumber \n"
					+ "    exit for  ' do the first cpu only! \n" + "Next \n";
 
			fw.write(vbs);
			fw.close();
			Process p = Runtime.getRuntime().exec("cscript //NoLoGo " + file.getPath());
			BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = input.readLine()) != null) {
				result += line;
			}
			input.close();
		} catch (Exception e) {
			System.out.print("获取主板信息错误");
			 
		}
		return result.trim();
	}
 
	// 主板序列号 linux
	public static String getMainBordId_linux() {
 
		String result = "";
		String maniBord_cmd = "dmidecode | grep 'Serial Number' | awk '{print $3}' | tail -1";
		Process p;
		try {
			p = Runtime.getRuntime().exec(new String[] { "sh", "-c", maniBord_cmd });// 管道
			BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = br.readLine()) != null) {
				result += line;
				break;
			}
			br.close();
		} catch (IOException e) {
			System.out.print("获取主板信息错误");
		}
		return result;
	}
 
	
	public static String getMAC_linux() {
		String mac = null;
		BufferedReader bufferedReader = null;
		Process process = null;
		try {
			// linux下的命令,一般取eth0作为本地主网卡
			process = Runtime.getRuntime().exec("ifconfig eth0");
			// 显示信息中包含有mac地址信息
			bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				// 寻找标示字符串[hwaddr]
				index = line.toLowerCase().indexOf("hwaddr");
				if (index >= 0) {// 找到了
					// 取出mac地址并去除2边空格
					mac = line.substring(index + "hwaddr".length() + 1).trim();
					break;
				}
			}
		} catch (IOException e) {
			System.out.print("获取mac信息错误");
		 
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (IOException e1) {
				System.out.print("获取mac信息错误");
			}
			bufferedReader = null;
			process = null;
		}
		return mac;
	}
 
        
        public static String getMAC_linuxs() {
		
		String mac = null;
		BufferedReader bufferedReader = null;
		Process process = null;
		try {
			// linux下的命令,一般取eth0作为本地主网卡
			process = Runtime.getRuntime().exec("ifconfig");
			// 显示信息中包含有mac地址信息
			bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String line = null;
			int index = -1;
			 while ((line = bufferedReader.readLine()) != null) 
			 {
				 Pattern pat = Pattern.compile("\\b\\w+:\\w+:\\w+:\\w+:\\w+:\\w+\\b");
				 Matcher mat= pat.matcher(line);
				 if(mat.find())
				 {
					 mac=mat.group(0);
				 }
			 }
 
		} catch (IOException e) {
			System.out.print("获取mac信息错误");
			 
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (IOException e1) {
				System.out.print("获取mac信息错误");
				 
			}
			bufferedReader = null;
			process = null;
		}
		return mac;
	}
 
 
	
	public static String getMAC_windows() {
		InetAddress ip = null;
		NetworkInterface ni = null;
		List<String> macList = new ArrayList<String>();
		try {
			Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
					.getNetworkInterfaces();
			while (netInterfaces.hasMoreElements()) {
				ni = (NetworkInterface) netInterfaces.nextElement();
				// ----------特定情况,可以考虑用ni.getName判断
				// 遍历所有ip
				Enumeration<InetAddress> ips = ni.getInetAddresses();
				while (ips.hasMoreElements()) {
					ip = (InetAddress) ips.nextElement();
					if (!ip.isLoopbackAddress() // 非127.0.0.1
							&& ip.getHostAddress().matches("(\\d{1,3}\\.){3}\\d{1,3}")) {
						macList.add(getMacFromBytes(ni.getHardwareAddress()));
					}
				}
			}
		} catch (Exception e) {
			System.out.print("获取mac信息错误");
			 
		}
		if (macList.size() > 0) {
			return macList.get(0);
		} else {
			return "";
		}
 
	}
 
	private static String getMacFromBytes(byte[] bytes) {
		StringBuffer mac = new StringBuffer();
		byte currentByte;
		boolean first = false;
		for (byte b : bytes) {
			if (first) {
				mac.append("-");
			}
			currentByte = (byte) ((b & 240) >> 4);
			mac.append(Integer.toHexString(currentByte));
			currentByte = (byte) (b & 15);
			mac.append(Integer.toHexString(currentByte));
			first = true;
		}
		return mac.toString().toUpperCase();
	}
 
	
	public static String getcpUID_Windows() {
		String result = "";
		try {
			File file = File.createTempFile("tmp", ".vbs");
			file.deleteOnExit();
			FileWriter fw = new java.io.FileWriter(file);
			String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
					+ "Set colItems = objWMIService.ExecQuery _ \n" + "   (\"Select * from Win32_Processor\") \n"
					+ "For Each objItem in colItems \n" + "    Wscript.Echo objItem.ProcessorId \n"
					+ "    exit for  ' do the first cpu only! \n" + "Next \n";
 
			fw.write(vbs);
			fw.close();
			Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
			BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while ((line = input.readLine()) != null) {
				result += line;
			}
			input.close();
			file.delete();
		} catch (Exception e) {
			System.out.print("获取mac信息错误");
		}
		return result.trim();
	}
 
	
	public static String getCPUID_linux() throws InterruptedException {
		String result = "";
		String CPU_ID_CMD = "dmidecode";
		BufferedReader bufferedReader = null;
		Process p = null;
		try {
			p = Runtime.getRuntime().exec(new String[] { "sh", "-c", CPU_ID_CMD });// 管道
			bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				// 寻找标示字符串[hwaddr]
				index = line.toLowerCase().indexOf("uuid");
				if (index >= 0) {// 找到了
					// 取出mac地址并去除2边空格
					result = line.substring(index + "uuid".length() + 1).trim();
					break;
				}
			}
 
		} catch (IOException e) {
			System.out.print("获取mac信息错误");
		}
		return result.trim();
	}
	
	public static void main(String [] args) throws Exception {
		System.out.println("开始获取!");
		String cpuId=getCPUID_linux();
		System.out.println("linux cpuId:"+cpuId);
		//String cpuId=  getCPUID_Windows();
		//System.out.println("Windows cpuId:"+cpuId);
		String bordId= getMainBordId_linux();
		System.out.println("linux bordId:"+bordId);
		//String bordId=  getMainBordId_windows();
		//System.out.println("Windows bordId:"+bordId);
		System.out.println("获取结束!");
	}
 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java代码如何判断linux系统windows系统

本文链接: https://www.lsjlt.com/news/177234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java代码如何判断linux系统windows系统
    目录Java代码判断linux系统windows系统Java在Linux与windows系统下获取主板序列号,cpu序列号以及mac地址总结Java代码判断linux系统window...
    99+
    2023-01-10
    Java判断linux系统 Java判断windows系统
  • nodejs中判断windows、mac或linux系统
    const os = require('os');if (os.type() == 'Windows_NT') {//windows平台}if (os.type() == 'Darwin') {//mac}if (os.type() == ...
    99+
    2023-09-17
    linux node
  • 如何判断Linux系统安装在VMware上
    如何判断当前linux系统是否安装在VMware上面呢? 因为公司大部分服务器位于VMware上,也有小部分系统部署在物理机上面。今天老大要求统计一下VMware和物理机上服务器的数量,个人简单测试、验证了一下,当然也测...
    99+
    2022-06-04
    linux系统安装VMware linux系统安装
  • linux如何判断系统是否为64位
    这篇文章主要介绍了linux如何判断系统是否为64位的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何判断系统是否为64位文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2023-02-17
    linux
  • 怎么判断Linux系统是否健康
    这篇文章主要为大家展示了“怎么判断Linux系统是否健康”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么判断Linux系统是否健康”这篇文章吧。一提到对于查看系统运行的健康状况,可能大多数朋友...
    99+
    2023-06-16
  • 如何判断Linux系统是否被非法进入
    如何判断Linux系统是否被非法进入,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于在线运行的业务系统,安全性是一个至关重要的问题。服务器被非法进入最常见的表...
    99+
    2023-06-16
  • 怎么通过ABAP代码判断当前系统类型
    本篇内容介绍了“怎么通过ABAP代码判断当前系统类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用工具类 CL_COS_UTILITIES...
    99+
    2023-06-04
  • Linux中怎么判断文件系统类型
    Linux中怎么判断文件系统类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、 使用 df 命令df 命令报告文件系统磁盘空间利用率,要显示特定的磁盘分区的文件系统类型,像...
    99+
    2023-06-16
  • Linux系统怎么判断文件是否存在
    今天就跟大家聊聊有关Linux系统怎么判断文件是否存在,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Linux系统判断文件是否存在1、使用ls命令进行判断 ls ...
    99+
    2023-06-28
  • Linux系统如何使用ping命令判断网络好坏
    这篇文章主要介绍Linux系统如何使用ping命令判断网络好坏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Linux系统中如果要像判断网络是否好坏可以使用ping命令,ping命令是最常用的网络命令,可以测试与目...
    99+
    2023-06-28
  • Linux系统如何查看内核代码
    要查看Linux系统的内核代码,可以按照以下步骤进行操作:1. 下载内核源代码:- 可以从官方网站上下载最新的内核源代码,网址为 h...
    99+
    2023-10-18
    Linux
  • 如何在Linux系统上使用Java编写NumPy代码?
    在Linux系统上使用Java编写NumPy代码可能是一项挑战,但是它可以提供一些巨大的优势。本文将向您介绍如何使用Java编写NumPy代码,并向您展示一些示例代码。 NumPy是一个用于Python的科学计算库,它为Python提供了一...
    99+
    2023-09-30
    numy linux leetcode
  • Windows下如何安装Linux系统
    这篇文章主要介绍Windows下如何安装Linux系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!继Windows10的1607版本之后,微软开始推送WSL(Windows subSystem Linux)的更新(...
    99+
    2023-06-16
  • Linux系统中怎么判断是否被黑客入侵
    这期内容当中小编将会给大家带来有关Linux系统中怎么判断是否被黑客入侵,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux内核进程伪装了什么在Linux上,内核创建了许多线程来帮助完成系统任务,这些...
    99+
    2023-06-16
  • linux如何查看系统编码和修改系统编码
    这篇文章主要介绍了linux如何查看系统编码和修改系统编码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何查看系统编码和修改系统编码文章都会有所收获,下面我们一起来...
    99+
    2022-10-19
  • 您是否知道如何在Windows和Linux系统之间同步Go代码?
    在不同操作系统之间同步代码是一项常见的任务,特别是在开发Go应用程序时。在Windows和Linux之间同步代码可能会面临一些挑战,因为这两个操作系统之间的文件系统结构和文件路径是不同的。然而,有几种方法可以让您在这两个操作系统之间轻松同...
    99+
    2023-08-21
    linux 同步 windows
  • Java函数教程:在Linux系统下如何编写高效代码?
    Java是一种高级编程语言,它被广泛地应用于各种领域。在Linux系统下编写Java代码需要考虑一些特殊的问题,因为Linux系统与Windows系统有很大的不同。在本篇文章中,我们将介绍如何在Linux系统下编写高效的Java函数。 ...
    99+
    2023-08-13
    教程 函数 linux
  • 怎么用代码判断当前系统是否支持某个版本的feature
    怎么用代码判断当前系统是否支持某个版本的feature,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9...
    99+
    2023-06-02
  • Ubuntu Linux系统如何访问Windows文件
    这篇文章主要讲解了“Ubuntu Linux系统如何访问Windows文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ubuntu Linux系统如何访问Windows文件”吧!一、Ubu...
    99+
    2023-06-16
  • Linux下如何远程登陆Windows系统
    这篇文章将为大家详细讲解有关Linux下如何远程登陆Windows系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux下远程登陆Windows系统具体步骤1.在VMware环境分别搭建一台Linu...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作