Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何显示特定接口的IP地址?_Java_Ip_Network Interface - Fatal编程技术网

Java 如何显示特定接口的IP地址?

Java 如何显示特定接口的IP地址?,java,ip,network-interface,Java,Ip,Network Interface,因此,我试图通过编程从一个特定接口获取IP地址,并将其显示在文本字段中。问题是它列出了几个。如何迭代并获取双频无线AC 3160的IP地址 Dual Band Wireless-AC 3160 172.16.36.50 Dual Band Wireless-AC 3160 fe80:0:0:0:8877:2e6a:e4a1:c24f%wlan0 Virtual Ethernet Adapter for VMnet1 192.168.31.1 Virtual Ethernet Adapter fo

因此,我试图通过编程从一个特定接口获取IP地址,并将其显示在文本字段中。问题是它列出了几个。如何迭代并获取双频无线AC 3160的IP地址

Dual Band Wireless-AC 3160 172.16.36.50
Dual Band Wireless-AC 3160 fe80:0:0:0:8877:2e6a:e4a1:c24f%wlan0
Virtual Ethernet Adapter for VMnet1 192.168.31.1
Virtual Ethernet Adapter for VMnet1 fe80:0:0:0:592c:71ac:f8d9:5899%eth3
Virtual Ethernet Adapter for VMnet8 192.168.245.1
Virtual Ethernet Adapter for VMnet8 fe80:0:0:0:ed34:4a7:cb5c:16ce%eth4
下面是我用来显示界面的代码:

String ip;
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            int position;
            while (interfaces.hasMoreElements()) {
                NetworkInterface iface = interfaces.nextElement();
                //This filters out the interfaces
                // 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;
试一试{
枚举接口=NetworkInterface.getNetworkInterfaces();
内部位置;
while(interfaces.hasMoreElements()){
NetworkInterface iface=interfaces.nextElement();
//这会过滤掉接口
//过滤掉127.0.0.1和非活动接口
if(iface.isLoopback()| |!iface.isUp())
继续;
枚举地址=iface.getInetAddresses();
while(addresses.hasMoreElements()){
InetAddress addr=地址.nextElement();
ip=addr.getHostAddress();
System.out.println(iface.getDisplayName()+“”+ip);
}
}
}捕获(SocketException e){
抛出新的运行时异常(e);
}

由于接口有两个IP地址,因此您将获得两个IP地址。总的来说,可能会有更多

如果只想列出IPv4地址,可以检查该地址是否为Inet4Address的实例使用此代码

import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;

public class ListNets {

    public static void main(String args[]) throws SocketException {
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets))
            displayInterfaceInformation(netint);
    }

    static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
        out.printf("Display name: %s\n", netint.getDisplayName());
        out.printf("Name: %s\n", netint.getName());
        Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
        for (InetAddress inetAddress : Collections.list(inetAddresses)) {
            out.printf("InetAddress: %s\n", inetAddress);
        }
        out.printf("\n");
     }
}  
import java.io.*;
导入java.net。*;
导入java.util.*;
导入静态java.lang.System.out;
公共类列表网{
publicstaticvoidmain(字符串args[])抛出SocketException{
枚举网络=NetworkInterface.getNetworkInterfaces();
用于(网络接口netint:Collections.list(nets))
显示接口信息(netint);
}
静态无效显示接口信息(NetworkInterface netint)引发SocketException{
out.printf(“显示名称:%s\n”,netint.getDisplayName());
out.printf(“名称:%s\n”,netint.getName());
枚举inetAddresses=netint.getInetAddresses();
用于(InetAddress:Collections.list(inetAddresses)){
out.printf(“InetAddress:%s\n”,InetAddress);
}
out.printf(“\n”);
}
}  

我通过以下操作解决了这个问题。谢谢

String ip;

        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            int position =0;
            while (interfaces.hasMoreElements()) {
                NetworkInterface iface = interfaces.nextElement();
                //This filters out the interfaces
                // 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();
                    position++;

                    if (position == 0 ) {
                        System.out.println(iface.getDisplayName() + " " + ip);
                    }

                    else{
                        break;
                    }
                }
            }
        } catch (SocketException e) {
            throw new RuntimeException(e);
        }
字符串ip;
试一试{
枚举接口=NetworkInterface.getNetworkInterfaces();
int位置=0;
while(interfaces.hasMoreElements()){
NetworkInterface iface=interfaces.nextElement();
//这会过滤掉接口
//过滤掉127.0.0.1和非活动接口
if(iface.isLoopback()| |!iface.isUp())
继续;
枚举地址=iface.getInetAddresses();
while(addresses.hasMoreElements()){
InetAddress addr=地址.nextElement();
ip=addr.getHostAddress();
位置++;
如果(位置==0){
System.out.println(iface.getDisplayName()+“”+ip);
}
否则{
打破
}
}
}
}捕获(SocketException e){
抛出新的运行时异常(e);
}

哎呀,我修改了措辞以消除歧义。如果我只想列出我提到的接口的IP地址,我会怎么做?所以问题是你不知道你想使用哪个接口?Mac地址的前三个八位字节用于识别供应商,您可以将虚拟接口列入黑名单,也可以将供应商列入白名单。虽然这个答案可能是正确且有用的,但您最好解释一下它如何帮助解决问题。如果有一个变化(可能无关)导致它停止工作,并且用户需要了解它曾经是如何工作的,那么这在将来变得特别有用。因此,您只需要列表中的第一个界面,不管它是什么?