1. 程式人生 > >【java】利用第三方的IP地址屬地查詢

【java】利用第三方的IP地址屬地查詢

任務是根據IP地質查詢所述的省份,可以運用第三方的工具。

網上搜了一下,採用了網上的現成程式碼並進行了修改:返回的引數封裝成了DTO,包含所屬國家、地區、省份、城市、網際網路服務提供商。

放到同一個pakage裡,執行Test.java或參照Test.java呼叫即可。

++++GetAddressByIp類+++++++++++++++++++++++++++++++++++++++++++++++

package main;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


import net.sf.json.JSONObject;


/*
 * Author: Luo Tianyan
 * Version:20160505
 * 
 * 方法,用於根據IP地址找到所屬國家、地區、省份、城市、網際網路服務提供商
 * */
public class GetAddressByIp {


// 呼叫該類的getAddressByIp()方法即可
public static IpParserDTO getAddressByIp(String IP) {
IpParserDTO resultDto = new IpParserDTO();
try {
// 使用淘寶提供的service
String str = getJsonContent("http://ip.taobao.com/service/getIpInfo.php?ip="
+ IP);


// System.out.println(str);


JSONObject obj = JSONObject.fromObject(str);
JSONObject obj2 = (JSONObject) obj.get("data");
String code = String.valueOf(obj.get("code"));


if (code.equals("0")) {
resultDto.setCountry(obj2.get("country").toString());
resultDto.setArea(obj2.get("area").toString());
resultDto.setProvince(obj2.get("region").toString());
resultDto.setCity(obj2.get("city").toString());
resultDto.setServer(obj2.get("isp").toString());


} else {
System.out.println("IP地址有誤");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("獲取IP地址異常:" + e.getMessage());
}
return resultDto;
}


public static String getJsonContent(String urlStr) {
try {
// 獲取HttpURLConnection連線物件
URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 設定連線屬性
httpConn.setConnectTimeout(3000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 獲取相應碼
int respCode = httpConn.getResponseCode();
if (respCode == 200) {
return convertStream2Json(httpConn.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}


private static String convertStream2Json(InputStream inputStream) {
String jsonStr = "";
// ByteArrayOutputStream相當於記憶體輸出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 將輸入流轉移到記憶體輸出流中
try {
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, len);
}
// 將記憶體流轉換為字串
jsonStr = new String(out.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}


}

++++++++IpParserDTO類+++++++++++++++++++++++++++++++++

package main;


import java.io.Serializable;


/*
 * Author: Luo Tianyan
 * Version:20160505
 * 
 * 用於ip解析的DTO
 * */
public class IpParserDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String country;// 國家
private String area;// 地區,如“華南”
private String province;// 省份
private String city;// 城市
private String server;// 網際網路服務提供商,如“電信”


public String getCountry() {
return country;
}


public void setCountry(String country) {
this.country = country;
}


public String getArea() {
return area;
}


public void setArea(String area) {
this.area = area;
}


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 getServer() {
return server;
}


public void setServer(String server) {
this.server = server;
}


public static long getSerialversionuid() {
return serialVersionUID;
}


@Override
public String toString() {
return "IpParserDTO [country=" + country + ", area=" + area
+ ", province=" + province + ", city=" + city + ", server="
+ server + "]";
}
}

+++++++++++Test類+++++++++++++++++++++++++++++++

package main;


import main.IpParserDTO;


/*
 * Author: Luo Tianyan
 * Version:20160505
 * 
 * 方法,測試用
 * */
public class Test {
public static void main(String[] args) {
// 呼叫GetAddressByIp類的getAddressByIp()方法即可,引數為String的IP地址,返回IpParserDTO物件
IpParserDTO test1 = GetAddressByIp.getAddressByIp("221.238.6.1");


// IpParserDTO物件的屬性:國家country、地區area、省份province、城市city、網際網路服務提供商server
// 均有各自的getter和setter
System.out.println(test1.getProvince());
}
}

++++++++++++++++++++++

相關推薦

java利用第三方IP地址屬地查詢

任務是根據IP地質查詢所述的省份,可以運用第三方的工具。 網上搜了一下,採用了網上的現成程式碼並進行了修改:返回的引數封裝成了DTO,包含所屬國家、地區、省份、城市、網際網路服務提供商。 放到同一個pakage裡,執行Test.java或參照Test.java呼叫即可。

LeetCode93. 復原IP地址 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/restore-ip-addresses/description/ 題目描述: 給定一個只包含數字的字串,復原它並返回所有可能的 IP 地址格式。 示例: 輸入: "25525511135" 輸出: ["25

Java利用Gearman進行Mysql到Redis的複製

開始的架構圖已經有寫得非常漂亮的。我這裡就不重新再編輯了。java 版本實現job server和worker從第6點開始,紅色部分是我遇到的一些坑。。。 1, 環境 CentOS 64位, MySQL, Redis, Java mysql安裝通過lnmp進行安裝。

python批量掃描IP地址80/8080埠

主要是在實習當中用到的IP埠掃描的一個操作,python語言,輸出到txt文件中,同時顯示在dos輸出視窗上。 程式碼: 檔名:port_scan.py #!/usr/bin/env python import socket def check_port(address

JAVA利用反射呼叫不同方法,減少重複程式碼

今天在寫大作業的時候,遇到如下問題:整個方法裡只有資料獲取時的get方法不同,如何通過傳遞進來的不同的例項引數來使用不同的方法,而避免大段的程式碼copy,做到程式碼複用。於是今天粗略地瞭解了反射機制

Java利用自帶的file.mkdirs()建立資料夾與file.mkdirs()的注意事項

利用Java的自帶命令file.mkdirs();是可以直接在系統建立資料夾的。比如在d:\1資料夾下建立一個2的資料夾,則這樣寫:import java.io.*;  publicclass FileMkdirTest {      publicstaticvoid mai

Java利用String的compareTo比較兩個時期字串

在《【Java】比對兩個以字串形式表示的時期是否相差超過1天》(點選開啟連結)曾經介紹過,如果利用字串的擷取來比較兩個在資料庫中取出來,被特定格式化的日期。然而,這具有一定的侷限性,最大的缺點出在擷取字串太複雜太麻煩。 其實可以利用String的compareTo比較兩個表

IP地址屬地查詢測試用例,涵蓋31個省會和3個運營商

編寫的IP地址屬地查詢的程式碼測試用的,參考了網上的一份用例表,並做了修改:只保留省會,對過時、不準確、缺項的IP地址進行了修正、補充。 電信 聯通 移動 北京 220.181.22.1 202.96.18.1 221.130.33.1 上

VB.NET利用純真IP數據庫查詢IP地址及信息

ipv targe expr ext 不支持 分享 回收 sys 部分 幾年前從某個博客抄來的,已經忘記原地址了,如果需要C#版的,可以在博客園搜到吧。我因為自己用,所以轉換為了VBNET代碼,而且也放置了很久,今天無意間翻出來,就分享給大家吧。 首先,先下載 純真數據庫

java判斷兩個引用型別的變數是否指向同一地址

  問題:有兩個物件obj1和obj2,都是MyObject類的例項。如何比較這兩個物件是否指向相同的記憶體地址? 分情況討論: 1、如果 MyObject類的equals方法和hashcode方法被重寫:  如果obj1 == obj2 為真,則兩者指向相同的

JAVA在SpringBoot 專案中 利用maven 的generate外掛

使用maven 外掛 generate生成MyBatis相關檔案 在專案中增加 maven 依賴 - mybatis-spring-boot-starter - mysql-connector-java - mybatis-generator-maven-plugin 外掛 自

react利用prop-types第三方庫對元件的props中的變數進行型別檢測

1.安裝:npm install prop-types --save 2.使用 import React, { Component } from 'react'; import PropTypes

Hadoop安裝設定靜態IP地址

坑一: 在interface中對設定網絡卡名稱應該實現通過ifconfig確認,通過查詢發現一個為ens33,一個為ens38。 坑二: 本ubutun系統安裝在VMware虛擬機器中設定了兩個網絡卡,一個網絡卡用於與通過安裝虛擬機器的Host主機連線至外部網路

Java不依賴第三方庫傳送post請求

原始碼取自某簡訊平臺,不依賴第三方庫,無異常處理程式碼,僅供參考 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.P

JAVA基礎:網路(TCP/IP/UDP/HTTP)URL、Socket

IP地址: IP地址是我們電腦在網路中的唯一標記, 所有的電腦之間進行資訊互動都是利用這個IP地址來進行識別。 埠號: ip地址唯一標示了通訊實體,但是一個通訊實體可以有多個通訊程式同時提供網路服務。這個時候就要通過埠來區分開具體的通訊程式。一個通訊實體上不能有兩個通訊程式使用同一個埠號

Java在伺服器cmd 下 編譯呼叫第三方jar包的檔案

今天在使用者現場除錯BUG。 由於遠端並且不能模仿 使用者現場的裝置環境 不能將程式碼拷貝到開發環境測試。 就只能在伺服器寫java程式碼 測試。 這裡遇到一個問題,就是怎麼編譯呼叫第三方jar包的j

LeetCode 中等題48-復原IP地址

題目描述:給定一個只包含數字的字串,復原它並返回所有可能的 IP 地址格式。 示例: 輸入: "25525511135" 輸出: ["255.255.11.135", "255.255.111.35"] 解法1。暴力解法,用4個變數分別從[1,4)遍歷,再由此確定4

小白學JAVAQQ第三方登陸Demo

實現簡單的QQ第三方登陸功能,具體的Demo,本人是用maven+SSM做的1. 自己練習做第三方登陸,網上的說的都是很模糊,初學者不是很容易看懂,所以記錄研究QQ登陸的經歷,希望幫到大家。2. 必備:Sdk4J.jar3. 樓主用的是maven+SSM框架做的,所以需要把S

Javawindows下直接運行Java程序(利用bat運行jar文件)

變量 註冊表 r文件 語言 col bat文件 語句 get bat 這種方法只是掩耳盜鈴,簡化了運行jar的方式。並不是將Java代碼打包成了exe文件。 具體步驟為,電腦上有JRE環境,然後利用bat文件包裝一下運行jar的控制臺語句,最後用C語言打包成exe文件。

華為 OJ 整數與IP地址間的轉換

原理:ip地址的每段可以看成是一個0-255的整數,把每段拆分成一個二進位制形式組合起來,然後把這個二進位制數轉變成 一個長整數。 舉例:一個ip地址為10.0.3.193 每段數字             相對應的二進位制數 10                   0