diff options
| author | doufenghu <[email protected]> | 2022-01-07 16:18:46 +0800 |
|---|---|---|
| committer | doufenghu <[email protected]> | 2022-01-07 16:18:46 +0800 |
| commit | 6af76caa5201289b151745eff1d9864d7b33f56c (patch) | |
| tree | 76ed4854136128c8d82ce94648f35f63f5c031cb | |
| parent | 7ae5988ceb546c14bd65192be801771c53391bbc (diff) | |
TSG-8734 调整IPLookup 顺序,处理原则:
* 多级位置信息之间用英文点分隔,顺序从大到小。例如:国家.省/地区.城市
* 经纬度之间分隔基于英文逗号
* 多个对象之间基于英文逗号分隔。例如ASN123,国家.省
* AsnLookup 调整国家与组织顺序
| -rw-r--r-- | src/main/java/com/zdjizhi/utils/AbstractIpLookup.java | 21 | ||||
| -rw-r--r-- | src/main/java/com/zdjizhi/utils/AsnLookup.java | 4 | ||||
| -rw-r--r-- | src/main/java/com/zdjizhi/utils/IpLookup.java | 45 | ||||
| -rw-r--r-- | src/main/java/com/zdjizhi/utils/JsonMapper.java | 16 | ||||
| -rw-r--r-- | src/test/java/com/zdjizhi/test/IpLookupTest.java | 43 |
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 { + + } + |
