/src/main/java/com/thinkgem/jeesite/common/utils/MacUtils.java

https://gitlab.com/MetadataDev/cpom · Java · 224 lines · 143 code · 13 blank · 68 comment · 35 complexity · d43b9790afd49270d6f40ad590e9739a MD5 · raw file

  1. /**
  2. * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
  3. */
  4. package com.thinkgem.jeesite.common.utils;
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. /**
  9. * MAC地址工具
  10. *
  11. * @author ThinkGem
  12. * @version 2013-12-21
  13. */
  14. public class MacUtils {
  15. /**
  16. * 获取当前操作系统名称. return 操作系统名称 例如:windows,Linux,Unix等.
  17. */
  18. public static String getOSName() {
  19. return System.getProperty("os.name").toLowerCase();
  20. }
  21. /**
  22. * 获取Unix网卡的mac地址.
  23. *
  24. * @return mac地址
  25. */
  26. public static String getUnixMACAddress() {
  27. String mac = null;
  28. BufferedReader bufferedReader = null;
  29. Process process = null;
  30. try {
  31. /**
  32. * Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
  33. */
  34. process = Runtime.getRuntime().exec("ifconfig eth0");
  35. bufferedReader = new BufferedReader(new InputStreamReader(
  36. process.getInputStream()));
  37. String line = null;
  38. int index = -1;
  39. while ((line = bufferedReader.readLine()) != null) {
  40. /**
  41. * 寻找标示字符串[hwaddr]
  42. */
  43. index = line.toLowerCase().indexOf("hwaddr");
  44. /**
  45. * 找到了
  46. */
  47. if (index != -1) {
  48. /**
  49. * 取出mac地址并去除2边空格
  50. */
  51. mac = line.substring(index + "hwaddr".length() + 1).trim();
  52. break;
  53. }
  54. }
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. } finally {
  58. try {
  59. if (bufferedReader != null) {
  60. bufferedReader.close();
  61. }
  62. } catch (IOException e1) {
  63. e1.printStackTrace();
  64. }
  65. bufferedReader = null;
  66. process = null;
  67. }
  68. return mac;
  69. }
  70. /**
  71. * 获取Linux网卡的mac地址.
  72. *
  73. * @return mac地址
  74. */
  75. public static String getLinuxMACAddress() {
  76. String mac = null;
  77. BufferedReader bufferedReader = null;
  78. Process process = null;
  79. try {
  80. /**
  81. * linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
  82. */
  83. process = Runtime.getRuntime().exec("ifconfig eth0");
  84. bufferedReader = new BufferedReader(new InputStreamReader(
  85. process.getInputStream()));
  86. String line = null;
  87. int index = -1;
  88. while ((line = bufferedReader.readLine()) != null) {
  89. index = line.toLowerCase().indexOf("硬件地址");
  90. /**
  91. * 找到了
  92. */
  93. if (index != -1) {
  94. /**
  95. * 取出mac地址并去除2边空格
  96. */
  97. mac = line.substring(index + 4).trim();
  98. break;
  99. }
  100. }
  101. } catch (IOException e) {
  102. e.printStackTrace();
  103. } finally {
  104. try {
  105. if (bufferedReader != null) {
  106. bufferedReader.close();
  107. }
  108. } catch (IOException e1) {
  109. e1.printStackTrace();
  110. }
  111. bufferedReader = null;
  112. process = null;
  113. }
  114. // 取不到,试下Unix取发
  115. if (mac == null){
  116. return getUnixMACAddress();
  117. }
  118. return mac;
  119. }
  120. /**
  121. * 获取widnows网卡的mac地址.
  122. *
  123. * @return mac地址
  124. */
  125. public static String getWindowsMACAddress() {
  126. String mac = null;
  127. BufferedReader bufferedReader = null;
  128. Process process = null;
  129. try {
  130. /**
  131. * windows下的命令,显示信息中包含有mac地址信息
  132. */
  133. process = Runtime.getRuntime().exec("ipconfig /all");
  134. bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
  135. String line = null;
  136. int index = -1;
  137. while ((line = bufferedReader.readLine()) != null) {
  138. /**
  139. * 寻找标示字符串[physical address]
  140. */
  141. // index = line.toLowerCase().indexOf("physical address");
  142. // if (index != -1) {
  143. if (line.split("-").length == 6){
  144. index = line.indexOf(":");
  145. if (index != -1) {
  146. /**
  147. * 取出mac地址并去除2边空格
  148. */
  149. mac = line.substring(index + 1).trim();
  150. }
  151. break;
  152. }
  153. index = line.toLowerCase().indexOf("物理地址");
  154. if (index != -1) {
  155. index = line.indexOf(":");
  156. if (index != -1) {
  157. /**
  158. * 取出mac地址并去除2边空格
  159. */
  160. mac = line.substring(index + 1).trim();
  161. }
  162. break;
  163. }
  164. }
  165. } catch (IOException e) {
  166. e.printStackTrace();
  167. } finally {
  168. try {
  169. if (bufferedReader != null) {
  170. bufferedReader.close();
  171. }
  172. } catch (IOException e1) {
  173. e1.printStackTrace();
  174. }
  175. bufferedReader = null;
  176. process = null;
  177. }
  178. return mac;
  179. }
  180. public static String getMac(){
  181. String os = getOSName();
  182. String mac;
  183. if (os.startsWith("windows")) {
  184. mac = getWindowsMACAddress();
  185. } else if (os.startsWith("linux")) {
  186. mac = getLinuxMACAddress();
  187. } else {
  188. mac = getUnixMACAddress();
  189. }
  190. return mac == null ? "" : mac;
  191. }
  192. /**
  193. * 测试用的main方法.
  194. *
  195. * @param argc 运行参数.
  196. */
  197. public static void main(String[] argc) {
  198. String os = getOSName();
  199. System.out.println("os: " + os);
  200. if (os.startsWith("windows")) {
  201. String mac = getWindowsMACAddress();
  202. System.out.println("mac: " + mac);
  203. } else if (os.startsWith("linux")) {
  204. String mac = getLinuxMACAddress();
  205. System.out.println("mac: " + mac);
  206. } else {
  207. String mac = getUnixMACAddress();
  208. System.out.println("mac: " + mac);
  209. }
  210. }
  211. }