summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoufenghu <[email protected]>2022-01-07 16:18:46 +0800
committerdoufenghu <[email protected]>2022-01-07 16:18:46 +0800
commit6af76caa5201289b151745eff1d9864d7b33f56c (patch)
tree76ed4854136128c8d82ce94648f35f63f5c031cb
parent7ae5988ceb546c14bd65192be801771c53391bbc (diff)
TSG-8734 调整IPLookup 顺序,处理原则:
* 多级位置信息之间用英文点分隔,顺序从大到小。例如:国家.省/地区.城市 * 经纬度之间分隔基于英文逗号 * 多个对象之间基于英文逗号分隔。例如ASN123,国家.省 * AsnLookup 调整国家与组织顺序
-rw-r--r--src/main/java/com/zdjizhi/utils/AbstractIpLookup.java21
-rw-r--r--src/main/java/com/zdjizhi/utils/AsnLookup.java4
-rw-r--r--src/main/java/com/zdjizhi/utils/IpLookup.java45
-rw-r--r--src/main/java/com/zdjizhi/utils/JsonMapper.java16
-rw-r--r--src/test/java/com/zdjizhi/test/IpLookupTest.java43
5 files changed, 86 insertions, 43 deletions
diff --git a/src/main/java/com/zdjizhi/utils/AbstractIpLookup.java b/src/main/java/com/zdjizhi/utils/AbstractIpLookup.java
index 6a8d264..4902289 100644
--- a/src/main/java/com/zdjizhi/utils/AbstractIpLookup.java
+++ b/src/main/java/com/zdjizhi/utils/AbstractIpLookup.java
@@ -13,7 +13,9 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractIpLookup {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected static final String UNKNOWN = "";
- protected static final String SEPARATOR = ",";
+ protected static final String LOCATION_SEPARATOR = ".";
+ protected static final String LATLNG_SEPARATOR = ",";
+ protected static final String OBJECT_SEPARATOR = "\t";
protected static final String PRIVATE_IP = "Private IP";
/**
@@ -99,6 +101,23 @@ public abstract class AbstractIpLookup {
*/
public abstract String asnLookupDetail(String ip);
+ /**
+ * Get A two-character ISO 3166-1 country code for the country associated with the location.
+ * @param ip ip地址
+ * @return country code
+ */
+ public abstract String getCountryCode(String ip);
+
+ /**
+ * A string of up to three characters containing the region-portion of the ISO 3166-2 code for the first level region associated with the IP address.
+ * @param ip ip地址
+ * @return First Level Region Code
+ */
+ public abstract String getRegionCode(String ip);
+
+
+
+
diff --git a/src/main/java/com/zdjizhi/utils/AsnLookup.java b/src/main/java/com/zdjizhi/utils/AsnLookup.java
index 3b3c400..daf810d 100644
--- a/src/main/java/com/zdjizhi/utils/AsnLookup.java
+++ b/src/main/java/com/zdjizhi/utils/AsnLookup.java
@@ -306,7 +306,7 @@ public class AsnLookup {
if (StringUtil.isEmpty(response) || response.isPrivateIP()) {
return UNKNOWN;
}
- return Joiner.on(SEPARATOR).useForNull("").join(response.getOrganization(), response.getCountryCode());
+ return Joiner.on(SEPARATOR).useForNull("").join(response.getCountryCode(), response.getOrganization());
}
@@ -318,7 +318,7 @@ public class AsnLookup {
if (StringUtil.isEmpty(response) || response.isPrivateIP()) {
return UNKNOWN;
}
- return Joiner.on(SEPARATOR).useForNull("").join(response.getAsn(), response.getOrganization(), response.getCountryCode());
+ return Joiner.on(SEPARATOR).useForNull("").join(response.getAsn(), response.getCountryCode(), response.getOrganization());
}
diff --git a/src/main/java/com/zdjizhi/utils/IpLookup.java b/src/main/java/com/zdjizhi/utils/IpLookup.java
index e85d384..0bcba16 100644
--- a/src/main/java/com/zdjizhi/utils/IpLookup.java
+++ b/src/main/java/com/zdjizhi/utils/IpLookup.java
@@ -9,7 +9,6 @@ import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
-
/**
* @ClassName IpLookup
* @Description 对IP定位查找工具类
@@ -41,6 +40,8 @@ public final class IpLookup extends AbstractIpLookup{
private static GalaxyDataBaseReader ipLocationPrivateReaderV6;
+
+
synchronized void init(Builder builder) {
try {
@@ -178,8 +179,8 @@ public final class IpLookup extends AbstractIpLookup{
}
} catch (Exception e) {
- e.printStackTrace();
- logger.warn("Unknown mmdb dat file , please check your dat path!");
+
+ logger.error("IpLookup init data error, please check your file path!");
}
@@ -390,6 +391,7 @@ public final class IpLookup extends AbstractIpLookup{
public String cityLookupDetail(String ip) {
LocationResponse response = getResponse(ip);
+
if (StringUtil.isEmpty(response)) {
return UNKNOWN;
}
@@ -397,7 +399,7 @@ public final class IpLookup extends AbstractIpLookup{
return PRIVATE_IP;
}
- return Joiner.on(SEPARATOR).useForNull("").join(response.getCity(), response.getProvince(), response.getCountry());
+ return Joiner.on(LOCATION_SEPARATOR).useForNull("").join(response.getCountry(), response.getProvince(), response.getCity());
}
@@ -417,6 +419,24 @@ public final class IpLookup extends AbstractIpLookup{
}
@Override
+ public String getCountryCode(String ip) {
+ LocationResponse response = getResponse(ip);
+ if (StringUtil.isEmpty(response)) {
+ return UNKNOWN;
+ }
+ return StringUtil.setDefaultIfEmpty(response.getCountryCode(), UNKNOWN).toString() ;
+ }
+
+ @Override
+ public String getRegionCode(String ip) {
+ LocationResponse response = getResponse(ip);
+ if (StringUtil.isEmpty(response)) {
+ return UNKNOWN;
+ }
+ return StringUtil.setDefaultIfEmpty(response.getAreaCode(), UNKNOWN).toString() ;
+ }
+
+ @Override
public String provinceLookup(String ip) {
LocationResponse response = getResponse(ip);
if (StringUtil.isEmpty(response)) {
@@ -438,14 +458,14 @@ public final class IpLookup extends AbstractIpLookup{
return UNKNOWN;
}
- return Joiner.on(SEPARATOR).skipNulls().join(response.getLatitude(), response.getLongitude());
+ return Joiner.on(LATLNG_SEPARATOR).skipNulls().join(response.getLatitude(), response.getLongitude());
}
@Override
public String cityLatLngLookup(String ip) {
- return Joiner.on(SEPARATOR).skipNulls().join(cityLookup(ip), latLngLookup(ip));
+ return Joiner.on(OBJECT_SEPARATOR).skipNulls().join(cityLookup(ip), latLngLookup(ip));
}
@Override
@@ -462,10 +482,7 @@ public final class IpLookup extends AbstractIpLookup{
@Override
public String asnLookupDetail(String ip) {
-
return asnLookup.asnLookupDetail(ip);
-
-
}
private LocationResponse getResponse(String ip) {
@@ -474,14 +491,14 @@ public final class IpLookup extends AbstractIpLookup{
throw new IllegalArgumentException("unknown ip format :" + ip );
}
- LocationResponse response = new Context(new PrivateReader()).executeStragey(ip);
+ LocationResponse response = new Context(new PrivateReader()).executeStrategy(ip);
if (StringUtil.isEmpty(response)) {
- response = new Context(new PublicReader()).executeStragey(ip);
+ response = new Context(new PublicReader()).executeStrategy(ip);
}
if (StringUtil.isEmpty(response)) {
- response = new Context(new InnerReader()).executeStragey(ip);
+ response = new Context(new InnerReader()).executeStrategy(ip);
}
return response;
@@ -601,7 +618,7 @@ public final class IpLookup extends AbstractIpLookup{
}
/**
- * 工具类自定义规则库的执行策略
+ * 私有IP执行策略
*/
class InnerReader implements Strategy {
@Override
@@ -631,7 +648,7 @@ public final class IpLookup extends AbstractIpLookup{
this.strategy = strategy;
}
- public LocationResponse executeStragey(String ip) {
+ public LocationResponse executeStrategy(String ip) {
return strategy.getResponse(ip);
}
diff --git a/src/main/java/com/zdjizhi/utils/JsonMapper.java b/src/main/java/com/zdjizhi/utils/JsonMapper.java
index a60a566..c5d31a0 100644
--- a/src/main/java/com/zdjizhi/utils/JsonMapper.java
+++ b/src/main/java/com/zdjizhi/utils/JsonMapper.java
@@ -5,9 +5,6 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
-
-
-import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,12 +60,14 @@ public class JsonMapper extends ObjectMapper {
this.setTimeZone(TimeZone.getDefault());//getTimeZone("GMT+8:00")
this.registerModule(new SimpleModule().addSerializer(Date.class, new JsonSerializer<Date>(){
@Override
- public void serialize(Date value, JsonGenerator jgen,
+ public void serialize(Date value, JsonGenerator gen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
- SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM yyyy HH:mm:ss", Locale.US);
- jgen.writeString(sdf.format(value));
- }
+ SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM yyyy HH:mm:ss", Locale.US);
+ gen.writeString(sdf.format(value));
+ }
+
+
}));
}
@@ -229,7 +228,6 @@ public class JsonMapper extends ObjectMapper {
public static Object fromJsonString(String jsonString, Class<?> clazz){
return JsonMapper.getInstance().fromJson(jsonString, clazz);
}
-
-
+
}
diff --git a/src/test/java/com/zdjizhi/test/IpLookupTest.java b/src/test/java/com/zdjizhi/test/IpLookupTest.java
index 530a2a1..ed95ab7 100644
--- a/src/test/java/com/zdjizhi/test/IpLookupTest.java
+++ b/src/test/java/com/zdjizhi/test/IpLookupTest.java
@@ -1,25 +1,30 @@
package com.zdjizhi.test;
+import com.zdjizhi.utils.ISO3166CodeUtil;
import com.zdjizhi.utils.IpLookup;
import org.apache.log4j.Logger;
import org.junit.Test;
+import java.io.*;
+
+
public class IpLookupTest {
Logger logger = Logger.getLogger(IpLookupTest.class);
+
@Test
public void testIpLookup() {
IpLookup ipLookup = new IpLookup.Builder(false)
.loadDataFileV4("dat/ip_v4.mmdb")
- //.loadDataFilePrivateV4("dat/ip_private_v4.mmdb")
+ .loadDataFilePrivateV4("dat/all_ip_only_coun.mmdb")
.loadDataFileV6("dat/ip_v6.mmdb")
- //.loadDataFilePrivateV6("dat/ip_private_v6.mmdb")
+ .loadDataFilePrivateV6("dat/ip_v6.mmdb")
.loadAsnDataFile("dat/asn_v4.mmdb")
.loadAsnDataFileV6("dat/asn_v6.mmdb")
.build();
- logger.info(ipLookup.countryLookup("192.168.50.21"));
+ logger.info(ipLookup.cityLookupDetail("239.255.255.250"));
logger.info(ipLookup.provinceLookup("192.168.50.21"));
logger.info(ipLookup.cityLookup("192.168.50.21"));
logger.info(ipLookup.cityLookupDetail("192.168.50.21"));
@@ -41,27 +46,28 @@ public class IpLookupTest {
@Test
- public void testCountryLookup() {
+ public void testCountryLookup() throws IOException {
IpLookup ipLookup = new IpLookup.Builder(false)
- .loadDataFileV4("dat/ip_v4.mmdb")
+ .loadDataFileV4("dat/all_ip_coun_city.mmdb")
.loadDataFileV6("dat/ip_v6.mmdb")
.loadAsnDataFileV4("dat/asn_v4.mmdb")
.loadAsnDataFileV6("dat/asn_v6.mmdb")
.build();
- logger.info(ipLookup.cityLookupDetail("192.168.50.21"));
- logger.info(ipLookup.cityLookup("120.221.155.223"));
- logger.info(ipLookup.countryLookup("2001:4860:4860::8888"));
- logger.info(ipLookup.latLngLookup("119.253.39.18"));
- logger.info(ipLookup.latLngLookup("202.102.3.20"));
- logger.info(ipLookup.cityLookupDetail("120.221.155.223"));
- logger.info(ipLookup.cityLatLngLookup("120.221.155.223"));
- logger.info(ipLookup.asnLookup("120.221.155.223"));
- logger.info(ipLookup.asnLookup("203.187.160.135"));
- logger.info(ipLookup.asnLookupDetail("116.128.133.102"));
- logger.info(ipLookup.asnLookupInfo("116.128.133.102"));
- logger.info(ipLookup.asnLookup("2001:4860:4860::8888"));
+ logger.info(ipLookup.cityLookup("120.221.155.123"));
+ logger.info(ISO3166CodeUtil.getSubdivisionCode(ipLookup.cityLookup("220.221.155.123")));
+ logger.info(ISO3166CodeUtil.getCountryCode(ipLookup.countryLookup("220.221.155.123")));
+ logger.info(ipLookup.countryLookup("120.221.155.223"));
+ logger.info(ipLookup.countryLookup("120.221.155.223"));
+ logger.info(ipLookup.getCountryCode("120.221.155.223"));
+ logger.info(ipLookup.getRegionCode("120.221.155.223"));
+
+
+
+
+
+
}
@@ -69,4 +75,7 @@ public class IpLookupTest {
+
+
}
+