MAC地址进行验证的方法

需要对对应的MAC地址进行验证的方法,以为很简单就能过,鼓捣了半天以后才发现,我的机器是window7,查询出来是乱码,居然不给支持。没办法在网上继续找资料。终于找到了,贴上来,以备不时之需。 
东西都有注释,自己看吧, 
Java代码收藏代码
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.net.InetAddress;  
  5. import java.net.NetworkInterface;  
  6.   
  7. /** 
  8.  * 与系统相关的一些常用工具方法. 
  9.  *  
  10.  * @author lvbogun 
  11.  * @version 1.0.0 
  12.  */  
  13. public class SystemTool {  
  14.   
  15.     /** 
  16.      * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. 
  17.      */  
  18.     public static String getOSName() {  
  19.         return System.getProperty("os.name").toLowerCase();  
  20.     }  
  21.   
  22.     /** 
  23.      * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取. 
  24.      * 如果有特殊系统请继续扩充新的取mac地址方法. 
  25.      *  
  26.      * @return mac地址 
  27.      */  
  28.     public static String getUnixMACAddress() {  
  29.         String mac = null;  
  30.         BufferedReader bufferedReader = null;  
  31.         Process process = null;  
  32.         try {  
  33.             // linux下的命令,一般取eth0作为本地主网卡  
  34.             process = Runtime.getRuntime().exec("ifconfig eth0");  
  35.             // 显示信息中包含有mac地址信息  
  36.             bufferedReader = new BufferedReader(new InputStreamReader(  
  37.                     process.getInputStream()));  
  38.             String line = null;  
  39.             int index = -1;  
  40.             while ((line = bufferedReader.readLine()) != null) {  
  41.                 // 寻找标示字符串[hwaddr]  
  42.                 index = line.toLowerCase().indexOf("hwaddr");  
  43.                 if (index >= 0) {// 找到了  
  44.                     // 取出mac地址并去除2边空格  
  45.                     mac = line.substring(index + "hwaddr".length() + 1).trim();  
  46.                     break;  
  47.                 }  
  48.             }  
  49.         } catch (IOException e) {  
  50.             e.printStackTrace();  
  51.         } finally {  
  52.             try {  
  53.                 if (bufferedReader != null) {  
  54.                     bufferedReader.close();  
  55.                 }  
  56.             } catch (IOException e1) {  
  57.                 e1.printStackTrace();  
  58.             }  
  59.             bufferedReader = null;  
  60.             process = null;  
  61.         }  
  62.         return mac;  
  63.     }  
  64.   
  65.     /** 
  66.      * 获取widnows网卡的mac地址. 
  67.      *  
  68.      * @return mac地址 
  69.      */  
  70.     public static String getWindowsMACAddress() {  
  71.         String mac = null;  
  72.         BufferedReader bufferedReader = null;  
  73.         Process process = null;  
  74.         try {  
  75.             // windows下的命令,显示信息中包含有mac地址信息  
  76.             process = Runtime.getRuntime().exec("ipconfig /all");  
  77.             bufferedReader = new BufferedReader(new InputStreamReader(  
  78.                     process.getInputStream()));  
  79.             String line = null;  
  80.             int index = -1;  
  81.             while ((line = bufferedReader.readLine()) != null) {  
  82.                 System.out.println(line);  
  83.                 // 寻找标示字符串[physical  
  84.                 index = line.toLowerCase().indexOf("physical address");  
  85.                   
  86.                 if (index >= 0) {// 找到了  
  87.                     index = line.indexOf(":");// 寻找":"的位置  
  88.                     if (index >= 0) {  
  89.                         System.out.println(mac);  
  90.                         // 取出mac地址并去除2边空格  
  91.                         mac = line.substring(index + 1).trim();  
  92.                     }  
  93.                     break;  
  94.                 }  
  95.             }  
  96.         } catch (IOException e) {  
  97.             e.printStackTrace();  
  98.         } finally {  
  99.             try {  
  100.                 if (bufferedReader != null) {  
  101.                     bufferedReader.close();  
  102.                 }  
  103.             } catch (IOException e1) {  
  104.                 e1.printStackTrace();  
  105.             }  
  106.             bufferedReader = null;  
  107.             process = null;  
  108.         }  
  109.   
  110.         return mac;  
  111.     }  
  112.   
  113.     /** 
  114.      * windows 7 专用 获取MAC地址 
  115.      *  
  116.      * @return 
  117.      * @throws Exception 
  118.      */  
  119.     public static String getMACAddress() throws Exception {  
  120.           
  121.         // 获取本地IP对象  
  122.         InetAddress ia = InetAddress.getLocalHost();  
  123.         // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。  
  124.         byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();  
  125.   
  126.         // 下面代码是把mac地址拼装成String  
  127.         StringBuffer sb = new StringBuffer();  
  128.   
  129.         for (int i = 0; i < mac.length; i++) {  
  130.             if (i != 0) {  
  131.                 sb.append("-");  
  132.             }  
  133.             // mac[i] & 0xFF 是为了把byte转化为正整数  
  134.             String s = Integer.toHexString(mac[i] & 0xFF);  
  135.             sb.append(s.length() == 1 ? 0 + s : s);  
  136.         }  
  137.   
  138.         // 把字符串所有小写字母改为大写成为正规的mac地址并返回  
  139.         return sb.toString().toUpperCase();  
  140.     }  
  141.   
  142.     /** 
  143.      * 测试用的main方法. 
  144.      *  
  145.      * @param argc 运行参数. 
  146.      * @throws Exception 
  147.      */  
  148.     public static void main(String[] argc) throws Exception {  
  149.         String os = getOSName();  
  150.         System.out.println(os);  
  151.         if (os.equals("windows 7")) {  
  152.             String mac = getMACAddress();  
  153.             System.out.println(mac);  
  154.         } else if (os.startsWith("windows")) {  
  155.             // 本地是windows  
  156.             String mac = getWindowsMACAddress();  
  157.             System.out.println(mac);  
  158.         } else {  
  159.             // 本地是非windows系统 一般就是unix  
  160.             String mac = getUnixMACAddress();  
  161.             System.out.println(mac);  
  162.         }  
  163.     }  
  164. }  


