通过IP获取对应所在地的地址
曾几何时通过IP获取对应所在地的地址一直是一个梦想。以前为止努力过,但效果并非非常好,如今将努力的成果(某些来源于网络)粘贴出来,希望对某些人有所启示。倘若有人有新的见解,还望不惜赐教:
1、借助外网实现获取IP对应所在地地址的目的:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class IpReport {
/**
* 对server端返回的XML进行解析
*
* @return 字符串 用,切割
*/
public static String getIp(String ip) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = getSoapInputStream(ip);
Document doc = db.parse(is);
NodeList nodeList = doc.getElementsByTagName("string");
StringBuffer stringBuffer = new StringBuffer();
for (int count = 0; count < nodeList.getLength(); count++) {
Node n = nodeList.item(count);
if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {
stringBuffer = new StringBuffer("#") ;
break ;
}
stringBuffer.append(n.getFirstChild().getNodeValue() + "#");
//System.out.println(":"+n.getFirstChild().getNodeValue());
}
is.close();
return stringBuffer.toString().split("#")[1];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 用户把SOAP请求发送给server端,并返回server点返回的输入流 用户输入的城市名称
*
* @return server端返回的输入流,供client读取
*/
private static InputStream getSoapInputStream(String ip) throws Exception {
try {
String soap = getSoapRequest(ip);
if (soap == null) {
return null;
}
URL url = new URL("http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx");
URLConnection conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Length", Integer.toString(soap.length()));
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setRequestProperty("SOAPAction","http://WebXml.com.cn/getCountryCityByIp");
OutputStream os = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
osw.write(soap);
osw.flush();
osw.close();
InputStream is = conn.getInputStream();
return is;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取SOAP的请求头,并替换当中的标志符号为用户输入的城市
*
* @return 客户将要发送给server的SOAP请求
*/
private static String getSoapRequest(String ip) {
StringBuilder sb = new StringBuilder();
sb.append("<?
xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body> "
+ "<getCountryCityByIp xmlns=\"http://WebXml.com.cn/\">"
+ "<theIpAddress>" + ip + "</theIpAddress>"
+ "</getCountryCityByIp>"
+ "</soap:Body></soap:Envelope>");
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(getIp("218.25.139.160"));//输出结果:辽宁省大连市 联通ADSL
System.out.println(getIp("200.151.111.111"));//输出结果:巴西 圣保罗
System.out.println(getIp("125.13.13.4"));//输出结果:日本 ATHOME网络
System.out.println(getIp("58.16.209.19"));//输出结果:贵州省六盘水市 六枝特区腾龙网吧
System.out.println(getIp("22.8.129.60"));//输出结果:美国 DoD网络信息中心
}
}
2、借助qqwry.dat文件实现获取IP对应所在地地址的目的:
因为借助qqwry.dat文件实现获取IP所属地的代码比較多。这里仅给出下载该javaproject的地址:
通过IP获取对应所在地的地址的更多相关文章
- 百度接口通过ip获取用户所在地
/** * 百度接口 * 通过用户ip获取用户所在地 * @param userIp * @return */ public static String get ...
- C#调用百度高精度IP定位API通过IP获取地址
API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 1.申请百度账号,创建应用,获取密钥(AK) http://lbsyu ...
- java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...
- 获取客户端网卡MAC地址和IP地址实现JS代码
获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载 获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...
- c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息
我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存等. 首先需要引入命名空间: us ...
- ASP.NET根据IP获取省市地址
1.在网站的跟路径下面添加 QQWry.dat 文件,这个文件是IP数据库文件 2.添加以下一个类 IPScanner C# 代码 复制 public class IPScanner { ...
- js获取本机mac地址,IP地址,计算机名
<!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...
- 如何根据Ip获取地址信息--Java----待整理完善!!!
如何根据Ip获取地址信息--Java----待整理完善!!! QQWry.dat数据写入方法: http://www.cnblogs.com/xumingxiang/archive/2013/02/1 ...
- java 通过ip获取客户端mac地址
java 通过ip获取客户端mac地址 package com.asppro.util; import java.io.BufferedReader; import java.io.IOExcepti ...
随机推荐
- Hasen的linux设备驱动开发学习之旅--时钟
/** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...
- 【PyMongo】连接10055错误的处理--windows7
http://stackoverflow.com/questions/25621893/mongodump-utility-raise-socketexception
- 创建并调用 DLL(1)
//通过 DLL Wizard 建立: library TestDLL; uses SysUtils, Classes, Dialogs; {$R *.res} //建立过程 proced ...
- javaScript实现归并排序
归并排序是一个O(nlogn)的算法,其基本思想就是一个分治的策略,先进行划分,然后再进行合并,下面举个例子.有这样一组数据: {5,4,1,22,12,32,45,21} 如果对它进行归并排序的话, ...
- Unity在协程内部停止协程自身后代码执行问题
当在协程内部停止自身后,后面的代码块还会继续执行,直到遇到yield语句才会终止. 经测试:停止协程,意味着就是停止yield,所以在停止协程后,yield之后的语句也就不会执行了. 代码如下: us ...
- Windows路径操作API函数学习
前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内容等等.Windows提供了一套关于路径操作的API帮助我们更好的执行这些操作. 路径截断与合并API Pat ...
- oracle 存储过程 where in参数传入问题
问题: 举个简单例子说明create or replace procedure procStr(inString in varchar2)asbeginselect * from book where ...
- 把Excel中的数据转换成Sql语句
假如excel表格中有A.B.C三列数据,希望导入到数据库users表中,相应的字段各自是name,sex,age ,在你的excel表格中添加一列.利用excel的公式自己主动生成sql语句,方法例 ...
- Android NDK开发-2-环境搭建
1.环境变量配置NDK 2.选中项目,右键属性菜单,创建一个新的编译器
- centos6 安装 directAdmin
注:教程参考 https://bbs.aliyun.com/read/159390.html 这篇文章来操作就可以了 需要注意的地方是 1)directAdmin 需要一个纯净的环境,安装direct ...