Java获取ip地址的几种方法

以下内容介绍下java获取ip地址的几种思路。

1、直接利用java.net.InetAddress类获取,不过这种方法只在windows环境下有效,在linux环境下只能获取localhost地址(即/etc/hosts文件内容)

  代码如下: 

 1     import java.net.InetAddress;
 2 
 3     /**
 4      * This method works well in windows system.
 5      * In Linux system it returns 127.0.0.1 the content of the hosts file.
 6      */
 7     public static void getIpAddressInWindows() {
 8         try {
 9             InetAddress address = InetAddress.getLocalHost();
10             System.out.println("Host Name: " + address.getHostName());
11             System.out.println("Host Address: " + address.getHostAddress());
12 
13         } catch (UnknownHostException e) {
14             e.printStackTrace();
15         }
16     } 

2、可以在linux下正常工作的方法,代码如下:

    import java.net.Inet4Address;
    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.util.Enumeration;

    /**
     * This method is used to get all ip addresses from the network interfaces.
     * network interfaces: eth0, wlan0, l0, vmnet1, vmnet8 
     */
    public static void getAllIpAddress() {
        try {
            //get all network interface
            Enumeration<NetworkInterface> allNetworkInterfaces = 
                    NetworkInterface.getNetworkInterfaces();
            NetworkInterface networkInterface = null;
            
            //check if there are more than one network interface
            while (allNetworkInterfaces.hasMoreElements()) {
                //get next network interface
                networkInterface = allNetworkInterfaces.nextElement();
                //output interface's name
                System.out.println("network interface: " + 
                        networkInterface.getDisplayName());
                
                                //get all ip address that bound to this network interface
                Enumeration<InetAddress> allInetAddress = 
                        networkInterface.getInetAddresses();
                
                InetAddress ipAddress = null;
                
                //check if there are more than one ip addresses
                //band to one network interface
                while (allInetAddress.hasMoreElements()) {
                    //get next ip address
                    ipAddress = allInetAddress.nextElement();
                    if (ipAddress != null && ipAddress instanceof Inet4Address) {
                        System.out.println("ip address: " + 
                                ipAddress.getHostAddress());
                    }
                }
            }
            
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }//end method getAllIpAddress
                            

上边这种方法有些不足之处,它会输出所有的网卡上的ip地址,有时候我们只需一个或几个单独的网卡ip即可,可以通过如下方法获得:    

 1

      import java.net.Inet4Address;
      import java.net.InetAddress;
      import java.net.NetworkInterface;
      import java.net.SocketException;
      import java.net.UnknownHostException;
      import java.util.Enumeration;

       /**
 2      * This method is used to get ip address by network interface's name.
 3      * @param networkInterfaceName network interface's name
 4      * @return return true if get ip address successfully,
 5      * otherwise return false. 
 6      */
 7     public static boolean getIpAddrByName(String networkInterfaceName) {
 8         try {
 9         //get network interface by name
10             NetworkInterface networkInterface = 
11                     NetworkInterface.getByName(networkInterfaceName);
12             if (networkInterface == null) {
13                 return false;
14             }
15             System.out.println("network interface: " + 
16                     networkInterface.getDisplayName());
17             
18             InetAddress ipAddress = null;
19             //get all ip addresses band to this interface
20             Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
21             
22             while (addresses.hasMoreElements()) {
23                 ipAddress = addresses.nextElement();
24                 
25                 if (ipAddress != null && ipAddress instanceof Inet4Address) {
26                     System.out.println("ip address: " + 
27                             ipAddress.getHostAddress());
28                 }
29             }
30         } catch (SocketException e) {
31             e.printStackTrace();
32         }
33         
34         return true;
35     }// end method getIpAddrByName
posted @ 2014-11-01 13:00  Mr.Left  阅读(14365)  评论(0编辑  收藏  举报