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

开发者社区> 问答> 正文

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

ysth 2019-01-05 14:58:08 3565

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

服务器项目内网 项目服务器后台 iis后台 服务器内网公网 java事务
分享到
取消 提交回答
全部回答(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
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

相似问题
最新问题