JAVA实现获取MAC地址

合集下载

java获取当前接口请求路径的几种方法

java获取当前接口请求路径的几种方法

java获取当前接口请求路径的几种方法在Java开发中,有时候我们需要获取当前接口的请求路径,以便进行一些处理。

下面我将介绍几种常用的方法来获取当前接口的请求路径。

1. 使用HttpServletRequest对象在Servlet或者Spring MVC中,我们可以通过HttpServletRequest对象获取当前请求的路径。

可以使用如下代码来获取:```HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String requestUrl = request.getRequestURL().toString();String queryString = request.getQueryString();String fullPath = requestUrl + (queryString != null ? "?" + queryString : "");```通过`getRequestURL()`方法获取请求的URL,再使用`getQueryString()`方法获取请求URL中的查询参数。

最后将二者拼接起来,即可得到完整的请求路径。

2. 使用HttpRequestUtils工具类如果项目中没有使用Servlet或Spring MVC框架,我们可以自己编写一个HttpRequestUtils工具类,代码如下:```import javax.servlet.http.HttpServletRequest;public class HttpRequestUtils {public static String getRequestUrl(HttpServletRequest request) {StringBuffer requestUrl = request.getRequestURL();String queryString = request.getQueryString();String fullPath = requestUrl + (queryString != null ? "?" + queryString : "");return fullPath;}}```在需要获取请求路径的地方,如下调用该工具类的方法即可:```HttpServletRequest request = ...;String requestUrl = HttpRequestUtils.getRequestUrl(request);```3. 使用JAX-RS的UriInfo对象如果你在使用JAX-RS开发RESTful服务,可以使用UriInfo对象获取请求路径。

java 根据IP获取客户端Mac地址

java 根据IP获取客户端Mac地址

import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;publicclass GetMACAddress {public String getMACAddress(String ipAddress) {String str = "", strMAC = "", macAddress = "";try {Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);InputStreamReader ir = newInputStreamReader(pp.getInputStream());LineNumberReader input = new LineNumberReader(ir);for (int i = 1; i <100; i++) {str = input.readLine();if (str != null) {if (str.indexOf("MAC Address") >1) {strMAC = str.substring(str.indexOf("MAC Address") + 14,str.length());break;}}}} catch (IOException ex) {return"Can't Get MAC Address!";}//if (strMAC.length() <17) {return"Error!";}macAddress = strMAC.substring(0, 2) + ":" + strMAC.substring(3, 5)+ ":" + strMAC.substring(6, 8) + ":" + strMAC.substring(9, 11)+ ":" + strMAC.substring(12, 14) + ":"+ strMAC.substring(15, 17);//return macAddress;}publicstaticvoid main(String[] args) {GetMACAddress getMACAddress = new GetMACAddress();System.out.println(getMACAddress.getMACAddress("59.78.63.38")); //获得该ip地址的mac地址}publicstatic String procAll(String str) {return procStringEnd(procFirstMac(procAddress(str)));publicstatic String procAddress(String str) {int indexof = str.indexOf("Physical Address");if (indexof >0) {return str.substring(indexof, str.length());}return str;}publicstatic String procFirstMac(String str) {int indexof = str.indexOf(":");if (indexof >0) {return str.substring(indexof + 1, str.length()).trim(); }return str;}publicstatic String procStringEnd(String str) {int indexof = str.indexOf("\r");if (indexof >0) {return str.substring(0, indexof).trim();}return str;}。

java 获取路径

java 获取路径

java 获取路径在日常开发中,获取文件路径是一个常见任务,特别是在使用java实现多层次的文件路径交互时,更是重要。

对于java开发人员来说,可以借助一些已有的函数实现路径的获取,也可以通过某些特定的类来完成。

一、java中的路径获取方式在java中,开发者可以通过两种方式来获取路径,分别是通过文件操作类和文件系统路径类来实现。

1.文件操作类文件操作类是java.io.*包中的一个类,主要用于处理文件操作,提供了getCanonicalPath()、getAbsolutePath()和getPath()等方法,可以用于获取文件的路径,如下:// 使用File类中的getCanonicalPath()方法获取路径File file = new File(myfile.txtString canonicalPath = file.getCanonicalPath();System.out.println(CanonicalPath: + canonicalPath);// 使用File类中的getAbsolutePath()方法获取路径String absolutePath = file.getAbsolutePath();System.out.println(AbsolutePath: + absolutePath);// 使用File类中的getPath()方法获取路径String path = file.getPath();System.out.println(Path: + path);2.文件系统路径类文件系统路径类是java.nio.file.Paths是java.nio.file包中的一个类,是一个与文件系统相关的类,常用的方法有get()和toAbsolutePath(),可以用于获取路径,如下:// 使用Path中的get()方法获取路径String path = Paths.get(myfile.txttoString();System.out.println(Path: + path);// 使用Paths中的toAbsolutePath()方法获取路径Path path1 = Paths.get(myfile.txttoAbsolutePath();System.out.println(Path1: + path1);二、路径类型分析1.绝对路径绝对路径是指从操作系统根目录开始,包含全部文件和目录的路径,其特点是由一系列的“/”(反斜杠)组成,从第一个“/”开始一直到最后一个“/”结束,是一条完整的路径,不会受其他路径的影响。

Java获取浏览器端MAC地址

Java获取浏览器端MAC地址
192.168.1.100 用户真实 IP 为: 192.168.1.110
String str = ""; String macAddress = ""; try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (int i = 1; i < 100; i++) {
//所以又第二个 if 判断 你可先在你机器上 cmd 测试下 nbtstat -A 命令 当然得有 一个你可以 ping 通的 //网络 ip 地址,然后根据你得到的结果中 mac 地址显示方式来确定这个循环取值
} } } catch (IOException e) { e.printStackTrace(System.out); } return macAddress; } 附: 通过代理了的客户端 ip 地址获取方式 于是可得出获得客户端真实 IP 地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址本⽂介绍了JAVA如何获取客户端IP地址和MAC地址,分享给⼤家,具体如下:1.获取客户端IP地址public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}return request.getRemoteAddr();}为什么不直接使⽤request.getRemoteAddr();⽽要在之前判断两个请求头"X-Forwarded-For"和"X-Real-IP"X-Forwarded-For: client1, proxy1, proxy2, proxy3其中的值通过⼀个逗号+空格把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到⼀个请求,就把请求来源IP地址添加到右边。