找了很多都是只支持window和linux的。windows7 因为是中文,不能用同一个方法获取。只能另想办法了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 分布式环境 Redis互斥锁

开始的时候项目没有添加互斥锁&#xff0c;用的依然是老的思路&#xff0c;在并发量增加的情况下&#xff0c;遇到了很多的问题&#xff0c;包括数据库重复读等&#xff0c;想了下考虑增加 互斥锁来排序对单个资源的操作。 Target(ElementType.METHOD) Retention(RetentionPoli…

相机添加多张图片css布局

<section class"feedback-upload"><aside class"photos"><div></div><div class"camera"></div></aside><aside class"tips"><div><span>选填0~4</span></div&…

移动端滑动操作学习

(function(window,document){var Slide function(box,judge,fun){if (!(this instanceof Slide)) return new Slide(box,judge,fun);var startx,starty;box.addEventListener("touchstart", function(e) {e.preventDefault(); // 阻止浏览器默认事件startx parseIn…

深入学习Oracle分区表及分区索引

关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言&#xff0c;基本上可以分成几类&#xff1a; ?    Range(范围)分区 ?    Hash(哈希)分区 ?    List(列表)分区 ?    以及组合分区&#xff1a;Range-Hash,R…

跟随我在oracle学习php(21)

变量间的传值方式 总体说明&#xff1a; 1&#xff0c;这里讨论的传值方式是指&#xff1a;一个变量对另一个变量 2&#xff0c;它不仅仅适用于赋值语句&#xff0c;也适用于其他有同样含义的语句&#xff0c;比如&#xff1a;函数的实参到形参 3&#xff0c;传值方式只有2种&a…

分区索引常用命令

一般使用LOCAL索引较为方便&#xff0c;而且维护代价较低&#xff0c;并且LOCAL索引是在分区的基础上去创建索引&#xff0c;类似于在一个子表内部去创建索引&#xff0c;这样开销主要是区分分区上&#xff0c;很规范的管理起来&#xff0c;在OLAP系统中应用很广泛&#xff1b;…

面向对象简述

1&#xff0c;封装&#xff1a;将对象的属性集成在 class person:def __init__(self,name,idnum):self.namenameself.idnumidnum 2&#xff0c;继承&#xff1a;子类自动拥有父类的的封装&#xff0c;除了非私有之外 class person: def __init__(self,name,idnum): self.namena…

== 和 is 的区别

1. 比较的是值 a2 b2 print(a b) # True lis1 [1,2,3] lis2 [1,2,3] print(lis1 lis2) # True 2.is 是比较的是内存地址 a name print(id(a)) # 内存地址 字符串 a name b name print(a is b) # True 数字 n 10 n110 print(n is n1) # True 小数据池 数字 -5~256 字…

oracle数据量大时候分区索引思路

有一个分区表&#xff0c;按list分区&#xff0c;只有一个本地唯一索引&#xff0c;没有外键和触发器 当单个分区数量在2000万以内时&#xff0c;insert效率还可以&#xff0c;每秒2.3-2.5万条 但数据量越大&#xff0c;速度越慢&#xff0c; 目前单个分区数量达到3亿&#xff…

【转】WPF自定义控件与样式(3)-TextBox RichTextBox PasswordBox样式、水印、Label标签、功能扩展...

一&#xff0e;前言.预览 申明&#xff1a;WPF自定义控件与样式是一个系列文章&#xff0c;前后是有些关联的&#xff0c;但大多是按照由简到繁的顺序逐步发布的等。 本文主要是对文本输入控件进行样式开发&#xff0c;及相关扩展功能开发&#xff0c;主要内容包括&#xff1a;…

JVM调优 dump文件怎么生成和分析

1、获取JVM的dump文件的两种方式   1. JVM启动时增加两个参数: #出现 OOME 时生成堆 dump: -XX:HeapDumpOnOutOfMemoryError #生成堆文件地址&#xff1a; -XX:HeapDumpPath/home/liuke/jvmlogs/ 2. 发现程序异常前通过执行指令&#xff0c;直接生成当前JVM的dmp文件&#x…

关于 Oracle 分区索引的失效和重建

--创建测试表 SQL> create table t as select object_id,object_name from dba_objects;表已创建。SQL> select min(object_id),max(object_id) from t;MIN(OBJECT_ID) MAX(OBJECT_ID)-------------- --------------2 76083SQL> create table t_part(object…

【网络安全/CTF】unseping 江苏工匠杯

该题考察序列化反序列化及Linux命令执行相关知识。 题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($thi…

yum配置中driver-class-name: com.mysql.jdbc.Driver报错

错误&#xff1a; 原因&#xff1a; 解决方法&#xff1a;把方框中的<scope>runtime</scope>删掉 转载于:https://www.cnblogs.com/zly123/p/10834958.html

gitlab中的CI

https://blog.csdn.net/chengzi_comm/article/details/78778284 转载于:https://www.cnblogs.com/effortsing/p/10142720.html

增加表空间大小的四种方法

增加表空间大小的四种方法Meathod1&#xff1a;给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILED:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF SIZE 50M;Meathod2&#xff1a;新增数据文件&#xff0c;并且允许数据文件自动增长ALTER TABLESPACE app_data …

Red Hat 8.0中设置光盘为软件源

为什么80%的码农都做不了架构师&#xff1f;>>> 以管理员身份登录 su 编辑设置软件源的repo文件 gedit /etc/yum.repos.d/redhat.repo 粘贴如下文本至空白处&#xff1a; [InstallMedia] nameRed Hat Enterprise Linux 8.0.0 mediaidNone metadata_expire-1 gpgche…

C++11并发编程:多线程std::thread

一&#xff1a;概述 C11引入了thread类&#xff0c;大大降低了多线程使用的复杂度&#xff0c;原先使用多线程只能用系统的API&#xff0c;无法解决跨平台问题&#xff0c;一套代码平台移植&#xff0c;对应多线程代码也必须要修改。现在在C11中只需使用语言层面的thread可以解…

图像特征提取——韦伯局部描述符(WLD)

一、原理及概述 韦伯局部描述符&#xff08;WLD&#xff09;是一种鲁棒性好、简单高效的局部特征描述符。WLD由两个部分组成&#xff1a;差分激励和梯度方向。 其具体算法是对于给定的一幅图像&#xff0c;通过对每个像素进行这两个分量的计算来提取其差分激励图像和梯度方向图…

Linux下Nagios的安装与配置

Linux下Nagios的安装与配置 一、Nagios简介 Nagios是一款开源的电脑系统和网络监视工具&#xff0c;能有效监控Windows、Linux和Unix的主机状态&#xff0c;交换机路由器等网络设置&#xff0c;打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员&am…