Copiez le code comme suit :
paquet com.yswc.dao.sign ;
importer java.io.BufferedReader ;
importer java.io.InputStreamReader ;
importer java.util.regex.Matcher ;
importer java.util.regex.Pattern ;
/**
*
* Obtenir l'adresse MAC
*
* @auteur
*
*2011-12
*
*/
classe publique GetMacAddress {
chaîne statique publique callCmd(String[] cmd) {
Résultat de la chaîne = "" ;
Ligne de chaîne = "" ;
essayer {
Processus proc = Runtime.getRuntime().exec(cmd);
InputStreamReader est = new InputStreamReader(proc.getInputStream());
BufferedReader br = nouveau BufferedReader (est);
while ((line = br.readLine ()) != null) {
résultat += ligne ;
}
}attraper(Exception e) {
e.printStackTrace();
}
renvoyer le résultat ;
}
/**
*
*
*
* @param cmd
* première commande
*
* @param un autre
* La deuxième commande
*
* @return Le résultat de l'exécution de la deuxième commande
*
*/
public static String callCmd(String[] cmd,String[] autre) {
Résultat de la chaîne = "" ;
Ligne de chaîne = "" ;
essayer {
Runtime rt = Runtime.getRuntime();
Processus proc = rt.exec(cmd);
proc.waitFor(); // La première commande a été exécutée et la deuxième commande a été exécutée.
proc = rt.exec(un autre);
InputStreamReader est = new InputStreamReader(proc.getInputStream());
BufferedReader br = nouveau BufferedReader (est);
while ((line = br.readLine ()) != null) {
résultat += ligne ;
}
}attraper(Exception e) {
e.printStackTrace();
}
renvoyer le résultat ;
}
/**
*
*
*
* @param ip
* IP cible, généralement au sein du LAN
*
* @param sourceString
* La chaîne de résultat du traitement des commandes
*
* @param macSeparator
* délimiteur mac
*
* @return adresse mac, représentée par le délimiteur ci-dessus
*
*/
public static String filterMacAddress (final String ip, final String sourceString, final String macSeparator) {
Résultat de la chaîne = "" ;
String regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})";
Modèle de modèle = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(sourceString);
tandis que(matcher.find()){
résultat = matcher.group(1);
if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
break; // S'il y a plusieurs IP, seul le Mac correspondant à cette IP sera mis en correspondance.
}
}
renvoyer le résultat ;
}
/**
*
*
*
* @param ip
* IP cible
*
* @return Adresse Mac
*
*
*
*/
chaîne statique publique getMacInWindows (IP de chaîne finale) {
Résultat de la chaîne = "" ;
String[] cmd = {"cmd","/c","ping " + ip};
String[] autre = {"cmd","/c","arp -a"};
Chaîne cmdResult = callCmd(cmd,un autre);
result = filterMacAddress(ip,cmdResult,"-");
renvoyer le résultat ;
}
/**
*
* @param ip
* IP cible
* @return Adresse Mac
*
*/
chaîne statique publique getMacInLinux (IP de chaîne finale) {
Résultat de la chaîne = "" ;
String[] cmd = {"/bin/sh","-c","ping " + ip + " -c 2 && arp -a" };
Chaîne cmdResult = callCmd(cmd);
result = filterMacAddress(ip,cmdResult,":");
renvoyer le résultat ;
}
/**
* Obtenir l'adresse MAC
*
* @return Adresse MAC de retour
*/
chaîne statique publique getMacAddress(String ip){
Chaîne macAddress = "" ;
macAddress = getMacInWindows(ip).trim();
if(macAddress==null||"".equals(macAddress)){
macAddress = getMacInLinux(ip).trim();
}
retourner macAddress ;
}
public static void main (String[] arguments) {
Chaîne mac=getMacAddress("192.168.1.102");
System.out.println("mac:"+mac);
}
}