您的位置:首页 > 编程语言 > Java开发

利用JAVA接口获取本机IP地址

2017-08-02 15:51 295 查看
public static InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketException {
   Enumeration en = NetworkInterface.getNetworkInterfaces();
   while (en.hasMoreElements()) {
       NetworkInterface i = (NetworkInterface) en.nextElement();
       for (Enumeration en2 = i.getInetAddresses(); en2.hasMoreElements();) {
           InetAddress addr = (InetAddress) en2.nextElement();
           if (!addr.isLoopbackAddress()) {
               if (addr instanceof Inet4Address) {
                   if (preferIPv6) {
                       continue;
                   }
                   return addr;
               }
               if (addr instanceof Inet6Address) {
                   if (preferIpv4) {
                       continue;
                   }
                   return addr;
               }
           }
       }
   }
   return null;

}

//该方法是从OverStackflow上找到的,编写的很巧妙,输入的两个boolean参数,若想获得IPv4则输入true,false,反之则获得IPv6。

Demo3-4 测试本机的IP地址

package com.upc.upcgrid.guan.network.chapter03;

 

import java.net.Inet4Address;

import java.net.Inet6Address;

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.SocketException;

import java.util.Enumeration;

 

public class NetworkInterfaceTest2 {

    public static void main(String[] args) throws SocketException {

       Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();

       for(;nis.hasMoreElements();)

       {

           NetworkInterface ni = nis.nextElement();

           Enumeration<InetAddress> ias = ni.getInetAddresses();

           for(;ias.hasMoreElements();)

           {

              InetAddress ia = ias.nextElement();

              if(ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1"))

              {

                  System.out.println("ip v4 : "+ia);

              }else if(ia instanceof Inet6Address && !ia.equals(""))

              {

                  System.out.println("ip v6 : "+ ia);

              }

           }

          

       }

    }

}

Demo3-4的执行结果:

Configuration3-1 下的执行结果:

ip v4 : /202.194.158.128

Configuration3-2下的执行结果:

ip v6 : /fe80:0:0:0:2e0:4cff:fe3d:c273%2

ip v6 : /2001:da8:7006:8003:2e0:4cff:fe3d:c273%2

ip v4 : /202.194.158.184

ip v6 : /0:0:0:0:0:0:0:1%1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: