最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)獲取用戶的MAC地址

 更新時間:2015年10月25日 15:23:34   投稿:hebedich  
本文給大家匯總介紹了下使用java實現(xiàn)獲取客戶端用戶的MAC地址的方法,當(dāng)然最后一種更全面一些,有需要的小伙伴們可以根據(jù)需求自由選擇。

方法一:將本機(jī)地址與局域網(wǎng)內(nèi)其他機(jī)器區(qū)分開來

/**
   * 根據(jù)IP地址獲取mac地址
   * @param ipAddress 127.0.0.1
   * @return
   * @throws SocketException
   * @throws UnknownHostException
   */
  public static String getLocalMac(String ipAddress) throws SocketException,
      UnknownHostException {
    // TODO Auto-generated method stub
    String str = "";
    String macAddress = "";
    final String LOOPBACK_ADDRESS = "127.0.0.1";
    // 如果為127.0.0.1,則獲取本地MAC地址。
    if (LOOPBACK_ADDRESS.equals(ipAddress)) {
      InetAddress inetAddress = InetAddress.getLocalHost();
      // 貌似此方法需要JDK1.6。
      byte[] mac = NetworkInterface.getByInetAddress(inetAddress)
          .getHardwareAddress();
      // 下面代碼是把mac地址拼裝成String
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < mac.length; i++) {
        if (i != 0) {
          sb.append("-");
        }
        // mac[i] & 0xFF 是為了把byte轉(zhuǎn)化為正整數(shù)
        String s = Integer.toHexString(mac[i] & 0xFF);
        sb.append(s.length() == 1 ? 0 + s : s);
      }
      // 把字符串所有小寫字母改為大寫成為正規(guī)的mac地址并返回
      macAddress = sb.toString().trim().toUpperCase();
      return macAddress;
    } else {
      // 獲取非本地IP的MAC地址
      try {
        System.out.println(ipAddress);
        Process p = Runtime.getRuntime()
            .exec("nbtstat -A " + ipAddress);
        System.out.println("===process=="+p);
        InputStreamReader ir = new InputStreamReader(p.getInputStream());
         
        BufferedReader br = new BufferedReader(ir);
       
        while ((str = br.readLine()) != null) {
          if(str.indexOf("MAC")>1){
            macAddress = str.substring(str.indexOf("MAC")+9, str.length());
            macAddress = macAddress.trim();
            System.out.println("macAddress:" + macAddress);
            break;
          }
        }
        p.destroy();
        br.close();
        ir.close();
      } catch (IOException ex) {
      }
      return macAddress;
    }
  }

我們再來看下方法二:

