You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java的NetworkInterface判断IPv6地址为首选或临时地址

判断IPv6地址是否为临时/首选地址的方法

1. 识别临时IPv6地址

Java的Inet6Address类(JDK 1.7及以上版本)提供了isTemporaryAddress()方法,可直接判断该IPv6地址是否为RFC 4941定义的隐私临时地址:

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

public class IPv6TempCheck {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            Enumeration<InetAddress> addresses = ni.getInetAddresses();
            while (addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                if (addr instanceof Inet6Address) {
                    Inet6Address ipv6Addr = (Inet6Address) addr;
                    boolean isTemporary = ipv6Addr.isTemporaryAddress();
                    System.out.printf("IPv6地址: %s, 是否为临时地址: %b%n", addr.getHostAddress(), isTemporary);
                }
            }
        }
    }
}

2. 识别首选IPv6地址

要判断地址是否为接口的首选地址,需通过NetworkInterface的getInterfaceAddresses()方法获取InterfaceAddress实例,调用其isPreferred()方法即可:

import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.List;

public class IPv6PreferredCheck {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            List<InterfaceAddress> interfaceAddresses = ni.getInterfaceAddresses();
            for (InterfaceAddress ifAddr : interfaceAddresses) {
                if (ifAddr.getAddress() instanceof java.net.Inet6Address) {
                    boolean isPreferred = ifAddr.isPreferred();
                    System.out.printf("IPv6地址: %s, 是否为首选地址: %b%n", ifAddr.getAddress().getHostAddress(), isPreferred);
                }
            }
        }
    }
}

补充说明

  • 若使用低于JDK 1.7的版本,isTemporaryAddress()方法不可用,此时只能通过调用系统命令(如ip addr、ifconfig)解析输出结果来判断,这种方式依赖操作系统环境,不具备跨平台性。
  • 临时地址是系统为隐私保护自动生成的短期地址,首选地址则是接口优先使用的稳定地址(如手动配置、SLAAC生成的非临时地址)。

内容的提问来源于stack exchange,提问作者Peter Jerkewitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:33:15