最近我们发现各大社交平台都出现了一个新的功能: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));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属地信息啦!

在你的项目里,你可以在登录的时候记录当前登录用户的IP和登录地点,也可以在用户发表文章和评论的时候显示出他的IP属地,非常实用哦~

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

Java获取IP及归属地相关推荐

  1. Java获取IP以及地址属地(全网无BUG)

    点赞再看,养成习惯,大家好,我是辰兮!今天介绍如何获取访问人员的IP地址以及归属地(千万不要用这种方法做坏事噢!) 文章目录 思路 一.获取IP地址 二.获取归属地 三.测试 总结 思路 通过此网站: ...

  2. apache代理时java获取IP的问题

    2019独角兽企业重金招聘Python工程师标准>>> x-forwarded-for的深度挖掘 如今利用nginx做负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的 ...

  3. Java获取IP地址和VUE获取IP地址。

    java 获取 IP String ip = "";String address = "";try {// 获取IP地址ip = InetAddress.get ...

  4. java获取IP地址和MAC地址方式

    java获取IP地址和MAC地址方式 前端和后台都可以获取 ip获取方式比较简单,就不做分析了,主要说mac的获取 前端获取的方式与局限性:尝试好几种方式,这种是最易实现.最简单的方式,确实能获取该浏 ...

  5. 【Java】获取IP以及归属地

    获取IP地址(两种方式) 首先使用基于Spring Boot搭建项目,在controller添加HttpServletRequest请求参数: package com.wxz.utils;import ...

  6. Java 获取IP地址的工具类

    package cn.tolin.springboot.lab1.util;import javax.servlet.http.HttpServletRequest; import java.net. ...

  7. java获取IP地址,request.getHeader(“x-forwarded-for“)

    Nginx配置 前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付 ...

  8. Java 获取ip地址、省份城市、城市ip

    1.获取ip :使用request.getHeader("x-forwarded-for")获取真实IP,x-forwarded-for的值并不止一个,而是一串IP值,获取为空时, ...

  9. 获取ip地址解析归属地

    本文目的: 通过分析ip地址归属地解析过程,分享探究问题的基本步骤,逐步认识基础知识的重要. 声明一下: 基于本人知识视野,个人理解能力的限制,文中难免有不当之处,敬请理解. 大家都知道,网上有很多可 ...

最新文章

  1. pytorch中tensor.mul()和mm()和matmul()
  2. Linux中的In命令
  3. java 邮件 tls_通过TLS发送的Java邮件
  4. 实现Chrome Devtools调试JavaScript V8引擎
  5. android 画布抗锯齿,android – 如何在画布和路径中进行抗锯齿处理
  6. java 继承对象 初始化_java中具有继承关系的类及其对象初始化顺序
  7. textarea输入区域设置输入文字字数的最大个数
  8. case when 多条件 oracle,casewhen(casewhen同时满足多条件)
  9. 生物信息学分析选用的服务器,蛋白质与蛋白质组分析生物信息学
  10. 计算机键盘上的符号英语怎么说,电脑键盘上特殊符号和标点符号名称的输入方法汇总...
  11. 关于目前CIM(BIM+GIS)行业的一些看法
  12. mysql按每月分组统计_MySql按周,按月,按日分组统计数据
  13. 【Vue】基于Element-UI的文件上传与下载
  14. 录音转成文字的方法分享
  15. Element UI组件介绍
  16. Lua 实现Get Set属性
  17. C语言例题——简易计算器
  18. 【名称解释】上解中央支出
  19. IDEA创建自己的xml类型文件
  20. iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit

热门文章

  1. vulnhub靶场-Hacker_Kid-v1.0.1
  2. zip压缩文件转换为可传输byte[]流和不解压下读取指定zip包中文件
  3. 动态规划——最长非降子序列
  4. 微信公众号运营基础篇:排版、内容创作与引流篇
  5. MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标
  6. [转载]Palm 串行通讯GPS数据读取的实现
  7. 【计算机视觉】双目测距(二)--双目标定与矫正
  8. 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板 (1)
  9. 转自菜头 英超,给技术人员一点时间
  10. Could not load driver class org.neo4j.ogm.drivers.http.driver.HttpDriver(Neo4j连接用bolt还是http)