激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java 獲取用戶的MAC地址多種方法實(shí)例詳解

java 獲取用戶的MAC地址多種方法實(shí)例詳解

2020-09-14 13:582cto Java教程

這篇文章主要介紹了JAVA實(shí)現(xiàn)獲取用戶的MAC地址的多種方法實(shí)例,需要的朋友可以參考下

java實(shí)現(xiàn)獲取用戶的MAC地址方法:

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

?
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
/**
  * 根據(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;
  }
 }

我們再來看下方法二:

?
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
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來實(shí)現(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里實(shí)現(xiàn) 通過ip來獲取mac地址。方法如下:
  // 運(yùn)行速度【快】
  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;
  }
  // 運(yùn)行速度【慢】
  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;
  }
}

方法三,更精簡一些:

?
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
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地址

?
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
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"));
  }
 }

希望本篇文章可以給您幫助

原文鏈接:http://www.2cto.com/kf/201703/618455.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产扩阴视频 | 色综合视频网 | 成人短视频在线观看 | 全黄裸片武则天艳史 | 12av毛片 | 天天操天天看 | 国产成人77亚洲精品www | 欧美综合在线观看视频 | 免费在线观看国产 | 国产毛片aaa一区二区三区视频 | 久久久久久久一区二区三区 | 久久国产免费视频 | 国产一级毛片高清视频完整版 | 亚洲午夜天堂吃瓜在线 | 亚洲国产高清一区 | 一区二区精品视频 | 日本不卡一区二区三区在线观看 | 欧美视屏一区二区 | 欧美精品电影一区 | 在线观看免费毛片视频 | 精品小视频 | 免费网站看毛片 | 天天草天天色 | 久久久看| 国产黄色录像片 | 日韩av成人 | 天海翼四虎精品正在播放 | 一本视频在线观看 | 玩偶姐姐在线观看免费 | 亚洲精品久久久久www | 黄色大片在线免费观看 | 97久久日一线二线三线 | 成人mm视频在线观看 | 精品成人免费一区二区在线播放 | 精品人伦一区二区三区蜜桃网站 | 免费观看一级 | 中文日韩欧美 | 97香蕉超级碰碰久久免费软件 | 欧美日韩大片在线观看 | 免费一级在线观看 | 国产午夜精品久久久久 |