Java获取IP及归属地

这篇具有很好参考价值的文章主要介绍了Java获取IP及归属地。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近我们发现各大社交平台都出现了一个新的功能:IP属地。

比如某乎:

Java获取IP及归属地

这个IP属地是怎么做到的呢?今天我来教教你,保证你看完直呼Easy~

技术栈

1.Java网络编程

2.Servlet

具体实现

1.获取IP地址及其归属地工具类

package com.mmg.controller;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 获取IP地址工具类
 */
public class Iputil {

    /**
     * 1.通过request对象获取IP
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (ip == null || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //使用代理,则获取第一个IP地址
        if (ip == null) {
            if (ip.indexOf(",") > 0) {
                ip = ip.substring(0, ip.indexOf(","));
            }
        }
        return ip;
    }

    /**
     * 2.通过调用接口的方式获取IP
     */
    public static String getIp() {
        try {
            URL realUrl = new URL("http://whois.pconline.com.cn/ipJson.jsp");
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setUseCaches(false);
            conn.setReadTimeout(6000);
            conn.setConnectTimeout(6000);
            conn.setInstanceFollowRedirects(false);
            int code = conn.getResponseCode();
            StringBuilder sb = new StringBuilder();
            String ip = "";
            if (code == 200) {
                InputStream in = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                //控制台输出乱码,就指定编码为GBK即可。
                //BufferedReader reader = new BufferedReader(new InputStreamReader(in, "GBK"));
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                ip = sb.substring(sb.indexOf("ip") + 5, sb.indexOf("pro") - 3);
            }
            return ip;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 3.通过调用接口根据ip获取归属地
     */
    public static String getAddress(String ip) {
        try {
            URL realUrl = new URL("http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true");
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setUseCaches(false);
            conn.setReadTimeout(6000);
            conn.setConnectTimeout(6000);
            conn.setInstanceFollowRedirects(false);
            int code = conn.getResponseCode();
            StringBuilder sb = new StringBuilder();
            String ipaddr = "";
            if (code == 200) {
                InputStream in = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                ipaddr = ip + "=" + sb.substring(sb.indexOf("addr") + 7, sb.indexOf("regionNames") - 3);
            }
            return ipaddr;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

2.测试类

package com.mmg.controller;

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(Iputil.getIpAddr());
        System.out.println(Iputil.getAddress(Iputil.getIp()));
    }
}

通过运行这个方法,可以看到,控制台打印了IP和城市信息,也就是我们想要的IP属地信息啦!

Java获取IP及归属地

在你的项目里,你可以在登录的时候记录当前登录用户的IP和登录地点,也可以在用户发表文章和评论的时候显示出他的IP属地,非常实用哦~文章来源地址https://www.toymoban.com/news/detail-502703.html

感谢您的观看,如果对你有帮助的话,麻烦点个收藏把!

到了这里,关于Java获取IP及归属地的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java获取ip地址以及ip归属地工具类

    需要ip2region.db文件,可以前往github下载 欢迎访问我的博客网站: www.yqiu.top

    2024年02月22日
    浏览(50)
  • IP获取归属地区(免费)

    使用 http://whois.pconline.com.cn/ipJson.jsp 这个 URL 来获取 IP 地址的归属城市信息

    2024年02月16日
    浏览(43)
  • 使用 ip2region 获取用户的 IP 归属地

    ip2region 是一个离线IP地址定位库和IP定位数据管理框架,能实现10微秒级别的查询效率,提供了众多主流编程语言的xdb数据生成和查询客户端实现。 每个 ip 数据段的 region 信息都固定了格式: 国家|区域|省份|城市|ISP ,只有中国的数据绝大部分精确到了城市,其他国家部分数

    2024年02月13日
    浏览(50)
  • 最近台风肆虐,让我们用Python获取天气数据,分析一下台风到底要去哪!

    最近台风肆虐,已进入我国24小时警戒线!台风“卡努”到底要去哪儿? 作为一个Python程序员,虽然我帮不上忙,但是时时关注一下还是可以的,顺便祈祷一下台风往东边某个小日子过得不错的小岛吹。 于是我花了一分钟,用Python写了一个获取天气数据的代码,然后进行数据

    2024年02月14日
    浏览(42)
  • SpringBoot通过ip获取归属地,你应该知道的几种方式。

    Hi,大家好,我是抢老婆酸奶的小肥仔。 在日常我们逛网站的时候会发现我们登录后会出现归属地信息,例如:我在广州登录会显示广东广州,有些更加精确的会显示到区县。 那么我们来看看有哪些方式来获取归属地信息?今天我们来聊一聊。 公共方法: 获取用户ip地址:

    2024年04月09日
    浏览(78)
  • 抖音IP属地能改吗?抖音IP属地错误是什么原因?

    今年各大互联网平台都将用户的IP属地公开显示,很多用户表示不理解,下面就大家分享相关信息,抖音IP属地能改吗?抖音IP属地多久更新一次呢?一起来看吧。 一、抖音IP属地能改吗 抖音当中的IP属地是不支持修改的,而且也不能自主关闭IP显示,IP地址显示是强制的,会根

    2024年02月12日
    浏览(39)
  • 微信小程序 - 超详细小程序接入腾讯地图的完整流程,提供地图显示、IP 属地定位、地理位置名称、获取经纬度等超多功能示例(可一键复制并运行的功能源代码,详细的注释及常见问题汇总)小白直接上手!

    网上的教程代码太乱了,第一次接触的朋友极其难搞,更别说把功能改造移植到自己的项目中去。 本文站在小白的角度, 实现了微信小程序开发中,集成腾讯地图的详细流程及使用方法教程,提供了地图显示、IP 属地定位、当前定位的地理位置名称、当前定位的经纬度等等

    2024年02月16日
    浏览(60)
  • Java Excel 打开文件报发现“xx.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复问题解决

    发现“文件.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复? 1、后端的导出接口写的不对,又返回流数据,又返回响应体数据,导致前端将流数据和响应体数据都下载到了excel文件中。  解决办法: 接口仅返回流数据即可。

    2024年02月13日
    浏览(62)
  • 抖音IP属地是实时更新的吗?能不显示吗?

    抖音近期出现了一个新的功能引发了网友的热议,那就是显示IP属地,抖友对这个功能有不少疑问,下面就给大家分享抖音ip属地是实时更新的吗的相关答疑。 一、抖音ip属地是实时更新的吗 抖音的ip地址是是实时的。Ip地址是联网的,显示的是最后一次登入使用抖音的位置,

    2024年02月05日
    浏览(41)
  • IP归属地与IP定位

    IP归属地查询是指根据给定的IP地址,确定该IP地址所属的地理位置或网络服务提供商。这种查询可以帮助用户了解到访者的地理位置,有助于网络安全、反垃圾邮件等应用。  在实际应用中,IP归属地查询常用于以下几个方面: 网络安全:通过IP归属地查询,可以确定访问者

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包