首頁 Java java教程 多種獲得MAC用戶IP的實例方法

多種獲得MAC用戶IP的實例方法

May 05, 2017 pm 02:25 PM

這篇文章主要介紹了JAVA實作取得使用者的MAC位址的多種方法實例,需要的朋友可以參考下

java實作取得使用者的MAC位址方法:

方法一:將本機位址與區域網路內其他機器區分開來

/**
  * 根据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转化为正整数
    String s = Integer.toHexString(mac[i] & 0xFF);
    sb.append(s.length() == 1 ? 0 + s : s);
   }
   // 把字符串所有小写字母改为大写成为正规的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获取客户端网卡的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() ;
  // 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 
  // 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地址
  // 调用window的命令,在后台Bean里实现 通过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&#39;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;
 }
}
登入後複製

最後要放大招了,小夥伴們看仔細哦

首先要說的是:本方法可以支援外網機器的mac位址取得。

以前弄了一個只能存取區域網路。 有防火牆就訪問不了, 但是這個不用擔心了。

測試了百度的ip,已經可以取得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 第二个命令的执行结果 
  */
  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("220.181.111.148"));
  }
 }
登入後複製

【相關推薦】

1. Java免費視訊教學

2. JAVA教學手冊

3. 全面解析Java註解

以上是多種獲得MAC用戶IP的實例方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mac鍵盤輸入密碼無反應? mac鍵盤輸入密碼無反應? Feb 20, 2024 pm 01:33 PM

導讀:這篇文章本站來跟大家介紹mac鍵盤輸入密碼無反應的相關內容,希望對大家有幫助,一起來看看。蘋果Mac系統無法輸入密碼如何解決還可以嘗試在其他電腦上連接這個鍵盤,看看是否正常運作。如果在另一台電腦上也出現同樣的問題,那麼很可能是鍵盤本身的故障。您可以考慮更換鍵盤或修理它。第一次用你的Mac電腦登入支付寶時,你會發現登入介面,無法輸入密碼。密碼輸入欄顯示:“請點此安裝控制項”,所以支付寶登入需要安裝安全控制。安全控件,可以對你輸入的資訊(金額、密碼等)進行加密保護,提高帳號安全。系

3 招教你輕鬆自訂 Mac 電腦名稱、主機名稱和 Bonjour 名稱 3 招教你輕鬆自訂 Mac 電腦名稱、主機名稱和 Bonjour 名稱 Mar 06, 2024 pm 12:20 PM

許多Mac用戶往往習慣保留設備的預設名稱,可能從未考慮過更改。很多人選擇沿用初始設定時的名稱,例如「張三的MacBookAir」或簡單的「iMac」。學會如何修改Mac的名稱是一項非常實用的技能,尤其是在擁有多台裝置時,可以幫助你快速區分和管理它們。接下來,我們將一步步教你如何在macOS系統中更改電腦名稱、主機名稱和Bonjour名稱(本地主機名稱)。為什麼要更改Mac名稱?修改Mac名稱不僅能彰顯個性,還能有助於提升使用體驗:個人化你的Mac:預設名稱可能不符合你的口味,換一個自己喜歡的名字

mac裝程式密碼忘了? mac裝程式密碼忘了? Feb 20, 2024 pm 01:00 PM

導讀:本篇文章本站來跟大家介紹mac裝程式密碼忘了的相關內容,希望對大家有幫助,一起來看看吧。蘋果電腦安裝軟體密碼忘了怎麼辦首先,在手機設定中找到iCloud並點選開啟。接著,輸入帳號和密碼。在登入按鈕下方有一行小字,提示是否忘記ID或密碼,點選這個選項。通常情況下,當您在登入介面多次輸入錯誤密碼後,MacBookPro會提示您使用已綁定的AppleID來重設密碼。您只需按照系統提示的步驟進行操作即可完成密碼重設。 3.先將Mac關機,然後重新開機,按下電源鍵的同時,立刻按住鍵盤上的com