package com.alpha.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class GetMac {

	/**
	 * java獲取客戶端網(wǎng)卡的MAC地址
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		GetMac get = new GetMac();
		System.out.println("1="+get.getMAC());
		System.out.println("2="+get.getMAC("127.0.0.1"));
	}

	// 1.獲取客戶端ip地址( 這個必須從客戶端傳到后臺):
	// jsp頁面下,很簡單,request.getRemoteAddr() ;
	// 因為系統(tǒng)的VIew層是用JSF來實現(xiàn)的,因此頁面上沒法直接獲得類似request,在bean里做了個強(qiáng)制轉(zhuǎn)換

	// public String getMyIP() {
	// try {
	// FacesContext fc = FacesContext.getCurrentInstance();
	// HttpServletRequest request = (HttpServletRequest) fc
	// .getExternalContext().getRequest();
	// return request.getRemoteAddr();
	// } catch (Exception e) {
	// e.printStackTrace();
	// }
	// return "";
	// }

	// 2.獲取客戶端mac地址
	// 調(diào)用window的命令,在后臺Bean里實現(xiàn) 通過ip來獲取mac地址。方法如下:

	// 運行速度【快】
	public String getMAC() {
		String mac = null;
		try {
			Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all");

			InputStream is = pro.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String message = br.readLine();

			int index = -1;
			while (message != null) {
				if ((index = message.indexOf("Physical Address")) > 0) {
					mac = message.substring(index + 36).trim();
					break;
				}
				message = br.readLine();
			}
			System.out.println(mac);
			br.close();
			pro.destroy();
		} catch (IOException e) {
			System.out.println("Can't get mac address!");
			return null;
		}
		return mac;
	}

	// 運行速度【慢】
	public String getMAC(String ip) {
		String str = null;
		String macAddress = null;
		try {
			Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
			InputStreamReader ir = new InputStreamReader(p.getInputStream());
			LineNumberReader input = new LineNumberReader(ir);
			for (; true;) {
				str = input.readLine();
				if (str != null) {
					if (str.indexOf("MAC Address") > 1) {
						macAddress = str
								.substring(str.indexOf("MAC Address") + 14);
						break;
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace(System.out);
			return null;
		}
		return macAddress;
	}
}

方法三,更精簡一些

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class MACAddress {
 String ip;
 String mac;
 public MACAddress (String ip){
  this.ip = ip;
 }
 public MACAddress (){
  this.ip = "0.0.0.0";
 }
 public String getMac(){
  try {
  Process p = Runtime.getRuntime().exec("arp -n");
   InputStreamReader ir = new InputStreamReader(p.getInputStream());
   LineNumberReader input = new LineNumberReader(ir);
   p.waitFor();
   boolean flag = true;
   String ipStr = "(" + this.ip + ")";
   while(flag) {
    String str = input.readLine();
    if (str != null) {
     if (str.indexOf(ipStr) > 1) {
      int temp = str.indexOf("at");
      this.mac = str.substring(
      temp + 3, temp + 20);
      break;
     }
    } else
    flag = false;
   }
  } catch (IOException | InterruptedException e) {
   e.printStackTrace(System.out);
  }
  return this.mac;
 }
 public void setIp(String ip){
  this.ip = ip;
 }

}

最后要放大招了,小伙伴們看仔細(xì)哦

首先要說的是:本方法可以支持外網(wǎng)機(jī)器的mac地址獲取。 

以前弄了一個只能訪問局域網(wǎng)。 有防火墻就訪問不了, 但是這個不用擔(dān)心了。
測試了百度的ip,已經(jīng)可以獲得mac地址

java通過ip獲取mac地址-封ip封mac地址

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
* 獲取MAC地址
* @author
* 2011-12
*/
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  第二個命令的執(zhí)行結(jié)果 
   */ 
   public static String callCmd(String[] cmd,String[] another) { 
     String result = ""; 
     String line = ""; 
     try { 
       Runtime rt = Runtime.getRuntime(); 
       Process proc = rt.exec(cmd); 
       proc.waitFor(); //已經(jīng)執(zhí)行完第一個命令,準(zhǔn)備執(zhí)行第二個命令 
       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 目標(biāo)ip,一般在局域網(wǎng)內(nèi) 
   * @param sourceString 命令處理的結(jié)果字符串 
   * @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對應(yīng)的Mac. 
       } 
     }
  
     return result; 
   }
   
   
   
   /** 
   * 
   * @param ip 目標(biāo)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 目標(biāo)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("220.181.111.148"));
   }
  
}

相關(guān)文章

  • 最常用的1000個Java類(附代碼示例)

    最常用的1000個Java類(附代碼示例)

    這篇文章主要介紹了最常用的1000個Java類(附代碼示例),需要的朋友可以參考下
    2015-04-04
  • kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明

    kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明

    這篇文章主要介紹了kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • zuul集成Sentinel,完成對path映射的限流操作

    zuul集成Sentinel,完成對path映射的限流操作

    這篇文章主要介紹了zuul集成Sentinel,完成對path映射的限流操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中Hashmap的get方法使用

    java中Hashmap的get方法使用

    這篇文章主要介紹了java中Hashmap的get方法使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java圖片添加水印實例代碼分享

    java圖片添加水印實例代碼分享

    這篇文章主要為大家詳細(xì)介紹了java圖片添加水印實例代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • IDEA配置SpringBoot熱啟動,以及熱啟動失效問題

    IDEA配置SpringBoot熱啟動,以及熱啟動失效問題

    這篇文章主要介紹了IDEA配置SpringBoot熱啟動,以及熱啟動失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Springboot @Value獲取值為空問題解決方案

    Springboot @Value獲取值為空問題解決方案

    這篇文章主要介紹了Springboot @Value獲取值為空問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java線程創(chuàng)建與Thread類的使用方法

    Java線程創(chuàng)建與Thread類的使用方法

    這篇文章主要介紹了Java線程創(chuàng)建與Thread類的使用方法,圍繞java多線程中Thread類的使用以及有關(guān)線程對象創(chuàng)建和常用方法的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價值,需要的下伙伴可以參考一下
    2022-06-06
  • Java線程的聯(lián)合用法實例分析

    Java線程的聯(lián)合用法實例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結(jié)合實例形式分析了java線程聯(lián)合的原理、實現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Maven安裝和配置阿里云鏡像(解決加載慢)

    Maven安裝和配置阿里云鏡像(解決加載慢)

    本文介紹了Maven中配置阿里云鏡像以解決依賴加載慢的問題,包括安裝Maven、配置環(huán)境變量、在IDEA中配置Maven等內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11

最新評論

曲沃县| 噶尔县| 定陶县| 宜宾市| 甘谷县| 宝兴县| 衢州市| 共和县| 东台市| 中西区| 疏附县| 南漳县| 玉树县| 绥棱县| 济阳县| 临高县| 军事| 绥宁县| 两当县| 鄂州市| 威信县| 朔州市| 东港市| 闽侯县| 平度市| 江源县| 沈丘县| 遂平县| 泰和县| 蚌埠市| 金坛市| 锡林浩特市| 湛江市| 郧西县| 上高县| 宣化县| 宜川县| 宾阳县| 嵩明县| 婺源县| 富平县|