从服务器内部获取公网IP

前言

    在大公司里面网络架构可谓是复杂,如果您的服务(域名)需要公网出口IP权限,比如果某些服务如银行,微信企业提现等接口需要配置到微信或者银行商户后台做IP白名单,这个可真是一件不简单的事情,前期踩了个坑,以为域名解析出来的VIP(虚拟ip)就是公网出口IP,最后解决不了找运维sa,让他们给做个服务映射的公网出口IP(我的服务有十几台机器没法完全配置到微信商户后台),但是好像他们给我配置多了,给错了IP,我郁闷了一天,感觉他们不会犯这种低级错误,然后找他们理论是否配置错误,竟然不承认,我这边也没办法去证明,网上就找了几个查询公网出口IP的网页,自己取抓页面数据,最终解决。

介绍

常用的IP出口探测工具:

http://www.ip138.com/ips138.asp

使用

首先我再服务器内部写个应用去访问这个页面,找到我的IP,此时这个IP就是对应的公网出口IP,有可能是多个,因为每个机房可能有一个出口IP。

  @Controller
    public class TestController {
        
        @RequestMapping("/test/getPublicIp")
        @ResponseBody
        public static String getPublicIp() {
            try {
                String path = "http://www.ip138.com/ips138.asp";// 要获得html页面内容的地址

                URL url = new URL(path);// 创建url对象

                HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接

                conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码

                conn.setConnectTimeout(5 * 1000);// 请求的时间

                conn.setRequestMethod("GET");// 请求方式

                InputStream inStream = conn.getInputStream();
                // readLesoSysXML(inStream);

                BufferedReader in = new BufferedReader(new InputStreamReader(
                        inStream, "GBK"));
                StringBuffer buffer = new StringBuffer();
                String line = "";
                // 读取获取到内容的最后一行,写入
                while ((line = in.readLine()) != null) {
                    buffer.append(line);
                }
                String str = buffer.toString();
                String ipString1 = str.substring(str.indexOf("["));
                String ipsString2 = ipString1.substring(ipString1.lastIndexOf("]")-14 ,
                        ipString1.lastIndexOf("]")+1);
                // 返回公网IP值
                return ipsString2;
            } catch (Exception e) {
                System.out.println("获取公网IP连接超时");
                return "连接超时";
            }
        }
    }
发布了62 篇原创文章 · 获赞 44 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhizunmimi/article/details/90767219