summaryrefslogtreecommitdiff
path: root/help/IPGEO.md
diff options
context:
space:
mode:
Diffstat (limited to 'help/IPGEO.md')
-rw-r--r--help/IPGEO.md152
1 files changed, 88 insertions, 64 deletions
diff --git a/help/IPGEO.md b/help/IPGEO.md
index 79acdb5..85795fc 100644
--- a/help/IPGEO.md
+++ b/help/IPGEO.md
@@ -1,106 +1,130 @@
-# Galaxy IPGEO 使用文档
+# IPLookup 使用文档
-Galaxy IPGEO 即数据平台下的galaxy-tool支持的IP定位功能。最终的数据格式为MaxMind DB 二进制格式(mmdb),当然我们也支持提供CSV或SQL数据库表的数据格式(只要满足schema属性约束),数据平台将会在合适时间进行转换为二进制格式。
+IPLookupV2 基于IP地址获取地理位置或ASN(自治系统号码)信息。核心功能:
+- [构建GeoIP Databases 文件](https://docs.geedge.net/pages/viewpage.action?pageId=39135257)
+- 通过开源解析库[MaxMind DB Reader](https://github.com/maxmind/MaxMind-DB-Reader-java)生成Reader 对象
-## 工具类信息
+## 功能设计
-因ASN与IP位置信息的差异性,将IPGEO分为两个工具类:
-
-- ASNLookup 针对IP映射ASN工具类
-- IPLookup 支持IP映射国家、地区、经纬度、ASN信息(支持ASNLookup部分功能)
-
-## 数据库
-
-所属数据库默认处于dat目录下,加载文件将以mmdb结尾。不指定加载数据库情况下,默认文件名如下:
+因IP知识库来源不同,默认分两种类型数据库:IP-ASN 和 IP-LOCATION。具体实现类:
+- IPLookup IP地址映射为国家,地区,经纬度及ASN(内置ASNLookup类) 等。
+- ASNLookup IP地址映射AS号,组织及国家编码等。
+## 数据库信息
+GeoIP 数据库文件默认存储在 "dat目录" 中,并且在加载工具类时,如果没有指定数据库文件的路径,它将自动加载默认路径下的数据库文件。默认文件名如下:
| Name | Filename | Description |
| ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 公共IP定位库 | ip.mmdb<br />ip_v4.mmdb <br />Ip_v6.mmdb | 公共IP定位库,包含All,v4,v6<br />来自于第三方购买或其它开源数据; |
-| 自定义IP定位库 | ip_private.mmdb<br />ip_private_v4.mmdb<br />ip_private_v6.mmdb | 自定义IP定位库,包含All,v4,v6<br />来自与用户预置的自定义数据,一般权威性较高。 |
-| 公共IP映射ASN库 | asn.mmdb<br />asn_v4.mmdb<br />asn_v6.mmdb | 公共IP映射ASN库,包含All,v4,v6<br />来自于第三方购买或其它开源数据; |
-| 自定义IP映射ASN库 | asn_private.mmdb<br />asn_private_v4.mmdb<br />asn_private_v6.mmdb | 自定义IP映射ASN库,包含All,v4,v6<br />来自与用户预置的自定义数据,一般权威性较高。 |
-
-
+| 基础IP定位库 | ip.mmdb<br />ip_v4.mmdb <br />Ip_v6.mmdb | IP基础定位库,一般来源于系统内置或第三方购置;包括全局,v4格式和v6格式。<br />|
+| 用户自定义IP定位库 | ip_private.mmdb<br />ip_private_v4.mmdb<br />ip_private_v6.mmdb | 用户自定义IP定位库,一般来源于企业或运营商内部的知识库,相对权威和可信度更高;包括全局,v4格式和v6格式。<br /> |
+| 基础ASN库 | asn.mmdb<br />asn_v4.mmdb<br />asn_v6.mmdb | 基础ASN库,一般来源于系统内置或第三方购置;包括全局,v4格式和v6格式。 |
+| 用户自定义ASN库 | asn_private.mmdb<br />asn_private_v4.mmdb<br />asn_private_v6.mmdb | 自定义IP映射ASN库,一般来源于企业或运营商内部的知识库,相对权威和可信度更高;包括全局,v4格式和v6格式。 |
-## 执行方案
-### 数据库加载优先级
-> 相同类型库:具有相同特征的库,来自不同数据源或类型。例如ip.mmdb 可能包含 ip_v4.mmdb 与 ip_v6.mmdb,需要指定依赖的数据源执行顺序。
+## 实现方式
-如上所述,若同时加载多个相同类型库,系统根据IP特点会优先获取V4或V6库.
+### 同类型不同格式数据库的加载顺序
+支持同时加载相同类型多个格式的IP定位库,基于下图将产生的DBReader对象顺序存储到LIST集合中。例如:基础库同时加载了v4,v6和 All(包含v4和v6)三个文件,读取时将优先使用v4和v6 DBReader。
![默认加载顺序](help/images/ip_load_priortiy.png)
-### 执行顺序
+### 不同类型数据库的执行顺序
-当同时指定公共与用户自定义库时,系统优先通过自定义库进行映射匹配。执行顺序如下:
+当同时指定公共与用户自定义库时,将优先使用自定义库获取IP地理位置。执行顺序如下:
-![映射优先级](help/images/ip_map.png)
+![映射优先级](help/images/ip_map.jpg)
-## 功能说明
+## 方法说明
-**IpLookup**
+**IpLookupV2**
| Name | Type | Description |
| ------------------------------------------------------------ | ---------------- | -------------------------------------------------- |
-| IpLookup.Builder(boolean isDefaultDB) | IpLookup.Builder | |
-| Builder.loadDataFile(String ipDatabasePublicFile) | IpLookup.Builder | 加载公共IP定位库 |
-| Builder.loadDataFileV4(String ipDatabasePublicFileV4) | IpLookup.Builder | 加载公共IPv4定位库 |
-| Builder.loadDataFileV6(String ipDatabasePublicFileV6) | IpLookup.Builder | 加载公共IPv6定位库 |
-| Builder.loadDataFilePrivate(String ipDatabasePrivateFile) | IpLookup.Builder | 加载用户自定义IP定位库 |
-| Builder.loadDataFilePrivateV4(String ipDatabasePrivateFileV4) | IpLookup.Builder | 加载用户自定义IPv4定位库 |
-| Builder.loadDataFilePrivateV6(String ipDatabasePrivateFileV6) | IpLookup.Builder | 加载用户自定义IPv6定位库 |
-| Builder.loadAsnDataFile(String asnDatabasePublicFile) | IpLookup.Builder | 加载公共ASN定位库 |
-| Builder.loadAsnDataFileV4(String asnDatabasePublicFileV4) | IpLookup.Builder | 加载公共ASN IPv4定位库 |
-| Builder.loadAsnDataFileV6(String asnDatabasePublicFileV6) | IpLookup.Builder | 加载公共ASN IPv6定位库 |
-| Builder.loadAsnDataFilePrivate(String asnDatabasePrivateFile) | IpLookup.Builder | 加载用户自定义ASN定位库 |
-| Builder.loadAsnDataFilePrivateV4(String asnDatabasePrivateFileV4) | IpLookup.Builder | 加载用户自定义ASN IPv4定位库 |
-| Builder.loadAsnDataFilePrivateV6(String asnDatabasePrivateFileV6) | IpLookup.Builder | 加载用户自定义ASN IPv6定位库 |
-| Builder.build() | IpLookup | 构建IPGEO对象 |
-| countryLookup(String ip) | String | 返回国家 |
-| cityLookupDetail(String ip) | String | 返回详情,包含城市,省(州),国家;分隔符为英文逗号"," |
-| cityLookup(String ip) | String | 返回所属城市,若不存在可返回国家信息; |
-| latLngLookup(String ip) | String | 返回经纬度,格式:维度,经度 ;分隔符为英文逗号"," |
+| IpLookupV2.Builder(boolean isDefaultDB) | IpLookupV2.Builder |是否使用默认数据库 |
+| Builder.loadDataFile(String databaseFile) | IpLookupV2.Builder | 加载基础IP定位库 |
+| Builder.loadDataFileV4(String databaseFile) | IpLookupV2.Builder | 加载基础IPv4定位库 |
+| Builder.loadDataFileV6(String databaseFile) | IpLookupV2.Builder | 加载基础IPv6定位库 |
+| Builder.loadDataFilePrivate(String databaseFile) | IpLookupV2.Builder | 加载用户自定义IP定位库 |
+| Builder.loadDataFilePrivateV4(String databaseFile) | IpLookupV2.Builder | 加载用户自定义IPv4定位库 |
+| Builder.loadDataFilePrivateV6(String databaseFile) | IpLookupV2.Builder | 加载用户自定义IPv6定位库 |
+| Builder.loadAsnDataFile(String databaseFile) | IpLookupV2.Builder | 加载基础ASN库 |
+| Builder.loadAsnDataFileV4(String databaseFile) | IpLookupV2.Builder | 加载基础IPv4 ASN库 |
+| Builder.loadAsnDataFileV6(String databaseFile) | IpLookupV2.Builder | 加载基础IPv6 ASN库 |
+| Builder.loadAsnDataFilePrivate(String databaseFile) | IpLookupV2.Builder | 加载用户自定义ASN库 |
+| Builder.loadAsnDataFilePrivateV4(String databaseFile) | IpLookupV2.Builder | 加载用户自定义IPv4 ASN库 |
+| Builder.loadAsnDataFilePrivateV6(String databaseFile) | IpLookupV2.Builder | 加载用户自定义IPv6 ASN库 |
+| Builder.loadDataFile(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础IP定位库 |
+| Builder.loadDataFileV4(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础IPv4定位库 |
+| Builder.loadDataFileV6(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础IPv6定位库 |
+| Builder.loadDataFilePrivate(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义IP定位库 |
+| Builder.loadDataFilePrivateV4(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义IPv4定位库 |
+| Builder.loadDataFilePrivateV6(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义IPv6定位库 |
+| Builder.loadAsnDataFile(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础ASN库 |
+| Builder.loadAsnDataFileV4(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础IPv4 ASN库 |
+| Builder.loadAsnDataFileV6(Inputstream databaseStream) | IpLookupV2.Builder | 加载基础IPv6 ASN库 |
+| Builder.loadAsnDataFilePrivate(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义ASN库 |
+| Builder.loadAsnDataFilePrivateV4(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义IPv4 ASN库 |
+| Builder.loadAsnDataFilePrivateV6(Inputstream databaseStream) | IpLookupV2.Builder | 加载用户自定义IPv6 ASN库 |
+| Builder.build() | IpLookupV2 | 构建IPLookupV2对象 |
+| countryLookup(String ip) | String | 返回国家/区域 |
+| provinceLookup(String ip) | String | 返回省/洲 |
+| cityLookup(String ip) | String | 返回城市 |
+| administrativeAreaLookupDetail(String ip) | String | 返回到区/县的四级定位信息 |
+| ispLookup(String ip) | String | 返回运营商 |
+| organizationLookup(String ip) | String | 返回组织 |
+| cityLookupDetail(String ip) | String | 返回到城市的3级定位信息,包含城市,省(州),国家;分隔符为英文句号"." |
+| locationLookupDetail(String ip) | String | 返回地理位置信息明细,支持7级 |
+| infoLookupToCSV(String ip) | String | 返回地理位置信息明细,支持7级,csv格式 |
+| infoLookupToJSON(String ip) | String | 返回地理位置信息明细,支持7级,json格式 |
+| infoLookup(String ip) | String | 返回地理位置信息明细,支持7级,Response 对象 |
+| latLngLookup(String ip) | String | 返回经纬度,格式:维度,经度 ;分隔符为英文句号"." |
| cityLatLngLookup(String ip) | String | 返回 cityLookup+latLngLookup信息; |
-| asnLookup(String ip) | String | 返回ASN号,调用AsnLookup工具类 |
-| asnLookupDetail(String ip) | String | 返回ASN号及ISP信息,调用AsnLookup工具类 |
+| asnLookup(String ip) | String | 返回ASN,调用AsnLookup工具类 |
+| asnLookupOrganization(String ip) | String | 返回所属AS组织,调用AsnLookup工具类 |
+| asnLookupDetail(String ip) | String | 返回ASN及ISP信息,调用AsnLookup工具类 |
**AsnLookup**
| Name | Type | Description |
| ------------------------------------------------------------ | ----------------- | ---------------------------- |
| AsnLookup.Builder(boolean isDefaultDB) | AsnLookup.Builder | |
-| Builder.loadDataFile(String asnDatabasePublicFile) | AsnLookup.Builder | 加载公共IP定位库 |
-| Builder.loadDataFileV4(String asnDatabasePublicFileV4) | AsnLookup.Builder | 加载公共ASN IPv4定位库 |
-| Builder.loadDataFileV6(String asnDatabasePublicFileV6) | AsnLookup.Builder | 加载公共ASN IPv6定位库 |
-| Builder.loadDataFilePrivate(String asnDatabasePrivateFile) | AsnLookup.Builder | 加载用户自定义ASN 定位库 |
-| Builder.loadDataFilePrivateV4(String asnDatabasePrivateFileV4) | AsnLookup.Builder | 加载用户自定义ASN IPv4定位库 |
-| Builder.loadDataFilePrivateV6(String asnDatabasePrivateFileV6) | AsnLookup.Builder | 加载用户自定义ASN IPv6定位库 |
-| Builder.build() | AsnLookup | 构建IPGEO对象 |
-| asnLookup(String ip) | String | 返回ASN号 |
-| asnLookupDetail(String ip) | String | 返回ASN号及ISP信息 |
+| Builder.loadDataFile(String databaseFile) | AsnLookup.Builder | 加载基础ASN库 |
+| Builder.loadDataFileV4(String databaseFile) | AsnLookup.Builder | 加载基础V4 ASN库 |
+| Builder.loadDataFileV6(String databaseFile) | AsnLookup.Builder | 加载基础V6 ASN库 |
+| Builder.loadDataFilePrivate(String databaseFile) | AsnLookup.Builder | 加载用户自定义ASN库 |
+| Builder.loadDataFilePrivateV4(String databaseFile) | AsnLookup.Builder | 加载用户自定义V4 ASN库 |
+| Builder.loadDataFilePrivateV6(String databaseFile) | AsnLookup.Builder | 加载用户自定义V6 ASN库 |
+| Builder.loadDataFile(Inputstream databaseStream) | AsnLookup.Builder | 加载基础ASN库 |
+| Builder.loadDataFileV4(Inputstream databaseStream) | AsnLookup.Builder | 加载基础V4 ASN库 |
+| Builder.loadDataFileV6(Inputstream databaseStream) | AsnLookup.Builder | 加载基础V6 ASN库 |
+| Builder.loadDataFilePrivate(Inputstream databaseStream) | AsnLookup.Builder | 加载用户自定义ASN库 |
+| Builder.loadDataFilePrivateV4(Inputstream databaseStream) | AsnLookup.Builder | 加载用户自定义V4 ASN库 |
+| Builder.loadDataFilePrivateV6(Inputstream databaseStream) | AsnLookup.Builder | 加载用户自定义V6 ASN库 |
+| Builder.build() | AsnLookup | 构建AsnLookup对象 |
+| asnLookup(String ip) | String | 返回ASN |
+| asnLookupOrganization(String ip) | String | 返回AS 组织 |
+| asnLookupDetail(String ip) | String | 返回ASN及ISP信息 |
## 实现举例
```java
- IpLookupV2 ipLookup = new IpLookupV2.Builder(false)
- .loadDataFileV4(new FileInputStream(new File("dat/ip_v4_built_in.mmdb")))
- .loadDataFilePrivateV4(new FileInputStream(new File("dat/ip_v4_user_defined.mmdb")))
- .loadDataFileV6(new FileInputStream(new File("dat/ip_v6_built_in.mmdb")))
- .loadDataFilePrivateV6(new FileInputStream(new File("dat/ip_v6_user_defined.mmdb")))
- .loadAsnDataFile(new FileInputStream(new File("dat/asn_v4.mmdb")))
- .loadAsnDataFileV6(new FileInputStream(new File("dat/asn_v6.mmdb")))
- .build();
+ IpLookupV2 ipLookup = ipLookupV2 = new IpLookupV2.Builder(false)
+ .loadDataFileV4(new FileInputStream(new File("dat/ip_v4_built_in.mmdb")))
+ .loadDataFilePrivateV4(new FileInputStream(new File("dat/ip_v4_user_defined.mmdb")))
+ .loadDataFileV6(new FileInputStream(new File("dat/ip_v6_built_in.mmdb")))
+ .loadDataFilePrivateV6(new FileInputStream(new File("dat/ip_v6_user_defined.mmdb")))
+ .loadAsnDataFile(new FileInputStream(new File("dat/asn_v4.mmdb")))
+ .loadAsnDataFileV6(new FileInputStream(new File("dat/asn_v6.mmdb")))
+ .build();
logger.info(ipLookup.countryLookup("192.168.50.21"));
logger.info(ipLookup.cityLookupDetail("192.168.50.21"));
logger.info(ipLookup.latLngLookup("192.168.50.21"));
- logger.info(ipLookup.cityLookupDetail("120.221.155.223"));
+ logger.info(ipLookup.infoLookupToJSON("120.221.155.223"));
logger.info(ipLookup.countryLookup("2001:4860:4860::8888"));
logger.info(ipLookup.asnLookup("120.221.155.223"));
logger.info(ipLookup.asnLookup("2001:4860:4860::8888"));