diff --git a/.gitignore b/.gitignore index fcb5f1a..74c4476 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,4 @@ typescript test.out diff.out tmp/ +1 diff --git a/DONE b/DONE index f2847af..cee52e6 100644 --- a/DONE +++ b/DONE @@ -40,3 +40,8 @@ DONE - add nic to default test group for makeTestdataAll.sh + - convert the list of tld to Dict + - allow override or change and adding new domains without needing a new version directly + - tested with existing testdomains, all reponses will now respond with the true tld not the one with a underscore + + - add simple autodetect based on tld from IANA, try to use the .com patterns to se if we get someting usefull diff --git a/README.md b/README.md index 89b1884..561a0d8 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,15 @@ Raise an issue https://github.com/DannyCork/python-whois/issues/new 2023-01-18: sorrowless * add an opportunity to specify maximum cache age +2023-01-25: maarten_boot + * convert the tld file to a Dict, we now no longer need a mappper for python keywords or second level domains. + * utf8 level domains also need no mapper anymore an can be added as is with a translation to xn-- + * added xn-- tlds for all known utf-8 domains we currently have + * we can now add new domains on the fly or change them: whois.mergeExternalDictWithRegex(aDictToOverride) see example testExtend.py + +2023-01-27: maarten_boot + * add autodetect via iana tld file (this has only tld's) + ## Support * Python 3.x is supported. * Python 2.x IS NOT supported. diff --git a/TODO b/TODO index 808f62d..818e207 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ TODO -# pt is difficult it often gives no data, it works in aws frankfurt through +# pt is difficult it often gives no data, it works in aws frankfurt though ERROR: output; missing nameserver 'ns1.dnscpanel.com.' for tld: pt ERROR: output; missing nameserver 'ns2.dnscpanel.com.' for tld: pt diff --git a/analize_patterns.py b/analize_patterns.py new file mode 100755 index 0000000..111d686 --- /dev/null +++ b/analize_patterns.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python3 + +import sys +import re +from typing import ( + # Optional, + # List, + Dict, +) + +# most likely we can now introduce trailing whitespace trim on all lines from whois, +# and simplefy trailing whitespace rules +# as \r is already gone now and that was the most disticnt line ending +# occasionally we need to detect \n\s+ for groups that belong together +# mostly with indented blocks of nameservers + +# import whois +from whois.tld_regexpr import ZZ + + +def buildRegCollection(zz: Dict): + regCollection = {} + # get all regexes + for name in zz: + # print(name) + z = zz[name] + for key in z: + if key is None: + continue + + if key.startswith("_"): + continue + + if key in ["extend"]: + continue + + if key not in regCollection: + regCollection[key] = {} + + reg = z[key] + if reg is None: + continue + + regCollection[key][reg] = None + if isinstance(reg, str): + regCollection[key][reg] = re.compile(reg, flags=re.IGNORECASE) + + return regCollection + + +if __name__ == "__main__": + regCollection = buildRegCollection(ZZ) + + for name in sorted(regCollection.keys()): + print(f"## {name}", file=sys.stderr) + for key in sorted(regCollection[name].keys()): + if key: + print(f"{name}: {key}") diff --git a/compare_known_tld.py b/compare_known_tld.py new file mode 100755 index 0000000..e867bd4 --- /dev/null +++ b/compare_known_tld.py @@ -0,0 +1,101 @@ +#! /usr/bin/env python3 + +# clone https://github.com/jophy/iana_tld_list in ./tmp + +import urllib.request + +from tmp.iana_tld_list.iana import IANA + +import whois +from whois._1_query import _do_whois_query + +# allow verbose messages during testing (all on stderr) +verbose = False + +# by default the all tld file will be refreshed ever 24 hours, +# but you can force a new download anytime also +forceDownloadTld = False + +# do you want to overwrite the results file ? +overwrite = True + +# do you want interactive questions if files will be re-written? +interactive = False + +# if autoProcessAll is True: all tld's will be processed (initial run > 20 minutes) +autoProcessAll = False + +with_test_original = True + +dirName = "/tmp/iana_data" + +i = IANA( + dirName=dirName, + verbose=verbose, + overwrite=overwrite, + interactive=interactive, + autoProcessAll=autoProcessAll, + forceDownloadTld=forceDownloadTld, +) + +# ge python whois known tld's and second level domains +known = sorted(whois.validTlds()) + +# get iana data +URL = "https://data.iana.org/TLD/tlds-alpha-by-domain.txt" +response = urllib.request.urlopen(URL) +data = response.read().decode("utf-8").lower() +dataList = sorted(data.splitlines()) + +# filter out known names and try to detect names not known by iana +for name in known: + if name in dataList: + continue + if "." in name: + continue + if name not in dataList: + print(f"{name} tld name from python_whois is not known in IANA list") + continue + +dataList2 = [] +for name in dataList: + if name in known: + continue + dataList2.append(name) + +# Try to auto detect new domains via IANA and some known common regex lists like .com +found = {} +for tld in dataList2: + data, status = i.getInfoOnOneTld(tld) + + xtest = data and ("whois" in data) and (data["whois"]) and (data["whois"] != "NULL") + if not xtest: + print(f"no whois info for tld: {tld} {data}") + continue + + wh = data["whois"] + if wh.endswith(f".{tld}"): + dd = wh.split(".")[-2:] + else: + dd = ["meta", tld] + + print(f"try: {tld}") + zz = _do_whois_query( + dd, + ignore_returncode=False, + server=wh, + ) + + pp = {"_server": wh, "extend": "com"} + aDictToTestOverride = {tld: pp} + + whois.mergeExternalDictWithRegex(aDictToTestOverride) + try: + d = whois.query(".".join(dd)) + if d: + print(d.__dict__) + if len(d.name_servers) > 0: + found[tld] = pp + print(f"## ZZ['{tld}'] = {found[tld]} # auto-detected via IANA tld") + except Exception as e: + print(e) diff --git a/convert_to_dict.sh b/convert_to_dict.sh new file mode 100755 index 0000000..dace7b1 --- /dev/null +++ b/convert_to_dict.sh @@ -0,0 +1,14 @@ +#! /usr/bin/env bash + +FILE="whois/tld_regexpr.py" +FILE2="whois/tld_regexpr2.py" + +cat "$FILE" | +perl -np -e ' +# translate all tld to DICT and substitute for the real tld in case of _ +s/^([a-z]+)_([a-z]+)\s+=/ZZ["$1.$2"] =/; +s/^([a-z]+)\s+=/ZZ["$1"] =/; +# if we refer to a tld also change _ to . +s/"extend":\s+"(\w+)_(\w+)"/"extend": "$1.$2"/; +' | +tee "$FILE2" diff --git a/testExtend.py b/testExtend.py new file mode 100755 index 0000000..5f933a4 --- /dev/null +++ b/testExtend.py @@ -0,0 +1,120 @@ +#!/usr/bin/python3 +import whois + +Verbose = True + +""" +initial testing had errors for these +we DONT have xn--3ds443g 在线 (online) +we DONT have xn--45q11c 八卦 (gossip) +we DONT have xn--czru2d 商城 (mall) +we DONT have xn--fiq228c5hs 中文网 (website) +we DONT have xn--hxt814e 网店 (webshop) +""" + + +def t1(domain: str, text: str): + print(f"{text}: {domain}") + try: + d = whois.query(domain) + if d: + print(d.__dict__) + else: + print(d) + except Exception as e: + print(domain, e) + + +def xMain(): + aDictToTestOverride = { + "si": { # changing a existing one + "domain_name": r"domain:\s+(.+)", + "status": r"status:\s+(.+)", + "registrar": r"registrar:\s+(.+)", + "name_servers": r"nameserver:\s*(.+)", + "creation_date": r"created:\s+(.+)", + "expiration_date": None, + "updated_date": None, + "registrant_country": None, + }, + "mk": { # defining a non existant one, meanwhile this is now supported so the test is meaningless + "extend": "com", + "domain_name": r"domain:\s+(.+)", + "status": r"status:\s+(.+)", + "registrar": r"registrar:\s+(.+)", + "name_servers": r"nserver:\s*(.+)", + "creation_date": r"registered:\s+(.+)", + "expiration_date": r"expire:\s+(.+)", + "updated_date": r"changed:\s+(.+)", + "registrant_country": None, + "registrant": r"registrant:\s+(.+)", + }, + } + + domains = [ + "google.si", + "google.mk", + ] + for domain in domains: + t1(domain, "BEFORE") + + whois.mergeExternalDictWithRegex(aDictToTestOverride) + + for domain in domains: + t1(domain, "AFTER") + + +xMain() + +""" + +% Domain Information over Whois protocol +% +% Whoisd Server Version: 3.9.0 +% Timestamp: Fri Nov 25 16:49:33 2022 + +domain: google.mk +registrant: UNET-R11 +admin-c: UNET-C12 +nsset: UNET-NS191 +registrar: UNET-REG +registered: 13.05.2008 14:00:00 +changed: 17.04.2014 12:50:32 +expire: 13.05.2023 + +contact: UNET-R11 +org: Google LLC +name: Google LLC +address: Amphiteatre Parkway 1600 +address: Mountain View +address: 94043 +address: US +phone: +1.6502530000 +fax-no: +1.6502530000 +e-mail: ccops@markmonitor.com +registrar: UNET-REG +created: 25.03.2014 11:48:02 +changed: 29.09.2021 16:26:23 + +contact: UNET-C12 +name: Mark Monitor Inc. +address: 3540 East Longwing Lane Suite 300 +address: Meridian +address: 83646 +address: US +phone: +1.2083895740 +e-mail: ccops@markmonitor.com +registrar: UNET-REG +created: 25.03.2014 11:48:00 +changed: 19.11.2019 16:47:01 + +nsset: UNET-NS191 +nserver: ns2.google.com +nserver: ns1.google.com +tech-c: UNET-C12 +registrar: UNET-REG +created: 17.04.2014 12:50:22 +changed: 17.04.2014 21:02:14 + + +""" diff --git a/testdata/meta.rk/input b/testdata/meta.rk/input deleted file mode 100644 index 126c6f1..0000000 --- a/testdata/meta.rk/input +++ /dev/null @@ -1,38 +0,0 @@ -[Querying whois.internic.net] -[whois.internic.net] -No match for domain "META.RK". ->>> Last update of whois database: 2022-11-17T10:46:58Z <<< - -NOTICE: The expiration date displayed in this record is the date the -registrar's sponsorship of the domain name registration in the registry is -currently set to expire. This date does not necessarily reflect the expiration -date of the domain name registrant's agreement with the sponsoring -registrar. Users may consult the sponsoring registrar's Whois database to -view the registrar's reported date of expiration for this registration. - -TERMS OF USE: You are not authorized to access or query our Whois -database through the use of electronic processes that are high-volume and -automated except as reasonably necessary to register domain names or -modify existing registrations; the Data in VeriSign Global Registry -Services' ("VeriSign") Whois database is provided by VeriSign for -information purposes only, and to assist persons in obtaining information -about or related to a domain name registration record. VeriSign does not -guarantee its accuracy. By submitting a Whois query, you agree to abide -by the following terms of use: You agree that you may use this Data only -for lawful purposes and that under no circumstances will you use this Data -to: (1) allow, enable, or otherwise support the transmission of mass -unsolicited, commercial advertising or solicitations via e-mail, telephone, -or facsimile; or (2) enable high volume, automated, electronic processes -that apply to VeriSign (or its computer systems). The compilation, -repackaging, dissemination or other use of this Data is expressly -prohibited without the prior written consent of VeriSign. You agree not to -use electronic processes that are automated and high-volume to access or -query the Whois database except as reasonably necessary to register -domain names or modify existing registrations. VeriSign reserves the right -to restrict your access to the Whois database in its sole discretion to ensure -operational stability. VeriSign may restrict or terminate your access to the -Whois database for failure to abide by these terms of use. VeriSign -reserves the right to modify these terms at any time. - -The Registry database contains ONLY .COM, .NET, .EDU domains and -Registrars. diff --git a/testdata/meta.rk/output b/testdata/meta.rk/output deleted file mode 100644 index 46e06d6..0000000 --- a/testdata/meta.rk/output +++ /dev/null @@ -1,6 +0,0 @@ - -test domain: <<<<<<<<<< meta.rk >>>>>>>>>>>>>>>>>>>> -Domain: meta.rk; Exception: UnknownTld; Error: The TLD rk is currently not supported by this package. Use validTlds() to see what toplevel domains are supported. - -# ======================== -UnknownTld meta.rk The TLD rk is currently not supported by this package. Use validTlds() to see what toplevel domains are supported. diff --git a/whois/_0_init_tld.py b/whois/_0_init_tld.py new file mode 100644 index 0000000..f7534ed --- /dev/null +++ b/whois/_0_init_tld.py @@ -0,0 +1,122 @@ +import re +import sys + +from typing import ( + Dict, + List, + Any, +) + +from .tld_regexpr import ZZ +from .exceptions import ( + UnknownTld, +) + +Verbose = False +TLD_RE: Dict[str, Any] = {} + + +def validTlds(): + return sorted(TLD_RE.keys()) + + +def filterTldToSupportedPattern( + domain: str, + d: List[str], + verbose: bool = False, +) -> str: + # we have max 2 levels so first check if the last 2 are in our list + tld = f"{d[-2]}.{d[-1]}" + if tld in ZZ: + print(f"we have {tld}", file=sys.stderr) + return tld + + # if not check if the last item we have + tld = f"{d[-1]}" + if tld in ZZ: + print(f"we have {tld}", file=sys.stderr) + return tld + + print(f"we DONT have {tld}", file=sys.stderr) + + # if not fail + a = f"The TLD {tld} is currently not supported by this package." + b = "Use validTlds() to see what toplevel domains are supported." + msg = f"{a} {b}" + raise UnknownTld(msg) + + +def get_tld_re(tld: str, override: bool = False) -> Any: + if override is False: + if tld in TLD_RE: + return TLD_RE[tld] + + v = ZZ[tld] + + extend = v.get("extend") + if extend: + e = get_tld_re(extend) # call recursive + tmp = e.copy() + tmp.update(v) # and merge results in tmp with caller data in v + # The update() method updates the dictionary with the elements + # from another dictionary object or from an iterable of key/value pairs. + else: + tmp = v + + # finally we dont want to propagate the extend data + # as it is only used to recursivly populate the dataset + if "extend" in tmp: + del tmp["extend"] + + # we want now to exclude _server hints + tld_re = dict( + (k, re.compile(v, re.IGNORECASE) if (isinstance(v, str) and k[0] != "_") else v) for k, v in tmp.items() + ) + + # meta domains start with _: examples _centralnic and _donuts + if tld[0] != "_": + TLD_RE[tld] = tld_re + + return tld_re + + +def mergeExternalDictWithRegex(aDict: Dict = {}): + # merge in ZZ, this extends ZZ with new tld's and overrides existing tld's + for tld in aDict.keys(): + ZZ[tld] = aDict[tld] + + # reprocess te regexes we newly defined or overrode + override = True + for tld in aDict.keys(): + initOne(tld, override) + + +def initOne(tld, override: bool = False): + if tld[0] == "_": # skip meta domain patterns , these are not domains just handles we reuse + return + + what = get_tld_re(tld, override) + + # test if the string is identical after idna conversion + d = tld.split(".") + j = [k.encode("idna").decode() or k for k in d] + tld2 = ".".join(j) + if tld == tld2: + return + + # also automatically see if we can internationalize the domains to the official ascii string + TLD_RE[tld2] = what + if Verbose: + print(f"{tld} -> {tld2}", file=sys.stderr) + + +def initOnImport(): + # here we run the import processing + # we load all tld's on import so we dont lose time later + # we keep ZZ so we can later reuse it if we want to aoverrid or update tld's + override = False + for tld in ZZ.keys(): + initOne(tld, override) + + +initOnImport() diff --git a/whois/_2_parse.py b/whois/_2_parse.py index 3a3d5d2..fc95cb5 100644 --- a/whois/_2_parse.py +++ b/whois/_2_parse.py @@ -3,60 +3,13 @@ from typing import Any, Dict, Optional, List +from ._0_init_tld import TLD_RE + from .exceptions import FailedParsingWhoisOutput from .exceptions import WhoisQuotaExceeded -from . import tld_regexpr - Verbose = True -TLD_RE: Dict[str, Any] = {} - - -def get_tld_re(tld: str) -> Any: - if tld in TLD_RE: - return TLD_RE[tld] - - if tld == "in": - # is this actually used ? - if Verbose: - print("Verbose: directly returning tld: in_ for tld: in", file=sys.stderr) - return "in_" - - v = getattr(tld_regexpr, tld) - - extend = v.get("extend") - if extend: - e = get_tld_re(extend) # call recursive - tmp = e.copy() - tmp.update(v) # and merge results in tmp with caller data in v - # The update() method updates the dictionary with the elements - # from another dictionary object or from an iterable of key/value pairs. - else: - tmp = v - - # finally we dont want to propagate the extend data - # as it is only used to recursivly populate the dataset - if "extend" in tmp: - del tmp["extend"] - - # we want now to exclude _server hints - tld_re = dict( - (k, re.compile(v, re.IGNORECASE) if (isinstance(v, str) and k[0] != "_") else v) for k, v in tmp.items() - ) - - # meta domains start with _: examples _centralnic and _donuts - if tld[0] != "_": - TLD_RE[tld] = tld_re - - return tld_re - - -# now fetch all defined data in -# The dir() method returns the list of valid attributes of the passed object - -[get_tld_re(tld) for tld in dir(tld_regexpr) if tld[0] != "_"] - def cleanupWhoisResponse( whois_str: str, diff --git a/whois/__init__.py b/whois/__init__.py index 15e891c..30121a2 100644 --- a/whois/__init__.py +++ b/whois/__init__.py @@ -1,3 +1,31 @@ +import sys +from functools import wraps +from typing import ( + Optional, + List, + Dict, +) + +from ._1_query import do_query +from ._2_parse import do_parse +from ._3_adjust import Domain +from ._0_init_tld import ( + ZZ, + TLD_RE, + validTlds, + filterTldToSupportedPattern, + mergeExternalDictWithRegex, +) + +from .exceptions import ( + UnknownTld, + FailedParsingWhoisOutput, + UnknownDateFormat, + WhoisCommandFailed, + WhoisPrivateRegistry, + WhoisQuotaExceeded, +) + """ Python module/library for retrieving WHOIS information of domains. @@ -24,169 +52,17 @@ 2020-09-14 00:00:00 """ -__all__ = ["query", "get"] +__all__ = [ + "query", + "get", + "validTlds", + "mergeExternalDictWithRegex", +] -import sys -from functools import wraps -from typing import Optional, List, Dict - -from ._1_query import do_query -from ._2_parse import do_parse, TLD_RE -from ._3_adjust import Domain -from .exceptions import ( - UnknownTld, - FailedParsingWhoisOutput, - UnknownDateFormat, - WhoisCommandFailed, - WhoisPrivateRegistry, - WhoisQuotaExceeded, -) CACHE_FILE = None SLOW_DOWN = 0 -Map2Underscore = { - ".co.za": "co_za", # south africa - ".web.za": "web_za", # south africa - ".org.za": "org_za", # south africa - ".net.za": "net_za", # south africa - # - ".com.eg": "com_eg", # egypt - ".ac.uk": "ac_uk", - ".co.uk": "co_uk", - ".co.il": "co_il", - # uganda - ".ca.ug": "ca_ug", - ".co.ug": "co_ug", - # th - ".co.th": "co_th", - ".in.th": "in_th", - # .jp - ".ac.jp": "ac_jp", - ".ad.jp": "ad_jp", - ".co.jp": "co_jp", - ".ed.jp": "ed_jp", - ".go.jp": "go_jp", - ".gr.jp": "gr_jp", - ".lg.jp": "lg_jp", - ".ne.jp": "ne_jp", - ".or.jp": "or_jp", - ".geo.jp": "geo_jp", - # - ".com.au": "com_au", - ".com.sg": "com_sg", - ".com.do": "com_do", - ".com.mo": "com_mo", - # ph - ".com.ph": "com_ph", - ".org.ph": "org_ph", - ".net.ph": "net_ph", - # - # TÜRKİYE (formerly Turkey) - ".com.tr": "com_tr", - ".edu.tr": "edu_tr", - ".org.tr": "org_tr", - ".net.tr": "net_tr", - # - ".edu.ua": "edu_ua", - ".com.ua": "com_ua", - ".net.ua": "net_ua", - ".lviv.ua": "lviv_ua", - # dynamic dns without whois - ".hopto.org": "hopto_org", - ".duckdns.org": "duckdns_org", - ".no-ip.com": "noip_com", - ".no-ip.org": "noip_org", - # 2022-06-20: mboot - ".ac.th": "ac_th", - ".co.ke": "co_ke", - ".com.bo": "com_bo", - ".com.ly": "com_ly", - ".com.tw": "com_tw", - ".com.np": "com_np", - ".go.th": "go_th", - ".com.ec": "com_ec", - ".gob.ec": "gob_ec", - ".co.zw": "com_zw", - ".org.zw": "org_zw", - ".com.py": "com_py", -} - -PythonKeyWordMap = { - "global": "global_", - ".id": "id_", - ".in": "in_", - ".is": "is_", - ".as": "as_", -} - -Utf8Map = { - ".xn--p1ai": "ru_rf", - ".xn--p1acf": "pyc_", # .РУС -} - - -def validTlds(): - # -------------------------------------- - # we should map back to valid tld without underscore - # but remove the starting . from the real domain - rmap = {} # build a reverse dict from the original tld translation maps - for i in Map2Underscore: - rmap[Map2Underscore[i]] = i.lstrip(".") - - for i in PythonKeyWordMap: - rmap[PythonKeyWordMap[i]] = i.lstrip(".") - - for i in Utf8Map: - rmap[Utf8Map[i]] = i.lstrip(".") - - # -------------------------------------- - tlds = [] - for tld in TLD_RE.keys(): - if tld in rmap: - tlds.append(rmap[tld]) - else: - tlds.append(tld) - return sorted(tlds) - - -def filterTldToSupportedPattern( - domain: str, - d: List[str], - verbose: bool = False, -) -> str: - # the moment we have a valid tld we can leave: - # no need for else or elif anymore - # that is the "leave early" paradigm - # also known as "dont overstay your welcome" or "don't linger" - - tld = None - - if len(d) > 2: - for i in Map2Underscore: - if domain.endswith(i): - tld = Map2Underscore[i] - return tld - - for i in PythonKeyWordMap: - if domain.endswith(i): - tld = PythonKeyWordMap[i] - return tld - - for i in Utf8Map: - if domain.endswith(i): - tld = Utf8Map[i] - return tld - - if domain.endswith(".name"): - # some special case with xxx.name -> domain=xxx.name and tld is name - d[0] = "domain=" + d[0] - tld = d[-1] - return tld - - # just take the last item as the top level - return d[-1] - def internationalizedDomainNameToPunyCode(d: List[str]) -> List[str]: return [k.encode("idna").decode() or k for k in d] diff --git a/whois/tld_regexpr.py b/whois/tld_regexpr.py index 78a0c3a..5f0b28d 100644 --- a/whois/tld_regexpr.py +++ b/whois/tld_regexpr.py @@ -1,3 +1,7 @@ +from typing import Dict + +ZZ: Dict = {} + # elements starting with _ # are meta patterns and are not processed as domains # examples: _donuts, _centralnic @@ -13,7 +17,7 @@ # when we finally apply the regexes we use IGNORE CASE allways on all matches # Commercial TLD - Original Big 7 -com = { +ZZ["com"] = { "extend": None, "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s?(.+)", @@ -31,7 +35,7 @@ } # United Kingdom - academic sub-domain -ac_uk = { +ZZ["ac.uk"] = { "extend": "uk", "domain_name": r"Domain:\n\s?(.+)", "owner": r"Domain Owner:\n\s?(.+)", @@ -43,7 +47,7 @@ "name_servers": r"Servers:\s*(.+)\t\n\s*(.+)\t\n", } -co_uk = { +ZZ["co.uk"] = { "extend": "uk", "domain_name": r"Domain name:\s+(.+)", "registrar": r"Registrar:\s+(.+)", @@ -61,13 +65,13 @@ # redefined below # Anguilla -ai = { +ZZ["ai"] = { "extend": "com", "_server": "whois.nic.ai", } # Armenia -am = { +ZZ["am"] = { "extend": None, "domain_name": r"Domain name:\s+(.+)", "status": r"Status:\s(.+)", @@ -81,7 +85,7 @@ } # Amsterdam -amsterdam = { +ZZ["amsterdam"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -91,13 +95,13 @@ "status": r"Domain Status:\s?(.+)", } -app = { +ZZ["app"] = { "extend": "com", "_server": "whois.nic.google", } # Argentina -ar = { +ZZ["ar"] = { "extend": "com", "domain_name": r"domain\s*:\s?(.+)", "registrar": r"registrar:\s?(.+)", @@ -107,12 +111,12 @@ "name_servers": r"nserver:\s*(.+)\s*", } -asia = { +ZZ["asia"] = { "extend": "com", } # Austria -at = { +ZZ["at"] = { "extend": "com", "_server": "whois.nic.at", "domain_name": r"domain:\s?(.+)", @@ -123,13 +127,13 @@ } # Australia -au = { +ZZ["au"] = { "extend": "com", "registrar": r"Registrar Name:\s?(.+)", "updated_date": r"Last Modified:([^\n]*)", # fix empty LastModified } -ax = { +ZZ["ax"] = { "extend": "com", "domain_name": r"domain\.+:\s*(\S+)", "registrar": r"registrar\.+:\s*(.+)", @@ -142,13 +146,13 @@ "registrant_country": r"country\.+:\s*(.+)\r?\n", # not always present see meta.ax and google.ax } -aw = { +ZZ["aw"] = { "extend": "nl", "name_servers": r"Domain nameservers:\s+(\S+)[ \t]*\r?\n(?:\s+(\S+))?", } # Banking TLD - ICANN -bank = { +ZZ["bank"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -157,7 +161,7 @@ "updated_date": r"Updated Date:\s?(.+)", } -be = { +ZZ["be"] = { "extend": "pl", "domain_name": r"\nDomain:\s*(.+)", "registrar": r"Company Name:\n?(.+)", @@ -166,7 +170,7 @@ "name_servers": r"Nameservers:(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?\n\n", # fix missing and wrong output } -biz = { +ZZ["biz"] = { "extend": "com", "registrar": r"Registrar:\s?(.+)", "registrant": r"Registrant Organization:\s?(.+)", @@ -176,7 +180,7 @@ "status": None, } -br = { +ZZ["br"] = { "extend": "com", "domain_name": r"domain:\s?(.+)", "registrar": "nic.br", @@ -189,7 +193,7 @@ "status": r"status:\s?(.+)", } -by = { # fix multiple dns by removing test for \n at the beginning as it is not needed +ZZ["by"] = { # fix multiple dns by removing test for \n at the beginning as it is not needed "extend": "com", "domain_name": r"Domain Name:\s*(.+)", "registrar": r"Registrar:\s*(.+)", @@ -203,7 +207,7 @@ # Brittany (French Territory) # Some personal data could be obfuscated at request from the registrant -bzh = { +ZZ["bzh"] = { "extend": "fr", "domain_name": r"Domain Name:\s*(.+)", "registrar": r"Registrar:\s*(.+)", @@ -216,16 +220,16 @@ "status": r"Domain Status:\s*(.*)", } -ca = { +ZZ["ca"] = { "extend": "com", } -cat = { +ZZ["cat"] = { "extend": "com", "_server": "whois.nic.cat", } -cc = { +ZZ["cc"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -235,7 +239,7 @@ "status": r"Status:\s?(.+)", } -cl = { +ZZ["cl"] = { "extend": "com", "registrar": "nic.cl", "creation_date": r"Creation Date:\s?(.+)", @@ -243,19 +247,19 @@ "name_servers": r"Name Server:\s*(.+)\s*", } -click = { +ZZ["click"] = { "extend": "com", } -cloud = { +ZZ["cloud"] = { "extend": "com", } -club = { +ZZ["club"] = { "extend": "com", } -cn = { +ZZ["cn"] = { "extend": "com", "registrar": r"Sponsoring Registrar:\s?(.+)", "registrant": r"Registrant:\s?(.+)", @@ -263,16 +267,16 @@ "expiration_date": r"Expiration Time:\s?(.+)", } -co = { +ZZ["co"] = { "extend": "biz", "status": r"Status:\s?(.+)", } -com_au = { +ZZ["com.au"] = { "extend": "au", } -com_tr = { +ZZ["com.tr"] = { "extend": "com", "domain_name": r"\*\* Domain Name:\s?(.+)", "registrar": r"Organization Name\s+:\s?(.+)", @@ -285,19 +289,13 @@ "status": None, } -edu_tr = { - "extend": "com_tr", -} +ZZ["edu.tr"] = {"extend": "com.tr"} -org_tr = { - "extend": "com_tr", -} +ZZ["org.tr"] = {"extend": "com.tr"} -net_tr = { - "extend": "com_tr", -} +ZZ["net.tr"] = {"extend": "com.tr"} -co_il = { +ZZ["co.il"] = { "extend": "com", "domain_name": r"domain:\s*(.+)", "registrar": r"registrar name:\s*(.+)", @@ -310,7 +308,7 @@ "status": r"status:\s*(.+)", } -co_jp = { +ZZ["co.jp"] = { # is redefined later with english "extend": "jp", "domain_name": r"\[ドメイン名\]\s?(.+)", "creation_date": r"\[登録年月\]\s?(.+)", @@ -318,15 +316,11 @@ "updated_date": r"\[最終更新\]\s?(.+)", } -courses = { - "extend": "com", -} +ZZ["courses"] = {"extend": "com"} -cr = { - "extend": "cz", -} +ZZ["cr"] = {"extend": "cz"} -cz = { +ZZ["cz"] = { "extend": "com", "domain_name": r"domain:\s?(.+)", "registrar": r"registrar:\s?(.+)", @@ -341,7 +335,7 @@ # The .de NIC whois servers no longer provide any PII data for domains in the TLD. # To obtains "personal" data, one must use the web interface: http://www.denic.de/en/domains/whois-service/web-whois.html -de = { +ZZ["de"] = { "extend": "com", "domain_name": r"\ndomain:\s*(.+)", "updated_date": r"\nChanged:\s?(.+)", @@ -349,12 +343,10 @@ } # Developer -dev = { - "extend": "com", -} +ZZ["dev"] = {"extend": "com"} # Denmark -dk = { +ZZ["dk"] = { "extend": None, "domain_name": r"Domain:\s?(.+)", "registrar": None, @@ -368,13 +360,13 @@ "emails": None, } -download = { +ZZ["download"] = { "extend": "amsterdam", "name_servers": r"Name Server:[ \t]+(\S+)", # fix needed after strip(\r) in _2_parse.py in version 0.19 "status": r"Domain Status:\s*([a-zA-z]+)", } -edu = { +ZZ["edu"] = { "extend": "com", "registrant": r"Registrant:\s*(.+)", "creation_date": r"Domain record activated:\s?(.+)", @@ -384,7 +376,7 @@ } # estonian -ee = { +ZZ["ee"] = { "extend": "com", "domain_name": r"Domain:\nname:\s+(.+\.ee)\n", "registrar": r"Registrar:\nname:\s+(.+)\n", @@ -398,14 +390,14 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -eu = { +ZZ["eu"] = { "extend": "com", "registrar": r"Name:\s?(.+)", "domain_name": r"\nDomain:\s*(.+)", "name_servers": r"Name servers:\n(?:\s+(\S+)\n)(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)\n?", } -fi = { +ZZ["fi"] = { "extend": None, "domain_name": r"domain\.+:\s?(.+)", "registrar": r"registrar\.+:\s?(.+)", @@ -417,20 +409,20 @@ "status": r"status\.+:\s?(.+)", } -fit = { +ZZ["fit"] = { "extend": "com", } -fm = { +ZZ["fm"] = { "extend": "com", } -fo = { +ZZ["fo"] = { "extend": "com", "registrant": None, } -fr = { +ZZ["fr"] = { "extend": "com", "domain_name": r"domain:\s?(.+)", "registrar": r"registrar:\s*(.+)", @@ -442,22 +434,22 @@ "status": r"status:\s?(.+)", } -game = { +ZZ["game"] = { "extend": "amsterdam", } -global_ = { +ZZ["global"] = { "extend": "amsterdam", "name_servers": r"Name Server: (.+)", } # Honduras -hn = { +ZZ["hn"] = { "extend": "com", } # Hong Kong -hk = { +ZZ["hk"] = { "extend": "com", "domain_name": r"Domain Name:\s+(.+)", "registrar": r"Registrar Name:\s?(.+)", @@ -471,7 +463,7 @@ "status": None, } -id_ = { +ZZ["id"] = { "extend": "com", "registrar": r"Sponsoring Registrar Organization:\s?(.+)", "creation_date": r"Created On:\s?(.+)", @@ -480,11 +472,11 @@ } # Ireland -ie = { +ZZ["ie"] = { "extend": "com", } -im = { +ZZ["im"] = { "domain_name": r"Domain Name:\s+(.+)", "status": None, "registrar": None, @@ -495,24 +487,24 @@ "name_servers": r"Name Server:(.+)", } -in_ = { +ZZ["in"] = { "extend": "com", } -info = { +ZZ["info"] = { "extend": "com", } -ink = { +ZZ["ink"] = { "extend": "amsterdam", } -io = { +ZZ["io"] = { "extend": "com", "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", } -ir = { +ZZ["ir"] = { "extend": None, "domain_name": r"domain:\s?(.+)", "registrar": "nic.ir", @@ -524,7 +516,7 @@ "name_servers": r"nserver:\s*(.+)\s*", } -is_ = { +ZZ["is"] = { "domain_name": r"domain:\s?(.+)", "registrar": None, "registrant": r"registrant:\s?(.+)", @@ -537,7 +529,7 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -it = { +ZZ["it"] = { "extend": "com", "domain_name": r"Domain:\s?(.+)", "registrar": r"Registrar\s*Organization:\s*(.+)", @@ -555,7 +547,7 @@ # Additionally, whois qeuries can explicitly request english: # To suppress Japanese output, add'/e' at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. # -jp = { +ZZ["jp"] = { "domain_name": r"\[Domain Name\]\s?(.+)", # 'registrar': None, "registrar": r"\[ (.+) database provides information on network administration. Its use is \]", @@ -578,7 +570,7 @@ # Additionally, whois qeuries can explicitly request english: # To suppress Japanese output, add'/e' at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. # -co_jp = { +ZZ["co.jp"] = { "extend": "jp", # 'domain_name': r'\[ドメイン名\]\s?(.+)', "domain_name": r"\[Domain Name\]\s?(.+)", @@ -592,29 +584,18 @@ } # All Japanese Sub-TLDs. See: https://jprs.co.jp/en/jpdomain.html -ne_jp = {"extend": "co_jp"} - -or_jp = {"extend": "co_jp"} - -go_jp = {"extend": "co_jp"} - -ac_jp = {"extend": "co_jp"} - -ad_jp = {"extend": "co_jp"} - -ed_jp = {"extend": "co_jp"} - -gr_jp = {"extend": "co_jp"} - -lg_jp = {"extend": "co_jp"} - -geo_jp = {"extend": "co_jp"} - -kiwi = { - "extend": "com", -} - -kg = { +ZZ["ne.jp"] = {"extend": "co.jp"} +ZZ["or.jp"] = {"extend": "co.jp"} +ZZ["go.jp"] = {"extend": "co.jp"} +ZZ["ac.jp"] = {"extend": "co.jp"} +ZZ["ad.jp"] = {"extend": "co.jp"} +ZZ["ed.jp"] = {"extend": "co.jp"} +ZZ["gr.jp"] = {"extend": "co.jp"} +ZZ["lg.jp"] = {"extend": "co.jp"} +ZZ["geo.jp"] = {"extend": "co.jp"} +ZZ["kiwi"] = {"extend": "com"} + +ZZ["kg"] = { "domain_name": r"Domain\s+(\S+)", "registrar": r"Billing\sContact:\n.*\n\s+Name:\s(.+)\n", "registrant_country": None, @@ -628,11 +609,11 @@ } # Saint Kitts and Nevis -kn = { +ZZ["kn"] = { "extend": "com", } -kr = { +ZZ["kr"] = { "extend": "com", "domain_name": r"Domain Name\s*:\s?(.+)", "registrar": r"Authorized Agency\s*:\s*(.+)", @@ -644,7 +625,7 @@ "name_servers": r"Host Name\s+:\s+(\S+)\n", } -kz = { +ZZ["kz"] = { "extend": None, "domain_name": r"Domain name\.+:\s(.+)", "registrar": r"Current Registar:\s(.+)", @@ -656,11 +637,11 @@ "status": r"Domain status :(?:\s+([^\n]+)\n)", } -link = { +ZZ["link"] = { "extend": "amsterdam", } -lt = { +ZZ["lt"] = { "extend": "com", "domain_name": r"Domain:\s?(.+)", "creation_date": r"Registered:\s?(.+)", @@ -669,14 +650,14 @@ "status": r"\nStatus:\s?(.+)", } -lv = { +ZZ["lv"] = { "extend": "ru", "creation_date": r"Registered:\s*(.+)\n", "updated_date": r"Changed:\s*(.+)\n", "status": r"Status:\s?(.+)", } -me = { +ZZ["me"] = { # lines have \r "extend": "biz", "creation_date": r"Creation Date:\s?(.+)", @@ -686,7 +667,7 @@ "status": r"Domain Status:\s?(.+)", } -ml = { +ZZ["ml"] = { "extend": "com", "domain_name": r"Domain name:\s*([^(i|\n)]+)", "registrar": r"(?<=Owner contact:\s)[\s\S]*?Organization:(.*)", @@ -698,13 +679,13 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -mobi = { +ZZ["mobi"] = { "extend": "com", "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", "updated_date": r"\nUpdated Date:\s?(.+)", } -mx = { +ZZ["mx"] = { "extend": None, "domain_name": r"Domain Name:\s?(.+)", "creation_date": r"Created On:\s?(.+)", @@ -717,13 +698,13 @@ "status": None, } -name = { +ZZ["name"] = { "extend": "com", "status": r"Domain Status:\s?(.+)", } # New-Caledonia (French Territory) -nc = { +ZZ["nc"] = { "extend": "fr", "domain_name": r"Domain\s*:\s(.+)", "registrar": r"Registrar\s*:\s(.+)", @@ -736,11 +717,11 @@ "status": None, } -net = { +ZZ["net"] = { "extend": "com", } -nl = { +ZZ["nl"] = { "extend": "com", "expiration_date": None, "registrant_country": None, @@ -776,7 +757,7 @@ } # Norway -no = { +ZZ["no"] = { "extend": None, "domain_name": r"Domain Name\.+:\s?(.+)", "registrar": r"Registrar Handle\.+:\s?(.+)", @@ -790,11 +771,11 @@ "emails": None, } -nu = { +ZZ["nu"] = { "extend": "se", } -nyc = { +ZZ["nyc"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -804,7 +785,7 @@ "status": r"Status:\s?(.+)", } -nz = { +ZZ["nz"] = { "extend": None, "domain_name": r"domain_name:\s?(.+)", "registrar": r"registrar_name:\s?(.+)", @@ -818,24 +799,24 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -org = { +ZZ["org"] = { "extend": "com", "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", "updated_date": r"\nLast Updated On:\s?(.+)", "name_servers": r"Name Server:\s?(.+)\s*", } -ovh = { +ZZ["ovh"] = { "extend": "com", } -pe = { +ZZ["pe"] = { "extend": "com", "registrant": r"Registrant Name:\s?(.+)", "admin": r"Admin Name:\s?(.+)", } -pharmacy = { +ZZ["pharmacy"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -845,7 +826,7 @@ "status": r"status:\s?(.+)", } -pl = { +ZZ["pl"] = { # pl has lines ending in multiple line feeds \r and trailing whitespace "extend": "uk", "registrar": r"\nREGISTRAR:\s*(.+)\n", @@ -857,11 +838,11 @@ "status": r"\nStatus:\n\s*(.+)", } -pro = { +ZZ["pro"] = { "extend": "com", } -pt = { +ZZ["pt"] = { # mboot 2022-11-16 # from aws frankfurt all ok, looks like network limitations # actually it sometimes works, most of the time though we get: connect: Network is unreachable @@ -880,7 +861,7 @@ "status": r"Domain Status:\s?(.+)", } -pw = { +ZZ["pw"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -890,16 +871,16 @@ "status": r"Status:\s?(.+)", } -radio = { +ZZ["radio"] = { "extend": "com", "_server": "whois.nic.radio", } -red = { +ZZ["red"] = { "extend": "com", } -ru = { +ZZ["ru"] = { "extend": "com", "domain_name": r"\ndomain:\s*(.+)", "creation_date": r"\ncreated:\s*(.+)", @@ -911,11 +892,11 @@ # Rossíyskaya Federátsiya) is the Cyrillic country code top-level domain for the Russian Federation, # In the Domain Name System it has the ASCII DNS name xn--p1ai. -ru_rf = { - "extend": "ru", -} +ZZ["ru.rf"] = {"extend": "ru", "_server": "whois.tcinet.ru"} +ZZ["рф"] = {"extend": "ru", "_server": "whois.tcinet.ru"} +ZZ["xn--p1ai"] = {"extend": "ru", "_server": "whois.tcinet.ru"} -sa = { +ZZ["sa"] = { "extend": "com", "domain_name": r"Domain Name:\s*(.+\.sa)\s", "registrant": r"Registrant:\n*(.+)\n", @@ -929,18 +910,18 @@ "emails": None, } -sh = { +ZZ["sh"] = { "extend": "com", "registrant": r"\nRegistrant Organization:\s?(.+)", "expiration_date": r"\nRegistry Expiry Date:\s*(.+)", "status": r"\nDomain Status:\s?(.+)", } -shop = { +ZZ["shop"] = { "extend": "com", } -se = { +ZZ["se"] = { "extend": None, "domain_name": r"domain:\s?(.+)", "registrar": r"registrar:\s?(.+)", @@ -953,7 +934,7 @@ } # Singapore - Commercial sub-domain -com_sg = { +ZZ["com.sg"] = { # uses \r nameservers have trailing whitespace "extend": None, "domain_name": r"Domain Name:\s?(.+)", @@ -973,7 +954,7 @@ } # Slovakia -sk = { +ZZ["sk"] = { "extend": "com", "domain_name": r"Domain:\s?(.+)", "creation_date": r"Created:\s?(.+)", @@ -984,11 +965,11 @@ "registrant_country": r"Country Code:\s?(.+)\nRegistrar:", } -study = { +ZZ["study"] = { "extend": "com", } -tel = { +ZZ["tel"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -999,7 +980,7 @@ } # Thailand - Commercial sub-domain -co_th = { +ZZ["co.th"] = { "_server": "whois.thnic.co.th", "extend": "com", "registrant": r"Domain Holder Organization:\s?(.+)", @@ -1009,19 +990,19 @@ "updated_date": r"Updated date:\s?(.+)", } -go_th = { - "extend": "co_th", +ZZ["go.th"] = { + "extend": "co.th", } -in_th = { - "extend": "co_th", +ZZ["in.th"] = { + "extend": "co.th", } -ac_th = { - "extend": "co_th", +ZZ["ac.th"] = { + "extend": "co.th", } -tn = { +ZZ["tn"] = { "extend": "com", "domain_name": r"Domain name\.+:(.+)\s*", "registrar": r"Registrar\.+:(.+)\s*", @@ -1035,20 +1016,20 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -tokyo = { +ZZ["tokyo"] = { "extend": "com", "_server": "whois.nic.tokyo", } -top = { +ZZ["top"] = { "extend": "com", } -trade = { +ZZ["trade"] = { "extend": "amsterdam", } -tv = { +ZZ["tv"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -1058,7 +1039,7 @@ "status": r"Status:\s?(.+)", } -tz = { +ZZ["tz"] = { "domain_name": r"\ndomain:\s*(.+)", "registrar": r"\nregistrar:\s?(.+)", "registrant": r"\nregistrant:\s*(.+)", @@ -1070,7 +1051,7 @@ "name_servers": r"\nnserver:\s*(.+)", } -ua = { +ZZ["ua"] = { "extend": "com", "domain_name": r"\ndomain:\s*(.+)", "registrar": r"\nregistrar:\s*(.+)", @@ -1082,22 +1063,16 @@ "status": r"\nstatus:\s*(.+)", } -edu_ua = { +ZZ["edu.ua"] = { "extend": "ua", "creation_date": r"\ncreated:\s+0-UANIC\s+(.+)", } -com_ua = { - "extend": "ua", -} -net_ua = { - "extend": "ua", -} +ZZ["com.ua"] = {"extend": "ua"} +ZZ["net.ua"] = {"extend": "ua"} -lviv_ua = { - "extend": "com", -} +ZZ["lviv.ua"] = {"extend": "com"} -uk = { +ZZ["uk"] = { "extend": "com", "registrant": r"Registrant:\n\s*(.+)", "creation_date": r"Registered on:\s*(.+)", @@ -1107,11 +1082,9 @@ "status": r"Registration status:\n\s*(.+)", } -us = { - "extend": "name", -} +ZZ["us"] = {"extend": "name"} -uz = { +ZZ["uz"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -1123,13 +1096,13 @@ # sometimes 'not.defined is returned as a nameserver (e.g. google.uz) } -vip = { +ZZ["vip"] = { "_server": "whois.nic.vip", "extend": "com", "updated_date": None, } -wiki = { +ZZ["wiki"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -1139,11 +1112,11 @@ "status": r"Status:\s?(.+)", } -win = { +ZZ["win"] = { "extend": "com", } -work = { +ZZ["work"] = { "extend": "com", "domain_name": r"Domain Name:\s?(.+)", "registrar": r"Registrar:\s*(.+)", @@ -1152,279 +1125,280 @@ "updated_date": r"Updated Date:\s?(.+)", } -xin = { +ZZ["xin"] = { "extend": "com", "_server": "whois.nic.xin", } -za = { +ZZ["za"] = { "extend": "com", } -web_za = {"extend": "za", "_server": "web-whois.registry.net.za"} -org_za = {"extend": "za", "_server": "org-whois.registry.net.za"} -net_za = {"extend": "za", "_server": "net-whois.registry.net.za"} -co_za = {"extend": "za", "_server": "coza-whois.registry.net.za"} +ZZ["web.za"] = {"extend": "za", "_server": "web-whois.registry.net.za"} +ZZ["org.za"] = {"extend": "za", "_server": "org-whois.registry.net.za"} +ZZ["net.za"] = {"extend": "za", "_server": "net-whois.registry.net.za"} +ZZ["co.za"] = {"extend": "za", "_server": "coza-whois.registry.net.za"} -gy = { - "extend": "com", -} +ZZ["gy"] = {"extend": "com"} # Multiple initialization -ca = rw = mu = bank +ZZ["ca"] = {"extend": "bank"} +ZZ["rw"] = {"extend": "bank"} +ZZ["mu"] = {"extend": "bank"} +ZZ["mu"] = {"extend": "bank"} # Registry operator: donuts.domains # WHOIS server: whois.donuts.co -_donuts = { +ZZ["_donuts"] = { "extend": "com", "_server": "whois.donuts.co", "registrant": r"Registrant Organization:\s?(.+)", "status": r"Domain Status:\s?(.+)", } -academy = {"extend": "_donuts"} -accountants = {"extend": "_donuts"} -actor = {"extend": "_donuts"} -agency = {"extend": "_donuts"} -airforce = {"extend": "_donuts"} -apartments = {"extend": "_donuts"} -army = {"extend": "_donuts"} -associates = {"extend": "_donuts"} -attorney = {"extend": "_donuts"} -auction = {"extend": "_donuts"} -band = {"extend": "_donuts"} -bargains = {"extend": "_donuts"} -bike = {"extend": "_donuts"} -bingo = {"extend": "_donuts"} -boutique = {"extend": "_donuts"} -builders = {"extend": "_donuts"} -business = {"extend": "_donuts"} -cab = {"extend": "_donuts"} -cafe = {"extend": "_donuts"} -camera = {"extend": "_donuts"} -camp = {"extend": "_donuts"} -capital = {"extend": "_donuts"} -cards = {"extend": "_donuts"} -careers = {"extend": "_donuts"} -care = {"extend": "_donuts"} -cash = {"extend": "_donuts"} -casino = {"extend": "_donuts"} -catering = {"extend": "_donuts"} -center = {"extend": "_donuts"} -charity = {"extend": "_donuts"} -chat = {"extend": "_donuts"} -cheap = {"extend": "_donuts"} -church = {"extend": "_donuts"} -city = {"extend": "_donuts"} -claims = {"extend": "_donuts"} -cleaning = {"extend": "_donuts"} -clinic = {"extend": "_donuts"} -clothing = {"extend": "_donuts"} -coach = {"extend": "_donuts"} -codes = {"extend": "_donuts"} -coffee = {"extend": "_donuts"} -community = {"extend": "_donuts"} -company = {"extend": "_donuts"} -computer = {"extend": "_donuts"} -condos = {"extend": "_donuts"} -construction = {"extend": "_donuts"} -consulting = {"extend": "_donuts"} -contact = {"extend": "_donuts"} -contractors = {"extend": "_donuts"} -cool = {"extend": "_donuts"} -coupons = {"extend": "_donuts"} -creditcard = {"extend": "_donuts"} -credit = {"extend": "_donuts"} -cruises = {"extend": "_donuts"} -dance = {"extend": "_donuts"} -dating = {"extend": "_donuts"} -deals = {"extend": "_donuts"} -degree = {"extend": "_donuts"} -delivery = {"extend": "_donuts"} -democrat = {"extend": "_donuts"} -dental = {"extend": "_donuts"} -dentist = {"extend": "_donuts"} -diamonds = {"extend": "_donuts"} -digital = {"extend": "_donuts"} -direct = {"extend": "_donuts"} -directory = {"extend": "_donuts"} -discount = {"extend": "_donuts"} -doctor = {"extend": "_donuts"} -dog = {"extend": "_donuts"} -domains = {"extend": "_donuts"} -education = {"extend": "_donuts"} -email = {"extend": "_donuts"} -energy = {"extend": "_donuts"} -engineer = {"extend": "_donuts"} -engineering = {"extend": "_donuts"} -enterprises = {"extend": "_donuts"} -equipment = {"extend": "_donuts"} -estate = {"extend": "_donuts"} -events = {"extend": "_donuts"} -exchange = {"extend": "_donuts"} -expert = {"extend": "_donuts"} -exposed = {"extend": "_donuts"} -express = {"extend": "_donuts"} -fail = {"extend": "_donuts"} -family = {"extend": "_donuts"} -fan = {"extend": "_donuts"} -farm = {"extend": "_donuts"} -finance = {"extend": "_donuts"} -financial = {"extend": "_donuts"} -fish = {"extend": "_donuts"} -fitness = {"extend": "_donuts"} -flights = {"extend": "_donuts"} -florist = {"extend": "_donuts"} -football = {"extend": "_donuts"} -forsale = {"extend": "_donuts"} -foundation = {"extend": "_donuts"} -fund = {"extend": "_donuts"} -furniture = {"extend": "_donuts"} -futbol = {"extend": "_donuts"} -fyi = {"extend": "_donuts"} -gallery = {"extend": "_donuts"} -games = {"extend": "_donuts"} -gifts = {"extend": "_donuts"} -gives = {"extend": "_donuts"} -glass = {"extend": "_donuts"} -gmbh = {"extend": "_donuts"} -gold = {"extend": "_donuts"} -golf = {"extend": "_donuts"} -graphics = {"extend": "_donuts"} -gratis = {"extend": "_donuts"} -gripe = {"extend": "_donuts"} -group = {"extend": "_donuts"} -guide = {"extend": "_donuts"} -guru = {"extend": "_donuts"} -haus = {"extend": "_donuts"} -healthcare = {"extend": "_donuts"} -hockey = {"extend": "_donuts"} -holdings = {"extend": "_donuts"} -holiday = {"extend": "_donuts"} -hospital = {"extend": "_donuts"} -house = {"extend": "_donuts"} -immobilien = {"extend": "_donuts"} -immo = {"extend": "_donuts"} -industries = {"extend": "_donuts"} -institute = {"extend": "_donuts"} -insure = {"extend": "_donuts"} -international = {"extend": "_donuts"} -investments = {"extend": "_donuts"} -irish = {"extend": "_donuts"} -jetzt = {"extend": "_donuts"} -jewelry = {"extend": "_donuts"} -kaufen = {"extend": "_donuts"} -kitchen = {"extend": "_donuts"} -land = {"extend": "_donuts"} -lawyer = {"extend": "_donuts"} -lease = {"extend": "_donuts"} -legal = {"extend": "_donuts"} -life = {"extend": "_donuts"} -lighting = {"extend": "_donuts"} -limited = {"extend": "_donuts"} -limo = {"extend": "_donuts"} -live = {"extend": "_donuts"} -loans = {"extend": "_donuts"} -ltd = {"extend": "_donuts"} -maison = {"extend": "_donuts"} -management = {"extend": "_donuts"} -market = {"extend": "_donuts"} -marketing = {"extend": "_donuts"} -mba = {"extend": "_donuts"} -media = {"extend": "_donuts"} -memorial = {"extend": "_donuts"} -moda = {"extend": "_donuts"} -money = {"extend": "_donuts"} -mortgage = {"extend": "_donuts"} -movie = {"extend": "_donuts"} -navy = {"extend": "_donuts"} -network = {"extend": "_donuts"} -news = {"extend": "_donuts"} -ninja = {"extend": "_donuts"} -partners = {"extend": "_donuts"} -parts = {"extend": "_donuts"} -pet = {"extend": "_donuts"} -photography = {"extend": "_donuts"} -photos = {"extend": "_donuts"} -pictures = {"extend": "_donuts"} -pizza = {"extend": "_donuts"} -place = {"extend": "_donuts"} -plumbing = {"extend": "_donuts"} -plus = {"extend": "_donuts"} -productions = {"extend": "_donuts"} -properties = {"extend": "_donuts"} -pub = {"extend": "_donuts"} -recipes = {"extend": "_donuts"} -rehab = {"extend": "_donuts"} -reise = {"extend": "_donuts"} -reisen = {"extend": "_donuts"} -rentals = {"extend": "_donuts"} -repair = {"extend": "_donuts"} -report = {"extend": "_donuts"} -republican = {"extend": "_donuts"} -restaurant = {"extend": "_donuts"} -reviews = {"extend": "_donuts"} -rip = {"extend": "_donuts"} -rocks = {"extend": "_donuts"} -run = {"extend": "_donuts"} -sale = {"extend": "_donuts"} -salon = {"extend": "_donuts"} -sarl = {"extend": "_donuts"} -school = {"extend": "_donuts"} -schule = {"extend": "_donuts"} -services = {"extend": "_donuts"} -shoes = {"extend": "_donuts"} -shopping = {"extend": "_donuts"} -show = {"extend": "_donuts"} -singles = {"extend": "_donuts"} -soccer = {"extend": "_donuts"} -social = {"extend": "_donuts"} -software = {"extend": "_donuts"} -solar = {"extend": "_donuts"} -solutions = {"extend": "_donuts"} -studio = {"extend": "_donuts"} -style = {"extend": "_donuts"} -supplies = {"extend": "_donuts"} -supply = {"extend": "_donuts"} -support = {"extend": "_donuts"} -surgery = {"extend": "_donuts"} -systems = {"extend": "_donuts"} -tax = {"extend": "_donuts"} -taxi = {"extend": "_donuts"} -team = {"extend": "_donuts"} -technology = {"extend": "_donuts"} -tennis = {"extend": "_donuts"} -theater = {"extend": "_donuts"} -tienda = {"extend": "_donuts"} -tips = {"extend": "_donuts"} -tires = {"extend": "_donuts"} -today = {"extend": "_donuts"} -tools = {"extend": "_donuts"} -tours = {"extend": "_donuts"} -town = {"extend": "_donuts"} -toys = {"extend": "_donuts"} -training = {"extend": "_donuts"} -travel = {"extend": "_donuts"} -university = {"extend": "_donuts"} -vacations = {"extend": "_donuts"} -ventures = {"extend": "_donuts"} -vet = {"extend": "_donuts"} -viajes = {"extend": "_donuts"} -video = {"extend": "_donuts"} -villas = {"extend": "_donuts"} -vin = {"extend": "_donuts"} -vision = {"extend": "_donuts"} -voyage = {"extend": "_donuts"} -watch = {"extend": "_donuts"} -wine = {"extend": "_donuts"} -works = {"extend": "_donuts"} -world = {"extend": "_donuts"} -wtf = {"extend": "_donuts"} -zone = {"extend": "_donuts"} +ZZ["academy"] = {"extend": "_donuts"} +ZZ["accountants"] = {"extend": "_donuts"} +ZZ["actor"] = {"extend": "_donuts"} +ZZ["agency"] = {"extend": "_donuts"} +ZZ["airforce"] = {"extend": "_donuts"} +ZZ["apartments"] = {"extend": "_donuts"} +ZZ["army"] = {"extend": "_donuts"} +ZZ["associates"] = {"extend": "_donuts"} +ZZ["attorney"] = {"extend": "_donuts"} +ZZ["auction"] = {"extend": "_donuts"} +ZZ["band"] = {"extend": "_donuts"} +ZZ["bargains"] = {"extend": "_donuts"} +ZZ["bike"] = {"extend": "_donuts"} +ZZ["bingo"] = {"extend": "_donuts"} +ZZ["boutique"] = {"extend": "_donuts"} +ZZ["builders"] = {"extend": "_donuts"} +ZZ["business"] = {"extend": "_donuts"} +ZZ["cab"] = {"extend": "_donuts"} +ZZ["cafe"] = {"extend": "_donuts"} +ZZ["camera"] = {"extend": "_donuts"} +ZZ["camp"] = {"extend": "_donuts"} +ZZ["capital"] = {"extend": "_donuts"} +ZZ["cards"] = {"extend": "_donuts"} +ZZ["careers"] = {"extend": "_donuts"} +ZZ["care"] = {"extend": "_donuts"} +ZZ["cash"] = {"extend": "_donuts"} +ZZ["casino"] = {"extend": "_donuts"} +ZZ["catering"] = {"extend": "_donuts"} +ZZ["center"] = {"extend": "_donuts"} +ZZ["charity"] = {"extend": "_donuts"} +ZZ["chat"] = {"extend": "_donuts"} +ZZ["cheap"] = {"extend": "_donuts"} +ZZ["church"] = {"extend": "_donuts"} +ZZ["city"] = {"extend": "_donuts"} +ZZ["claims"] = {"extend": "_donuts"} +ZZ["cleaning"] = {"extend": "_donuts"} +ZZ["clinic"] = {"extend": "_donuts"} +ZZ["clothing"] = {"extend": "_donuts"} +ZZ["coach"] = {"extend": "_donuts"} +ZZ["codes"] = {"extend": "_donuts"} +ZZ["coffee"] = {"extend": "_donuts"} +ZZ["community"] = {"extend": "_donuts"} +ZZ["company"] = {"extend": "_donuts"} +ZZ["computer"] = {"extend": "_donuts"} +ZZ["condos"] = {"extend": "_donuts"} +ZZ["construction"] = {"extend": "_donuts"} +ZZ["consulting"] = {"extend": "_donuts"} +ZZ["contact"] = {"extend": "_donuts"} +ZZ["contractors"] = {"extend": "_donuts"} +ZZ["cool"] = {"extend": "_donuts"} +ZZ["coupons"] = {"extend": "_donuts"} +ZZ["creditcard"] = {"extend": "_donuts"} +ZZ["credit"] = {"extend": "_donuts"} +ZZ["cruises"] = {"extend": "_donuts"} +ZZ["dance"] = {"extend": "_donuts"} +ZZ["dating"] = {"extend": "_donuts"} +ZZ["deals"] = {"extend": "_donuts"} +ZZ["degree"] = {"extend": "_donuts"} +ZZ["delivery"] = {"extend": "_donuts"} +ZZ["democrat"] = {"extend": "_donuts"} +ZZ["dental"] = {"extend": "_donuts"} +ZZ["dentist"] = {"extend": "_donuts"} +ZZ["diamonds"] = {"extend": "_donuts"} +ZZ["digital"] = {"extend": "_donuts"} +ZZ["direct"] = {"extend": "_donuts"} +ZZ["directory"] = {"extend": "_donuts"} +ZZ["discount"] = {"extend": "_donuts"} +ZZ["doctor"] = {"extend": "_donuts"} +ZZ["dog"] = {"extend": "_donuts"} +ZZ["domains"] = {"extend": "_donuts"} +ZZ["education"] = {"extend": "_donuts"} +ZZ["email"] = {"extend": "_donuts"} +ZZ["energy"] = {"extend": "_donuts"} +ZZ["engineer"] = {"extend": "_donuts"} +ZZ["engineering"] = {"extend": "_donuts"} +ZZ["enterprises"] = {"extend": "_donuts"} +ZZ["equipment"] = {"extend": "_donuts"} +ZZ["estate"] = {"extend": "_donuts"} +ZZ["events"] = {"extend": "_donuts"} +ZZ["exchange"] = {"extend": "_donuts"} +ZZ["expert"] = {"extend": "_donuts"} +ZZ["exposed"] = {"extend": "_donuts"} +ZZ["express"] = {"extend": "_donuts"} +ZZ["fail"] = {"extend": "_donuts"} +ZZ["family"] = {"extend": "_donuts"} +ZZ["fan"] = {"extend": "_donuts"} +ZZ["farm"] = {"extend": "_donuts"} +ZZ["finance"] = {"extend": "_donuts"} +ZZ["financial"] = {"extend": "_donuts"} +ZZ["fish"] = {"extend": "_donuts"} +ZZ["fitness"] = {"extend": "_donuts"} +ZZ["flights"] = {"extend": "_donuts"} +ZZ["florist"] = {"extend": "_donuts"} +ZZ["football"] = {"extend": "_donuts"} +ZZ["forsale"] = {"extend": "_donuts"} +ZZ["foundation"] = {"extend": "_donuts"} +ZZ["fund"] = {"extend": "_donuts"} +ZZ["furniture"] = {"extend": "_donuts"} +ZZ["futbol"] = {"extend": "_donuts"} +ZZ["fyi"] = {"extend": "_donuts"} +ZZ["gallery"] = {"extend": "_donuts"} +ZZ["games"] = {"extend": "_donuts"} +ZZ["gifts"] = {"extend": "_donuts"} +ZZ["gives"] = {"extend": "_donuts"} +ZZ["glass"] = {"extend": "_donuts"} +ZZ["gmbh"] = {"extend": "_donuts"} +ZZ["gold"] = {"extend": "_donuts"} +ZZ["golf"] = {"extend": "_donuts"} +ZZ["graphics"] = {"extend": "_donuts"} +ZZ["gratis"] = {"extend": "_donuts"} +ZZ["gripe"] = {"extend": "_donuts"} +ZZ["group"] = {"extend": "_donuts"} +ZZ["guide"] = {"extend": "_donuts"} +ZZ["guru"] = {"extend": "_donuts"} +ZZ["haus"] = {"extend": "_donuts"} +ZZ["healthcare"] = {"extend": "_donuts"} +ZZ["hockey"] = {"extend": "_donuts"} +ZZ["holdings"] = {"extend": "_donuts"} +ZZ["holiday"] = {"extend": "_donuts"} +ZZ["hospital"] = {"extend": "_donuts"} +ZZ["house"] = {"extend": "_donuts"} +ZZ["immobilien"] = {"extend": "_donuts"} +ZZ["immo"] = {"extend": "_donuts"} +ZZ["industries"] = {"extend": "_donuts"} +ZZ["institute"] = {"extend": "_donuts"} +ZZ["insure"] = {"extend": "_donuts"} +ZZ["international"] = {"extend": "_donuts"} +ZZ["investments"] = {"extend": "_donuts"} +ZZ["irish"] = {"extend": "_donuts"} +ZZ["jetzt"] = {"extend": "_donuts"} +ZZ["jewelry"] = {"extend": "_donuts"} +ZZ["kaufen"] = {"extend": "_donuts"} +ZZ["kitchen"] = {"extend": "_donuts"} +ZZ["land"] = {"extend": "_donuts"} +ZZ["lawyer"] = {"extend": "_donuts"} +ZZ["lease"] = {"extend": "_donuts"} +ZZ["legal"] = {"extend": "_donuts"} +ZZ["life"] = {"extend": "_donuts"} +ZZ["lighting"] = {"extend": "_donuts"} +ZZ["limited"] = {"extend": "_donuts"} +ZZ["limo"] = {"extend": "_donuts"} +ZZ["live"] = {"extend": "_donuts"} +ZZ["loans"] = {"extend": "_donuts"} +ZZ["ltd"] = {"extend": "_donuts"} +ZZ["maison"] = {"extend": "_donuts"} +ZZ["management"] = {"extend": "_donuts"} +ZZ["market"] = {"extend": "_donuts"} +ZZ["marketing"] = {"extend": "_donuts"} +ZZ["mba"] = {"extend": "_donuts"} +ZZ["media"] = {"extend": "_donuts"} +ZZ["memorial"] = {"extend": "_donuts"} +ZZ["moda"] = {"extend": "_donuts"} +ZZ["money"] = {"extend": "_donuts"} +ZZ["mortgage"] = {"extend": "_donuts"} +ZZ["movie"] = {"extend": "_donuts"} +ZZ["navy"] = {"extend": "_donuts"} +ZZ["network"] = {"extend": "_donuts"} +ZZ["news"] = {"extend": "_donuts"} +ZZ["ninja"] = {"extend": "_donuts"} +ZZ["partners"] = {"extend": "_donuts"} +ZZ["parts"] = {"extend": "_donuts"} +ZZ["pet"] = {"extend": "_donuts"} +ZZ["photography"] = {"extend": "_donuts"} +ZZ["photos"] = {"extend": "_donuts"} +ZZ["pictures"] = {"extend": "_donuts"} +ZZ["pizza"] = {"extend": "_donuts"} +ZZ["place"] = {"extend": "_donuts"} +ZZ["plumbing"] = {"extend": "_donuts"} +ZZ["plus"] = {"extend": "_donuts"} +ZZ["productions"] = {"extend": "_donuts"} +ZZ["properties"] = {"extend": "_donuts"} +ZZ["pub"] = {"extend": "_donuts"} +ZZ["recipes"] = {"extend": "_donuts"} +ZZ["rehab"] = {"extend": "_donuts"} +ZZ["reise"] = {"extend": "_donuts"} +ZZ["reisen"] = {"extend": "_donuts"} +ZZ["rentals"] = {"extend": "_donuts"} +ZZ["repair"] = {"extend": "_donuts"} +ZZ["report"] = {"extend": "_donuts"} +ZZ["republican"] = {"extend": "_donuts"} +ZZ["restaurant"] = {"extend": "_donuts"} +ZZ["reviews"] = {"extend": "_donuts"} +ZZ["rip"] = {"extend": "_donuts"} +ZZ["rocks"] = {"extend": "_donuts"} +ZZ["run"] = {"extend": "_donuts"} +ZZ["sale"] = {"extend": "_donuts"} +ZZ["salon"] = {"extend": "_donuts"} +ZZ["sarl"] = {"extend": "_donuts"} +ZZ["school"] = {"extend": "_donuts"} +ZZ["schule"] = {"extend": "_donuts"} +ZZ["services"] = {"extend": "_donuts"} +ZZ["shoes"] = {"extend": "_donuts"} +ZZ["shopping"] = {"extend": "_donuts"} +ZZ["show"] = {"extend": "_donuts"} +ZZ["singles"] = {"extend": "_donuts"} +ZZ["soccer"] = {"extend": "_donuts"} +ZZ["social"] = {"extend": "_donuts"} +ZZ["software"] = {"extend": "_donuts"} +ZZ["solar"] = {"extend": "_donuts"} +ZZ["solutions"] = {"extend": "_donuts"} +ZZ["studio"] = {"extend": "_donuts"} +ZZ["style"] = {"extend": "_donuts"} +ZZ["supplies"] = {"extend": "_donuts"} +ZZ["supply"] = {"extend": "_donuts"} +ZZ["support"] = {"extend": "_donuts"} +ZZ["surgery"] = {"extend": "_donuts"} +ZZ["systems"] = {"extend": "_donuts"} +ZZ["tax"] = {"extend": "_donuts"} +ZZ["taxi"] = {"extend": "_donuts"} +ZZ["team"] = {"extend": "_donuts"} +ZZ["technology"] = {"extend": "_donuts"} +ZZ["tennis"] = {"extend": "_donuts"} +ZZ["theater"] = {"extend": "_donuts"} +ZZ["tienda"] = {"extend": "_donuts"} +ZZ["tips"] = {"extend": "_donuts"} +ZZ["tires"] = {"extend": "_donuts"} +ZZ["today"] = {"extend": "_donuts"} +ZZ["tools"] = {"extend": "_donuts"} +ZZ["tours"] = {"extend": "_donuts"} +ZZ["town"] = {"extend": "_donuts"} +ZZ["toys"] = {"extend": "_donuts"} +ZZ["training"] = {"extend": "_donuts"} +ZZ["travel"] = {"extend": "_donuts"} +ZZ["university"] = {"extend": "_donuts"} +ZZ["vacations"] = {"extend": "_donuts"} +ZZ["ventures"] = {"extend": "_donuts"} +ZZ["vet"] = {"extend": "_donuts"} +ZZ["viajes"] = {"extend": "_donuts"} +ZZ["video"] = {"extend": "_donuts"} +ZZ["villas"] = {"extend": "_donuts"} +ZZ["vin"] = {"extend": "_donuts"} +ZZ["vision"] = {"extend": "_donuts"} +ZZ["voyage"] = {"extend": "_donuts"} +ZZ["watch"] = {"extend": "_donuts"} +ZZ["wine"] = {"extend": "_donuts"} +ZZ["works"] = {"extend": "_donuts"} +ZZ["world"] = {"extend": "_donuts"} +ZZ["wtf"] = {"extend": "_donuts"} +ZZ["zone"] = {"extend": "_donuts"} # Registry operator: CentralNic # WHOIS server: whois.centralnic.com -_centralnic = { +ZZ["_centralnic"] = { "extend": "com", "_server": "whois.centralnic.com", "domain_name": r"Domain Name:\s?(.+)", @@ -1435,75 +1409,75 @@ "status": r"Domain Status:\s?(.+)", } -art = {"extend": "_centralnic"} -auto = {"extend": "_centralnic"} -autos = {"extend": "_centralnic"} -baby = {"extend": "_centralnic"} -bar = {"extend": "_centralnic"} -beauty = {"extend": "_centralnic"} -best = {"extend": "_centralnic"} -blog = {"extend": "_centralnic"} -boats = {"extend": "_centralnic"} -bond = {"extend": "_centralnic"} -build = {"extend": "_centralnic"} -cam = {"extend": "_centralnic"} -car = {"extend": "_centralnic"} -cars = {"extend": "_centralnic"} -ceo = {"extend": "_centralnic"} -cfd = {"extend": "_centralnic"} -college = {"extend": "_centralnic"} -coop = {"extend": "_centralnic"} -cyou = {"extend": "_centralnic"} -dealer = {"extend": "_centralnic"} -desi = {"extend": "_centralnic"} -fans = {"extend": "_centralnic"} -feedback = {"extend": "_centralnic"} -forum = {"extend": "_centralnic"} -frl = {"extend": "_centralnic"} -fun = {"extend": "_centralnic"} -gent = {"extend": "_centralnic"} -hair = {"extend": "_centralnic"} -homes = {"extend": "_centralnic"} -host = {"extend": "_centralnic"} -icu = {"extend": "_centralnic"} -inc = {"extend": "_centralnic"} -kred = {"extend": "_centralnic"} -london = {"extend": "_centralnic"} -luxury = {"extend": "_centralnic"} -makeup = {"extend": "_centralnic"} -monster = {"extend": "_centralnic"} -motorcycles = {"extend": "_centralnic"} -online = {"extend": "_centralnic"} -ooo = {"extend": "_centralnic"} -press = {"extend": "_centralnic"} -protection = {"extend": "_centralnic"} -qpon = {"extend": "_centralnic"} -quest = {"extend": "_centralnic"} -reit = {"extend": "_centralnic"} -rent = {"extend": "_centralnic"} -rest = {"extend": "_centralnic"} -saarland = {"extend": "_centralnic"} -sbs = {"extend": "_centralnic"} -security = {"extend": "_centralnic"} -site = {"extend": "_centralnic"} -skin = {"extend": "_centralnic"} -space = {"extend": "_centralnic"} -storage = {"extend": "_centralnic"} -store = {"extend": "_centralnic"} -tech = {"extend": "_centralnic"} -theatre = {"extend": "_centralnic"} -tickets = {"extend": "_centralnic"} -uno = {"extend": "_centralnic"} -website = {"extend": "_centralnic"} -xyz = {"extend": "_centralnic"} -yachts = {"extend": "_centralnic"} -zuerich = {"extend": "_centralnic"} +ZZ["art"] = {"extend": "_centralnic"} +ZZ["auto"] = {"extend": "_centralnic"} +ZZ["autos"] = {"extend": "_centralnic"} +ZZ["baby"] = {"extend": "_centralnic"} +ZZ["bar"] = {"extend": "_centralnic"} +ZZ["beauty"] = {"extend": "_centralnic"} +ZZ["best"] = {"extend": "_centralnic"} +ZZ["blog"] = {"extend": "_centralnic"} +ZZ["boats"] = {"extend": "_centralnic"} +ZZ["bond"] = {"extend": "_centralnic"} +ZZ["build"] = {"extend": "_centralnic"} +ZZ["cam"] = {"extend": "_centralnic"} +ZZ["car"] = {"extend": "_centralnic"} +ZZ["cars"] = {"extend": "_centralnic"} +ZZ["ceo"] = {"extend": "_centralnic"} +ZZ["cfd"] = {"extend": "_centralnic"} +ZZ["college"] = {"extend": "_centralnic"} +ZZ["coop"] = {"extend": "_centralnic"} +ZZ["cyou"] = {"extend": "_centralnic"} +ZZ["dealer"] = {"extend": "_centralnic"} +ZZ["desi"] = {"extend": "_centralnic"} +ZZ["fans"] = {"extend": "_centralnic"} +ZZ["feedback"] = {"extend": "_centralnic"} +ZZ["forum"] = {"extend": "_centralnic"} +ZZ["frl"] = {"extend": "_centralnic"} +ZZ["fun"] = {"extend": "_centralnic"} +ZZ["gent"] = {"extend": "_centralnic"} +ZZ["hair"] = {"extend": "_centralnic"} +ZZ["homes"] = {"extend": "_centralnic"} +ZZ["host"] = {"extend": "_centralnic"} +ZZ["icu"] = {"extend": "_centralnic"} +ZZ["inc"] = {"extend": "_centralnic"} +ZZ["kred"] = {"extend": "_centralnic"} +ZZ["london"] = {"extend": "_centralnic"} +ZZ["luxury"] = {"extend": "_centralnic"} +ZZ["makeup"] = {"extend": "_centralnic"} +ZZ["monster"] = {"extend": "_centralnic"} +ZZ["motorcycles"] = {"extend": "_centralnic"} +ZZ["online"] = {"extend": "_centralnic"} +ZZ["ooo"] = {"extend": "_centralnic"} +ZZ["press"] = {"extend": "_centralnic"} +ZZ["protection"] = {"extend": "_centralnic"} +ZZ["qpon"] = {"extend": "_centralnic"} +ZZ["quest"] = {"extend": "_centralnic"} +ZZ["reit"] = {"extend": "_centralnic"} +ZZ["rent"] = {"extend": "_centralnic"} +ZZ["rest"] = {"extend": "_centralnic"} +ZZ["saarland"] = {"extend": "_centralnic"} +ZZ["sbs"] = {"extend": "_centralnic"} +ZZ["security"] = {"extend": "_centralnic"} +ZZ["site"] = {"extend": "_centralnic"} +ZZ["skin"] = {"extend": "_centralnic"} +ZZ["space"] = {"extend": "_centralnic"} +ZZ["storage"] = {"extend": "_centralnic"} +ZZ["store"] = {"extend": "_centralnic"} +ZZ["tech"] = {"extend": "_centralnic"} +ZZ["theatre"] = {"extend": "_centralnic"} +ZZ["tickets"] = {"extend": "_centralnic"} +ZZ["uno"] = {"extend": "_centralnic"} +ZZ["website"] = {"extend": "_centralnic"} +ZZ["xyz"] = {"extend": "_centralnic"} +ZZ["yachts"] = {"extend": "_centralnic"} +ZZ["zuerich"] = {"extend": "_centralnic"} # mboot added start # note i extract the whois server for each toplevel domain using: https://github.com/jophy/iana_tld_list # of which i am a contributer -ac = { +ZZ["ac"] = { "extend": None, "domain_name": r"Domain Name:\s+(.+)", "registrar": r"Registrar:\s+(.+)", @@ -1515,7 +1489,7 @@ "expiration_date": r"Registry Expiry Date:\s+(.+)", } -ae = { +ZZ["ae"] = { "extend": "ar", "domain_name": r"Domain Name:\s+(.+)", "registrar": r"Registrar Name:\s+(.+)", @@ -1527,27 +1501,27 @@ "updated_date": None, } -aero = { +ZZ["aero"] = { "extend": "ac", "_server": "whois.aero", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -af = { +ZZ["af"] = { "extend": "ac", } -ag = { +ZZ["ag"] = { "extend": "ac", } -bet = { +ZZ["bet"] = { "extend": "ac", "_server": "whois.nic.bet", } -bg = { +ZZ["bg"] = { "extend": None, "_server": "whois.register.bg", "domain_name": r"DOMAIN\s+NAME:\s+(.+)", @@ -1560,7 +1534,7 @@ "registrant_country": None, } -bid = { +ZZ["bid"] = { "extend": "ac", "_server": "whois.nic.bid", } @@ -1569,7 +1543,7 @@ # WHOIS server: whois.nic.bj # by: https://github.com/LickosA -bj = { +ZZ["bj"] = { "_server": "whois.nic.bj", "extend": "com", "domain_name": r"Domain Name:\s?(.+)", @@ -1581,22 +1555,22 @@ "name_servers": r"Name Server:\s+(\S+)\n", } -buzz = { +ZZ["buzz"] = { "extend": "amsterdam", } -casa = { +ZZ["casa"] = { "extend": "ac", "registrant_country": r"Registrant Country:\s+(.+)", } -cd = { +ZZ["cd"] = { "extend": "ac", "_server": "whois.nic.cd", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -cf = { +ZZ["cf"] = { "extend": None, "domain_name": None, "name_servers": r"Domain Nameservers:\n(?:(.+)\n)(?:(.+)\n)?(?:(.+)\n)?(?:(.+)\n)?", @@ -1609,80 +1583,80 @@ "_slowdown": 5, } -design = { +ZZ["design"] = { "extend": "ac", } -eus = { +ZZ["eus"] = { "extend": "ac", } -ge = { +ZZ["ge"] = { "_server": "whois.nic.ge", "extend": "ac", "updated_date": None, } -gq = { +ZZ["gq"] = { "extend": "ml", "_server": "whois.domino.gq", } -la = { +ZZ["la"] = { "extend": "com", } -lol = { +ZZ["lol"] = { "extend": "amsterdam", } -love = { +ZZ["love"] = { "extend": "ac", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -ly = { +ZZ["ly"] = { "extend": "ac", "_server": "whois.nic.ly", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -com_ly = { +ZZ["com.ly"] = { "extend": "ly", # host -t ns often has more nameservers then output of whois } -ma = { +ZZ["ma"] = { "extend": "ac", "_server": "whois.registre.ma", "registrar": r"Sponsoring Registrar:\s*(.+)", } -mg = { +ZZ["mg"] = { "extend": "ac", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -moe = { +ZZ["moe"] = { "extend": "ac", "registrant_country": r"Registrant\s+Country:\s+(.+)", } -ng = { +ZZ["ng"] = { "_server": "whois.nic.net.ng", "extend": "ac", "registrant_country": r"Registrant Country:\s+(.+)", } -ong = { +ZZ["ong"] = { "extend": "ac", "registrant_country": r"Registrant Country:\s+(.+)", } -pics = { +ZZ["pics"] = { "extend": "ac", } -re = { +ZZ["re"] = { "extend": "ac", "registrant_country": None, "domain_name": r"domain:\s+(.+)", @@ -1695,7 +1669,7 @@ "registrant_country": None, } -ro = { +ZZ["ro"] = { "extend": None, "domain_name": r"\s+Domain name:\s+(.+)", "registrar": r"\s+Registrar:\s+(.+)", @@ -1707,7 +1681,7 @@ "updated_date": None, } -rs = { +ZZ["rs"] = { "domain_name": r"Domain name:\s+(.+)", "registrar": r"Registrar:\s+(.+)", "status": r"Domain status:\s(.+)", @@ -1719,7 +1693,7 @@ } # singapore -sg = { +ZZ["sg"] = { "_server": "whois.sgnic.sg", "registrar": r"Registrar:\s+(.+)", "domain_name": r"\s+Domain name:\s+(.+)", @@ -1732,23 +1706,23 @@ # make sure the dnssec is not matched } -srl = { +ZZ["srl"] = { "_server": "whois.afilias-srs.net", "extend": "ac", "registrant_country": r"Registrant Country:\s+(.+)", } -su = { +ZZ["su"] = { "extend": "ru", } -td = { +ZZ["td"] = { "_server": "whois.nic.td", "extend": "ac", "registrant_country": r"Registrant Country:\s+(.+)", } -tw = { +ZZ["tw"] = { "extend": None, "domain_name": r"Domain Name:\s+(.+)", "creation_date": r"\s+Record created on\s+(.+)", @@ -1760,11 +1734,11 @@ "name_servers": r"Domain servers in listed order:\s*(\S+)[ \t]*\r?\n(?:\s+(\S+)[ \t]*\r?\n)?(?:\s+(\S+)[ \t]*\r?\n)?(?:\s+(\S+)[ \t]*\r?\n)?", } -com_tw = { +ZZ["com.tw"] = { "extend": "tw", } -ug = { +ZZ["ug"] = { "_server": "whois.co.ug", "domain_name": r"Domain name:\s+(.+)", "creation_date": r"Registered On:\s+(.+)", @@ -1776,15 +1750,15 @@ "registrar": None, } -co_ug = { +ZZ["co.ug"] = { "extend": "ug", } -ca_ug = { +ZZ["ca.ug"] = { "extend": "ug", } -ws = { +ZZ["ws"] = { "extend": None, "domain_name": r"Domain Name:\s+(.+)", "creation_date": r"Creation Date:\s+(.+)", @@ -1796,7 +1770,7 @@ "registrant_country": None, } -re = { +ZZ["re"] = { "domain_name": r"domain:\s+(.+)", "status": r"status:\s+(.+)", "registrar": r"registrar:\s+(.+)", @@ -1807,7 +1781,7 @@ "registrant_country": None, } -bo = { +ZZ["bo"] = { "domain_name": r"\s*NOMBRE DE DOMINIO:\s+(.+)", "registrant_country": r"País:\s+(.+)", "creation_date": r"Fecha de activación:\s+(.+)", @@ -1819,9 +1793,9 @@ "updated_date": None, } -com_bo = {"extend": "bo"} +ZZ["com.bo"] = {"extend": "bo"} -hr = { +ZZ["hr"] = { "domain_name": r"Domain Name:\s+(.+)", "name_servers": r"Name Server:\s+(.+)", "creation_date": r"Creation Date:\s+(.+)", @@ -1838,62 +1812,76 @@ # Registry operator: Zodiac Wang Limited # WHOIS server: whois.gtld.knet.cn -_gtldKnet = { +ZZ["_gtldKnet"] = { "extend": "com", "_server": "whois.gtld.knet.cn", "admin": r"Admin\s*Name:\s+(.+)", } -wang = {"extend": "_gtldKnet"} -八卦 = {"extend": "_gtldKnet"} -商城 = {"extend": "_gtldKnet"} -网店 = {"extend": "_gtldKnet"} - -accountant = {"extend": "com", "_server": "whois.nic.accountant"} -cricket = {"extend": "com", "_server": "whois.nic.cricket"} -date = {"extend": "com", "_server": "whois.nic.date"} -faith = {"extend": "com", "_server": "whois.nic.faith"} -hiphop = {"extend": "com", "_server": "whois.nic.hiphop"} -loan = {"extend": "com", "_server": "whois.nic.loan"} -party = {"extend": "com", "_server": "whois.nic.party"} -racing = {"extend": "com", "_server": "whois.nic.racing"} -ren = {"extend": "com", "_server": "whois.nic.ren"} -review = {"extend": "com", "_server": "whois.nic.review"} -science = {"extend": "com", "_server": "whois.nic.science"} -webcam = {"extend": "com", "_server": "whois.nic.webcam"} -fashion = {"extend": "com", "_server": "whois.nic.fashion"} +ZZ["wang"] = {"extend": "_gtldKnet"} + +# we DONT have xn--45q11c 八卦 (gossip) fix +ZZ["八卦"] = {"extend": "_gtldKnet"} +ZZ["xn--45q11c"] = {"extend": "_gtldKnet"} + +# we DONT have xn--czru2d 商城 (mall) fix +ZZ["商城"] = {"extend": "_gtldKnet"} +ZZ["xn--czru2d"] = {"extend": "_gtldKnet"} + +# we DONT have xn--hxt814e 网店 (webshop) fix +ZZ["网店"] = {"extend": "_gtldKnet"} +ZZ["xn--hxt814e"] = {"extend": "_gtldKnet"} + +ZZ["accountant"] = {"extend": "com", "_server": "whois.nic.accountant"} +ZZ["cricket"] = {"extend": "com", "_server": "whois.nic.cricket"} +ZZ["date"] = {"extend": "com", "_server": "whois.nic.date"} +ZZ["faith"] = {"extend": "com", "_server": "whois.nic.faith"} +ZZ["hiphop"] = {"extend": "com", "_server": "whois.nic.hiphop"} +ZZ["loan"] = {"extend": "com", "_server": "whois.nic.loan"} +ZZ["party"] = {"extend": "com", "_server": "whois.nic.party"} +ZZ["racing"] = {"extend": "com", "_server": "whois.nic.racing"} +ZZ["ren"] = {"extend": "com", "_server": "whois.nic.ren"} +ZZ["review"] = {"extend": "com", "_server": "whois.nic.review"} +ZZ["science"] = {"extend": "com", "_server": "whois.nic.science"} +ZZ["webcam"] = {"extend": "com", "_server": "whois.nic.webcam"} +ZZ["fashion"] = {"extend": "com", "_server": "whois.nic.fashion"} # Registry operator: UNR Corp. # WHOIS server: whois.uniregistry.net -_uniregistry = { +ZZ["_uniregistry"] = { "extend": "com", "_server": "whois.uniregistry.net", } -help = {"extend": "_uniregistry"} -photo = {"extend": "_uniregistry"} -sexy = {"extend": "_uniregistry"} -gift = {"extend": "_uniregistry"} -tattoo = {"extend": "_uniregistry"} -property = {"extend": "_uniregistry"} -juegos = {"extend": "_uniregistry"} -hosting = {"extend": "_uniregistry"} -guitars = {"extend": "_uniregistry"} -flowers = {"extend": "_uniregistry"} -diet = {"extend": "_uniregistry"} -christmas = {"extend": "_uniregistry"} -blackfriday = {"extend": "_uniregistry"} -audio = {"extend": "_uniregistry"} +ZZ["help"] = {"extend": "_uniregistry"} +ZZ["photo"] = {"extend": "_uniregistry"} +ZZ["sexy"] = {"extend": "_uniregistry"} +ZZ["gift"] = {"extend": "_uniregistry"} +ZZ["tattoo"] = {"extend": "_uniregistry"} +ZZ["property"] = {"extend": "_uniregistry"} +ZZ["juegos"] = {"extend": "_uniregistry"} +ZZ["hosting"] = {"extend": "_uniregistry"} +ZZ["guitars"] = {"extend": "_uniregistry"} +ZZ["flowers"] = {"extend": "_uniregistry"} +ZZ["diet"] = {"extend": "_uniregistry"} +ZZ["christmas"] = {"extend": "_uniregistry"} +ZZ["blackfriday"] = {"extend": "_uniregistry"} +ZZ["audio"] = {"extend": "_uniregistry"} # Registry operator: TLD REGISTRY LIMITED. # WHOIS server: whois.teleinfo.cn -_teleinfo = { +ZZ["_teleinfo"] = { "extend": "com", "_server": "whois.teleinfo.cn", } -中文网 = {"extend": "_teleinfo"} -在线 = {"extend": "_teleinfo"} +# we DONT have xn--fiq228c5hs 中文网 (website) fix +ZZ["中文网"] = {"extend": "_teleinfo"} +ZZ["xn--fiq228c5hs"] = {"extend": "_teleinfo"} +# we DONT have xn--3ds443g 在线 (online) fix +ZZ["在线"] = {"extend": "_teleinfo"} +ZZ["xn--3ds443g"] = {"extend": "_teleinfo"} + # RESTRICTED: now known as PrivateRegistry # restricted domains never answer or never show information sufficient for parsing @@ -1903,73 +1891,73 @@ # details can be found at: # (https://www.iana.org/domains/root/db/.html) -_privateReg = { - "_privateRegistry": True, -} - -al = {"extend": "_privateReg"} -az = {"extend": "_privateReg"} -ba = {"extend": "_privateReg"} -ch = {"extend": "_privateReg"} -cv = {"extend": "_privateReg"} # Cape Verde -cw = {"extend": "_privateReg"} -es = {"extend": "_privateReg"} -ga = {"extend": "_privateReg"} -gr = {"extend": "_privateReg"} -hu = {"extend": "_privateReg"} -li = {"extend": "_privateReg"} -mp = {"extend": "_privateReg"} -my = {"extend": "_privateReg"} -pk = {"extend": "_privateReg"} -py = {"extend": "_privateReg"} # Paraguay:https://www.iana.org/domains/root/db/py.html -com_py = {"extend": "_privateReg"} -sr = {"extend": "_privateReg"} -ke = {"extend": "_privateReg"} # Kenia -co_ke = {"extend": "_privateReg"} +ZZ["_privateReg"] = {"_privateRegistry": True} + +ZZ["al"] = {"extend": "_privateReg"} +ZZ["az"] = {"extend": "_privateReg"} +ZZ["ba"] = {"extend": "_privateReg"} +ZZ["ch"] = {"extend": "_privateReg"} +ZZ["cv"] = {"extend": "_privateReg"} # Cape Verde +ZZ["cw"] = {"extend": "_privateReg"} +ZZ["es"] = {"extend": "_privateReg"} +ZZ["ga"] = {"extend": "_privateReg"} +ZZ["gr"] = {"extend": "_privateReg"} +ZZ["hu"] = {"extend": "_privateReg"} +ZZ["li"] = {"extend": "_privateReg"} +ZZ["mp"] = {"extend": "_privateReg"} +ZZ["my"] = {"extend": "_privateReg"} +ZZ["pk"] = {"extend": "_privateReg"} +ZZ["py"] = {"extend": "_privateReg"} # Paraguay:https://www.iana.org/domains/root/db/py.html +ZZ["com.py"] = {"extend": "_privateReg"} +ZZ["sr"] = {"extend": "_privateReg"} +ZZ["ke"] = {"extend": "_privateReg"} # Kenia +ZZ["co.ke"] = {"extend": "_privateReg"} # https://www.iana.org/domains/root/db/td.html # td = {"extend": "_privateReg"} # Chad (French: Tchad) made available for use in 1997. -tk = {"extend": "_privateReg"} -to = {"extend": "_privateReg"} # -uy = {"extend": "_privateReg"} # Uruguay -va = {"extend": "_privateReg"} # This TLD has no whois server. -vu = {"extend": "_privateReg"} # all dates 1970 , no furter relevant info -vn = {"extend": "_privateReg"} +ZZ["tk"] = {"extend": "_privateReg"} +ZZ["to"] = {"extend": "_privateReg"} # +ZZ["uy"] = {"extend": "_privateReg"} # Uruguay +ZZ["va"] = {"extend": "_privateReg"} # This TLD has no whois server. +ZZ["vu"] = {"extend": "_privateReg"} # all dates 1970 , no furter relevant info +ZZ["vn"] = {"extend": "_privateReg"} # -zw = {"extend": "_privateReg"} # Zimbabwe ; # This TLD has no whois server -com_zw = {"extend": "zw"} -org_zw = {"extend": "zw"} +ZZ["zw"] = {"extend": "_privateReg"} # Zimbabwe ; # This TLD has no whois server +ZZ["com.zw"] = {"extend": "zw"} +ZZ["org.zw"] = {"extend": "zw"} # Nepal -np = { +ZZ["np"] = { "extend": "_privateReg" } # This TLD has no whois server, but you can access the whois database at https://www.mos.com.np/ -com_np = {"extend": "np"} +ZZ["com.np"] = {"extend": "np"} # Ecuador -ec = {"extend": "_privateReg"} -com_ec = {"extend": "ec"} -gob_ec = {"extend": "ec"} +ZZ["ec"] = {"extend": "_privateReg"} +ZZ["com.ec"] = {"extend": "ec"} +ZZ["gob.ec"] = {"extend": "ec"} # https://umbrella.cisco.com/blog/on-the-trail-of-malicious-dynamic-dns-domains -hopto_org = {"extend": "_privateReg"} # dynamic dns without any whois -duckdns_org = {"extend": "_privateReg"} # dynamic dns without any whois +ZZ["hopto.org"] = {"extend": "_privateReg"} # dynamic dns without any whois +ZZ["duckdns.org"] = {"extend": "_privateReg"} # dynamic dns without any whois # changeip_com = {"extend": "_privateReg"} # dynamic dns without any whois # dnsdynamic_org = {"extend": "_privateReg"} # dynamic dns without any whois -noip_com = {"extend": "_privateReg"} # dynamic dns without any whois -noip_org = {"extend": "_privateReg"} # dynamic dns without any whois +ZZ["noip.com"] = {"extend": "_privateReg"} # dynamic dns without any whois +ZZ["noip.org"] = {"extend": "_privateReg"} # dynamic dns without any whois # freedns_afraid_org = {"extend": "_privateReg"} # dynamic dns without any whois # dyndns_com = {"extend": "_privateReg"} # dynamic dns without any whois # sitelutions_com = {"extend": "_privateReg"} # dynamic dns without any whois # 3322_org = {"extend": "_privateReg"} # dynamic dns without any whois # https://en.wikipedia.org/wiki/.onion, a "official" fake domain -onion = {"extend": "_privateReg"} +# https://www.rfc-editor.org/rfc/rfc7686.html +# .onion names are used to provide access to end to end encrypted, secure, anonymized services; +ZZ["onion"] = {"extend": "_privateReg"} # backend registry for domain names ending in GG, JE, and AS. # lines may have \r actually before \n , updated all 3 domains return all nameservers -gg = { +ZZ["gg"] = { "domain_name": r"Domain:\s*\n\s+(.+)", "status": r"Domain Status:\s*\n\s+(.+)", "registrar": r"Registrar:\s*\n\s+(.+)", @@ -1980,10 +1968,10 @@ "registrant_country": None, } -as_ = {"extend": "gg"} -je = {"extend": "gg"} +ZZ["as"] = {"extend": "gg"} +ZZ["je"] = {"extend": "gg"} -sn = { +ZZ["sn"] = { "_server": "whois.nic.sn", "domain_name": r"Nom de domaine:\s+(.+)", "status": r"Statut:\s+(.+)", @@ -1995,7 +1983,7 @@ "registrant_country": None, } -si = { +ZZ["si"] = { "domain_name": r"domain:\s+(.+)", "status": r"status:\s+(.+)", "registrar": r"registrar:\s+(.+)", @@ -2006,23 +1994,23 @@ "registrant_country": None, } -do = {"extend": "_privateReg"} -com_do = {"extend": "_privateReg"} -cx = {"extend": "com"} -dz = {"extend": "_privateReg"} -gd = {"extend": "com"} -mn = {"extend": "com"} -tl = {"extend": "com"} -gay = {"extend": "com", "_server": "whois.nic.gay"} -tt = {"extend": "_privateReg"} -mo = { +ZZ["do"] = {"extend": "_privateReg"} +ZZ["com.do"] = {"extend": "_privateReg"} +ZZ["cx"] = {"extend": "com"} +ZZ["dz"] = {"extend": "_privateReg"} +ZZ["gd"] = {"extend": "com"} +ZZ["mn"] = {"extend": "com"} +ZZ["tl"] = {"extend": "com"} +ZZ["gay"] = {"extend": "com", "_server": "whois.nic.gay"} +ZZ["tt"] = {"extend": "_privateReg"} +ZZ["mo"] = { "extend": "com", "creation_date": r"created on\s+(.+)", "expiration_date": r"expires on\s+(.+)", "name_servers": r"Domain name servers:\s*\-+(?:\s*(\S+)\n)(?:\s*(\S+)\n)?(?:\s*(\S+)\n)?(?:\s*(\S+)\n)?", } -com_mo = {"extend": "mo"} -st = { +ZZ["com.mo"] = {"extend": "mo"} +ZZ["st"] = { # .ST domains can now be registered with many different competing registrars. and hence different formats # >>> line appears quite early, valid info after would have been suppressed with the ^>>> cleanup rule: switched off "extend": "com", @@ -2030,31 +2018,31 @@ "registrant": r"registrant-organi(?:s|z)ation:\s*(.+)\r?\n", } -so = {"extend": "com"} -nrw = {"extend": "com"} -lat = {"extend": "com"} -realestate = {"_server": "whois.nic.realestate", "extend": "com"} -ph = {"extend": "_privateReg"} -com_ph = {"extend": "ph"} -org_ph = {"extend": "ph"} -net_ph = {"extend": "ph"} -zm = {"extend": "com"} -sy = {"extend": "_privateReg", "_server": "whois.tld.sy"} -tr = {"extend": "_privateReg"} -onl = {"extend": "com"} -blue = {"extend": "com"} -garden = {"extend": "com", "_server": "whois.nic.garden"} -promo = {"extend": "com", "_server": "whois.nic.promo"} +ZZ["so"] = {"extend": "com"} +ZZ["nrw"] = {"extend": "com"} +ZZ["lat"] = {"extend": "com"} +ZZ["realestate"] = {"_server": "whois.nic.realestate", "extend": "com"} +ZZ["ph"] = {"extend": "_privateReg"} +ZZ["com.ph"] = {"extend": "ph"} +ZZ["org.ph"] = {"extend": "ph"} +ZZ["net.ph"] = {"extend": "ph"} +ZZ["zm"] = {"extend": "com"} +ZZ["sy"] = {"extend": "_privateReg", "_server": "whois.tld.sy"} +ZZ["tr"] = {"extend": "_privateReg"} +ZZ["onl"] = {"extend": "com"} +ZZ["blue"] = {"extend": "com"} +ZZ["garden"] = {"extend": "com", "_server": "whois.nic.garden"} +ZZ["promo"] = {"extend": "com", "_server": "whois.nic.promo"} -pyc_ = {"extend": "com"} +ZZ["pyc"] = {"extend": "com"} -mn = {"extend": "com", "_server": "whois.nic.mn"} +ZZ["mn"] = {"extend": "com", "_server": "whois.nic.mn"} -africa = {"extend": "com", "_server": "whois.nic.africa"} +ZZ["africa"] = {"extend": "com", "_server": "whois.nic.africa"} -green = {"extend": "com"} +ZZ["green"] = {"extend": "com"} -mk = { +ZZ["mk"] = { "extend": None, "_server": "whois.marnet.mk", "domain_name": r"domain:\s?(.+)", @@ -2072,18 +2060,18 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -observer = {"extend": "com", "_server": "whois.nic.observer"} -one = {"extend": "com", "_server": "whois.nic.one"} -page = {"extend": "com", "_server": "whois.nic.google"} +ZZ["observer"] = {"extend": "com", "_server": "whois.nic.observer"} +ZZ["one"] = {"extend": "com", "_server": "whois.nic.one"} +ZZ["page"] = {"extend": "com", "_server": "whois.nic.google"} -bf = { +ZZ["bf"] = { "extend": "com", "_server": "whois.nic.bf", "registrant": r"Registrant Name:\s?(.+)", } -bz = {"extend": "_privateReg"} +ZZ["bz"] = {"extend": "_privateReg"} -si = { +ZZ["si"] = { "extend": None, "_server": "whois.register.si", "domain_name": r"domain:\s?(.+)", @@ -2101,9 +2089,9 @@ "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", } -sx = {"extend": "com", "_server": "whois.sx"} +ZZ["sx"] = {"extend": "com", "_server": "whois.sx"} -tc = { +ZZ["tc"] = { "extend": "com", "_server": "whois.nic.tc", "domain_name": r"Domain Name:\s?(.+)", @@ -2114,7 +2102,7 @@ "status": r"Domain Status:\s?(.+)", } -wf = { +ZZ["wf"] = { "extend": "com", "_server": "whois.nic.wf", "domain_name": r"domain:\s?(.+)", @@ -2128,11 +2116,11 @@ "status": r"\nstatus:\s?(.+)", } -lk = {"extend": "_privateReg"} # Sri Lanka, whois.nic.lk exists but does not answer -eg = {"extend": "_privateReg"} # Egipt -com_eg = {"extend": "_privateReg"} # Egipt +ZZ["lk"] = {"extend": "_privateReg"} # Sri Lanka, whois.nic.lk exists but does not answer +ZZ["eg"] = {"extend": "_privateReg"} # Egipt +ZZ["com.eg"] = {"extend": "_privateReg"} # Egipt -mo = { +ZZ["mo"] = { "extend": "com", "_server": "whois.monic.mo", "name_servers": r"Domain name servers:\s+-+\s+(\S+)\n(?:(\S+)\n)?(?:(\S+)\n)?(?:(\S+)\n)?", @@ -2140,7 +2128,533 @@ "expiration_date": r"Record expires on (.+)", } -ph = {"extend": "_privateReg"} - -vc = {"extend": "com"} -cm = {"extend": "com"} +ZZ["ph"] = {"extend": "_privateReg"} + +ZZ["vc"] = {"extend": "com"} +ZZ["cm"] = {"extend": "com"} + +# russian speaking community +ZZ["xn--p1acf"] = {"extend": "ru", "_server": "whois.nic.xn--p1acf"} +ZZ["РУС"] = {"extend": "ru", "_server": "whois.nic.xn--p1acf"} +ZZ["рус"] = {"extend": "ru", "_server": "whois.nic.xn--p1acf"} + +ZZ["vig"] = {"extend": "com", "_server": "whois.afilias-srs.net"} + +# autodetect via compare_known_tld.py via IANA tld list and https://github.com/jophy/iana_tld_list +ZZ["aarp"] = {"_server": "whois.nic.aarp", "extend": "com"} +ZZ["abbvie"] = {"_server": "whois.nic.abbvie", "extend": "com"} +ZZ["abc"] = {"_server": "whois.nic.abc", "extend": "com"} +ZZ["abogado"] = {"_server": "whois.nic.abogado", "extend": "com"} +ZZ["abudhabi"] = {"_server": "whois.nic.abudhabi", "extend": "com"} +ZZ["aco"] = {"_server": "whois.nic.aco", "extend": "com"} +ZZ["adult"] = {"_server": "whois.nic.adult", "extend": "com"} +ZZ["aeg"] = {"_server": "whois.nic.aeg", "extend": "com"} +ZZ["afl"] = {"_server": "whois.nic.afl", "extend": "com"} +ZZ["airbus"] = {"_server": "whois.nic.airbus", "extend": "com"} +ZZ["airtel"] = {"_server": "whois.nic.airtel", "extend": "com"} +ZZ["alibaba"] = {"_server": "whois.nic.alibaba", "extend": "com"} +ZZ["alipay"] = {"_server": "whois.nic.alipay", "extend": "com"} +ZZ["allfinanz"] = {"_server": "whois.nic.allfinanz", "extend": "com"} +ZZ["ally"] = {"_server": "whois.nic.ally", "extend": "com"} +ZZ["alsace"] = {"_server": "whois.nic.alsace", "extend": "com"} +ZZ["alstom"] = {"_server": "whois.nic.alstom", "extend": "com"} +ZZ["amazon"] = {"_server": "whois.nic.amazon", "extend": "com"} +ZZ["americanfamily"] = {"_server": "whois.nic.americanfamily", "extend": "com"} +ZZ["anz"] = {"_server": "whois.nic.anz", "extend": "com"} +ZZ["aol"] = {"_server": "whois.nic.aol", "extend": "com"} +ZZ["aquarelle"] = {"_server": "whois.nic.aquarelle", "extend": "com"} +ZZ["arab"] = {"_server": "whois.nic.arab", "extend": "com"} +ZZ["archi"] = {"_server": "whois.nic.archi", "extend": "com"} +ZZ["arte"] = {"_server": "whois.nic.arte", "extend": "com"} +ZZ["asda"] = {"_server": "whois.nic.asda", "extend": "com"} +ZZ["audible"] = {"_server": "whois.nic.audible", "extend": "com"} +ZZ["auspost"] = {"_server": "whois.nic.auspost", "extend": "com"} +ZZ["author"] = {"_server": "whois.nic.author", "extend": "com"} +ZZ["aws"] = {"_server": "whois.nic.aws", "extend": "com"} +ZZ["barcelona"] = {"_server": "whois.nic.barcelona", "extend": "com"} +ZZ["barclaycard"] = {"_server": "whois.nic.barclaycard", "extend": "com"} +ZZ["barclays"] = {"_server": "whois.nic.barclays", "extend": "com"} +ZZ["barefoot"] = {"_server": "whois.nic.barefoot", "extend": "com"} +ZZ["basketball"] = {"_server": "whois.nic.basketball", "extend": "com"} +ZZ["bauhaus"] = {"_server": "whois.nic.bauhaus", "extend": "com"} +ZZ["bayern"] = {"_server": "whois.nic.bayern", "extend": "com"} +ZZ["bbc"] = {"_server": "whois.nic.bbc", "extend": "com"} +ZZ["bbt"] = {"_server": "whois.nic.bbt", "extend": "com"} +ZZ["bbva"] = {"_server": "whois.nic.bbva", "extend": "com"} +ZZ["bcg"] = {"_server": "whois.nic.bcg", "extend": "com"} +ZZ["bcn"] = {"_server": "whois.nic.bcn", "extend": "com"} +ZZ["beer"] = {"_server": "whois.nic.beer", "extend": "com"} +ZZ["bentley"] = {"_server": "whois.nic.bentley", "extend": "com"} +ZZ["berlin"] = {"_server": "whois.nic.berlin", "extend": "com"} +ZZ["bestbuy"] = {"_server": "whois.nic.bestbuy", "extend": "com"} +ZZ["bi"] = {"_server": "whois1.nic.bi", "extend": "com"} +ZZ["bible"] = {"_server": "whois.nic.bible", "extend": "com"} +ZZ["bio"] = {"_server": "whois.nic.bio", "extend": "com"} +ZZ["black"] = {"_server": "whois.nic.black", "extend": "com"} +ZZ["blockbuster"] = {"_server": "whois.nic.blockbuster", "extend": "com"} +ZZ["bms"] = {"_server": "whois.nic.bms", "extend": "com"} +ZZ["bmw"] = {"_server": "whois.nic.bmw", "extend": "com"} +ZZ["bofa"] = {"_server": "whois.nic.bofa", "extend": "com"} +ZZ["boo"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["book"] = {"_server": "whois.nic.book", "extend": "com"} +ZZ["bosch"] = {"_server": "whois.nic.bosch", "extend": "com"} +ZZ["bostik"] = {"_server": "whois.nic.bostik", "extend": "com"} +ZZ["boston"] = {"_server": "whois.nic.boston", "extend": "com"} +ZZ["bot"] = {"_server": "whois.nic.bot", "extend": "com"} +ZZ["box"] = {"_server": "whois.nic.box", "extend": "com"} +ZZ["bradesco"] = {"_server": "whois.nic.bradesco", "extend": "com"} +ZZ["bridgestone"] = {"_server": "whois.nic.bridgestone", "extend": "com"} +ZZ["broadway"] = {"_server": "whois.nic.broadway", "extend": "com"} +ZZ["broker"] = {"_server": "whois.nic.broker", "extend": "com"} +ZZ["brother"] = {"_server": "whois.nic.brother", "extend": "com"} +ZZ["brussels"] = {"_server": "whois.nic.brussels", "extend": "com"} +ZZ["buy"] = {"_server": "whois.nic.buy", "extend": "com"} +ZZ["call"] = {"_server": "whois.nic.call", "extend": "com"} +ZZ["canon"] = {"_server": "whois.nic.canon", "extend": "com"} +ZZ["capetown"] = {"_server": "whois.nic.capetown", "extend": "com"} +ZZ["capitalone"] = {"_server": "whois.nic.capitalone", "extend": "com"} +ZZ["career"] = {"_server": "whois.nic.career", "extend": "com"} +ZZ["case"] = {"_server": "whois.nic.case", "extend": "com"} +ZZ["catholic"] = {"_server": "whois.nic.catholic", "extend": "com"} +ZZ["cba"] = {"_server": "whois.nic.cba", "extend": "com"} +ZZ["cfa"] = {"_server": "whois.nic.cfa", "extend": "com"} +ZZ["chanel"] = {"_server": "whois.nic.chanel", "extend": "com"} +ZZ["channel"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["chintai"] = {"_server": "whois.nic.chintai", "extend": "com"} +ZZ["ci"] = {"_server": "whois.nic.ci", "extend": "com"} +ZZ["circle"] = {"_server": "whois.nic.circle", "extend": "com"} +ZZ["cityeats"] = {"_server": "whois.nic.cityeats", "extend": "com"} +ZZ["clinique"] = {"_server": "whois.nic.clinique", "extend": "com"} +ZZ["clubmed"] = {"_server": "whois.nic.clubmed", "extend": "com"} +ZZ["cologne"] = {"_server": "whois.ryce-rsp.com", "extend": "com"} +ZZ["comcast"] = {"_server": "whois.nic.comcast", "extend": "com"} +ZZ["commbank"] = {"_server": "whois.nic.commbank", "extend": "com"} +ZZ["compare"] = {"_server": "whois.nic.compare", "extend": "com"} +ZZ["comsec"] = {"_server": "whois.nic.comsec", "extend": "com"} +ZZ["cooking"] = {"_server": "whois.nic.cooking", "extend": "com"} +ZZ["cookingchannel"] = {"_server": "whois.nic.cookingchannel", "extend": "com"} +ZZ["corsica"] = {"_server": "whois.nic.corsica", "extend": "com"} +ZZ["country"] = {"_server": "whois.nic.country", "extend": "com"} +ZZ["cpa"] = {"_server": "whois.nic.cpa", "extend": "com"} +ZZ["cruise"] = {"_server": "whois.nic.cruise", "extend": "com"} +ZZ["cuisinella"] = {"_server": "whois.nic.cuisinella", "extend": "com"} +ZZ["cymru"] = {"_server": "whois.nic.cymru", "extend": "com"} +ZZ["data"] = {"_server": "whois.nic.data", "extend": "com"} +ZZ["day"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["dds"] = {"_server": "whois.nic.dds", "extend": "com"} +ZZ["deal"] = {"_server": "whois.nic.deal", "extend": "com"} +ZZ["deloitte"] = {"_server": "whois.nic.deloitte", "extend": "com"} +ZZ["delta"] = {"_server": "whois.nic.delta", "extend": "com"} +ZZ["dish"] = {"_server": "whois.nic.dish", "extend": "com"} +ZZ["diy"] = {"_server": "whois.nic.diy", "extend": "com"} +ZZ["dm"] = {"_server": "whois.dmdomains.dm", "extend": "com"} +ZZ["dnp"] = {"_server": "whois.nic.dnp", "extend": "com"} +ZZ["dot"] = {"_server": "whois.nic.dot", "extend": "com"} +ZZ["dtv"] = {"_server": "whois.nic.dtv", "extend": "com"} +ZZ["dubai"] = {"_server": "whois.nic.dubai", "extend": "com"} +ZZ["dunlop"] = {"_server": "whois.nic.dunlop", "extend": "com"} +ZZ["durban"] = {"_server": "whois.nic.durban", "extend": "com"} +ZZ["dvag"] = {"_server": "whois.nic.dvag", "extend": "com"} +ZZ["dvr"] = {"_server": "whois.nic.dvr", "extend": "com"} +ZZ["earth"] = {"_server": "whois.nic.earth", "extend": "com"} +ZZ["eco"] = {"_server": "whois.nic.eco", "extend": "com"} +ZZ["epson"] = {"_server": "whois.nic.epson", "extend": "com"} +ZZ["ericsson"] = {"_server": "whois.nic.ericsson", "extend": "com"} +ZZ["erni"] = {"_server": "whois.nic.erni", "extend": "com"} +ZZ["eurovision"] = {"_server": "whois.nic.eurovision", "extend": "com"} +ZZ["fairwinds"] = {"_server": "whois.nic.fairwinds", "extend": "com"} +ZZ["fast"] = {"_server": "whois.nic.fast", "extend": "com"} +ZZ["fedex"] = {"_server": "whois.nic.fedex", "extend": "com"} +ZZ["ferrari"] = {"_server": "whois.nic.ferrari", "extend": "com"} +ZZ["fidelity"] = {"_server": "whois.nic.fidelity", "extend": "com"} +ZZ["film"] = {"_server": "whois.nic.film", "extend": "com"} +ZZ["fire"] = {"_server": "whois.nic.fire", "extend": "com"} +ZZ["firestone"] = {"_server": "whois.nic.firestone", "extend": "com"} +ZZ["firmdale"] = {"_server": "whois.nic.firmdale", "extend": "com"} +ZZ["fishing"] = {"_server": "whois.nic.fishing", "extend": "com"} +ZZ["foodnetwork"] = {"_server": "whois.nic.foodnetwork", "extend": "com"} +ZZ["forex"] = {"_server": "whois.nic.forex", "extend": "com"} +ZZ["fox"] = {"_server": "whois.nic.fox", "extend": "com"} +ZZ["free"] = {"_server": "whois.nic.free", "extend": "com"} +ZZ["fresenius"] = {"_server": "whois.nic.fresenius", "extend": "com"} +ZZ["frogans"] = {"_server": "whois.nic.frogans", "extend": "com"} +ZZ["frontdoor"] = {"_server": "whois.nic.frontdoor", "extend": "com"} +ZZ["gal"] = {"_server": "whois.nic.gal", "extend": "com"} +ZZ["gallo"] = {"_server": "whois.nic.gallo", "extend": "com"} +ZZ["gallup"] = {"_server": "whois.nic.gallup", "extend": "com"} +ZZ["gdn"] = {"_server": "whois.nic.gdn", "extend": "com"} +ZZ["gea"] = {"_server": "whois.nic.gea", "extend": "com"} +ZZ["genting"] = {"_server": "whois.nic.genting", "extend": "com"} +ZZ["george"] = {"_server": "whois.nic.george", "extend": "com"} +ZZ["ggee"] = {"_server": "whois.nic.ggee", "extend": "com"} +ZZ["giving"] = {"_server": "whois.nic.giving", "extend": "com"} +ZZ["gl"] = {"_server": "whois.nic.gl", "extend": "com"} +ZZ["gmo"] = {"_server": "whois.nic.gmo", "extend": "com"} +ZZ["gmx"] = {"_server": "whois.nic.gmx", "extend": "com"} +ZZ["godaddy"] = {"_server": "whois.nic.godaddy", "extend": "com"} +ZZ["goldpoint"] = {"_server": "whois.nic.goldpoint", "extend": "com"} +ZZ["goodyear"] = {"_server": "whois.nic.goodyear", "extend": "com"} +ZZ["google"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["gop"] = {"_server": "whois.nic.gop", "extend": "com"} +ZZ["got"] = {"_server": "whois.nic.got", "extend": "com"} +ZZ["gs"] = {"_server": "whois.nic.gs", "extend": "com"} +ZZ["gucci"] = {"_server": "whois.nic.gucci", "extend": "com"} +ZZ["hamburg"] = {"_server": "whois.nic.hamburg", "extend": "com"} +ZZ["hdfc"] = {"_server": "whois.nic.hdfc", "extend": "com"} +ZZ["hdfcbank"] = {"_server": "whois.nic.hdfcbank", "extend": "com"} +ZZ["helsinki"] = {"_server": "whois.nic.helsinki", "extend": "com"} +ZZ["hgtv"] = {"_server": "whois.nic.hgtv", "extend": "com"} +ZZ["hiv"] = {"_server": "whois.nic.hiv", "extend": "com"} +ZZ["hkt"] = {"_server": "whois.nic.hkt", "extend": "com"} +ZZ["homedepot"] = {"_server": "whois.nic.homedepot", "extend": "com"} +ZZ["honda"] = {"_server": "whois.nic.honda", "extend": "com"} +ZZ["horse"] = {"_server": "whois.nic.horse", "extend": "com"} +ZZ["hot"] = {"_server": "whois.nic.hot", "extend": "com"} +ZZ["how"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["ht"] = {"_server": "whois.nic.ht", "extend": "com"} +ZZ["hughes"] = {"_server": "whois.nic.hughes", "extend": "com"} +ZZ["hyundai"] = {"_server": "whois.nic.hyundai", "extend": "com"} +ZZ["ibm"] = {"_server": "whois.nic.ibm", "extend": "com"} +ZZ["icbc"] = {"_server": "whois.nic.icbc", "extend": "com"} +ZZ["ice"] = {"_server": "whois.nic.ice", "extend": "com"} +ZZ["ifm"] = {"_server": "whois.nic.ifm", "extend": "com"} +ZZ["ikano"] = {"_server": "whois.nic.ikano", "extend": "com"} +ZZ["imdb"] = {"_server": "whois.nic.imdb", "extend": "com"} +ZZ["insurance"] = {"_server": "whois.nic.insurance", "extend": "com"} +ZZ["ist"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["istanbul"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["jaguar"] = {"_server": "whois.nic.jaguar", "extend": "com"} +ZZ["java"] = {"_server": "whois.nic.java", "extend": "com"} +ZZ["jio"] = {"_server": "whois.nic.jio", "extend": "com"} +ZZ["jobs"] = {"_server": "whois.nic.jobs", "extend": "com"} +ZZ["joburg"] = {"_server": "whois.nic.joburg", "extend": "com"} +ZZ["jot"] = {"_server": "whois.nic.jot", "extend": "com"} +ZZ["joy"] = {"_server": "whois.nic.joy", "extend": "com"} +ZZ["juniper"] = {"_server": "whois.nic.juniper", "extend": "com"} +ZZ["kddi"] = {"_server": "whois.nic.kddi", "extend": "com"} +ZZ["kerryhotels"] = {"_server": "whois.nic.kerryhotels", "extend": "com"} +ZZ["kerrylogistics"] = {"_server": "whois.nic.kerrylogistics", "extend": "com"} +ZZ["kerryproperties"] = {"_server": "whois.nic.kerryproperties", "extend": "com"} +ZZ["kfh"] = {"_server": "whois.nic.kfh", "extend": "com"} +ZZ["kia"] = {"_server": "whois.nic.kia", "extend": "com"} +ZZ["kids"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["kim"] = {"_server": "whois.nic.kim", "extend": "com"} +ZZ["kindle"] = {"_server": "whois.nic.kindle", "extend": "com"} +ZZ["koeln"] = {"_server": "whois.ryce-rsp.com", "extend": "com"} +ZZ["komatsu"] = {"_server": "whois.nic.komatsu", "extend": "com"} +ZZ["kosher"] = {"_server": "whois.nic.kosher", "extend": "com"} +ZZ["krd"] = {"_server": "whois.nic.krd", "extend": "com"} +ZZ["kuokgroup"] = {"_server": "whois.nic.kuokgroup", "extend": "com"} +ZZ["ky"] = {"_server": "whois.kyregistry.ky", "extend": "com"} +ZZ["kyoto"] = {"_server": "whois.nic.kyoto", "extend": "com"} +ZZ["lacaixa"] = {"_server": "whois.nic.lacaixa", "extend": "com"} +ZZ["lamer"] = {"_server": "whois.nic.lamer", "extend": "com"} +ZZ["lancaster"] = {"_server": "whois.nic.lancaster", "extend": "com"} +ZZ["landrover"] = {"_server": "whois.nic.landrover", "extend": "com"} +ZZ["latino"] = {"_server": "whois.nic.latino", "extend": "com"} +ZZ["latrobe"] = {"_server": "whois.nic.latrobe", "extend": "com"} +ZZ["law"] = {"_server": "whois.nic.law", "extend": "com"} +ZZ["lb"] = {"_server": "whois.lbdr.org.lb", "extend": "com"} +ZZ["lds"] = {"_server": "whois.nic.lds", "extend": "com"} +ZZ["leclerc"] = {"_server": "whois.nic.leclerc", "extend": "com"} +ZZ["lefrak"] = {"_server": "whois.nic.lefrak", "extend": "com"} +ZZ["lego"] = {"_server": "whois.nic.lego", "extend": "com"} +ZZ["lexus"] = {"_server": "whois.nic.lexus", "extend": "com"} +ZZ["lgbt"] = {"_server": "whois.nic.lgbt", "extend": "com"} +ZZ["lidl"] = {"_server": "whois.nic.lidl", "extend": "com"} +ZZ["lifestyle"] = {"_server": "whois.nic.lifestyle", "extend": "com"} +ZZ["like"] = {"_server": "whois.nic.like", "extend": "com"} +ZZ["linde"] = {"_server": "whois.nic.linde", "extend": "com"} +ZZ["lipsy"] = {"_server": "whois.nic.lipsy", "extend": "com"} +ZZ["llc"] = {"_server": "whois.nic.llc", "extend": "com"} +ZZ["llp"] = {"_server": "whois.nic.llp", "extend": "com"} +ZZ["locker"] = {"_server": "whois.nic.locker", "extend": "com"} +ZZ["locus"] = {"_server": "whois.nic.locus", "extend": "com"} +ZZ["lotte"] = {"_server": "whois.nic.lotte", "extend": "com"} +ZZ["lotto"] = {"_server": "whois.nic.lotto", "extend": "com"} +ZZ["lpl"] = {"_server": "whois.nic.lpl", "extend": "com"} +ZZ["ltda"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["lundbeck"] = {"_server": "whois.nic.lundbeck", "extend": "com"} +ZZ["luxe"] = {"_server": "whois.nic.luxe", "extend": "com"} +ZZ["macys"] = {"_server": "whois.nic.macys", "extend": "com"} +ZZ["madrid"] = {"_server": "whois.nic.madrid", "extend": "com"} +ZZ["man"] = {"_server": "whois.nic.man", "extend": "com"} +ZZ["mango"] = {"_server": "whois.nic.mango", "extend": "com"} +ZZ["markets"] = {"_server": "whois.nic.markets", "extend": "com"} +ZZ["maserati"] = {"_server": "whois.nic.maserati", "extend": "com"} +ZZ["mckinsey"] = {"_server": "whois.nic.mckinsey", "extend": "com"} +ZZ["med"] = {"_server": "whois.nic.med", "extend": "com"} +ZZ["melbourne"] = {"_server": "whois.nic.melbourne", "extend": "com"} +ZZ["men"] = {"_server": "whois.nic.men", "extend": "com"} +ZZ["menu"] = {"_server": "whois.nic.menu", "extend": "com"} +ZZ["miami"] = {"_server": "whois.nic.miami", "extend": "com"} +ZZ["mini"] = {"_server": "whois.nic.mini", "extend": "com"} +ZZ["mls"] = {"_server": "whois.nic.mls", "extend": "com"} +ZZ["mma"] = {"_server": "whois.nic.mma", "extend": "com"} +ZZ["mobile"] = {"_server": "whois.nic.mobile", "extend": "com"} +ZZ["moi"] = {"_server": "whois.nic.moi", "extend": "com"} +ZZ["mom"] = {"_server": "whois.nic.mom", "extend": "com"} +ZZ["monash"] = {"_server": "whois.nic.monash", "extend": "com"} +ZZ["mormon"] = {"_server": "whois.nic.mormon", "extend": "com"} +ZZ["moscow"] = {"_server": "whois.nic.moscow", "extend": "com"} +ZZ["mr"] = {"_server": "whois.nic.mr", "extend": "com"} +ZZ["ms"] = {"_server": "whois.nic.ms", "extend": "com"} +ZZ["mtn"] = {"_server": "whois.nic.mtn", "extend": "com"} +ZZ["mtr"] = {"_server": "whois.nic.mtr", "extend": "com"} +ZZ["museum"] = {"_server": "whois.nic.museum", "extend": "com"} +ZZ["music"] = {"_server": "whois.nic.music", "extend": "com"} +ZZ["mz"] = {"_server": "whois.nic.mz", "extend": "com"} +ZZ["na"] = {"_server": "whois.na-nic.com.na", "extend": "com"} +ZZ["nab"] = {"_server": "whois.nic.nab", "extend": "com"} +ZZ["nagoya"] = {"_server": "whois.nic.nagoya", "extend": "com"} +ZZ["nec"] = {"_server": "whois.nic.nec", "extend": "com"} +ZZ["netbank"] = {"_server": "whois.nic.netbank", "extend": "com"} +ZZ["new"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["next"] = {"_server": "whois.nic.next", "extend": "com"} +ZZ["nextdirect"] = {"_server": "whois.nic.nextdirect", "extend": "com"} +ZZ["nf"] = {"_server": "whois.nic.nf", "extend": "com"} +ZZ["ngo"] = {"_server": "whois.nic.ngo", "extend": "com"} +ZZ["nhk"] = {"_server": "whois.nic.nhk", "extend": "com"} +ZZ["nico"] = {"_server": "whois.nic.nico", "extend": "com"} +ZZ["nikon"] = {"_server": "whois.nic.nikon", "extend": "com"} +ZZ["nissay"] = {"_server": "whois.nic.nissay", "extend": "com"} +ZZ["norton"] = {"_server": "whois.nic.norton", "extend": "com"} +ZZ["now"] = {"_server": "whois.nic.now", "extend": "com"} +ZZ["nowruz"] = {"_server": "whois.nic.nowruz", "extend": "com"} +ZZ["nowtv"] = {"_server": "whois.nic.nowtv", "extend": "com"} +ZZ["obi"] = {"_server": "whois.nic.obi", "extend": "com"} +ZZ["olayan"] = {"_server": "whois.nic.olayan", "extend": "com"} +ZZ["olayangroup"] = {"_server": "whois.nic.olayangroup", "extend": "com"} +ZZ["ollo"] = {"_server": "whois.nic.ollo", "extend": "com"} +ZZ["om"] = {"_server": "whois.registry.om", "extend": "com"} +ZZ["omega"] = {"_server": "whois.nic.omega", "extend": "com"} +ZZ["oracle"] = {"_server": "whois.nic.oracle", "extend": "com"} +ZZ["orange"] = {"_server": "whois.nic.orange", "extend": "com"} +ZZ["organic"] = {"_server": "whois.nic.organic", "extend": "com"} +ZZ["origins"] = {"_server": "whois.nic.origins", "extend": "com"} +ZZ["osaka"] = {"_server": "whois.nic.osaka", "extend": "com"} +ZZ["otsuka"] = {"_server": "whois.nic.otsuka", "extend": "com"} +ZZ["ott"] = {"_server": "whois.nic.ott", "extend": "com"} +ZZ["paris"] = {"_server": "whois.nic.paris", "extend": "com"} +ZZ["pars"] = {"_server": "whois.nic.pars", "extend": "com"} +ZZ["pay"] = {"_server": "whois.nic.pay", "extend": "com"} +ZZ["pccw"] = {"_server": "whois.nic.pccw", "extend": "com"} +ZZ["philips"] = {"_server": "whois.nic.philips", "extend": "com"} +ZZ["phone"] = {"_server": "whois.nic.phone", "extend": "com"} +ZZ["physio"] = {"_server": "whois.nic.physio", "extend": "com"} +ZZ["pid"] = {"_server": "whois.nic.pid", "extend": "com"} +ZZ["pin"] = {"_server": "whois.nic.pin", "extend": "com"} +ZZ["pink"] = {"_server": "whois.nic.pink", "extend": "com"} +ZZ["pioneer"] = {"_server": "whois.nic.pioneer", "extend": "com"} +ZZ["playstation"] = {"_server": "whois.nic.playstation", "extend": "com"} +ZZ["pnc"] = {"_server": "whois.nic.pnc", "extend": "com"} +ZZ["pohl"] = {"_server": "whois.nic.pohl", "extend": "com"} +ZZ["poker"] = {"_server": "whois.nic.poker", "extend": "com"} +ZZ["politie"] = {"_server": "whois.nic.politie", "extend": "com"} +ZZ["porn"] = {"_server": "whois.nic.porn", "extend": "com"} +ZZ["pr"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["prime"] = {"_server": "whois.nic.prime", "extend": "com"} +ZZ["qa"] = {"_server": "whois.registry.qa", "extend": "com"} +ZZ["quebec"] = {"_server": "whois.nic.quebec", "extend": "com"} +ZZ["read"] = {"_server": "whois.nic.read", "extend": "com"} +ZZ["realty"] = {"_server": "whois.nic.realty", "extend": "com"} +ZZ["redstone"] = {"_server": "whois.nic.redstone", "extend": "com"} +ZZ["reliance"] = {"_server": "whois.nic.reliance", "extend": "com"} +ZZ["rexroth"] = {"_server": "whois.nic.rexroth", "extend": "com"} +ZZ["rich"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["richardli"] = {"_server": "whois.nic.richardli", "extend": "com"} +ZZ["ricoh"] = {"_server": "whois.nic.ricoh", "extend": "com"} +ZZ["ril"] = {"_server": "whois.nic.ril", "extend": "com"} +ZZ["rodeo"] = {"_server": "whois.nic.rodeo", "extend": "com"} +ZZ["room"] = {"_server": "whois.nic.room", "extend": "com"} +ZZ["rsvp"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["rugby"] = {"_server": "whois.nic.rugby", "extend": "com"} +ZZ["ruhr"] = {"_server": "whois.nic.ruhr", "extend": "com"} +ZZ["rwe"] = {"_server": "whois.nic.rwe", "extend": "com"} +ZZ["safe"] = {"_server": "whois.nic.safe", "extend": "com"} +ZZ["safety"] = {"_server": "whois.nic.safety", "extend": "com"} +ZZ["samsclub"] = {"_server": "whois.nic.samsclub", "extend": "com"} +ZZ["samsung"] = {"_server": "whois.nic.samsung", "extend": "com"} +ZZ["sandvik"] = {"_server": "whois.nic.sandvik", "extend": "com"} +ZZ["sandvikcoromant"] = {"_server": "whois.nic.sandvikcoromant", "extend": "com"} +ZZ["sanofi"] = {"_server": "whois.nic.sanofi", "extend": "com"} +ZZ["sap"] = {"_server": "whois.nic.sap", "extend": "com"} +ZZ["save"] = {"_server": "whois.nic.save", "extend": "com"} +ZZ["saxo"] = {"_server": "whois.nic.saxo", "extend": "com"} +ZZ["sbi"] = {"_server": "whois.nic.sbi", "extend": "com"} +ZZ["sc"] = {"_server": "whois2.afilias-grs.net", "extend": "com"} +ZZ["sca"] = {"_server": "whois.nic.sca", "extend": "com"} +ZZ["scb"] = {"_server": "whois.nic.scb", "extend": "com"} +ZZ["schmidt"] = {"_server": "whois.nic.schmidt", "extend": "com"} +ZZ["scholarships"] = {"_server": "whois.nic.scholarships", "extend": "com"} +ZZ["schwarz"] = {"_server": "whois.nic.schwarz", "extend": "com"} +ZZ["scot"] = {"_server": "whois.nic.scot", "extend": "com"} +ZZ["seat"] = {"_server": "whois.nic.seat", "extend": "com"} +ZZ["secure"] = {"_server": "whois.nic.secure", "extend": "com"} +ZZ["seek"] = {"_server": "whois.nic.seek", "extend": "com"} +ZZ["select"] = {"_server": "whois.nic.select", "extend": "com"} +ZZ["seven"] = {"_server": "whois.nic.seven", "extend": "com"} +ZZ["sex"] = {"_server": "whois.nic.sex", "extend": "com"} +ZZ["sfr"] = {"_server": "whois.nic.sfr", "extend": "com"} +ZZ["shangrila"] = {"_server": "whois.nic.shangrila", "extend": "com"} +ZZ["shell"] = {"_server": "whois.nic.shell", "extend": "com"} +ZZ["shia"] = {"_server": "whois.nic.shia", "extend": "com"} +ZZ["shiksha"] = {"_server": "whois.nic.shiksha", "extend": "com"} +ZZ["silk"] = {"_server": "whois.nic.silk", "extend": "com"} +ZZ["sina"] = {"_server": "whois.nic.sina", "extend": "com"} +ZZ["ski"] = {"_server": "whois.nic.ski", "extend": "com"} +ZZ["sky"] = {"_server": "whois.nic.sky", "extend": "com"} +ZZ["sling"] = {"_server": "whois.nic.sling", "extend": "com"} +ZZ["smart"] = {"_server": "whois.nic.smart", "extend": "com"} +ZZ["smile"] = {"_server": "whois.nic.smile", "extend": "com"} +ZZ["sncf"] = {"_server": "whois.nic.sncf", "extend": "com"} +ZZ["sony"] = {"_server": "whois.nic.sony", "extend": "com"} +ZZ["soy"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["spa"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["sport"] = {"_server": "whois.nic.sport", "extend": "com"} +ZZ["spot"] = {"_server": "whois.nic.spot", "extend": "com"} +ZZ["ss"] = {"_server": "whois.nic.ss", "extend": "com"} +ZZ["star"] = {"_server": "whois.nic.star", "extend": "com"} +ZZ["statebank"] = {"_server": "whois.nic.statebank", "extend": "com"} +ZZ["stc"] = {"_server": "whois.nic.stc", "extend": "com"} +ZZ["stcgroup"] = {"_server": "whois.nic.stcgroup", "extend": "com"} +ZZ["stream"] = {"_server": "whois.nic.stream", "extend": "com"} +ZZ["sucks"] = {"_server": "whois.nic.sucks", "extend": "com"} +ZZ["surf"] = {"_server": "whois.nic.surf", "extend": "com"} +ZZ["suzuki"] = {"_server": "whois.nic.suzuki", "extend": "com"} +ZZ["swatch"] = {"_server": "whois.nic.swatch", "extend": "com"} +ZZ["swiss"] = {"_server": "whois.nic.swiss", "extend": "com"} +ZZ["sydney"] = {"_server": "whois.nic.sydney", "extend": "com"} +ZZ["tab"] = {"_server": "whois.nic.tab", "extend": "com"} +ZZ["taipei"] = {"_server": "whois.nic.taipei", "extend": "com"} +ZZ["talk"] = {"_server": "whois.nic.talk", "extend": "com"} +ZZ["taobao"] = {"_server": "whois.nic.taobao", "extend": "com"} +ZZ["tatamotors"] = {"_server": "whois.nic.tatamotors", "extend": "com"} +ZZ["tatar"] = {"_server": "whois.nic.tatar", "extend": "com"} +ZZ["tci"] = {"_server": "whois.nic.tci", "extend": "com"} +ZZ["tdk"] = {"_server": "whois.nic.tdk", "extend": "com"} +ZZ["teva"] = {"_server": "whois.nic.teva", "extend": "com"} +ZZ["thd"] = {"_server": "whois.nic.thd", "extend": "com"} +ZZ["tiaa"] = {"_server": "whois.nic.tiaa", "extend": "com"} +ZZ["tiffany"] = {"_server": "whois.nic.tiffany", "extend": "com"} +ZZ["tirol"] = {"_server": "whois.nic.tirol", "extend": "com"} +ZZ["tmall"] = {"_server": "whois.nic.tmall", "extend": "com"} +ZZ["toray"] = {"_server": "whois.nic.toray", "extend": "com"} +ZZ["toshiba"] = {"_server": "whois.nic.toshiba", "extend": "com"} +ZZ["total"] = {"_server": "whois.nic.total", "extend": "com"} +ZZ["toyota"] = {"_server": "whois.nic.toyota", "extend": "com"} +ZZ["trading"] = {"_server": "whois.nic.trading", "extend": "com"} +ZZ["travelchannel"] = {"_server": "whois.nic.travelchannel", "extend": "com"} +ZZ["trust"] = {"_server": "whois.nic.trust", "extend": "com"} +ZZ["tui"] = {"_server": "whois.nic.tui", "extend": "com"} +ZZ["tunes"] = {"_server": "whois.nic.tunes", "extend": "com"} +ZZ["tushu"] = {"_server": "whois.nic.tushu", "extend": "com"} +ZZ["tvs"] = {"_server": "whois.nic.tvs", "extend": "com"} +ZZ["ubank"] = {"_server": "whois.nic.ubank", "extend": "com"} +ZZ["ubs"] = {"_server": "whois.nic.ubs", "extend": "com"} +ZZ["unicom"] = {"_server": "whois.nic.unicom", "extend": "com"} +ZZ["ups"] = {"_server": "whois.nic.ups", "extend": "com"} +ZZ["vana"] = {"_server": "whois.nic.vana", "extend": "com"} +ZZ["vanguard"] = {"_server": "whois.nic.vanguard", "extend": "com"} +ZZ["vegas"] = {"_server": "whois.nic.vegas", "extend": "com"} +ZZ["verisign"] = {"_server": "whois.nic.verisign", "extend": "com"} +ZZ["versicherung"] = {"_server": "whois.nic.versicherung", "extend": "com"} +ZZ["vg"] = {"_server": "whois.nic.vg", "extend": "com"} +ZZ["virgin"] = {"_server": "whois.nic.virgin", "extend": "com"} +ZZ["visa"] = {"_server": "whois.nic.visa", "extend": "com"} +ZZ["viva"] = {"_server": "whois.nic.viva", "extend": "com"} +ZZ["vlaanderen"] = {"_server": "whois.nic.vlaanderen", "extend": "com"} +ZZ["vodka"] = {"_server": "whois.nic.vodka", "extend": "com"} +ZZ["volvo"] = {"_server": "whois.nic.volvo", "extend": "com"} +ZZ["vote"] = {"_server": "whois.nic.vote", "extend": "com"} +ZZ["voting"] = {"_server": "whois.nic.voting", "extend": "com"} +ZZ["voto"] = {"_server": "whois.nic.voto", "extend": "com"} +ZZ["wales"] = {"_server": "whois.nic.wales", "extend": "com"} +ZZ["walmart"] = {"_server": "whois.nic.walmart", "extend": "com"} +ZZ["walter"] = {"_server": "whois.nic.walter", "extend": "com"} +ZZ["wanggou"] = {"_server": "whois.nic.wanggou", "extend": "com"} +ZZ["watches"] = {"_server": "whois.nic.watches", "extend": "com"} +ZZ["weber"] = {"_server": "whois.nic.weber", "extend": "com"} +ZZ["wed"] = {"_server": "whois.nic.wed", "extend": "com"} +ZZ["wedding"] = {"_server": "whois.nic.wedding", "extend": "com"} +ZZ["weibo"] = {"_server": "whois.nic.weibo", "extend": "com"} +ZZ["whoswho"] = {"_server": "whois.nic.whoswho", "extend": "com"} +ZZ["wien"] = {"_server": "whois.nic.wien", "extend": "com"} +ZZ["wme"] = {"_server": "whois.nic.wme", "extend": "com"} +ZZ["wolterskluwer"] = {"_server": "whois.nic.wolterskluwer", "extend": "com"} +ZZ["woodside"] = {"_server": "whois.nic.woodside", "extend": "com"} +ZZ["wow"] = {"_server": "whois.nic.wow", "extend": "com"} +ZZ["wtc"] = {"_server": "whois.nic.wtc", "extend": "com"} +ZZ["xerox"] = {"_server": "whois.nic.xerox", "extend": "com"} +ZZ["xfinity"] = {"_server": "whois.nic.xfinity", "extend": "com"} +ZZ["xn--11b4c3d"] = {"_server": "whois.nic.xn--11b4c3d", "extend": "com"} +ZZ["xn--1qqw23a"] = {"_server": "whois.ngtld.cn", "extend": "com"} +ZZ["xn--3pxu8k"] = {"_server": "whois.nic.xn--3pxu8k", "extend": "com"} +ZZ["xn--42c2d9a"] = {"_server": "whois.nic.xn--42c2d9a", "extend": "com"} +ZZ["xn--4gbrim"] = {"_server": "whois.nic.xn--4gbrim", "extend": "com"} +ZZ["xn--55qx5d"] = {"_server": "whois.ngtld.cn", "extend": "com"} +ZZ["xn--5su34j936bgsg"] = {"_server": "whois.nic.xn--5su34j936bgsg", "extend": "com"} +ZZ["xn--5tzm5g"] = {"_server": "whois.nic.xn--5tzm5g", "extend": "com"} +ZZ["xn--6frz82g"] = {"_server": "whois.nic.xn--6frz82g", "extend": "com"} +ZZ["xn--6qq986b3xl"] = {"_server": "whois.gtld.knet.cn", "extend": "com"} +ZZ["xn--80adxhks"] = {"_server": "whois.nic.xn--80adxhks", "extend": "com"} +ZZ["xn--80aqecdr1a"] = {"_server": "whois.nic.xn--80aqecdr1a", "extend": "com"} +ZZ["xn--80asehdb"] = {"_server": "whois.nic.xn--80asehdb", "extend": "com"} +ZZ["xn--80aswg"] = {"_server": "whois.nic.xn--80aswg", "extend": "com"} +ZZ["xn--8y0a063a"] = {"_server": "whois.nic.xn--8y0a063a", "extend": "com"} +ZZ["xn--9dbq2a"] = {"_server": "whois.nic.xn--9dbq2a", "extend": "com"} +ZZ["xn--9krt00a"] = {"_server": "whois.nic.xn--9krt00a", "extend": "com"} +ZZ["xn--c1avg"] = {"_server": "whois.nic.xn--c1avg", "extend": "com"} +ZZ["xn--c2br7g"] = {"_server": "whois.nic.xn--c2br7g", "extend": "com"} +ZZ["xn--cckwcxetd"] = {"_server": "whois.nic.xn--cckwcxetd", "extend": "com"} +ZZ["xn--czrs0t"] = {"_server": "whois.nic.xn--czrs0t", "extend": "com"} +ZZ["xn--efvy88h"] = {"_server": "whois.nic.xn--efvy88h", "extend": "com"} +ZZ["xn--fhbei"] = {"_server": "whois.nic.xn--fhbei", "extend": "com"} +ZZ["xn--fiqs8s"] = {"_server": "cwhois.cnnic.cn", "extend": "com"} +ZZ["xn--fiqz9s"] = {"_server": "cwhois.cnnic.cn", "extend": "com"} +ZZ["xn--fjq720a"] = {"_server": "whois.nic.xn--fjq720a", "extend": "com"} +ZZ["xn--fzys8d69uvgm"] = {"_server": "whois.nic.xn--fzys8d69uvgm", "extend": "com"} +ZZ["xn--i1b6b1a6a2e"] = {"_server": "whois.nic.xn--i1b6b1a6a2e", "extend": "com"} +ZZ["xn--io0a7i"] = {"_server": "whois.ngtld.cn", "extend": "com"} +ZZ["xn--j1aef"] = {"_server": "whois.nic.xn--j1aef", "extend": "com"} +ZZ["xn--jlq480n2rg"] = {"_server": "whois.nic.xn--jlq480n2rg", "extend": "com"} +ZZ["xn--kcrx77d1x4a"] = {"_server": "whois.nic.xn--kcrx77d1x4a", "extend": "com"} +ZZ["xn--kput3i"] = {"_server": "whois.nic.xn--kput3i", "extend": "com"} +ZZ["xn--mgba7c0bbn0a"] = {"_server": "whois.nic.xn--mgba7c0bbn0a", "extend": "com"} +ZZ["xn--mgbab2bd"] = {"_server": "whois.nic.xn--mgbab2bd", "extend": "com"} +ZZ["xn--mgbca7dzdo"] = {"_server": "whois.nic.xn--mgbca7dzdo", "extend": "com"} +ZZ["xn--mgbi4ecexp"] = {"_server": "whois.nic.xn--mgbi4ecexp", "extend": "com"} +ZZ["xn--mgbt3dhd"] = {"_server": "whois.nic.xn--mgbt3dhd", "extend": "com"} +ZZ["xn--mk1bu44c"] = {"_server": "whois.nic.xn--mk1bu44c", "extend": "com"} +ZZ["xn--mxtq1m"] = {"_server": "whois.nic.xn--mxtq1m", "extend": "com"} +ZZ["xn--ngbc5azd"] = {"_server": "whois.nic.xn--ngbc5azd", "extend": "com"} +ZZ["xn--ngbe9e0a"] = {"_server": "whois.nic.xn--ngbe9e0a", "extend": "com"} +ZZ["xn--ngbrx"] = {"_server": "whois.nic.xn--ngbrx", "extend": "com"} +ZZ["xn--nqv7f"] = {"_server": "whois.nic.xn--nqv7f", "extend": "com"} +ZZ["xn--nqv7fs00ema"] = {"_server": "whois.nic.xn--nqv7fs00ema", "extend": "com"} +ZZ["xn--pssy2u"] = {"_server": "whois.nic.xn--pssy2u", "extend": "com"} +ZZ["xn--q9jyb4c"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["xn--ses554g"] = {"_server": "whois.nic.xn--ses554g", "extend": "com"} +ZZ["xn--t60b56a"] = {"_server": "whois.nic.xn--t60b56a", "extend": "com"} +ZZ["xn--tckwe"] = {"_server": "whois.nic.xn--tckwe", "extend": "com"} +ZZ["xn--tiq49xqyj"] = {"_server": "whois.nic.xn--tiq49xqyj", "extend": "com"} +ZZ["xn--unup4y"] = {"_server": "whois.nic.xn--unup4y", "extend": "com"} +ZZ["xn--vermgensberater-ctb"] = {"_server": "whois.nic.xn--vermgensberater-ctb", "extend": "com"} +ZZ["xn--vermgensberatung-pwb"] = {"_server": "whois.nic.xn--vermgensberatung-pwb", "extend": "com"} +ZZ["xn--vhquv"] = {"_server": "whois.nic.xn--vhquv", "extend": "com"} +ZZ["xn--w4r85el8fhu5dnra"] = {"_server": "whois.nic.xn--w4r85el8fhu5dnra", "extend": "com"} +ZZ["xn--w4rs40l"] = {"_server": "whois.nic.xn--w4rs40l", "extend": "com"} +ZZ["xxx"] = {"_server": "whois.nic.xxx", "extend": "com"} +ZZ["yamaxun"] = {"_server": "whois.nic.yamaxun", "extend": "com"} +ZZ["yoga"] = {"_server": "whois.nic.yoga", "extend": "com"} +ZZ["yokohama"] = {"_server": "whois.nic.yokohama", "extend": "com"} +ZZ["you"] = {"_server": "whois.nic.you", "extend": "com"} +ZZ["zappos"] = {"_server": "whois.nic.zappos", "extend": "com"} + +ZZ["amfam"] = {"_server": "whois.nic.amfam", "extend": "com"} +ZZ["lplfinancial"] = {"_server": "whois.nic.lplfinancial", "extend": "com"} # auto-detected via IANA tld +ZZ["okinawa"] = {"_server": "whois.nic.okinawa", "extend": "com"} # auto-detected via IANA tld +ZZ["ryukyu"] = {"_server": "whois.nic.ryukyu", "extend": "com"} # auto-detected via IANA tld +ZZ["softbank"] = {"_server": "whois.nic.softbank", "extend": "com"} # auto-detected via IANA tld + +ZZ["gov"] = {"extend": "com"} # only 2 or 3 fields are actually returned diff --git a/whois/tld_regexpr.py.old b/whois/tld_regexpr.py.old new file mode 100644 index 0000000..78a0c3a --- /dev/null +++ b/whois/tld_regexpr.py.old @@ -0,0 +1,2146 @@ +# elements starting with _ +# are meta patterns and are not processed as domains +# examples: _donuts, _centralnic + +# elements ending in _ +# like id_ , is_, if_, in_, global_ are conflicting words in python without a trailing _ +# and auto replaced with a non conflicting word by adding a _ at the end + +# NOTE: many registrars use \r and some even have whitespace after the entry +# Some items can be multiple: status, emails, name_servers +# the remaining are always singular + +# when we finally apply the regexes we use IGNORE CASE allways on all matches + +# Commercial TLD - Original Big 7 +com = { + "extend": None, + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s?(.+)", + "registrant": r"Registrant\s*Organi(?:s|z)ation:\s?(.+)", + "registrant_country": r"Registrant Country:\s?(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "name_servers": r"Name Server:\s*(.+)\s*", # host -t ns often has more nameservers then the output of whois + "status": r"Status:\s?(.+)", + # the trailing domain must have minimal 2 parts firstname.lastname@fld.tld + # it may actually have more then 4 levels + # to match the dot in firstname.lastname we must use \. + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +# United Kingdom - academic sub-domain +ac_uk = { + "extend": "uk", + "domain_name": r"Domain:\n\s?(.+)", + "owner": r"Domain Owner:\n\s?(.+)", + "registrar": r"Registered By:\n\s?(.+)", + "registrant": r"Registered Contact:\n\s*(.+)", + "expiration_date": r"Renewal date:\n\s*(.+)", + "updated_date": r"Entry updated:\n\s*(.+)", + "creation_date": r"Entry created:\n\s?(.+)", + "name_servers": r"Servers:\s*(.+)\t\n\s*(.+)\t\n", +} + +co_uk = { + "extend": "uk", + "domain_name": r"Domain name:\s+(.+)", + "registrar": r"Registrar:\s+(.+)", + "name_servers": r"Name servers:(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?\n\n", # capture up to 4 + "status": r"Registration status:\s*(.+)", + "creation_date": r"Registered on:(.+)", + "expiration_date": r"Expiry date:(.+)", + "updated_date": r"Last updated:(.+)", + "owner": r"Domain Owner:\s+(.+)", + "registrant": r"Registrant:\n\s+(.+)", # example meta.co.uk has a registrar google.co.uk has not +} + +# United Arab Emirates +# ae = { "extend": "ar"} +# redefined below + +# Anguilla +ai = { + "extend": "com", + "_server": "whois.nic.ai", +} + +# Armenia +am = { + "extend": None, + "domain_name": r"Domain name:\s+(.+)", + "status": r"Status:\s(.+)", + "registrar": r"Registrar:\s+(.+)", + "registrant": r"Registrant:\s+(.+)", + "registrant_country": r"Registrant:\n.+\n.+\n.+\n\s+(.+)", + "creation_date": r"Registered:\s+(.+)", + "expiration_date": r"Expires:\s+(.+)", + "updated_date": r"Last modified:\s+(.+)", + "name_servers": r"DNS servers.*:\n(?:\s+(\S+)\n)(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)\n?", +} + +# Amsterdam +amsterdam = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Domain Status:\s?(.+)", +} + +app = { + "extend": "com", + "_server": "whois.nic.google", +} + +# Argentina +ar = { + "extend": "com", + "domain_name": r"domain\s*:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "creation_date": r"registered:\s?(.+)", + "expiration_date": r"expire:\s?(.+)", + "updated_date": r"changed\s*:\s?(.+)", + "name_servers": r"nserver:\s*(.+)\s*", +} + +asia = { + "extend": "com", +} + +# Austria +at = { + "extend": "com", + "_server": "whois.nic.at", + "domain_name": r"domain:\s?(.+)", + "updated_date": r"changed:\s?(.+)", + "name_servers": r"nserver:\s*(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant": r"registrant:\s?(.+)", +} + +# Australia +au = { + "extend": "com", + "registrar": r"Registrar Name:\s?(.+)", + "updated_date": r"Last Modified:([^\n]*)", # fix empty LastModified +} + +ax = { + "extend": "com", + "domain_name": r"domain\.+:\s*(\S+)", + "registrar": r"registrar\.+:\s*(.+)", + "creation_date": r"created\.+:\s*(\S+)", + "expiration_date": r"expires\.+:\s*(\S+)", + "updated_date": r"modified\.+:\s?(\S+)", + "name_servers": r"nserver\.+:\s*(\S+)", # host -t ns gives back more then output of whois + "status": r"status\.+:\s*(\S+)", + "registrant": r"Holder\s+name\.+:\s*(.+)\r?\n", # not always present see meta.ax and google.ax + "registrant_country": r"country\.+:\s*(.+)\r?\n", # not always present see meta.ax and google.ax +} + +aw = { + "extend": "nl", + "name_servers": r"Domain nameservers:\s+(\S+)[ \t]*\r?\n(?:\s+(\S+))?", +} + +# Banking TLD - ICANN +bank = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", +} + +be = { + "extend": "pl", + "domain_name": r"\nDomain:\s*(.+)", + "registrar": r"Company Name:\n?(.+)", + "creation_date": r"Registered:\s*(.+)\n", + "status": r"Status:\s?(.+)", + "name_servers": r"Nameservers:(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?\n\n", # fix missing and wrong output +} + +biz = { + "extend": "com", + "registrar": r"Registrar:\s?(.+)", + "registrant": r"Registrant Organization:\s?(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": None, +} + +br = { + "extend": "com", + "domain_name": r"domain:\s?(.+)", + "registrar": "nic.br", + "registrant": None, + "owner": r"owner:\s?(.+)", + "creation_date": r"created:\s?(.+)", + "expiration_date": r"expires:\s?(.+)", + "updated_date": r"changed:\s?(.+)", + "name_servers": r"nserver:\s*(.+)", + "status": r"status:\s?(.+)", +} + +by = { # fix multiple dns by removing test for \n at the beginning as it is not needed + "extend": "com", + "domain_name": r"Domain Name:\s*(.+)", + "registrar": r"Registrar:\s*(.+)", + "registrant": r"Org:\s*(.+)", + "registrant_country": r"Country:\s*(.+)", + "creation_date": r"Creation Date:\s*(.+)", + "expiration_date": r"Expiration Date:\s*(.+)", + "updated_date": r"Updated Date:\s*(.+)", + "name_servers": r"Name Server:\s+(\S+)\n", +} + +# Brittany (French Territory) +# Some personal data could be obfuscated at request from the registrant +bzh = { + "extend": "fr", + "domain_name": r"Domain Name:\s*(.+)", + "registrar": r"Registrar:\s*(.+)", + "registrant": r"Registrant Organization:\s*(.+)", + "registrant_country": r"Registrant Country:\s*(.*)", + "creation_date": r"Creation Date:\s*(.*)", + "expiration_date": r"Registry Expiry Date:\s*(.*)", + "updated_date": r"Updated Date:\s*(.*)", + "name_servers": r"Name Server:\s*(.*)", + "status": r"Domain Status:\s*(.*)", +} + +ca = { + "extend": "com", +} + +cat = { + "extend": "com", + "_server": "whois.nic.cat", +} + +cc = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +cl = { + "extend": "com", + "registrar": "nic.cl", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "name_servers": r"Name Server:\s*(.+)\s*", +} + +click = { + "extend": "com", +} + +cloud = { + "extend": "com", +} + +club = { + "extend": "com", +} + +cn = { + "extend": "com", + "registrar": r"Sponsoring Registrar:\s?(.+)", + "registrant": r"Registrant:\s?(.+)", + "creation_date": r"Registration Time:\s?(.+)", + "expiration_date": r"Expiration Time:\s?(.+)", +} + +co = { + "extend": "biz", + "status": r"Status:\s?(.+)", +} + +com_au = { + "extend": "au", +} + +com_tr = { + "extend": "com", + "domain_name": r"\*\* Domain Name:\s?(.+)", + "registrar": r"Organization Name\s+:\s?(.+)", + "registrant": r"\*\* Registrant:\s+?(.+)", + "registrant_country": None, + "creation_date": r"Created on\.+:\s?(.+).", + "expiration_date": r"Expires on\.+:\s?(.+).", # note the trailing . on both dates fields + "updated_date": "", + "name_servers": r"\*\* Domain Servers:\n(?:(\S+)\n)(?:(\S+)\n)?(?:(\S+)\n)?(?:(\S+)\n)?(?:(\S+)\n)?(?:(\S+)\n)\n?", + "status": None, +} + +edu_tr = { + "extend": "com_tr", +} + +org_tr = { + "extend": "com_tr", +} + +net_tr = { + "extend": "com_tr", +} + +co_il = { + "extend": "com", + "domain_name": r"domain:\s*(.+)", + "registrar": r"registrar name:\s*(.+)", + "registrant": None, + "registrant_country": None, + "creation_date": None, + "expiration_date": r"validity:\s*(.+)", + "updated_date": None, + "name_servers": r"nserver:\s*(.+)", + "status": r"status:\s*(.+)", +} + +co_jp = { + "extend": "jp", + "domain_name": r"\[ドメイン名\]\s?(.+)", + "creation_date": r"\[登録年月\]\s?(.+)", + "expiration_date": r"\[状態\].+\((.+)\)", + "updated_date": r"\[最終更新\]\s?(.+)", +} + +courses = { + "extend": "com", +} + +cr = { + "extend": "cz", +} + +cz = { + "extend": "com", + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant": r"registrant:\s?(.+)", + "registrant_country": None, + "creation_date": r"registered:\s?(.+)", + "expiration_date": r"expire:\s?(.+)", + "updated_date": r"changed:\s?(.+)", + "name_servers": r"nserver:\s+(\S+)", + "status": r"status:\s*(.+)", +} + +# The .de NIC whois servers no longer provide any PII data for domains in the TLD. +# To obtains "personal" data, one must use the web interface: http://www.denic.de/en/domains/whois-service/web-whois.html +de = { + "extend": "com", + "domain_name": r"\ndomain:\s*(.+)", + "updated_date": r"\nChanged:\s?(.+)", + "name_servers": r"Nserver:\s*(.+)", +} + +# Developer +dev = { + "extend": "com", +} + +# Denmark +dk = { + "extend": None, + "domain_name": r"Domain:\s?(.+)", + "registrar": None, + "registrant": r"Registrant\s*Handle:\s*\w*\s*Name:\s?(.+)", + "registrant_country": r"Country:\s?(.+)", + "creation_date": r"Registered:\s?(.+)", + "expiration_date": r"Expires:\s?(.+)", + "updated_date": None, + "name_servers": r"Hostname:\s*(.+)\s*", + "status": r"Status:\s?(.+)", + "emails": None, +} + +download = { + "extend": "amsterdam", + "name_servers": r"Name Server:[ \t]+(\S+)", # fix needed after strip(\r) in _2_parse.py in version 0.19 + "status": r"Domain Status:\s*([a-zA-z]+)", +} + +edu = { + "extend": "com", + "registrant": r"Registrant:\s*(.+)", + "creation_date": r"Domain record activated:\s?(.+)", + "updated_date": r"Domain record last updated:\s?(.+)", + "expiration_date": r"Domain expires:\s?(.+)", + "name_servers": r"Name Servers:\s?\t(.+)\n\t(.+)\n", +} + +# estonian +ee = { + "extend": "com", + "domain_name": r"Domain:\nname:\s+(.+\.ee)\n", + "registrar": r"Registrar:\nname:\s+(.+)\n", + "registrant": r"Registrant:\nname:\s+(.+)\n", + "registrant_country": r"Registrant:(?:\n+.+\n*)*country:\s+(.+)\n", + "creation_date": r"Domain:(?:\n+.+\n*)*registered:\s+(.+)\n", + "expiration_date": r"Domain:(?:\n+.+\n*)*expire:\s+(.+)\n", + "updated_date": r"Domain:(?:\n+.+\n*)*changed:\s+(.+)\n", + "name_servers": r"nserver:\s*(.+)", + "status": r"Domain:(?:\n+.+\n*)*status:\s+(.+)\n", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +eu = { + "extend": "com", + "registrar": r"Name:\s?(.+)", + "domain_name": r"\nDomain:\s*(.+)", + "name_servers": r"Name servers:\n(?:\s+(\S+)\n)(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)?(?:\s+(\S+)\n)\n?", +} + +fi = { + "extend": None, + "domain_name": r"domain\.+:\s?(.+)", + "registrar": r"registrar\.+:\s?(.+)", + "registrant_country": None, + "creation_date": r"created\.+:\s?(.+)", + "expiration_date": r"expires\.+:\s?(.+)", + "updated_date": r"modified\.+:\s?(.+)", + "name_servers": r"nserver\.+:\s*(.+)", + "status": r"status\.+:\s?(.+)", +} + +fit = { + "extend": "com", +} + +fm = { + "extend": "com", +} + +fo = { + "extend": "com", + "registrant": None, +} + +fr = { + "extend": "com", + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s*(.+)", + "registrant": r"contact:\s?(.+)", + "creation_date": r"created:\s?(.+)", + "expiration_date": r"Expiry Date:\s?(.+)", + "updated_date": r"last-update:\s?(.+)", + "name_servers": r"nserver:\s*(.+)", + "status": r"status:\s?(.+)", +} + +game = { + "extend": "amsterdam", +} + +global_ = { + "extend": "amsterdam", + "name_servers": r"Name Server: (.+)", +} + +# Honduras +hn = { + "extend": "com", +} + +# Hong Kong +hk = { + "extend": "com", + "domain_name": r"Domain Name:\s+(.+)", + "registrar": r"Registrar Name:\s?(.+)", + "registrant": r"Company English Name.*:\s?(.+)", + "registrant_country": None, + "creation_date": r"Domain Name Commencement Date:\s?(.+)", + "expiration_date": r"Expiry Date:\s?(.+)", + "updated_date": None, + # name servers have trailing whitespace, lines are \n only + "name_servers": r"Name Servers Information:\s*(?:(\S+)[ \t]*\n)(?:(\S+)[ \t]*\n)?(?:(\S+)[ \t]*\n)?(?:(\S+)[ \t]*\n)?", + "status": None, +} + +id_ = { + "extend": "com", + "registrar": r"Sponsoring Registrar Organization:\s?(.+)", + "creation_date": r"Created On:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "updated_date": r"Last Updated On:\s?(.+)$", +} + +# Ireland +ie = { + "extend": "com", +} + +im = { + "domain_name": r"Domain Name:\s+(.+)", + "status": None, + "registrar": None, + "registrant_country": None, + "creation_date": "", + "expiration_date": r"Expiry Date:\s?(.+)", + "updated_date": "", + "name_servers": r"Name Server:(.+)", +} + +in_ = { + "extend": "com", +} + +info = { + "extend": "com", +} + +ink = { + "extend": "amsterdam", +} + +io = { + "extend": "com", + "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", +} + +ir = { + "extend": None, + "domain_name": r"domain:\s?(.+)", + "registrar": "nic.ir", + "registrant_country": None, + "creation_date": None, + "status": None, + "expiration_date": r"expire-date:\s?(.+)", + "updated_date": r"last-updated:\s?(.+)", + "name_servers": r"nserver:\s*(.+)\s*", +} + +is_ = { + "domain_name": r"domain:\s?(.+)", + "registrar": None, + "registrant": r"registrant:\s?(.+)", + "registrant_country": None, + "creation_date": r"created:\s?(.+)", + "expiration_date": r"expires:\s?(.+)", + "updated_date": None, + "name_servers": r"nserver:\s?(.+)", + "status": None, + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +it = { + "extend": "com", + "domain_name": r"Domain:\s?(.+)", + "registrar": r"Registrar\s*Organization:\s*(.+)", + "registrant": r"Registrant\s*Organization:\s*(.+)", + "creation_date": r"Created:\s?(.+)", + "expiration_date": r"Expire Date:\s?(.+)", + "updated_date": r"Last Update:\s?(.+)", + # "name_servers": r"Nameservers\s?(.+)\s?(.+)\s?(.+)\s?(.+)", + "name_servers": r"Nameservers(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?", + "status": r"Status:\s?(.+)", +} + +# The Japanese whois servers always return English unless a Japanese locale is specified in the user's LANG environmental variable. +# See: https://www.computerhope.com/unix/uwhois.htm +# Additionally, whois qeuries can explicitly request english: +# To suppress Japanese output, add'/e' at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. +# +jp = { + "domain_name": r"\[Domain Name\]\s?(.+)", + # 'registrar': None, + "registrar": r"\[ (.+) database provides information on network administration. Its use is \]", + "registrant": r"\[Registrant\]\s?(.+)", + "registrant_country": None, + # 'creation_date': r'\[登録年月日\]\s?(.+)', + # 'expiration_date': r'\[有効期限\]\s?(.+)', + # 'updated_date': r'\[最終更新\]\s?(.+)', + "creation_date": r"\[Created on\]\s?(.+)", + "expiration_date": r"\[Expires on\]\s?(.+)", + "updated_date": r"\[Last Updated\]\s?(.+)", + "name_servers": r"\[Name Server\]\s*(.+)", + # 'status': r'\[状態\]\s?(.+)', + "status": r"\[Status\]\s?(.+)", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +# The Japanese whois servers always return English unless a Japanese locale is specified in the user's LANG environmental variable. +# See: https://www.computerhope.com/unix/uwhois.htm +# Additionally, whois qeuries can explicitly request english: +# To suppress Japanese output, add'/e' at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. +# +co_jp = { + "extend": "jp", + # 'domain_name': r'\[ドメイン名\]\s?(.+)', + "domain_name": r"\[Domain Name\]\s?(.+)", + # 'creation_date': r'\[登録年月\]\s?(.+)', + # 'expiration_date': r'\[状態\].+\((.+)\)', + # 'updated_date': r'\[最終更新\]\s?(.+)', + "creation_date": r"\[Registered Date\]\s?(.+)", + "expiration_date": None, + "updated_date": r"\[Last Update\]\s?(.+)", + "status": r"\[State\]\s?(.+)", +} + +# All Japanese Sub-TLDs. See: https://jprs.co.jp/en/jpdomain.html +ne_jp = {"extend": "co_jp"} + +or_jp = {"extend": "co_jp"} + +go_jp = {"extend": "co_jp"} + +ac_jp = {"extend": "co_jp"} + +ad_jp = {"extend": "co_jp"} + +ed_jp = {"extend": "co_jp"} + +gr_jp = {"extend": "co_jp"} + +lg_jp = {"extend": "co_jp"} + +geo_jp = {"extend": "co_jp"} + +kiwi = { + "extend": "com", +} + +kg = { + "domain_name": r"Domain\s+(\S+)", + "registrar": r"Billing\sContact:\n.*\n\s+Name:\s(.+)\n", + "registrant_country": None, + "expiration_date": r"Record expires on:\s+(.+)", + "creation_date": r"Record created:\s+(.+)", + "updated_date": r"Record last updated on:\s+(.+)", + # name servers have trailing whitespace + "name_servers": r"Name servers in the listed order:\n\n(?:(\S+)[ \t]*\S*\n)(?:(\S+)[ \t]*\S*\n)?(?:(\S+)[ \t]*\S*\n)?\n", + # nameservers can have trailing ip (e.g. google.kg) + "status": r"Domain\s+\S+\s+\((\S+)\)", +} + +# Saint Kitts and Nevis +kn = { + "extend": "com", +} + +kr = { + "extend": "com", + "domain_name": r"Domain Name\s*:\s?(.+)", + "registrar": r"Authorized Agency\s*:\s*(.+)", + "registrant": r"Registrant\s*:\s*(.+)", + "creation_date": r"Registered Date\s*:\s?(.+)", + "expiration_date": r"Expiration Date\s*:\s?(.+)", + "updated_date": r"Last Updated Date\s*:\s?(.+)", + "status": r"status\s*:\s?(.+)", + "name_servers": r"Host Name\s+:\s+(\S+)\n", +} + +kz = { + "extend": None, + "domain_name": r"Domain name\.+:\s(.+)", + "registrar": r"Current Registar:\s(.+)", + "registrant_country": r"Country\.+:\s?(.+)", + "expiration_date": None, + "creation_date": r"Domain created:\s(.+)", + "updated_date": r"Last modified :\s(.+)", + "name_servers": r"ary server\.+:\s+(\S+)", + "status": r"Domain status :(?:\s+([^\n]+)\n)", +} + +link = { + "extend": "amsterdam", +} + +lt = { + "extend": "com", + "domain_name": r"Domain:\s?(.+)", + "creation_date": r"Registered:\s?(.+)", + "expiration_date": r"Expires:\s?(.+)", + "name_servers": r"Nameserver:\s*(.+)\s*", + "status": r"\nStatus:\s?(.+)", +} + +lv = { + "extend": "ru", + "creation_date": r"Registered:\s*(.+)\n", + "updated_date": r"Changed:\s*(.+)\n", + "status": r"Status:\s?(.+)", +} + +me = { + # lines have \r + "extend": "biz", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Expiry Date:\s?(.+)", + "updated_date": None, # some entries have no date string but not always + "name_servers": r"Name Server:\s*(\S+)\r?\n", + "status": r"Domain Status:\s?(.+)", +} + +ml = { + "extend": "com", + "domain_name": r"Domain name:\s*([^(i|\n)]+)", + "registrar": r"(?<=Owner contact:\s)[\s\S]*?Organization:(.*)", + "registrant_country": r"(?<=Owner contact:\s)[\s\S]*?Country:(.*)", + "registrant": r"(?<=Owner contact:\s)[\s\S]*?Name:(.*)", + "creation_date": r"Domain registered: *(.+)", + "expiration_date": r"Record will expire on: *(.+)", + "name_servers": r"Domain Nameservers:\s*(.+)\n\s*(.+)\n", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +mobi = { + "extend": "com", + "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", + "updated_date": r"\nUpdated Date:\s?(.+)", +} + +mx = { + "extend": None, + "domain_name": r"Domain Name:\s?(.+)", + "creation_date": r"Created On:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "updated_date": r"Last Updated On:\s?(.+)", + "registrar": r"Registrar:\s?(.+)", + # "registrant": r"Registrant:\n\s*(.+)", + "name_servers": r"\sDNS:\s*(.+)", + "registrant_country": None, + "status": None, +} + +name = { + "extend": "com", + "status": r"Domain Status:\s?(.+)", +} + +# New-Caledonia (French Territory) +nc = { + "extend": "fr", + "domain_name": r"Domain\s*:\s(.+)", + "registrar": r"Registrar\s*:\s(.+)", + "registrant": r"Registrant name\s*:\s(.+)", + "registrant_country": None, + "creation_date": r"Created on\s*:\s(.*)", + "expiration_date": r"Expires on\s*:\s(.*)", + "updated_date": r"Last updated on\s*:\s(.*)", + "name_servers": r"Domain server [0-9]{1,}\s*:\s(.*)", + "status": None, +} + +net = { + "extend": "com", +} + +nl = { + "extend": "com", + "expiration_date": None, + "registrant_country": None, + "domain_name": r"Domain name:\s?(.+)", + "name_servers": ( + r"""(?x: + Domain\ nameservers:\s+(\S+)\r?\n # the first + (?:\s+(\S+)\r?\n)? # a optional 2th + (?:\s+(\S+)\r?\n)? # a optional 3th + (?:\s+(\S+)\r?\n)? # a optional 4th + (?:\s+(\S+)\r?\n)? # a optional 5th + # there may be more, best use host -t ns to get the actual nameservers + )""" + ), + # the format with [A] or [AAAA] is no longer in use + # "name_servers": ( + # r"""(?x: + # Domain\ nameservers:[ \t]*\n + # (?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n # ns1.tld.nl [A?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns2.tld.nl [A?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns2.tld.nl [AAAA?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns3.tld.nl [A?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns3.tld.nl [AAAA?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns4.tld.nl [A?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns4.tld.nl [AAAA?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns5.tld.nl [A?] + # (?:(?:[ \t]+) (\S+) (?:[ \t]+\S+)? \n)? # opt-ns5.tld.nl [AAAA?] + # # Don't check for final LF; there might be even more records.. + # )""" + # ), + "reseller": r"Reseller:\s?(.+)", + "abuse_contact": r"Abuse Contact:\s?(.+)", +} + +# Norway +no = { + "extend": None, + "domain_name": r"Domain Name\.+:\s?(.+)", + "registrar": r"Registrar Handle\.+:\s?(.+)", + "registrant": None, + "registrant_country": None, + "creation_date": r"Created:\s?(.+)", + "expiration_date": None, + "updated_date": r"Last Updated:\s?(.+)", + "name_servers": r"Name Server Handle\.+:\s*(.+)\s*", + "status": None, + "emails": None, +} + +nu = { + "extend": "se", +} + +nyc = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +nz = { + "extend": None, + "domain_name": r"domain_name:\s?(.+)", + "registrar": r"registrar_name:\s?(.+)", + "registrant": r"registrant_contact_name:\s?(.+)", + "registrant_country": None, + "creation_date": r"domain_dateregistered:\s?(.+)", + "expiration_date": r"domain_datebilleduntil:\s?(.+)", + "updated_date": r"domain_datelastmodified:\s?(.+)", + "name_servers": r"ns_name_[0-9]{2}:\s?(.+)", + "status": r"query_status:\s?(.+)", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +org = { + "extend": "com", + "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", + "updated_date": r"\nLast Updated On:\s?(.+)", + "name_servers": r"Name Server:\s?(.+)\s*", +} + +ovh = { + "extend": "com", +} + +pe = { + "extend": "com", + "registrant": r"Registrant Name:\s?(.+)", + "admin": r"Admin Name:\s?(.+)", +} + +pharmacy = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"status:\s?(.+)", +} + +pl = { + # pl has lines ending in multiple line feeds \r and trailing whitespace + "extend": "uk", + "registrar": r"\nREGISTRAR:\s*(.+)\n", + "creation_date": r"\ncreated:\s*(.+)\n", + "updated_date": r"\nlast modified:\s*(.+)\n", + "expiration_date": r"\noption expiration date:\s*(.+)\n", + # ns: match up to 4 + "name_servers": r"nameservers:(?:\s+(\S+)[^\n]*\n)(?:\s+(\S+)[^\n]*\n)?(?:\s+(\S+)[^\n]*\n)?(?:\s+(\S+)[^\n]*\n)?", + "status": r"\nStatus:\n\s*(.+)", +} + +pro = { + "extend": "com", +} + +pt = { + # mboot 2022-11-16 + # from aws frankfurt all ok, looks like network limitations + # actually it sometimes works, most of the time though we get: connect: Network is unreachable + # looks like this is now a privateRegistry mboot: 2022-06-10, + # manual lookup: use the website at whois.dns.pt + "_server": "whois.dns.pt", + # "_privateRegistry": True, + "extend": "com", + "domain_name": r"Domain:\s?(.+)", + "registrar": None, + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "updated_date": None, + # nameservers have trailing info: Name Server: ns1.dnscpanel.com | IPv4: and IPv6: + "name_servers": r"Name Server:(?:\s*(\S+)[^\n]*\n)(?:\s*(\S+)[^\n]*\n)?", + "status": r"Domain Status:\s?(.+)", +} + +pw = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +radio = { + "extend": "com", + "_server": "whois.nic.radio", +} + +red = { + "extend": "com", +} + +ru = { + "extend": "com", + "domain_name": r"\ndomain:\s*(.+)", + "creation_date": r"\ncreated:\s*(.+)", + "expiration_date": r"\npaid-till:\s*(.+)", + "name_servers": r"\nnserver:\s*(.+)", + "status": r"\nstate:\s*(.+)", +} + +# Rossíyskaya Federátsiya) is the Cyrillic country code top-level domain for the Russian Federation, +# In the Domain Name System it has the ASCII DNS name xn--p1ai. + +ru_rf = { + "extend": "ru", +} + +sa = { + "extend": "com", + "domain_name": r"Domain Name:\s*(.+\.sa)\s", + "registrant": r"Registrant:\n*(.+)\n", + "name_servers": r"Name Servers:\s*(.+)\s*(.+)?", + "registrant_country": None, + "registrar": None, + "creation_date": None, + "expiration_date": None, + "updated_date": None, + "status": None, + "emails": None, +} + +sh = { + "extend": "com", + "registrant": r"\nRegistrant Organization:\s?(.+)", + "expiration_date": r"\nRegistry Expiry Date:\s*(.+)", + "status": r"\nDomain Status:\s?(.+)", +} + +shop = { + "extend": "com", +} + +se = { + "extend": None, + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant_country": None, + "creation_date": r"created:\s?(.+)", + "expiration_date": r"expires:\s?(.+)", + "updated_date": r"modified:\s?(.+)", + "name_servers": r"nserver:\s*(.+)", + "status": r"status:\s?(.+)", +} + +# Singapore - Commercial sub-domain +com_sg = { + # uses \r nameservers have trailing whitespace + "extend": None, + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s?(.+)", + "registrant": r"Registrant:\r?\n\r?\n\s*Name:\s*(.+)\r?\n", + "registrant_country": None, + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "updated_date": r"Modified Date:\s?(.+)", + # fix needed after strip(\r) in _2_parse.py in version 0.19 + # "name_servers": r"Name Servers:\r\n(?:\s*(\S+)[ \t\r]*\n)(?:\s*(\S+)[ \t\r]*\n)?(?:\s*(\S+)[ \t\r]*\n)?", + "name_servers": r"Name Servers:(?:\s+(\S+))(?:\s+(\S+))?(?:\s+(\S+))?(?:\s+([\.\w]+)\s+)?", + # this seems ok for 2 and 3 ns and does not catch the dnssec: line + "status": r"Domain Status:\s*(.*)\r?\n", + # "emails": r"(\S+@\S+)", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +# Slovakia +sk = { + "extend": "com", + "domain_name": r"Domain:\s?(.+)", + "creation_date": r"Created:\s?(.+)", + "expiration_date": r"Valid Until:\s?(.+)", + "updated_date": r"Updated:\s?(.+)", + "name_servers": r"Nameserver:\s*(\S+)", # fix needed after strip(\r) in _2_parse.py in version 0.19 + "registrant": r"Contact:\s?(.+)", + "registrant_country": r"Country Code:\s?(.+)\nRegistrar:", +} + +study = { + "extend": "com", +} + +tel = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"\nRegistry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +# Thailand - Commercial sub-domain +co_th = { + "_server": "whois.thnic.co.th", + "extend": "com", + "registrant": r"Domain Holder Organization:\s?(.+)", + "registrant_country": r"Domain Holder Country:\s?(.+)", + "creation_date": r"Created date:\s?(.+)", + "expiration_date": r"Exp date:\s?(.+)", + "updated_date": r"Updated date:\s?(.+)", +} + +go_th = { + "extend": "co_th", +} + +in_th = { + "extend": "co_th", +} + +ac_th = { + "extend": "co_th", +} + +tn = { + "extend": "com", + "domain_name": r"Domain name\.+:(.+)\s*", + "registrar": r"Registrar\.+:(.+)\s*", + "registrant": r"Owner Contact\n+Name\.+:\s?(.+)", + "registrant_country": r"Owner Contact\n(?:.+\n)+Country\.+:\s(.+)", + "creation_date": r"Creation date\.+:\s?(.+)", + "expiration_date": None, + "updated_date": None, + "name_servers": r"DNS servers\n(?:Name\.+:\s*(\S+)\n)(?:Name\.+:\s*(\S+)\n)?(?:Name\.+:\s*(\S+)\n)?(?:Name\.+:\s*(\S+)\n)?", + "status": r"Domain status\.+:(.+)", + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +tokyo = { + "extend": "com", + "_server": "whois.nic.tokyo", +} + +top = { + "extend": "com", +} + +trade = { + "extend": "amsterdam", +} + +tv = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +tz = { + "domain_name": r"\ndomain:\s*(.+)", + "registrar": r"\nregistrar:\s?(.+)", + "registrant": r"\nregistrant:\s*(.+)", + "registrant_country": None, + "creation_date": r"\ncreated:\s*(.+)", + "expiration_date": r"expire:\s?(.+)", + "updated_date": r"\nchanged:\s*(.+)", + "status": None, + "name_servers": r"\nnserver:\s*(.+)", +} + +ua = { + "extend": "com", + "domain_name": r"\ndomain:\s*(.+)", + "registrar": r"\nregistrar:\s*(.+)", + "registrant_country": r"\ncountry:\s*(.+)", + "creation_date": r"\ncreated:\s+(.+)", + "expiration_date": r"\nexpires:\s*(.+)", + "updated_date": r"\nmodified:\s*(.+)", + "name_servers": r"\nnserver:\s*(.+)", + "status": r"\nstatus:\s*(.+)", +} + +edu_ua = { + "extend": "ua", + "creation_date": r"\ncreated:\s+0-UANIC\s+(.+)", +} +com_ua = { + "extend": "ua", +} +net_ua = { + "extend": "ua", +} + +lviv_ua = { + "extend": "com", +} + +uk = { + "extend": "com", + "registrant": r"Registrant:\n\s*(.+)", + "creation_date": r"Registered on:\s*(.+)", + "expiration_date": r"Expiry date:\s*(.+)", + "updated_date": r"Last updated:\s*(.+)", + "name_servers": r"Name Servers:\s*(\S+)\r?\n(?:\s+(\S+)\r?\n)?(?:\s+(\S+)\r?\n)?(?:\s+(\S+)\r?\n)?", + "status": r"Registration status:\n\s*(.+)", +} + +us = { + "extend": "name", +} + +uz = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Expiration Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", + "name_servers": r"Domain servers in listed order:(?:\n\s+(\S+))(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?\n\n", + # sometimes 'not.defined is returned as a nameserver (e.g. google.uz) +} + +vip = { + "_server": "whois.nic.vip", + "extend": "com", + "updated_date": None, +} + +wiki = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", +} + +win = { + "extend": "com", +} + +work = { + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", +} + +xin = { + "extend": "com", + "_server": "whois.nic.xin", +} + +za = { + "extend": "com", +} + +web_za = {"extend": "za", "_server": "web-whois.registry.net.za"} +org_za = {"extend": "za", "_server": "org-whois.registry.net.za"} +net_za = {"extend": "za", "_server": "net-whois.registry.net.za"} +co_za = {"extend": "za", "_server": "coza-whois.registry.net.za"} + +gy = { + "extend": "com", +} + +# Multiple initialization +ca = rw = mu = bank + +# Registry operator: donuts.domains +# WHOIS server: whois.donuts.co +_donuts = { + "extend": "com", + "_server": "whois.donuts.co", + "registrant": r"Registrant Organization:\s?(.+)", + "status": r"Domain Status:\s?(.+)", +} + +academy = {"extend": "_donuts"} +accountants = {"extend": "_donuts"} +actor = {"extend": "_donuts"} +agency = {"extend": "_donuts"} +airforce = {"extend": "_donuts"} +apartments = {"extend": "_donuts"} +army = {"extend": "_donuts"} +associates = {"extend": "_donuts"} +attorney = {"extend": "_donuts"} +auction = {"extend": "_donuts"} +band = {"extend": "_donuts"} +bargains = {"extend": "_donuts"} +bike = {"extend": "_donuts"} +bingo = {"extend": "_donuts"} +boutique = {"extend": "_donuts"} +builders = {"extend": "_donuts"} +business = {"extend": "_donuts"} +cab = {"extend": "_donuts"} +cafe = {"extend": "_donuts"} +camera = {"extend": "_donuts"} +camp = {"extend": "_donuts"} +capital = {"extend": "_donuts"} +cards = {"extend": "_donuts"} +careers = {"extend": "_donuts"} +care = {"extend": "_donuts"} +cash = {"extend": "_donuts"} +casino = {"extend": "_donuts"} +catering = {"extend": "_donuts"} +center = {"extend": "_donuts"} +charity = {"extend": "_donuts"} +chat = {"extend": "_donuts"} +cheap = {"extend": "_donuts"} +church = {"extend": "_donuts"} +city = {"extend": "_donuts"} +claims = {"extend": "_donuts"} +cleaning = {"extend": "_donuts"} +clinic = {"extend": "_donuts"} +clothing = {"extend": "_donuts"} +coach = {"extend": "_donuts"} +codes = {"extend": "_donuts"} +coffee = {"extend": "_donuts"} +community = {"extend": "_donuts"} +company = {"extend": "_donuts"} +computer = {"extend": "_donuts"} +condos = {"extend": "_donuts"} +construction = {"extend": "_donuts"} +consulting = {"extend": "_donuts"} +contact = {"extend": "_donuts"} +contractors = {"extend": "_donuts"} +cool = {"extend": "_donuts"} +coupons = {"extend": "_donuts"} +creditcard = {"extend": "_donuts"} +credit = {"extend": "_donuts"} +cruises = {"extend": "_donuts"} +dance = {"extend": "_donuts"} +dating = {"extend": "_donuts"} +deals = {"extend": "_donuts"} +degree = {"extend": "_donuts"} +delivery = {"extend": "_donuts"} +democrat = {"extend": "_donuts"} +dental = {"extend": "_donuts"} +dentist = {"extend": "_donuts"} +diamonds = {"extend": "_donuts"} +digital = {"extend": "_donuts"} +direct = {"extend": "_donuts"} +directory = {"extend": "_donuts"} +discount = {"extend": "_donuts"} +doctor = {"extend": "_donuts"} +dog = {"extend": "_donuts"} +domains = {"extend": "_donuts"} +education = {"extend": "_donuts"} +email = {"extend": "_donuts"} +energy = {"extend": "_donuts"} +engineer = {"extend": "_donuts"} +engineering = {"extend": "_donuts"} +enterprises = {"extend": "_donuts"} +equipment = {"extend": "_donuts"} +estate = {"extend": "_donuts"} +events = {"extend": "_donuts"} +exchange = {"extend": "_donuts"} +expert = {"extend": "_donuts"} +exposed = {"extend": "_donuts"} +express = {"extend": "_donuts"} +fail = {"extend": "_donuts"} +family = {"extend": "_donuts"} +fan = {"extend": "_donuts"} +farm = {"extend": "_donuts"} +finance = {"extend": "_donuts"} +financial = {"extend": "_donuts"} +fish = {"extend": "_donuts"} +fitness = {"extend": "_donuts"} +flights = {"extend": "_donuts"} +florist = {"extend": "_donuts"} +football = {"extend": "_donuts"} +forsale = {"extend": "_donuts"} +foundation = {"extend": "_donuts"} +fund = {"extend": "_donuts"} +furniture = {"extend": "_donuts"} +futbol = {"extend": "_donuts"} +fyi = {"extend": "_donuts"} +gallery = {"extend": "_donuts"} +games = {"extend": "_donuts"} +gifts = {"extend": "_donuts"} +gives = {"extend": "_donuts"} +glass = {"extend": "_donuts"} +gmbh = {"extend": "_donuts"} +gold = {"extend": "_donuts"} +golf = {"extend": "_donuts"} +graphics = {"extend": "_donuts"} +gratis = {"extend": "_donuts"} +gripe = {"extend": "_donuts"} +group = {"extend": "_donuts"} +guide = {"extend": "_donuts"} +guru = {"extend": "_donuts"} +haus = {"extend": "_donuts"} +healthcare = {"extend": "_donuts"} +hockey = {"extend": "_donuts"} +holdings = {"extend": "_donuts"} +holiday = {"extend": "_donuts"} +hospital = {"extend": "_donuts"} +house = {"extend": "_donuts"} +immobilien = {"extend": "_donuts"} +immo = {"extend": "_donuts"} +industries = {"extend": "_donuts"} +institute = {"extend": "_donuts"} +insure = {"extend": "_donuts"} +international = {"extend": "_donuts"} +investments = {"extend": "_donuts"} +irish = {"extend": "_donuts"} +jetzt = {"extend": "_donuts"} +jewelry = {"extend": "_donuts"} +kaufen = {"extend": "_donuts"} +kitchen = {"extend": "_donuts"} +land = {"extend": "_donuts"} +lawyer = {"extend": "_donuts"} +lease = {"extend": "_donuts"} +legal = {"extend": "_donuts"} +life = {"extend": "_donuts"} +lighting = {"extend": "_donuts"} +limited = {"extend": "_donuts"} +limo = {"extend": "_donuts"} +live = {"extend": "_donuts"} +loans = {"extend": "_donuts"} +ltd = {"extend": "_donuts"} +maison = {"extend": "_donuts"} +management = {"extend": "_donuts"} +market = {"extend": "_donuts"} +marketing = {"extend": "_donuts"} +mba = {"extend": "_donuts"} +media = {"extend": "_donuts"} +memorial = {"extend": "_donuts"} +moda = {"extend": "_donuts"} +money = {"extend": "_donuts"} +mortgage = {"extend": "_donuts"} +movie = {"extend": "_donuts"} +navy = {"extend": "_donuts"} +network = {"extend": "_donuts"} +news = {"extend": "_donuts"} +ninja = {"extend": "_donuts"} +partners = {"extend": "_donuts"} +parts = {"extend": "_donuts"} +pet = {"extend": "_donuts"} +photography = {"extend": "_donuts"} +photos = {"extend": "_donuts"} +pictures = {"extend": "_donuts"} +pizza = {"extend": "_donuts"} +place = {"extend": "_donuts"} +plumbing = {"extend": "_donuts"} +plus = {"extend": "_donuts"} +productions = {"extend": "_donuts"} +properties = {"extend": "_donuts"} +pub = {"extend": "_donuts"} +recipes = {"extend": "_donuts"} +rehab = {"extend": "_donuts"} +reise = {"extend": "_donuts"} +reisen = {"extend": "_donuts"} +rentals = {"extend": "_donuts"} +repair = {"extend": "_donuts"} +report = {"extend": "_donuts"} +republican = {"extend": "_donuts"} +restaurant = {"extend": "_donuts"} +reviews = {"extend": "_donuts"} +rip = {"extend": "_donuts"} +rocks = {"extend": "_donuts"} +run = {"extend": "_donuts"} +sale = {"extend": "_donuts"} +salon = {"extend": "_donuts"} +sarl = {"extend": "_donuts"} +school = {"extend": "_donuts"} +schule = {"extend": "_donuts"} +services = {"extend": "_donuts"} +shoes = {"extend": "_donuts"} +shopping = {"extend": "_donuts"} +show = {"extend": "_donuts"} +singles = {"extend": "_donuts"} +soccer = {"extend": "_donuts"} +social = {"extend": "_donuts"} +software = {"extend": "_donuts"} +solar = {"extend": "_donuts"} +solutions = {"extend": "_donuts"} +studio = {"extend": "_donuts"} +style = {"extend": "_donuts"} +supplies = {"extend": "_donuts"} +supply = {"extend": "_donuts"} +support = {"extend": "_donuts"} +surgery = {"extend": "_donuts"} +systems = {"extend": "_donuts"} +tax = {"extend": "_donuts"} +taxi = {"extend": "_donuts"} +team = {"extend": "_donuts"} +technology = {"extend": "_donuts"} +tennis = {"extend": "_donuts"} +theater = {"extend": "_donuts"} +tienda = {"extend": "_donuts"} +tips = {"extend": "_donuts"} +tires = {"extend": "_donuts"} +today = {"extend": "_donuts"} +tools = {"extend": "_donuts"} +tours = {"extend": "_donuts"} +town = {"extend": "_donuts"} +toys = {"extend": "_donuts"} +training = {"extend": "_donuts"} +travel = {"extend": "_donuts"} +university = {"extend": "_donuts"} +vacations = {"extend": "_donuts"} +ventures = {"extend": "_donuts"} +vet = {"extend": "_donuts"} +viajes = {"extend": "_donuts"} +video = {"extend": "_donuts"} +villas = {"extend": "_donuts"} +vin = {"extend": "_donuts"} +vision = {"extend": "_donuts"} +voyage = {"extend": "_donuts"} +watch = {"extend": "_donuts"} +wine = {"extend": "_donuts"} +works = {"extend": "_donuts"} +world = {"extend": "_donuts"} +wtf = {"extend": "_donuts"} +zone = {"extend": "_donuts"} + +# Registry operator: CentralNic +# WHOIS server: whois.centralnic.com +_centralnic = { + "extend": "com", + "_server": "whois.centralnic.com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Domain Status:\s?(.+)", +} + +art = {"extend": "_centralnic"} +auto = {"extend": "_centralnic"} +autos = {"extend": "_centralnic"} +baby = {"extend": "_centralnic"} +bar = {"extend": "_centralnic"} +beauty = {"extend": "_centralnic"} +best = {"extend": "_centralnic"} +blog = {"extend": "_centralnic"} +boats = {"extend": "_centralnic"} +bond = {"extend": "_centralnic"} +build = {"extend": "_centralnic"} +cam = {"extend": "_centralnic"} +car = {"extend": "_centralnic"} +cars = {"extend": "_centralnic"} +ceo = {"extend": "_centralnic"} +cfd = {"extend": "_centralnic"} +college = {"extend": "_centralnic"} +coop = {"extend": "_centralnic"} +cyou = {"extend": "_centralnic"} +dealer = {"extend": "_centralnic"} +desi = {"extend": "_centralnic"} +fans = {"extend": "_centralnic"} +feedback = {"extend": "_centralnic"} +forum = {"extend": "_centralnic"} +frl = {"extend": "_centralnic"} +fun = {"extend": "_centralnic"} +gent = {"extend": "_centralnic"} +hair = {"extend": "_centralnic"} +homes = {"extend": "_centralnic"} +host = {"extend": "_centralnic"} +icu = {"extend": "_centralnic"} +inc = {"extend": "_centralnic"} +kred = {"extend": "_centralnic"} +london = {"extend": "_centralnic"} +luxury = {"extend": "_centralnic"} +makeup = {"extend": "_centralnic"} +monster = {"extend": "_centralnic"} +motorcycles = {"extend": "_centralnic"} +online = {"extend": "_centralnic"} +ooo = {"extend": "_centralnic"} +press = {"extend": "_centralnic"} +protection = {"extend": "_centralnic"} +qpon = {"extend": "_centralnic"} +quest = {"extend": "_centralnic"} +reit = {"extend": "_centralnic"} +rent = {"extend": "_centralnic"} +rest = {"extend": "_centralnic"} +saarland = {"extend": "_centralnic"} +sbs = {"extend": "_centralnic"} +security = {"extend": "_centralnic"} +site = {"extend": "_centralnic"} +skin = {"extend": "_centralnic"} +space = {"extend": "_centralnic"} +storage = {"extend": "_centralnic"} +store = {"extend": "_centralnic"} +tech = {"extend": "_centralnic"} +theatre = {"extend": "_centralnic"} +tickets = {"extend": "_centralnic"} +uno = {"extend": "_centralnic"} +website = {"extend": "_centralnic"} +xyz = {"extend": "_centralnic"} +yachts = {"extend": "_centralnic"} +zuerich = {"extend": "_centralnic"} + +# mboot added start +# note i extract the whois server for each toplevel domain using: https://github.com/jophy/iana_tld_list +# of which i am a contributer + +ac = { + "extend": None, + "domain_name": r"Domain Name:\s+(.+)", + "registrar": r"Registrar:\s+(.+)", + "status": r"Domain Status:\s(.+)", + "name_servers": r"Name Server:\s+(\S+)", + "registrant_country": r"Registrant Country:\s*(.*)\r?\n", + "updated_date": r"Updated Date:\s+(.+)", + "creation_date": r"Creation Date:\s+(.+)", + "expiration_date": r"Registry Expiry Date:\s+(.+)", +} + +ae = { + "extend": "ar", + "domain_name": r"Domain Name:\s+(.+)", + "registrar": r"Registrar Name:\s+(.+)", + "status": r"Status:\s(.+)", + "name_servers": r"Name Server:\s+(\S+)", # host -t ns gives back more, but whois output only has 2 + "registrant_country": None, + "creation_date": None, + "expiration_date": None, + "updated_date": None, +} + +aero = { + "extend": "ac", + "_server": "whois.aero", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + + +af = { + "extend": "ac", +} + +ag = { + "extend": "ac", +} + +bet = { + "extend": "ac", + "_server": "whois.nic.bet", +} + +bg = { + "extend": None, + "_server": "whois.register.bg", + "domain_name": r"DOMAIN\s+NAME:\s+(.+)", + "status": r"registration\s+status:\s(.+)", + "name_servers": r"NAME SERVER INFORMATION:\n(?:(.+)\n)(?:(.+)\n)?(?:(.+)\n)?(?:(.+)\n)?", + "creation_date": None, + "expiration_date": None, + "updated_date": None, + "registrar": None, + "registrant_country": None, +} + +bid = { + "extend": "ac", + "_server": "whois.nic.bid", +} + +# Benin +# WHOIS server: whois.nic.bj +# by: https://github.com/LickosA + +bj = { + "_server": "whois.nic.bj", + "extend": "com", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Registrar:\s*(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "status": r"Status:\s?(.+)", + "name_servers": r"Name Server:\s+(\S+)\n", +} + +buzz = { + "extend": "amsterdam", +} + +casa = { + "extend": "ac", + "registrant_country": r"Registrant Country:\s+(.+)", +} + +cd = { + "extend": "ac", + "_server": "whois.nic.cd", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + +cf = { + "extend": None, + "domain_name": None, + "name_servers": r"Domain Nameservers:\n(?:(.+)\n)(?:(.+)\n)?(?:(.+)\n)?(?:(.+)\n)?", + "registrar": r"Record maintained by:\s+(.+)", + "creation_date": r"Domain registered:\s?(.+)", + "expiration_date": r"Record will expire:\s?(.+)", + "updated_date": None, + "registrant_country": None, + # very restrictive, after a few queries it will refuse with try again later + "_slowdown": 5, +} + +design = { + "extend": "ac", +} + +eus = { + "extend": "ac", +} + +ge = { + "_server": "whois.nic.ge", + "extend": "ac", + "updated_date": None, +} + +gq = { + "extend": "ml", + "_server": "whois.domino.gq", +} + +la = { + "extend": "com", +} + +lol = { + "extend": "amsterdam", +} + +love = { + "extend": "ac", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + +ly = { + "extend": "ac", + "_server": "whois.nic.ly", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + +com_ly = { + "extend": "ly", # host -t ns often has more nameservers then output of whois +} + +ma = { + "extend": "ac", + "_server": "whois.registre.ma", + "registrar": r"Sponsoring Registrar:\s*(.+)", +} + +mg = { + "extend": "ac", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + +moe = { + "extend": "ac", + "registrant_country": r"Registrant\s+Country:\s+(.+)", +} + +ng = { + "_server": "whois.nic.net.ng", + "extend": "ac", + "registrant_country": r"Registrant Country:\s+(.+)", +} + +ong = { + "extend": "ac", + "registrant_country": r"Registrant Country:\s+(.+)", +} + +pics = { + "extend": "ac", +} + +re = { + "extend": "ac", + "registrant_country": None, + "domain_name": r"domain:\s+(.+)", + "registrar": r"registrar:\s+(.+)", + "name_servers": r"nserver:\s+(.+)", + "status": r"status:\s(.+)", + "creation_date": r"created:\s+(.+)", + "expiration_date": r"Expiry Date:\s+(.+)", + "updated_date": r"last-update:\s+(.*)", + "registrant_country": None, +} + +ro = { + "extend": None, + "domain_name": r"\s+Domain name:\s+(.+)", + "registrar": r"\s+Registrar:\s+(.+)", + "creation_date": r"\s+Registered On:\s+(.+)", + "expiration_date": r"\s+Expires On:\s+(.+)", + "status": r"\s+Domain Status:\s(.+)", + "name_servers": r"\s+NameServer:\s+(.+)", + "registrant_country": None, + "updated_date": None, +} + +rs = { + "domain_name": r"Domain name:\s+(.+)", + "registrar": r"Registrar:\s+(.+)", + "status": r"Domain status:\s(.+)", + "creation_date": r"Registration date:\s+(.+)", + "expiration_date": r"Expiration date:\s+(.+)", + "updated_date": r"Modification date:\s+(.+)", + "name_servers": r"DNS:\s+(.+)", + "registrant_country": None, +} + +# singapore +sg = { + "_server": "whois.sgnic.sg", + "registrar": r"Registrar:\s+(.+)", + "domain_name": r"\s+Domain name:\s+(.+)", + "creation_date": r"\s+Creation Date:\s+(.+)", + "expiration_date": r"\s+Expiration Date:\s+(.+)", + "updated_date": r"\s+Modified Date:\s+(.+)", + "status": r"\s+Domain Status:\s(.+)", + "registrant_country": None, + "name_servers": r"Name Servers:(?:\n[ \t]+(\S+)[^\n]*)(?:\n[ \t]+(\S+)[^\n]*)?(?:\n[ \t]+(\S+)[^\n]*)?(?:\n[ \t]+(\S+)[^\n]*)?", + # make sure the dnssec is not matched +} + +srl = { + "_server": "whois.afilias-srs.net", + "extend": "ac", + "registrant_country": r"Registrant Country:\s+(.+)", +} + +su = { + "extend": "ru", +} + +td = { + "_server": "whois.nic.td", + "extend": "ac", + "registrant_country": r"Registrant Country:\s+(.+)", +} + +tw = { + "extend": None, + "domain_name": r"Domain Name:\s+(.+)", + "creation_date": r"\s+Record created on\s+(.+)", + "expiration_date": r"\s+Record expires on\s+(.+)", + "status": r"\s+Domain Status:\s+(.+)", + "registrar": r"Registration\s+Service\s+Provider:\s+(.+)", + "updated_date": None, + "registrant_country": None, + "name_servers": r"Domain servers in listed order:\s*(\S+)[ \t]*\r?\n(?:\s+(\S+)[ \t]*\r?\n)?(?:\s+(\S+)[ \t]*\r?\n)?(?:\s+(\S+)[ \t]*\r?\n)?", +} + +com_tw = { + "extend": "tw", +} + +ug = { + "_server": "whois.co.ug", + "domain_name": r"Domain name:\s+(.+)", + "creation_date": r"Registered On:\s+(.+)", + "expiration_date": r"Expires On:\s+(.+)", + "status": r"Status:\s+(.+)", + "name_servers": r"Nameserver:\s+(.+)", + "registrant_country": r"Registrant Country:\s+(.+)", + "updated_date": r"Renewed On:\s+(.+)", + "registrar": None, +} + +co_ug = { + "extend": "ug", +} + +ca_ug = { + "extend": "ug", +} + +ws = { + "extend": None, + "domain_name": r"Domain Name:\s+(.+)", + "creation_date": r"Creation Date:\s+(.+)", + "expiration_date": r"Registrar Registration Expiration Date:\s+(.+)", + "updated_date": r"Updated Date:\s?(.+)", + "registrar": r"Registrar:\s+(.+)", + "status": r"Domain Status:\s(.+)", + "name_servers": r"Name Server:\s+(.+)", + "registrant_country": None, +} + +re = { + "domain_name": r"domain:\s+(.+)", + "status": r"status:\s+(.+)", + "registrar": r"registrar:\s+(.+)", + "name_servers": r"nserver:\s+(.+)", + "creation_date": r"created:\s+(.+)", + "expiration_date": r"Expiry Date:\s+(.+)", + "updated_date": r"last-update:\s+(.+)", + "registrant_country": None, +} + +bo = { + "domain_name": r"\s*NOMBRE DE DOMINIO:\s+(.+)", + "registrant_country": r"País:\s+(.+)", + "creation_date": r"Fecha de activación:\s+(.+)", + "expiration_date": r"Fecha de corte:\s+(.+)", + "extend": None, + "registrar": None, + "status": None, + "name_servers": None, # bo has no nameservers, use host -t ns + "updated_date": None, +} + +com_bo = {"extend": "bo"} + +hr = { + "domain_name": r"Domain Name:\s+(.+)", + "name_servers": r"Name Server:\s+(.+)", + "creation_date": r"Creation Date:\s+(.+)", + "updated_date": r"Updated Date:\s+(.+)", + "status": None, + "registrar": None, + "expiration_date": None, + "registrant_country": None, +} + +# 2022-06-20: mboot +# com_ec = {} +# gob_ec = {} + +# Registry operator: Zodiac Wang Limited +# WHOIS server: whois.gtld.knet.cn +_gtldKnet = { + "extend": "com", + "_server": "whois.gtld.knet.cn", + "admin": r"Admin\s*Name:\s+(.+)", +} + +wang = {"extend": "_gtldKnet"} +八卦 = {"extend": "_gtldKnet"} +商城 = {"extend": "_gtldKnet"} +网店 = {"extend": "_gtldKnet"} + +accountant = {"extend": "com", "_server": "whois.nic.accountant"} +cricket = {"extend": "com", "_server": "whois.nic.cricket"} +date = {"extend": "com", "_server": "whois.nic.date"} +faith = {"extend": "com", "_server": "whois.nic.faith"} +hiphop = {"extend": "com", "_server": "whois.nic.hiphop"} +loan = {"extend": "com", "_server": "whois.nic.loan"} +party = {"extend": "com", "_server": "whois.nic.party"} +racing = {"extend": "com", "_server": "whois.nic.racing"} +ren = {"extend": "com", "_server": "whois.nic.ren"} +review = {"extend": "com", "_server": "whois.nic.review"} +science = {"extend": "com", "_server": "whois.nic.science"} +webcam = {"extend": "com", "_server": "whois.nic.webcam"} +fashion = {"extend": "com", "_server": "whois.nic.fashion"} + +# Registry operator: UNR Corp. +# WHOIS server: whois.uniregistry.net +_uniregistry = { + "extend": "com", + "_server": "whois.uniregistry.net", +} + +help = {"extend": "_uniregistry"} +photo = {"extend": "_uniregistry"} +sexy = {"extend": "_uniregistry"} +gift = {"extend": "_uniregistry"} +tattoo = {"extend": "_uniregistry"} +property = {"extend": "_uniregistry"} +juegos = {"extend": "_uniregistry"} +hosting = {"extend": "_uniregistry"} +guitars = {"extend": "_uniregistry"} +flowers = {"extend": "_uniregistry"} +diet = {"extend": "_uniregistry"} +christmas = {"extend": "_uniregistry"} +blackfriday = {"extend": "_uniregistry"} +audio = {"extend": "_uniregistry"} + +# Registry operator: TLD REGISTRY LIMITED. +# WHOIS server: whois.teleinfo.cn +_teleinfo = { + "extend": "com", + "_server": "whois.teleinfo.cn", +} + +中文网 = {"extend": "_teleinfo"} +在线 = {"extend": "_teleinfo"} + +# RESTRICTED: now known as PrivateRegistry +# restricted domains never answer or never show information sufficient for parsing +# some only show if the domain is free, most allow using a website but some have no web +# but you may have to prove you are not a robot and limits apply also on the website +# some actually dont have a working whois server +# details can be found at: +# (https://www.iana.org/domains/root/db/.html) + +_privateReg = { + "_privateRegistry": True, +} + +al = {"extend": "_privateReg"} +az = {"extend": "_privateReg"} +ba = {"extend": "_privateReg"} +ch = {"extend": "_privateReg"} +cv = {"extend": "_privateReg"} # Cape Verde +cw = {"extend": "_privateReg"} +es = {"extend": "_privateReg"} +ga = {"extend": "_privateReg"} +gr = {"extend": "_privateReg"} +hu = {"extend": "_privateReg"} +li = {"extend": "_privateReg"} +mp = {"extend": "_privateReg"} +my = {"extend": "_privateReg"} +pk = {"extend": "_privateReg"} +py = {"extend": "_privateReg"} # Paraguay:https://www.iana.org/domains/root/db/py.html +com_py = {"extend": "_privateReg"} +sr = {"extend": "_privateReg"} +ke = {"extend": "_privateReg"} # Kenia +co_ke = {"extend": "_privateReg"} + +# https://www.iana.org/domains/root/db/td.html +# td = {"extend": "_privateReg"} # Chad (French: Tchad) made available for use in 1997. + +tk = {"extend": "_privateReg"} +to = {"extend": "_privateReg"} # +uy = {"extend": "_privateReg"} # Uruguay +va = {"extend": "_privateReg"} # This TLD has no whois server. +vu = {"extend": "_privateReg"} # all dates 1970 , no furter relevant info +vn = {"extend": "_privateReg"} +# +zw = {"extend": "_privateReg"} # Zimbabwe ; # This TLD has no whois server +com_zw = {"extend": "zw"} +org_zw = {"extend": "zw"} + +# Nepal +np = { + "extend": "_privateReg" +} # This TLD has no whois server, but you can access the whois database at https://www.mos.com.np/ +com_np = {"extend": "np"} + +# Ecuador +ec = {"extend": "_privateReg"} +com_ec = {"extend": "ec"} +gob_ec = {"extend": "ec"} + +# https://umbrella.cisco.com/blog/on-the-trail-of-malicious-dynamic-dns-domains +hopto_org = {"extend": "_privateReg"} # dynamic dns without any whois +duckdns_org = {"extend": "_privateReg"} # dynamic dns without any whois +# changeip_com = {"extend": "_privateReg"} # dynamic dns without any whois +# dnsdynamic_org = {"extend": "_privateReg"} # dynamic dns without any whois +noip_com = {"extend": "_privateReg"} # dynamic dns without any whois +noip_org = {"extend": "_privateReg"} # dynamic dns without any whois +# freedns_afraid_org = {"extend": "_privateReg"} # dynamic dns without any whois +# dyndns_com = {"extend": "_privateReg"} # dynamic dns without any whois +# sitelutions_com = {"extend": "_privateReg"} # dynamic dns without any whois +# 3322_org = {"extend": "_privateReg"} # dynamic dns without any whois + +# https://en.wikipedia.org/wiki/.onion, a "official" fake domain +onion = {"extend": "_privateReg"} + +# backend registry for domain names ending in GG, JE, and AS. +# lines may have \r actually before \n , updated all 3 domains return all nameservers +gg = { + "domain_name": r"Domain:\s*\n\s+(.+)", + "status": r"Domain Status:\s*\n\s+(.+)", + "registrar": r"Registrar:\s*\n\s+(.+)", + "name_servers": r"Name servers:(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?(?:\n\s+(\S+))?\n", + "creation_date": r"Relevant dates:\s*\n\s+Registered on(.+)", + "expiration_date": None, + "updated_date": None, + "registrant_country": None, +} + +as_ = {"extend": "gg"} +je = {"extend": "gg"} + +sn = { + "_server": "whois.nic.sn", + "domain_name": r"Nom de domaine:\s+(.+)", + "status": r"Statut:\s+(.+)", + "registrar": r"Registrar:\s+(.+)", + "name_servers": r"Serveur de noms:\s*(.+)", + "creation_date": r"Date de création:\s+(.+)", + "expiration_date": r"Date d'expiration:\s+(.+)", + "updated_date": r"Dernière modification:\s+(.+)", + "registrant_country": None, +} + +si = { + "domain_name": r"domain:\s+(.+)", + "status": r"status:\s+(.+)", + "registrar": r"registrar:\s+(.+)", + "name_servers": r"nameserver:\s*(.+)", + "creation_date": r"created:\s+(.+)", + "expiration_date": r"expire:\s+(.+)", + "updated_date": None, + "registrant_country": None, +} + +do = {"extend": "_privateReg"} +com_do = {"extend": "_privateReg"} +cx = {"extend": "com"} +dz = {"extend": "_privateReg"} +gd = {"extend": "com"} +mn = {"extend": "com"} +tl = {"extend": "com"} +gay = {"extend": "com", "_server": "whois.nic.gay"} +tt = {"extend": "_privateReg"} +mo = { + "extend": "com", + "creation_date": r"created on\s+(.+)", + "expiration_date": r"expires on\s+(.+)", + "name_servers": r"Domain name servers:\s*\-+(?:\s*(\S+)\n)(?:\s*(\S+)\n)?(?:\s*(\S+)\n)?(?:\s*(\S+)\n)?", +} +com_mo = {"extend": "mo"} +st = { + # .ST domains can now be registered with many different competing registrars. and hence different formats + # >>> line appears quite early, valid info after would have been suppressed with the ^>>> cleanup rule: switched off + "extend": "com", + "registrant_country": r"registrant-country:\s+(\S+)", + "registrant": r"registrant-organi(?:s|z)ation:\s*(.+)\r?\n", +} + +so = {"extend": "com"} +nrw = {"extend": "com"} +lat = {"extend": "com"} +realestate = {"_server": "whois.nic.realestate", "extend": "com"} +ph = {"extend": "_privateReg"} +com_ph = {"extend": "ph"} +org_ph = {"extend": "ph"} +net_ph = {"extend": "ph"} +zm = {"extend": "com"} +sy = {"extend": "_privateReg", "_server": "whois.tld.sy"} +tr = {"extend": "_privateReg"} +onl = {"extend": "com"} +blue = {"extend": "com"} +garden = {"extend": "com", "_server": "whois.nic.garden"} +promo = {"extend": "com", "_server": "whois.nic.promo"} + +pyc_ = {"extend": "com"} + +mn = {"extend": "com", "_server": "whois.nic.mn"} + +africa = {"extend": "com", "_server": "whois.nic.africa"} + +green = {"extend": "com"} + +mk = { + "extend": None, + "_server": "whois.marnet.mk", + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant": r"registrant:\s?(.+)", + "registrant_country": r"Registrant Country:\s?(.+)", + "creation_date": r"registered:\s?(.+)", + "expiration_date": r"expire:\s?(.+)", + "updated_date": r"changed:\s?(.+)", + "name_servers": r"nserver:\s*(.+)\s*", + "status": r"Status:\s?(.+)", + # the trailing domain must have minimal 2 parts firstname.lastname@fld.tld + # it may actually have more then 4 levels + # to match the dot in firstname.lastname we must use \. + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +observer = {"extend": "com", "_server": "whois.nic.observer"} +one = {"extend": "com", "_server": "whois.nic.one"} +page = {"extend": "com", "_server": "whois.nic.google"} + +bf = { + "extend": "com", + "_server": "whois.nic.bf", + "registrant": r"Registrant Name:\s?(.+)", +} +bz = {"extend": "_privateReg"} + +si = { + "extend": None, + "_server": "whois.register.si", + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant": r"registrant:\s?(.+)", + "registrant_country": r"Registrant Country:\s?(.+)", + "creation_date": r"created:\s?(.+)", + "expiration_date": r"expire:\s?(.+)", + "updated_date": r"changed:\s?(.+)", + "name_servers": r"nameserver:\s*(.+)\s*", + "status": r"Status:\s?(.+)", + # the trailing domain must have minimal 2 parts firstname.lastname@fld.tld + # it may actually have more then 4 levels + # to match the dot in firstname.lastname we must use \. + "emails": r"[\w\.-]+@[\w\.-]+\.[\w]{2,4}", +} + +sx = {"extend": "com", "_server": "whois.sx"} + +tc = { + "extend": "com", + "_server": "whois.nic.tc", + "domain_name": r"Domain Name:\s?(.+)", + "registrar": r"Sponsoring Registrar:\s?(.+)", + "creation_date": r"Creation Date:\s?(.+)", + "expiration_date": r"Registry Expiry Date:\s?(.+)", + "name_servers": r"Name Server:\s*(.+)\s*", + "status": r"Domain Status:\s?(.+)", +} + +wf = { + "extend": "com", + "_server": "whois.nic.wf", + "domain_name": r"domain:\s?(.+)", + "registrar": r"registrar:\s?(.+)", + "registrant": r"registrant:\s?(.+)", + "registrant_country": r"Registrant Country:\s?(.+)", + "creation_date": r"created:\s?(.+)", + "expiration_date": r"Expiry Date:\s?(.+)", + "updated_date": r"last-update:\s?(.+)", + "name_servers": r"nserver:\s*(.+)\s*", + "status": r"\nstatus:\s?(.+)", +} + +lk = {"extend": "_privateReg"} # Sri Lanka, whois.nic.lk exists but does not answer +eg = {"extend": "_privateReg"} # Egipt +com_eg = {"extend": "_privateReg"} # Egipt + +mo = { + "extend": "com", + "_server": "whois.monic.mo", + "name_servers": r"Domain name servers:\s+-+\s+(\S+)\n(?:(\S+)\n)?(?:(\S+)\n)?(?:(\S+)\n)?", + "creation_date": r"Record created on (.+)", + "expiration_date": r"Record expires on (.+)", +} + +ph = {"extend": "_privateReg"} + +vc = {"extend": "com"} +cm = {"extend": "com"}