java 获取用户的MAC地址多种方法实例详解

这篇文章主要介绍了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 stubString 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地址拼装成StringStringBuilder 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;}} elseflag = 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; }   /** * *获取windows的mac* @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; }  /** * 获取linux的mac* @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"));}}

希望本篇文章可以给您帮助!!!

java 获取用户的MAC地址多种方法实例详解相关推荐

  1. java pathinfo,nginx下支持PATH_INFO的方法实例详解

    本文实例分析了nginx下支持PATH_INFO的方法.分享给大家供大家参考,具体如下: 要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pa ...

  2. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  3. js获取IP地址多种方法实例教程

    js获取IP地址方法总结  js代码获取IP地址的方法,如何在js中取得客户端的IP地址. 原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338. ...

  4. JAVA获取机器的MAC地址

    JAVA获取机器的MAC地址 需求:获取机器的mac地址 问题:一些国产操作系统获取不到MAC地址,以下搜集了一些获取mac地址的方法 1.获取MAC地址 ps:该方法在银河麒麟中可用 public ...

  5. java servlet init方法_JSP开发Servlet重写init()方法实例详解

    jsp开发servlet重写init()方法实例详解 写一个servlet时,有时需要我们重写该servlet的初始化方法,然后,究竟是重写init(servletconfig config),还是重 ...

  6. oracle大对象实例_Oracle解析复杂json的方法实例详解

    问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析.如此 ...

  7. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  8. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  9. php xml 实例教程,php解析xml方法实例详解,解析xml实例详解_PHP教程

    php解析xml方法实例详解,解析xml实例详解 本文以实例形式详细讲述了php解析xml方法.分享给大家供大家参考.具体分析如下: books.xml文件如下: Harry Potter J K. ...

最新文章

  1. Linux/Ubuntu
  2. R语言实战应用精讲50篇(二十五)-时空数据统计模型:确定性预测模型
  3. Dart 流中的 listen 和 forEach 有什么区别?
  4. Spring来装配组件
  5. Boost:bimap双图的突变关系的测试程序
  6. php快速开发框架津县,BetePHP:一个轻量级快速开发框架
  7. axure web组件_AXURE原型设计:移动端选择器的应用
  8. OJ1004: 三位数的数位分离
  9. 风控成长之路---必知必会工具与业务
  10. cisco、华为交换机常用配置对照表
  11. FCRD-P帆软考试总结
  12. linux与windows笔记本连线共享wifi
  13. 组合模型——Tree models、Boosting、 Committee
  14. 计算机里的文案怎么设置背景,如何将图片设置为Word文档的背景
  15. 类似支付宝密码框输入
  16. 贪心算法---Huffman编码---神秘电报密码
  17. index.php.bak 颓废_CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
  18. 【软件下载】换新电脑记录下下载的软件时所需地址
  19. 温度传感器Pt100 热电阻的原理
  20. web播放FTP地址视频

热门文章

  1. 关于狮子管理狼群的方法
  2. 格力空调均价下降,市场份额上升
  3. [渝粤教育] 商丘师范学院 网球 参考 资料
  4. span标签的鼠标滑入提示_html鼠标悬停提示文字 div a span均适用
  5. vulnhub靶机 djinn1
  6. 怎样向喜欢的女生表白?教你向女生表白的方式!
  7. 英语总结-14年4月
  8. Pepper/Nao初级教程:第四章 Pepper/Nao的常用指令盒介绍
  9. Opencv读取视频、打开摄像头、保存视频和视频倒放
  10. html打赏代码,利用弹出窗口实现打赏的代码