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