pkg檔安裝mac? pkg檔安裝mac? Feb 20, 2024 pm 03:21 PM

前言:今天本站來給各位分享關於pkg檔案安裝mac的相關內容,如果能正好解決你現在面臨的問題,別忘了關注本站,現在開始吧! macos過往版本pkg無法安裝升級作業系統:如果您的筆記型電腦正在使用較舊的作業系統版本,建議升級到最新的作業系統版本。因為較舊的版本可能無法支援安裝最新的macOS系統。在磁碟工具中選擇“抹掉”,然後在格式中選擇Macos擴展,不要勾選加密選項,也不要選擇apfs格式,最後點擊“抹掉”按鈕,這樣就可以解決無法完成macOS安裝的問題。將應用程式的圖示拖曳到以App開頭的文件

蘋果mac打字怎麼翻頁? 蘋果mac打字怎麼翻頁? Feb 20, 2024 pm 12:54 PM

導語:今天本站來給各位分享關於蘋果mac打字怎麼翻頁的相關內容,如果能正好解決你現在面臨的問題,別忘了關注本站,現在開始吧!蘋果MacBook筆記型電腦的觸控板使用技巧蘋果電腦設定雙指滑動的步驟如下:在電腦桌面上找到「設定」圖示並點擊。在設定介面中選擇“觸控板”,然後點選“捲動縮放”。在滾動縮放選項中勾選“滾動方向:自然”即可完成設定。在蘋果電腦上設定使用兩指滑動的方法很簡單。首先,打開電腦並點擊螢幕頂部的「設定」圖示。在設定介面中,選擇“觸控板”選項。然後點擊“滾動縮放”,確保勾選了“滾動方向

微信mac如何設定語音訊息自動轉成文字-設定語音轉成文字的方法 微信mac如何設定語音訊息自動轉成文字-設定語音轉成文字的方法 Mar 19, 2024 am 08:28 AM

近日有一些小夥伴諮詢小編微信mac如何設定語音訊息自動轉成文字?下面就為大家帶來了微信mac設定語音訊息自動轉成文字的方法,有需要的小夥伴可以來了解了解哦。第一步:首先,打開Mac版微信。如圖:第二步:接著,點選『設定』。如圖:第三步:然後,點選『通用』。如圖:第四步:再勾選『聊天中的語音訊息自動轉成文字』選項即可。如圖:第五步:最後,關閉視窗即可。如圖:

mac對檔案剪切到硬碟? mac對檔案剪切到硬碟? Feb 20, 2024 pm 01:00 PM

導語:本文本站來為大家介紹mac對檔案剪下到硬碟的相關內容,希望對大家有幫助,一起來看看吧。 Mac電腦如何將照片匯出到行動硬碟Mac電腦可以利用「訪問」(Finder)或「照片」(Photos)應用程式將照片匯出到行動硬碟。使用「訪問」(Finder)匯出照片時,首先要確保行動硬碟已連接到Mac,並且Mac已成功識別。將Mac中的照片轉移到硬碟的步驟很簡單:首先,連接行動硬碟到電腦,然後開啟【啟動台】圖示。接著,在彈出的視窗中找到並點選【照片】圖示。在開啟的【照片】視窗中,按住【Shift】鍵

mac黑蘋果引導方式? mac黑蘋果引導方式? Feb 20, 2024 pm 01:00 PM

前言:本文本站來為大家介紹mac黑蘋果引導方式的相關內容,希望對大家有幫助,一起來看看。黑蘋果OC引導快速配置教學1、loverconfigurator軟體介面後,點選「開機參數」設置,預設開機磁碟區名稱設定為安裝黑蘋果系統時抹掉的磁碟名稱,_卻奔涓奈? 0,再點選右下角儲存,重新啟動電腦,_突岱⑾植換嵩儷魷魘_lover引導介面,而是直接進入蘋果logo開機介面。安全啟動可以有效防止未經簽署的Bootloader從任何內部磁碟或USB磁碟機啟動。然而,Clover或OC引導並不支援安全啟動功能。要啟

See all articles