通过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 ...
随机推荐
- 【PyMongo】连接10055错误的处理--windows7
http://stackoverflow.com/questions/25621893/mongodump-utility-raise-socketexception
- SQL 2005 如何只安装客户端?
在“注册信息”输入合适的用户名和公司后,点击[下一步],在“要安装的组件”界面中选择要安装的组件:根据我们的需要来选择要安装的组件(各组件的说明如下表),这里我勾选所有的组件:我们可以点击 [高级 ...
- linux,crontab定时任务中为脚本指定使用参数,crontab的脚本中是否可以带参数
需求描述: 今天在写脚本的时候,脚本的运行需要给出几个参数,那么就考虑 在crontab写定时任务的时候,是否也是能够在脚本中,增加参数呢, 因为以前没有这么用过,所以呢,就进行一次测试. 测试过程: ...
- spring配置文件中bean标签
<bean id="beanId"(1) name="beanName"(2) class="beanClass"(3) parent ...
- C#操作缓存--CacheHelper缓存帮助类
/// <summary>/// 类说明:Assistant/// 联系方式:361983679 /// 更新网站:<a href=\"http://www.cckan. ...
- 在VS中安装/使用 MVVMLight
一般来说,我喜欢使用NuGet来获取这些东西,比如Newtonsoft.Json.netlog4.MVVMLight 之类的东西.至于NuGet的使用,以后再说吧.为了直接进入正题,我们这里直接使用V ...
- 超全面的JavaWeb笔记day08<Tomcat&Web应用&HTTP协议>
1.常用软件体系结构 BS:浏览器/服务器 CS:客户端/服务器 WEB资源 动态资源 JSP Servlet 静态资源 html 常用服务器 Tomcat Weblogic Resin JBOSS ...
- Duilib教程-HelloDuilib及DuiDesigner的简单使用
一.HelloDuilib 1. 首先理解DUILIB显示的一个基本流程,如下图: 在Duilib中,WindowImplBase 这个类代表了图中 “CWndClass”. 所以我们需要做的是: 1 ...
- AsycnTask
一.异步任务加载网络数据: 在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Par ...
- .net 防盗链
Global.asax 文件中 protected void Application_BeginRequest(object sender, EventArgs e) { //判断当前请求是否是访问 ...