IP工具类-自己动手做个ip解析器

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

ip工具类-自己动手做个ip解析器

导入依赖包:

下载地址:http://yunpan.cn/cLHfYZQMn65QQ 访问密码 6090

如果不用阿里巴巴的请求。则不用导入阿里巴巴的jar包。只需导入解析纯真数据库需要的jar即可。

JSon包可导可不导。

以下是详细的实现代码:

packagecom.souvc.common.base;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.InetAddress;importjava.net.MalformedURLException;importjava.net.PRotocolException;importjava.net.URL;importjava.net.UnknownHostException;importjavax.servlet.http.HttpServletRequest;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.handsome.ip.IPSeeker;/*** 类名: IPUtil </br>

* 描述: ip 工具类 </br>

* 开发人员:souvc</br>

* 创建时间: 2015-11-10 </br>

* 发布版本:V1.0 </br>*/publicclassIPUtil {/*** 方法名:getIpAddr</br>

* 详述:获取IP地址</br>

* 开发人员:souvc </br>

* 创建时间:2015-11-10 </br>

*@paramrequest

*@return*@throws*/publicstaticString getIpAddr(HttpServletRequest request) {

String ipAddress= request.getHeader("x-forwarded-for");if(ipAddress ==null|| ipAddress.length() == 0

|| "unknown".equalsIgnoreCase(ipAddress)) {

ipAddress= request.getHeader("Proxy-Client-IP");

}if(ipAddress ==null|| ipAddress.length() == 0

|| "unknown".equalsIgnoreCase(ipAddress)) {

ipAddress= request.getHeader("WL-Proxy-Client-IP");

}if(ipAddress ==null|| ipAddress.length() == 0

|| "unknown".equalsIgnoreCase(ipAddress)) {

ipAddress=request.getRemoteAddr();if(ipAddress.equals("127.0.0.1")|| ipAddress.equals("0:0:0:0:0:0:0:1")) {//根据网卡取本机配置的IPInetAddress inet =null;try{

inet=InetAddress.getLocalHost();

}catch(UnknownHostException e) {

e.printStackTrace();

}

ipAddress=inet.getHostAddress();

}

}//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割if(ipAddress !=null&& ipAddress.length() > 15) {//"***.***.***.***".length()//= 15if(ipAddress.indexOf(",") > 0) {

ipAddress= ipAddress.substring(0, ipAddress.indexOf(","));

}

}returnipAddress;

}/*** 方法名:getIpRealAddr</br>

* 详述:获取真实名称</br>

* 开发人员:souvc</br>

* 创建时间:2015-11-10 </br>

*@paramip

*@return*@throws*/publicstaticString getIpRealAddr(String ip) {//指定纯真数据库的文件名,所在文件夹String address = "";try{

IPSeeker ipseeker=newIPSeeker("IpToAdd.Dat", "E:\\ipdata");

address=ipseeker.getIPLocation(ip).getCountry();

}catch(Exception e) {

}//获得国家地区returnaddress;

}/*** 方法名:getArea</br>

* 详述:获取运营商 </br>

* 开发人员:souvc </br>

* 创建时间:2015-11-10 </br>

*@paramip

*@return*@throws*/publicstaticString getArea(String ip) {//指定纯真数据库的文件名,所在文件夹String area = "";try{

IPSeeker ipseeker=newIPSeeker("IpToAdd.Dat", "E:\\ipdata");

area=ipseeker.getArea(ip);

}catch(Exception e) {

}returnarea;

}/*** 方法名:getIpInfo</br>

* 详述:通过IP获取地址(需要联网,调用淘宝的IP库)</br>

* 开发人员:souvc </br>

* 创建时间:2015-11-10 </br>

*@paramip

*@return*@throws*/publicstaticString getIpInfo(String ip) {if(ip.equals("本地")) {

ip= "127.0.0.1";

}

String info= "";try{

URL url=newURL("http://ip.taobao.com/service/getIpInfo.php?ip=" +ip);

HttpURLConnection htpcon=(HttpURLConnection) url.openConnection();

htpcon.setRequestMethod("GET");

htpcon.setDoOutput(true);

htpcon.setDoInput(true);

htpcon.setUseCaches(false);

InputStream in=htpcon.getInputStream();

BufferedReader bufferedReader=newBufferedReader(newInputStreamReader(in));

StringBuffer temp=newStringBuffer();

String line=bufferedReader.readLine();while(line !=null) {

temp.append(line).append("\r\n");

line=bufferedReader.readLine();

}

bufferedReader.close();

JSONObject obj=(JSONObject) JSON.parse(temp.toString());if(obj.getIntValue("code") == 0) {

JSONObject data= obj.getJSONObject("data");

info+= data.getString("country") + " ";

info+= data.getString("region") + " ";

info+= data.getString("city") + " ";

info+= data.getString("isp");

}

}catch(MalformedURLException e) {

e.printStackTrace();

}catch(ProtocolException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}returninfo;

}/*** 方法名:main</br>

* 详述:测试方法</br>

* 开发人员:souvc </br>

* 创建时间:2015-11-10 </br>

*@paramargs

*@throws*/publicstaticvoidmain(String[] args) {

String country=getIpRealAddr("14.23.59.170");

String area=getArea("14.23.59.170");

String getIpInfo=getIpInfo("14.23.59.170");

System.out.println(country);

System.out.println(area);

System.out.println(getIpInfo);

}

}

效果如下:

美国

ATT用户

中国 广东省 广州市 电信

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航