如何通过Java代码获取本机MAC地址和IP地址的具体实现方法?

2026-04-11 23:431阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1188个文字,预计阅读时间需要5分钟。

如何通过Java代码获取本机MAC地址和IP地址的具体实现方法?

在Java中,获取Windows、Linux和Windows 7的MAC地址,以及解决多网卡存在的问题,可以按照以下步骤进行:

1. 使用`InetAddress`类获取MAC地址。

2.使用`Runtime.getRuntime().exec()`执行系统命令来获取网络接口信息,解决多网卡问题。

以下是一个示例代码:

java

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetAddress;

public class NetworkInfo { public static void main(String[] args) { try { // 获取MAC地址 InetAddress localMachine=InetAddress.getLocalHost(); byte[] mac=localMachine.getMacAddress(); StringBuilder sb=new StringBuilder(); for (byte b : mac) { sb.append(String.format(%02X-, b)); } String macAddress=sb.substring(0, sb.length() - 1); System.out.println(MAC Address: + macAddress);

// 获取Windows、Linux和Windows 7的MAC地址 String os=System.getProperty(os.name).toLowerCase(); if (os.contains(win)) { // Windows系统 String command=ipconfig /all; String[] commandList={ cmd.exe, /c, command }; Process process=Runtime.getRuntime().exec(commandList); BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line=reader.readLine()) !=null) { if (line.contains(Physical Address)) { String[] parts=line.split(:); if (parts.length > 1) { String macAddressWin=parts[1].trim().replace( , ); System.out.println(Windows MAC Address: + macAddressWin); } break; } } } else { // Linux系统 String command=ifconfig; String[] commandList={ /bin/sh, -c, command }; Process process=Runtime.getRuntime().exec(commandList); BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line=reader.readLine()) !=null) { if (line.contains(ether)) { String[] parts=line.split(:); if (parts.length > 1) { String macAddressLinux=parts[1].trim(); System.out.println(Linux MAC Address: + macAddressLinux); } break; } } }

} catch (IOException e) { e.printStackTrace(); } }}


