公网部署的项目 java后台取得服务器ip是内网的是怎么回事-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

公网部署的项目 java后台取得服务器ip是内网的是怎么回事

2019-01-05 14:58:08 4630 5

公网部署的项目 java后台取得服务器ip是内网的ip是怎么回事

取消 提交回答
全部回答(5)
  • 智扬
    2019-07-17 23:24:39

    java也是通过底层操作系统的api来获取的,操作系统会返回所有的网卡界面,也会给你每个网卡界面的信息,你需要过滤一下内网IP即可。

    0 0
  • aoteman675
    2019-07-17 23:24:39

    需要中间件打通外网通道。

    0 0
  • 名字不能长
    2019-07-17 23:24:39

    先确定web服务器之前有没有代理层,如果没有的话参照一楼提供的方法试试;如果有代理层的话需要由上层代理把client端的ip传进来,一般是放header里,比如x-forwarded-for、Proxy-Client-IP等会将层层代理的ip加进来,然后在应用里去解析

    0 0
  • suonayi
    2019-07-17 23:24:39

    除了上面说的多个网络接口外,还有可能是你的服务端根本就在内网里部署。
    前置的接入层(nginx、apache)等是接入外网的,然后将流量打到内网服务器上。

    0 0
  • bloomberg
    2019-07-17 23:24:39

    换api:NetworkInterface.getNetworkInterfaces() ,再做过滤,代码如下:

    转载:Java获得系统的外网IP
    https://www.cnblogs.com/kagome2014/p/6428325.html

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

    /**

    • 系统工具类,用于获取系统相关信息
    • Created by kagome.
      */

    public class CustomSystemUtil {

    public static String INTRANET_IP = getIntranetIp(); // 内网IP
    public static String INTERNET_IP = getInternetIp(); // 外网IP
    
    private CustomSystemUtil(){}
    
    /**
     * 获得内网IP
     * @return 内网IP
     */
    private static String getIntranetIp(){
        try{
            return InetAddress.getLocalHost().getHostAddress();
        } catch(Exception e){
            throw new RuntimeException(e);
        }
    }
    
    /**
     * 获得外网IP
     * @return 外网IP
     */
    private static String getInternetIp(){
        try{
            Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
            InetAddress ip = null;
            Enumeration<InetAddress> addrs;
            while (networks.hasMoreElements())
            {
                addrs = networks.nextElement().getInetAddresses();
                while (addrs.hasMoreElements())
                {
                    ip = addrs.nextElement();
                    if (ip != null
                            && ip instanceof Inet4Address
                            && ip.isSiteLocalAddress()
                            && !ip.getHostAddress().equals(INTRANET_IP))
                    {
                        return ip.getHostAddress();
                    }
                }
            }
    
            // 如果没有外网IP,就返回内网IP
            return INTRANET_IP;
        } catch(Exception e){
            throw new RuntimeException(e);
        }
    }

    }


    换api:NetworkInterface.getNetworkInterfaces() ,再做过滤,代码如下:

    转载:Java获得系统的外网IP
    https://www.cnblogs.com/kagome2014/p/6428325.html

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

    /**

    • 系统工具类,用于获取系统相关信息
    • Created by kagome.
      */

    public class CustomSystemUtil {

    public static String INTRANET_IP = getIntranetIp(); // 内网IP
    public static String INTERNET_IP = getInternetIp(); // 外网IP
    
    private CustomSystemUtil(){}
    
    /**
     * 获得内网IP
     * @return 内网IP
     */
    private static String getIntranetIp(){
        try{
            return InetAddress.getLocalHost().getHostAddress();
        } catch(Exception e){
            throw new RuntimeException(e);
        }
    }
    
    /**
     * 获得外网IP
     * @return 外网IP
     */
    private static String getInternetIp(){
        try{
            Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
            InetAddress ip = null;
            Enumeration<InetAddress> addrs;
            while (networks.hasMoreElements())
            {
                addrs = networks.nextElement().getInetAddresses();
                while (addrs.hasMoreElements())
                {
                    ip = addrs.nextElement();
                    if (ip != null
                            && ip instanceof Inet4Address
                            && ip.isSiteLocalAddress()
                            && !ip.getHostAddress().equals(INTRANET_IP))
                    {
                        return ip.getHostAddress();
                    }
                }
            }
    
            // 如果没有外网IP,就返回内网IP
            return INTRANET_IP;
        } catch(Exception e){
            throw new RuntimeException(e);
        }
    }

    }

    1 0
添加回答
相关问答

1

回答

java WEB,项目部署到服务器,IE浏览器页面中文有乱码咋解决?

2021-09-29 15:22:15 384浏览量 回答数 1

0

回答

Java性能调优,使用java读取excel文件指定内容性能最快的做法是什么?

2021-11-07 21:43:06 1134浏览量 回答数 0

0

回答

请问使用java读取XML属性性能最优的做法是什么?

2021-11-07 11:14:26 163浏览量 回答数 0

0

回答

请问向java ArrayList集合对象中某个指定位置加入一个字符串,有没有性能更快的做法?

2021-11-12 17:12:10 184浏览量 回答数 0

0

回答

请问在java中都说IO复用对性能有很大的提高,实现IO复用的方法是什么?

2021-11-07 13:12:53 114浏览量 回答数 0

1

回答

请问读取java ArrayList集合对象中的最后一个元素,有没有性能更快的做法?

2021-11-07 15:53:54 277浏览量 回答数 1

0

回答

请问java垃圾收集是否对系统的性能有决定性的影响?

2021-11-12 17:21:46 87浏览量 回答数 0

0

回答

请问在java中在单线程中使用同步代码块是否会影响应用程序的性能?

2021-11-12 17:21:21 220浏览量 回答数 0

0

回答

请问获取 java ArrayList集合中的最大值,有没有性能更快的做法?

2021-11-07 15:55:06 373浏览量 回答数 0

1

回答

请问java应用程序查询物化视图时性能较慢,该如何优化呢?

2021-11-07 14:07:52 1213浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Jpom一款低侵入式Java运维、监控软件
立即下载
阿里云MongoDB备份恢复功能说明和原理介绍
立即下载
JAVA 应用排查全景图
立即下载