通过java获取mac地址,下面是完整的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
package
com.juziku.util;
import
java.io.BufferedReader;
import
java.io.InputStreamReader;
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
/**
* 获取MAC地址
* @author sunlightcs
* 2011-4-29
* http://hi.juziku.com/sunlightcs/
*/
public
class
GetMacAddress {
public
static
String callCmd(String[] cmd) {
String result =
""
;
String line =
""
;
try
{
Process proc = Runtime.getRuntime().exec(cmd);
InputStreamReader is =
new
InputStreamReader(proc.getInputStream());
BufferedReader br =
new
BufferedReader (is);
while
((line = br.readLine ()) !=
null
) {
result += line;
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
result;
}
/**
*
* @param cmd 第一个命令
* @param another 第二个命令
* @return 第二个命令的执行结果
*/
public
static
String callCmd(String[] cmd,String[] another) {
String result =
""
;
String line =
""
;
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
proc.waitFor();
//已经执行完第一个命令,准备执行第二个命令
proc = rt.exec(another);
InputStreamReader is =
new
InputStreamReader(proc.getInputStream());
BufferedReader br =
new
BufferedReader (is);
while
((line = br.readLine ()) !=
null
) {
result += line;
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
result;
}
/**
*
* @param ip 目标ip,一般在局域网内
* @param sourceString 命令处理的结果字符串
* @param macSeparator mac分隔符号
* @return mac地址,用上面的分隔符号表示
*/
public
static
String filterMacAddress(
final
String ip,
final
String sourceString,
final
String macSeparator) {
String result =
""
;
String regExp =
"((([0-9,A-F,a-f]{1,2}"
+ macSeparator +
"){1,5})[0-9,A-F,a-f]{1,2})"
;
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(sourceString);
while
(matcher.find()){
result = matcher.group(
1
);
if
(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(
1
))) {
break
;
//如果有多个IP,只匹配本IP对应的Mac.
}
}
return
result;
}
/**
*
* @param ip 目标ip
* @return Mac Address
*
*/
public
static
String getMacInWindows(
final
String ip){
String result =
""
;
String[] cmd = {
"cmd"
,
"/c"
,
"ping "
+ ip
};
String[] another = {
"cmd"
,
"/c"
,
"arp -a"
};
String cmdResult = callCmd(cmd,another);
result = filterMacAddress(ip,cmdResult,
"-"
);
return
result;
}
/**
*
* @param ip 目标ip
* @return Mac Address
*
*/
public
static
String getMacInLinux(
final
String ip){
String result =
""
;
String[] cmd = {
"/bin/sh"
,
"-c"
,
"ping "
+ ip +
" -c 2 && arp -a"
};
String cmdResult = callCmd(cmd);
result = filterMacAddress(ip,cmdResult,
":"
);
return
result;
}
/**
* 获取MAC地址
* @return 返回MAC地址
*/
public
static
String getMacAddress(String ip){
String macAddress =
""
;
macAddress = getMacInWindows(ip).trim();
if
(macAddress==
null
||
""
.equals(macAddress)){
macAddress = getMacInLinux(ip).trim();
}
return
macAddress;
}
/**
* 测试
*/
public
static
void
main(String[] args) {
System.out.println(getMacAddress(
"192.168.10.203"
));
}
}
|