当前位置: 代码网 > it编程>编程语言>Java > Java获取IP地址以及MAC地址的示例代码

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

2024年05月15日 Java 我要评论
前言需要获取客户端的ip地址以及mac地址import java.io.bufferedreader;import java.io.ioexception;import java.io.inputst

前言

需要获取客户端的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地址内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com