多種獲得MAC用戶IP的實例方法
這篇文章主要介紹了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'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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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