Java里面获取当前服务器的IP地址

时间:2020-12-04 13:14:25
 public static void main(String[] args) {
        try {
             InetAddress address = InetAddress.getLocalHost();//获取的是本地的IP地址
             System.out.println(address);//PC-20140317PXKX/192.168.0.121
             System.out.println(address.getHostAddress());//192.168.0.121
             System.out.println("===============");
             InetAddress address1=InetAddress.getByName("www.wodexiangce.cn");//获取的是该网站的ip地址,比如我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址
             System.out.println(address1);//www.wodexiangce.cn/124.237.121.122
             System.out.println(address1.getHostAddress());//124.237.121.122
             System.out.println("===============");
             InetAddress[] addresses=InetAddress.getAllByName("www.baidu.com");//根据主机名返回其可能的所有InetAddress对象
             for(InetAddress addr:addresses){
                 System.out.println(addr);//www.baidu.com/14.215.177.38
                                         //www.baidu.com/14.215.177.37
             }
         } catch (UnknownHostException e) {
             e.printStackTrace();
         }
 }

如果使用了反向代理,这种获取方式显然是不准确的,我们采用的方法是新建一个java类,里面配的是当前服务器的IP地址(也就是说这个类在每个节点服务器上部署的是不同的),程序里用的话直接获取这个工具类就可以了,虽然方法有点笨,但是解决问题了。

 public class CommonServerIP {
     /**
      * #######################################################################
      * ###############这个类主要是保存常用的一些固定的服务器IP#####################
      * #######################################################################
      */
      public static String CURRENT_SERVER="124.237.121.46";//当前服务器的ip地址
 }

下面这段代码是别人写的,先贴在这:

   /**
      * 获取服务器IP地址
      * @return
      */
     @SuppressWarnings("unchecked")
     public static String  getServerIp(){
         String SERVER_IP = null;
         try {
             Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
             InetAddress ip = null;
             while (netInterfaces.hasMoreElements()) {
                 NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
                 ip = (InetAddress) ni.getInetAddresses().nextElement();
                 SERVER_IP = ip.getHostAddress();
                 if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
                         && ip.getHostAddress().indexOf(":") == -1) {
                     SERVER_IP = ip.getHostAddress();
                     break;
                 } else {
                     ip = null;
                 }
             }
         } catch (SocketException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }

         return SERVER_IP;
     }