diff --git a/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java b/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java index 910c2d4..98ba65d 100644 --- a/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java +++ b/network/src/main/java/de/muehlencord/shared/network/whois/ArinWhoisParser.java @@ -1,4 +1,4 @@ -/* +/* * Copyright 2019 Joern Muehlencord (joern@muehlencord.de). * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -24,131 +24,136 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * * @author Joern Muehlencord (joern@muehlencord.de) */ public class ArinWhoisParser extends AbstractWhoisParser implements WhoisParser { - /** - * logger object - */ - private static final Logger logger = LoggerFactory.getLogger(ArinWhoisParser.class); + /** + * logger object + */ + private static final Logger logger = LoggerFactory.getLogger(ArinWhoisParser.class); - private static final String START_STRING = "# start"; - private static final String END_STRING = "# end"; - private static final String NET_RANGE = "NetRange:"; - private static final String ORG_NAME = "OrgName:"; - /** - * information to be returned - */ - private WhoisInformation whoisInformation; + private static final String START_STRING = "# start"; + private static final String END_STRING = "# end"; + private static final String NET_RANGE = "NetRange:"; + private static final String ORG_NAME = "OrgName:"; + /** + * information to be returned + */ + private WhoisInformation whoisInformation; - @Override - public WhoisInformation parseWhoIsString(String whoisString) throws WhoisException { - whoisInformation = new WhoisInformation(); - whoisInformation.setResponseString(whoisString); - if (whoisString.contains(START_STRING)) { + @Override + public WhoisInformation parseWhoIsString(String whoisString) throws WhoisException { + whoisInformation = new WhoisInformation(); - String multipleWhoisString = whoisString; + // if re-allocated just return empty whoisInformation because this RIR is not responsible + if (whoisString.contains("Allocated to LACNIC")) { + throw new WhoisException("Allocated to LACNIC"); + } - while (multipleWhoisString.contains(START_STRING)) { - String whoisPartString; - try { - whoisPartString = getValueBetweenKeywords(multipleWhoisString, START_STRING, END_STRING); - } catch (ParseException ex) { - throw new WhoisException("Error while reading whois part elements. Reason: " + ex.getMessage(), ex); - } - analyse(whoisPartString); - multipleWhoisString = multipleWhoisString.substring(multipleWhoisString.indexOf(END_STRING) + 4); - } + whoisInformation.setResponseString(whoisString); + if (whoisString.contains(START_STRING)) { + String multipleWhoisString = whoisString; + + while (multipleWhoisString.contains(START_STRING)) { + String whoisPartString; + try { + whoisPartString = getValueBetweenKeywords(multipleWhoisString, START_STRING, END_STRING); + } catch (ParseException ex) { + throw new WhoisException("Error while reading whois part elements. Reason: " + ex.getMessage(), ex); + } + analyse(whoisPartString); + multipleWhoisString = multipleWhoisString.substring(multipleWhoisString.indexOf(END_STRING) + 4); + } + + } else { + analyse(whoisString); + } + + whoisInformation.validate(); + + return whoisInformation; + } + + private void analyse(String whoisString) throws WhoisException { + String[] blocks; + if (whoisString.contains("\r\n")) { + blocks = whoisString.split("\r\n\r\n"); + } else { + blocks = whoisString.split("\n\n"); + } + for (String block : blocks) { + analyseBlock(block); + } + } + + private void analyseBlock(String block) throws WhoisException { + logger.debug("Start analysing block"); + logger.debug("\n---\n{}\n---\n", block); + + if ((block == null) || (!block.contains(" "))) { + logger.debug("Skipping empty block"); + return; + } + + String startString = block.substring(0, block.indexOf(" ")); + if (startString.equals("%")) { + startString = block.substring(0, block.indexOf(" ", 2)); + } + while (startString.startsWith("\n")) { + startString = startString.substring(1, startString.length()); + } + + Map valueMap = getValueMap(block); + + switch (startString) { + + case NET_RANGE: + if (valueMap.containsKey(NET_RANGE)) { + String netRange = valueMap.get(NET_RANGE); + // convert inetnum to CDIR + // TODO - what happens if not 3 parts are found + String[] ipAddresses = netRange.split(" "); + // FIXME add CDIR notation support + String startIpAddress = ipAddresses[0]; + String endIPAddress = ipAddresses[2]; + whoisInformation.addNetwork(rangeToCidrList(startIpAddress, endIPAddress)); + logger.info("Network: {}", whoisInformation.getNetwork()); } else { - analyse(whoisString); + throw new WhoisException("Cannot identify netrange value"); } + break; - whoisInformation.validate(); + case ORG_NAME: + String orgName = getValue(ORG_NAME, valueMap); + String orgId = getValue("OrgId:", valueMap); + String country = getValue("Country:", valueMap); - return whoisInformation; - } - - private void analyse(String whoisString) throws WhoisException { - String[] blocks; - if (whoisString.contains("\r\n")) { - blocks = whoisString.split("\r\n\r\n"); - } else { - blocks = whoisString.split("\n\n"); - } - for (String block : blocks) { - analyseBlock(block); - } - } - - private void analyseBlock(String block) throws WhoisException { - logger.debug("Start analysing block"); - logger.debug("\n---\n{}\n---\n", block); - - if ((block == null) || (!block.contains(" "))) { - logger.debug("Skipping empty block"); - return; - } - - String startString = block.substring(0, block.indexOf(" ")); - if (startString.equals("%")) { - startString = block.substring(0, block.indexOf(" ", 2)); - } - while (startString.startsWith("\n")) { - startString = startString.substring(1, startString.length()); - } - - Map valueMap = getValueMap(block); - - switch (startString) { - - case NET_RANGE: - if (valueMap.containsKey(NET_RANGE)) { - String netRange = valueMap.get(NET_RANGE); - // convert inetnum to CDIR - // TODO - what happens if not 3 parts are found - String[] ipAddresses = netRange.split(" "); - // FIXME add CDIR notation support - String startIpAddress = ipAddresses[0]; - String endIPAddress = ipAddresses[2]; - whoisInformation.addNetwork(rangeToCidrList(startIpAddress, endIPAddress)); - logger.info("Network: {}", whoisInformation.getNetwork()); - } else { - throw new WhoisException("Cannot identify netrange value"); - } - break; - - case ORG_NAME: - String orgName = getValue(ORG_NAME, valueMap); - String orgId = getValue("OrgId:", valueMap); - String country = getValue("Country:", valueMap); - - if ((orgName == null) || (country == null)) { - throw new WhoisException("Cannot identify OrgName and/or country value"); - } - if (orgId == null) { - orgId = orgName; - } - whoisInformation.setNetworkInformation(new NetworkInformation(orgName, orgId, country)); - logger.info("Networkinformation: {}", whoisInformation.getNetworkInformation()); - break; - - case "OrgAbuseHandle:": - // TODO add abuse handler - logger.info("Skipping OrgAbuseHandle block"); - break; - case "OrgTechHandle:": - // admin person of network server belongs to - logger.info("Skipping OrgTechHandle block"); - break; - - case "#": - logger.info("Skipping comment block"); - break; - default: - logger.info("Unknown block found"); - } + if ((orgName == null) || (country == null)) { + throw new WhoisException("Cannot identify OrgName and/or country value"); + } + if (orgId == null) { + orgId = orgName; + } + whoisInformation.setNetworkInformation(new NetworkInformation(orgName, orgId, country)); + logger.info("Networkinformation: {}", whoisInformation.getNetworkInformation()); + break; + + case "OrgAbuseHandle:": + // TODO add abuse handler + logger.info("Skipping OrgAbuseHandle block"); + break; + case "OrgTechHandle:": + // admin person of network server belongs to + logger.info("Skipping OrgTechHandle block"); + break; + + case "#": + logger.info("Skipping comment block"); + break; + default: + logger.info("Unknown block found"); } + } } diff --git a/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java b/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java index dd6840e..a09a3d1 100644 --- a/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java +++ b/network/src/main/java/de/muehlencord/shared/network/whois/DefaultWhoisParser.java @@ -1,4 +1,4 @@ -/* +/* * Copyright 2019 Joern Muehlencord (joern@muehlencord.de). * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,108 +22,112 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * * @author Joern Muehlencord (joern@muehlencord.de) */ public class DefaultWhoisParser extends AbstractWhoisParser implements WhoisParser { - /** - * logger object - */ - private static final Logger logger = LoggerFactory.getLogger(DefaultWhoisParser.class); - /** - * information to be returned - */ - private WhoisInformation whoisInformation; + /** + * logger object + */ + private static final Logger logger = LoggerFactory.getLogger(DefaultWhoisParser.class); + /** + * information to be returned + */ + private WhoisInformation whoisInformation; - @Override - public WhoisInformation parseWhoIsString(String whoisString) throws WhoisException { - whoisInformation = new WhoisInformation(); - whoisInformation.setResponseString(whoisString); - // split by blank lines to identify blocks - String[] blocks; - if (whoisString.contains("\r\n")) { - blocks = whoisString.split("\r\n\r\n"); + @Override + public WhoisInformation parseWhoIsString(String whoisString) throws WhoisException { + // if re-allocated just return empty whoisInformation because this RIR is not responsible + if (whoisString.contains("Allocated to LACNIC")) { + throw new WhoisException("Allocated to LACNIC"); + } + + whoisInformation = new WhoisInformation(); + whoisInformation.setResponseString(whoisString); + // split by blank lines to identify blocks + String[] blocks; + if (whoisString.contains("\r\n")) { + blocks = whoisString.split("\r\n\r\n"); + } else { + blocks = whoisString.split("\n\n"); + } + for (String block : blocks) { + analyseBlock(block); + } + + whoisInformation.validate(); + + return whoisInformation; + } + + private void analyseBlock(String block) throws WhoisException { + logger.debug("Start analysing block"); + logger.debug("\n---\n{}\n---\n", block); + + if ((block == null) || (!block.contains(" "))) { + logger.debug("Skipping empty block"); + return; + } + + String startString = block.substring(0, block.indexOf(" ")); + if (startString.equals("%")) { + startString = block.substring(0, block.indexOf(" ", 2)); + } + + Map valueMap = getValueMap(block); + + switch (startString) { + + case "inetnum:": + String inetnum = getValue("inetnum:", valueMap); + String country = getValue("country:", valueMap); + String netname = getValue("netname:", valueMap); + String descr = getValue("descr:", valueMap); + + if ((inetnum == null) || (country == null)) { + throw new WhoisException("Cannot identify inetnum and/or country value"); + } + + if (inetnum.contains(" ")) { + // convert inetnum to CDIR + // TODO - what happens if not 3 parts are found + String[] ipAddresses = inetnum.split(" "); + // FIXME add CDIR notation support + String startIpAddress = ipAddresses[0]; + String endIPAddress = ipAddresses[2]; + whoisInformation.addNetwork(rangeToCidrList(startIpAddress, endIPAddress)); } else { - blocks = whoisString.split("\n\n"); - } - for (String block : blocks) { - analyseBlock(block); + whoisInformation.addNetwork(inetnum); } - whoisInformation.validate(); + logger.info("Network: {}", whoisInformation.getNetwork()); + whoisInformation.setNetworkInformation(new NetworkInformation(netname, descr, country)); - return whoisInformation; - } - - private void analyseBlock(String block) throws WhoisException { - logger.debug("Start analysing block"); - logger.debug("\n---\n{}\n---\n", block); - - if ((block == null) || (!block.contains(" "))) { - logger.debug("Skipping empty block"); - return; - } - - String startString = block.substring(0, block.indexOf(" ")); - if (startString.equals("%")) { - startString = block.substring(0, block.indexOf(" ", 2)); - } - - Map valueMap = getValueMap(block); - - switch (startString) { - - case "inetnum:": - String inetnum = getValue("inetnum:", valueMap); - String country = getValue("country:", valueMap); - String netname = getValue("netname:", valueMap); - String descr = getValue("descr:", valueMap); - - if ((inetnum == null) || (country == null)) { - throw new WhoisException("Cannot identify inetnum and/or country value"); - } - - if (inetnum.contains(" ")) { - // convert inetnum to CDIR - // TODO - what happens if not 3 parts are found - String[] ipAddresses = inetnum.split(" "); - // FIXME add CDIR notation support - String startIpAddress = ipAddresses[0]; - String endIPAddress = ipAddresses[2]; - whoisInformation.addNetwork(rangeToCidrList(startIpAddress, endIPAddress)); - } else { - whoisInformation.addNetwork(inetnum); - } - - logger.info("Network: {}", whoisInformation.getNetwork()); - whoisInformation.setNetworkInformation(new NetworkInformation(netname, descr, country)); - - break; - case "route:": - // get information on level-2 network - String route = getValue("route:", valueMap); - whoisInformation.addRootNetwork(route); - logger.info("Root network: {}", whoisInformation.getRootNetwork()); - break; - - case "role:": - // admin company of network server belongs to - logger.info("Skipping role block"); - break; - case "person:": - // admin person of network server belongs to - logger.info("Skipping person block"); - break; - case "% Information": - case "% Note:": - case "% This": - case "%": - logger.info("Skipping comment block"); - break; - default: - logger.info("Unknown block found"); - logger.error(block); - } + break; + case "route:": + // get information on level-2 network + String route = getValue("route:", valueMap); + whoisInformation.addRootNetwork(route); + logger.info("Root network: {}", whoisInformation.getRootNetwork()); + break; + + case "role:": + // admin company of network server belongs to + logger.info("Skipping role block"); + break; + case "person:": + // admin person of network server belongs to + logger.info("Skipping person block"); + break; + case "% Information": + case "% Note:": + case "% This": + case "%": + logger.info("Skipping comment block"); + break; + default: + logger.info("Unknown block found"); + logger.error(block); } + } } diff --git a/network/src/main/java/de/muehlencord/shared/network/whois/Whois.java b/network/src/main/java/de/muehlencord/shared/network/whois/Whois.java index 20286cb..ac21394 100644 --- a/network/src/main/java/de/muehlencord/shared/network/whois/Whois.java +++ b/network/src/main/java/de/muehlencord/shared/network/whois/Whois.java @@ -48,6 +48,7 @@ public class Whois { WHOIS_SERVERS.add("whois.afrinic.net"); WHOIS_SERVERS.add("whois.apnic.net"); WHOIS_SERVERS.add("whois.arin.net"); + WHOIS_SERVERS.add("whois.lacnic.net"); } /** @@ -79,7 +80,7 @@ public class Whois { } /** - * reads and parses the inforomation for the given ip address from the given whoisserver + * reads and parses the information for the given ip address from the given whoisserver * * @param whoIsServer the whoisClient server to use * @param ip the ip to query whoisClient data for diff --git a/network/src/test/java/de/muehlencord/shared/network/whois/WhoisTest.java b/network/src/test/java/de/muehlencord/shared/network/whois/WhoisTest.java index fc9a159..8c5a5ff 100644 --- a/network/src/test/java/de/muehlencord/shared/network/whois/WhoisTest.java +++ b/network/src/test/java/de/muehlencord/shared/network/whois/WhoisTest.java @@ -15,11 +15,12 @@ */ package de.muehlencord.shared.network.whois; -import de.muehlencord.shared.network.BaseTest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; + +import de.muehlencord.shared.network.BaseTest; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -76,8 +77,8 @@ public class WhoisTest extends BaseTest { } @Test - @Disabled - public void testUnkown() throws WhoisException { +// @Disabled + public void testUnknown() throws WhoisException { Whois whoIsClient = new Whois(); // whoIsClient.execute("whois.arin.net", "174.139.180.10"); // whoIsClient.execute("whois.twnic.net", "60.250.38.39"); @@ -86,7 +87,10 @@ public class WhoisTest extends BaseTest { // whoIsClient.execute("whois.apnic.net", "182.72.111.26"); // whoIsClient.execute("whois.ripe.net", "213.55.95.62"); // Transferred to Afrinic // whoIsClient.execute("whois.afrinic.net", "213.55.95.62"); - whoIsClient.execute("whois.arin.net", "32.64.68.229"); +// whoIsClient.execute("whois.arin.net", "32.64.68.229"); +// WhoisInformation info = whoIsClient.execute("whois.lacnic.net", "179.43.168.126"); + WhoisInformation info = whoIsClient.execute("179.43.168.126"); + System.out.println (info); } @Test diff --git a/network/src/test/resources/de/muehlencord/shared/network/179.43.168.126.txt b/network/src/test/resources/de/muehlencord/shared/network/179.43.168.126.txt new file mode 100644 index 0000000..62170c9 --- /dev/null +++ b/network/src/test/resources/de/muehlencord/shared/network/179.43.168.126.txt @@ -0,0 +1,452 @@ + +% Joint Whois - whois.lacnic.net +% This server accepts single ASN, IPv4 or IPv6 queries + +% LACNIC resource: whois.lacnic.net + + +% Copyright LACNIC lacnic.net +% The data below is provided for information purposes +% and to assist persons in obtaining information about or +% related to AS and IP numbers registrations +% By submitting a whois query, you agree to use this data +% only for lawful purposes. +% 2022-02-25 08:42:23 (-03 -03:00) + +inetnum: 179.43.128.0/18 +status: allocated +aut-num: AS51852 +owner: PRIVATE LAYER INC +ownerid: PA-PLIN-LACNIC +responsible: Milciades Garcia +address: Torres De Las Americas, Torre C, 0, Suite 1404, Floor 14 +address: 00000 - Panama - +country: PA +phone: +41 43 5082295 +owner-c: MIG23 +tech-c: MIG23 +abuse-c: MIG23 +inetrev: 179.43.128.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.129.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20191008 +inetrev: 179.43.130.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.131.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20191008 +inetrev: 179.43.132.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.133.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.134.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.140.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.141.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.144.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.142.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20191008 +inetrev: 179.43.143.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.150.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.151.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.145.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.155.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.157.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.182.0/24 +nserver: NS1.CURTIR.ME [lame - not published] +nsstat: 20220225 UH +nslastaa: 20190327 +nserver: NS2.CURTIR.ME [lame - not published] +nsstat: 20220225 UH +nslastaa: 20190327 +inetrev: 179.43.183.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.187.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.188.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.190.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.191.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.161.0/24 +nserver: DNS01.PRIVATELAYER.COM [lame - not published] +nsstat: 20220225 NOT SYNC ZONE +nslastaa: 20210211 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.146.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.160.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.148.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.152.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.162.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.169.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.178.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.139.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.163.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.165.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM [lame - not published] +nsstat: 20220225 QREFUSED +nslastaa: 20150617 +inetrev: 179.43.166.0/24 +nserver: NS-160.AWSDNS-20.COM [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20150425 +nserver: NS-1647.AWSDNS-13.CO.UK [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20150425 +inetrev: 179.43.167.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.168.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.176.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.149.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.181.0/24 +nserver: NS1.LEADSPLANOSDESAUDE.COM.BR [lame - not published] +nsstat: 20220224 UH +nslastaa: 20150727 +nserver: NS2.LEADSPLANOSDESAUDE.COM.BR [lame - not published] +nsstat: 20220224 UH +nslastaa: 20150727 +inetrev: 179.43.154.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.184.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.185.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.186.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.172.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.170.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +inetrev: 179.43.156.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.189.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.164.0/24 +nserver: NS-437.AWSDNS-54.COM [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20150424 +nserver: NS-1214.AWSDNS-23.ORG [lame - not published] +nsstat: 20220224 QREFUSED +nslastaa: 20150424 +inetrev: 179.43.171.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.177.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.180.0/24 +nserver: DNS01.PRIVATELAYER.COM [lame - not published] +nsstat: 20220225 NOT SYNC ZONE +nslastaa: 20201124 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.158.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.159.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220221 AA +nslastaa: 20220221 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220221 AA +nslastaa: 20220221 +inetrev: 179.43.147.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220223 AA +nslastaa: 20220223 +inetrev: 179.43.173.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220225 AA +nslastaa: 20220225 +inetrev: 179.43.174.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.175.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220222 AA +nslastaa: 20220222 +inetrev: 179.43.179.0/24 +nserver: DNS01.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +nserver: DNS02.PRIVATELAYER.COM +nsstat: 20220224 AA +nslastaa: 20220224 +created: 20131112 +changed: 20151101 + +nic-hdl: MIG23 +person: Milciades Garcia +e-mail: support@privatelayer.com +address: Edif. Ocean Business Plaza, 1404, Marbella +address: 00000 - Panama City - +country: PA +phone: +41 43 5082295 +created: 20151023 +changed: 20220206 + +% whois.lacnic.net accepts only direct match queries. +% Types of queries are: POCs, ownerid, CIDR blocks, IP +% and AS numbers. +