获取单个IP或IP段的MAC地址
代码:GetMac.java。
执行class命令示例:java -classpath bin GetMac 192.168.1.3
或
java -classpath bin GetMac 192.168.1.3 6
代码:
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
public class GetMac {
public static void ping(String ip) {
List<String> command = new ArrayList<>();
command.add("ping");// this is good
command.add("-w");
command.add("100");
command.add(ip);
try {
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process process = builder.start();
// LineNumberReader ir = new LineNumberReader(
// new InputStreamReader(process.getInputStream(), Charset.forName("gbk"))); //UTF8
// String line;
// while ((line = ir.readLine()) != null) {
// }
if (process.isAlive()) {
process.waitFor();
}
} catch (Exception e) {
e.printStackTrace();
}
// System.out.println("ping");
}
public static String getMac(String ip) {
List<String> command = new ArrayList<>();
command.add("arp");// this is good
command.add("-a");
command.add(ip);
try {
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process process = builder.start();
LineNumberReader ir = new LineNumberReader(
new InputStreamReader(process.getInputStream(), Charset.forName("gbk"))); //UTF8
String line;
int cnt =0;
while ((line = ir.readLine()) != null) {
if("".equals(line.trim()))continue;
cnt++;
// System.out.println(line);
// if(line.contains("动态")) {
//第三行
if(cnt==3) {
String arr[] = line.split(" ");
for(int i=arr.length-1;i>-1;i--) {
if(arr[i].length()>0&&arr[i].contains("-")) {
return arr[i].toUpperCase();
}
}
}
}
if (process.isAlive()) {
process.waitFor();
}
} catch (Exception e) {
e.printStackTrace();
return "";
}
return "";
}
//命令1: GetMac 192.168.1.3
//命令2: GetMac 192.168.1.3 5
public static void main(String[] args) {
String ip = args[0];
if(args.length>1) {
String endIp = args[1]; //结束ip(最末段)
int end = Integer.parseInt(endIp);
int index=ip.lastIndexOf(".");
int start = Integer.parseInt(ip.substring(index+1)); //起始ip(最末段)
String preStr = ip.substring(0, index+1); //ip段前缀
for(int i=start;i<=end;i++) {
String tmpIp = preStr + i;
ping(tmpIp);
String mac = getMac(tmpIp);
System.out.println(tmpIp + " " + mac);
}
return;
}
ping(ip);
String mac = getMac(ip);
System.out.println(ip + " " + mac);
}
}