关于Java获取本地服务器IP的问题

Java获取本地服务器IP,我们最简单的写法:

import java.net.InetAddress;  
public class CatchIp{
 public static void main(String[] args)
    {
        try
        {
            // 获取IP地址
            String ip = InetAddress.getLocalHost().getHostAddress();
       
            System.out.println("IP地址:"+ip);
        }
        catch (Exception e)
        {
            System.out.println("异常:" + e);
            e.printStackTrace();
        }
    }
	}

但是这样有个问题,我们在windows系统,我们可以获取正确的IP

但是放在linux,可能是获取的IP地址为:127.0.0.1

而且在生产系统中,一台服务器可能有很多张网卡,这样获取ip比较麻烦,具体要了解生产系统服务器的IP地址我们可以参考这个网址:

http://blog.163.com/abkiss@126/blog/static/3259410020117493943770/?suggestedreading

代码如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.lib.com;

/**
 *
 * @author Administrator
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
     
public class TestAddr {
     
        /**
         * 获取本机所有IP
         */
    private static String[] getAllLocalHostIP() {
        List res = new ArrayList();
        Enumeration netInterfaces;
        try {
            netInterfaces = NetworkInterface.getNetworkInterfaces();
            InetAddress ip = null;
            while (netInterfaces.hasMoreElements()) {
                NetworkInterface ni = (NetworkInterface) netInterfaces
                        .nextElement();
                System.out.println("---Name---:" + ni.getName());
                Enumeration nii = ni.getInetAddresses();
                while (nii.hasMoreElements()) {
                    ip = (InetAddress) nii.nextElement();
                    if (ip.getHostAddress().indexOf(":") == -1) {
                        res.add(ip.getHostAddress());
                        System.out.println("本机的ip=" + ip.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
            }
            return (String[]) res.toArray(new String[0]);
        }
    public static String getLocalIP() {
           String ip = "";
           try {
                   Enumeration e1 = (Enumeration) NetworkInterface.getNetworkInterfaces();
                   while (e1.hasMoreElements()) {
                       NetworkInterface ni = (NetworkInterface) e1.nextElement();
                        System.out.println ("getLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); 
                    System.out.println ("getLocalIP--nic.getName ():" + ni.getName ());
                       if (!ni.getName().equals("eth0")) {
                           continue;
                       } else {
                       Enumeration e2 = ni.getInetAddresses();
                           while (e2.hasMoreElements()) {
                           InetAddress ia = (InetAddress) e2.nextElement();
                           if (ia instanceof Inet6Address)
                               continue;
                           ip = ia.getHostAddress();
                       }
                           break;
                       }
                   }
               } catch (SocketException e) {
                   e.printStackTrace();
                   System.exit(-1);
               }
               return ip;
           }
        public static String getWinLocalIP () 
            { 
                String ip = ""; 
                try 
                { 
                    Enumeration  e1 = (Enumeration ) NetworkInterface.getNetworkInterfaces (); 
                    while (e1.hasMoreElements ()) 
                    { 
                        NetworkInterface ni = (NetworkInterface) e1.nextElement ();
                        System.out.println ("getWinLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); 
                        System.out.println ("getWinLocalIP--nic.getName ():" + ni.getName ());
                        Enumeration  e2 = ni.getInetAddresses (); 
                        while (e2.hasMoreElements ()) 
                        { 
                            InetAddress ia = (InetAddress) e2.nextElement (); 
                            ip = ia.getHostAddress (); 
                    } 
                    } 
                } 
                catch (SocketException e) 
                { 
                    e.printStackTrace (); 
                System.exit (-1); 
                } 
                return ip; 
            }
        /**
         * 获取本机所有物理地址
         *
         * @return
         */
        public static String getMacAddress() {
        String mac = "";
        String line = "";
 
        String os = System.getProperty("os.name");

       if (os != null && os.startsWith("Windows")) {
            try {
                    String command = "cmd.exe /c ipconfig /all";
                    Process p = Runtime.getRuntime().exec(command);
     
                    BufferedReader br = new BufferedReader(new InputStreamReader(p
                            .getInputStream()));
     
                    while ((line = br.readLine()) != null) {
                        if (line.indexOf("Physical Address") > 0) {
                            int index = line.indexOf(":") + 2;
     
                            mac = line.substring(index);
     
                            break;
                        }
                    }
     
                    br.close();
     
                } catch (IOException e) {
                }
            }
     
            return mac;
        }
     
        public String getMacAddress(String host) {
            String mac = "";
            StringBuffer sb = new StringBuffer();
     
            try {
                NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress
                        .getByName(host));
     
                // byte[] macs = ni.getHardwareAddress();
     
                // for (int i = 0; i < macs.length; i++) {
                // mac = Integer.toHexString(macs[i] & 0xFF);
                //
                // if (mac.length() == 1) {
                // mac = '0' + mac;
                // }
                //
                // sb.append(mac + "-");
                // }
     
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
     
            mac = sb.toString();
            mac = mac.substring(0, mac.length() - 1);
     
            return mac;
    }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            TestAddr.getAllLocalHostIP();
            System.out.println("LocalIP:"+TestAddr.getLocalIP());
            System.out.println("getWinLocalIP:"+TestAddr.getWinLocalIP());
            System.out.println(TestAddr.getMacAddress());
        }
     
    }
当然 ,我们要是想获取服务器的唯一信息,经常有个偷懒的做法,那就是获取服务器的hostname,即主机名,写法也比较统一简单:

import java.net.InetAddress;  
public class CatchHostname{
 public static void main(String[] args)
    {
        try
        {
            // 获取计算机名
            String name = InetAddress.getLocalHost().getHostName();
            System.out.println("计算机名:"+name);
         
        }
        catch (Exception e)
        {
            System.out.println("异常:" + e);
            e.printStackTrace();
        }
    }
	}


你可能感兴趣的:(编程—java开发)