1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Java】获取IP以及归属地

【Java】获取IP以及归属地

时间:2020-09-12 00:36:20

相关推荐

【Java】获取IP以及归属地

获取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 .HttpURLConnection;import .URL;/*** TODO** @author wxz* @date /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("/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("/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 "其他客户端";}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。