获取IP地址(两种方式)

首先使用基于Spring Boot搭建项目,在controller添加HttpServletRequest请求参数:

package com.wxz.utils;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;
/*** TODO** @author wxz* @date 2023/1/3 14:01*/
public class IpUtils {public static String getIpAddr(HttpServletRequest request) {if (request == null) {return "unknown";}String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Forwarded-For");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;}/*** 通过调用接口的方式获取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;}}
}

在本地环境调用获取IP,要么是0:0:0:0:0:0:0:1,或者是局域网IP。所以需要部署到外网服务器才能获取到公网地址。部署到外网服务器能成功获取IP地址。

局域网IP是以192.168.x.x开头,或者是127.0.0.1IP

IP获取归属地

通过IP获取归属地一般都从地址库找到匹配的地址,

     /*** 地址库--根据ip获取归属地*/public static String getAddressByIP(String strIP) {try {URL url = new URL("http://opendata.baidu.com/api.php?query=" + strIP+"&co=&resource_id=6006&t=1433920989928&ie=utf8&oe=utf-8&format=json");;URLConnection conn = url.openConnection();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String line = null;StringBuffer result = new StringBuffer();while ((line = reader.readLine()) != null) {result.append(line);}reader.close();JSONObject jsStr = JSONObject.parseObject(result.toString());JSONArray jsData = (JSONArray) jsStr.get("data");JSONObject data= (JSONObject) jsData.get(0);//位置return (String) data.get("location");} catch (IOException e) {return "读取失败";}}

测试以及归属地

获取请求访问的方式

 /*** 获取登录的方式*/public static String getRequestHeader(HttpServletRequest request){// 从浏览器获取请求头信息String info= request.getHeader("user-agent");if(info.contains("Windows")){System.out.println("Windows pc端登陆");return "Windows pc端登陆";}if(info.contains("Macintosh")){System.out.println("Mac pc端登陆");return "Mac pc端登陆";}if(info.contains("Android")) {System.out.println("Android移动客户端");return "Android移动客户端";}if(info.contains("iPhone")) {System.out.println("iPhone移动客户端");return "iPhone移动客户端";}if(info.contains("iPad")) {System.out.println("iPad客户端");return "iPad客户端";}System.out.println("其他客户端");return "其他客户端";}

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

  1. Java获取IP及归属地

    最近我们发现各大社交平台都出现了一个新的功能:IP属地. 比如某乎: 这个IP属地是怎么做到的呢?今天我来教教你,保证你看完直呼Easy~ 技术栈 1.Java网络编程 2.Servlet 具体实现 ...

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

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

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

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

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

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

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

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

  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. [Cocoa]深入浅出Cocoa之多线程NSThread
  2. xp系统怎样安装传真服务器,XP系统下如何安装传真机 XP系统安装传真机的详细步骤[图文教程]...
  3. Android 五大存储方式具体解释
  4. oracle 如何查看日志?
  5. 【渝粤教育】电大中专电商运营实操12作业 题库
  6. Hyperledger Fabric chaincode 开发(疑难解答)
  7. 数据库性能Quest Performance Analysis Overview
  8. 15.看板方法---启动看板变革
  9. 新闻简报(7/18)
  10. Fences有一个桌面分区消失了怎么办
  11. VMware虚拟机安装win10系统
  12. 程序员须学计算机语言,新手程序员需要学什么编程语言
  13. 「GoTeam 招聘时间」传音移动互联 容器开发(上海)
  14. redis安装+客户端
  15. (王道考研计算机网络)第一章计算机网络体系结构-第一节计算机网络概述1:计网的概念、组成、功能和分类
  16. mysql COMMENT字段注释,表注释使用(转)
  17. 分布式锁-Redis解决方案和Redisson解决方案
  18. 剪贴板查看器:CopyClip 2 for Mac
  19. 兽医提醒:狗狗生病的9个征兆,建议铲屎官收藏,以备不时之需!
  20. 范德堡计算机科学硕士,范德堡大学计算机科学理学硕士研究生申请要求及申请材料要求清单...

热门文章

  1. mac版本安装copytranslator(附下载)
  2. Excel Vba无法连接 远程 Mysql数据库问题的解决方法
  3. Hotspot细节实现安全区域、记忆集卡表
  4. 西班牙的计算机水平如何,西班牙人的真实英语水平是欧洲国家中最差的吗?
  5. go test进行单元测试时,出现undefined方法或者command-line-arguments [build failed]解决方案
  6. 安全帽识别系统-智慧船舶的守夜人
  7. ClickHouse - 多卷存储扩大存储容量(生产环境必备)
  8. netcore中使用HttpContext.Current
  9. 计算机专业对口招生大学四川,2020年四川对口招生本科院校达13所,录取总计划近3000人...
  10. 探索React生态圈