所有我们只取第⼀个IP地址X-Real-IP,⼀般只记录真实发出请求的客户端IP解决⽤localhost访问ip为0:0:0:0:0:0:0:1的问题public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("WL-Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getRemoteAddr();return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;}2.获取客户端MAC地址UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);String smac = umac.GetRemoteMacAddr();添加⼀个获取MAC的时间限制final UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);//---长时间获取不到MAC地址则放弃ExecutorService exec = Executors.newFixedThreadPool(1);Callable<String> call = new Callable<String>() {public String call() throws Exception {return umac.GetRemoteMacAddr();}};try {Future<String> future = exec.submit(call);String smac = future.get(1000 * 1, LISECONDS);loginMonitor.setMacAddress(smac);} catch (TimeoutException ex) {loginMonitor.setMacAddress("获取失败");("获取MAC地址超时");}// 关闭线程池exec.shutdown();//---需要先获取IP地址作为参数构造⼀个UdpGetClientMacAddrUdpGetClientMacAddr.javapackage monsys.security.controller;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;/*** 主机A向主机B发送“UDP-NetBIOS-NS”询问包,即向主机B的137端⼝,发Query包来询问主机B的NetBIOS Names信息。

查看mac地址的方法

查看mac地址的方法

查看mac地址的方法
要查看MAC地址,可以按照以下步骤进行操作:
1. 在Mac电脑上,点击屏幕左上角的"苹果"图标。

2. 从下拉菜单中选择“系统偏好设置”。

3. 在系统偏好设置窗口中,找到并点击“网络”选项。

4. 在网络设置窗口左侧的列表中,选择你当前正在使用的网络类型(Wi-Fi、以太网等)。

5. 在右侧窗口中,点击“高级”按钮。

6. 在弹出的高级设置窗口中,选择“硬件”标签。

7. 在“硬件地址”一栏中,就是你的MAC地址。

这个地址通常由十六进制数表示,由六个双字节组成,每个双字节用两个冒号(:)分隔。

例如,00:11:22:33:44:55。

JAVA实现获取MAC地址

JAVA实现获取MAC地址

JAVA实现获取MAC地址获取MAC地址是通过Java程序来获取设备的物理地址,MAC地址是网卡的唯一标识符,用于在网络中唯一地标识一个设备。

Java中获取MAC地址的实现方式有多种,下面将介绍几种常用的方式:1. 使用InetAddress类和NetworkInterface类```javapublic class GetMacAddresspublic static void main(String[] args)tryInetAddress ipAddress = InetAddress.getLocalHost(;NetworkInterface networkInterface =NetworkInterface.getByInetAddress(ipAddress);byte[] macAddressBytes =networkInterface.getHardwareAddress(;StringBuilder macAddressBuilder = new StringBuilder(;for (int i = 0; i < macAddressBytes.length; i++)macAddressBuilder.append(String.format("%02X%s", macAddressBytes[i], (i < macAddressBytes.length - 1) ? "-" : ""));}String macAddress = macAddressBuilder.toString(;System.out.println("MAC Address: " + macAddress);} catch (UnknownHostException , SocketException e)e.printStackTrace(;}}```这种方法通过获取本机的InetAddress对象,然后通过该对象获取对应的NetworkInterface对象,再通过该对象获取硬件地址(MAC地址),最后将硬件地址格式化成常见的xx-xx-xx-xx-xx-xx形式。

如何获取本机电脑的mac地址

如何获取本机电脑的mac地址

如何获取本机电脑的mac地址?方法有以下几种:1,点击开始后,选择[运行]之后输入[cmd]打开一个Command的窗口这时在里面输入[getmac]就能查看Mac地址2,在Windows 9X系列的计算机系统:依次单击“开始”→“运行”→输入“winipcfg”→回车,其中适配器地址就是计算机的MAC地址。

3,在Windows 2000/XP的计算机系统中,依次单击“开始”→“运行”→输入“cmd”→回车,在出现的命令提示符界面中输入“ipconfig /all”→回车,可以得到计算机的MAC地址,其中Physical Address就是计算机的MAC地址。

另外,在所有系统中,获取MAC地址还有另外一种较特别的方法,这种方法无须在命令行提示符下键入命令,无须牢记复杂的命令。

只要鼠标轻点几下即可。

方法是:鼠标依次点击“开始→所有程序→附件→系统工具→系统信息”在“系统摘要”下,展开“组件→网络→适配器”,右边的摘要中就会列出本机的MAC 地址。

4,如果您在线,还可以用以下方法查MAC地址:首先启动IE连接到网络,鼠标右击任务栏中托盘区中的网络连接图标(两台小电脑),点选“状态”→“支持”选项卡下的“详细信息”,其中的实际地址即为您网卡的MAC地址如何获取局域网其他计算机的MAC地址?我们是6个人使用一个路由器上网的,这样属于局域网吗?怎样在一台机子上看别人的MAC地址,计算机名,和IP地址?在不借助第三方软件的情况下.arp -a好像只能看自己的MAC地址吧?windows中的ARP命令可以。

实际上ARP协议就是获取对方mac地址的,可以查看一下。

比如你们都是自动获取ip,只需要在六台机器全开的情况下,在运行中键入arp -a你的缓存中肯定会有对方的mac,然后ipconfig /all看一看自己的是那个,区分一下就ok了在局域网中由于是在办公室,只有一台公共电脑能上网,如果你经常也要上网找资料怎么办?1.首先去能上网的公共电脑上的"运行"中输入"CMD"回车,再输入"ipcongfig" /all 按回车,会显示出此机ip 设置信息,这些信息中我们要记住"物理地址"和"IP 地址",默认网关等,一般我只记物理和IP地址两项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用纯JAVA语言编程读取MAC地址的实现本文介绍如何在WindowXP/NT/2000环境中,编写纯Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的MAC地址的编程方法。

1 引言用Java编写的程序,可以很方便地运行在各种平台的环境。

但在实际的开发过程中,有时不得不涉及一些底层的编程。

比如为了防止软件盗用,我们希望软件只能在指定计算机上运行,所以需要程序读取该机区分于其它计算机的硬件特征,如MAC地址等。

作为一种跨平台语言,给Java语言提出了挑战。

本文正是针对该问题,提出一种直接用纯Java语言,读去MAC地址的编程方法。

我们知道,在每一个Java应用程序中都存在着一个与其运行环境相联系的Runtime对象。

该对象可执行外部命令、查可用内存等。

而多数操作系统都提供有查询该机MAC地址的命令。

如在Microsoft的操作系统中,命令IPCONFIG等。

本文的思路是在程序中运行一个外部命令,将该命令的运行结果作为一个流(Stream),读取并分析之,进而实现获取MAC地址的目的。

2 Runtime类在每一个Java 应用程序里面,都有惟一的一个Runtime 对象。

通过这个Runtime 对象,应用程序可以与其运行环境发生相互作用。

一般不实例化一个Runtime对象。

但是可以通过调用静态方法Runtime.getRuntime( )而获得对当前Runtime对象的引用。

Runtime 类的大多数方法是实例方法。

Runtime 对象的作用主要有:执行外部命令;返回空闲内存;运行垃圾回收器;加载动态库等。

Applets和其他不可信赖的程序由于没有引起一个安全异常(SecurityException)而不能调用任何的Runtime方法。

下面的例子演示了怎样使用Runtime 对象运行一个外部命令。

以下是引用片段::Process process = Runtime.getRuntime().exec("cmd.exe /c dir");process.waitFor();:Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。

通过Process可以控制该子进程的执行或获取该子进程的信息。

第二条语句的目的是等待子进程完成后再往下执行。

上面的程序在运行时会执行dir命令。

如果在Windows95/98下,命令格式可以写成"command.exe /c dir"。

开关/C指明后面跟随的字符串是命令,并在执行命令后关闭DOS 窗口。

方法exec还可以打开一个不可执行的程序,但该文件存在关联的应用程序。

以打开一个word文档Mydoc.doc文件为例,Java中可以有以下两种写法:以下是引用片段:exec(""cmd /E:ON /c start MyDoc.doc"");exec(" c:Program FilesMicrosoft Officeofficewinword.exe .mydoc.doc" );在第一种方式中,被执行的命令是start Mydoc.doc,开关E:ON 指定DOS 命令处理器允许命令扩展,而start 命令会开启一个单独的窗口执行所提供的命令。

执行一个有标准输出的DOS命令,程序执行完后往往不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。

导致该现象的原因可能是该命令的输出比较多,而运行窗口的输出缓冲区不够大。

解决的办法是,利用Java的Process类提供的方法让Java虚拟机截获DOS运行的标准输出,在waitfor()命令之前读出该缓冲区的内容。

以运行命令dir为例,典型的程序如下:以下是引用片段::String line;Process process = Runtime.getRuntime().exec("cmd /c dir");BufferedReader bufferedReader = new BufferedReader ( new InputStrea mReader(process.getInputStream()));while ( (line = bufferedReader.readLine()) != -1) System. out.println(line);process.waitFor( );:3 ProcessRuntime.exec方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。

抽象类Process封装了一个进程(process),一个正在执行的程序。

它主要被当作由Runtime类中的exec( )方法所创建的对象的类型的超类。

在抽象类Process中,主要包含了如下一些抽象方法。

InputStream getInputStream( ):返回一个从进程的out输出流中读输入的输入流。

OutputStream getOutputStream( ):返回一个从进程的in输入流中写输出的输出流。

int waitFor( ) throws InterruptedException:返回由进程返回的退出码。

这个方法直到调用它的进程中止,才会返回。

4 程序编写我们先来分析ipconfig/all的输出格式:图1从图1中我们看到MAC地址包含的行为:“ Physical Address. . . . . . . . . : 00-10-DC-A9-0B-2C”。

为了找到MAC地址,我们一行一行读取字符,只要找到字符串“ Physical Address. . . . . . . . . :”,就可以找到MAC地址了。

下面是实现的程序片段:以下是引用片段::Process process = Runtime.getRuntime().exec("cmd /c ipconfig /all") ;BufferedReader bufferedReader =new BufferedReader(new InputStreamReader (process.getInputStream()) );while ( (line=bufferedReader.readLine()) != null){if(line.indexOf("Physical Address. . . . . . . . . :") != -1){ if(line.indexOf(":") != -1){physicalAddress = line.substring(line.indexOf(":")+2);:在上面的程序中,为了读取命令输出的字符,利用子进程process生成了一个数据流缓冲区。

依据上面的代码,我们编写了一个类ReadMAC,见下面程序的源代码:以下是引用片段:import java.io.*;public class ReadMAC {public static String physicalAddress = "read MAC error!";public ReadMAC() {}public static String checkPhysicalAddress(){try{String line;Process process = Runtime.getRuntime().exec("cmd /c ipconfig /all") ;BufferedReader bufferedReader = new BufferedReader(new InputStreamR eader(process.getInputStream()));while ( (line=bufferedReader.readLine()) != null){if(line.indexOf("Physical Address. . . . . . . . . :") != -1){ if(line.indexOf(":") != -1){physicalAddress = line.substring(line.indexOf(":")+2);break; //找到MAC,推出循环}}}process.waitFor();}catch(Exception e){e.printStackTrace();}return physicalAddress;}public static void main(String[] args) {System.out.println("本机的MAC地址是: "+ ReadMAC.checkPhysicalAddress());}}编译运行该程序的输出结果如图2所示。

图2由于每一台计算机的MAC地址都不同,所以该程序在不同计算机上运行结果都会不一样。

5 结束语作为一个跨平台语言,编写的JAVA程序一般都与硬件无关,因而能运行在不同的操作系统环境。

但这给编写底层相关的程序时带来不便。

Java的应用程序都存在着一个与其运行环境相联系的Runtime对象,利用该对象可执行外部命令,在WindowsXP/NT/2000环境中的命令IPCONFIG的输出包含有MAC地址。

本文编写的Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的MAC地址。

由于IPCONFIG命令是操作系统命令,所以该方法既方便又可靠。

以上讨论的程序适合于Windows XP/NT/2000操作系统,因为它是基于该操作系统的命令IPCONFIG格式的。

由于不同操作系统读取MAC地址的命令、以及命令输出格式的不同,所以该程序不能直接运用到其它系统。

要移植到其它系统只需针对命令的输出格式稍作修改。

相关文档
最新文档