当前位置: 首页 > 知识库问答 >
问题:

Java获取IPv4地址

阎德义
2023-03-14

关于使用提供的代码生成IP地址的链接。

String ip;
    try {
       Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface iface = interfaces.nextElement();
            // filters out 127.0.0.1 and inactive interfaces
            if (iface.isLoopback() || !iface.isUp())
                continue;

            Enumeration<InetAddress> addresses = iface.getInetAddresses();
            while(addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                ip = addr.getHostAddress();
                System.out.println(iface.getDisplayName() + " " + ip);
            }
        }
    } catch (SocketException e) {
        throw new RuntimeException(e);
    }

我已经实现了获取IP地址的确切代码,但它同时提供了IPv4和IPv6地址。下面是产生的价值。

Qualcomm Atheros AR5BWB222 Wireless Network Adapter 192.168.1.5
Qualcomm Atheros AR5BWB222 Wireless Network Adapter fe80:0:0:0:a874:xxxx:xxxx:9150%wlan0

(已编辑IPv6地址)

有没有办法只获取IPv4值而不同时获取两者?

共有1个答案

幸弘光
2023-03-14

您可以检查addr对象的类型,查看它是Inet4Address还是Inet6Address实例。

例如:

String ip;
try {
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
        NetworkInterface iface = interfaces.nextElement();
        // filters out 127.0.0.1 and inactive interfaces
        if (iface.isLoopback() || !iface.isUp())
            continue;

        Enumeration<InetAddress> addresses = iface.getInetAddresses();
        while(addresses.hasMoreElements()) {
            InetAddress addr = addresses.nextElement();

            // *EDIT*
            if (addr instanceof Inet6Address) continue;

            ip = addr.getHostAddress();
            System.out.println(iface.getDisplayName() + " " + ip);
        }
    }
} catch (SocketException e) {
    throw new RuntimeException(e);
}
 类似资料:
  • 我的计算机上有多个网卡。(因为VMWare) 如何找到活动卡的IPv4地址。我的意思是,如果我在终端中发送ping并在WireShark中拦截数据包,我需要“Source”的地址。 我想过检查每个网络接口,看看GateWay是空还是空?或者可能ping127.0.0.1并获取ping请求的IP源?但无法实现它。 现在我有这个代码,我在StackOverFlow上找到的 但它给了我VmWare卡的I

  • 问题内容: 在我的android设备中,我试图找到其IP地址(IPV4)。 如果我执行以下代码 该代码给了我127.0.0.1。 我想获得实际的IP198.168.xx.xx。 (在“我的电脑”中,相同的代码为我提供了实际的IP。) 问题答案: 授予权限 还添加mainfest。

  • 我正在尝试的是: 我有一个结构: 编辑二:我目前最好的尝试 但现在我不知道如何打印ip和端口

  • 问题内容: 我正在尝试使用Java获取我的Internet IP地址,但是当我的IP地址为192.168.0.xxx时,我一直在获取本地地址(即:127.0.0.1) 我正在使用该行: 这似乎是获取IP地址的标准方法,但这不是我想要的。每个教程都说要使用此行,所以我有些困惑。 有人可以让我知道如何获取正确的IP地址吗? 我在连接到WiFi的设备上运行,但未使用任何电缆。我正在使用ifconfig

  • 问题内容: 该代码用于返回我的本地IP地址为192.xxx.x.xxx,但现在它返回127.0.0.1。请帮助我为什么相同的代码返回不同的值。在Linux OS上需要注意些什么吗? 问题答案: 127.0.0.1是回送适配器-这是对(有些恶意的)问题“我的IP地址是什么?”的正确答案。 问题是该问题有 多个 正确答案。 编辑:的文档说: 如果有安全管理器,则使用本地主机名并以-1作为其参数来调用其

  • 问题内容: 我有使用地址的应用程序(它存储它们的时间很长),因此它只了解地址。 可以将地址转换为with 吗? 问题答案: 尽管IPv4地址范围具有等效的IPv6,但是您不能将所有IPv6地址都转换为IPv4-IPv6地址比IPv4地址更多。 解决此问题的唯一明智的方法是更新您的应用程序,以便能够理解和存储IPv6地址。