IP 转换为实际地址 《二》
来源:互联网 发布:多普达p800软件下载 编辑:程序博客网 时间:2024/06/08 11:05
项目中,有这么一个需求,要把用户操作操作信息做成日志。现在要获取用户的登录IP地址。并转为实际地址。现在给出源码。
第一步获取用户登录IP
// 获取外网真实 IP 地址 public static String getV4IP(HttpServletRequest request){ String ip = ""; String chinaz = "http://ip.chinaz.com"; StringBuilder inputLine = new StringBuilder(); String read = ""; URL url = null; HttpURLConnection urlConnection = null; BufferedReader in = null; try { url = new URL(chinaz); urlConnection = (HttpURLConnection) url.openConnection(); in = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(),"UTF-8")); while((read=in.readLine())!=null){ inputLine.append(read+"\r\n"); } //System.out.println(inputLine.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(in!=null){ try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Pattern p = Pattern.compile("\\<dd class\\=\"fz24\">(.*?)\\<\\/dd>"); Matcher m = p.matcher(inputLine.toString()); if(m.find()){ String ipstr = m.group(1); ip = ipstr; //System.out.println(ipstr); } return ip; }
第二步把获取IP 转为地址
给出源码:IpLocationResult
package com.whf.util;/** * 由ip地址对应的信息的对象模型 * */public class IpLocationResult { private Integer ret; private Integer start; private Integer end; /** * 国家 * */ private String country; /** * 省份 * */ private String province; /** * 城市 * */ private String city; private String district; /** * 网络提供商 * */ private String isp; private String type; private String desc; public Integer getRet() { return ret; } public void setRet(Integer ret) { this.ret = ret; } public Integer getStart() { return start; } public void setStart(Integer start) { this.start = start; } public Integer getEnd() { return end; } public void setEnd(Integer end) { this.end = end; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getIsp() { return isp; } public void setIsp(String isp) { this.isp = isp; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; }}
IpLocationService
package com.whf.util;import com.google.gson.Gson;/*** 处理用户位置信息的业务逻辑类* @author HUPENG* @version 1.0.0* @since jdk1.7* */public class IpLocationService { private IpLocationResult ipLocationResult; /** * 以ip地址获取地理位置信息等,返回一个对象模型 * @param ipAddress ip地址,形式诸如 123.123.123.123 * */ public IpLocationResult getIpLocationResult(String ipAddress){ if (ipLocationResult!=null) { return ipLocationResult; } String url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php"; String param = "format=json&ip=" + ipAddress; String httpResponse = null; try { httpResponse = HttpRequest.sendGet(url, param); } catch (Exception e) { // TODO: handle exception System.err.println("发送GET请求时发生错误"); e.printStackTrace(); } try { ipLocationResult= new Gson().fromJson(httpResponse, IpLocationResult.class); return ipLocationResult; } catch (Exception e) { // TODO: handle exception //System.err.println("解析json字符串时发生错误,请不要使用例如127.0.0.1的访问使用了本接口的网站"); //e.printStackTrace(); ipLocationResult = new IpLocationResult();// ipLocationResult.setCity("本地");// ipLocationResult.setCountry("本地"); ipLocationResult.setCountry("本地"); ipLocationResult.setProvince(""); ipLocationResult.setCity("");; return ipLocationResult; } }}
HttpRequest
package com.whf.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;/** * 发送http请求的类 * */public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { //System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; }}
测试类
package com.whf.test;public class Main { public static void main(String[] args) { String realIp = "58.100.3.125"; IpLocationService ipLocationService = new IpLocationService(); IpLocationResult ipLocationResult = ipLocationService.getIpLocationResult(realIp); String readlAaddress = ipLocationResult.getCountry()+ ipLocationResult.getProvince()+ipLocationResult.getCity()+ipLocationResult.getIsp() ; System.out.println(readlAaddress); }}
测试结果:
《end》
阅读全文
1 0
- IP 转换为实际地址 《二》
- IP 转换为实际地址 《一》
- 转换IP地址为十进制
- java通过百度地图把实际地址转换为经纬度
- java通过百度地图把实际地址转换为经纬度
- 将IP地址转换为二进制
- 如何转换IP地址为整型
- 域名转换为IP地址示例
- c#中域名转换为IP地址
- ip地址 转换为数字的公式
- 将IP地址转换为一个整数
- 怎样将IP地址转换为数字
- ios中域名转换为ip地址
- python模块--ip地址转换为整数
- 把ip地址转换为二进制序列
- 怎样将IP地址转换为数字
- java-将域名转换为ip地址
- Python将主机名转换为IP地址
- Mvp登录
- 【算法分析与设计】【第六周】690. Employee Importance
- jvm系列(十):如何优化Java GC「译」
- mysql安装到最后一步无响应的问题解决
- oracle 中禁用所有外键关联
- IP 转换为实际地址 《二》
- jvm系列(十一):JVM演讲PPT分享
- 百度阅读赚钱秘法 人人皆可操作
- Java正则表达式常用式子
- struts2框架搭建
- 数据结构实验之链表七:单链表中重复元素的删除
- Word排版技巧
- oracle sys_context()函数
- leetcode 63