Java获取IP地址以及MAC地址的示例代码

 更新时间:2024年04月03日 09:51:24   作者:码农研究僧  
IP地址是用于在网络上识别设备的唯一地址,而MAC地址是设备的物理地址,本文主要介绍了Java获取IP地址以及MAC地址的示例代码,具有一定的参考价值,感兴趣的可以了解一下

前言

需要获取客户端的IP地址以及MAC地址

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

public class test {

    public static void main(String[] args) {
        try {
            // 执行命令
            Process process = Runtime.getRuntime().exec("ipconfig /all");
            // 读取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                // 输出命令结果
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

纯用CMD可能权限不够,可能格式可能乱码等问题

在这里插入图片描述

后续转为网络编程API接口

网络适配器的 IPv4 和 MAC 地址,最好直接使用 Java 的网络编程 API,而不是通过执行系统命令来获取,可以使用 java.net.NetworkInterface 类来获取网络接口的信息,然后进一步筛选出所需的适配器信息

  • 在获取本地主机信息时,要考虑多网卡的情况,确保准确获取所需的网络适配器信息
  • 对于操作系统信息的获取,可以考虑使用更可靠的方式,如 System.getProperty() 方法

1. IP及MAC

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class test {

    public static void main(String[] args) {
        try {
            // 获取所有网络接口
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                // 输出网络接口名称
                System.out.println("Network Interface: " + networkInterface.getDisplayName());
                // 获取该网络接口的所有地址
                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    // 输出地址信息
                    System.out.println("  Address: " + address.getHostAddress());
                }
                // 获取 MAC 地址
                byte[] mac = networkInterface.getHardwareAddress();
                if (mac != null) {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < mac.length; i++) {
                        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
                    }
                    // 输出 MAC 地址
                    System.out.println("  MAC Address: " + sb.toString());
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

截图如下:

在这里插入图片描述

2. 特定适配器

不同电脑可能特定的适配器不大一样,具体Demo看自身

package com.example.test;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class test {

    public static void main(String[] args) {
        try {
            // 获取所有网络接口
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                // 检查是否是你想要的网络适配器,这里假设名字为 "VMware Network Adapter VMnet8"
                if (networkInterface.getDisplayName().equals("VMware Virtual Ethernet Adapter for VMnet8")) {
                    // 获取该网络接口的所有地址
                    Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                    while (addresses.hasMoreElements()) {
                        InetAddress address = addresses.nextElement();
                        // 过滤 IPv4 地址
                        if (address instanceof java.net.Inet4Address) {
                            // 输出 IPv4 地址
                            System.out.println("IPv4 Address: " + address.getHostAddress());
                        }
                    }
                    // 获取 MAC 地址
                    byte[] mac = networkInterface.getHardwareAddress();
                    if (mac != null) {
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < mac.length; i++) {
                            sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
                        }
                        // 输出 MAC 地址
                        System.out.println("MAC Address: " + sb.toString());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

截图如下:

在这里插入图片描述

到此这篇关于Java获取IP地址以及MAC地址的示例代码的文章就介绍到这了,更多相关Java获取IP地址以及MAC地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java使用dom4j实现对xml简单的增删改查操作示例

    Java使用dom4j实现对xml简单的增删改查操作示例

    这篇文章主要介绍了Java使用dom4j实现对xml简单的增删改查操作,结合实例形式详细分析了Java使用dom4j实现对xml简单的增删改查基本操作技巧与相关注意事项,需要的朋友可以参考下
    2020-05-05
  • 解决Maven无法下载2.1.7.js7版本的itext依赖问题

    解决Maven无法下载2.1.7.js7版本的itext依赖问题

    本文主要解决使用Maven编译项目时出现的itext依赖版本问题,通过分析,发现该问题是由jasperreports依赖的特定版本itext导致的,解决方法是排除jasperreports中的itext依赖,并自行指定更高版本的itext依赖
    2024-12-12
  • SpringBoot整合Mybatis-plus的具体使用

    SpringBoot整合Mybatis-plus的具体使用

    本文主要介绍了SpringBoot整合Mybatis-plus的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • HTTP 415错误-Unsupported media type详解

    HTTP 415错误-Unsupported media type详解

    这篇文章主要介绍了HTTP 415错误-Unsupported media type详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 使用maven打包/跳过某个modules

    使用maven打包/跳过某个modules

    本文总结了在Maven项目中跳过或单独构建模块的方法,包括使用`-pl`、`-am`和`-amd`参数来选择性地执行模块构建,以及通过`-Dmaven.test.skip`跳过测试,以提高构建效率
    2024-12-12
  • mybatis foreach传两个参数批量删除

    mybatis foreach传两个参数批量删除

    这篇文章主要介绍了mybatis foreach 批量删除传两个参数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • SpringBoot整合JWT Token的完整步骤

    SpringBoot整合JWT Token的完整步骤

    JSON Web Token是目前最流行的跨域认证解决方案,适合前后端分离项目通过Restful API进行数据交互时进行身份认证,这篇文章主要给大家介绍了关于SpringBoot整合JWT Token的相关资料,需要的朋友可以参考下
    2021-09-09
  • MyBatis-Plus自定义SQL的详细过程记录

    MyBatis-Plus自定义SQL的详细过程记录

    Java开发使用mybatis-plus来执行sql操作,往往比mybatis能够省时省力,下面这篇文章主要给大家介绍了关于MyBatis-Plus自定义SQL的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java多线程之定时器Timer的实现

    Java多线程之定时器Timer的实现

    定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面。本文主要为大家介绍了Java多线程中定时器Timer的实现,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Spring Boot项目实战之拦截器与过滤器

    Spring Boot项目实战之拦截器与过滤器

    这篇文章主要介绍了Spring Boot项目实战之拦截器与过滤器,文中给大家详细介绍了springboot 拦截器和过滤器的基本概念,过滤器的配置,需要的朋友可以参考下
    2018-01-01

最新评论