版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/wangshuxuncom/article/details/35988143

        曾几何时通过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的地址:

        【0分下载Demoproject

通过IP获取对应所在地的地址的更多相关文章

  1. 百度接口通过ip获取用户所在地

    /** * 百度接口      * 通过用户ip获取用户所在地      * @param userIp      * @return      */ public static String get ...

  2. C#调用百度高精度IP定位API通过IP获取地址

    API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 1.申请百度账号,创建应用,获取密钥(AK) http://lbsyu ...

  3. java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名

    package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...

  4. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

  5. c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息

    我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存等. 首先需要引入命名空间: us ...

  6. ASP.NET根据IP获取省市地址

    1.在网站的跟路径下面添加 QQWry.dat 文件,这个文件是IP数据库文件 2.添加以下一个类 IPScanner     C# 代码   复制 public class IPScanner { ...

  7. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  8. 如何根据Ip获取地址信息--Java----待整理完善!!!

    如何根据Ip获取地址信息--Java----待整理完善!!! QQWry.dat数据写入方法: http://www.cnblogs.com/xumingxiang/archive/2013/02/1 ...

  9. java 通过ip获取客户端mac地址

    java 通过ip获取客户端mac地址 package com.asppro.util; import java.io.BufferedReader; import java.io.IOExcepti ...

随机推荐

  1. 再不学会这些技巧,你就OUT了!

    俗话说的好:技多不压身!这句话真是一点都没错,尤其是在21世纪的今天,作为老师的你,如果不会使用下面所要说的这款神器,恐怕你就像玩游戏一样,要被get out!那到底是什么呢?它就是现在正在全国初高中 ...

  2. mongoDB的shell数组操作器

    http://www.2cto.com/database/201304/205024.html mongoDB数组操作器   $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组. 增 ...

  3. android学习之--网格视图(GridView)和图像切换器(ImageSwitcher)

             GridView用于在界面上按行.列分布显示多个组件.GridView和ListView有共同父类:AbsListView. GridView与ListView的差别在于:ListV ...

  4. Effective C++ Item 17 Store newed objects in smart pointer in standalone statements

    If you trying to do multiple things in one statement, you should think carefully abnormal behavior e ...

  5. UITextField 全属性

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  6. 如果我们的MCU调试不通过,我们该如何测试?(未完待续)

    我们拿到一款MCU,首先在选型的时候对他们都会有一个大概的了解,首先我们知道它多大与的FLASH,多大的RAM,是否与我们的项目适合,资源上是否足够,内频是否足够,运行速率能否达到标准,性能怎么样,比 ...

  7. PHP Web 木马扫描器代码

    scanner.php:<?php/**************PHP Web木马扫描器************************//* [+] 作者: alibaba *//* [+] ...

  8. Swift-Swift的Singleton三种写法

    第一种: import Foundation class SingletonA : NSObject { static let sharedInstance: SingletonA = Singlet ...

  9. 在 CSS 中使用特征查询

    原文地址:Using Feature Queries in CSS 原文作者:Jen Simmons 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:Che ...

  10. JS-倒计时效果

    团购-限时抢 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...