Java中获取windows、Linux和windows7的MAC地址
多网卡是存在问题,比如会找到Virsualbox的网卡。

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.NetworkInterface; /** * 与系统相关的一些常用工具方法. * * @author lvbogun * @version 1.0.0 */ public class SystemTool { /** * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. */ public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } /** * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取. * 如果有特殊系统请继续扩充新的取mac地址方法. * * @return mac地址 */ public static String getUnixMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { // linux下的命令,一般取eth0作为本地主网卡 process = Runtime.getRuntime().exec("ifconfig eth0"); // 显示信息中包含有mac地址信息 bufferedReader = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { // 寻找标示字符串[hwaddr] index = line.toLowerCase().indexOf("hwaddr"); if (index >= 0) {// 找到了 // 取出mac地址并去除2边空格 mac = line.substring(index + "hwaddr".length() + 1).trim(); break; } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e1) { e1.printStackTrace(); } bufferedReader = null; process = null; } return mac; } /** * 获取widnows网卡的mac地址. * * @return mac地址 */ public static String getWindowsMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { // windows下的命令,显示信息中包含有mac地址信息 process = Runtime.getRuntime().exec("ipconfig /all"); bufferedReader = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); // 寻找标示字符串[physical index = line.toLowerCase().indexOf("physical address"); if (index >= 0) {// 找到了 index = line.indexOf(":");// 寻找":"的位置 if (index >= 0) { System.out.println(mac); // 取出mac地址并去除2边空格 mac = line.substring(index + 1).trim(); } break; } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e1) { e1.printStackTrace(); } bufferedReader = null; process = null; } return mac; } /** * windows 7 专用 获取MAC地址 * * @return * @throws Exception */ public static String getMACAddress() throws Exception { // 获取本地IP对象 InetAddress ia = InetAddress.getLocalHost(); // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。 byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); // 下面代码是把mac地址拼装成String StringBuffer sb = new StringBuffer(); 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地址并返回 return sb.toString().toUpperCase(); } /** * 测试用的main方法. * * @param argc 运行参数. * @throws Exception */ public static void main(String[] argc) throws Exception { String os = getOSName(); System.out.println(os); if (os.equals("windows 7")) { String mac = getMACAddress(); System.out.println(mac); } else if (os.startsWith("windows")) { // 本地是windows String mac = getWindowsMACAddress(); System.out.println(mac); } else { // 本地是非windows系统 一般就是unix String mac = getUnixMACAddress(); System.out.println(mac); } } }



[size=large][color=red]得到所有IP[/color][/size]


这段代码会输出计算机中所有设备的ip,找需要的




Enumeration<NetworkInterface> netInterfaces = null; try { netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { NetworkInterface ni = netInterfaces.nextElement(); System.out.println("DisplayName:" + ni.getDisplayName()); System.out.println("Name:" + ni.getName()); Enumeration<InetAddress> ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { System.out.println("IP:" + ips.nextElement().getHostAddress()); } } } catch (Exception e) { e.printStackTrace(); }


如何通过Java代码获取本机MAC地址和IP地址的具体实现方法?





[color=red]以下代码在多网卡出现问题[/color]


import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; /* * 物理地址是48位,别和ipv6搞错了 */ public class LOCALMAC { /** * @param args * @throws UnknownHostException * @throws SocketException */ public static void main(String[] args) throws UnknownHostException, SocketException { // TODO Auto-generated method stub //得到IP,输出PC-201309011313/122.206.73.83 InetAddress ia = InetAddress.getLocalHost(); System.out.println(ia); getLocalMac(ia); } private static void getLocalMac(InetAddress ia) throws SocketException { // TODO Auto-generated method stub //获取网卡,获取地址 byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); System.out.println("mac数组长度:"+mac.length); StringBuffer sb = new StringBuffer(""); for(int i=0; i<mac.length; i++) { if(i!=0) { sb.append("-"); } //字节转换为整数 int temp = mac[i]&0xff; String str = Integer.toHexString(temp); System.out.println("每8位:"+str); if(str.length()==1) { sb.append("0"+str); }else { sb.append(str); } } System.out.println("本机MAC地址:"+sb.toString().toUpperCase()); } }

本文共计1188个文字,预计阅读时间需要5分钟。

如何通过Java代码获取本机MAC地址和IP地址的具体实现方法?

在Java中,获取Windows、Linux和Windows 7的MAC地址,以及解决多网卡存在的问题,可以按照以下步骤进行:

1. 使用`InetAddress`类获取MAC地址。

2.使用`Runtime.getRuntime().exec()`执行系统命令来获取网络接口信息,解决多网卡问题。

以下是一个示例代码:

java

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetAddress;

public class NetworkInfo { public static void main(String[] args) { try { // 获取MAC地址 InetAddress localMachine=InetAddress.getLocalHost(); byte[] mac=localMachine.getMacAddress(); StringBuilder sb=new StringBuilder(); for (byte b : mac) { sb.append(String.format(%02X-, b)); } String macAddress=sb.substring(0, sb.length() - 1); System.out.println(MAC Address: + macAddress);

// 获取Windows、Linux和Windows 7的MAC地址 String os=System.getProperty(os.name).toLowerCase(); if (os.contains(win)) { // Windows系统 String command=ipconfig /all; String[] commandList={ cmd.exe, /c, command }; Process process=Runtime.getRuntime().exec(commandList); BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line=reader.readLine()) !=null) { if (line.contains(Physical Address)) { String[] parts=line.split(:); if (parts.length > 1) { String macAddressWin=parts[1].trim().replace( , ); System.out.println(Windows MAC Address: + macAddressWin); } break; } } } else { // Linux系统 String command=ifconfig; String[] commandList={ /bin/sh, -c, command }; Process process=Runtime.getRuntime().exec(commandList); BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line=reader.readLine()) !=null) { if (line.contains(ether)) { String[] parts=line.split(:); if (parts.length > 1) { String macAddressLinux=parts[1].trim(); System.out.println(Linux MAC Address: + macAddressLinux); } break; } } }

} catch (IOException e) { e.printStackTrace(); } }}


Java中获取windows、Linux和windows7的MAC地址
多网卡是存在问题,比如会找到Virsualbox的网卡。

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.NetworkInterface; /** * 与系统相关的一些常用工具方法. * * @author lvbogun * @version 1.0.0 */ public class SystemTool { /** * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. */ public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } /** * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取. * 如果有特殊系统请继续扩充新的取mac地址方法. * * @return mac地址 */ public static String getUnixMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { // linux下的命令,一般取eth0作为本地主网卡 process = Runtime.getRuntime().exec("ifconfig eth0"); // 显示信息中包含有mac地址信息 bufferedReader = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { // 寻找标示字符串[hwaddr] index = line.toLowerCase().indexOf("hwaddr"); if (index >= 0) {// 找到了 // 取出mac地址并去除2边空格 mac = line.substring(index + "hwaddr".length() + 1).trim(); break; } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e1) { e1.printStackTrace(); } bufferedReader = null; process = null; } return mac; } /** * 获取widnows网卡的mac地址. * * @return mac地址 */ public static String getWindowsMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { // windows下的命令,显示信息中包含有mac地址信息 process = Runtime.getRuntime().exec("ipconfig /all"); bufferedReader = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); // 寻找标示字符串[physical index = line.toLowerCase().indexOf("physical address"); if (index >= 0) {// 找到了 index = line.indexOf(":");// 寻找":"的位置 if (index >= 0) { System.out.println(mac); // 取出mac地址并去除2边空格 mac = line.substring(index + 1).trim(); } break; } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e1) { e1.printStackTrace(); } bufferedReader = null; process = null; } return mac; } /** * windows 7 专用 获取MAC地址 * * @return * @throws Exception */ public static String getMACAddress() throws Exception { // 获取本地IP对象 InetAddress ia = InetAddress.getLocalHost(); // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。 byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); // 下面代码是把mac地址拼装成String StringBuffer sb = new StringBuffer(); 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地址并返回 return sb.toString().toUpperCase(); } /** * 测试用的main方法. * * @param argc 运行参数. * @throws Exception */ public static void main(String[] argc) throws Exception { String os = getOSName(); System.out.println(os); if (os.equals("windows 7")) { String mac = getMACAddress(); System.out.println(mac); } else if (os.startsWith("windows")) { // 本地是windows String mac = getWindowsMACAddress(); System.out.println(mac); } else { // 本地是非windows系统 一般就是unix String mac = getUnixMACAddress(); System.out.println(mac); } } }



[size=large][color=red]得到所有IP[/color][/size]


这段代码会输出计算机中所有设备的ip,找需要的




Enumeration<NetworkInterface> netInterfaces = null; try { netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { NetworkInterface ni = netInterfaces.nextElement(); System.out.println("DisplayName:" + ni.getDisplayName()); System.out.println("Name:" + ni.getName()); Enumeration<InetAddress> ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { System.out.println("IP:" + ips.nextElement().getHostAddress()); } } } catch (Exception e) { e.printStackTrace(); }


如何通过Java代码获取本机MAC地址和IP地址的具体实现方法?





[color=red]以下代码在多网卡出现问题[/color]


import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; /* * 物理地址是48位,别和ipv6搞错了 */ public class LOCALMAC { /** * @param args * @throws UnknownHostException * @throws SocketException */ public static void main(String[] args) throws UnknownHostException, SocketException { // TODO Auto-generated method stub //得到IP,输出PC-201309011313/122.206.73.83 InetAddress ia = InetAddress.getLocalHost(); System.out.println(ia); getLocalMac(ia); } private static void getLocalMac(InetAddress ia) throws SocketException { // TODO Auto-generated method stub //获取网卡,获取地址 byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); System.out.println("mac数组长度:"+mac.length); StringBuffer sb = new StringBuffer(""); for(int i=0; i<mac.length; i++) { if(i!=0) { sb.append("-"); } //字节转换为整数 int temp = mac[i]&0xff; String str = Integer.toHexString(temp); System.out.println("每8位:"+str); if(str.length()==1) { sb.append("0"+str); }else { sb.append(str); } } System.out.println("本机MAC地址:"+sb.toString().toUpperCase()); } }