Repository: richardpenman/whois Branch: master Commit: d4514a29df64 Files: 150 Total size: 411.5 KB Directory structure: gitextract_pxww6m4u/ ├── .github/ │ └── workflows/ │ └── python-package.yml ├── .gitignore ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── requirements.txt ├── setup.py ├── test/ │ ├── __init__.py │ ├── samples/ │ │ ├── expected/ │ │ │ ├── abc.rs │ │ │ ├── abc.xyz │ │ │ ├── about.us │ │ │ ├── abv.bg │ │ │ ├── afip.gob.ar │ │ │ ├── allegro.pl │ │ │ ├── amazon.co.uk │ │ │ ├── app.nl │ │ │ ├── brainly.lat │ │ │ ├── cbc.ca │ │ │ ├── cyberciti.biz │ │ │ ├── davidwalsh.name │ │ │ ├── digg.com │ │ │ ├── druid.fi │ │ │ ├── drupalcamp.by │ │ │ ├── eurid.eu │ │ │ ├── google.ai │ │ │ ├── google.at │ │ │ ├── google.cl │ │ │ ├── google.co.cr │ │ │ ├── google.co.id │ │ │ ├── google.co.il │ │ │ ├── google.co.ve │ │ │ ├── google.com │ │ │ ├── google.com.br │ │ │ ├── google.com.pe │ │ │ ├── google.com.sa │ │ │ ├── google.com.sg │ │ │ ├── google.com.tr │ │ │ ├── google.com.tw │ │ │ ├── google.com.ua │ │ │ ├── google.de │ │ │ ├── google.do │ │ │ ├── google.fr │ │ │ ├── google.hn │ │ │ ├── google.hu │ │ │ ├── google.ie │ │ │ ├── google.it │ │ │ ├── google.kg │ │ │ ├── google.lu │ │ │ ├── google.lv │ │ │ ├── google.mx │ │ │ ├── google.ro │ │ │ ├── google.sk │ │ │ ├── imdb.com │ │ │ ├── liechtenstein.li │ │ │ ├── microsoft.com │ │ │ ├── nic.live │ │ │ ├── nyan.cat │ │ │ ├── reddit.com │ │ │ ├── research.google │ │ │ ├── sapo.pt │ │ │ ├── sbc.org.hk │ │ │ ├── seal.jobs │ │ │ ├── shazow.net │ │ │ ├── slashdot.org │ │ │ ├── squatter.net │ │ │ ├── titech.ac.jp │ │ │ ├── translate.goog │ │ │ ├── urlowl.com │ │ │ ├── web.de │ │ │ ├── willhaben.at │ │ │ ├── www.gov.uk │ │ │ ├── yahoo.co.jp │ │ │ ├── yahoo.co.nz │ │ │ ├── yandex.kz │ │ │ └── yandex.ru │ │ └── whois/ │ │ ├── abc.rs │ │ ├── abc.xyz │ │ ├── about.us │ │ ├── abv.bg │ │ ├── afip.gob.ar │ │ ├── allegro.pl │ │ ├── amazon.co.uk │ │ ├── app.nl │ │ ├── brainly.lat │ │ ├── cbc.ca │ │ ├── cyberciti.biz │ │ ├── davidwalsh.name │ │ ├── digg.com │ │ ├── druid.fi │ │ ├── drupalcamp.by │ │ ├── eurid.eu │ │ ├── google.ai │ │ ├── google.at │ │ ├── google.cl │ │ ├── google.co.cr │ │ ├── google.co.id │ │ ├── google.co.il │ │ ├── google.co.ve │ │ ├── google.com │ │ ├── google.com.br │ │ ├── google.com.pe │ │ ├── google.com.sa │ │ ├── google.com.sg │ │ ├── google.com.tr │ │ ├── google.com.tw │ │ ├── google.com.ua │ │ ├── google.de │ │ ├── google.do │ │ ├── google.fr │ │ ├── google.hn │ │ ├── google.hu │ │ ├── google.ie │ │ ├── google.it │ │ ├── google.kg │ │ ├── google.lu │ │ ├── google.lv │ │ ├── google.mx │ │ ├── google.ro │ │ ├── google.sk │ │ ├── imdb.com │ │ ├── liechtenstein.li │ │ ├── microsoft.com │ │ ├── nic.live │ │ ├── nyan.cat │ │ ├── reddit.com │ │ ├── sapo.pt │ │ ├── sbc.org.hk │ │ ├── seal.jobs │ │ ├── shazow.net │ │ ├── slashdot.org │ │ ├── squatter.net │ │ ├── titech.ac.jp │ │ ├── urlowl.com │ │ ├── web.de │ │ ├── willhaben.at │ │ ├── www.gov.uk │ │ ├── yahoo.co.jp │ │ ├── yahoo.co.nz │ │ ├── yandex.kz │ │ └── yandex.ru │ ├── test_ipv6.py │ ├── test_main.py │ ├── test_nicclient.py │ ├── test_parser.py │ └── test_query.py └── whois/ ├── __init__.py ├── exceptions.py ├── parser.py ├── time_zones.py └── whois.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/python-package.yml ================================================ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python name: Python package on: push: branches: [ "master" ] pull_request: types: - opened - reopened - edited - synchronize jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | python -m pytest ================================================ FILE: .gitignore ================================================ *.pyc ================================================ FILE: LICENSE.txt ================================================ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MANIFEST.in ================================================ include whois/data/public_suffix_list.dat include LICENSE.txt README.md ================================================ FILE: README.md ================================================ # Goal - Create a simple importable Python module which will produce parsed WHOIS data for a given domain. - Able to extract data for all the popular TLDs (com, org, net, ...) - Query a WHOIS server directly instead of going through an intermediate web service like many others do. # Example ```python >>> import whois >>> w = whois.whois('example.com') >>> w.expiration_date # dates converted to datetime object datetime.datetime(2022, 8, 13, 4, 0, tzinfo=tzoffset('UTC', 0)) >>> w.text # the content downloaded from whois server u'\nDomain Name: EXAMPLE.COM Registry Domain ID: 2336799_DOMAIN_COM-VRSN ...' >>> print(w) # print values of all found attributes { "creation_date": "1995-08-14 04:00:00+00:00", "expiration_date": "2022-08-13 04:00:00+00:00", "updated_date": "2021-08-14 07:01:44+00:00", "domain_name": "EXAMPLE.COM", "name_servers": [ "A.IANA-SERVERS.NET", "B.IANA-SERVERS.NET" ], ... ``` # Install Install from pypi: ```bash pip install python-whois ``` Or checkout latest version from repository: ```bash git clone git@github.com:richardpenman/whois.git pip install -r requirements.txt ``` Run test cases: ```bash python -m pytest ``` # Using a proxy. Set your environment SOCKS variable ```bash export SOCKS="username:password@proxy_address:port" ``` # Problems? Pull requests are welcome! Thanks to the many who have sent patches for additional TLDs. If you want to add or fix a TLD it's quite straightforward. See example domains in [whois/parser.py](https://github.com/richardpenman/whois/blob/master/whois/parser.py) Basically each TLD has a similar format to the following: ```python class WhoisOrg(WhoisEntry): """Whois parser for .org domains """ regex = { 'domain_name': 'Domain Name: *(.+)', 'registrar': 'Registrar: *(.+)', 'whois_server': 'Whois Server: *(.+)', ... } def __init__(self, domain, text): if text.strip() == 'NOT FOUND': raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) ``` ================================================ FILE: requirements.txt ================================================ python-dateutil==2.9.0.post0 ================================================ FILE: setup.py ================================================ import os import setuptools def read(filename): return open(os.path.join(os.path.dirname(__file__), filename)).read() setuptools.setup( name="python-whois", version="0.9.6", description="Whois querying and parsing of domain registration information.", long_description=read("README.md"), long_description_content_type="text/markdown", classifiers=[ "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Programming Language :: Python :: 3", ], keywords="whois, python", author="Richard Penman", author_email="richard.penman@gmail.com", url="https://github.com/richardpenman/whois", license="MIT", packages=["whois"], package_dir={"whois": "whois"}, install_requires=["python-dateutil"], test_suite="nose.collector", tests_require=["nose", "simplejson"], include_package_data=True, zip_safe=False, ) ================================================ FILE: test/__init__.py ================================================ ================================================ FILE: test/samples/expected/abc.rs ================================================ {"domain_name": "abc.rs", "expiration_date": "2026-03-26 16:18:03+00:00", "updated_date": "2025-02-11 08:24:15+00:00", "registrar": "Mainstream Public Cloud Services d.o.o.", "registrar_url": null, "creation_date": "2008-03-26 16:18:03+00:00", "status": "Active https://www.rnids.rs/en/domain-name-status-codes#Active"} ================================================ FILE: test/samples/expected/abc.xyz ================================================ {"domain_name": "ABC.XYZ", "registry_domain_id": "D2192285-CNIC", "whois_server": "D2192285-CNIC", "registrar_url": null, "updated_date": "2025-03-10 15:22:23+00:00", "creation_date": "2014-03-20 12:59:17+00:00", "expiration_date": "2026-03-20 23:59:59+00:00", "registrar": "MarkMonitor, Inc (TLDs)", "regisrar_id": "292", "status": ["clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited", "clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited"], "name_servers": ["NS2.GOOGLE.COM", "NS4.GOOGLE.COM", "NS3.GOOGLE.COM", "NS1.GOOGLE.COM"], "dnssec": "unsigned", "registrar_email": "registryescalations@markmonitor.com", "registrar_phone": "+1.2083895740"} ================================================ FILE: test/samples/expected/about.us ================================================ {"domain_name": "about.us", "expiration_date": "2018-04-17 23:59:59+00:00", "updated_date": "2017-06-02 01:30:53+00:00", "registrar": "Neustar, Inc.", "registrar_url": "www.neustarregistry.biz", "creation_date": "2002-04-18 15:16:22+00:00", "status": ["serverTransferProhibited https://icann.org/epp#serverTransferProhibited", "clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited"]} ================================================ FILE: test/samples/expected/abv.bg ================================================ {"domain_name": "abv.bg", "expiration_date": null, "updated_date": null, "registrar": null, "registrar_url": null, "creation_date": null, "status": "Registered"} ================================================ FILE: test/samples/expected/afip.gob.ar ================================================ {"domain_name": "afip.gob.ar", "expiration_date": "2019-05-26 00:00:00+00:00", "updated_date": ["2018-05-19 12:18:44.329522+00:00", "2019-03-21 20:38:40.827111+00:00"], "registrar": "nicar", "registrar_url": null, "creation_date": "1997-05-26 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/allegro.pl ================================================ {"domain_name": "allegro.pl", "expiration_date": "2018-10-26 15:00:00+00:00", "updated_date": ["2017-10-17 07:01:25+00:00", "2017-03-27 00:00:00+00:00"], "registrar": "Corporation Service Company", "registrar_url": null, "creation_date": "1999-10-27 13:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/amazon.co.uk ================================================ {"domain_name": "amazon.co.uk", "expiration_date": "2020-12-05 00:00:00+00:00", "updated_date": "2013-10-23 00:00:00+00:00", "registrar": "Amazon.com, Inc. t/a Amazon.com, Inc. [Tag = AMAZON-COM]", "registrar_url": "http://www.amazon.com", "creation_date": "1996-08-01 00:00:00+00:00", "status": "Registered until expiry date."} ================================================ FILE: test/samples/expected/app.nl ================================================ { "domain_name": "app.nl", "expiration_date": null, "updated_date": "2025-09-12 00:00:00+00:00", "creation_date": "1998-02-20 00:00:00+00:00", "status": "active", "registrar": "Hosting Secure", "registrar_address": "Weesperstraat 61", "registrar_postal_code": "1018VN", "registrar_city": "Amsterdam", "registrar_country": "Netherlands", "reseller": "Hoasted", "reseller_address": "Weesperstraat 61", "reseller_postal_code": "3512AB", "reseller_city": "Amsterdam", "reseller_country": "Netherlands", "abuse_phone": "+31.0202018165", "abuse_email": "abuse@hostingsecure.com", "dnssec": "yes", "name_servers": [ "ns1.hoasted.nl", "ns2.hoasted.eu", "ns3.hoasted.com" ] } ================================================ FILE: test/samples/expected/brainly.lat ================================================ {"domain_name": "brainly.lat", "expiration_date": "2019-07-31 15:59:27+00:00", "updated_date": "2018-07-22 09:01:05+00:00", "registrar": "Instra Corporation Pty Ltd.", "registrar_url": "http://www.instra.com/", "creation_date": "2015-07-31 15:59:27+00:00", "status": "ok http://www.icann.org/epp#OK"} ================================================ FILE: test/samples/expected/cbc.ca ================================================ {"domain_name": "cbc.ca", "expiration_date": "2019-11-24 05:00:00+00:00", "updated_date": "2018-10-26 02:15:16+00:00", "registrar": "Authentic Web Inc.", "registrar_url": "authenticweb.com", "creation_date": "2000-10-16 13:56:05+00:00", "status": ["clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited", "serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited", "serverTransferProhibited https://icann.org/epp#serverTransferProhibited", "serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited"]} ================================================ FILE: test/samples/expected/cyberciti.biz ================================================ {"domain_name": "CYBERCITI.BIZ", "expiration_date": "2024-06-30 23:59:59+00:00", "updated_date": "2018-07-11 05:55:25+00:00", "registrar": "GoDaddy.com, LLC", "registrar_url": "http://www.godaddy.com", "creation_date": "2002-07-01 09:31:21+00:00", "status": ["clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited", "clientUpdateProhibited http://www.icann.org/epp#clientUpdateProhibited", "clientRenewProhibited http://www.icann.org/epp#clientRenewProhibited", "clientDeleteProhibited http://www.icann.org/epp#clientDeleteProhibited"]} ================================================ FILE: test/samples/expected/davidwalsh.name ================================================ {"domain_name": "DAVIDWALSH.NAME", "expiration_date": null, "updated_date": null, "registrar": null, "registrar_url": null, "creation_date": null, "status": "clientTransferProhibited https://icann.org/epp#clientTransferProhibited"} ================================================ FILE: test/samples/expected/digg.com ================================================ {"domain_name": "DIGG.COM", "expiration_date": "2010-02-20 00:00:00+00:00", "updated_date": "2007-03-13 00:00:00+00:00", "registrar": "GODADDY.COM, INC.", "registrar_url": null, "creation_date": "2000-02-20 00:00:00+00:00", "status": ["clientDeleteProhibited", "clientRenewProhibited", "clientTransferProhibited", "clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/druid.fi ================================================ {"domain_name": "druid.fi", "expiration_date": "2022-07-17 00:00:00+00:00", "updated_date": "2019-03-19 00:00:00+00:00", "registrar": "CSL Computer Service Langenbach GmbH (d/b/a joker.com)", "registrar_url": null, "creation_date": "2012-07-18 00:00:00+00:00", "status": "Registered"} ================================================ FILE: test/samples/expected/drupalcamp.by ================================================ {"domain_name": "drupalcamp.by", "expiration_date": "2020-07-25 00:00:00+00:00", "updated_date": null, "registrar": "Active Technologies LLC", "registrar_url": null, "creation_date": "2018-07-25 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/eurid.eu ================================================ { "domain_name": "eurid.eu", "script": "LATIN", "reseller_org": null, "reseller_lang": null, "reseller_email": null, "tech_org": "EURid vzw", "tech_lang": "en", "tech_email": "tech@eurid.eu", "registrar": "EURid vzw", "registrar_url": "https://www.eurid.eu", "name_servers": [ "ns3.eurid.eu (185.36.4.253)", "ns3.eurid.eu (2001:67c:9c:3937::253)", "nsx.eurid.eu (185.151.141.1)", "nsx.eurid.eu (2a02:568:fe00::6575)", "ns1.eurid.eu (2001:67c:9c:3937::252)", "ns1.eurid.eu (185.36.4.252)", "ns2.eurid.eu (2001:67c:40:3937::252)", "ns2.eurid.eu (185.36.6.252)", "ns4.eurid.eu (2001:67c:40:3937::253)", "ns4.eurid.eu (185.36.6.253)", "nsp.netnod.se" ], "dnssec_flags": "KSK", "dnssec_protocol": "3", "dnssec_algorithm": "RSA_SHA256", "dnssec_pubkey": "AwEAAcOQldGtC33GLx8s335UscKMPlWjDXCqbhR2QyAYcfS4CZS6YHg3A1Zz/K3VurTZF68aSaRkNupZuEgt4jozE3v4+t+2qOfiATvoOCrf74hWduBPwk9Go0z7FVlDkok1/qMQmqOtih8TFP85b+w6F/uyLMZS1JowMDUzRurmHJVoT4lW9+OCdrhuQFK9vU24Y8BmacoRy6mWBCFlysizlOIodwmquOf5A+3Nz0B3TLCK4fIYJYVxCUVlpRJ7uaBS+GLD7afuxkEesReYHgPWZFSDMbXk9Ugh+qUi8tEKKFls9TM3lK9BPBcciXUhI1bRJSHftqcNpMmLqg/79SwoWGc=" } ================================================ FILE: test/samples/expected/google.ai ================================================ {"domain_name": "google.ai", "expiration_date": "2025-09-25 05:37:20+00:00", "updated_date": "2025-01-23 22:17:03+00:00", "registrar": "MarkMonitor Inc.", "registrar_url": null, "creation_date": "2017-12-16 05:37:20+00:00", "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.at ================================================ {"domain_name": "google.at", "expiration_date": null, "updated_date": ["2011-04-26 17:57:27+00:00", "2011-01-11 00:07:31+00:00", "2005-06-17 21:36:20+00:00", "2011-01-11 00:08:30+00:00"], "registrar": "MarkMonitor Inc. ( https://nic.at/registrar/434 )", "registrar_url": null, "creation_date": null, "status": null} ================================================ FILE: test/samples/expected/google.cl ================================================ {"domain_name": "google.cl", "expiration_date": "2019-11-20 14:48:02+00:00", "updated_date": null, "registrar": "MarkMonitor Inc.", "registrar_url": "https://markmonitor.com/", "creation_date": "2002-10-22 17:48:23+00:00", "status": null} ================================================ FILE: test/samples/expected/google.co.cr ================================================ {"domain_name": "google.co.cr", "expiration_date": "2020-04-17 00:00:00+00:00", "updated_date": ["2017-02-28 06:39:42+00:00", "2019-03-28 03:49:37+00:00", "2016-03-30 10:37:14+00:00"], "registrar": "NIC-REG1", "registrar_url": null, "creation_date": "2002-04-18 18:00:00+00:00", "status": ["Deletion forbidden", "Sponsoring registrar change forbidden", "Update forbidden", "Administratively blocked", "Registrant change forbidden"]} ================================================ FILE: test/samples/expected/google.co.id ================================================ {"domain_name": "GOOGLE.CO.ID", "expiration_date": "2026-09-01 23:59:59+00:00", "updated_date": "2025-08-05 05:00:20+00:00", "registrar": "PT Digital Registra Indonesia", "registrar_url": "www.digitalregistra.co.id", "creation_date": "2004-12-18 13:33:21+00:00", "status": ["clientDeleteProhibited", "clientRenewProhibited", "clientTransferProhibited", "clientUpdateProhibited", "serverDeleteProhibited", "serverRenewProhibited", "serverTransferProhibited", "serverUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.co.il ================================================ {"domain_name": "google.co.il", "expiration_date": "2026-06-05 00:00:00+00:00", "updated_date": null, "registrar": "Domain The Net Technologies Ltd", "registrar_url": null, "creation_date": "1999-06-05 00:00:00+00:00", "status": "Transfer Locked"} ================================================ FILE: test/samples/expected/google.co.ve ================================================ {"domain_name": "google.co.ve", "expiration_date": "2018-03-06 00:00:00+00:00", "updated_date": "2005-11-17 20:35:01+00:00", "registrar": null, "registrar_url": null, "creation_date": "2003-03-06 00:00:00+00:00", "status": "ACTIVO"} ================================================ FILE: test/samples/expected/google.com ================================================ {"domain_name": "GOOGLE.COM", "expiration_date": "2011-09-14 00:00:00+00:00", "updated_date": "2006-04-10 00:00:00+00:00", "registrar": "MARKMONITOR INC.", "registrar_url": null, "creation_date": "1997-09-15 00:00:00+00:00", "status": ["clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.com.br ================================================ {"domain_name": "google.com.br", "expiration_date": "2020-05-18 00:00:00+00:00", "updated_date": ["2019-04-17 00:00:00+00:00", "2018-03-24 00:00:00+00:00", "2018-10-11 00:00:00+00:00"], "registrar": null, "registrar_url": null, "creation_date": ["1999-05-18 00:00:00+00:00", "2010-05-20 00:00:00+00:00", "2002-06-19 00:00:00+00:00"], "status": "published"} ================================================ FILE: test/samples/expected/google.com.pe ================================================ {"domain_name": "google.com.pe", "expiration_date": null, "updated_date": null, "registrar": "MarkMonitor Inc.", "registrar_url": null, "creation_date": null, "status": ["clientTransferProhibited", "clientDeleteProhibited", "clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.com.sa ================================================ {"domain_name": "google.com.sa", "expiration_date": null, "updated_date": "2019-02-06 00:00:00+00:00", "registrar": null, "registrar_url": null, "creation_date": "2004-01-11 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/google.com.sg ================================================ {"domain_name": "google.com.sg", "expiration_date": "2025-07-04 16:00:00+00:00", "updated_date": "2024-06-03 09:54:56+00:00", "registrar": "MarkMonitor Inc.", "registrar_url": null, "creation_date": "2002-07-05 09:42:32+00:00", "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.com.tr ================================================ {"domain_name": "google.com.tr", "expiration_date": "2019-08-22 00:00:00+00:00", "updated_date": null, "registrar": null, "registrar_url": null, "creation_date": "2001-08-23 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/google.com.tw ================================================ {"domain_name": "google.com.tw", "expiration_date": "2019-11-09 00:00:00+00:00", "updated_date": null, "registrar": "Markmonitor, Inc.", "registrar_url": "http://www.markmonitor.com/", "creation_date": "2000-08-29 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/google.com.ua ================================================ {"domain_name": "google.com.ua", "expiration_date": "2019-12-04 00:00:00+02:00", "updated_date": "2018-11-02 11:29:08+02:00", "registrar": "MarkMonitor Inc.", "registrar_url": "http://markmonitor.com", "creation_date": ["2002-12-04 00:00:00+02:00", "2017-07-28 23:53:31+03:00"], "status": ["clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited", "ok", "linked"]} ================================================ FILE: test/samples/expected/google.de ================================================ {"domain_name": "google.de", "expiration_date": null, "updated_date": "2018-03-12 21:44:25+01:00", "registrar": null, "registrar_url": null, "creation_date": null, "status": "connect"} ================================================ FILE: test/samples/expected/google.do ================================================ {"domain_name": "google.do", "expiration_date": "2020-03-08 04:00:00+00:00", "updated_date": "2019-02-07 17:54:31.560000+00:00", "registrar": "Registrar NIC .DO (midominio.do)", "registrar_url": null, "creation_date": "2010-03-08 04:00:00+00:00", "status": "ok https://icann.org/epp#ok"} ================================================ FILE: test/samples/expected/google.fr ================================================ {"domain_name": "google.fr", "expiration_date": "2026-12-30 17:16:48+00:00", "updated_date": "2025-12-03 10:12:00.351952+00:00", "registrar": "MARKMONITOR Inc.", "registrar_url": null, "creation_date": "2000-07-26 22:00:00+00:00", "status": ["ACTIVE", "serverUpdateProhibited", "serverTransferProhibited", "serverDeleteProhibited", "serverRecoverProhibited", "associated", "not identified", "ok"]} ================================================ FILE: test/samples/expected/google.hn ================================================ {"domain_name": "google.hn", "expiration_date": "2020-03-07 05:00:00+00:00", "updated_date": "2019-02-03 10:43:28.837000+00:00", "registrar": "MarkMonitor", "registrar_url": "http://www.markmonitor.com", "creation_date": "2003-03-07 05:00:00+00:00", "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.hu ================================================ {"domain_name": "google.hu", "expiration_date": null, "updated_date": null, "registrar": null, "registrar_url": null, "creation_date": "2000-03-03 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/google.ie ================================================ {"domain_name": "google.ie", "expiration_date": "2022-03-21 14:13:27+00:00", "updated_date": null, "registrar": "Markmonitor Inc", "registrar_url": null, "creation_date": "2002-03-21 00:00:00+00:00", "status": ["serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited", "serverTransferProhibited https://icann.org/epp#serverTransferProhibited", "serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited"]} ================================================ FILE: test/samples/expected/google.it ================================================ {"domain_name": "google.it", "expiration_date": "2019-04-21 00:00:00+00:00", "updated_date": "2018-05-07 00:54:15+00:00", "registrar": "MarkMonitor International Limited", "registrar_url": null, "creation_date": "1999-12-10 00:00:00+00:00", "status": "ok"} ================================================ FILE: test/samples/expected/google.kg ================================================ {"domain_name": "GOOGLE.KG", "expiration_date": "2026-03-28 23:59:00+00:00", "updated_date": "2025-03-05 00:13:49+00:00", "registrar": null, "registrar_url": null, "creation_date": "2004-02-10 09:42:42+00:00", "status": null} ================================================ FILE: test/samples/expected/google.lu ================================================ {"domain_name": "google.lu", "expiration_date": null, "updated_date": null, "registrar": "Markmonitor", "registrar_url": null, "creation_date": null, "status": "ACTIVE"} ================================================ FILE: test/samples/expected/google.lv ================================================ {"domain_name": "google.lv", "expiration_date": null, "updated_date": "2024-09-03 17:12:28.647770+00:00", "registrar": null, "registrar_url": null, "creation_date": null, "status": null} ================================================ FILE: test/samples/expected/google.mx ================================================ {"domain_name": "google.mx", "expiration_date": "2020-05-11 00:00:00+00:00", "updated_date": "2019-04-12 00:00:00+00:00", "registrar": "MarkMonitor", "registrar_url": null, "creation_date": "2009-05-12 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/google.ro ================================================ {"domain_name": "google.ro", "expiration_date": "2019-09-17 00:00:00+00:00", "updated_date": null, "registrar": "MarkMonitor Inc.", "registrar_url": null, "creation_date": "2000-07-17 00:00:00+00:00", "status": "UpdateProhibited"} ================================================ FILE: test/samples/expected/google.sk ================================================ {"domain_name": "google.sk", "expiration_date": "2019-07-24 00:00:00+00:00", "updated_date": "2018-07-03 00:00:00+00:00", "registrar": "FAJNOR IP s. r. o.", "registrar_url": null, "creation_date": "2003-07-24 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/imdb.com ================================================ {"domain_name": "IMDB.COM", "expiration_date": "2016-01-04 00:00:00+00:00", "updated_date": "2008-03-28 00:00:00+00:00", "registrar": "NETWORK SOLUTIONS, LLC.", "registrar_url": null, "creation_date": "1996-01-05 00:00:00+00:00", "status": "clientTransferProhibited"} ================================================ FILE: test/samples/expected/liechtenstein.li ================================================ {"domain_name": "liechtenstein.li", "expiration_date": null, "updated_date": null, "registrar": "switchplus AG", "registrar_url": null, "creation_date": "1996-02-08 00:00:00+00:00", "status": null} ================================================ FILE: test/samples/expected/microsoft.com ================================================ {"domain_name": "MICROSOFT.COM", "expiration_date": "2014-05-03 00:00:00+00:00", "updated_date": "2006-10-10 00:00:00+00:00", "registrar": "CRONON AG BERLIN, NIEDERLASSUNG REGENSBURG", "registrar_url": null, "creation_date": "1991-05-02 00:00:00+00:00", "status": ["clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/nic.live ================================================ {"domain_name": "nic.live", "expiration_date": "2025-04-27 22:04:24+00:00", "updated_date": "2024-06-11 22:04:34+00:00", "registrar": "Registry Operator acts as Registrar (9999)", "registrar_url": "https://identity.digital", "creation_date": "2015-04-27 22:04:24+00:00", "status": ["ACTIVE", "serverTransferProhibited https://icann.org/epp#serverTransferProhibited"]} ================================================ FILE: test/samples/expected/nyan.cat ================================================ {"domain_name": "nyan.cat", "expiration_date": "2018-04-13 19:52:17.635000+00:00", "updated_date": "2017-07-07 17:24:23.746000+00:00", "registrar": "GANDI SAS", "registrar_url": "https://www.gandi.net/", "creation_date": "2011-04-13 19:52:17.635000+00:00", "status": "ok https://icann.org/epp#ok"} ================================================ FILE: test/samples/expected/reddit.com ================================================ {"domain_name": "REDDIT.COM", "expiration_date": "2009-04-29 00:00:00+00:00", "updated_date": "2008-06-04 00:00:00+00:00", "registrar": "DOMAINBANK", "registrar_url": null, "creation_date": "2005-04-29 00:00:00+00:00", "status": ["clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/research.google ================================================ {"domain_name": "research.google", "registrar": "MarkMonitor Inc.", "whois_server": "whois.nic.google", "referral_url": None, "updated_date": datetime.datetime(2021, 4, 5, 9, 28, 32), "creation_date": datetime.datetime(2019, 5, 2, 17, 16, 59), "expiration_date": datetime.datetime(2022, 5, 2, 17, 16, 59), "name_servers": ["ns1.zdns.google", "ns2.zdns.google", "ns3.zdns.google", "ns4.zdns.google"], "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"], "emails": "abusecomplaints@markmonitor.com", "dnssec": "signedDelegation", "name": "REDACTED FOR PRIVACY", "org": "Charleston Road Registry, Inc.", "address": "REDACTED FOR PRIVACY", "city": "REDACTED FOR PRIVACY", "state": "CA", "zipcode": "REDACTED FOR PRIVACY", "country": "US"} ================================================ FILE: test/samples/expected/sapo.pt ================================================ {"domain_name": "sapo.pt", "expiration_date": "2019-11-02 23:59:00+00:00", "updated_date": null, "registrar": null, "registrar_url": null, "creation_date": "2002-10-30 00:00:00+00:00", "status": "Registered"} ================================================ FILE: test/samples/expected/sbc.org.hk ================================================ {"domain_name": "SBC.ORG.HK", "expiration_date": "2020-03-07 00:00:00+00:00", "updated_date": null, "registrar": "Hong Kong Domain Name Registration Company Limited", "registrar_url": null, "creation_date": "1998-07-14 00:00:00+00:00", "status": "Active"} ================================================ FILE: test/samples/expected/seal.jobs ================================================ {"domain_name": "SEAL.JOBS", "expiration_date": "2022-02-25 06:26:32+00:00", "updated_date": "2018-03-22 13:44:07+00:00", "registrar": null, "registrar_url": "http://www.godaddy.com", "creation_date": "2017-02-25 06:26:32+00:00", "status": "ok https://icann.org/epp#ok"} ================================================ FILE: test/samples/expected/shazow.net ================================================ {"domain_name": "SHAZOW.NET", "expiration_date": "2009-09-13 00:00:00+00:00", "updated_date": "2007-08-08 00:00:00+00:00", "registrar": "NEW DREAM NETWORK, LLC", "registrar_url": null, "creation_date": "2003-09-13 00:00:00+00:00", "status": "ok"} ================================================ FILE: test/samples/expected/slashdot.org ================================================ {"domain_name": "SLASHDOT.ORG", "expiration_date": "2008-10-04 04:00:00+00:00", "updated_date": null, "registrar": "Tucows Inc. (R11-LROR)", "registrar_url": null, "creation_date": null, "status": "OK"} ================================================ FILE: test/samples/expected/squatter.net ================================================ {"domain_name": "SQUATTER.NET", "expiration_date": "2008-11-06 00:00:00+00:00", "updated_date": "2007-11-07 00:00:00+00:00", "registrar": "DOMAINDISCOVER", "registrar_url": null, "creation_date": "1999-11-06 00:00:00+00:00", "status": "clientTransferProhibited"} ================================================ FILE: test/samples/expected/titech.ac.jp ================================================ {"domain_name": "TITECH.AC.JP", "expiration_date": null, "updated_date": "2025-05-29 10:45:59+09:00", "registrar": null, "registrar_url": null, "creation_date": null, "status": "Connected (2026/03/31)"} ================================================ FILE: test/samples/expected/translate.goog ================================================ {"domain_name": "translate.goog", "registrar": "MarkMonitor Inc.", "whois_server": "whois.nic.google", "referral_url": None, "updated_date": datetime.datetime(2020, 11, 8, 10, 37), "creation_date": datetime.datetime(2017, 12, 5, 22, 54, 14), "expiration_date": datetime.datetime(2021, 12, 5, 22, 54, 14), "name_servers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"], "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"], "emails": "abusecomplaints@markmonitor.com", "dnssec": "unsigned", "name": "REDACTED FOR PRIVACY", "org": "Charleston Road Registry, Inc.", "address": "REDACTED FOR PRIVACY", "city": "REDACTED FOR PRIVACY", "state": "CA", "zipcode": "REDACTED FOR PRIVACY", "country": "US"} ================================================ FILE: test/samples/expected/urlowl.com ================================================ {"domain_name": "URLOWL.COM", "expiration_date": "2018-02-21 19:24:57+00:00", "updated_date": "2017-03-31 07:36:34+00:00", "registrar": "DYNADOT, LLC", "registrar_url": "http://www.dynadot.com", "creation_date": "2013-02-21 19:24:57+00:00", "status": "clientTransferProhibited https://icann.org/epp#clientTransferProhibited"} ================================================ FILE: test/samples/expected/web.de ================================================ {"domain_name": "web.de", "expiration_date": null, "updated_date": ["2016-04-11 11:09:54+02:00", "2011-08-10 17:09:10+02:00"], "registrar": null, "registrar_url": null, "creation_date": null, "status": "connect"} ================================================ FILE: test/samples/expected/willhaben.at ================================================ {"domain_name": "willhaben.at", "expiration_date": null, "updated_date": ["2014-12-04 14:57:44+00:00", "2014-04-22 10:08:35+00:00", "2015-10-21 16:23:11+00:00"], "registrar": null, "registrar_url": null, "creation_date": null, "status": null} ================================================ FILE: test/samples/expected/www.gov.uk ================================================ {"domain_name": "gov.uk", "expiration_date": null, "updated_date": null, "registrar": "No registrar listed. This domain is directly registered with Nominet.", "registrar_url": null, "creation_date": "1996-08-01 00:00:00+00:00", "status": "No registration status listed."} ================================================ FILE: test/samples/expected/yahoo.co.jp ================================================ {"domain_name": "YAHOO.CO.JP", "expiration_date": null, "updated_date": "2024-10-01 01:00:44+09:00", "registrar": null, "registrar_url": null, "creation_date": "2019-09-27 00:00:00+00:00", "status": "Connected (2025/09/30)"} ================================================ FILE: test/samples/expected/yahoo.co.nz ================================================ {"domain_name": "yahoo.co.nz", "expiration_date": null, "updated_date": "2025-04-07 09:13:29+00:00", "registrar": "MarkMonitor. Inc", "registrar_url": "https://www.markmonitor.com/", "creation_date": "1997-05-04 12:00:00+00:00", "status": ["clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"]} ================================================ FILE: test/samples/expected/yandex.kz ================================================ {"domain_name": "yandex.kz", "expiration_date": null, "updated_date": "2022-08-04 10:20:10+00:00", "registrar": "HOSTER.KZ", "registrar_url": null, "creation_date": "2009-07-01 12:44:02+00:00", "status": ["status : clientTransferProhibited", "clientDeleteProhibited", "clientRenewProhibited"]} ================================================ FILE: test/samples/expected/yandex.ru ================================================ {"domain_name": "YANDEX.RU", "expiration_date": "2018-09-30 21:00:00+00:00", "updated_date": null, "registrar": "RU-CENTER-RU", "registrar_url": null, "creation_date": "1997-09-23 09:45:07+00:00", "status": "REGISTERED, DELEGATED, VERIFIED"} ================================================ FILE: test/samples/whois/abc.rs ================================================ % The data in the Whois database are provided by RNIDS % for information purposes only and to assist persons in obtaining % information about or related to a domain name registration record. % Data in the database are created by registrants and we do not guarantee % their accuracy. We reserve the right to remove access % for entities abusing the data, without notice. % All timestamps are given in Serbian local time. % Domain name: abc.rs Domain status: Active https://www.rnids.rs/en/domain-name-status-codes#Active Registration date: 26.03.2008 16:18:03 Modification date: 11.02.2025 08:24:15 Expiration date: 26.03.2026 16:18:03 Confirmed: 26.03.2008 16:18:03 Registrar: Mainstream Public Cloud Services d.o.o. Registrant: Roda grupa doo Address: Bulevar Oslobodjenja 129, Beograd, Serbia Postal Code: 11000 ID Number: 20886374 Tax ID: 107867472 Administrative contact: Individual Technical contact: SERBIA BROADBAND - SRPSKE KABLOVSKE MREZE D.O.O. Address: Bulevar Peka Dapcevica 19, Beograd, Serbia Postal Code: 11000 ID Number: 17280554 Tax ID: 101038731 DNS: ns1.providus.rs - 164.132.48.70 DNS: ns2.providus.rs - 104.199.179.254 DNS: ns3.providus.rs - 52.5.196.189 DNSSEC signed: no Whois Timestamp: 07.11.2025 20:57:08 ================================================ FILE: test/samples/whois/abc.xyz ================================================ [whois.nic.xyz] Domain Name: ABC.XYZ Registry Domain ID: D2192285-CNIC Registrar WHOIS Server: whois.markmonitor.com Registrar URL: Updated Date: 2025-03-10T15:22:23.0Z Creation Date: 2014-03-20T12:59:17.0Z Registry Expiry Date: 2026-03-20T23:59:59.0Z Registrar: MarkMonitor, Inc (TLDs) Registrar IANA ID: 292 Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Name Server: NS2.GOOGLE.COM Name Server: NS4.GOOGLE.COM Name Server: NS3.GOOGLE.COM Name Server: NS1.GOOGLE.COM DNSSEC: unsigned Registrar Abuse Contact Email: registryescalations@markmonitor.com Registrar Abuse Contact Phone: +1.2083895740 URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2025-10-10T02:49:26.0Z <<< For more information on Whois status codes, please visit https://icann.org/epp >>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit https://www.centralnicregistry.com/support/information/rdap <<< The registration data available in this service is limited. Additional data may be available at https://lookup.icann.org The Whois and RDAP services are provided by CentralNic, and contain information pertaining to Internet domain names registered by our our customers. By using this service you are agreeing (1) not to use any information presented here for any purpose other than determining ownership of domain names, (2) not to store or reproduce this data in any way, (3) not to use any high-volume, automated, electronic processes to obtain data from this service. Abuse of this service is monitored and actions in contravention of these terms will result in being permanently blacklisted. All data is (c) CentralNic Ltd (https://www.centralnicregistry.com) Access to the Whois and RDAP services is rate limited. For more information, visit https://centralnicregistry.com/policies/whois-guidance. ================================================ FILE: test/samples/whois/about.us ================================================ Domain Name: about.us Registry Domain ID: D651466-US Registrar WHOIS Server: Registrar URL: www.neustarregistry.biz Updated Date: 2017-06-02T01:30:53Z Creation Date: 2002-04-18T15:16:22Z Registry Expiry Date: 2018-04-17T23:59:59Z Registrar: Neustar, Inc. Registrar IANA ID: 1111112 Registrar Abuse Contact Email: reg-support@support.neustar Registrar Abuse Contact Phone: Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited Registry Registrant ID: C37639215-US Registrant Name: .US Registration Policy Registrant Organization: Registrant Street: 46000 Center Oak Plaza Registrant Street: Registrant Street: Registrant City: Sterling Registrant State/Province: VA Registrant Postal Code: 20166 Registrant Country: US Registrant Phone: +1.5714345728 Registrant Phone Ext: Registrant Fax: Registrant Fax Ext: Registrant Email: support.us@neustar.us Registrant Application Purpose: P5 Registrant Nexus Category: C21 Registry Admin ID: C37639215-US Admin Name: .US Registration Policy Admin Organization: Admin Street: 46000 Center Oak Plaza Admin Street: Admin Street: Admin City: Sterling Admin State/Province: VA Admin Postal Code: 20166 Admin Country: US Admin Phone: +1.5714345728 Admin Phone Ext: Admin Fax: Admin Fax Ext: Admin Email: support.us@neustar.us Admin Application Purpose: P5 Admin Nexus Category: C21 Registry Tech ID: C37639215-US Tech Name: .US Registration Policy Tech Organization: Tech Street: 46000 Center Oak Plaza Tech Street: Tech Street: Tech City: Sterling Tech State/Province: VA Tech Postal Code: 20166 Tech Country: US Tech Phone: +1.5714345728 Tech Phone Ext: Tech Fax: Tech Fax Ext: Tech Email: support.us@neustar.us Tech Application Purpose: P5 Tech Nexus Category: C21 Name Server: ns1.usatfus.about.us Name Server: ns2.usatfus.about.us DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2017-12-11T22:54:29Z <<< For more information on Whois status codes, please visit https://icann.org/epp NeuStar, Inc., the Registry Administrator for .US, has collected this information for the WHOIS database through a .US-Accredited Registrar. This information is provided to you for informational purposes only and is designed to assist persons in determining contents of a domain name registration record in the NeuStar registry database. NeuStar makes this information available to you "as is" and does not guarantee its accuracy. By submitting a WHOIS query, you agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data: (1) to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via direct mail, electronic mail, or by telephone; (2) in contravention of any applicable data and privacy protection laws; or (3) to enable high volume, automated, electronic processes that apply to the registry (or its systems). Compilation, repackaging, dissemination, or other use of the WHOIS database in its entirety, or of a substantial portion thereof, is not allowed without NeuStar's prior written permission. NeuStar reserves the right to modify or change these conditions at any time without prior or subsequent notification of any kind. By executing this query, in any manner whatsoever, you agree to abide by these terms. NOTE: FAILURE TO LOCATE A RECORD IN THE WHOIS DATABASE IS NOT INDICATIVE OF THE AVAILABILITY OF A DOMAIN NAME. All domain names are subject to certain additional domain name registration rules. For details, please visit our site at www.whois.us. ================================================ FILE: test/samples/whois/abv.bg ================================================ DOMAIN NAME: abv.bg requested on: see at www.register.bg processed from: see at www.register.bg activated on: see at www.register.bg expires at: see at www.register.bg registration status: Registered REGISTRANT: Darik Net EAD bul. Hristofor Kolumb 41, et. 6 SOFIA, 1592 BULGARIA ADMINISTRATIVE CONTACT: Toni Enchev noc@netinfo.bg Darik Net EAD bul. Hristofor Kolumb 41, et. 6 SOFIA, 1592 BULGARIA tel: +359 2 960 3162 fax: NIC handle: TE230426 TECHNICAL CONTACT(S): Milen Evtimov milen@netinfo.bg Net Info.BG JSCo bul. "Cherni vrah" 1-3, Sofiya 1463 SOFIA, 1421 BULGARIA tel: +359 2 9603100 fax: +359 2 9604179 NIC handle: ME26909 Biser Grigorov biser@netinfo.bg Net Info.BG JSCo bul. "Cherni vrah" 1-3, Sofiya 1463 SOFIA, 1421 BULGARIA tel: +359 2 9603100 fax: +359 2 9604179 NIC handle: BG26908 NAME SERVER INFORMATION: ns.netinfo.bg ns2.netinfo.bg DNSSEC: Inactive ================================================ FILE: test/samples/whois/afip.gob.ar ================================================ % La información a la que estás accediendo se provee exclusivamente para % fines relacionados con operaciones sobre nombres de dominios y DNS, % quedando absolutamente prohibido su uso para otros fines. % % La DIRECCIÓN NACIONAL DEL REGISTRO DE DOMINIOS DE INTERNET es depositaria % de la información que los usuarios declaran con la sola finalidad de % registrar nombres de dominio en ‘.ar’, para ser publicada en el sitio web % de NIC Argentina. % % La información personal que consta en la base de datos generada a partir % del sistema de registro de nombres de dominios se encuentra amparada por % la Ley N° 25326 “Protección de Datos Personales” y el Decreto % Reglamentario 1558/01. domain: afip.gob.ar registrant: 33693450239 registrar: nicar registered: 1997-05-26 00:00:00 changed: 2018-05-19 12:18:44.329522 expire: 2019-05-26 00:00:00 contact: 33693450239 name: ADMINISTRACION FEDERAL DE INGRESOS PUBLICOS registrar: nicar created: 2013-10-30 00:00:00 changed: 2019-03-21 20:38:40.827111 nserver: ns1.afip.gov.ar (200.1.116.10/32) nserver: ns2.afip.gov.ar (200.1.116.11/32) registrar: nicar created: 2016-06-30 22:15:47.314461 ================================================ FILE: test/samples/whois/allegro.pl ================================================ DOMAIN NAME: allegro.pl registrant type: organization nameservers: dns1.allegro.pl. [91.194.188.132] dns2.allegro.pl. [91.207.14.244] dns3.allegro.pl. [80.50.230.43] dns4.allegro.pl. [213.180.138.53] created: 1999.10.27 13:00:00 last modified: 2017.10.17 07:01:25 renewal date: 2018.10.26 15:00:00 option created: 2014.06.02 23:44:16 option expiration date: 2020.06.02 23:44:16 dnssec: Unsigned TECHNICAL CONTACT: company: DNS Administrator Grupa Allegro Sp. z o.o. street: ul. Grunwaldzka 182 city: 60-166 Poznan location: PL phone: +48.616271220 fax: +48.616271220 last modified: 2017.03.27 REGISTRAR: Corporation Service Company 251 Little Falls Drive Wilmington, Delaware 19808 United States tel: +1.302.636.5400 fax: +1.302.636.5454 email: registryrelations@cscinfo.com WHOIS database responses: http://www.dns.pl/english/opiskomunikatow_en.html WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system Registrant data available at http://dns.pl/cgi-bin/en_whois.pl ================================================ FILE: test/samples/whois/amazon.co.uk ================================================ Domain name: amazon.co.uk Data validation: Nominet was able to match the registrant's name and address against a 3rd party data source on 10-Dec-2012 Registrar: Amazon.com, Inc. t/a Amazon.com, Inc. [Tag = AMAZON-COM] URL: http://www.amazon.com Relevant dates: Registered on: before Aug-1996 Expiry date: 05-Dec-2020 Last updated: 23-Oct-2013 Registration status: Registered until expiry date. Name servers: ns1.p31.dynect.net ns2.p31.dynect.net ns3.p31.dynect.net ns4.p31.dynect.net pdns1.ultradns.net pdns2.ultradns.net pdns3.ultradns.org pdns4.ultradns.org pdns5.ultradns.info pdns6.ultradns.co.uk 204.74.115.1 2610:00a1:1017:0000:0000:0000:0000:0001 WHOIS lookup made at 11:55:41 18-Apr-2019 -- This WHOIS information is provided for free by Nominet UK the central registry for .uk domain names. This information and the .uk WHOIS are: Copyright Nominet UK 1996 - 2019. You may not access the .uk WHOIS or use any data from it except as permitted by the terms of use available in full at https://www.nominet.uk/whoisterms, which includes restrictions on: (A) use of the data for advertising, or its repackaging, recompilation, redistribution or reuse (B) obscuring, removing or hiding any or all of this notice and (C) exceeding query rate or volume limits. The data is provided on an 'as-is' basis and may lag behind the register. Access may be withdrawn or restricted at any time. ================================================ FILE: test/samples/whois/app.nl ================================================ Domain name: app.nl Status: active Reseller: Hoasted Weesperstraat 61 3512AB Amsterdam Netherlands Registrar: Hosting Secure Weesperstraat 61 1018VN Amsterdam Netherlands Abuse Contact: +31.0202018165 abuse@hostingsecure.com DNSSEC: yes Domain nameservers: ns1.hoasted.nl ns2.hoasted.eu ns3.hoasted.com Creation Date: 1998-02-20 Updated Date: 2025-09-12 Record maintained by: SIDN BV ================================================ FILE: test/samples/whois/brainly.lat ================================================ Domain Name: brainly.lat Registry Domain ID: DOMAIN_497-LAT Registrar WHOIS Server: Registrar URL: http://www.instra.com/ Updated Date: 2018-07-22T09:01:05Z Creation Date: 2015-07-31T15:59:27Z Registry Expiry Date: 2019-07-31T15:59:27Z Registrar: Instra Corporation Pty Ltd. Registrar IANA ID: 1376 Registrar Abuse Contact Email: Registrar Abuse Contact Phone: Domain Status: ok http://www.icann.org/epp#OK Registry Registrant ID: REDACTED FOR PRIVACY Registrant Name: REDACTED FOR PRIVACY Registrant Organization: Brainly Sp. z o.o. Registrant Street: REDACTED FOR PRIVACY Registrant City: REDACTED FOR PRIVACY Registrant State/Province: Malopolska Registrant Postal Code: REDACTED FOR PRIVACY Registrant Country: PL Registrant Phone: REDACTED FOR PRIVACY Registrant Phone Ext: REDACTED FOR PRIVACY Registrant Fax: REDACTED FOR PRIVACY Registrant Fax Ext: REDACTED FOR PRIVACY Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name Registry Admin ID: REDACTED FOR PRIVACY Admin Name: REDACTED FOR PRIVACY Admin Organization: REDACTED FOR PRIVACY Admin Street: REDACTED FOR PRIVACY Admin City: REDACTED FOR PRIVACY Admin State/Province: REDACTED FOR PRIVACY Admin Postal Code: REDACTED FOR PRIVACY Admin Country: REDACTED FOR PRIVACY Admin Phone: REDACTED FOR PRIVACY Admin Phone Ext: REDACTED FOR PRIVACY Admin Fax: REDACTED FOR PRIVACY Admin Fax Ext: REDACTED FOR PRIVACY Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name Registry Tech ID: REDACTED FOR PRIVACY Tech Name: REDACTED FOR PRIVACY Tech Organization: REDACTED FOR PRIVACY Tech Street: REDACTED FOR PRIVACY Tech City: REDACTED FOR PRIVACY Tech State/Province: REDACTED FOR PRIVACY Tech Postal Code: REDACTED FOR PRIVACY Tech Country: REDACTED FOR PRIVACY Tech Phone: REDACTED FOR PRIVACY Tech Phone Ext: REDACTED FOR PRIVACY Tech Fax: REDACTED FOR PRIVACY Tech Fax Ext: REDACTED FOR PRIVACY Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name Name Server: adi.ns.cloudflare.com Name Server: chad.ns.cloudflare.com DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ Last update of WHOIS database: 2019-04-17T13:13:00Z<<< For more information on Whois status codes, please visit https://icann.org/epp % 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. % The Data in eCOM-LAC?s .LAT Registry Whois database is provided % by eCOM-LAC for information purposes only, and to assist persons in obtaining % 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 eCOM-LAC or its service providers (or its computer % expressly prohibited without the prior written consent of eCOM-LAC. 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. eCOM-LAC reserves the right to restrict your access to the Whois % database in its sole discretion to ensure operational stability. eCOM-LAC may restrict % or terminate your access to the Whois database for failure to abide by these terms of % use. eCOM-LAC reserves the right to modify these terms at any time. % URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/ % NOTA: La fecha de expiraci?n mostrada en este registro es la fecha indicada por el % Registrar en la que finaliza la administraci?n del nombre de dominio en el Registry. Esta % fecha no necesariamente refleja la fecha de expiraci?n del nombre de dominio que el % registrante acord? con el registrar sponsor. Los usuarios pueden consultar la base de % datos del whois del registrar sponsor para ver la fecha de expiraci?n reportada por el % registrar para este dominio. % Los datos en la base de datos de whois de eCOM-LAC es proporcionada por eCOM-LAC % para fines informativos solamente y para ayudar a las personas a obtener informaci?n % relacionada a los datos de registro de un nombre de dominio. eCOM-LAC no garantiza su % exactitud. Al realizar una consulta al Whois, acepta cumplir con las siguientes condiciones % de uso: Acepta que puede usar esta informaci?n solo para fines legales y que bajo ninguna % circunstancia usar? esta informaci?n para: (1) permitir, hacer uso o apoyar de alguna % manera el env?o masivo de publicidad v?a correo electr?nico, tel?fono o fax; o (2) realizar % procesos automatizados, electr?nicos y de alto volumen que apliquen a eCOM-LAC o sus % proveedores de servicio (o sus sistemas computacionales). La recopilaci?n, difusi?n o % cualquier otro uso de estos datos sin el consentimiento previo por escrito de eCOM-LAC % queda expresamente prohibido. Usted acepta no utilizar procesos electr?nicos % automatizados y de alto volumen para acceder o consultar la base de datos de Whois % excepto cuando sea razonablemente necesario para registrar nombres de dominio o % modificar registros existentes. eCOM-LAC se reserva el derecho de restringir su acceso a la % base de datos de whois a su entera discreci?n para asegurar la estabilidad en su % operaci?n. eCOM-LAC puede restringir o terminar su acceso a la base de datos de Whois % por no cumplir con estas condiciones de uso. eCOM-LAC se reserva el derecho de modificar estos t?rminos en cualquier momento. % La URL del sistema de reportes para problemas con la informaci?n de WHOIS del ICANN es: http://wdprs.internic.net/ ================================================ FILE: test/samples/whois/cbc.ca ================================================ Domain Name: cbc.ca Registry Domain ID: D345334-CIRA Registrar WHOIS Server: whois.ca.fury.ca Registrar URL: authenticweb.com Updated Date: 2018-10-26T02:15:16Z Creation Date: 2000-10-16T13:56:05Z Registry Expiry Date: 2019-11-24T05:00:00Z Registrar: Authentic Web Inc. Registrar IANA ID: Registrar Abuse Contact Email: Registrar Abuse Contact Phone: Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited Registry Registrant ID: 24345497-CIRA Registrant Name: Canadian Broadcasting Corporation Registrant Organization: Registrant Street: 250 Front St W Registrant City: Toronto Registrant State/Province: ON Registrant Postal Code: M5V3G5 Registrant Country: CA Registrant Phone: +1.4162053482 Registrant Phone Ext: Registrant Fax: +1.4162057750 Registrant Fax Ext: Registrant Email: domain-name@cbc.ca Registry Admin ID: 24345372-CIRA Admin Name: Karen Stephen Admin Organization: Canadian Broadcasting Corporation Admin Street: 250 Front St W Admin City: Toronto Admin State/Province: ON Admin Postal Code: M5V3G5 Admin Country: CA Admin Phone: +1.4162053482 Admin Phone Ext: Admin Fax: +1.4162057750 Admin Fax Ext: Admin Email: domain-name@cbc.ca Registry Tech ID: 24345501-CIRA Tech Name: Karen Stephen Tech Organization: Canadian Broadcasting Corporation Tech Street: 250 Front St W Tech City: Toronto Tech State/Province: ON Tech Postal Code: M5V3G5 Tech Country: CA Tech Phone: +1.4162053482 Tech Phone Ext: Tech Fax: +1.4162057750 Tech Fax Ext: Tech Email: domain-name@cbc.ca Registry Billing ID: Billing Name: Billing Organization: Billing Street: Billing City: Billing State/Province: Billing Postal Code: Billing Country: Billing Phone: Billing Phone Ext: Billing Fax: Billing Fax Ext: Billing Email: Name Server: a5-65.akam.net Name Server: a9-66.akam.net Name Server: a26-67.akam.net Name Server: a1-29.akam.net Name Server: a4-64.akam.net Name Server: a14-66.akam.net DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2019-04-16T12:20:17Z <<< For more information on Whois status codes, please visit https://icann.org/epp % % Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal % Notice, available at http://www.cira.ca/legal-notice/?lang=en % % (c) 2019 Canadian Internet Registration Authority, (http://www.cira.ca/) ================================================ FILE: test/samples/whois/cyberciti.biz ================================================ Domain Name: CYBERCITI.BIZ Registry Domain ID: D3209108-BIZ Registrar WHOIS Server: whois.godaddy.com Registrar URL: http://www.godaddy.com Updated Date: 2018-07-11T05:55:25Z Creation Date: 2002-07-01T09:31:21Z Registrar Registration Expiration Date: 2024-06-30T23:59:59Z Registrar: GoDaddy.com, LLC Registrar IANA ID: 146 Registrar Abuse Contact Email: abuse@godaddy.com Registrar Abuse Contact Phone: +1.4806242505 Domain Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited http://www.icann.org/epp#clientUpdateProhibited Domain Status: clientRenewProhibited http://www.icann.org/epp#clientRenewProhibited Domain Status: clientDeleteProhibited http://www.icann.org/epp#clientDeleteProhibited Registry Registrant ID: CR19482819 Registrant Name: Registration Private Registrant Organization: Domains By Proxy, LLC Registrant Street: DomainsByProxy.com Registrant Street: 14455 N. Hayden Road Registrant City: Scottsdale Registrant State/Province: Arizona Registrant Postal Code: 85260 Registrant Country: US Registrant Phone: +1.4806242599 Registrant Phone Ext: Registrant Fax: +1.4806242598 Registrant Fax Ext: Registrant Email: CYBERCITI.BIZ@domainsbyproxy.com Registry Admin ID: CR19482821 Admin Name: Registration Private Admin Organization: Domains By Proxy, LLC Admin Street: DomainsByProxy.com Admin Street: 14455 N. Hayden Road Admin City: Scottsdale Admin State/Province: Arizona Admin Postal Code: 85260 Admin Country: US Admin Phone: +1.4806242599 Admin Phone Ext: Admin Fax: +1.4806242598 Admin Fax Ext: Admin Email: CYBERCITI.BIZ@domainsbyproxy.com Registry Tech ID: CR19482820 Tech Name: Registration Private Tech Organization: Domains By Proxy, LLC Tech Street: DomainsByProxy.com Tech Street: 14455 N. Hayden Road Tech City: Scottsdale Tech State/Province: Arizona Tech Postal Code: 85260 Tech Country: US Tech Phone: +1.4806242599 Tech Phone Ext: Tech Fax: +1.4806242598 Tech Fax Ext: Tech Email: CYBERCITI.BIZ@domainsbyproxy.com Name Server: CLAY.NS.CLOUDFLARE.COM Name Server: FAY.NS.CLOUDFLARE.COM DNSSEC: unsigned URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/ >>> Last update of WHOIS database: 2019-04-16T13:00:00Z <<< For more information on Whois status codes, please visit https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en Notes: IMPORTANT: Port43 will provide the ICANN-required minimum data set per ICANN Temporary Specification, adopted 17 May 2018. Visit https://whois.godaddy.com to look up contact data for domains not covered by GDPR policy. The data contained in GoDaddy.com, LLC's WhoIs database, while believed by the company to be reliable, is provided "as is" with no guarantee or warranties regarding its accuracy. This information is provided for the sole purpose of assisting you in obtaining information about domain name registration records. Any use of this data for any other purpose is expressly forbidden without the prior written permission of GoDaddy.com, LLC. By submitting an inquiry, you agree to these terms of usage and limitations of warranty. In particular, you agree not to use this data to allow, enable, or otherwise make possible, dissemination or collection of this data, in part or in its entirety, for any purpose, such as the transmission of unsolicited advertising and and solicitations of any kind, including spam. You further agree not to use this data to enable high volume, automated or robotic electronic processes designed to collect or compile this data for any purpose, including mining this data for your own personal or commercial purposes. Please note: the registrant of the domain name is specified in the "registrant" section. In most cases, GoDaddy.com, LLC is not the registrant of domain names listed in this database. ================================================ FILE: test/samples/whois/davidwalsh.name ================================================ Disclaimer: VeriSign, Inc. makes every effort to maintain the completeness and accuracy of the Whois data, but cannot guarantee that the results are error-free. Therefore, any data provided through the Whois service are on an as is basis without any warranties. BY USING THE WHOIS SERVICE AND THE DATA CONTAINED HEREIN OR IN ANY REPORT GENERATED WITH RESPECT THERETO, IT IS ACCEPTED THAT VERISIGN, INC. IS NOT LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF, OR IN CONNECTION WITH, THE REPORT OR THE INFORMATION PROVIDED BY THE WHOIS SERVICE, NOR OMISSIONS OR MISSING INFORMATION. THE RESULTS OF ANY WHOIS REPORT OR INFORMATION PROVIDED BY THE WHOIS SERVICE CANNOT BE RELIED UPON IN CONTEMPLATION OF LEGAL PROCEEDINGS WITHOUT FURTHER VERIFICATION, NOR DO SUCH RESULTS CONSTITUTE A LEGAL OPINION. Acceptance of the results of the Whois constitutes acceptance of these terms, conditions and limitations. Whois data may be requested only for lawful purposes, in particular, to protect legal rights and obligations. Illegitimate uses of Whois data include, but are not limited to, unsolicited email, data mining, direct marketing or any other improper purpose. Any request made for Whois data will be documented by VeriSign, Inc. but will not be used for any commercial purpose whatsoever. **** Registry Domain ID: 2852634_DOMAIN_NAME-VRSN Domain Name: DAVIDWALSH.NAME Registrar: Name.com, Inc. Registrar IANA ID: 625 Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited >>> Last update of whois database: 2017-12-08T23:02:21Z <<< For more information on Whois status codes, please visit https://icann.org/epp ================================================ FILE: test/samples/whois/digg.com ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: DIGG.COM Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Name Server: UDNS1.ULTRADNS.NET Name Server: UDNS2.ULTRADNS.NET Status: clientDeleteProhibited Status: clientRenewProhibited Status: clientTransferProhibited Status: clientUpdateProhibited Updated Date: 13-mar-2007 Creation Date: 20-feb-2000 Expiration Date: 20-feb-2010 >>> Last update of whois database: Thu, 26 Jun 2008 21:39:08 EDT <<< 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.The data contained in GoDaddy.com, Inc.'s WhoIs database, while believed by the company to be reliable, is provided "as is" with no guarantee or warranties regarding its accuracy. This information is provided for the sole purpose of assisting you in obtaining information about domain name registration records. Any use of this data for any other purpose is expressly forbidden without the prior written permission of GoDaddy.com, Inc. By submitting an inquiry, you agree to these terms of usage and limitations of warranty. In particular, you agree not to use this data to allow, enable, or otherwise make possible, dissemination or collection of this data, in part or in its entirety, for any purpose, such as the transmission of unsolicited advertising and and solicitations of any kind, including spam. You further agree not to use this data to enable high volume, automated or robotic electronic processes designed to collect or compile this data for any purpose, including mining this data for your own personal or commercial purposes. Please note: the registrant of the domain name is specified in the "registrant" field. In most cases, GoDaddy.com, Inc. is not the registrant of domain names listed in this database. Registrant: Domains by Proxy, Inc. Registered through: GoDaddy.com, Inc. (http://www.godaddy.com) Domain Name: DIGG.COM Domain servers in listed order: UDNS1.ULTRADNS.NET UDNS2.ULTRADNS.NET For complete domain details go to: http://who.godaddy.com/whoischeck.aspx?Domain=DIGG.COM ================================================ FILE: test/samples/whois/druid.fi ================================================ domain.............: druid.fi status.............: Registered created............: 18.7.2012 04:04:23 expires............: 17.7.2022 22:16:55 available..........: 17.8.2022 22:16:55 modified...........: 19.3.2019 holder transfer....: 28.1.2014 RegistryLock.......: no Nameservers nserver............: ns3.digitalocean.com [OK] nserver............: ns1.digitalocean.com [OK] nserver............: ns2.digitalocean.com [OK] dnssec.............: unsigned delegation Holder name...............: Druid Oy register number....: 2491789-2 address............: Kaupintie 5 address............: 00440 address............: Helsinki country............: Finland phone..............: 0440479783 holder email.......: Registrar registrar..........: CSL Computer Service Langenbach GmbH (d/b/a joker.com) www................: www.joker.com Last update of WHOIS database: 17.4.2019 8:46:14 (EET) <<< Copyright (c) Finnish Communications Regulatory Authority ================================================ FILE: test/samples/whois/drupalcamp.by ================================================ Domain Name: drupalcamp.by Registrar: Active Technologies LLC Person: HIDDEN! Email: HIDDEN! Details are available at http://www.cctld.by/whois/ Name Server: darwin.ns.cloudflare.com Name Server: serena.ns.cloudflare.com Updated Date: 2018-08-04 Creation Date: 2018-07-25 Expiration Date: 2020-07-25 ------------------------------------------- Service provided by Reliable Software, Ltd. ================================================ FILE: test/samples/whois/eurid.eu ================================================ % The WHOIS service offered by EURid and the access to the records % in the EURid WHOIS database are provided for information purposes % only. It allows persons to check whether a specific domain name % is still available or not and to obtain information related to % the registration records of existing domain names. % % EURid cannot, under any circumstances, be held liable in case the % stored information would prove to be wrong, incomplete or not % accurate in any sense. % % By submitting a query, you agree not to use the information made % available to: % % - allow, enable or otherwise support the transmission of unsolicited, % commercial advertising or other solicitations whether via email or % otherwise; % - target advertising in any possible way; % - cause nuisance in any possible way by sending messages to registrants, % whether by automated, electronic processes capable of enabling % high volumes or by other possible means. % % Without prejudice to the above, it is explicitly forbidden to extract, % copy and/or use or re-utilise in any form and by any means % (electronically or not) the whole or a quantitatively or qualitatively % substantial part of the contents of the WHOIS database without prior % and explicit permission by EURid, nor in any attempt hereof, to apply % automated, electronic processes to EURid (or its systems). % % You agree that any reproduction and/or transmission of data for % commercial purposes will always be considered as the extraction of a % substantial part of the content of the WHOIS database. % % By submitting the query, you agree to abide by this policy and accept % that EURid can take measures to limit the use of its WHOIS services % to protect the privacy of its registrants or the integrity % of the database. % % The EURid WHOIS service on port 43 (textual WHOIS) never discloses % any information concerning the registrant. % Registrant and on-site contact information can be obtained through use of the % web-based WHOIS service available from the EURid website www.eurid.eu % % WHOIS eurid.eu Domain: eurid.eu Script: LATIN Registrant: NOT DISCLOSED! Visit www.eurid.eu for the web-based WHOIS. Technical: Organisation: EURid vzw Language: en Email: tech@eurid.eu Registrar: Name: EURid vzw Website: https://www.eurid.eu Name servers: ns3.eurid.eu (185.36.4.253) ns3.eurid.eu (2001:67c:9c:3937::253) nsx.eurid.eu (185.151.141.1) nsx.eurid.eu (2a02:568:fe00::6575) ns1.eurid.eu (2001:67c:9c:3937::252) ns1.eurid.eu (185.36.4.252) ns2.eurid.eu (2001:67c:40:3937::252) ns2.eurid.eu (185.36.6.252) ns4.eurid.eu (2001:67c:40:3937::253) ns4.eurid.eu (185.36.6.253) nsp.netnod.se Keys: flags:KSK protocol:3 algorithm:RSA_SHA256 pubKey:AwEAAcOQldGtC33GLx8s335UscKMPlWjDXCqbhR2QyAYcfS4CZS6YHg3A1Zz/K3VurTZF68aSaRkNupZuEgt4jozE3v4+t+2qOfiATvoOCrf74hWduBPwk9Go0z7FVlDkok1/qMQmqOtih8TFP85b+w6F/uyLMZS1JowMDUzRurmHJVoT4lW9+OCdrhuQFK9vU24Y8BmacoRy6mWBCFlysizlOIodwmquOf5A+3Nz0B3TLCK4fIYJYVxCUVlpRJ7uaBS+GLD7afuxkEesReYHgPWZFSDMbXk9Ugh+qUi8tEKKFls9TM3lK9BPBcciXUhI1bRJSHftqcNpMmLqg/79SwoWGc= Please visit www.eurid.eu for more info. ================================================ FILE: test/samples/whois/google.ai ================================================ Domain Name: google.ai Registry Domain ID: 6eddd132ab114b12bd2bd4cf9c492a04-DONUTS Registrar WHOIS Server: whois.markmonitor.com Registrar URL: http://www.markmonitor.com Updated Date: 2025-01-23T22:17:03Z Creation Date: 2017-12-16T05:37:20Z Registry Expiry Date: 2025-09-25T05:37:20Z Registrar: MarkMonitor Inc. Registrar IANA ID: 292 Registrar Abuse Contact Email: abusecomplaints@markmonitor.com Registrar Abuse Contact Phone: +1.2083895740 Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Registry Registrant ID: 93b24aca40c6451785c486627aa03267-DONUTS Registrant Name: Domain Administrator Registrant Organization: Google LLC Registrant Street: 1600 Amphitheatre Parkway Registrant City: Mountain View Registrant State/Province: CA Registrant Postal Code: 94043 Registrant Country: US Registrant Phone: +1.6502530000 Registrant Phone Ext: Registrant Fax: +1.6502530001 Registrant Fax Ext: Registrant Email: dns-admin@google.com Registry Admin ID: 93b24aca40c6451785c486627aa03267-DONUTS Admin Name: Domain Administrator Admin Organization: Google LLC Admin Street: 1600 Amphitheatre Parkway Admin City: Mountain View Admin State/Province: CA Admin Postal Code: 94043 Admin Country: US Admin Phone: +1.6502530000 Admin Phone Ext: Admin Fax: +1.6502530001 Admin Fax Ext: Admin Email: dns-admin@google.com Registry Tech ID: 93b24aca40c6451785c486627aa03267-DONUTS Tech Name: Domain Administrator Tech Organization: Google LLC Tech Street: 1600 Amphitheatre Parkway Tech City: Mountain View Tech State/Province: CA Tech Postal Code: 94043 Tech Country: US Tech Phone: +1.6502530000 Tech Phone Ext: Tech Fax: +1.6502530001 Tech Fax Ext: Tech Email: dns-admin@google.com Name Server: ns2.zdns.google Name Server: ns3.zdns.google Name Server: ns4.zdns.google Name Server: ns1.zdns.google DNSSEC: unsigned ================================================ FILE: test/samples/whois/google.at ================================================ % Copyright (c)2019 by NIC.AT (1) % % Restricted rights. % % Except for agreed Internet operational purposes, no part of this % information may be reproduced, stored in a retrieval system, or % transmitted, in any form or by any means, electronic, mechanical, % recording, or otherwise, without prior permission of NIC.AT on behalf % of itself and/or the copyright holders. Any use of this material to % target advertising or similar activities is explicitly forbidden and % can be prosecuted. % % It is furthermore strictly forbidden to use the Whois-Database in such % a way that jeopardizes or could jeopardize the stability of the % technical systems of NIC.AT under any circumstances. In particular, % this includes any misuse of the Whois-Database and any use of the % Whois-Database which disturbs its operation. % % Should the user violate these points, NIC.AT reserves the right to % deactivate the Whois-Database entirely or partly for the user. % Moreover, the user shall be held liable for any and all damage % arising from a violation of these points. domain: google.at registrar: MarkMonitor Inc. ( https://nic.at/registrar/434 ) registrant: GI7803022-NICAT tech-c: GI1919751-NICAT tech-c: GI7803025-NICAT nserver: ns1.google.com remarks: 216.239.32.10 nserver: ns2.google.com remarks: 216.239.34.10 nserver: ns3.google.com remarks: 216.239.36.10 nserver: ns4.google.com remarks: 216.239.38.10 changed: 20110426 17:57:27 source: AT-DOM personname: DNS Admin organization: Google Inc. street address: 1600 Amphitheatre Parkway postal code: 94043 city: Mountain View country: United States phone: +16502530000 fax-no: +16502530001 e-mail: dns-admin@google.com nic-hdl: GI7803022-NICAT changed: 20110111 00:07:31 source: AT-DOM personname: organization: Google Inc. street address: 1600 Amphitheatre Parkway postal code: USA-94043 city: Mountain View, CA country: United States phone: +16506234000 fax-no: +16506188571 e-mail: dns-admin@google.com nic-hdl: GI1919751-NICAT changed: 20050617 21:36:20 source: AT-DOM personname: DNS Admin organization: Google Inc. street address: 1600 Amphitheatre Parkway postal code: 94043 city: Mountain View country: United States phone: +16502530000 fax-no: +16502530001 e-mail: dns-admin@google.com nic-hdl: GI7803025-NICAT changed: 20110111 00:08:30 source: AT-DOM ================================================ FILE: test/samples/whois/google.cl ================================================ %% %% This is the NIC Chile Whois server (whois.nic.cl). %% %% Rights restricted by copyright. %% See https://www.nic.cl/normativa/politica-publicacion-de-datos-cl.pdf %% Domain name: google.cl Registrant name: Google Inc. Registrant organisation: Registrar name: MarkMonitor Inc. Registrar URL: https://markmonitor.com/ Creation date: 2002-10-22 17:48:23 CLST Expiration date: 2019-11-20 14:48:02 CLST Name server: ns1.google.com Name server: ns2.google.com Name server: ns3.google.com Name server: ns4.google.com %% %% For communication with domain contacts please use website. %% See https://www.nic.cl/registry/Whois.do?d=google.cl %% ================================================ FILE: test/samples/whois/google.co.cr ================================================ % *The information provided by WHOIS is supplied by NIC Costa Rica's database of registered domains. This option has the sole intention of showing information about the domains registered under the CR Top level domain for name assignation purposes. It is absolutely forbidden to collect, store, use or transmit any information displayed by WHOIS for commercial and advertising purposes without prior notice to the persons involved and to NIC Costa Rica. NIC Costa Rica does not guarantee the accuracy of the information displayed by this option. Since it is provided by the contacts, the accuracy is their responsibility. The National Academy of Sciences is not liable for the use of the information here revealed. The National Academy of Sciences undertakes to comply with the terms set forth in the Data Protection laws of the Republic of Costa Rica and therefore protects the data collected from NIC Costa Rica users, regardless of whether they are Costa Rican citizens or not. If you are a contact of a .cr domain name and wish to use the WHOIS Privacy service, select this option in "Edit account" once your login with your username and password, or access the following link: % https://www.nic.cr/iniciar-sesion/?next=/my-account/ % % % *La información mostrada a través de la opción WHOIS es provista de la base de datos de los dominios registrados en NIC Costa Rica. Esta opción tiene el propósito exclusivo de mostrar información sobre los dominios registrados bajo el Dominio Superior .CR para los fines de la delegación de los nombs. Queda absolutamente prohibido compilar, almacenar, usar y/o trasmitir la información mostrada mediante la opción WHOIS para fines comerciales y publicitarios, sin la previa autorización de los afectados y de NIC Costa Rica. NIC Costa Rica no garantiza la exactitud de la información desplegada mediante esta opción, ya que ésta proviene de los contactos, y su veracidad es responsabilidad de estos últimos. La Academia Nacional de Ciencias no se responsabiliza por el uso que se le dé a la información aquí mostrada. La Academia Nacional de Ciencias se compromete a cumplir con los términos establecidos en las leyes de Protección de Datos de la República de Costa Rica y por lo tanto protege los datos recolectados de todos los usuarios de NIC Costa Rica que sean ciudadanos o no de la República de Costa Rica. Si un contacto de un dominio .cr desea hacer uso del servicio de Privacidad WHOIS puede escoger esta opción en "Editar cuenta" con su usuario y clave, o ingresar al siguiente link: % https://www.nic.cr/iniciar-sesion/?next=/mi-cuenta/ % % Whoisd Server Version: 3.10.2 % Timestamp: Tue Apr 16 06:51:27 2019 domain: google.co.cr registrant: CON-66 admin-c: CON-66 nsset: GOOGLE_CO_CR registrar: NIC-REG1 status: Deletion forbidden status: Sponsoring registrar change forbidden status: Update forbidden status: Administratively blocked status: Registrant change forbidden registered: 18.04.2002 18:00:00 changed: 28.02.2017 06:39:42 expire: 17.04.2020 contact: CON-66 org: MarkMonitor Inc. name: MarkMonitor Inc address: 3540 East Longwing Lane, Suite 300 address: Meridian address: 83646 address: Idaho address: US phone: +1.2083895740 fax-no: +1.2083895771 e-mail: ccops@markmonitor.com registrar: NIC-REG1 created: 03.06.2011 16:22:36 changed: 28.03.2019 03:49:37 nsset: GOOGLE_CO_CR nserver: ns1.google.com nserver: ns2.google.com nserver: ns3.google.com nserver: ns4.google.com tech-c: CON-66 registrar: NIC-REG1 created: 03.06.2011 12:51:41 changed: 30.03.2016 10:37:14 ================================================ FILE: test/samples/whois/google.co.id ================================================ # whois.id Domain Name: GOOGLE.CO.ID Registry Domain ID: 166626_DOMAIN_ID-ID Registrar WHOIS Server: Registrar URL: www.digitalregistra.co.id Updated Date: 2025-08-05T05:00:20Z Creation Date: 2004-12-18T13:33:21Z Registry Expiry Date: 2026-09-01T23:59:59Z Registrar: PT Digital Registra Indonesia Registrar IANA ID: 1 Registrar Abuse Contact Email: info@digitalregistra.co.id Registrar Abuse Contact Phone: Domain Status: clientDeleteProhibited Domain Status: clientRenewProhibited Domain Status: clientTransferProhibited Domain Status: clientUpdateProhibited Domain Status: serverDeleteProhibited Domain Status: serverRenewProhibited Domain Status: serverTransferProhibited Domain Status: serverUpdateProhibited Name Server: NS1.GOOGLE.COM Name Server: NS2.GOOGLE.COM Name Server: NS3.GOOGLE.COM Name Server: NS4.GOOGLE.COM DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2025-10-16T19:03:31Z <<< ================================================ FILE: test/samples/whois/google.co.il ================================================ % The data in the WHOIS database of the .il registry is provided % by ISOC-IL for information purposes, and to assist persons in % obtaining information about or related to a domain name % registration record. ISOC-IL does not guarantee its accuracy. % By submitting a WHOIS query, you agree that you will 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 (spam); % or (2) enable high volume, automated, electronic processes that % apply to ISOC-IL (or its systems). % ISOC-IL reserves the right to modify these terms at any time. % By submitting this query, you agree to abide by this policy. query: google.co.il reg-name: google domain: google.co.il descr: Google LLC. descr: 1600 Amphitheatre Parkway descr: Mountain View CA descr: 94043 descr: USA phone: +1 650 3300100 fax-no: +1 650 6188571 e-mail: dns-admin AT google.com admin-c: DT-DA20915-IL tech-c: DT-DA19919-IL zone-c: DT-DA19919-IL nserver: ns1.google.com nserver: ns2.google.com nserver: ns3.google.com nserver: ns4.google.com assigned: 05-06-1999 validity: 05-06-2026 DNSSEC: unsigned status: Transfer Locked changed: registrar AT ns.il 19990605 (Assigned) changed: domain-registrar AT isoc.org.il 20020926 (Changed) changed: domain-registrar AT isoc.org.il 20050706 (Changed) changed: domain-registrar AT isoc.org.il 20070118 (Changed) changed: domain-registrar AT isoc.org.il 20170517 (Transferred) changed: domain-registrar AT isoc.org.il 20170517 (Changed) changed: domain-registrar AT isoc.org.il 20181216 (Changed) changed: domain-registrar AT isoc.org.il 20181216 (Changed) person: Domain admin address Google Inc. address 1600 Amphitheatre Parkway address Mountain View CA address 94043 address USA phone: +1 650 3300100 fax-no: +1 650 6188571 e-mail: ccops AT markmonitor.com nic-hdl: DT-DA20915-IL changed: Managing Registrar 20170329 person: Domain Admin address MarkMonitor Inc. address 3540 E Longwing Lane Suite 300 address Meridian ID address 83646 address USA phone: +1 208 3895740 fax-no: +1 208 3895771 e-mail: ccops AT markmonitor.com nic-hdl: DT-DA19919-IL changed: Managing Registrar 20161005 changed: Managing Registrar 20170816 registrar name: Domain The Net Technologies Ltd registrar info: https://www.domainthenet.com % Rights to the data above are restricted by copyright. ================================================ FILE: test/samples/whois/google.co.ve ================================================ Servidor Whois del Centro de Información de Red de Venezuela (NIC.VE) Este servidor contiene información autoritativa exclusivamente de dominios .VE Cualquier consulta sobre este servicio, puede hacerla al correo electrónico whois@nic.ve Titular: Google Inc. dns-admin@google.com Google Inc 1600 Amphitheatre Parkway Mountain View, CA US +1.6502530000 Nombre de Dominio: google.co.ve Contacto Administrativo: DNS Admin dns-admin@google.com Google Inc. 1600 Amphitheatre Parkway Mountain View, CA, CA UNITED STATES +1.6502530000 (FAX) +16506181499 Contacto Técnico: DNS Admin dns-admin@google.com Google Inc. 1600 Amphitheatre Parkway Mountain View, CA, CA UNITED STATES +1.6502530000 (FAX) +16506181499 Contacto de Cobranza: Domain Administrator Venezueladomains2@markmonitor.com Markmonitor, Inc. 391 N. Ancestor Place Boise ID US 1-1 - 2083895740 (FAX) 1 - 2083895740 Fecha de Vencimiento: 2018-03-06 00:00:00 Ultima Actualización: 2005-11-17 20:35:01 Fecha de Creación: 2003-03-06 00:00:00 Estatus del dominio: ACTIVO Servidor(es) de Nombres de Dominio: - ns1.google.com - ns2.google.com - ns3.google.com - ns4.google.com NIC-Venezuela - CONATEL http://www.nic.ve ================================================ FILE: test/samples/whois/google.com ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Server Name: GOOGLE.COM.ZZZZZ.GET.LAID.AT.WWW.SWINGINGCOMMUNITY.COM IP Address: 69.41.185.195 Registrar: INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM Whois Server: whois.itsyourdomain.com Referral URL: http://www.itsyourdomain.com Server Name: GOOGLE.COM.ZOMBIED.AND.HACKED.BY.WWW.WEB-HACK.COM IP Address: 217.107.217.167 Registrar: ONLINENIC, INC. Whois Server: whois.35.com Referral URL: http://www.OnlineNIC.com Server Name: GOOGLE.COM.YAHOO.COM.MYSPACE.COM.YOUTUBE.COM.FACEBOOK.COM.THEYSUCK.DNSABOUT.COM IP Address: 72.52.190.30 Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Server Name: GOOGLE.COM.WORDT.DOOR.VEEL.WHTERS.GEBRUIKT.SERVERTJE.NET IP Address: 62.41.27.144 Registrar: KEY-SYSTEMS GMBH Whois Server: whois.rrpproxy.net Referral URL: http://www.key-systems.net Server Name: GOOGLE.COM.VN Registrar: ONLINENIC, INC. Whois Server: whois.35.com Referral URL: http://www.OnlineNIC.com Server Name: GOOGLE.COM.UY Registrar: DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM Whois Server: whois.PublicDomainRegistry.com Referral URL: http://www.PublicDomainRegistry.com Server Name: GOOGLE.COM.UA Registrar: DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM Whois Server: whois.PublicDomainRegistry.com Referral URL: http://www.PublicDomainRegistry.com Server Name: GOOGLE.COM.TW Registrar: WEB COMMERCE COMMUNICATIONS LIMITED DBA WEBNIC.CC Whois Server: whois.webnic.cc Referral URL: http://www.webnic.cc Server Name: GOOGLE.COM.TR Registrar: DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM Whois Server: whois.PublicDomainRegistry.com Referral URL: http://www.PublicDomainRegistry.com Server Name: GOOGLE.COM.SUCKS.FIND.CRACKZ.WITH.SEARCH.GULLI.COM IP Address: 80.190.192.24 Registrar: EPAG DOMAINSERVICES GMBH Whois Server: whois.enterprice.net Referral URL: http://www.enterprice.net Server Name: GOOGLE.COM.SPROSIUYANDEKSA.RU Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com Server Name: GOOGLE.COM.SERVES.PR0N.FOR.ALLIYAH.NET IP Address: 84.255.209.69 Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Server Name: GOOGLE.COM.SA Registrar: OMNIS NETWORK, LLC Whois Server: whois.omnis.com Referral URL: http://domains.omnis.com Server Name: GOOGLE.COM.PLZ.GIVE.A.PR8.TO.AUDIOTRACKER.NET IP Address: 213.251.184.30 Registrar: OVH Whois Server: whois.ovh.com Referral URL: http://www.ovh.com Server Name: GOOGLE.COM.MX Registrar: DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM Whois Server: whois.PublicDomainRegistry.com Referral URL: http://www.PublicDomainRegistry.com Server Name: GOOGLE.COM.IS.NOT.HOSTED.BY.ACTIVEDOMAINDNS.NET IP Address: 217.148.161.5 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: GOOGLE.COM.IS.HOSTED.ON.PROFITHOSTING.NET IP Address: 66.49.213.213 Registrar: NAME.COM LLC Whois Server: whois.name.com Referral URL: http://www.name.com Server Name: GOOGLE.COM.IS.APPROVED.BY.NUMEA.COM IP Address: 213.228.0.43 Registrar: GANDI SAS Whois Server: whois.gandi.net Referral URL: http://www.gandi.net Server Name: GOOGLE.COM.HAS.LESS.FREE.PORN.IN.ITS.SEARCH.ENGINE.THAN.SECZY.COM IP Address: 209.187.114.130 Registrar: INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM Whois Server: whois.itsyourdomain.com Referral URL: http://www.itsyourdomain.com Server Name: GOOGLE.COM.DO Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Server Name: GOOGLE.COM.COLLEGELEARNER.COM IP Address: 72.14.207.99 IP Address: 64.233.187.99 IP Address: 64.233.167.99 Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Server Name: GOOGLE.COM.CO Registrar: NAMESECURE.COM Whois Server: whois.namesecure.com Referral URL: http://www.namesecure.com Server Name: GOOGLE.COM.BR Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: GOOGLE.COM.BEYONDWHOIS.COM IP Address: 203.36.226.2 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: GOOGLE.COM.AU Registrar: PLANETDOMAIN PTY LTD. Whois Server: whois.planetdomain.com Referral URL: http://www.planetdomain.com Server Name: GOOGLE.COM.ACQUIRED.BY.CALITEC.NET IP Address: 85.190.27.2 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Domain Name: GOOGLE.COM Registrar: MARKMONITOR INC. Whois Server: whois.markmonitor.com Referral URL: http://www.markmonitor.com Name Server: NS1.GOOGLE.COM Name Server: NS2.GOOGLE.COM Name Server: NS3.GOOGLE.COM Name Server: NS4.GOOGLE.COM Status: clientDeleteProhibited Status: clientTransferProhibited Status: clientUpdateProhibited Updated Date: 10-apr-2006 Creation Date: 15-sep-1997 Expiration Date: 14-sep-2011 >>> Last update of whois database: Thu, 26 Jun 2008 21:39:39 EDT <<< 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. MarkMonitor.com - The Leader in Corporate Domain Management ---------------------------------------------------------- For Global Domain Consolidation, Research & Intelligence, and Enterprise DNS, go to: www.markmonitor.com ---------------------------------------------------------- The Data in MarkMonitor.com's WHOIS database is provided by MarkMonitor.com for information purposes, and to assist persons in obtaining information about or related to a domain name registration record. MarkMonitor.com does not guarantee its accuracy. By submitting a WHOIS query, you agree that you will 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 (spam); or (2) enable high volume, automated, electronic processes that apply to MarkMonitor.com (or its systems). MarkMonitor.com reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. Registrant: Dns Admin Google Inc. Please contact contact-admin@google.com 1600 Amphitheatre Parkway Mountain View CA 94043 US dns-admin@google.com +1.6502530000 Fax: +1.6506188571 Domain Name: google.com Registrar Name: Markmonitor.com Registrar Whois: whois.markmonitor.com Registrar Homepage: http://www.markmonitor.com Administrative Contact: DNS Admin Google Inc. 1600 Amphitheatre Parkway Mountain View CA 94043 US dns-admin@google.com +1.6506234000 Fax: +1.6506188571 Technical Contact, Zone Contact: DNS Admin Google Inc. 2400 E. Bayshore Pkwy Mountain View CA 94043 US dns-admin@google.com +1.6503300100 Fax: +1.6506181499 Created on..............: 1997-09-15. Expires on..............: 2011-09-13. Record last updated on..: 2008-06-08. Domain servers in listed order: ns4.google.com ns3.google.com ns2.google.com ns1.google.com MarkMonitor.com - The Leader in Corporate Domain Management ---------------------------------------------------------- For Global Domain Consolidation, Research & Intelligence, and Enterprise DNS, go to: www.markmonitor.com ---------------------------------------------------------- -- ================================================ FILE: test/samples/whois/google.com.br ================================================ % Copyright (c) Nic.br % The use of the data below is only permitted as described in % full by the terms of use at https://registro.br/termo/en.html , % being prohibited its distribution, commercialization or % reproduction, in particular, to use it for advertising or % any similar purpose. % 2019-04-19T03:22:06-03:00 domain: google.com.br owner: Google Brasil Internet Ltda ownerid: 06.990.590/0001-23 responsible: Domain Administrator country: BR owner-c: DOADM17 admin-c: DOADM17 tech-c: DOADM17 billing-c: NAB51 nserver: ns1.google.com nsstat: 20190418 AA nslastaa: 20190418 nserver: ns2.google.com nsstat: 20190418 AA nslastaa: 20190418 nserver: ns3.google.com nsstat: 20190418 AA nslastaa: 20190418 nserver: ns4.google.com nsstat: 20190418 NOT SYNC ZONE nslastaa: 20190418 created: 19990518 #162310 changed: 20190417 expires: 20200518 status: published nic-hdl-br: DOADM17 person: Domain Admin e-mail: ccops@markmonitor.com country: BR created: 20100520 changed: 20180324 nic-hdl-br: NAB51 person: NameAction do Brasil e-mail: mail@nameaction.com country: BR created: 20020619 changed: 20181011 % Security and mail abuse issues should also be addressed to % cert.br, http://www.cert.br/ , respectivelly to cert@cert.br % and mail-abuse@cert.br % % whois.registro.br accepts only direct match queries. Types % of queries are: domain (.br), registrant (tax ID), ticket, % provider, contact handle (ID), CIDR block, IP and ASN. ================================================ FILE: test/samples/whois/google.com.pe ================================================ Domain Name: google.com.pe WHOIS Server: NIC .PE Sponsoring Registrar: MarkMonitor Inc. Domain Status: clientTransferProhibited Domain Status: clientDeleteProhibited Domain Status: clientUpdateProhibited Registrant Name: Google LLC Admin Name: Google LLC Admin Email: dns-admin@google.com Name Server: ns1.google.com Name Server: ns2.google.com Name Server: ns3.google.com Name Server: ns4.google.com DNSSEC: unsigned >>> Last update of WHOIS database: 2019-04-18T05:53:50.968Z <<< 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. Whois database is provided as a service to the internet community. The data is for information purposes only. Red Cientifica Peruana 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. The compilation, repackaging, dissemination or other use of this Data is expressly prohibited. ================================================ FILE: test/samples/whois/google.com.sa ================================================ % SaudiNIC Whois server. % Rights restricted by copyright. % http://nic.sa/en/view/whois-cmd-copyright Domain Name: google.com.sa Registrant: Google Inc. قوقل انك Address: 1600 Amphitheatre Parkway Mountain View United States Administrative Contact: Maan Al Khen Address: Riyadh Olia 11423 Riyadh Saudi Arabia Technical Contact: Domain Administrator Address: 3540 East Longwing Lane Suite 300 83646 Idaho United States Name Servers: ns1.google.com ns2.google.com ns4.google.com ns3.google.com Created on: 2004-01-11 Last Updated on: 2019-02-06 ================================================ FILE: test/samples/whois/google.com.sg ================================================ Domain Name: google.com.sg Updated Date: 2024-06-03T09:54:56Z Creation Date: 2002-07-05T09:42:32Z Registry Expiry Date: 2025-07-04T16:00:00Z Registrar: MarkMonitor Inc. Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited VerifiedID Status: VerifiedID@SG-Not Required Registry Lock: Registrant Name: GOOGLE LLC Admin Name: MARKMONITOR INC. Tech Name: GOOGLE LLC Tech Email: dns-admin@google.com Name Server: ns1.google.com Name Server: ns2.google.com DNSSEC: unsigned >>> Last update of WHOIS database: 2024-06-18T01:45:41Z <<< For more information on Whois status codes, please visit https://icann.org/epp % ---------------------------------------------------------------------- % SGNIC WHOIS Server % ---------------------------------------------------------------------- % % This data is provided for information purposes only. ================================================ FILE: test/samples/whois/google.com.tr ================================================ ** Domain Name: google.com.tr ** Registrant: Google LLC 1600 Amphitheatre Parkway Mountain View Out of Turkey, United States of America dns-admin@google.com + 1-650-2530000- + 1-650-2530001- ** Administrative Contact: NIC Handle : mi154-metu Organization Name : MarkMonitor, Inc Address : Hidden upon user request Phone : Hidden upon user request Fax : Hidden upon user request ** Technical Contact: NIC Handle : btl1-metu Organization Name : Beril Teknoloji Bili�im Yay�nc�l�k Ticaret A.�. Address : Hidden upon user request Phone : Hidden upon user request Fax : Hidden upon user request ** Billing Contact: NIC Handle : btl1-metu Organization Name : Beril Teknoloji Bili�im Yay�nc�l�k Ticaret A.�. Address : Hidden upon user request Phone : Hidden upon user request Fax : Hidden upon user request ** Domain Servers: ns1.google.com ns2.google.com ns3.google.com ns4.google.com ** Additional Info: Created on..............: 2001-Aug-23. Expires on..............: 2019-Aug-22. ================================================ FILE: test/samples/whois/google.com.tw ================================================ Domain Name: google.com.tw Domain Status: clientUpdateProhibited,clientTransferProhibited,clientDeleteProhibited Registrant: Google Inc. DNS Admin dns-admin@google.com +1.6502530000 +1.6506188571 1600 Amphitheatre Parkway Mountain View, CA US Administrative Contact: DNS Admin dns-admin@google.com +1.6502530000 +1.6506188571 Technical Contact: DNS Admin dns-admin@google.com +1.6502530000 +1.6506188571 Record expires on 2019-11-09 (YYYY-MM-DD) Record created on 2000-08-29 (YYYY-MM-DD) Domain servers in listed order: ns1.google.com ns2.google.com ns3.google.com ns4.google.com Registration Service Provider: Markmonitor, Inc. Registration Service URL: http://www.markmonitor.com/ [Provided by NeuStar Registry Gateway Services] ================================================ FILE: test/samples/whois/google.com.ua ================================================ % Request from 80.254.2.190 % This is the Ukrainian Whois query server #F. % The Whois is subject to Terms of use % See https://hostmaster.ua/services/ % % IN THE PROCESS OF DELEGATION OF A DOMAIN NAME, % THE REGISTRANT IS AN ENTITY WHO USES AND MANAGES A CERTAIN DOMAIN NAME, % AND THE REGISTRAR IS A BUSINESS ENTITY THAT PROVIDES THE REGISTRANT % WITH THE SERVICES NECESSARY FOR THE TECHNICAL MAINTENANCE OF THE REGISTRATION AND OPERATION OF THE DOMAIN NAME. % FOR INFORMATION ABOUT THE REGISTRANT OF THE DOMAIN NAME, YOU SHOULD CONTACT THE REGISTRAR. domain: google.com.ua dom-public: NO mnt-by: ua.markmonitor nserver: ns3.google.com nserver: ns1.google.com nserver: ns4.google.com nserver: ns2.google.com status: clientDeleteProhibited status: clientTransferProhibited status: clientUpdateProhibited created: 2002-12-04 00:00:00+02 modified: 2018-11-02 11:29:08+02 expires: 2019-12-04 00:00:00+02 source: UAEPP % Registrar: % ========== registrar: ua.markmonitor organization: MarkMonitor Inc. organization-loc: MarkMonitor Inc. url: http://markmonitor.com city: Meridian, Idaho country: US abuse-email: abusecomplaints@markmonitor.com abuse-postal: 83646 Meridian, Idaho 3540 East Longwing Lane, suite 300 source: UAEPP % Registrant: % =========== person: n/a person-loc: DNS Admin organization-loc: Google Inc. e-mail: dns-admin@google.com address: n/a address-loc: 1600 Amphitheatre Parkway address-loc: CA address-loc: Mountain View postal-code-loc: 94043 country-loc: US phone: +1.6502530000 fax: +1.6502530001 mnt-by: ua.markmonitor status: ok status: linked created: 2017-07-28 23:53:31+03 source: UAEPP % Administrative Contacts: % ======================= person: n/a person-loc: DNS Admin organization-loc: Google Inc. e-mail: dns-admin@google.com address: n/a address-loc: 1600 Amphitheatre Parkway address-loc: CA address-loc: Mountain View postal-code-loc: 94043 country-loc: US phone: +1.6502530000 fax: +1.6502530001 mnt-by: ua.markmonitor status: ok status: linked created: 2017-07-28 23:53:31+03 source: UAEPP % Query time: 5 msec ================================================ FILE: test/samples/whois/google.de ================================================ % Restricted rights. % % Terms and Conditions of Use % % The above data may only be used within the scope of technical or % administrative necessities of Internet operation or to remedy legal % problems. % The use for other purposes, in particular for advertising, is not permitted. % % The DENIC whois service on port 43 doesn't disclose any information concerning % the domain holder, general request and abuse contact. % This information can be obtained through use of our web-based whois service % available at the DENIC website: % http://www.denic.de/en/domains/whois-service/web-whois.html % % Domain: google.de Nserver: ns1.google.com Nserver: ns2.google.com Nserver: ns3.google.com Nserver: ns4.google.com Status: connect Changed: 2018-03-12T21:44:25+01:00 ================================================ FILE: test/samples/whois/google.do ================================================ Domain Name: google.do WHOIS Server: whois.nic.do Updated Date: 2019-02-07T17:54:31.560Z Creation Date: 2010-03-08T04:00:00.0Z Registry Expiry Date: 2020-03-08T04:00:00.0Z Domain Status: ok https://icann.org/epp#ok Registrar: Registrar NIC .DO (midominio.do) Registrar Address: Av. R?mulo Betancourt 1108, La Julia Apartado postal 2748, Santo Domingo Registrar Country: DO Registrar Phone: 8095350111 Registrar Fax: 8092860012 Registrar Customer Service Contact: info@nic.do Registrar Customer Service Email: info@nic.do Registrant ID: Redacted | EU Data Subject Registrant Name: GOOGLE LLC Registrant Organization: GOOGLE LLC Registrant Street: Redacted | EU Data Subject Registrant City: Redacted | EU Data Subject Registrant State/Province: Redacted | EU Data Subject Registrant Postal Code: Redacted | EU Data Subject Registrant Country: Redacted | EU Data Subject Registrant Phone: Redacted | EU Data Subject Registrant Fax: Redacted | EU Data Subject Registrant Email: Redacted | EU Data Subject Admin ID: Redacted | EU Data Subject Admin Name: Google LLC Admin Organization: GOOGLE LLC Admin Street: Redacted | EU Data Subject Admin City: Redacted | EU Data Subject Admin State/Province: Redacted | EU Data Subject Admin Postal Code: Redacted | EU Data Subject Admin Country: Redacted | EU Data Subject Admin Phone: Redacted | EU Data Subject Admin Fax: Redacted | EU Data Subject Admin Email: Redacted | EU Data Subject Billing ID: Redacted | EU Data Subject Billing Name: MARKMONITOR Billing Organization: MARKMONITOR Billing Street: Redacted | EU Data Subject Billing Street: Redacted | EU Data Subject Billing City: Redacted | EU Data Subject Billing State/Province: Redacted | EU Data Subject Billing Postal Code: Redacted | EU Data Subject Billing Country: Redacted | EU Data Subject Billing Phone: Redacted | EU Data Subject Billing Fax: Redacted | EU Data Subject Billing Email: Redacted | EU Data Subject Tech ID: Redacted | EU Data Subject Tech Name: Google LLC Tech Organization: Google LLC Tech Street: Redacted | EU Data Subject Tech City: Redacted | EU Data Subject Tech State/Province: Redacted | EU Data Subject Tech Postal Code: Redacted | EU Data Subject Tech Country: Redacted | EU Data Subject Tech Phone: Redacted | EU Data Subject Tech Fax: Redacted | EU Data Subject Tech Email: Redacted | EU Data Subject Name Server: ns1.google.com Name Server: ns2.google.com DNSSEC: unsigned >>> Last update of WHOIS database: 2019-04-16T13:27:25.387Z <<< 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. This WHOIS database is provided by as a service to the internet community. The data is for information purposes only. We do 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 NIC.DO. The compilation, repackaging, dissemination or other use of this Data is expressly prohibited. ================================================ FILE: test/samples/whois/google.fr ================================================ %% %% This is the AFNIC Whois server. %% %% complete date format: YYYY-MM-DDThh:mm:ssZ %% %% Rights restricted by copyright. %% See https://www.afnic.fr/en/domain-names-and-support/everything-there-is-to-know-about-domain-names/find-a-domain-name-or-a-holder-using-whois/ %% %% domain: google.fr status: ACTIVE eppstatus: serverUpdateProhibited eppstatus: serverTransferProhibited eppstatus: serverDeleteProhibited eppstatus: serverRecoverProhibited hold: NO holder-c: GIHU100-FRNIC admin-c: GIHU101-FRNIC tech-c: MI3669-FRNIC registrar: MARKMONITOR Inc. Expiry Date: 2026-12-30T17:16:48Z created: 2000-07-26T22:00:00Z last-update: 2025-12-03T10:12:00.351952Z source: FRNIC nserver: ns1.google.com nserver: ns2.google.com nserver: ns3.google.com nserver: ns4.google.com source: FRNIC registrar: MARKMONITOR Inc. address: 2150 S. Bonito Way, Suite 150 address: ID 83642 MERIDIAN country: US phone: +1.2083895740 fax-no: +1.2083895771 e-mail: registry.admin@markmonitor.com website: http://www.markmonitor.com anonymous: No registered: 2002-01-07T00:00:00Z source: FRNIC nic-hdl: GIHU100-FRNIC type: ORGANIZATION contact: Google Ireland Holdings Unlimited Company address: Google Ireland Holdings Unlimited Company address: 70 Sir John Rogerson's Quay address: 2 Dublin country: IE phone: +353.14361000 e-mail: dns-admin@google.com registrar: MARKMONITOR Inc. changed: 2024-06-11T20:04:33.772976Z anonymous: NO obsoleted: NO eppstatus: serverUpdateProhibited eppstatus: associated eligstatus: not identified reachstatus: not identified source: FRNIC nic-hdl: GIHU101-FRNIC type: ORGANIZATION contact: Google Ireland Holdings Unlimited Company address: 70 Sir John Rogerson's Quay address: 2 Dublin country: IE phone: +353.14361000 e-mail: dns-admin@google.com registrar: MARKMONITOR Inc. anonymous: NO obsoleted: NO eppstatus: associated eppstatus: active eligstatus: not identified reachstatus: ok reachmedia: email reachsource: REGISTRAR reachdate: 2018-03-02T00:00:00Z source: FRNIC nic-hdl: MI3669-FRNIC type: ORGANIZATION contact: MarkMonitor Inc. address: 2150 S. Bonito Way, Suite 150 address: 83642 Meridian country: US phone: +1.2083895740 fax-no: +1.2083895771 e-mail: ccops@markmonitor.com registrar: MARKMONITOR Inc. changed: 2026-02-05T20:37:17.379552Z anonymous: NO obsoleted: NO eppstatus: associated eppstatus: active eligstatus: ok eligsource: REGISTRAR eligdate: 2021-10-05T00:00:00Z reachstatus: ok reachmedia: email reachsource: REGISTRAR reachdate: 2021-10-05T00:00:00Z source: FRNIC >>> Last update of WHOIS database: 2026-02-06T17:22:17.219605Z <<< ================================================ FILE: test/samples/whois/google.hn ================================================ Domain Name: google.hn Domain ID: 801220-CoCCA WHOIS Server: whois.nic.hn Updated Date: 2019-02-03T10:43:28.837Z Creation Date: 2003-03-07T05:00:00.0Z Registry Expiry Date: 2020-03-07T05:00:00.0Z Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Registrar: MarkMonitor Registrar URL: http://www.markmonitor.com Registrant ID: 490793-CoCCA Registrant Name: Google Inc. Registrant Organization: Google Inc. Registrant Street: 1600 Amphitheatre Parkway Registrant City: Mountain View Registrant State/Province: CA Registrant Postal Code: 94043 Registrant Country: US Registrant Phone: +1.6502530000 Registrant Fax: +1.6502530001 Registrant Email: dns-admin@google.com Admin ID: 490793-CoCCA Admin Name: Google Inc. Admin Organization: Google Inc. Admin Street: 1600 Amphitheatre Parkway Admin City: Mountain View Admin State/Province: CA Admin Postal Code: 94043 Admin Country: US Admin Phone: +1.6502530000 Admin Fax: +1.6502530001 Admin Email: dns-admin@google.com Billing ID: 857074-CoCCA Billing Name: CCOPs Provisioning Billing Organization: MarkMonitor Billing Street: 10400 Overland Rd PMB 155 Billing City: Boise Billing State/Province: ID Billing Postal Code: 83709 Billing Country: US Billing Phone: +1.2083895740 Billing Fax: +1.2083895771 Billing Email: ccops@markmonitor.com Tech ID: 857074-CoCCA Tech Name: CCOPs Provisioning Tech Organization: MarkMonitor Tech Street: 10400 Overland Rd PMB 155 Tech City: Boise Tech State/Province: ID Tech Postal Code: 83709 Tech Country: US Tech Phone: +1.2083895740 Tech Fax: +1.2083895771 Tech Email: ccops@markmonitor.com Name Server: ns1.google.com Name Server: ns2.google.com DNSSEC: unsigned >>> Last update of WHOIS database: 2019-04-16T12:26:36.280Z <<< T?rminos de Uso: NIC.HN no se hace responsable por la veracidad de los datos proporcionados, ya que los mismos fueron proporcionados por los Registrantes y Usuarios del Servicio de Registro. La informaci?n desplegada ha sido proporcionada por el Administrador de Nombre de Dominio que corresponda, dicha informaci?n no es generada por NIC.HN. Queda absolutamente prohibido su uso para otros prop?sitos, incluyendo el env?o de Correos Electr?nicos no solicitados con fines publicitarios o de promoci?n de productos y servicios (SPAM) sin mediar la autorizaci?n de los afectados y de NIC.HN. La base de datos generada a partir del sistema de delegaci?n, est? protegida por las leyes de Propiedad Intelectual y todos los tratados internacionales sobre la materia. Si necesita mayor informaci?n sobre los registros aqu? mostrados, favor de comunicarse a contacto@nic.hn ================================================ FILE: test/samples/whois/google.hu ================================================ % Whois server 4.0 serving the hu ccTLD domain: google.hu record created: 2000-03-03 Tovabbi adatokert ld.: https://www.domain.hu/domain-kereses/ For further data see: https://www.domain.hu/domain-search/ ================================================ FILE: test/samples/whois/google.ie ================================================ # whois.weare.ie Domain Name: google.ie Registry Domain ID: 762999-IEDR Registrar WHOIS Server: whois.weare.ie Registrar URL: http://www.eMarkmonitor.com Updated Date: 2021-05-05T14:19:51Z Creation Date: 2002-03-21T00:00:00Z Registry Expiry Date: 2022-03-21T14:13:27Z Registrar: Markmonitor Inc Registrar IANA ID: not applicable Registrar Abuse Contact Email: abusecomplaints@markmonitor.com Registrar Abuse Contact Phone: +1.2086851865 Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited Registry Registrant ID: 379250-IEDR Registrant Name: Google LLC Registry Admin ID: 5672149-IEDR Registry Tech ID: 534389-IEDR Registry Billing ID: REDACTED FOR PRIVACY Name Server: ns1.google.com Name Server: ns2.google.com Name Server: ns3.google.com DNSSEC: unsigned ================================================ FILE: test/samples/whois/google.it ================================================ ********************************************************************* * Please note that the following result could be a subgroup of * * the data contained in the database. * * * * Additional information can be visualized at: * * http://web-whois.nic.it * * Privacy Information: http://web-whois.nic.it/privacy * ********************************************************************* Domain: google.it Status: ok Signed: no Created: 1999-12-10 00:00:00 Last Update: 2018-05-07 00:54:15 Expire Date: 2019-04-21 Registrant Organization: Google Ireland Holdings Unlimited Company Address: 70 Sir John Rogerson's Quay Dublin 2 Dublin IE Created: 2018-03-02 19:04:02 Last Update: 2018-03-02 19:04:02 Admin Contact Name: Christina Chiou Organization: Google LLC Address: 1600 Amphitheatre Parkway Mountain View 94043 CA US Created: 2018-03-12 23:25:59 Last Update: 2018-03-12 23:25:59 Technical Contacts Name: Domain Administrator Organization: Google LLC Address: 1600 Amphitheatre Parkway Mountain View 94043 CA US Created: 2017-12-21 19:54:04 Last Update: 2017-12-21 19:54:04 Registrar Organization: MarkMonitor International Limited Name: MARKMONITOR-REG Web: https://www.markmonitor.com/ DNSSEC: no Nameservers ns1.google.com ns2.google.com ns3.google.com ns4.google.com ================================================ FILE: test/samples/whois/google.kg ================================================ % This is the .kg ccTLD Whois server % Register your own domain at https://www.cctld.kg % Whois web service - https://www.cctld.kg/whois Domain GOOGLE.KG (ACTIVE) Administrative Contact: PID: AI-44973-KG Name: Address: United States Mountain View 1600 Amphitheatre Parkway N/A Email: dns-admin@google.com phone: 16502530000 fax: +1.6502530001 Technical Contact: PID: AI-44973-KG Name: Address: United States Mountain View 1600 Amphitheatre Parkway N/A Email: dns-admin@google.com phone: 16502530000 fax: +1.6502530001 Billing Contact: PID: 5935-KG Name: Address: United States Meridian 1120 S. Rackham Way Suite 300 Email: ccops@markmonitor.com phone: +12083895740 fax: +12083895771 Record created: Tue Feb 10 09:42:42 2004 Record last updated on: Wed Mar 5 00:13:49 2025 Record expires on: Sat Mar 28 23:59:00 2026 Name servers in the listed order: NS1.GOOGLE.COM NS2.GOOGLE.COM NS4.GOOGLE.COM ================================================ FILE: test/samples/whois/google.lu ================================================ % Access to RESTENA DNS-LU WHOIS information is provided to assist persons % in determining the content of a domain name registration record in the LU % registration database. The data in this record is provided by RESTENA DNS-LU % for information purposes only, and RESTENA DNS-LU does not guarantee its % accuracy. Compilation, repackaging, dissemination or other use of the % WHOIS database in its entirety, or of a substantial part thereof, is not % allowed without the prior written permission of RESTENA DNS-LU. % % By submitting a WHOIS query, you agree to abide by this policy. You acknowledge % that the use of the WHOIS database is regulated by the ACCEPTABLE USE POLICY % (http://www.dns.lu/en/support/domainname-availability/whois-gateway/), that you are aware of its % content, and that you accept its terms and conditions. % % You agree especially that you will use this data only for lawful purposes and % that you will not use this data to: % (1) allow, enable, or otherwise support the transmission of mass unsolicited, % commercial advertising or solicitations via e-mail (spam); or % (2) enable high volume, automated, electronic processes that apply to % RESTENA DNS-LU (or its systems). % % All rights reserved. % % WHOIS google.lu domainname: google.lu domaintype: ACTIVE nserver: ns1.google.com nserver: ns2.google.com nserver: ns3.google.com nserver: ns4.google.com ownertype: ORGANISATION org-country: US registrar-name: Markmonitor registrar-email: ccops@markmonitor.com registrar-url: http://www.markmonitor.com/ registrar-country: GB % % More details on the domain may be available at below whois-web URL. % Next to possible further data a form to contact domain operator or % request further details is available. whois-web: https://www.dns.lu/en/support/domainname-availability/whois-gateway/ ================================================ FILE: test/samples/whois/google.lv ================================================ [Domain] Domain: google.lv Status: active [Holder] Type: Legal person Name: Google LLC Address: 1600 Amphitheatre Parkway, Mountain View, CA, 94043, USA RegNr: None Visit: https://www.nic.lv/whois/contact/google.lv to contact. [Tech] Type: Natural person Visit: https://www.nic.lv/whois/contact/google.lv to contact. [Registrar] Type: Legal person Name: MarkMonitor Inc. Address: 1120 S. Rackham Way, Suite 300, Meridian, ID, 83642, USA RegNr: 82-0513468 Visit: https://www.nic.lv/whois/contact/google.lv to contact. [Nservers] Nserver: ns1.google.com Nserver: ns2.google.com Nserver: ns3.google.com Nserver: ns4.google.com [Whois] Updated: 2024-09-03T17:12:28.647770+00:00 [Disclaimer] % The WHOIS service is provided solely for informational purposes. % % It is permitted to use the WHOIS service only for technical or administrative % needs associated with the operation of the Internet or in order to contact % the domain name holder over legal problems. % % Requestor will not use information obtained using WHOIS: % * To allow, enable or in any other way to support sending of unsolicited mails (spam) % * for any kind of advertising % * to disrupt Internet stability and security % % It is not permitted to obtain (including copying) or re-use in any form or % by any means all or quantitatively or qualitatively significant part % of the WHOIS without NIC's express permission. ================================================ FILE: test/samples/whois/google.mx ================================================ Domain Name: google.mx Created On: 2009-05-12 Expiration Date: 2020-05-11 Last Updated On: 2019-04-12 Registrar: MarkMonitor URL: http://www.markmonitor.com/ Registrant: Name: Google Inc. City: Mountain View State: California Country: United States Administrative Contact: Name: Google Inc. City: Mountain View State: California Country: United States Technical Contact: Name: Google Inc. City: Mountain View State: California Country: United States Billing Contact: Name: MarkMonitor City: Boise State: Idaho Country: United States Name Servers: DNS: ns2.google.com DNS: ns4.google.com DNS: ns3.google.com DNS: ns1.google.com DNSSEC DS Records: % 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. % The requested information ("Information") is provided only for the delegation % of domain names and the operation of the DNS administered by NIC Mexico. % It is absolutely prohibited to use the Information for other purposes, % including sending not requested emails for advertising or promoting products % and services purposes (SPAM) without the authorization of the owners of the % Information and NIC Mexico. % The database generated from the delegation system is protected by the % intellectual property laws and all international treaties on the matter. % If you need more information on the records displayed here, please contact us % by email at ayuda@nic.mx . % If you want notify the receipt of SPAM or unauthorized access, please send a % email to abuse@nic.mx . % NOTA: La fecha de expiracion mostrada en esta consulta es la fecha que el % registrar tiene contratada para el nombre de dominio en el registry. Esta % fecha no necesariamente refleja la fecha de expiracion del nombre de dominio % que el registrante tiene contratada con el registrar. Puede consultar la base % de datos de Whois del registrar para ver la fecha de expiracion reportada por % el registrar para este nombre de dominio. % La informacion que ha solicitado se provee exclusivamente para fines % relacionados con la delegacion de nombres de dominio y la operacion del DNS % administrado por NIC Mexico. % Queda absolutamente prohibido su uso para otros propositos, incluyendo el % envio de Correos Electronicos no solicitados con fines publicitarios o de % promocion de productos y servicios (SPAM) sin mediar la autorizacion de los % afectados y de NIC Mexico. % La base de datos generada a partir del sistema de delegacion, esta protegida % por las leyes de Propiedad Intelectual y todos los tratados internacionales % sobre la materia. % Si necesita mayor informacion sobre los registros aqui mostrados, favor de % comunicarse a ayuda@nic.mx. % Si desea notificar sobre correo no solicitado o accesos no autorizados, favor % de enviar su mensaje a abuse@nic.mx. ================================================ FILE: test/samples/whois/google.ro ================================================ % The WHOIS service offered by ROTLD and the access to the records in the ROTLD WHOIS database % are provided for information purposes and to be used within the scope of technical or administrative % necessities of Internet operation or to remedy legal problems. The use for other purposes, % in particular for advertising and domain hunting, is not permitted. % Without prejudice to the above, it is explicitly forbidden to extract, copy and/or use or re-utilise % in any form and by any means (electronically or not) the whole or a quantitatively or qualitatively % substantial part of the contents of the WHOIS database without prior and explicit permission by ROTLD, % nor in any attempt hereof, to apply automated, electronic processes to ROTLD (or its systems). % ROTLD cannot, under any circumstances, be held liable in case the stored information would prove % to be wrong, incomplete or not accurate in any sense. % You agree that any reproduction and/or transmission of data for commercial purposes will always % be considered as the extraction of a substantial part of the content of the WHOIS database. % By submitting the query you agree to abide by this policy and accept that ROTLD can take measures % to limit the use of its WHOIS services in order to protect the privacy of its registrants or the % integrity of the database. % The ROTLD WHOIS service on port 43 never discloses any information concerning the registrant. % Registrant information can be obtained through use of the web-based whois service available from % the ROTLD website www.rotld.ro Domain Name: google.ro Registered On: 2000-07-17 Expires On: 2019-09-17 Registrar: MarkMonitor Inc. Referral URL: www.markmonitor.com DNSSEC: Inactive Nameserver: ns1.google.com Nameserver: ns2.google.com Nameserver: ns3.google.com Nameserver: ns4.google.com Domain Status: UpdateProhibited ================================================ FILE: test/samples/whois/google.sk ================================================ Domain: google.sk Registrant: Google Admin Contact: Google Tech Contact: Google Registrar: FAJN-0002 Created: 2003-07-24 Updated: 2018-07-03 Valid Until: 2019-07-24 Nameserver: ns1.google.com Nameserver: ns2.google.com Nameserver: ns3.google.com Nameserver: ns4.google.com EPP Status: ok Registrar: FAJN-0002 Name: FAJNOR IP s. r. o. Organization: FAJNOR IP s. r. o. Organization ID: 46039201 Phone: +421.263811927 Email: domains@fajnor.sk Street: Krasovského 13 City: Bratislava Postal Code: 851 01 Country Code: SK Created: 2017-09-01 Updated: 2019-04-17 Contact: Google Name: Domain Administrator Organization: Google Ireland Holdings Unlimited Company Phone: +353.14361000 Email: dns-admin@google.com Street: 70 Sir John Rogerson's Quay City: Dublin Postal Code: 2 Country Code: IE Registrar: FAJN-0002 Created: 2018-01-26 Updated: 2018-07-16 ================================================ FILE: test/samples/whois/imdb.com ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Server Name: IMDB.COM.MORE.INFO.AT.WWW.BEYONDWHOIS.COM IP Address: 203.36.226.2 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Domain Name: IMDB.COM Registrar: NETWORK SOLUTIONS, LLC. Whois Server: whois.networksolutions.com Referral URL: http://www.networksolutions.com Name Server: UDNS1.ULTRADNS.NET Name Server: UDNS2.ULTRADNS.NET Status: clientTransferProhibited Updated Date: 28-mar-2008 Creation Date: 05-jan-1996 Expiration Date: 04-jan-2016 >>> Last update of whois database: Thu, 26 Jun 2008 21:40:25 EDT <<< 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.NOTICE AND TERMS OF USE: You are not authorized to access or query our WHOIS database through the use of high-volume, automated, electronic processes. The Data in Network Solutions' WHOIS database is provided by Network Solutions for information purposes only, and to assist persons in obtaining information about or related to a domain name registration record. Network Solutions 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 Network Solutions (or its computer systems). The compilation, repackaging, dissemination or other use of this Data is expressly prohibited without the prior written consent of Network Solutions. You agree not to use high-volume, automated, electronic processes to access or query the WHOIS database. Network Solutions reserves the right to terminate your access to the WHOIS database in its sole discretion, including without limitation, for excessive querying of the WHOIS database or for failure to otherwise abide by this policy. Network Solutions reserves the right to modify these terms at any time. Get a FREE domain name registration, transfer, or renewal with any annual hosting package. http://www.networksolutions.com Visit AboutUs.org for more information about IMDB.COM AboutUs: IMDB.COM Registrant: IMDb.com, Inc. Legal Dept, PO Box 81226 Seattle, WA 98108 US Domain Name: IMDB.COM ------------------------------------------------------------------------ Promote your business to millions of viewers for only $1 a month Learn how you can get an Enhanced Business Listing here for your domain name. Learn more at http://www.NetworkSolutions.com/ ------------------------------------------------------------------------ Administrative Contact, Technical Contact: Hostmaster, IMDb hostmaster@imdb.com IMDb.com, Inc. Legal Dept, PO Box 81226 Seattle, WA 98108 US +1.2062664064 fax: +1.2062667010 Record expires on 04-Jan-2016. Record created on 05-Jan-1996. Database last updated on 26-Jun-2008 21:38:42 EDT. Domain servers in listed order: UDNS1.ULTRADNS.NET UDNS2.ULTRADNS.NET ================================================ FILE: test/samples/whois/liechtenstein.li ================================================ Domain name: liechtenstein.li Holder of domain name: Liechtensteinische Landesverwaltung Martin Matt Heiligkreuz 8 LI-9490 Vaduz Liechtenstein Registrar: switchplus AG First registration date: 1996-02-08 DNSSEC:N Name servers: pdns.llv.li [193.222.114.65] scsnms.switch.ch [130.59.31.26] scsnms.switch.ch [2001:620:0:ff::a7] ================================================ FILE: test/samples/whois/microsoft.com ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Server Name: MICROSOFT.COM.ZZZZZZ.MORE.DETAILS.AT.WWW.BEYONDWHOIS.COM IP Address: 203.36.226.2 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: MICROSOFT.COM.ZZZZZ.GET.LAID.AT.WWW.SWINGINGCOMMUNITY.COM IP Address: 69.41.185.194 Registrar: INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM Whois Server: whois.itsyourdomain.com Referral URL: http://www.itsyourdomain.com Server Name: MICROSOFT.COM.ZZZOMBIED.AND.HACKED.BY.WWW.WEB-HACK.COM IP Address: 217.107.217.167 Registrar: ONLINENIC, INC. Whois Server: whois.35.com Referral URL: http://www.OnlineNIC.com Server Name: MICROSOFT.COM.ZZZ.IS.0WNED.AND.HAX0RED.BY.SUB7.NET IP Address: 207.44.240.96 Registrar: INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM Whois Server: whois.itsyourdomain.com Referral URL: http://www.itsyourdomain.com Server Name: MICROSOFT.COM.WILL.LIVE.FOREVER.BECOUSE.UNIXSUCKS.COM IP Address: 185.3.4.7 Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com Server Name: MICROSOFT.COM.WILL.BE.SLAPPED.IN.THE.FACE.BY.MY.BLUE.VEINED.SPANNER.NET IP Address: 216.127.80.46 Registrar: COMPUTER SERVICES LANGENBACH GMBH DBA JOKER.COM Whois Server: whois.joker.com Referral URL: http://www.joker.com Server Name: MICROSOFT.COM.WILL.BE.BEATEN.WITH.MY.SPANNER.NET IP Address: 216.127.80.46 Registrar: COMPUTER SERVICES LANGENBACH GMBH DBA JOKER.COM Whois Server: whois.joker.com Referral URL: http://www.joker.com Server Name: MICROSOFT.COM.WAREZ.AT.TOPLIST.GULLI.COM IP Address: 80.190.192.33 Registrar: EPAG DOMAINSERVICES GMBH Whois Server: whois.enterprice.net Referral URL: http://www.enterprice.net Server Name: MICROSOFT.COM.USERS.SHOULD.HOST.WITH.UNIX.AT.ITSHOSTED.COM IP Address: 74.52.88.132 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: MICROSOFT.COM.TOTALLY.SUCKS.S3U.NET IP Address: 207.208.13.22 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: MICROSOFT.COM.SOFTWARE.IS.NOT.USED.AT.REG.RU Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com Server Name: MICROSOFT.COM.SHOULD.GIVE.UP.BECAUSE.LINUXISGOD.COM IP Address: 65.160.248.13 Registrar: GKG.NET, INC. Whois Server: whois.gkg.net Referral URL: http://www.gkg.net Server Name: MICROSOFT.COM.RAWKZ.MUH.WERLD.MENTALFLOSS.CA Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: MICROSOFT.COM.OHMYGODITBURNS.COM IP Address: 216.158.63.6 Registrar: DOTSTER, INC. Whois Server: whois.dotster.com Referral URL: http://www.dotster.com Server Name: MICROSOFT.COM.MORE.INFO.AT.WWW.BEYONDWHOIS.COM IP Address: 203.36.226.2 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: MICROSOFT.COM.LOVES.ME.KOSMAL.NET IP Address: 65.75.198.123 Registrar: GODADDY.COM, INC. Whois Server: whois.godaddy.com Referral URL: http://registrar.godaddy.com Server Name: MICROSOFT.COM.LIVES.AT.SHAUNEWING.COM IP Address: 216.40.250.172 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: MICROSOFT.COM.IS.NOT.YEPPA.ORG Registrar: OVH Whois Server: whois.ovh.com Referral URL: http://www.ovh.com Server Name: MICROSOFT.COM.IS.NOT.HOSTED.BY.ACTIVEDOMAINDNS.NET IP Address: 217.148.161.5 Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: MICROSOFT.COM.IS.IN.BED.WITH.CURTYV.COM IP Address: 216.55.187.193 Registrar: ABACUS AMERICA, INC. DBA NAMES4EVER Whois Server: whois.names4ever.com Referral URL: http://www.names4ever.com Server Name: MICROSOFT.COM.IS.HOSTED.ON.PROFITHOSTING.NET IP Address: 66.49.213.213 Registrar: NAME.COM LLC Whois Server: whois.name.com Referral URL: http://www.name.com Server Name: MICROSOFT.COM.IS.GOD.BECOUSE.UNIXSUCKS.COM IP Address: 161.16.56.24 Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com Server Name: MICROSOFT.COM.IS.A.STEAMING.HEAP.OF.FUCKING-BULLSHIT.NET IP Address: 63.99.165.11 Registrar: THE NAME IT CORPORATION DBA NAMESERVICES.NET Whois Server: whois.aitdomains.com Referral URL: http://www.aitdomains.com Server Name: MICROSOFT.COM.IS.A.MESS.TIMPORTER.CO.UK Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com Server Name: MICROSOFT.COM.HAS.ITS.OWN.CRACKLAB.COM IP Address: 209.26.95.44 Registrar: DOTSTER, INC. Whois Server: whois.dotster.com Referral URL: http://www.dotster.com Server Name: MICROSOFT.COM.HAS.A.PRESENT.COMING.FROM.HUGHESMISSILES.COM IP Address: 66.154.11.27 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: MICROSOFT.COM.FILLS.ME.WITH.BELLIGERENCE.NET IP Address: 130.58.82.232 Registrar: CRONON AG BERLIN, NIEDERLASSUNG REGENSBURG Whois Server: whois.tmagnic.net Referral URL: http://nsi-robo.tmag.de Server Name: MICROSOFT.COM.CAN.GO.FUCK.ITSELF.AT.SECZY.COM IP Address: 209.187.114.147 Registrar: INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM Whois Server: whois.itsyourdomain.com Referral URL: http://www.itsyourdomain.com Server Name: MICROSOFT.COM.ARE.GODDAMN.PIGFUCKERS.NET.NS-NOT-IN-SERVICE.COM IP Address: 216.127.80.46 Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Server Name: MICROSOFT.COM.AND.MINDSUCK.BOTH.SUCK.HUGE.ONES.AT.EXEGETE.NET IP Address: 63.241.136.53 Registrar: DOTSTER, INC. Whois Server: whois.dotster.com Referral URL: http://www.dotster.com Domain Name: MICROSOFT.COM Registrar: TUCOWS INC. Whois Server: whois.tucows.com Referral URL: http://domainhelp.opensrs.net Name Server: NS1.MSFT.NET Name Server: NS2.MSFT.NET Name Server: NS3.MSFT.NET Name Server: NS4.MSFT.NET Name Server: NS5.MSFT.NET Status: clientDeleteProhibited Status: clientTransferProhibited Status: clientUpdateProhibited Updated Date: 10-oct-2006 Creation Date: 02-may-1991 Expiration Date: 03-may-2014 >>> Last update of whois database: Thu, 26 Jun 2008 21:39:39 EDT <<< 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.Registrant: Microsoft Corporation One Microsoft Way Redmond, WA 98052 US Domain name: MICROSOFT.COM Administrative Contact: Administrator, Domain domains@microsoft.com One Microsoft Way Redmond, WA 98052 US +1.4258828080 Technical Contact: Hostmaster, MSN msnhst@microsoft.com One Microsoft Way Redmond, WA 98052 US +1.4258828080 Registration Service Provider: DBMS VeriSign, dbms-support@verisign.com 800-579-2848 x4 Please contact DBMS VeriSign for domain updates, DNS/Nameserver changes, and general domain support questions. Registrar of Record: TUCOWS, INC. Record last updated on 15-Nov-2007. Record expires on 03-May-2014. Record created on 02-May-1991. Registrar Domain Name Help Center: http://domainhelp.tucows.com Domain servers in listed order: NS2.MSFT.NET NS4.MSFT.NET NS1.MSFT.NET NS5.MSFT.NET NS3.MSFT.NET Domain status: clientDeleteProhibited clientTransferProhibited clientUpdateProhibited The Data in the Tucows Registrar WHOIS database is provided to you by Tucows for information purposes only, and may be used to assist you in obtaining information about or related to a domain name's registration record. Tucows makes this information available "as is," and does not guarantee its accuracy. By submitting a WHOIS query, you agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to: a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass, unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of any Registry Operator or ICANN-Accredited registrar, except as reasonably necessary to register domain names or modify existing registrations. The compilation, repackaging, dissemination or other use of this Data is expressly prohibited without the prior written consent of Tucows. Tucows reserves the right to terminate your access to the Tucows WHOIS database in its sole discretion, including without limitation, for excessive querying of the WHOIS database or for failure to otherwise abide by this policy. Tucows reserves the right to modify these terms at any time. By submitting this query, you agree to abide by these terms. NOTE: THE WHOIS DATABASE IS A CONTACT DATABASE ONLY. LACK OF A DOMAIN RECORD DOES NOT SIGNIFY DOMAIN AVAILABILITY. ================================================ FILE: test/samples/whois/nic.live ================================================ % IANA WHOIS server % for more information on IANA, visit http://www.iana.org % This query returned 1 object refer: whois.nic.live domain: LIVE organisation: Dog Beach, LLC address: c/o Identity Digital Limited address: 10500 NE 8th Street, Suite 750 address: Bellevue WA 98004 address: United States of America (the) contact: administrative name: Vice President, Engineering organisation: Identity Digital Limited address: 10500 NE 8th Street, Suite 750 address: Bellevue WA 98004 address: United States of America (the) phone: +1.425.298.2200 fax-no: +1.425.671.0020 e-mail: tldadmin@identity.digital contact: technical name: Senior Director, DNS Infrastructure Group organisation: Identity Digital Limited address: 10500 NE 8th Street, Suite 750 address: Bellevue WA 98004 address: United States of America (the) phone: +1.425.298.2200 fax-no: +1.425.671.0020 e-mail: tldtech@identity.digital nserver: V0N0.NIC.LIVE 2a01:8840:16:0:0:0:0:1 65.22.20.1 nserver: V0N1.NIC.LIVE 2a01:8840:17:0:0:0:0:1 65.22.21.1 nserver: V0N2.NIC.LIVE 2a01:8840:18:0:0:0:0:1 65.22.22.1 nserver: V0N3.NIC.LIVE 161.232.10.1 2a01:8840:f4:0:0:0:0:1 nserver: V2N0.NIC.LIVE 2a01:8840:19:0:0:0:0:1 65.22.23.1 nserver: V2N1.NIC.LIVE 161.232.11.1 2a01:8840:f5:0:0:0:0:1 ds-rdata: 36322 8 2 201df9a9af6766d9cdbc8355756728f2db40ba93f9724f93aeeb1bddd7d564a0 whois: whois.nic.live status: ACTIVE remarks: Registration information: https://www.identity.digital/ created: 2015-06-25 changed: 2023-09-12 source: IANA # whois.nic.live Domain Name: nic.live Registry Domain ID: 4ddd5c8266194b0488fab6a4d20df35d-DONUTS Registrar WHOIS Server: whois.identitydigital.services Registrar URL: https://identity.digital Updated Date: 2024-06-11T22:04:34Z Creation Date: 2015-04-27T22:04:24Z Registry Expiry Date: 2025-04-27T22:04:24Z Registrar: Registry Operator acts as Registrar (9999) Registrar IANA ID: 9999 Registrar Abuse Contact Email: abuse@identity.digital Registrar Abuse Contact Phone: +1.6664447777 Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Registry Registrant ID: REDACTED FOR PRIVACY Registrant Name: REDACTED FOR PRIVACY Registrant Organization: United TLD Holdco Ltd. Registrant Street: REDACTED FOR PRIVACY Registrant City: REDACTED FOR PRIVACY Registrant State/Province: Dublin 2 Registrant Postal Code: REDACTED FOR PRIVACY Registrant Country: IE Registrant Phone: REDACTED FOR PRIVACY Registrant Phone Ext: REDACTED FOR PRIVACY Registrant Fax: REDACTED FOR PRIVACY Registrant Fax Ext: REDACTED FOR PRIVACY Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Registry Admin ID: REDACTED FOR PRIVACY Admin Name: REDACTED FOR PRIVACY Admin Organization: REDACTED FOR PRIVACY Admin Street: REDACTED FOR PRIVACY Admin City: REDACTED FOR PRIVACY Admin State/Province: REDACTED FOR PRIVACY Admin Postal Code: REDACTED FOR PRIVACY Admin Country: REDACTED FOR PRIVACY Admin Phone: REDACTED FOR PRIVACY Admin Phone Ext: REDACTED FOR PRIVACY Admin Fax: REDACTED FOR PRIVACY Admin Fax Ext: REDACTED FOR PRIVACY Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Registry Tech ID: REDACTED FOR PRIVACY Tech Name: REDACTED FOR PRIVACY Tech Organization: REDACTED FOR PRIVACY Tech Street: REDACTED FOR PRIVACY Tech City: REDACTED FOR PRIVACY Tech State/Province: REDACTED FOR PRIVACY Tech Postal Code: REDACTED FOR PRIVACY Tech Country: REDACTED FOR PRIVACY Tech Phone: REDACTED FOR PRIVACY Tech Phone Ext: REDACTED FOR PRIVACY Tech Fax: REDACTED FOR PRIVACY Tech Fax Ext: REDACTED FOR PRIVACY Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Name Server: v0n0.nic.live Name Server: v0n1.nic.live Name Server: v0n2.nic.live Name Server: v0n3.nic.live Name Server: v2n0.nic.live Name Server: v2n1.nic.live DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2024-07-09T23:49:59Z <<< # whois.identitydigital.services Domain Name: nic.live Registry Domain ID: 4ddd5c8266194b0488fab6a4d20df35d-DONUTS Registrar WHOIS Server: whois.identitydigital.services Registrar URL: https://identity.digital Updated Date: 2024-06-11T22:04:34Z Creation Date: 2015-04-27T22:04:24Z Registry Expiry Date: 2025-04-27T22:04:24Z Registrar: Registry Operator acts as Registrar (9999) Registrar IANA ID: 9999 Registrar Abuse Contact Email: abuse@identity.digital Registrar Abuse Contact Phone: +1.6664447777 Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Registry Registrant ID: REDACTED FOR PRIVACY Registrant Name: REDACTED FOR PRIVACY Registrant Organization: United TLD Holdco Ltd. Registrant Street: REDACTED FOR PRIVACY Registrant City: REDACTED FOR PRIVACY Registrant State/Province: Dublin 2 Registrant Postal Code: REDACTED FOR PRIVACY Registrant Country: IE Registrant Phone: REDACTED FOR PRIVACY Registrant Phone Ext: REDACTED FOR PRIVACY Registrant Fax: REDACTED FOR PRIVACY Registrant Fax Ext: REDACTED FOR PRIVACY Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Registry Admin ID: REDACTED FOR PRIVACY Admin Name: REDACTED FOR PRIVACY Admin Organization: REDACTED FOR PRIVACY Admin Street: REDACTED FOR PRIVACY Admin City: REDACTED FOR PRIVACY Admin State/Province: REDACTED FOR PRIVACY Admin Postal Code: REDACTED FOR PRIVACY Admin Country: REDACTED FOR PRIVACY Admin Phone: REDACTED FOR PRIVACY Admin Phone Ext: REDACTED FOR PRIVACY Admin Fax: REDACTED FOR PRIVACY Admin Fax Ext: REDACTED FOR PRIVACY Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Registry Tech ID: REDACTED FOR PRIVACY Tech Name: REDACTED FOR PRIVACY Tech Organization: REDACTED FOR PRIVACY Tech Street: REDACTED FOR PRIVACY Tech City: REDACTED FOR PRIVACY Tech State/Province: REDACTED FOR PRIVACY Tech Postal Code: REDACTED FOR PRIVACY Tech Country: REDACTED FOR PRIVACY Tech Phone: REDACTED FOR PRIVACY Tech Phone Ext: REDACTED FOR PRIVACY Tech Fax: REDACTED FOR PRIVACY Tech Fax Ext: REDACTED FOR PRIVACY Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Name Server: v0n0.nic.live Name Server: v0n1.nic.live Name Server: v0n2.nic.live Name Server: v0n3.nic.live Name Server: v2n0.nic.live Name Server: v2n1.nic.live DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2024-07-09T23:49:59Z <<< ================================================ FILE: test/samples/whois/nyan.cat ================================================ Domain Name: nyan.cat Registry Domain ID: 826532-D Registrar WHOIS Server: whois.gandi.net Registrar URL: https://www.gandi.net/ Updated Date: 2017-07-07T17:24:23.746Z Creation Date: 2011-04-13T19:52:17.635Z Registry Expiry Date: 2018-04-13T19:52:17.635Z Registrar: GANDI SAS Registrar IANA ID: 81 Registrar Abuse Contact Email: direction@gandi.net Registrar Abuse Contact Phone: +1.1111111 Domain Status: ok https://icann.org/epp#ok Registry Registrant ID: Registrant Name: Registrant Organization: Registrant Street: Registrant City: Registrant State/Province: Registrant Postal Code: Registrant Country: Registrant Phone: Registrant Phone Ext: Registrant Fax: Registrant Fax Ext: Registrant Email: Registry Admin ID: Admin Name: Admin Organization: Admin Street: Admin City: Admin State/Province: Admin Postal Code: Admin Country: Admin Phone: Admin Phone Ext: Admin Fax: Admin Fax Ext: Admin Email: Registry Tech ID: Tech Name: Tech Organization: Tech Street: Tech City: Tech State/Province: Tech Postal Code: Tech Country: Tech Phone: Tech Phone Ext: Tech Fax: Tech Fax Ext: Tech Email: Registry Billing ID: Billing Name: Billing Organization: Billing Street: Billing City: Billing State/Province: Billing Postal Code: Billing Country: Billing Phone: Billing Phone Ext: Billing Fax: Billing Fax Ext: Billing Email: Name Server: ns1.dreamhost.com Name Server: ns2.dreamhost.com Name Server: ns3.dreamhost.com DNSSEC: unsigned IDN Tag: URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of Whois database: 2017-12-11T22:57:02.88Z <<< For more information on Whois status codes, please visit https://icann.org/epp This domain has chosen privacy settings according to the European data protection framework provisions. Should you need to contact the registrant, please see http://www.domini.cat/contact-registrant For law enforcement and trademark protection purposes, see http://www.domini.cat/whois-access In case of technical problems, please see http://www.domini.cat/report-problem Terms and Conditions of Use The data in this record is provided by puntCAT for informational purposes only. puntCAT does not guarantee its accuracy and cannot, under any circumstances, be held liable in case the stored information would prove to be wrong, incomplete or not accurate in any sense. All the domain data that is visible in the Whois service is protected by law. It is not permitted to use it for any purpose other than technical or administrative requirements associated with the operation of the Internet. It is explicitly forbidden to extract, copy and/or use or re-utilise in any form and by any means (electronically or not) the whole or a quantitatively or qualitatively substantial part of the contents of the Whois database without prior and explicit written permission by puntCAT It is prohibited, in particular, to use it for transmission of unsolicited and/or commercial and/or advertising by phone, fax, e-mail or for any similar purposes. By maintaining the connection you assure that you have a legitimate interest in the data and that you will only use it for the stated purposes. You are aware that puntCAT maintains the right to initiate legal proceedings against you in the event of any breach of this assurance and to bar you from using its Whois service. End of Whois record. ================================================ FILE: test/samples/whois/reddit.com ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: REDDIT.COM Registrar: DSTR ACQUISITION PA I, LLC DBA DOMAINBANK.COM Whois Server: rs.domainbank.net Referral URL: http://www.domainbank.net Name Server: ASIA1.AKAM.NET Name Server: ASIA9.AKAM.NET Name Server: AUS2.AKAM.NET Name Server: NS1-1.AKAM.NET Name Server: NS1-195.AKAM.NET Name Server: USE4.AKAM.NET Name Server: USW3.AKAM.NET Name Server: USW5.AKAM.NET Status: clientDeleteProhibited Status: clientTransferProhibited Status: clientUpdateProhibited Updated Date: 04-jun-2008 Creation Date: 29-apr-2005 Expiration Date: 29-apr-2009 >>> Last update of whois database: Fri, 27 Jun 2008 01:39:54 UTC <<< 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. The information in this whois database is provided for the sole purpose of assisting you in obtaining information about domain name registration records. This information is available "as is," and we do not guarantee its accuracy. By submitting a whois query, you agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to: (1) enable high volume, automated, electronic processes that stress or load this whois database system providing you this information; or (2) allow,enable, or otherwise support the transmission of mass, unsolicited, commercial advertising or solicitations via facsimile, electronic mail, or by telephone to entitites other than your own existing customers. The compilation, repackaging, dissemination or other use of this data is expressly prohibited without prior written consent from this company. We reserve the right to modify these terms at any time. By submitting an inquiry, you agree to these terms of usage and limitations of warranty. Please limit your queries to 10 per minute and one connection. Domain Services Provided By: Domain Bank, support@domainbank.com http:///www.domainbank.com Registrant: CONDENET INC Four Times Square New York, NY 10036 US Registrar: DOMAINBANK Domain Name: REDDIT.COM Created on: 29-APR-05 Expires on: 29-APR-09 Last Updated on: 04-JUN-08 Administrative Contact: , domain_admin@advancemags.com Advance Magazine Group 4 Times Square 23rd Floor New York, New York 10036 US 2122862860 Technical Contact: , domains@advancemags.com Advance Magazine Group 1201 N. Market St Wilmington, DE 19801 US 3028304630 Domain servers in listed order: ASIA1.AKAM.NET ASIA9.AKAM.NET AUS2.AKAM.NET NS1-1.AKAM.NET NS1-195.AKAM.NET USE4.AKAM.NET USW3.AKAM.NET USW5.AKAM.NET End of Whois Information ================================================ FILE: test/samples/whois/sapo.pt ================================================ Domain: sapo.pt Domain Status: Registered Creation Date: 30/10/2002 00:00:00 Expiration Date: 02/11/2019 23:59:00 Owner Name: MEO - SERVI?OS DE COMUNICA??ES E MULTIM?DIA S.A. Owner Address: A/C Dire??o de Tecnologias de Informa??o Owner Locality: Av. Fontes Pereira de Melo, 40 Owner ZipCode: 1069-300 Owner Locality ZipCode: Av. Fontes Pereira de Melo, 40 Owner Email: gestao.dominios@telecom.pt Admin Name: MEO - SERVI?OS DE COMUNICA??ES E MULTIM?DIA S.A. Admin Address: A/C Dire??o de Tecnologias de Informa??o Admin Locality: Av. Fontes Pereira de Melo, 40 Admin ZipCode: 1069-300 Admin Locality ZipCode: Av. Fontes Pereira de Melo, 40 Admin Email: gestao.dominios@telecom.pt Name Server: ns2.sapo.pt | IPv4: 212.55.154.194 and IPv6: Name Server: dns01.sapo.pt | IPv4: 213.13.28.116 and IPv6: 2001:8a0:2106:4:213:13:28:116 Name Server: dns02.sapo.pt | IPv4: 213.13.30.116 and IPv6: 2001:8a0:2206:4:213:13:30:116 Name Server: ns.sapo.pt | IPv4: 212.55.154.202 and IPv6: ================================================ FILE: test/samples/whois/sbc.org.hk ================================================ ------------------------------------------------------------------------------- Whois server by HKIRC ------------------------------------------------------------------------------- .hk top level Domain names can be registered via HKIRC-Accredited Registrars. Go to https://www.hkirc.hk/content.jsp?id=280 for details. ------------------------------------------------------------------------------- Domain Name: SBC.ORG.HK Domain Status: Active DNSSEC: unsigned Contract Version: HKDNR latest version Active variants Inactive variants Registrar Name: Hong Kong Domain Name Registration Company Limited Registrar Contact Information: Email: enquiry@hkdnr.hk Hotline: +852 2319 1313 Reseller: Registrant Contact Information: Company English Name (It should be the same as the registered/corporation name on your Business Register Certificate or relevant documents): SOCIETY OF BOYS' CENTRES Company Chinese name: 香港扶幼會 Address: 47 CORNWALL STREET, SHAMSHUIPO, KOWLOON Country: Hong Kong (HK) Email: admin@sbc.org.hk Domain Name Commencement Date: 14-07-1998 Expiry Date: 07-03-2020 Re-registration Status: Complete Administrative Contact Information: Given name: BOYS' CENTRES Family name: SOCIETY OF Company name: SOCIETY OF BOYS' CENTRES Address: 47 CORNWALL STREET, SHAMSHUIPO, KOWLOON Country: Hong Kong (HK) Phone: +852-27796442 Fax: +852-27793622 Email: admin@sbc.org.hk Account Name: HK4375390T Technical Contact Information: Given name: BOYS' CENTRES Family name: SOCIETY OF Company name: SOCIETY OF BOYS' CENTRES Address: 47 CORNWALL STREET, SHAMSHUIPO, KOWLOON Country: Hong Kong (HK) Phone: +852-27796442 Fax: +852-27793622 Email: admin@sbc.org.hk Name Servers Information: NS19.ODYSSEYHOST.COM NS20.ODYSSEYHOST.COM Status Information: Domain Prohibit Status: ------------------------------------------------------------------------------- The Registry contains ONLY .com.hk, .net.hk, .edu.hk, .org.hk, .gov.hk, idv.hk. and .hk $domains. ------------------------------------------------------------------------------- WHOIS Terms of Use By using this WHOIS search enquiry service you agree to these terms of use. The data in HKDNR's WHOIS search engine is for information purposes only and HKDNR does not guarantee the accuracy of the data. The data is provided to assist people to obtain information about the registration record of domain names registered by HKDNR. You agree to use the data for lawful purposes only. You are not authorised to use high-volume, electronic or automated processes to access, query or harvest data from this WHOIS search enquiry service. You agree that you will not and will not allow anyone else to: a. use the data for mass unsolicited commercial advertising of any sort via any medium including telephone, email or fax; or b. enable high volume, automated or electronic processes that apply to HKDNR or its computer systems including the WHOIS search enquiry service; or c. without the prior written consent of HKDNR compile, repackage, disseminate, disclose to any third party or use the data for a purpose other than obtaining information about a domain name registration record; or d. use such data to derive an economic benefit for yourself. HKDNR in its sole discretion may terminate your access to the WHOIS search enquiry service (including, without limitation, blocking your IP address) at any time including, without limitation, for excessive use of the WHOIS search enquiry service. HKDNR may modify these terms of use at any time by publishing the modified terms of use on its website. ================================================ FILE: test/samples/whois/seal.jobs ================================================ Domain Name: SEAL.JOBS Registry Domain ID: 128797919_DOMAIN_JOBS-VRSN Registrar WHOIS Server: whois.godaddy.com Registrar URL: http://www.godaddy.com Updated Date: 2018-03-22T13:44:07Z Creation Date: 2017-02-25T06:26:32Z Registry Expiry Date: 2022-02-25T06:26:32Z Registrar: GoDaddy.com, LLC Registrar IANA ID: 146 Registrar Abuse Contact Email: email@godaddy.com Registrar Abuse Contact Phone: 480-624-2505 Domain Status: ok https://icann.org/epp#ok Registry Registrant ID: REDACTED FOR PRIVACY Registrant Name: REDACTED FOR PRIVACY Registrant Organization: Seal Jobs NV Registrant Street: REDACTED FOR PRIVACY Registrant City: REDACTED FOR PRIVACY Registrant State/Province: Oost-Vlaanderen Registrant Postal Code: REDACTED FOR PRIVACY Registrant Country: BE Registrant Phone: REDACTED FOR PRIVACY Registrant Phone Ext: REDACTED FOR PRIVACY Registrant Fax: REDACTED FOR PRIVACY Registrant Fax Ext: REDACTED FOR PRIVACY Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain. Registry Admin ID: REDACTED FOR PRIVACY Admin Name: REDACTED FOR PRIVACY Admin Organization: REDACTED FOR PRIVACY Admin Street: REDACTED FOR PRIVACY Admin City: REDACTED FOR PRIVACY Admin State/Province: REDACTED FOR PRIVACY Admin Postal Code: REDACTED FOR PRIVACY Admin Country: REDACTED FOR PRIVACY Admin Phone: REDACTED FOR PRIVACY Admin Phone Ext: REDACTED FOR PRIVACY Admin Fax: REDACTED FOR PRIVACY Admin Fax Ext: REDACTED FOR PRIVACY Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain. Registry Tech ID: REDACTED FOR PRIVACY Tech Name: REDACTED FOR PRIVACY Tech Organization: REDACTED FOR PRIVACY Tech Street: REDACTED FOR PRIVACY Tech City: REDACTED FOR PRIVACY Tech State/Province: REDACTED FOR PRIVACY Tech Postal Code: REDACTED FOR PRIVACY Tech Country: REDACTED FOR PRIVACY Tech Phone: REDACTED FOR PRIVACY Tech Phone Ext: REDACTED FOR PRIVACY Tech Fax: REDACTED FOR PRIVACY Tech Fax Ext: REDACTED FOR PRIVACY Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain. Name Server: PDNS13.DOMAINCONTROL.COM Name Server: PDNS14.DOMAINCONTROL.COM DNSSEC: unsigned Registry Billing ID: REDACTED FOR PRIVACY Billing Name: REDACTED FOR PRIVACY Billing Organization: REDACTED FOR PRIVACY Billing Street: REDACTED FOR PRIVACY Billing City: REDACTED FOR PRIVACY Billing State/Province: REDACTED FOR PRIVACY Billing Postal Code: REDACTED FOR PRIVACY Billing Country: REDACTED FOR PRIVACY Billing Phone: REDACTED FOR PRIVACY Billing Phone Ext: REDACTED FOR PRIVACY Billing Fax: REDACTED FOR PRIVACY Billing Fax Ext: REDACTED FOR PRIVACY Billing Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain. URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of WHOIS database: 2019-04-17T11:27:11Z <<< For more information on Whois status codes, please visit https://icann.org/epp 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's ("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. ================================================ FILE: test/samples/whois/shazow.net ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: SHAZOW.NET Registrar: NEW DREAM NETWORK, LLC Whois Server: whois.dreamhost.com Referral URL: http://www.dreamhost.com Name Server: NS1.DREAMHOST.COM Name Server: NS2.DREAMHOST.COM Name Server: NS3.DREAMHOST.COM Status: ok Updated Date: 08-aug-2007 Creation Date: 13-sep-2003 Expiration Date: 13-sep-2009 >>> Last update of whois database: Thu, 26 Jun 2008 21:39:08 EDT <<< 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. Legal Stuff: The information in DreamHost's whois database is to be used for informational purposes only, and to obtain information on a domain name registration. DreamHost does not guarantee its accuracy. You are not authorized to query or access DreamHost's whois database using high-volume, automated means without written permission from DreamHost. You are not authorized to query or access DreamHost's whois database in order to facilitate illegal activities, or to facilitate the use of unsolicited bulk email, telephone, or facsimile communications. You are not authorized to collect, repackage, or redistribute the information in DreamHost's whois database. DreamHost may, at its sole discretion, restrict your access to the whois database at any time, with or without notice. DreamHost may modify these Terms of Service at any time, with or without notice. +++++++++++++++++++++++++++++++++++++++++++ Domain Name: shazow.net Registrant Contact: shazow.net Private Registrant shazow.net@proxy.dreamhost.com DreamHost Web Hosting 417 Associated Rd #324 Brea, CA 92821 US +1.2139471032 Administrative Contact: shazow.net Private Registrant shazow.net@proxy.dreamhost.com DreamHost Web Hosting 417 Associated Rd #324 Brea, CA 92821 US +1.2139471032 Technical Contact: shazow.net Private Registrant shazow.net@proxy.dreamhost.com DreamHost Web Hosting 417 Associated Rd #324 Brea, CA 92821 US +1.2139471032 Billing Contact: shazow.net Private Registrant shazow.net@proxy.dreamhost.com DreamHost Web Hosting 417 Associated Rd #324 Brea, CA 92821 US +1.2139471032 Record created on 2003-09-12 21:43:11. Record expires on 2009-09-12 21:43:11. Domain servers in listed order: ns1.dreamhost.com ns2.dreamhost.com ns3.dreamhost.com DreamHost whois server terms of service: http://whois.dreamhost.com/terms.html ================================================ FILE: test/samples/whois/slashdot.org ================================================ NOTICE: Access to .ORG WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the Public Interest Registry registry database. The data in this record is provided by Public Interest Registry for informational purposes only, and Public Interest Registry does not guarantee its accuracy. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to: (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator or any ICANN-Accredited Registrar, except as reasonably necessary to register domain names or modify existing registrations. All rights reserved. Public Interest Registry reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. Domain ID:D2289308-LROR Domain Name:SLASHDOT.ORG Created On:05-Oct-1997 04:00:00 UTC Last Updated On:23-Jun-2008 20:00:11 UTC Expiration Date:04-Oct-2008 04:00:00 UTC Sponsoring Registrar:Tucows Inc. (R11-LROR) Status:OK Registrant ID:tuIIldggGKu3HogX Registrant Name:DNS Administration Registrant Organization:SourceForge, Inc. Registrant Street1:650 Castro St. Registrant Street2:Suite 450 Registrant Street3: Registrant City:Mountain View Registrant State/Province:CA Registrant Postal Code:94041 Registrant Country:US Registrant Phone:+1.6506942100 Registrant Phone Ext.: Registrant FAX: Registrant FAX Ext.: Registrant Email:dns-admin@corp.sourceforge.com Admin ID:tupyrGGXKEFJLdE5 Admin Name:DNS Administration Admin Organization:SourceForge, Inc. Admin Street1:650 Castro St. Admin Street2:Suite 450 Admin Street3: Admin City:Mountain View Admin State/Province:CA Admin Postal Code:94041 Admin Country:US Admin Phone:+1.6506942100 Admin Phone Ext.: Admin FAX: Admin FAX Ext.: Admin Email:dns-admin@corp.sourceforge.com Tech ID:tuLQk02WUyJi47SS Tech Name:DNS Technical Tech Organization:SourceForge, Inc. Tech Street1:650 Castro St. Tech Street2:Suite 450 Tech Street3: Tech City:Mountain View Tech State/Province:CA Tech Postal Code:94041 Tech Country:US Tech Phone:+1.6506942100 Tech Phone Ext.: Tech FAX: Tech FAX Ext.: Tech Email:dns-tech@corp.sourceforge.com Name Server:NS-1.CH3.SOURCEFORGE.COM Name Server:NS-2.CH3.SOURCEFORGE.COM Name Server:NS-3.CORP.SOURCEFORGE.COM Name Server: Name Server: Name Server: Name Server: Name Server: Name Server: Name Server: Name Server: Name Server: Name Server: ================================================ FILE: test/samples/whois/squatter.net ================================================ Whois Server Version 2.0 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: SQUATTER.NET Registrar: DOMAINDISCOVER Whois Server: whois.domaindiscover.com Referral URL: http://www.domaindiscover.com Name Server: NS1.SBRACK.COM Name Server: NS2.SBRACK.COM Status: clientTransferProhibited Updated Date: 07-nov-2007 Creation Date: 06-nov-1999 Expiration Date: 06-nov-2008 >>> Last update of whois database: Thu, 26 Jun 2008 21:40:25 EDT <<< 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. This WHOIS database is provided for information purposes only. We do not guarantee the accuracy of this data. The following uses of this system are expressly prohibited: (1) use of this system for unlawful purposes; (2) use of this system to collect information used in the mass transmission of unsolicited commercial messages in any medium; (3) use of high volume, automated, electronic processes against this database. By submitting this query, you agree to abide by this policy. Registrant: CustomPC 4047 N Bayberry St Wichita, KS 67226-2418 US Domain Name: SQUATTER.NET Administrative Contact: CustomPC Derryl Brack 4047 N Bayberry St Wichita, KS 67226-2418 US 3166402868 dbrack@cpcsales.com Technical Contact, Zone Contact: CustomPC Brack, Derryl 4047 N Bayberry St Wichita, KS 67226-2418 US 316-683-5010 316-683-5010 [fax] brack@cpcsales.com Domain created on 06-Nov-1999 Domain expires on 06-Nov-2008 Last updated on 05-Nov-2007 Domain servers in listed order: NS1.SBRACK.COM NS2.SBRACK.COM Domain registration and hosting powered by DomainDiscover As low as $9/year, including FREE: responsive toll-free support, URL/frame/email forwarding, easy management system, and full featured DNS. ================================================ FILE: test/samples/whois/titech.ac.jp ================================================ [ JPRS database provides information on network administration. Its use is ] [ restricted to network administration purposes. For further information, ] [ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ] [ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ] Domain Information: a. [Domain Name] TITECH.AC.JP g. [Organization] Institute of Science Tokyo l. [Organization Type] University m. [Administrative Contact] YK87359JP n. [Technical Contact] YS79730JP p. [Name Server] ns.fujisawa.wide.ad.jp p. [Name Server] titechns2-o.noc.titech.ac.jp p. [Name Server] titechns2-s.noc.titech.ac.jp s. [Signing Key] [State] Connected (2026/03/31) [Registered Date] [Connected Date] 2025/05/26 [Last Update] 2025/05/29 10:45:59 (JST) ================================================ FILE: test/samples/whois/urlowl.com ================================================ Domain Name: URLOWL.COM Registry Domain ID: 1781848049_DOMAIN_COM-VRSN Registrar WHOIS Server: whois.dynadot.com Registrar URL: http://www.dynadot.com Updated Date: 2017-03-31T07:36:34Z Creation Date: 2013-02-21T19:24:57Z Registry Expiry Date: 2018-02-21T19:24:57Z Registrar: DYNADOT, LLC Registrar IANA ID: 472 Registrar Abuse Contact Email: abuse@dynadot.com Registrar Abuse Contact Phone: +16502620100 Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Name Server: NS1.SEDOPARKING.COM Name Server: NS2.SEDOPARKING.COM DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of whois database: 2017-12-11T23:35:30Z <<< For more information on Whois status codes, please visit https://icann.org/epp 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. ================================================ FILE: test/samples/whois/web.de ================================================ % Copyright (c) 2010 by DENIC % Version: 2.0 % % Restricted rights. % % Terms and Conditions of Use % % The data in this record is provided by DENIC for informational purposes only. % DENIC does not guarantee its accuracy and cannot, under any circumstances, % be held liable in case the stored information would prove to be wrong, % incomplete or not accurate in any sense. % % All the domain data that is visible in the whois service is protected by law. % It is not permitted to use it for any purpose other than technical or % administrative requirements associated with the operation of the Internet. % It is explicitly forbidden to extract, copy and/or use or re-utilise in any % form and by any means (electronically or not) the whole or a quantitatively % or qualitatively substantial part of the contents of the whois database % without prior and explicit written permission by DENIC. % It is prohibited, in particular, to use it for transmission of unsolicited % and/or commercial and/or advertising by phone, fax, e-mail or for any similar % purposes. % % By maintaining the connection you assure that you have a legitimate interest % in the data and that you will only use it for the stated purposes. You are % aware that DENIC maintains the right to initiate legal proceedings against % you in the event of any breach of this assurance and to bar you from using % its whois service. % % The DENIC whois service on port 43 never discloses any information concerning % the domain holder/administrative contact. Information concerning the domain % holder/administrative contact can be obtained through use of our web-based % whois service available at the DENIC website: % http://www.denic.de/en/domains/whois-service/web-whois.html % Domain: web.de Nserver: ns-webde.ui-dns.biz Nserver: ns-webde.ui-dns.com Nserver: ns-webde.ui-dns.de Nserver: ns-webde.ui-dns.org Dnskey: 257 3 8 AwEAAcBs30zgmOeYcUYzJetRzRYGQXlnXpv2gO3KWf5BYRn9OqFtUBzFOqO16Ow2XPqR8SWqpAVpnToQICICZyf58SHaefGn94fTj+PlwJi4HhoCbim2U3G5sYtl5xoNfUCaDXDQFJp+HnZlaA9afHutOVFtqCmMHV+2ApSyOFFETQNmq4YoxLxiJoxSjvQAaaiJKVoA4wykjXALMyCmbXGH4aMVbW2m0Fuqe+nKU8myW14nCASBo0mDO6cBNsBwu7IiL4SxxnflDCSTkn/FnCKtzf7aVzzrRM4SqTe4NOm7wPmCZiAGoxOL15PZ7YQSt9BEXU6gMdGxCGVBdtgM13NfziM= Status: connect Changed: 2016-04-11T11:09:54+02:00 [Tech-C] Type: PERSON Name: Hostmaster of the day Address: Elgendorfer Str. 57 PostalCode: 56410 City: Montabaur CountryCode: DE Phone: +49-721-9600 Fax: +49-721-91374-215 Email: ui-hostmaster@1and1.com Changed: 2011-08-10T17:09:10+02:00 [Zone-C] Type: PERSON Name: Hostmaster of the day Address: Elgendorfer Str. 57 PostalCode: 56410 City: Montabaur CountryCode: DE Phone: +49-721-9600 Fax: +49-721-91374-215 Email: ui-hostmaster@1and1.com Changed: 2011-08-10T17:09:10+02:00 ================================================ FILE: test/samples/whois/willhaben.at ================================================ % Copyright (c)2017 by NIC.AT (1) % % Restricted rights. % % Except for agreed Internet operational purposes, no part of this % information may be reproduced, stored in a retrieval system, or % transmitted, in any form or by any means, electronic, mechanical, % recording, or otherwise, without prior permission of NIC.AT on behalf % of itself and/or the copyright holders. Any use of this material to % target advertising or similar activities is explicitly forbidden and % can be prosecuted. % % It is furthermore strictly forbidden to use the Whois-Database in such % a way that jeopardizes or could jeopardize the stability of the % technical systems of NIC.AT under any circumstances. In particular, % this includes any misuse of the Whois-Database and any use of the % Whois-Database which disturbs its operation. % % Should the user violate these points, NIC.AT reserves the right to % deactivate the Whois-Database entirely or partly for the user. % Moreover, the user shall be held liable for any and all damage % arising from a violation of these points. domain: willhaben.at registrant: WISG8002269-NICAT admin-c: SISG4765752-NICAT tech-c: SISG4765752-NICAT nserver: srvkkl-dns01.styria.com nserver: srvsgr-dns02.styria.com nserver: srvvie-dns03.styria.com changed: 20141204 14:57:44 source: AT-DOM personname: Mirjam Techt organization: willhaben internet service GmbH & Co KG street address: Landstrasser Hauptstrasse 97-101 postal code: 1030 city: Wien country: Austria phone: +4312055000 e-mail: domain@styria-it.com nic-hdl: WISG8002269-NICAT changed: 20140422 10:08:35 source: AT-DOM personname: Uwe Holzer organization: Styria IT Solutions GmbH & Co KG street address: Gadollaplatz 1 postal code: 8010 city: Graz country: Austria phone: +434635800304 fax-no: +434635800296 e-mail: domain@styria-it.com nic-hdl: SISG4765752-NICAT changed: 20151021 16:23:11 source: AT-DOM ================================================ FILE: test/samples/whois/www.gov.uk ================================================ Domain name: gov.uk Registrant: UK Cabinet Office Registrant type: UK Government Body Registrant's address: Government Digital Service The White Chapel Building 7th Floor 10 Whitechapel High Street London E1 8QS GB Registrar: No registrar listed. This domain is directly registered with Nominet. Relevant dates: Registered on: before Aug-1996 Registration status: No registration status listed. Name servers: ns0.ja.net. ns2.ja.net. ns3.ja.net. ns4.ja.net. auth50.ns.de.uu.net. auth00.ns.de.uu.net. ns1.surfnet.nl. WHOIS lookup made at 12:02:52 18-Apr-2019 -- This WHOIS information is provided for free by Nominet UK the central registry for .uk domain names. This information and the .uk WHOIS are: Copyright Nominet UK 1996 - 2019. You may not access the .uk WHOIS or use any data from it except as permitted by the terms of use available in full at https://www.nominet.uk/whoisterms, which includes restrictions on: (A) use of the data for advertising, or its repackaging, recompilation, redistribution or reuse (B) obscuring, removing or hiding any or all of this notice and (C) exceeding query rate or volume limits. The data is provided on an 'as-is' basis and may lag behind the register. Access may be withdrawn or restricted at any time. ================================================ FILE: test/samples/whois/yahoo.co.jp ================================================ [ JPRS database provides information on network administration. Its use is ] [ restricted to network administration purposes. For further information, ] [ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ] [ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ] Domain Information: a. [Domain Name] YAHOO.CO.JP g. [Organization] LY Corporation l. [Organization Type] Corporation m. [Administrative Contact] HT57990JP n. [Technical Contact] YY47022JP p. [Name Server] ns01.yahoo.co.jp p. [Name Server] ns02.yahoo.co.jp p. [Name Server] ns11.yahoo.co.jp p. [Name Server] ns12.yahoo.co.jp s. [Signing Key] [State] Connected (2025/09/30) [Lock Status] AgentChangeLocked [Registered Date] 2019/09/27 [Connected Date] 2019/09/27 [Last Update] 2024/10/01 01:00:44 (JST) ================================================ FILE: test/samples/whois/yahoo.co.nz ================================================ Domain Name: yahoo.co.nz Registrar URL: https://www.markmonitor.com/ Updated Date: 2025-04-07T09:13:29Z Creation Date: 1997-05-04T12:00:00Z Original Created: 1997-05-04T12:00:00Z Registrar: MarkMonitor. Inc Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Name Server: ns1.yahoo.com Name Server: ns3.yahoo.com Name Server: ns4.yahoo.com Name Server: ns5.yahoo.com DNSSEC: unsigned URL of the Domain Name Commission Limited Inaccuracy Complaint Form: https://dnc.org.nz/enquiry-form/ >>> Last update of WHOIS database: 2025-09-23T16:12:23Z <<< % Terms of Use % % By submitting a WHOIS query you are entering into an agreement with Domain % Name Commission Ltd on the following terms and conditions, and subject to % all relevant .nz Policies and procedures as found at https://dnc.org.nz/. % % It is prohibited to: % - Send high volume WHOIS queries with the effect of downloading part of or % all of the .nz Register or collecting register data or records; % - Access the .nz Register in bulk through the WHOIS service (ie. where a % user is able to access WHOIS data other than by sending individual queries % to the database); % - Use WHOIS data to allow, enable, or otherwise support mass unsolicited % commercial advertising, or mass solicitations to registrants or to % undertake market research via direct mail, electronic mail, SMS, telephone % or any other medium; % - Use WHOIS data in contravention of any applicable data and privacy laws, % including the Unsolicited Electronic Messages Act 2007; % - Store or compile WHOIS data to build up a secondary register of % information; % - Publish historical or non-current versions of WHOIS data; and % - Publish any WHOIS data in bulk. % % Copyright Domain Name Commission Limited (a company wholly-owned by Internet % New Zealand Incorporated) which may enforce its rights against any person or % entity that undertakes any prohibited activity without its written % permission. % % The WHOIS service is provided by Internet New Zealand Incorporated. % % Additional information may be available at https://www.dnc.org.nz ================================================ FILE: test/samples/whois/yandex.kz ================================================ Whois Server for the KZ top level domain name. This server is maintained by KazNIC Organization, a ccTLD manager for Kazakhstan Republic. Domain Name............: yandex.kz Organization Using Domain Name Name...................: Yandex.Kazakhstan LLP Organization Name......: Yandex.Kazakhstan LLP Street Address.........: Dostyk street 43 City...................: Almaty State..................: - Postal Code............: 050051 Country................: KZ Administrative Contact/Agent NIC Handle.............: HOSTERKZ-280570 Name...................: Domain manager Phone Number...........: +7.4957397000 Fax Number.............: +7.4957397000 Email Address..........: hostmaster@yandex.net Nameserver in listed order Primary server.........: ns1.yandex.net Primary ip address.....: 213.180.193.1 Secondary server.......: ns2.yandex.net Secondary ip address...: 213.180.199.34 Domain created: 2009-07-01 12:44:02 (GMT+0:00) Last modified : 2022-08-04 10:20:10 (GMT+0:00) Domain status : clientTransferProhibited - status prohibits domain transfer without documents (статус запрещает трансфер домена без предоставления документов) clientDeleteProhibited - status prevent domain deletion from the Register (статус предотвращает удаление домена из реестра) clientRenewProhibited - status prevent domain auto renewal without payment (статус предотвращает авто продление без оплаты) Registar created: KAZNIC Current Registar: HOSTER.KZ ================================================ FILE: test/samples/whois/yandex.ru ================================================ % By submitting a query to RIPN's Whois Service % you agree to abide by the following terms of use: % http://www.ripn.net/about/servpol.html#3.2 (in Russian) % http://www.ripn.net/about/en/servpol.html#3.2 (in English). domain: YANDEX.RU nserver: ns1.yandex.ru. 213.180.193.1, 2a02:6b8::1 nserver: ns2.yandex.ru. 93.158.134.1, 2a02:6b8:0:1::1 nserver: ns9.z5h64q92x9.net. state: REGISTERED, DELEGATED, VERIFIED org: YANDEX, LLC. registrar: RU-CENTER-RU admin-contact: https://www.nic.ru/whois created: 1997-09-23T09:45:07Z paid-till: 2018-09-30T21:00:00Z free-date: 2018-11-01 source: TCI Last updated on 2017-12-08T22:51:30Z ================================================ FILE: test/test_ipv6.py ================================================ import unittest from unittest.mock import patch import socket from whois.whois import NICClient class TestNICClientIPv6(unittest.TestCase): def setUp(self): self.ipv4_info = (socket.AF_INET, socket.SOCK_STREAM, 6, '', ('1.2.3.4', 43)) self.ipv6_info = (socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('2001:db8::1', 43, 0, 0)) self.mock_addr_info = [self.ipv4_info, self.ipv6_info] @patch('socket.getaddrinfo') @patch('socket.socket') def test_connect_prioritizes_ipv6(self, mock_socket, mock_getaddrinfo): mock_getaddrinfo.return_value = self.mock_addr_info client = NICClient(prefer_ipv6=True) try: client._connect("example.com", timeout=10) except Exception: pass first_call_args = mock_socket.call_args_list[0][0] # Make sure we used IPv6 when creating socket self.assertEqual(first_call_args[0], socket.AF_INET6) @patch('socket.getaddrinfo') @patch('socket.socket') def test_connect_keeps_default_order(self, mock_socket, mock_getaddrinfo): mock_getaddrinfo.return_value = self.mock_addr_info client = NICClient(prefer_ipv6=False) try: client._connect("example.com", timeout=10) except Exception: pass first_call_args = mock_socket.call_args_list[0][0] # Make sure we used IPv4 when creating socket, which is the first appearing in our mock. self.assertEqual(first_call_args[0], socket.AF_INET) ================================================ FILE: test/test_main.py ================================================ # coding=utf-8 import unittest from whois import extract_domain class TestExtractDomain(unittest.TestCase): def test_simple_ascii_domain(self): url = "google.com" domain = url self.assertEqual(domain, extract_domain(url)) def test_ascii_with_schema_path_and_query(self): url = "https://www.google.com/search?q=why+is+domain+whois+such+a+mess" domain = "google.com" self.assertEqual(domain, extract_domain(url)) def test_simple_unicode_domain(self): url = "http://нарояци.com/" domain = "нарояци.com" self.assertEqual(domain, extract_domain(url)) def test_unicode_domain_and_tld(self): url = "http://россия.рф/" domain = "россия.рф" self.assertEqual(domain, extract_domain(url)) def test_ipv6(self): """Verify that ipv6 addresses work""" url = "2607:f8b0:4006:802::200e" domain = "1e100.net" # double extract_domain() so we avoid possibly changing hostnames like lga34s12-in-x0e.1e100.net self.assertEqual(domain, extract_domain(extract_domain(url))) def test_ipv4(self): """Verify that ipv4 addresses work""" url = "172.217.3.110" domain = "1e100.net" # double extract_domain() so we avoid possibly changing hostnames like lga34s18-in-f14.1e100.net self.assertEqual(domain, extract_domain(extract_domain(url))) def test_second_level_domain(self): """Verify that TLDs which only have second-level domains parse correctly""" url = "google.co.za" domain = url self.assertEqual(domain, extract_domain(url)) ================================================ FILE: test/test_nicclient.py ================================================ # coding=utf-8 import unittest from whois.whois import NICClient class TestNICClient(unittest.TestCase): def setUp(self): self.client = NICClient() def test_choose_server(self): domain = "рнидс.срб" chosen = self.client.choose_server(domain) correct = "whois.rnids.rs" self.assertEqual(chosen, correct) ================================================ FILE: test/test_parser.py ================================================ # -*- coding: utf-8 -*- import datetime import json import os import unittest from glob import glob from dateutil.tz import tzoffset from whois.exceptions import WhoisUnknownDateFormatError from whois.parser import ( WhoisCa, WhoisEntry, cast_date, datetime_parse, ) utc = tzoffset('UTC', 0) class TestParser(unittest.TestCase): def test_com_expiration(self): data = """ Status: ok Updated Date: 2017-03-31T07:36:34Z Creation Date: 2013-02-21T19:24:57Z Registry Expiry Date: 2018-02-21T19:24:57Z >>> Last update of whois database: Sun, 31 Aug 2008 00:18:23 UTC <<< """ w = WhoisEntry.load("urlowl.com", data) expires = w.expiration_date.strftime("%Y-%m-%d") self.assertEqual(expires, "2018-02-21") def test_cast_date(self): dates = [ "14-apr-2008", "2008-04-14", "2008-04-14 18:55:20Z.0Z", ] for d in dates: r = cast_date(d).strftime("%Y-%m-%d") self.assertEqual(r, "2008-04-14") def test_unknown_date_format(self): with self.assertRaises(WhoisUnknownDateFormatError): cast_date("UNKNOWN") def test_com_allsamples(self): """ Iterate over all of the sample/whois/*.com files, read the data, parse it, and compare to the expected values in sample/expected/. Only keys defined in keys_to_test will be tested. To generate fresh expected value dumps, see NOTE below. """ keys_to_test = [ "domain_name", "expiration_date", "updated_date", "registrar", "registrar_url", "creation_date", "status", ] total = 0 whois_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "samples", "whois", "*" ) expect_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "samples", "expected" ) for path in glob(whois_path): # Parse whois data domain = os.path.basename(path) with open(path, encoding="utf-8") as whois_fp: data = whois_fp.read() w = WhoisEntry.load(domain, data) results = {key: w.get(key) for key in keys_to_test} # NOTE: Toggle condition below to write expected results from the # parse results This will overwrite the existing expected results. # Only do this if you've manually confirmed that the parser is # generating correct values at its current state. if False: def date2str4json(obj): if isinstance(obj, datetime.datetime): return str(obj) raise TypeError("{} is not JSON serializable".format(repr(obj))) outfile_name = os.path.join(expect_path, domain) with open(outfile_name, "w") as outfil: expected_results = json.dump(results, outfil, default=date2str4json) continue # Load expected result with open(os.path.join(expect_path, domain)) as infil: expected_results = json.load(infil) # Compare each key compare_keys = set.union(set(results), set(expected_results)) if keys_to_test is not None: compare_keys = compare_keys.intersection(set(keys_to_test)) for key in compare_keys: total += 1 self.assertIn(key, results) result = results.get(key) if isinstance(result, list): result = [str(element) for element in result] if isinstance(result, datetime.datetime): result = str(result) expected = expected_results.get(key) self.assertEqual(expected, result, '{}: {} != {} for {}'.format(key, expected, result, domain)) def test_ca_parse(self): data = """ Domain name: testdomain.ca Domain status: registered Creation date: 2000/11/20 Expiry date: 2020/03/08 Updated date: 2016/04/29 DNSSEC: Unsigned Registrar: Webnames.ca Inc. Registry Registrant ID: 70 Registrant Name: Test Industries Registrant Organization: Admin Name: Test Person1 Admin Street: Test Address Admin City: Test City, TestVille Admin Phone: +1.1235434123x123 Admin Fax: +1.123434123 Admin Email: testperson1@testcompany.ca Tech Name: Test Persion2 Tech Street: Other TestAddress TestTown OCAS Canada Tech Phone: +1.09876545123 Tech Fax: +1.12312993873 Tech Email: testpersion2@testcompany.ca Name server: a1-1.akam.net Name server: a2-2.akam.net Name server: a3-3.akam.net """ expected_results = { "admin_name": "Test Person1", "creation_date": datetime.datetime(2000, 11, 20, 0, 0, tzinfo=utc), "dnssec": "Unsigned", "domain_name": "testdomain.ca", "emails": ["testperson1@testcompany.ca", "testpersion2@testcompany.ca"], "expiration_date": datetime.datetime(2020, 3, 8, 0, 0, tzinfo=utc), "fax": ["+1.123434123", "+1.12312993873"], "name_servers": ["a1-1.akam.net", "a2-2.akam.net", "a3-3.akam.net"], "phone": ["+1.1235434123x123", "+1.09876545123"], "registrant_name": "Test Industries", "registrant_number": "70", "registrar": "Webnames.ca Inc.", "registrar_url": None, "status": "registered", "updated_date": datetime.datetime(2016, 4, 29, 0, 0, tzinfo=utc), "whois_server": None, } self._parse_and_compare( "testcompany.ca", data, expected_results, whois_entry=WhoisCa ) def test_ai_parse(self): data = """ Domain Name: google.ai Registry Domain ID: 6eddd132ab114b12bd2bd4cf9c492a04-DONUTS Registrar WHOIS Server: whois.markmonitor.com Registrar URL: http://www.markmonitor.com Updated Date: 2025-01-23T22:17:03Z Creation Date: 2017-12-16T05:37:20Z Registry Expiry Date: 2025-09-25T05:37:20Z Registrar: MarkMonitor Inc. Registrar IANA ID: 292 Registrar Abuse Contact Email: abusecomplaints@markmonitor.com Registrar Abuse Contact Phone: +1.2083895740 Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Registry Registrant ID: 93b24aca40c6451785c486627aa03267-DONUTS Registrant Name: Domain Administrator Registrant Organization: Google LLC Registrant Street: 1600 Amphitheatre Parkway Registrant City: Mountain View Registrant State/Province: CA Registrant Postal Code: 94043 Registrant Country: US Registrant Phone: +1.6502530000 Registrant Phone Ext: Registrant Fax: +1.6502530001 Registrant Fax Ext: Registrant Email: dns-admin@google.com Registry Admin ID: 93b24aca40c6451785c486627aa03267-DONUTS Admin Name: Domain Administrator Admin Organization: Google LLC Admin Street: 1600 Amphitheatre Parkway Admin City: Mountain View Admin State/Province: CA Admin Postal Code: 94043 Admin Country: US Admin Phone: +1.6502530000 Admin Phone Ext: Admin Fax: +1.6502530001 Admin Fax Ext: Admin Email: dns-admin@google.com Registry Tech ID: 93b24aca40c6451785c486627aa03267-DONUTS Tech Name: Domain Administrator Tech Organization: Google LLC Tech Street: 1600 Amphitheatre Parkway Tech City: Mountain View Tech State/Province: CA Tech Postal Code: 94043 Tech Country: US Tech Phone: +1.6502530000 Tech Phone Ext: Tech Fax: +1.6502530001 Tech Fax Ext: Tech Email: dns-admin@google.com Name Server: ns2.zdns.google Name Server: ns3.zdns.google Name Server: ns4.zdns.google Name Server: ns1.zdns.google DNSSEC: unsigned """ expected_results = { "admin_address": "1600 Amphitheatre Parkway", "admin_city": "Mountain View", "admin_country": "US", "admin_email": "dns-admin@google.com", "admin_name": "Domain Administrator", "admin_org": "Google LLC", "admin_phone": "+1.6502530000", "admin_postal_code": "94043", "admin_state": "CA", "billing_address": None, "billing_city": None, "billing_country": None, "billing_email": None, "billing_name": None, "billing_org": None, "billing_phone": None, "billing_postal_code": None, "billing_state": None, "creation_date": datetime.datetime(2017, 12, 16, 5, 37, 20, tzinfo=utc), "domain_id": "6eddd132ab114b12bd2bd4cf9c492a04-DONUTS", "domain_name": "google.ai", 'expiration_date': datetime.datetime(2025, 9, 25, 5, 37, 20, tzinfo=utc), "name_servers": [ "ns2.zdns.google", "ns3.zdns.google", "ns4.zdns.google", "ns1.zdns.google", ], "registrant_address": "1600 Amphitheatre Parkway", "registrant_city": "Mountain View", "registrant_country": "US", "registrant_email": "dns-admin@google.com", "registrant_name": "Domain Administrator", "registrant_org": "Google LLC", "registrant_phone": "+1.6502530000", "registrant_postal_code": "94043", "registrant_state": "CA", "registrar": "MarkMonitor Inc.", "registrar_email": "abusecomplaints@markmonitor.com", "registrar_phone": "+1.2083895740", "tech_address": "1600 Amphitheatre Parkway", "tech_city": "Mountain View", "tech_country": "US", "tech_email": "dns-admin@google.com", "tech_name": "Domain Administrator", "tech_org": "Google LLC", "tech_phone": "+1.6502530000", "tech_postal_code": "94043", "tech_state": "CA", "status": [ 'clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited', 'clientTransferProhibited https://icann.org/epp#clientTransferProhibited', 'clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited' ], "updated_date": datetime.datetime(2025, 1, 23, 22, 17, 3, tzinfo=utc) } self._parse_and_compare("google.ai", data, expected_results) def test_cn_parse(self): data = """ Domain Name: cnnic.com.cn ROID: 20021209s10011s00047242-cn Domain Status: serverDeleteProhibited Domain Status: serverUpdateProhibited Domain Status: serverTransferProhibited Registrant ID: s1255673574881 Registrant: 中国互联网络信息中心 Registrant Contact Email: servicei@cnnic.cn Sponsoring Registrar: 北京新网数码信息技术有限公司 Name Server: a.cnnic.cn Name Server: b.cnnic.cn Name Server: c.cnnic.cn Name Server: d.cnnic.cn Name Server: e.cnnic.cn Registration Time: 2000-09-14 00:00:00 Expiration Time: 2023-08-16 16:26:39 DNSSEC: unsigned """ expected_results = { "creation_date": datetime.datetime(2000, 9, 14, 0, 0, tzinfo=utc), "dnssec": "unsigned", "domain_name": "cnnic.com.cn", "emails": "servicei@cnnic.cn", "expiration_date": datetime.datetime(2023, 8, 16, 16, 26, 39, tzinfo=utc), "name": "中国互联网络信息中心", "name_servers": [ "a.cnnic.cn", "b.cnnic.cn", "c.cnnic.cn", "d.cnnic.cn", "e.cnnic.cn", ], "registrar": "北京新网数码信息技术有限公司", "status": [ "serverDeleteProhibited", "serverUpdateProhibited", "serverTransferProhibited", ], } self._parse_and_compare("cnnic.com.cn", data, expected_results) def test_ie_parse(self): data = """ refer: whois.weare.ie domain: IE organisation: University College Dublin organisation: Computing Services organisation: Computer Centre address: Belfield address: Dublin City, Dublin 4 address: Ireland contact: administrative name: Chief Executive organisation: IE Domain Registry Limited address: 2 Harbour Square address: Dún Laoghaire address: Co. Dublin address: Ireland phone: +353 1 236 5412 fax-no: +353 1 230 1273 e-mail: tld-admin@weare.ie contact: technical name: Technical Services Manager organisation: IE Domain Registry Limited address: 2 Harbour Square address: Dún Laoghaire address: Co. Dublin address: Ireland phone: +353 1 236 5421 fax-no: +353 1 230 1273 e-mail: tld-tech@weare.ie nserver: B.NS.IE 2a01:4b0:0:0:0:0:0:2 77.72.72.34 nserver: C.NS.IE 194.146.106.98 2001:67c:1010:25:0:0:0:53 nserver: D.NS.IE 2a01:3f0:0:309:0:0:0:53 77.72.229.245 nserver: G.NS.IE 192.111.39.100 2001:7c8:2:a:0:0:0:64 nserver: H.NS.IE 192.93.0.4 2001:660:3005:1:0:0:1:2 nserver: I.NS.IE 194.0.25.35 2001:678:20:0:0:0:0:35 ds-rdata: 64134 13 2 77B9519D16B62D0A70A7301945CBB3092A7978BFDE75A3BCFB3D4719396E436A whois: whois.weare.ie status: ACTIVE remarks: Registration information: http://www.weare.ie created: 1988-01-27 changed: 2021-03-11 source: IANA # whois.weare.ie Domain Name: rte.ie Registry Domain ID: 672279-IEDR Registrar WHOIS Server: whois.weare.ie Registrar URL: https://www.blacknight.com Updated Date: 2020-11-15T17:55:24Z Creation Date: 2000-02-11T00:00:00Z Registry Expiry Date: 2025-03-31T13:20:07Z Registrar: Blacknight Solutions Registrar IANA ID: not applicable Registrar Abuse Contact Email: abuse@blacknight.com Registrar Abuse Contact Phone: +353.599183072 Domain Status: ok https://icann.org/epp#ok Registry Registrant ID: 354955-IEDR Registrant Name: RTE Commercial Enterprises Limited Registry Admin ID: 202753-IEDR Registry Tech ID: 3159-IEDR Registry Billing ID: REDACTED FOR PRIVACY Name Server: ns1.rte.ie Name Server: ns2.rte.ie Name Server: ns3.rte.ie Name Server: ns4.rte.ie DNSSEC: signedDelegation """ expected_results = { "admin_id": "202753-IEDR", "creation_date": datetime.datetime(2000, 2, 11, 0, 0, tzinfo=utc), "domain_name": "rte.ie", "expiration_date": datetime.datetime(2025, 3, 31, 13, 20, 7, tzinfo=utc), "name_servers": ["ns1.rte.ie", "ns2.rte.ie", "ns3.rte.ie", "ns4.rte.ie"], "registrar": "Blacknight Solutions", "registrar_contact": "abuse@blacknight.com", "status": "ok https://icann.org/epp#ok", "tech_id": "3159-IEDR", } self._parse_and_compare("rte.ie", data, expected_results) def test_nl_expiration(self): data = """ domain_name: randomtest.nl Status: in quarantine Creation Date: 2008-09-24 Updated Date: 2020-10-27 Date out of quarantine: 2020-12-06T20:31:25 """ w = WhoisEntry.load("randomtest.nl", data) expires = w.expiration_date.strftime("%Y-%m-%d") self.assertEqual(expires, "2020-12-06") def test_dk_parse(self): data = """ # # Copyright (c) 2002 - 2019 by DK Hostmaster A/S # # Version: # # The data in the DK Whois database is provided by DK Hostmaster A/S # for information purposes only, and to assist persons in obtaining # information about or related to a domain name registration record. # We do not guarantee its accuracy. We will reserve the right to remove # access for entities abusing the data, without notice. # # Any use of this material to target advertising or similar activities # are explicitly forbidden and will be prosecuted. DK Hostmaster A/S # requests to be notified of any such activities or suspicions thereof. Domain: dk-hostmaster.dk DNS: dk-hostmaster.dk Registered: 1998-01-19 Expires: 2022-03-31 Registration period: 5 years VID: yes Dnssec: Signed delegation Status: Active Registrant Handle: DKHM1-DK Name: DK HOSTMASTER A/S Address: Ørestads Boulevard 108, 11. Postalcode: 2300 City: København S Country: DK Nameservers Hostname: auth01.ns.dk-hostmaster.dk Hostname: auth02.ns.dk-hostmaster.dk Hostname: p.nic.dk """ expected_results = { "creation_date": datetime.datetime(1998, 1, 19, 0, 0, tzinfo=utc), "dnssec": "Signed delegation", "domain_name": "dk-hostmaster.dk", "expiration_date": datetime.datetime(2022, 3, 31, 0, 0, tzinfo=utc), "name_servers": [ "auth01.ns.dk-hostmaster.dk", "auth02.ns.dk-hostmaster.dk", "p.nic.dk", ], "registrant_address": "Ørestads Boulevard 108, 11.", "registrant_city": "København S", "registrant_country": "DK", "registrant_handle": "DKHM1-DK", "registrant_name": "DK HOSTMASTER A/S", "registrant_postal_code": "2300", "registrar": None, "status": "Active", } self._parse_and_compare("dk-hostmaster.dk", data, expected_results) def _parse_and_compare( self, domain_name, data, expected_results, whois_entry=WhoisEntry ): actual_results = whois_entry.load(domain_name, data) # import pprint; pprint.pprint(actual_results) self.assertEqual(expected_results, actual_results) def test_sk_parse(self): data = """ # whois.sk-nic.sk Domain: pipoline.sk Registrant: H410977 Admin Contact: H410977 Tech Contact: H410977 Registrar: PIPO-0002 Created: 2012-07-23 Updated: 2020-07-02 Valid Until: 2021-07-13 Nameserver: ns1.cloudlikeaboss.com Nameserver: ns2.cloudlikeaboss.com EPP Status: ok Registrar: PIPO-0002 Name: Pipoline s.r.o. Organization: Pipoline s.r.o. Organization ID: 48273317 Phone: +421.949347169 Email: peter.gonda@pipoline.com Street: Ladožská 8 City: Košice Postal Code: 040 12 Country Code: SK Created: 2017-09-01 Updated: 2020-07-02 Contact: H410977 Name: Ing. Peter Gonda Organization: Pipoline s.r.o Organization ID: 48273317 Email: info@pipoline.com Street: Ladozska 8 City: Kosice Postal Code: 04012 Country Code: SK Registrar: PIPO-0002 Created: 2017-11-22 Updated: 2017-11-22""" expected_results = { "admin": "H410977", "admin_city": "Kosice", "admin_country_code": "SK", "admin_email": "info@pipoline.com", "admin_organization": "Pipoline s.r.o", "admin_postal_code": "04012", "admin_street": "Ladozska 8", "creation_date": datetime.datetime(2012, 7, 23, 0, 0, tzinfo=utc), "domain_name": "pipoline.sk", "expiration_date": datetime.datetime(2021, 7, 13, 0, 0, tzinfo=utc), "name_servers": ["ns1.cloudlikeaboss.com", "ns2.cloudlikeaboss.com"], "registrar": "Pipoline s.r.o.", "registrar_city": "Košice", "registrar_country_code": "SK", "registrar_created": "2012-07-23", "registrar_email": "peter.gonda@pipoline.com", "registrar_name": "Pipoline s.r.o.", "registrar_organization_id": "48273317", "registrar_phone": "+421.949347169", "registrar_postal_code": "040 12", "registrar_street": "Ladožská 8", "registrar_updated": "2020-07-02", "updated_date": datetime.datetime(2020, 7, 2, 0, 0, tzinfo=utc), } self._parse_and_compare("pipoline.sk", data, expected_results) def test_bw_parse(self): data = """ % IANA WHOIS server % for more information on IANA, visit http://www.iana.org % This query returned 1 object refer: whois.nic.net.bw domain: BW organisation: Botswana Communications Regulatory Authority (BOCRA) address: Plot 206/207 Independence Avenue address: Private Bag 00495 address: Gaborone address: Botswana contact: administrative name: Engineer - ccTLD organisation: BOCRA - Botswana Communications Regulatory Authority address: Plot 206/207 Independence Avenue address: Private Bag 00495 address: Gaborone address: Botswana phone: +2673685419 fax-no: +267 395 7976 e-mail: ramotsababa@bocra.org.bw contact: technical name: Engineer - ccTLD organisation: Botswana Communications Regulatory Authority (BOCRA) address: Plot 206/207 Independence Avenue address: Private Bag 00495 address: Gaborone address: Botswana phone: +267 368 5410 fax-no: +267 395 7976 e-mail: matlapeng@bocra.org.bw nserver: DNS1.NIC.NET.BW 168.167.98.226 2c0f:ff00:1:3:0:0:0:226 nserver: MASTER.BTC.NET.BW 168.167.168.37 2c0f:ff00:0:6:0:0:0:3 2c0f:ff00:0:6:0:0:0:5 nserver: NS-BW.AFRINIC.NET 196.216.168.72 2001:43f8:120:0:0:0:0:72 nserver: PCH.NIC.NET.BW 2001:500:14:6070:ad:0:0:1 204.61.216.70 whois: whois.nic.net.bw status: ACTIVE remarks: Registration information: http://nic.net.bw created: 1993-03-19 changed: 2022-07-27 source: IANA # whois.nic.net.bw Domain Name: google.co.bw Registry Domain ID: 3486-bwnic Registry WHOIS Server: whois.nic.net.bw Updated Date: 2022-11-29T09:33:04.665Z Creation Date: 2012-11-12T22:00:00.0Z Registry Expiry Date: 2023-12-31T05:00:00.0Z Registrar Registration Expiration Date: 2023-12-31T05:00:00.0Z Registrar: MarkMonitor Inc Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Registry RegistrantID: GcIIG-Z2bWn RegistrantName: Google LLC RegistrantOrganization: Google LLC RegistrantStreet: 1600 Amphitheatre Parkway RegistrantCity: Mountain View RegistrantState/Province: CA RegistrantPostal Code: 94043 RegistrantCountry: US RegistrantPhone: +1.6502530000 RegistrantFax: +1.6502530001 RegistrantEmail: dns-adminATgoogle.com Registry AdminID: fDojv-TYe2q AdminName: Google LLC AdminOrganization: Google LLC AdminStreet: 1600 Amphitheatre Parkway AdminCity: Mountain View AdminState/Province: CA AdminPostal Code: 94043 AdminCountry: US AdminPhone: +1.6502530000 AdminFax: +1.6502530001 AdminEmail: dns-adminATgoogle.com Registry TechID: 2sYG1-BSVgz TechName: Google LLC TechOrganization: Google LLC TechStreet: 1600 Amphitheatre Parkway TechCity: Mountain View TechState/Province: CA TechPostal Code: 94043 TechCountry: US TechPhone: +1.6502530000 TechFax: +1.6502530001 TechEmail: dns-adminATgoogle.com Registry BillingID: C2KQL-UUtMh BillingName: MarkMonitor Inc. BillingOrganization: CCOPS Billing BillingStreet: 3540 East Longwing Lane Suite 300 BillingCity: Meridian BillingState/Province: ID BillingPostal Code: 83646 BillingCountry: US BillingPhone: +1.2083895740 BillingFax: +1.2083895771 BillingEmail: ccopsbillingATmarkmonitor.com Name Server: ns1.google.com Name Server: ns2.google.com Name Server: ns3.google.com Name Server: ns4.google.com DNSSEC: unsigned """ expected_results = { "admin_address": "1600 Amphitheatre Parkway", "admin_city": "Mountain View", "admin_country": "US", "admin_email": "dns-adminATgoogle.com", "admin_name": "Google LLC", "admin_org": "Google LLC", "admin_phone": "+1.6502530000", "billing_address": "3540 East Longwing Lane Suite 300", "billing_city": "Meridian", "billing_country": "US", "billing_email": "ccopsbillingATmarkmonitor.com", "billing_name": "MarkMonitor Inc.", "billing_org": "CCOPS Billing", "billing_phone": "+1.2083895740", "creation_date": datetime.datetime(2012, 11, 12, 22, 0, tzinfo=utc), "dnssec": "unsigned", "domain_id": "3486-bwnic", "domain_name": "google.co.bw", "name_servers": [ "ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com", ], "registrant_address": "1600 Amphitheatre Parkway", "registrant_city": "Mountain View", "registrant_country": "US", "registrant_email": "dns-adminATgoogle.com", "registrant_name": "Google LLC", "registrant_org": "Google LLC", "registrant_phone": "+1.6502530000", "registrar": "MarkMonitor Inc", "tech_address": "1600 Amphitheatre Parkway", "tech_city": "Mountain View", "tech_country": "US", "tech_email": "dns-adminATgoogle.com", "tech_name": "Google LLC", "tech_org": "Google LLC", "tech_phone": "+1.6502530000", } self._parse_and_compare("google.co.bw", data, expected_results) def test_cm_parse(self): data = """ Domain Name: icp.cm Registry Domain ID: 1104110-RegCM Updated Date: 2025-05-27T04:46:44.214Z Creation Date: 2024-08-24T13:17:43.633Z Registry Expiry Date: 2026-08-24T13:17:44.316Z Domain Status: ok https://icann.org/epp#ok Registrar: Netcom.cm Sarl Reseller: NetSto Inc. - https://www.netsto.com Name Server: ns1.huaweicloud-dns.com Name Server: ns1.huaweicloud-dns.net Name Server: ns1.huaweicloud-dns.cn Name Server: ns1.huaweicloud-dns.org >>> Last update of WHOIS database: 2025-05-28T04:47:00.968Z <<< For more information on EPP status codes, please visit https://icann.org/epp 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. Whois database is provided by ANTIC as a service to the internet community on behalf of ANTIC accredited registrars and resellers. The data is for information purposes only. ANTIC 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 ANTIC members (or their computer systems). The compilation, repackaging, dissemination or other use of this Data is prohibited. """ expected_results = { "domain_name": "icp.cm", "registry_domain_id": "1104110-RegCM", "updated_date": datetime.datetime(2025, 5, 27, 4, 46, 44, 214000, tzinfo=utc), "creation_date": datetime.datetime(2024, 8, 24, 13, 17, 43, 633000, tzinfo=utc), "expiration_date": datetime.datetime(2026, 8, 24, 13, 17, 44, 316000, tzinfo=utc), "status": "ok https://icann.org/epp#ok", "registrar": "Netcom.cm Sarl", "reseller": "NetSto Inc. - https://www.netsto.com", "name_servers": ['ns1.huaweicloud-dns.com', 'ns1.huaweicloud-dns.net', 'ns1.huaweicloud-dns.cn', 'ns1.huaweicloud-dns.org'] } self._parse_and_compare("icp.cm", data, expected_results) def test_fr_parse(self): sample_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "samples", "whois", "google.fr" ) with open(sample_path, encoding="utf-8") as f: data = f.read() expected_results = { "domain_name": "google.fr", "registrar": "MARKMONITOR Inc.", "creation_date": datetime.datetime(2000, 7, 26, 22, 0, tzinfo=utc), "expiration_date": datetime.datetime(2026, 12, 30, 17, 16, 48, tzinfo=utc), "updated_date": datetime.datetime(2025, 12, 3, 10, 12, 0, 351952, tzinfo=utc), "name_servers": [ "ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com", ], "status": [ "ACTIVE", "serverUpdateProhibited", "serverTransferProhibited", "serverDeleteProhibited", "serverRecoverProhibited", "associated", "not identified", "ok", ], "emails": [ "registry.admin@markmonitor.com", "dns-admin@google.com", "ccops@markmonitor.com", ], "registrant_name": "Google Ireland Holdings Unlimited Company", "registrant_address": "Google Ireland Holdings Unlimited Company\n70 Sir John Rogerson's Quay\n2 Dublin", "registrant_country": "IE", "registrant_phone": "+353.14361000", "registrant_email": "dns-admin@google.com", "registrant_type": "ORGANIZATION", "admin_name": "Google Ireland Holdings Unlimited Company", "admin_address": "70 Sir John Rogerson's Quay\n2 Dublin", "admin_country": "IE", "admin_phone": "+353.14361000", "admin_email": "dns-admin@google.com", "admin_type": "ORGANIZATION", "tech_name": "MarkMonitor Inc.", "tech_address": "2150 S. Bonito Way, Suite 150\n83642 Meridian", "tech_country": "US", "tech_phone": "+1.2083895740", "tech_email": "ccops@markmonitor.com", "tech_type": "ORGANIZATION", } self._parse_and_compare("google.fr", data, expected_results) if __name__ == "__main__": unittest.main() ================================================ FILE: test/test_query.py ================================================ # coding=utf-8 import unittest from whois import whois class TestQuery(unittest.TestCase): def test_simple_ascii_domain(self): domain = "google.com" whois(domain) def test_simple_unicode_domain(self): domain = "нарояци.com" whois(domain) def test_unicode_domain_and_tld(self): domain = "россия.рф" whois(domain) def test_ipv4(self): """Verify ipv4 addresses.""" domain = "172.217.3.110" whois_results = whois(domain) if isinstance(whois_results["domain_name"], list): domain_names = [_.lower() for _ in whois_results["domain_name"]] else: domain_names = [whois_results["domain_name"].lower()] print(whois_results) self.assertIn("1e100.net", domain_names) self.assertIn( "ns1.google.com", [_.lower() for _ in whois_results["name_servers"]] ) def test_ipv6(self): """Verify ipv6 addresses.""" domain = "2607:f8b0:4006:802::200e" whois_results = whois(domain) if isinstance(whois_results["domain_name"], list): domain_names = [_.lower() for _ in whois_results["domain_name"]] else: domain_names = [whois_results["domain_name"].lower()] self.assertIn("1e100.net", domain_names) self.assertIn( "ns1.google.com", [_.lower() for _ in whois_results["name_servers"]] ) ================================================ FILE: whois/__init__.py ================================================ # -*- coding: utf-8 -*- import logging import os import re import socket import subprocess import sys from typing import Any, Optional, Pattern from .exceptions import WhoisError from .parser import WhoisEntry from .whois import NICClient logger = logging.getLogger(__name__) # thanks to https://www.regextester.com/104038 IPV4_OR_V6: Pattern[str] = re.compile( r"((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))" # noqa: E501 ) def whois( url: str, command: bool = False, flags: int = 0, executable: str = "whois", executable_opts: Optional[list[str]] = None, inc_raw: bool = False, quiet: bool = False, ignore_socket_errors: bool = True, convert_punycode: bool = True, timeout: int = 10, ) -> dict[str, Any]: """ url: the URL to search whois command: whether to use the native whois command (default False) executable: executable to use for native whois command (default 'whois') flags: flags to pass to the whois client (default 0) inc_raw: whether to include the raw text from whois in the result (default False) quiet: whether to avoid printing output (default False) ignore_socket_errors: whether to ignore socket errors (default True) convert_punycode: whether to convert the given URL punycode (default True) timeout: timeout for WHOIS request (default 10 seconds) """ # clean domain to expose netloc ip_match = IPV4_OR_V6.match(url) if ip_match: domain = url try: result = socket.gethostbyaddr(url) except socket.herror: pass else: domain = extract_domain(result[0]) else: domain = extract_domain(url) if command: # try native whois command whois_command = [executable, domain] if executable_opts: if isinstance(executable_opts, list): whois_command.extend(executable_opts) else: whois_command.append(executable_opts) r = subprocess.Popen(whois_command, stdout=subprocess.PIPE) if r.stdout is None: raise WhoisError("Whois command returned no output") else: text = r.stdout.read().decode() else: # try builtin client nic_client = NICClient() if convert_punycode: domain = domain.encode("idna").decode("utf-8") text = nic_client.whois_lookup(None, domain, flags, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout) if not text: raise WhoisError("Whois command returned no output") entry = WhoisEntry.load(domain, text) if inc_raw: entry["raw"] = text return entry suffixes: Optional[set] = None def extract_domain(url: str) -> str: """Extract the domain from the given URL >>> logger.info(extract_domain('http://www.google.com.au/tos.html')) google.com.au >>> logger.info(extract_domain('abc.def.com')) def.com >>> logger.info(extract_domain(u'www.公司.hk')) 公司.hk >>> logger.info(extract_domain('chambagri.fr')) chambagri.fr >>> logger.info(extract_domain('www.webscraping.com')) webscraping.com >>> logger.info(extract_domain('198.252.206.140')) stackoverflow.com >>> logger.info(extract_domain('102.112.2O7.net')) 2o7.net >>> logger.info(extract_domain('globoesporte.globo.com')) globo.com >>> logger.info(extract_domain('1-0-1-1-1-0-1-1-1-1-1-1-1-.0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info')) 0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info >>> logger.info(extract_domain('2607:f8b0:4006:802::200e')) 1e100.net >>> logger.info(extract_domain('172.217.3.110')) 1e100.net """ if IPV4_OR_V6.match(url): # this is an IP address return socket.gethostbyaddr(url)[0] # load known TLD suffixes global suffixes if not suffixes: # downloaded from https://publicsuffix.org/list/public_suffix_list.dat tlds_path = os.path.join( os.getcwd(), os.path.dirname(__file__), "data", "public_suffix_list.dat" ) with open(tlds_path, encoding="utf-8") as tlds_fp: suffixes = set( line.encode("utf-8") for line in tlds_fp.read().splitlines() if line and not line.startswith("//") ) if not isinstance(url, str): url = url.decode("utf-8") url = re.sub("^.*://", "", url) url = url.split("/")[0].lower() # find the longest suffix match domain = b"" split_url = url.split(".") for section in reversed(split_url): if domain: domain = b"." + domain domain = section.encode("utf-8") + domain if domain not in suffixes: if b"." not in domain and len(split_url) >= 2: # If this is the first section and there wasn't a match, try to # match the first two sections - if that works, keep going # See https://github.com/richardpenman/whois/issues/50 second_order_tld = ".".join([split_url[-2], split_url[-1]]) if not second_order_tld.encode("utf-8") in suffixes: break else: break return domain.decode("utf-8") if __name__ == "__main__": try: url = sys.argv[1] except IndexError: logger.error("Usage: %s url" % sys.argv[0]) else: logger.info(whois(url)) ================================================ FILE: whois/exceptions.py ================================================ class PywhoisError(Exception): pass #backwards compatibility class WhoisError(PywhoisError): pass class UnknownTldError(WhoisError): pass class WhoisDomainNotFoundError(WhoisError): pass class FailedParsingWhoisOutputError(WhoisError): pass class WhoisQuotaExceededError(WhoisError): pass class WhoisUnknownDateFormatError(WhoisError): pass class WhoisCommandFailedError(WhoisError): pass ================================================ FILE: whois/parser.py ================================================ # -*- coding: utf-8 -*- # parser.py - Module for parsing whois response data # Copyright (c) 2008 Andrey Petrov # # This module is part of python-whois and is released under # the MIT license: http://www.opensource.org/licenses/mit-license.php from __future__ import annotations import json import re from datetime import datetime, timezone, timedelta from typing import Any, Callable, Optional, Union import dateutil.parser as dp from dateutil.utils import default_tzinfo from .exceptions import WhoisDomainNotFoundError, WhoisUnknownDateFormatError from .time_zones import tz_data EMAIL_REGEX: str = ( r"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[" r"a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" ) KNOWN_FORMATS: list[str] = [ "%d-%b-%Y", # 02-jan-2000 "%d-%B-%Y", # 11-February-2000 "%d-%m-%Y", # 20-10-2000 "%Y-%m-%d", # 2000-01-02 "%d.%m.%Y", # 2.1.2000 "%Y.%m.%d", # 2000.01.02 "%Y/%m/%d", # 2000/01/02 "%Y/%m/%d %H:%M:%S", # 2011/06/01 01:05:01 "%Y/%m/%d %H:%M:%S (%z)", # 2011/06/01 01:05:01 (+0900) "%Y%m%d", # 20170209 "%Y%m%d %H:%M:%S", # 20110908 14:44:51 "%d/%m/%Y", # 02/01/2013 "%Y. %m. %d.", # 2000. 01. 02. "%Y.%m.%d %H:%M:%S", # 2014.03.08 10:28:24 "%d-%b-%Y %H:%M:%S %Z", # 24-Jul-2009 13:20:03 UTC "%a %b %d %H:%M:%S %Z %Y", # Tue Jun 21 23:59:59 GMT 2011 "%a %b %d %Y", # Tue Dec 12 2000 "%Y-%m-%dT%H:%M:%S", # 2007-01-26T19:10:31 "%Y-%m-%dT%H:%M:%SZ", # 2007-01-26T19:10:31Z "%Y-%m-%dT%H:%M:%SZ[%Z]", # 2007-01-26T19:10:31Z[UTC] "%Y-%m-%d %H:%M:%S.%f", # 2018-05-19 12:18:44.329522 "%Y-%m-%dT%H:%M:%S.%fZ", # 2018-12-01T16:17:30.568Z "%Y-%m-%dT%H:%M:%S.%f%z", # 2011-09-08T14:44:51.622265+03:00 "%Y-%m-%d %H:%M:%S%z", # 2018-11-02 11:29:08+02:00 "%Y-%m-%dT%H:%M:%S%z", # 2013-12-06T08:17:22-0800 "%Y-%m-%dT%H:%M:%S%zZ", # 1970-01-01T02:00:00+02:00Z "%Y-%m-%dt%H:%M:%S.%f", # 2011-09-08t14:44:51.622265 "%Y-%m-%dt%H:%M:%S", # 2007-01-26T19:10:31 "%Y-%m-%dt%H:%M:%SZ", # 2007-01-26T19:10:31Z "%Y-%m-%dt%H:%M:%S.%fz", # 2007-01-26t19:10:31.00z "%Y-%m-%dt%H:%M:%S%z", # 2011-03-30T19:36:27+0200 "%Y-%m-%dt%H:%M:%S.%f%z", # 2011-09-08T14:44:51.622265+03:00 "%Y-%m-%d %H:%M:%SZ", # 2000-08-22 18:55:20Z "%Y-%m-%d %H:%M:%SZ.0Z", # 2000-08-22 18:55:20Z.0Z "%Y-%m-%d %H:%M:%S", # 2000-08-22 18:55:20 "%d %b %Y %H:%M:%S", # 08 Apr 2013 05:44:00 "%d/%m/%Y %H:%M:%S", # 23/04/2015 12:00:07 "%d/%m/%Y %H:%M:%S %Z", # 23/04/2015 12:00:07 EEST "%d/%m/%Y %H:%M:%S.%f %Z", # 23/04/2015 12:00:07.619546 EEST "%B %d %Y", # August 14 2017 "%d.%m.%Y %H:%M:%S", # 08.03.2014 10:28:24 "before %Y", # before 2001 "before %b-%Y", # before aug-1996 "before %Y-%m-%d", # before 1996-01-01 "before %Y%m%d", # before 19960821 "%Y-%m-%d %H:%M:%S (%Z%z)", # 2017-09-26 11:38:29 (GMT+00:00) "%Y-%m-%d %H:%M:%S (%Z+0:00)", # 2009-07-01 12:44:02 (GMT+0:00) "%Y-%b-%d.", # 2024-Apr-02. ] def datetime_parse(s: str) -> Union[datetime, None]: for known_format in KNOWN_FORMATS: try: parsed = datetime.strptime(s, known_format) except ValueError: pass # Wrong format, keep trying else: if parsed.tzinfo is None: parsed = parsed.replace(tzinfo=timezone.utc) return parsed def cast_date( s: str, dayfirst: bool = False, yearfirst: bool = False ) -> Union[str, datetime]: """Convert any date string found in WHOIS to a datetime object.""" # prefer our conversion before dateutil.parser # because dateutil.parser does %m.%d.%Y and ours has %d.%m.%Y which is more logical parsed = datetime_parse(s) if parsed: return parsed try: # Use datetime.timezone.utc to support < Python3.9 return default_tzinfo( dp.parse(s, tzinfos=tz_data, dayfirst=dayfirst, yearfirst=yearfirst), timezone.utc, ) except dp.ParserError: raise WhoisUnknownDateFormatError(f"Unknown date format: {s}") from None class WhoisEntry(dict): """Base class for parsing a Whois entries.""" # regular expressions to extract domain data from whois profile # child classes will override this _regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "registrar": r"Registrar: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "reseller": r"Reseller: *(.+)", "whois_server": r"Whois Server: *(.+)", "referral_url": r"Referral URL: *(.+)", # http url of whois_server "updated_date": r"Updated Date: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Expir\w+ Date: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "status": r"Status: *(.+)", # list of statuses "emails": EMAIL_REGEX, # list of email s "dnssec": r"dnssec: *([\S]+)", "name": r"Registrant Name: *(.+)", "org": r"Registrant\s*Organization: *(.+)", "address": r"Registrant Street: *(.+)", "city": r"Registrant City: *(.+)", "state": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "country": r"Registrant Country: *(.+)", "tech_name": r"Tech Name: *(.+)", "tech_org": r"Tech Organization: *(.+)", "admin_name": r"Admin Name: *(.+)", "admin_org": r"Admin Organization: *(.+)" } # allows for data string manipulation before casting to date _data_preprocessor: Optional[Callable[[str], str]] = None dayfirst: bool = False yearfirst: bool = False def __init__(self, domain: str, text: str, regex: Optional[dict[str, str]] = None, data_preprocessor: Optional[Callable[[str], str]] = None): if ( "This TLD has no whois server, but you can access the whois database at" in text ): raise WhoisDomainNotFoundError(text) else: self.domain = domain self.text = text if regex is not None: self._regex = regex if data_preprocessor is not None: self._data_preprocessor = data_preprocessor self.parse() def parse(self) -> None: """The first time an attribute is called it will be calculated here. The attribute is then set to be accessed directly by subsequent calls. """ for attr, regex in list(self._regex.items()): if regex: values: list[Union[str, datetime]] = [] for data in re.findall(regex, self.text, re.IGNORECASE | re.M): matches = data if isinstance(data, tuple) else [data] for value in matches: value = self._preprocess(attr, value) if value and str(value).lower() not in [ str(v).lower() for v in values ]: # avoid duplicates values.append(value) if values and attr in ("registrar", "whois_server", "referral_url"): values = values[-1:] # ignore junk if len(values) == 1: self[attr] = values[0] elif values: self[attr] = values else: self[attr] = None def _preprocess(self, attr: str, value: str) -> Union[str, datetime]: value = value.strip() if value and isinstance(value, str) and not value.isdigit() and "_date" in attr: # try casting to date format # if data_preprocessor is set, use it to preprocess the data string if self._data_preprocessor: value = self._data_preprocessor(value) return cast_date(value, dayfirst=self.dayfirst, yearfirst=self.yearfirst) return value def __setitem__(self, name: str, value: Any) -> None: super(WhoisEntry, self).__setitem__(name, value) def __getattr__(self, name: str) -> Any: return self.get(name) def __str__(self) -> str: def handler(e): return str(e) return json.dumps(self, indent=2, default=handler, ensure_ascii=False) def __getstate__(self) -> dict: return self.__dict__ def __setstate__(self, state: dict) -> None: self.__dict__ = state @staticmethod def load(domain: str, text: str): """Given whois output in ``text``, return an instance of ``WhoisEntry`` that represents its parsed contents. """ if text.strip() == "No whois server is known for this kind of object.": raise WhoisDomainNotFoundError(text) if domain.endswith(".com"): return WhoisCom(domain, text) elif domain.endswith(".net"): return WhoisNet(domain, text) elif domain.endswith(".org"): return WhoisOrg(domain, text) elif domain.endswith(".name"): return WhoisName(domain, text) elif domain.endswith(".me"): return WhoisMe(domain, text) elif domain.endswith(".ae"): return WhoisAe(domain, text) elif domain.endswith(".au"): return WhoisAU(domain, text) elif domain.endswith(".ru"): return WhoisRu(domain, text) elif domain.endswith(".us"): return WhoisUs(domain, text) elif domain.endswith(".uk"): return WhoisUk(domain, text) elif domain.endswith(".fr"): return WhoisAfnic(domain, text) elif domain.endswith(".re"): return WhoisAfnic(domain, text) elif domain.endswith(".pm"): return WhoisAfnic(domain, text) elif domain.endswith(".tf"): return WhoisAfnic(domain, text) elif domain.endswith(".wf"): return WhoisAfnic(domain, text) elif domain.endswith(".yt"): return WhoisAfnic(domain, text) elif domain.endswith(".nl"): return WhoisNl(domain, text) elif domain.endswith(".lt"): return WhoisLt(domain, text) elif domain.endswith(".fi"): return WhoisFi(domain, text) elif domain.endswith(".hr"): return WhoisHr(domain, text) elif domain.endswith(".hn"): return WhoisHn(domain, text) elif domain.endswith(".hk"): return WhoisHk(domain, text) elif domain.endswith(".jp"): return WhoisJp(domain, text) elif domain.endswith(".pl"): return WhoisPl(domain, text) elif domain.endswith(".br"): return WhoisBr(domain, text) elif domain.endswith(".eu"): return WhoisEu(domain, text) elif domain.endswith(".ee"): return WhoisEe(domain, text) elif domain.endswith(".kr"): return WhoisKr(domain, text) elif domain.endswith(".pt"): return WhoisPt(domain, text) elif domain.endswith(".bg"): return WhoisBg(domain, text) elif domain.endswith(".de"): return WhoisDe(domain, text) elif domain.endswith(".at"): return WhoisAt(domain, text) elif domain.endswith(".ca"): return WhoisCa(domain, text) elif domain.endswith(".be"): return WhoisBe(domain, text) elif domain.endswith(".рф"): return WhoisRf(domain, text) elif domain.endswith(".info"): return WhoisInfo(domain, text) elif domain.endswith(".su"): return WhoisSu(domain, text) elif domain.endswith(".si"): return WhoisSi(domain, text) elif domain.endswith(".kg"): return WhoisKg(domain, text) elif domain.endswith(".io"): return WhoisIo(domain, text) elif domain.endswith(".biz"): return WhoisBiz(domain, text) elif domain.endswith(".mobi"): return WhoisMobi(domain, text) elif domain.endswith(".ch"): return WhoisChLi(domain, text) elif domain.endswith(".li"): return WhoisChLi(domain, text) elif domain.endswith(".id"): return WhoisID(domain, text) elif domain.endswith(".sk"): return WhoisSK(domain, text) elif domain.endswith(".se"): return WhoisSe(domain, text) elif domain.endswith(".no"): return WhoisNo(domain, text) elif domain.endswith(".nu"): return WhoisSe(domain, text) elif domain.endswith(".is"): return WhoisIs(domain, text) elif domain.endswith(".dk"): return WhoisDk(domain, text) elif domain.endswith(".it"): return WhoisIt(domain, text) elif domain.endswith(".mx"): return WhoisMx(domain, text) elif domain.endswith(".ai"): return WhoisAi(domain, text) elif domain.endswith(".il"): return WhoisIl(domain, text) elif domain.endswith(".in"): return WhoisIn(domain, text) elif domain.endswith(".cat"): return WhoisCat(domain, text) elif domain.endswith(".ie"): return WhoisIe(domain, text) elif domain.endswith(".nz"): return WhoisNz(domain, text) elif domain.endswith(".space"): return WhoisSpace(domain, text) elif domain.endswith(".lu"): return WhoisLu(domain, text) elif domain.endswith(".cz"): return WhoisCz(domain, text) elif domain.endswith(".online"): return WhoisOnline(domain, text) elif domain.endswith(".cn"): return WhoisCn(domain, text) elif domain.endswith(".app"): return WhoisApp(domain, text) elif domain.endswith(".money"): return WhoisMoney(domain, text) elif domain.endswith(".cl"): return WhoisCl(domain, text) elif domain.endswith(".ar"): return WhoisAr(domain, text) elif domain.endswith(".by"): return WhoisBy(domain, text) elif domain.endswith(".cr"): return WhoisCr(domain, text) elif domain.endswith(".do"): return WhoisDo(domain, text) elif domain.endswith(".jobs"): return WhoisJobs(domain, text) elif domain.endswith(".lat"): return WhoisLat(domain, text) elif domain.endswith(".pe"): return WhoisPe(domain, text) elif domain.endswith(".ro"): return WhoisRo(domain, text) elif domain.endswith(".sa"): return WhoisSa(domain, text) elif domain.endswith(".tw"): return WhoisTw(domain, text) elif domain.endswith(".tr"): return WhoisTr(domain, text) elif domain.endswith(".ve"): return WhoisVe(domain, text) elif domain.endswith(".ua"): if domain.endswith(".pp.ua"): return WhoisPpUa(domain, text) return WhoisUA(domain, text) elif domain.endswith(".укр") or domain.endswith(".xn--j1amh"): return WhoisUkr(domain, text) elif domain.endswith(".kz"): return WhoisKZ(domain, text) elif domain.endswith(".ir"): return WhoisIR(domain, text) elif domain.endswith(".中国"): return WhoisZhongGuo(domain, text) elif domain.endswith(".website"): return WhoisWebsite(domain, text) elif domain.endswith(".sg"): return WhoisSG(domain, text) elif domain.endswith(".ml"): return WhoisML(domain, text) elif domain.endswith(".ooo"): return WhoisOoo(domain, text) elif domain.endswith(".group"): return WhoisGroup(domain, text) elif domain.endswith(".market"): return WhoisMarket(domain, text) elif domain.endswith(".za"): return WhoisZa(domain, text) elif domain.endswith(".bw"): return WhoisBw(domain, text) elif domain.endswith(".bz"): return WhoisBz(domain, text) elif domain.endswith(".gg"): return WhoisGg(domain, text) elif domain.endswith(".city"): return WhoisCity(domain, text) elif domain.endswith(".design"): return WhoisDesign(domain, text) elif domain.endswith(".studio"): return WhoisStudio(domain, text) elif domain.endswith(".style"): return WhoisStyle(domain, text) elif domain.endswith(".рус") or domain.endswith(".xn--p1acf"): return WhoisPyc(domain, text) elif domain.endswith(".life"): return WhoisLife(domain, text) elif domain.endswith(".tn"): return WhoisTN(domain, text) elif domain.endswith(".rs"): return WhoisRs(domain, text) elif domain.endswith(".site"): return WhoisSite(domain, text) elif domain.endswith(".edu"): return WhoisEdu(domain, text) elif domain.endswith(".lv"): return WhoisLv(domain, text) elif domain.endswith(".co"): return WhoisCo(domain, text) elif domain.endswith(".ga"): return WhoisGa(domain, text) elif domain.endswith(".cm"): return WhoisCm(domain, text) elif domain.endswith(".hu"): return WhoisHu(domain, text) elif domain.endswith(".xyz"): return WhoisXyz(domain, text) else: return WhoisEntry(domain, text) class WhoisCl(WhoisEntry): """Whois parser for .cl domains""" regex: dict[str, str] = { "domain_name": r"Domain name: *(.+)", "registrant_name": r"Registrant name: *(.+)", "registrant_organization": r"Registrant organisation: *(.+)", "registrar": r"registrar name: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "creation_date": r"Creation date: *(.+)", "expiration_date": r"Expiration date: *(.+)", "name_servers": r"Name server: *(.+)", # list of name servers } def __init__(self, domain: str, text: str): if 'No match for "' in text or "no entries found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__( self, domain, text, self.regex, lambda x: x.replace(" CLST", "").replace(" CLT", "") ) class WhoisSG(WhoisEntry): """Whois parser for .sg domains""" regex: dict[str, str] = { "domain_name": r"Domain name: *(.+)", "status": r"Domain Status: *(.+)", "registrant_name": r"Registrant:\n\s+Name:(.+)", "registrar": r"Registrar: *(.+)", "creation_date": r"Creation date: *(.+)", "updated_date": r"Updated Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "dnssec": r"DNSSEC: *(.+)", "name_servers": r"Name server: *(.+)", # list of name servers } def __init__(self, domain: str, text: str): if "Domain Not Found" in text or text.lstrip().startswith('Not found: '): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) nsmatch = re.compile("Name Servers:(.*?)DNSSEC:", re.DOTALL).search(text) if nsmatch: self["name_servers"] = [ line.strip() for line in nsmatch.groups()[0].strip().splitlines() ] techmatch = re.compile( "Technical Contact:(.*?)Name Servers:", re.DOTALL ).search(text) if techmatch: for line in techmatch.groups()[0].strip().splitlines(): self[ "technical_contact_" + line.split(":")[0].strip().lower() ] = line.split(":")[1].strip() class WhoisPe(WhoisEntry): """Whois parser for .pe domains""" regex: dict[str, str] = { "domain_name": r"Domain name: *(.+)", "status": r"Domain Status: *(.+)", "whois_server": r"WHOIS Server: *(.+)", "registrant_name": r"Registrant name: *(.+)", "registrar": r"Sponsoring Registrar: *(.+)", "admin": r"Admin Name: *(.+)", "admin_email": r"Admin Email: *(.+)", "dnssec": r"DNSSEC: *(.+)", "name_servers": r"Name server: *(.+)", # list of name servers } def __init__(self, domain: str, text: str): if 'No match for "' in text or "Domain Status: No Object Found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisSpace(WhoisEntry): """Whois parser for .space domains""" def __init__(self, domain: str, text: str): if 'No match for "' in text or "The queried object does not exist: DOMAIN NOT FOUND" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text) class WhoisCom(WhoisEntry): """Whois parser for .com domains""" def __init__(self, domain: str, text: str): if 'No match for "' in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text) class WhoisNet(WhoisEntry): """Whois parser for .net domains""" def __init__(self, domain: str, text: str): if 'No match for "' in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text) class WhoisOrg(WhoisEntry): """Whois parser for .org domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "registrar": r"Registrar: *(.+)", "whois_server": r"Whois Server: *(.+)", # empty usually "referral_url": r"Referral URL: *(.+)", # http url of whois_server: empty usually "updated_date": r"Updated Date: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "status": r"Status: *(.+)", # list of statuses "emails": EMAIL_REGEX, # list of email addresses } def __init__(self, domain: str, text: str): if text.strip().startswith("NOT FOUND") or text.strip().startswith( "Domain not found" ): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text) class WhoisRo(WhoisEntry): """Whois parser for .ro domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain_status": r"Domain Status: *(.+)", "registrar": r"Registrar: *(.+)", "referral_url": r"Referral URL: *(.+)", # http url of whois_server: empty usually "creation_date": r"Registered On: *(.+)", "expiration_date": r"Expires On: *(.+)", "name_servers": r"Nameserver: *(.+)", # list of name servers "status": r"Status: *(.+)", # list of statuses "dnssec": r"DNSSEC: *(.+)", } def __init__(self, domain: str, text: str): if text.strip() == "NOT FOUND" or "No entries found for the selected source" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisRu(WhoisEntry): """Whois parser for .ru domains""" regex: dict[str, str] = { "domain_name": r"domain: *(.+)", "registrar": r"registrar: *(.+)", "creation_date": r"created: *(.+)", "expiration_date": r"paid-till: *(.+)", "free_date": r"free-date: *(.+)", "name_servers": r"nserver: *(.+)", # list of name servers "status": r"state: *(.+)", # list of statuses "emails": EMAIL_REGEX, # list of email addresses "org": r"org: *(.+)", } def __init__(self, domain: str, text: str): if "No entries found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisNl(WhoisEntry): """Whois parser for .nl domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "expiration_date": r"Date\sout\sof\squarantine:\s*(.+)", "updated_date": r"Updated\sDate:\s*(.+)", "creation_date": r"Creation\sDate:\s*(.+)", "status": r"Status: *(.+)", # list of statuses "registrar": r"Registrar:\s*(.*\n)", "registrar_address": r"Registrar:\s*(?:.*\n){1}\s*(.*)", "registrar_postal_code": r"Registrar:\s*(?:.*\n){2}\s*(\S*)\s(?:.*)", "registrar_city": r"Registrar:\s*(?:.*\n){2}\s*(?:\S*)\s(.*)", "registrar_country": r"Registrar:\s*(?:.*\n){3}\s*(.*)", "reseller": r"Reseller:\s*(.*\n)", "reseller_address": r"Reseller:\s*(?:.*\n){1}\s*(.*)", "reseller_postal_code": r"Reseller:\s*(?:.*\n){2}\s*(\S*)\s(?:.*)", "reseller_city": r"Reseller:\s*(?:.*\n){2}\s*(?:\S*)\s(.*)", "reseller_country": r"Reseller:\s*(?:.*\n){3}\s*(.*)", "abuse_phone": r"Abuse Contact:\s*(.*\n)", "abuse_email": r"Abuse Contact:\s*(?:.*\n){1}\s*(.*)", "dnssec": r"DNSSEC: *(.+)", } def __init__(self, domain: str, text: str): if text.rstrip().endswith("is free"): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) match = re.compile( r"Domain nameservers:(.*?)Record maintained by", re.DOTALL ).search(text) if match: duplicate_nameservers_with_ip = [] for line in match.groups()[0].strip().splitlines(): if line.strip() == "": break duplicate_nameservers_with_ip.append(line.strip()) duplicate_nameservers_without_ip = [ nameserver.split(" ")[0] for nameserver in duplicate_nameservers_with_ip ] self["name_servers"] = sorted(list(set(duplicate_nameservers_without_ip))) class WhoisLt(WhoisEntry): """Whois parser for .lt domains""" regex: dict[str, str] = { "domain_name": r"Domain:\s?(.+)", "expiration_date": r"Expires:\s?(.+)", "creation_date": r"Registered:\s?(.+)", "status": r"\nStatus:\s?(.+)", # list of statuses } def __init__(self, domain: str, text: str): if text.rstrip().endswith("available"): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) match = re.compile( r"Domain nameservers:(.*?)Record maintained by", re.DOTALL ).search(text) if match: duplicate_nameservers_with_ip = [ line.strip() for line in match.groups()[0].strip().splitlines() ] duplicate_nameservers_without_ip = [ nameserver.split(" ")[0] for nameserver in duplicate_nameservers_with_ip ] self["name_servers"] = sorted(list(set(duplicate_nameservers_without_ip))) class WhoisName(WhoisEntry): """Whois parser for .name domains""" regex: dict[str, str] = { "domain_name_id": r"Domain Name ID: *(.+)", "domain_name": r"Domain Name: *(.+)", "registrar_id": r"Sponsoring Registrar ID: *(.+)", "registrar": r"Sponsoring Registrar: *(.+)", "registrant_id": r"Registrant ID: *(.+)", "admin_id": r"Admin ID: *(.+)", "technical_id": r"Tech ID: *(.+)", "billing_id": r"Billing ID: *(.+)", "creation_date": r"Created On: *(.+)", "expiration_date": r"Expires On: *(.+)", "updated_date": r"Updated On: *(.+)", "name_server_ids": r"Name Server ID: *(.+)", # list of name server ids "name_servers": r"Name Server: *(.+)", # list of name servers "status": r"Domain Status: *(.+)", # list of statuses } def __init__(self, domain: str, text: str): if "No match for " in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisUs(WhoisEntry): """Whois parser for .us domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain__id": r"Domain ID: *(.+)", "whois_server": r"Registrar WHOIS Server: *(.+)", "registrar": r"Registrar: *(.+)", "registrar_id": r"Registrar IANA ID: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "registrar_email": r"Registrar Abuse Contact Email: *(.+)", "registrar_phone": r"Registrar Abuse Contact Phone: *(.+)", "status": r"Domain Status: *(.+)", # list of statuses "registrant_id": r"Registry Registrant ID: *(.+)", "registrant_name": r"Registrant Name: *(.+)", "registrant_organization": r"Registrant Organization: *(.+)", "registrant_street": r"Registrant Street: *(.+)", "registrant_city": r"Registrant City: *(.+)", "registrant_state_province": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "registrant_country": r"Registrant Country: *(.+)", "registrant_phone": r"Registrant Phone: *(.+)", "registrant_email": r"Registrant Email: *(.+)", "registrant_fax": r"Registrant Fax: *(.+)", "registrant_application_purpose": r"Registrant Application Purpose: *(.+)", "registrant_nexus_category": r"Registrant Nexus Category: *(.+)", "admin_id": r"Registry Admin ID: *(.+)", "admin": r"Admin Name: *(.+)", "admin_organization": r"Admin Organization: *(.+)", "admin_street": r"Admin Street: *(.+)", "admin_city": r"Admin City: *(.+)", "admin_state_province": r"Admin State/Province: *(.+)", "admin_postal_code": r"Admin Postal Code: *(.+)", "admin_country": r"Admin Country: *(.+)", "admin_phone": r"Admin Phone: *(.+)", "admin_email": r"Admin Email: *(.+)", "admin_fax": r"Admin Fax: *(.+)", "admin_application_purpose": r"Admin Application Purpose: *(.+)", "admin_nexus_category": r"Admin Nexus Category: *(.+)", "tech_id": r"Registry Tech ID: *(.+)", "tech_name": r"Tech Name: *(.+)", "tech_organization": r"Tech Organization: *(.+)", "tech_street": r"Tech Street: *(.+)", "tech_city": r"Tech City: *(.+)", "tech_state_province": r"Tech State/Province: *(.+)", "tech_postal_code": r"Tech Postal Code: *(.+)", "tech_country": r"Tech Country: *(.+)", "tech_phone": r"Tech Phone: *(.+)", "tech_email": r"Tech Email: *(.+)", "tech_fax": r"Tech Fax: *(.+)", "tech_application_purpose": r"Tech Application Purpose: *(.+)", "tech_nexus_category": r"Tech Nexus Category: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "updated_date": r"Updated Date: *(.+)", } def __init__(self, domain, text): if "No Data Found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisPl(WhoisEntry): """Whois parser for .pl domains""" regex: dict[str, str] = { "domain_name": r"DOMAIN NAME: *(.+)\n", "name_servers": r"nameservers:(?:\s+(\S+)\.[^\n]*\n)(?:\s+(\S+)\.[^\n]*\n)?(?:\s+(\S+)\.[^\n]*\n)?(?:\s+(\S+)\.[^\n]*\n)?", # up to 4 "registrar": r"REGISTRAR:\s*(.+)", "registrar_url": r"URL: *(.+)", # not available "status": r"Registration status:\n\s*(.+)", # not available "registrant_name": r"Registrant:\n\s*(.+)", # not available "creation_date": r"(? None: """Resolve AFNIC handle references (holder-c, admin-c, tech-c) to contact fields.""" handle_to_prefix = [ (self.pop("holder_c", None), "registrant"), (self.pop("admin_c", None), "admin"), (self.pop("tech_c", None), "tech"), ] contact_blocks = self._extract_contact_blocks(text) for handle, prefix in handle_to_prefix: if handle and handle in contact_blocks: for afnic_field, suffix in self._contact_field_mapping.items(): value = contact_blocks[handle].get(afnic_field) if value is not None: self[f"{prefix}_{suffix}"] = value @staticmethod def _extract_contact_blocks(text: str) -> dict[str, dict[str, Any]]: """Parse all nic-hdl contact blocks from AFNIC whois text.""" contacts: dict[str, dict[str, Any]] = {} for block in re.split(r"\n\s*\n", text): hdl_match = re.search(r"^nic-hdl:\s*(.+)$", block, re.M | re.I) if not hdl_match: continue handle = hdl_match.group(1).strip() data: dict[str, Any] = {} for line in block.splitlines(): if ":" not in line: continue field, value = line.split(":", 1) field = field.strip().lower() value = value.strip() if not value: continue if field == "address": data.setdefault("address", []) data["address"].append(value) elif field not in data: data[field] = value # Join multi-line addresses if "address" in data: data["address"] = "\n".join(data["address"]) contacts[handle] = data return contacts class WhoisFi(WhoisEntry): """Whois parser for .fi domains""" regex: dict[str, str] = { "domain_name": r"domain\.*: *([\S]+)", "name": r"Holder\s*name\.*: (.+)", "address": r"[Holder\w\W]address\.*: (.+)", "phone": r"Holder[\s\w\W]+phone\.*: (.+)", "email": r"holder email\.*: *([\S]+)", "status": r"status\.*: (.+)", # list of statuses "creation_date": r"created\.*: *([\S]+)", "updated_date": r"modified\.*: *([\S]+)", "expiration_date": r"expires\.*: *([\S]+)", "name_servers": r"nserver\.*: *([\S]+) \[\S+\]", # list of name servers "name_server_statuses": r"nserver\.*: *([\S]+ \[\S+\])", # list of name servers and statuses "dnssec": r"dnssec\.*: *([\S]+)", "registrar": r"Registrar\s*registrar\.*: (.+)", "registrar_site": r"Registrar[\s\w\W]+www\.*: (.+)", } dayfirst = True def __init__(self, domain: str, text: str): if "Domain not " in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisJp(WhoisEntry): """Parser for .jp domains For testing, try *both* of: nintendo.jp nintendo.co.jp """ not_found = "No match!!" regex: dict[str, str] = { "domain_name": r"^(?:a\. )?\[Domain Name\]\s*(.+)", "registrant_org": r"^(?:g\. )?\[(?:Organization|Registrant)\](.+)", "creation_date": r"\[(?:Registered Date|Created on)\][ \t]*(.+)", "organization_type": r"^(?:l\. )?\[Organization Type\]\s*(.+)$", "technical_contact_name": r"^(?:n. )?\[(?:Technical Contact)\]\s*(.+)", "administrative_contact_name": r"^(?:m. )?(?:\[Administrative Contact\]\s*(.+)|Contact Information:\s+^\[Name\](.*))", # These don't need the X. at the beginning, I just was too lazy to split the pattern off "administrative_contact_email": r"^(?:X. )?(?:\[Administrative Contact\]\s*(?:.+)|Contact Information:\s+)(?:^\s*.*\s+)*(?:^\[Email\]\s*(.*))", "administrative_contact_phone": r"^(?:X. )?(?:\[Administrative Contact\]\s*(?:.+)|Contact Information:\s+)(?:^\s*.*\s+)*(?:^\[Phone\]\s*(.*))", "administrative_contact_fax": r"^(?:X. )?(?:\[Administrative Contact\]\s*(?:.+)|Contact Information:\s+)(?:^\s*.*\s+)*(?:^\[Fax\]\s*(.*))", "administrative_contact_post_code": r"^(?:X. )?(?:\[Administrative Contact\]\s*(?:.+)|Contact Information:\s+)(?:^\s*.*\s+)*(?:^\[Postal code\]\s*(.*))", "administrative_contact_postal_address": r"^(?:X. )?(?:\[Administrative Contact\]\s*(?:.+)|Contact Information:\s+)(?:^\s*.*\s+)*(?:^\[Postal Address\]\s*(.*))", "expiration_date": r"\[Expires on\]\s*(.+)", "name_servers": r"^(?:p\. )?\[Name Server\]\s*(.+)", # list "updated_date": r"^\[Last Updated?\]\s?(.+)", "signing_key": r"^(?:s\. )?\[Signing Key\](.+)$", "status": r"\[(?:State|Status)\]\s*(.+)", # list } def __init__(self, domain: str, text: str): if self.not_found in text: raise WhoisDomainNotFoundError(text) super().__init__(domain, text, self.regex) def _preprocess(self, attr, value): # handle named timezone. cast_date can't handle it, since datetime.parse doesn't support the format and # strptime doesn't handle custom timezone names. value = value.strip() if value and isinstance(value, str) and "_date" in attr and value.endswith(" (JST)"): value = value.replace(' (JST)', '') value = cast_date(value, dayfirst=self.dayfirst, yearfirst=self.yearfirst) value = value.replace(tzinfo=timezone(timedelta(seconds=tz_data['JST']))) return value else: return super()._preprocess(attr, value) class WhoisAU(WhoisEntry): """Whois parser for .au domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)\n", "updated_date": r"Last Modified: *(.+)\n", "registrar": r"Registrar Name: *(.+)\n", "status": r"Status: *(.+)", "registrant_name": r"Registrant: *(.+)", "registrant_contact_name": r"Registrant Contact Name: (.+)", "name_servers": r"Name Server: *(.+)", "registrant_id": r"Registrant ID: *(.+)", "eligibility_type": r"Eligibility Type: *(.+)", } def __init__(self, domain: str, text: str): if text.strip() == "No Data Found" or text.lstrip().startswith("Domain not found"): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisRs(WhoisEntry): """Whois parser for .rs domains""" _regex: dict[str, str] = { "domain_name": r"Domain name: *(.+)", "status": r"Domain status: *(.+)", # list of statuses "creation_date": r"Registration date: *(.+)", "updated_date": r"Modification date: *(.+)", "expiration_date": r"Expiration date: *(.+)", "registrar": r"Registrar: *(.+)", "name": r"Registrant: *(.+)", "address": r"Registrant: *.+\nAddress: *(.+)", "admin_name": r"Administrative contact: *(.+)", "admin_address": r"Administrative contact: *.+\nAddress: *(.+)", "tech_name": r"Technical contact: *(.+)", "tech_address": r"Technical contact: *.+\nAddress: *(.+)", "name_servers": r"DNS: *(\S+)", # list of name servers "dnssec": r"DNSSEC signed: *(\S+)", } def __init__(self, domain: str, text: str): if text.strip() == "%ERROR:103: Domain is not registered": raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisEu(WhoisEntry): """Whois parser for .eu domains""" _SECTION_BOUNDARY = r"(?:Registrar|On-site(s)|Reseller|Registrant|Name servers|Keys|Please visit www.eurid.eu for more information.)" regex = { "domain_name": r"Domain:\s*([^\n\r]+)", "script": r"Script:\s*([^\n\r]+)", "reseller_org": rf"Reseller:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Organisation:\s*([^\n\r]+)", "reseller_lang": rf"Reseller:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Language:\s*([^\n\r]+)", "reseller_email": rf"Reseller:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Email:\s*([^\n\r]+)", "tech_org": rf"Technical:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Organisation:\s*([^\n\r]+)", "tech_lang": rf"Technical:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Language:\s*([^\n\r]+)", "tech_email": rf"Technical:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Email:\s*([^\n\r]+)", "registrar": rf"Registrar:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Name:\s*([^\n\r]+)", "registrar_url": rf"Registrar:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?^\s*Website:\s*([^\n\r]+)", "name_servers": rf"Name servers:\s*((?:^(?!\s*$)(?!^(?:{_SECTION_BOUNDARY})\s*:).+\n)+)", "dnssec_flags": rf"Keys:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?flags:\s*([^\s]+)", "dnssec_protocol": rf"Keys:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?protocol:\s*([0-9]+)", "dnssec_algorithm": rf"Keys:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?algorithm:\s*([A-Z0-9_]+)", "dnssec_pubkey": rf"Keys:\s*(?:(?!\n(?:{_SECTION_BOUNDARY})\s*:)[\s\S])*?pubKey:\s*([A-Za-z0-9+/=]+)", } def __init__(self, domain, text): if text.strip().endswith("Status: AVAILABLE"): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) def _preprocess(self, attr, value): if attr == "name_servers" and isinstance(value, str): return [ln.strip() for ln in value.strip().splitlines() if ln.strip()] return value class WhoisEe(WhoisEntry): """Whois parser for .ee domains""" regex: dict[str, str] = { "domain_name": r"Domain: *[\n\r]+\s*name: *([^\n\r]+)", "status": r"Domain: *[\n\r]+\s*name: *[^\n\r]+\sstatus: *([^\n\r]+)", "creation_date": r"Domain: *[\n\r]+\s*name: *[^\n\r]+\sstatus: *[^\n\r]+\sregistered: *([^\n\r]+)", "updated_date": r"Domain: *[\n\r]+\s*name: *[^\n\r]+\sstatus: *[^\n\r]+\sregistered: *[^\n\r]+\schanged: " r"*([^\n\r]+)", "expiration_date": r"Domain: *[\n\r]+\s*name: *[^\n\r]+\sstatus: *[^\n\r]+\sregistered: *[^\n\r]+\schanged: " r"*[^\n\r]+\sexpire: *([^\n\r]+)", # 'tech_name': r'Technical: *Name: *([^\n\r]+)', # 'tech_org': r'Technical: *Name: *[^\n\r]+\s*Organisation: *([^\n\r]+)', # 'tech_phone': r'Technical: *Name: *[^\n\r]+\s* # Organisation: *[^\n\r]+\s*Language: *[^\n\r]+\s*Phone: *([^\n\r]+)', # 'tech_fax': r'Technical: *Name: *[^\n\r]+\s* # Organisation: *[^\n\r]+\s*Language: *[^\n\r]+\s*Phone: *[^\n\r]+\s*Fax: *([^\n\r]+)', # 'tech_email': r'Technical: *Name: *[^\n\r]+\s* # Organisation: *[^\n\r]+\s*Language: *[^\n\r]+\s*Phone: *[^\n\r]+\s*Fax: *[^\n\r]+\s*Email: *([^\n\r]+)', "registrar": r"Registrar: *[\n\r]+\s*name: *([^\n\r]+)", "name_servers": r"nserver: *(.*)", # list of name servers } def __init__(self, domain: str, text: str): if text.strip().startswith("Domain not found"): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisBr(WhoisEntry): """Whois parser for .br domains""" regex: dict[str, str] = { "domain_name": r"domain: *(.+)\n", "registrant_name": r"owner: *([\S ]+)", "registrant_id": r"ownerid: *(.+)", "country": r"country: *(.+)", "owner_c": r"owner-c: *(.+)", "admin_c": r"admin-c: *(.+)", "tech_c": r"tech-c: *(.+)", "billing_c": r"billing-c: *(.+)", "name_servers": r"nserver: *(.+)", "nsstat": r"nsstat: *(.+)", "nslastaa": r"nslastaa: *(.+)", "saci": r"saci: *(.+)", "creation_date": r"created: *(.+)", "updated_date": r"changed: *(.+)", "expiration_date": r"expires: *(.+)", "status": r"status: *(.+)", "nic_hdl_br": r"nic-hdl-br: *(.+)", "person": r"person: *([\S ]+)", "email": r"e-mail: *(.+)", } def __init__(self, domain: str, text: str): if "Not found:" in text or "No match for " in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) def _preprocess(self, attr, value): value = value.strip() if value and isinstance(value, str) and "_date" in attr: # try casting to date format value = re.findall(r"[\w\s:.-\\/]+", value)[0].strip() value = cast_date(value, dayfirst=self.dayfirst, yearfirst=self.yearfirst) return value class WhoisKr(WhoisEntry): """Whois parser for .kr domains""" regex: dict[str, str] = { "domain_name": r"Domain Name\s*: *(.+)", "registrant_name": r"Registrant\s*: *(.+)", "registrant_address": r"Registrant Address\s*: *(.+)", "registrant_postal_code": r"Registrant Zip Code\s*: *(.+)", "admin_name": r"Administrative Contact\(AC\)\s*: *(.+)", "admin_email": r"AC E-Mail\s*: *(.+)", "admin_phone": r"AC Phone Number\s*: *(.+)", "creation_date": r"Registered Date\s*: *(.+)", "updated_date": r"Last updated Date\s*: *(.+)", "expiration_date": r"Expiration Date\s*: *(.+)", "registrar": r"Authorized Agency\s*: *(.+)", "name_servers": r"Host Name\s*: *(.+)", # list of name servers } def __init__(self, domain: str, text: str): if text.endswith(" no match") or "The requested domain was not found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisPt(WhoisEntry): """Whois parser for .pt domains""" regex: dict[str, str] = { "domain_name": r"Domain: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Expiration Date: *(.+)", "registrant_name": r"Owner Name: *(.+)", "registrant_street": r"Owner Address: *(.+)", "registrant_city": r"Owner Locality: *(.+)", "registrant_postal_code": r"Owner ZipCode: *(.+)", "registrant_email": r"Owner Email: *(.+)", "admin": r"Admin Name: *(.+)", "admin_street": r"Admin Address: *(.+)", "admin_city": r"Admin Locality: *(.+)", "admin_postal_code": r"Admin ZipCode: *(.+)", "admin_email": r"Admin Email: *(.+)", "name_servers": r"Name Server: *(.+) \|", # list of name servers "status": r"Domain Status: *(.+)", # list of statuses "emails": EMAIL_REGEX, # list of email addresses } dayfirst = True def __init__(self, domain: str, text: str): if text.strip() == "No entries found": raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisBg(WhoisEntry): """Whois parser for .bg domains""" regex: dict[str, str] = { "domain_name": r"DOMAIN NAME: *(.+)\n", "status": r"registration status: s*(.+)", } dayfirst = True def __init__(self, domain: str, text: str): if "does not exist in database!" in text or "registration status: available" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisDe(WhoisEntry): """Whois parser for .de domains""" regex: dict[str, str] = { "domain_name": r"Domain: *(.+)", "status": r"Status: *(.+)", "updated_date": r"Changed: *(.+)", "name": r"name: *(.+)", "org": r"Organisation: *(.+)", "address": r"Address: *(.+)", "registrant_postal_code": r"PostalCode: *(.+)", "city": r"City: *(.+)", "country_code": r"CountryCode: *(.+)", "phone": r"Phone: *(.+)", "fax": r"Fax: *(.+)", "name_servers": r"Nserver: *(.+)", # list of name servers "emails": EMAIL_REGEX, # list of email addresses "created": r"created: *(.+)", } def __init__(self, domain: str, text: str): if "Status: free" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisAt(WhoisEntry): """Whois parser for .at domains""" regex: dict[str, str] = { "domain_name": r"domain: *(.+)", "registrar": r"registrar: *(.+)", "name_servers": r"nserver: *(.+)", "name": r"personname: *(.+)", "org": r"organization: *(.+)", "address": r"street address: *(.+)", "registrant_postal_code": r"postal code: *(.+)", "city": r"city: *(.+)", "country": r"country: *(.+)", "phone": r"phone: *(.+)", "fax": r"fax-no: *(.+)", "updated_date": r"changed: *(.+)", "email": r"e-mail: *(.+)", } def __init__(self, domain: str, text: str): if "Status: free" in text or text.rstrip().endswith('nothing found'): raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisBe(WhoisEntry): """Whois parser for .be domains""" regex: dict[str, str] = { "domain_name": r"Domain: *(.+)", "status": r"Status: *(.+)", "name": r"Name: *(.+)", "org": r"Organisation: *(.+)", "phone": r"Phone: *(.+)", "fax": r"Fax: *(.+)", "email": r"Email: *(.+)", "creation_date": r"Registered: *(.+)", "name_servers": r"Nameservers:\s((?:\s+?[\w.]+\s)*)", # list of name servers } def __init__(self, domain: str, text: str): if "Status: AVAILABLE" in text or "Status:\tAVAILABLE" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisInfo(WhoisEntry): """Whois parser for .info domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "registrar": r"Registrar: *(.+)", "whois_server": r"Whois Server: *(.+)", # empty usually "referral_url": r"Referral URL: *(.+)", # http url of whois_server: empty usually "updated_date": r"Updated Date: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "status": r"Status: *(.+)", # list of statuses "emails": EMAIL_REGEX, # list of email addresses "name": r"Registrant Name: *(.+)", "org": r"Registrant Organization: *(.+)", "address": r"Registrant Street: *(.+)", "city": r"Registrant City: *(.+)", "state": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "country": r"Registrant Country: *(.+)", } def __init__(self, domain, text): if "Domain not found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisRf(WhoisRu): """Whois parser for .su domains""" def __init__(self, domain: str, text: str): WhoisRu.__init__(self, domain, text) class WhoisSu(WhoisRu): """Whois parser for .su domains""" def __init__(self, domain: str, text: str): WhoisRu.__init__(self, domain, text) class WhoisBz(WhoisRu): """Whois parser for .bz domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain_id": r"Registry Domain ID: *(.+)", "whois_server": r"Registrar WHOIS Server: *(.+)", "registrar": r"Registrar: *(.+)", "registrar_id": r"Registrar IANA ID: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "status": r"Domain Status: *(.+)", # list of statuses "registrant_id": r"Registry Registrant ID: *(.+)", "registrant_name": r"Registrant Name: *(.+)", "registrant_organization": r"Registrant Organization: *(.+)", "registrant_street": r"Registrant Street: *(.+)", "registrant_city": r"Registrant City: *(.+)", "registrant_state_province": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "registrant_country": r"Registrant Country: *(.+)", "registrant_phone_number": r"(?:Registrant Phone|Registrar Abuse Contact Phone): *(.+)", "registrant_phone_number_ext": r"Registrant Phone Ext: *(.+)", "registrant_email": r"(?:Registrant Email|Registrar Abuse Contact Email): *(.+)", "admin_id": r"Registry Admin ID: *(.+)", "admin_name": r"Admin Name: *(.+)", "admin_organization": r"Admin Organization: *(.+)", "admin_street": r"Admin Street: *(.+)", "admin_city": r"Admin City: *(.+)", "admin_state_province": r"Admin State/Province: *(.+)", "admin_postal_code": r"Admin Postal Code: *(.+)", "admin_country": r"Admin Country: *(.+)", "admin_country_code": r"Administrative Contact Country Code: *(.+)", "admin_phone_number": r"Admin Phone: *(.+)", "admin_phone_number_ext": r"Admin Phone Ext: *(.+)", "admin_email": r"Admin Email: *(.+)", "tech_id": r"Registry Tech ID: *(.+)", "tech_name": r"Tech Name: *(.+)", "tech_organization": r"Tech Organization: *(.+)", "tech_street": r"Tech Street: *(.+)", "tech_city": r"Tech City: *(.+)", "tech_state_province": r"Tech State/Province: *(.+)", "tech_postal_code": r"Tech Postal Code: *(.+)", "tech_country": r"Tech Country: *(.+)", "tech_phone_number": r"Tech Phone: *(.+)", "tech_phone_number_ext": r"Tech Phone Ext: *(.+)", "tech_email": r"Tech Email: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registrar Registration Expiration Date: *(.+)", "updated_date": r"Updated Date: *(.+)", "dnssec": r"DNSSEC: *(.+)", } def __init__(self, domain: str, text: str): if "No entries found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisCity(WhoisRu): """Whois parser for .city domains""" def __init__(self, domain: str, text: str): WhoisRu.__init__(self, domain, text) class WhoisStudio(WhoisBz): """Whois parser for .studio domains""" def __init__(self, domain: str, text: str): if "Domain not found." in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisStyle(WhoisRu): """Whois parser for .style domains""" def __init__(self, domain: str, text: str): WhoisRu.__init__(self, domain, text) class WhoisPyc(WhoisRu): """Whois parser for .рус domains""" def __init__(self, domain: str, text: str): WhoisRu.__init__(self, domain, text) class WhoisClub(WhoisEntry): """Whois parser for .us domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain__id": r"Domain ID: *(.+)", "registrar": r"Sponsoring Registrar: *(.+)", "registrar_id": r"Sponsoring Registrar IANA ID: *(.+)", "registrar_url": r"Registrar URL \(registration services\): *(.+)", # list of statuses "status": r"Domain Status: *(.+)", "registrant_id": r"Registrant ID: *(.+)", "registrant_name": r"Registrant Name: *(.+)", "registrant_address1": r"Registrant Address1: *(.+)", "registrant_address2": r"Registrant Address2: *(.+)", "registrant_city": r"Registrant City: *(.+)", "registrant_state_province": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "registrant_country": r"Registrant Country: *(.+)", "registrant_country_code": r"Registrant Country Code: *(.+)", "registrant_phone_number": r"Registrant Phone Number: *(.+)", "registrant_email": r"Registrant Email: *(.+)", "registrant_application_purpose": r"Registrant Application Purpose: *(.+)", "registrant_nexus_category": r"Registrant Nexus Category: *(.+)", "admin_id": r"Administrative Contact ID: *(.+)", "admin_name": r"Administrative Contact Name: *(.+)", "admin_address1": r"Administrative Contact Address1: *(.+)", "admin_address2": r"Administrative Contact Address2: *(.+)", "admin_city": r"Administrative Contact City: *(.+)", "admin_state_province": r"Administrative Contact State/Province: *(.+)", "admin_postal_code": r"Administrative Contact Postal Code: *(.+)", "admin_country": r"Administrative Contact Country: *(.+)", "admin_country_code": r"Administrative Contact Country Code: *(.+)", "admin_phone_number": r"Administrative Contact Phone Number: *(.+)", "admin_email": r"Administrative Contact Email: *(.+)", "admin_application_purpose": r"Administrative Application Purpose: *(.+)", "admin_nexus_category": r"Administrative Nexus Category: *(.+)", "billing_id": r"Billing Contact ID: *(.+)", "billing_name": r"Billing Contact Name: *(.+)", "billing_address1": r"Billing Contact Address1: *(.+)", "billing_address2": r"Billing Contact Address2: *(.+)", "billing_city": r"Billing Contact City: *(.+)", "billing_state_province": r"Billing Contact State/Province: *(.+)", "billing_postal_code": r"Billing Contact Postal Code: *(.+)", "billing_country": r"Billing Contact Country: *(.+)", "billing_country_code": r"Billing Contact Country Code: *(.+)", "billing_phone_number": r"Billing Contact Phone Number: *(.+)", "billing_email": r"Billing Contact Email: *(.+)", "billing_application_purpose": r"Billing Application Purpose: *(.+)", "billing_nexus_category": r"Billing Nexus Category: *(.+)", "tech_id": r"Technical Contact ID: *(.+)", "tech_name": r"Technical Contact Name: *(.+)", "tech_address1": r"Technical Contact Address1: *(.+)", "tech_address2": r"Technical Contact Address2: *(.+)", "tech_city": r"Technical Contact City: *(.+)", "tech_state_province": r"Technical Contact State/Province: *(.+)", "tech_postal_code": r"Technical Contact Postal Code: *(.+)", "tech_country": r"Technical Contact Country: *(.+)", "tech_country_code": r"Technical Contact Country Code: *(.+)", "tech_phone_number": r"Technical Contact Phone Number: *(.+)", "tech_email": r"Technical Contact Email: *(.+)", "tech_application_purpose": r"Technical Application Purpose: *(.+)", "tech_nexus_category": r"Technical Nexus Category: *(.+)", # list of name servers "name_servers": r"Name Server: *(.+)", "created_by_registrar": r"Created by Registrar: *(.+)", "last_updated_by_registrar": r"Last Updated by Registrar: *(.+)", "creation_date": r"Domain Registration Date: *(.+)", "expiration_date": r"Domain Expiration Date: *(.+)", "updated_date": r"Domain Last Updated Date: *(.+)", } def __init__(self, domain: str, text: str): if "Not found:" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisIo(WhoisEntry): """Whois parser for .io domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain__id": r"Registry Domain ID: *(.+)", "registrar": r"Registrar: *(.+)", "registrar_id": r"Registrar IANA ID: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "status": r"Domain Status: *(.+)", "registrant_name": r"Registrant Organization: *(.+)", "registrant_state_province": r"Registrant State/Province: *(.+)", "registrant_country": r"Registrant Country: *(.+)", "name_servers": r"Name Server: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "updated_date": r"Updated Date: *(.+)", } def __init__(self, domain: str, text: str): if "is available for purchase" in text or 'Domain not found.' in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisBiz(WhoisEntry): """Whois parser for .biz domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain__id": r"Domain ID: *(.+)", "registrar": r"Registrar: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "registrar_id": r"Registrar IANA ID: *(.+)", "registrar_email": r"Registrar Abuse Contact Email: *(.+)", "registrar_phone": r"Registrar Abuse Contact Phone: *(.+)", "status": r"Domain Status: *(.+)", # list of statuses "registrant_id": r"Registrant ID: *(.+)", "registrant_name": r"Registrant Name: *(.+)", "registrant_address": r"Registrant Street: *(.+)", "registrant_city": r"Registrant City: *(.+)", "registrant_state_province": r"Registrant State/Province: *(.+)", "registrant_postal_code": r"Registrant Postal Code: *(.+)", "registrant_country": r"Registrant Country: *(.+)", "registrant_country_code": r"Registrant Country Code: *(.+)", "registrant_phone_number": r"Registrant Phone: *(.+)", "registrant_email": r"Registrant Email: *(.+)", "admin_id": r"Registry Admin ID: *(.+)", "admin_name": r"Admin Name: *(.+)", "admin_organization": r"Admin Organization: *(.+)", "admin_address": r"Admin Street: *(.+)", "admin_city": r"Admin City: *(.+)", "admin_state_province": r"Admin State/Province: *(.+)", "admin_postal_code": r"Admin Postal Code: *(.+)", "admin_country": r"Admin Country: *(.+)", "admin_phone_number": r"Admin Phone: *(.+)", "admin_email": r"Admin Email: *(.+)", "tech_id": r"Registry Tech ID: *(.+)", "tech_name": r"Tech Name: *(.+)", "tech_organization": r"Tech Organization: *(.+)", "tech_address": r"Tech Street: *(.+)", "tech_city": r"Tech City: *(.+)", "tech_state_province": r"Tech State/Province: *(.+)", "tech_postal_code": r"Tech Postal Code: *(.+)", "tech_country": r"Tech Country: *(.+)", "tech_phone_number": r"Tech Phone: *(.+)", "tech_email": r"Tech Email: *(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registrar Registration Expiration Date: *(.+)", "updated_date": r"Updated Date: *(.+)", } def __init__(self, domain: str, text: str): if "No Data Found" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisMobi(WhoisEntry): """Whois parser for .mobi domains""" regex: dict[str, str] = { "domain_id": r"Registry Domain ID:(.+)", "domain_name": r"Domain Name:(.+)", "creation_date": r"Creation Date:(.+)", "updated_date": r"Updated Date:(.+)", "expiration_date": r"Registry Expiry Date: (.+)", "registrar": r"Registrar:(.+)", "status": r"Domain Status:(.+)", # list of statuses "registrant_id": r"Registrant ID:(.+)", "registrant_name": r"Registrant Name:(.+)", "registrant_org": r"Registrant Organization:(.+)", "registrant_address": r"Registrant Address:(.+)", "registrant_address2": r"Registrant Address2:(.+)", "registrant_address3": r"Registrant Address3:(.+)", "registrant_city": r"Registrant City:(.+)", "registrant_state_province": r"Registrant State/Province:(.+)", "registrant_country": r"Registrant Country/Economy:(.+)", "registrant_postal_code": r"Registrant Postal Code:(.+)", "registrant_phone": r"Registrant Phone:(.+)", "registrant_phone_ext": r"Registrant Phone Ext\.:(.+)", "registrant_fax": r"Registrant FAX:(.+)", "registrant_fax_ext": r"Registrant FAX Ext\.:(.+)", "registrant_email": r"Registrant E-mail:(.+)", "admin_id": r"Admin ID:(.+)", "admin_name": r"Admin Name:(.+)", "admin_org": r"Admin Organization:(.+)", "admin_address": r"Admin Address:(.+)", "admin_address2": r"Admin Address2:(.+)", "admin_address3": r"Admin Address3:(.+)", "admin_city": r"Admin City:(.+)", "admin_state_province": r"Admin State/Province:(.+)", "admin_country": r"Admin Country/Economy:(.+)", "admin_postal_code": r"Admin Postal Code:(.+)", "admin_phone": r"Admin Phone:(.+)", "admin_phone_ext": r"Admin Phone Ext\.:(.+)", "admin_fax": r"Admin FAX:(.+)", "admin_fax_ext": r"Admin FAX Ext\.:(.+)", "admin_email": r"Admin E-mail:(.+)", "tech_id": r"Tech ID:(.+)", "tech_name": r"Tech Name:(.+)", "tech_org": r"Tech Organization:(.+)", "tech_address": r"Tech Address:(.+)", "tech_address2": r"Tech Address2:(.+)", "tech_address3": r"Tech Address3:(.+)", "tech_city": r"Tech City:(.+)", "tech_state_province": r"Tech State/Province:(.+)", "tech_country": r"Tech Country/Economy:(.+)", "tech_postal_code": r"Tech Postal Code:(.+)", "tech_phone": r"Tech Phone:(.+)", "tech_phone_ext": r"Tech Phone Ext\.:(.+)", "tech_fax": r"Tech FAX:(.+)", "tech_fax_ext": r"Tech FAX Ext\.:(.+)", "tech_email": r"Tech E-mail:(.+)", "name_servers": r"Name Server: *(.+)", # list of name servers } def __init__(self, domain: str, text: str): if "NOT FOUND" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisKg(WhoisEntry): """Whois parser for .kg domains""" regex: dict[str, str] = { "domain_name": r"Domain\s*([\w]+\.[\w]{2,5})", "registrar": r"Domain support: \s*(.+)", "registrant_name": r"Name: *(.+)", "registrant_address": r"Address: *(.+)", "registrant_phone_number": r"phone: *(.+)", "registrant_email": r"Email: *(.+)", # # list of name servers "name_servers": r"Name servers in the listed order: *([\d\w\.\s]+)", # 'name_servers': r'([\w]+\.[\w]+\.[\w]{2,5}\s*\d{1,3}\.\d]{1,3}\.[\d]{1-3}\.[\d]{1-3})', "creation_date": r"Record created: *(.+)", "expiration_date": r"Record expires on:\s*(.+)", "updated_date": r"Record last updated on:\s*(.+)", } def __init__(self, domain: str, text: str): if "Data not found. This domain is available for registration" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisChLi(WhoisEntry): """Whois Parser for .ch and .li domains""" regex: dict[str, str] = { "domain_name": r"\nDomain name:\n*(.+)", "registrant_name": r"Holder of domain name:\s*(?:.*\n){1}\s*(.+)", "registrant_address": r"Holder of domain name:\s*(?:.*\n){2}\s*(.+)", "registrar": r"Registrar:\n*(.+)", "creation_date": r"First registration date:\n*(.+)", "dnssec": r"DNSSEC:*([\S]+)", "tech-c": r"Technical contact:\n*([\n\s\S]+)\nRegistrar:", "name_servers": r"Name servers:\n *([\n\S\s]+)", } def __init__(self, domain: str, text: str): if "We do not have an entry in our database matching your query." in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisID(WhoisEntry): """Whois parser for .id domains""" regex: dict[str, str] = { "domain_id": r"Registry Domain ID:(.+)", "domain_name": r"Domain Name:(.+)", "creation_date": r"Creation Date:(.+)", "expiration_date": r"Registry Expiry Date:(.+)", "updated_date": r"Updated Date:(.+)", "dnssec": r"DNSSEC:(.+)", "registrar": r"Registrar:(.+)", "registrar_city": r"Sponsoring Registrar City:(.+)", "registrar_postal_code": r"Sponsoring Registrar Postal Code:(.+)", "registrar_country": r"Sponsoring Registrar Country:(.+)", "registrar_phone": r"Sponsoring Registrar Phone:(.+)", "registrar_email": r"Sponsoring Registrar Contact Email:(.+)", "registrar_url": r"Registrar URL:(.+)", "status": r"Status:(.+)", # list of statuses "registrant_id": r"Registrant ID:(.+)", "registrant_name": r"Registrant Name:(.+)", "registrant_org": r"Registrant Organization:(.+)", "registrant_address": r"Registrant Street1:(.+)", "registrant_address2": r"Registrant Street2:(.+)", "registrant_address3": r"Registrant Street3:(.+)", "registrant_city": r"Registrant City:(.+)", "registrant_country": r"Registrant Country:(.+)", "registrant_postal_code": r"Registrant Postal Code:(.+)", "registrant_phone": r"Registrant Phone:(.+)", "registrant_fax": r"Registrant FAX:(.+)", "registrant_email": r"Registrant Email:(.+)", "name_servers": r"Name Server:(.+)", # list of name servers } def __init__(self, domain: str, text: str): if "NOT FOUND" in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisSe(WhoisEntry): """Whois parser for .se domains""" regex: dict[str, str] = { "domain_name": r"domain\.*: *(.+)", "registrant_name": r"holder\.*: *(.+)", "creation_date": r"created\.*: *(.+)", "updated_date": r"modified\.*: *(.+)", "expiration_date": r"expires\.*: *(.+)", "transfer_date": r"transferred\.*: *(.+)", "name_servers": r"nserver\.*: *(.+)", # list of name servers "dnssec": r"dnssec\.*: *(.+)", "status": r"status\.*: *(.+)", # list of statuses "registrar": r"registrar: *(.+)", } def __init__(self, domain: str, text: str): if "not found." in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisJobs(WhoisEntry): """Whois parser for .jobs domains""" regex: dict[str, str] = { "domain_name": r"Domain Name: *(.+)", "domain_id": r"Registry Domain ID: *(.+)", "status": r"Domain Status: *(.+)", "whois_server": r"Registrar WHOIS Server: *(.+)", "registrar_url": r"Registrar URL: *(.+)", "registrar_name": r"Registrar: *(.+)", "registrar_email": r"Registrar Abuse Contact Email: *(.+)", "registrar_phone": r"Registrar Abuse Contact Phone: *(.+)", "registrant_name": r"Registrant Name: (.+)", "registrant_id": r"Registry Registrant ID: (.+)", "registrant_organization": r"Registrant Organization: (.+)", "registrant_city": r"Registrant City: (.*)", "registrant_street": r"Registrant Street: (.*)", "registrant_state_province": r"Registrant State/Province: (.*)", "registrant_postal_code": r"Registrant Postal Code: (.*)", "registrant_country": r"Registrant Country: (.+)", "registrant_phone": r"Registrant Phone: (.+)", "registrant_fax": r"Registrant Fax: (.+)", "registrant_email": r"Registrant Email: (.+)", "admin_name": r"Admin Name: (.+)", "admin_id": r"Registry Admin ID: (.+)", "admin_organization": r"Admin Organization: (.+)", "admin_city": r"Admin City: (.*)", "admin_street": r"Admin Street: (.*)", "admin_state_province": r"Admin State/Province: (.*)", "admin_postal_code": r"Admin Postal Code: (.*)", "admin_country": r"Admin Country: (.+)", "admin_phone": r"Admin Phone: (.+)", "admin_fax": r"Admin Fax: (.+)", "admin_email": r"Admin Email: (.+)", "billing_name": r"Billing Name: (.+)", "billing_id": r"Registry Billing ID: (.+)", "billing_organization": r"Billing Organization: (.+)", "billing_city": r"Billing City: (.*)", "billing_street": r"Billing Street: (.*)", "billing_state_province": r"Billing State/Province: (.*)", "billing_postal_code": r"Billing Postal Code: (.*)", "billing_country": r"Billing Country: (.+)", "billing_phone": r"Billing Phone: (.+)", "billing_fax": r"Billing Fax: (.+)", "billing_email": r"Billing Email: (.+)", "tech_name": r"Tech Name: (.+)", "tech_id": r"Registry Tech ID: (.+)", "tech_organization": r"Tech Organization: (.+)", "tech_city": r"Tech City: (.*)", "tech_street": r"Tech Street: (.*)", "tech_state_province": r"Tech State/Province: (.*)", "tech_postal_code": r"Tech Postal Code: (.*)", "tech_country": r"Tech Country: (.+)", "tech_phone": r"Tech Phone: (.+)", "tech_fax": r"Tech Fax: (.+)", "tech_email": r"Tech Email: (.+)", "updated_date": r"Updated Date: *(.+)", "creation_date": r"Creation Date: *(.+)", "expiration_date": r"Registry Expiry Date: *(.+)", "name_servers": r"Name Server: *(.+)", } def __init__(self, domain: str, text: str): if "not found." in text: raise WhoisDomainNotFoundError(text) else: WhoisEntry.__init__(self, domain, text, self.regex) class WhoisIt(WhoisEntry): """Whois parser for .it domains""" regex: dict[str, str] = { "domain_name": r"Domain: *(.+)", "creation_date": r"(? Optional[str]: """Search the initial TLD lookup results for the regional-specific whois server for getting contact details. """ nhost = None match = re.compile( r"Domain Name: {}\s*.*?Whois Server: (.*?)\s".format(query), flags=re.IGNORECASE | re.DOTALL, ).search(buf) if match: nhost = match.group(1) # if the whois address is domain.tld/something then # s.connect((hostname, 43)) does not work if nhost.count("/") > 0: nhost = None elif hostname == NICClient.ANICHOST: for nichost in NICClient.ip_whois: if buf.find(nichost) != -1: nhost = nichost break return nhost @staticmethod def get_socks_socket(): try: import socks except ImportError as e: logger.error( "You need to install the Python socks module. Install PIP " "(https://bootstrap.pypa.io/get-pip.py) and then 'pip install PySocks'" ) raise e socks_user, socks_password = None, None if "@" in os.environ["SOCKS"]: creds, proxy = os.environ["SOCKS"].split("@") socks_user, socks_password = creds.split(":") else: proxy = os.environ["SOCKS"] socksproxy, port = proxy.split(":") socks_proto = socket.AF_INET if socket.AF_INET6 in [ sock[0] for sock in socket.getaddrinfo(socksproxy, port) ]: socks_proto = socket.AF_INET6 s = socks.socksocket(socks_proto) s.set_proxy( socks.SOCKS5, socksproxy, int(port), True, socks_user, socks_password ) return s def _connect(self, hostname: str, timeout: int) -> socket.socket: """Resolve WHOIS IP address and connect to its TCP 43 port.""" port = 43 if "SOCKS" in os.environ: s = NICClient.get_socks_socket() s.settimeout(timeout) s.connect((hostname, port)) return s # Resolve all IP addresses for the WHOIS server addr_infos = socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM) if self.prefer_ipv6: # Sort by family to prioritize AF_INET6 (10) over AF_INET (2) addr_infos.sort(key=lambda x: x[0], reverse=True) last_err = None # Attempt to connect to each related IP address until one works for family, sock_type, proto, __, sockaddr in addr_infos: s = None try: s = socket.socket(family, sock_type, proto) s.settimeout(timeout) s.connect(sockaddr) return s except socket.error as e: last_err = e if s: s.close() continue raise last_err or socket.error(f"Could not connect to {hostname}") def findwhois_iana(self, tld: str, timeout: int = 10) -> Optional[str]: s = self._connect("whois.iana.org", timeout) s.send(bytes(tld, "utf-8") + b"\r\n") response = b"" while True: d = s.recv(4096) response += d if not d: break s.close() match = re.search(r"whois:[ \t]+(.*?)\n", response.decode("utf-8")) if match and match.group(1): return match.group(1) else: return None def whois( self, query: str, hostname: str, flags: int, many_results: bool = False, quiet: bool = False, timeout: int = 10, ignore_socket_errors: bool = True ) -> str: """Perform initial lookup with TLD whois server then, if the quick flag is false, search that result for the region-specific whois server and do a lookup there for contact details. If `quiet` is `True`, will not send a message to logger when a socket error is encountered. Uses `timeout` as a number of seconds to set as a timeout on the socket. If `ignore_socket_errors` is `False`, will raise an exception instead of returning a string containing the error. """ response = b"" s = None try: # socket.connect in a try, in order to allow things like looping whois on different domains without # stopping on timeouts: https://stackoverflow.com/questions/25447803/python-socket-connection-exception s = self._connect(hostname, timeout) if hostname == NICClient.DENICHOST: query_bytes = "-T dn,ace -C UTF-8 " + query elif hostname == NICClient.DK_HOST: query_bytes = " --show-handles " + query elif hostname.endswith(".jp"): query_bytes = query + "/e" elif hostname.endswith(NICClient.QNICHOST_TAIL) and many_results: query_bytes = "=" + query else: query_bytes = query s.send(bytes(query_bytes, "utf-8") + b"\r\n") # recv returns bytes while True: d = s.recv(4096) response += d if not d: break nhost = None response_str = response.decode("utf-8", "replace") if 'with "=xxx"' in response_str: return self.whois(query, hostname, flags, True, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout) if flags & NICClient.WHOIS_RECURSE and nhost is None: nhost = self.findwhois_server(response_str, hostname, query) if nhost is not None and nhost != "": response_str += self.whois(query, nhost, 0, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout) except socket.error as e: if not quiet: logger.error( "Error trying to connect to socket: closing socket - {}".format(e) ) if ignore_socket_errors: # 'response' is assigned a value (also a str) even on socket timeout response_str = "Socket not responding: {}".format(e) else: raise e finally: if s: s.close() return response_str def choose_server(self, domain: str, timeout: int = 10) -> Optional[str]: """Choose initial lookup NIC host""" domain = domain.encode("idna").decode("utf-8") if domain.endswith("-NORID"): return NICClient.NORIDHOST if domain.endswith("id"): return NICClient.PANDIHOST if domain.endswith("hr"): return NICClient.HR_HOST if domain.endswith(".pp.ua"): return NICClient.PPUA_HOST domain_parts = domain.split(".") if len(domain_parts) < 2: return None tld = domain_parts[-1] if tld[0].isdigit(): return NICClient.ANICHOST elif tld == "ai": return NICClient.AI_HOST elif tld == "app": return NICClient.APP_HOST elif tld == "ar": return NICClient.AR_HOST elif tld == "bw": return NICClient.BW_HOST elif tld == "by": return NICClient.BY_HOST elif tld == "ca": return NICClient.CA_HOST elif tld == "chat": return NICClient.CHAT_HOST elif tld == "cl": return NICClient.CL_HOST elif tld == "cm": return NICClient.CM_HOST elif tld == "cr": return NICClient.CR_HOST elif tld == "de": return NICClient.DE_HOST elif tld == "dev": return NICClient.DEV_HOST elif tld == "dk": return NICClient.DK_HOST elif tld == "do": return NICClient.DO_HOST elif tld == "games": return NICClient.GAMES_HOST elif tld == "goog" or tld == "google": return NICClient.GOOGLE_HOST elif tld == "group": return NICClient.GROUP_HOST elif tld == "hk": return NICClient.HK_HOST elif tld == "hn": return NICClient.HN_HOST elif tld == "ist": return NICClient.IST_HOST elif tld == "jobs": return NICClient.JOBS_HOST elif tld == "jp": return NICClient.JP_HOST elif tld == "kz": return NICClient.KZ_HOST elif tld == "lat": return NICClient.LAT_HOST elif tld == "li": return NICClient.LI_HOST elif tld == "live": return NICClient.LIVE_HOST elif tld == "lt": return NICClient.LT_HOST elif tld == "market": return NICClient.MARKET_HOST elif tld == "money": return NICClient.MONEY_HOST elif tld == "mx": return NICClient.MX_HOST elif tld == "nl": return NICClient.NL_HOST elif tld == "online": return NICClient.ONLINE_HOST elif tld == "ooo": return NICClient.OOO_HOST elif tld == "page": return NICClient.PAGE_HOST elif tld == "pe": return NICClient.PE_HOST elif tld == "website": return NICClient.WEBSITE_HOST elif tld == "za": return NICClient.ZA_HOST elif tld == "ru": return NICClient.RU_HOST elif tld == "bz": return NICClient.RU_HOST elif tld == "city": return NICClient.RU_HOST elif tld == "design": return NICClient.DESIGN_HOST elif tld == "studio": return NICClient.STUDIO_HOST elif tld == "style": return NICClient.RU_HOST elif tld == "su": return NICClient.RU_HOST elif tld == "рус" or tld == "xn--p1acf": return NICClient.RU_HOST elif tld == "direct": return NICClient.IDS_HOST elif tld == "group": return NICClient.IDS_HOST elif tld == "immo": return NICClient.IDS_HOST elif tld == "life": return NICClient.IDS_HOST elif tld == "fashion": return NICClient.GDD_HOST elif tld == "vip": return NICClient.GDD_HOST elif tld == "shop": return NICClient.SHOP_HOST elif tld == "store": return NICClient.STORE_HOST elif tld == "дети" or tld == "xn--d1acj3b": return NICClient.DETI_HOST elif tld == "москва" or tld == "xn--80adxhks": return NICClient.MOSKVA_HOST elif tld == "рф" or tld == "xn--p1ai": return NICClient.RF_HOST elif tld == "орг" or tld == "xn--c1avg": return NICClient.PIR_HOST elif tld == "ng": return NICClient.NG_HOST elif tld == "укр" or tld == "xn--j1amh": return NICClient.UKR_HOST elif tld == "tn": return NICClient.TN_HOST elif tld == "sbs": return NICClient.SBS_HOST elif tld == "sg": return NICClient.SG_HOST elif tld == "site": return NICClient.SITE_HOST elif tld == "ga": return NICClient.GA_HOST elif tld == "xyz": return NICClient.XYZ_HOST else: return self.findwhois_iana(tld, timeout=timeout) # server = tld + NICClient.QNICHOST_TAIL # try: # socket.gethostbyname(server) # except socket.gaierror: # server = NICClient.QNICHOST_HEAD + tld # return server def whois_lookup( self, options: Optional[dict], query_arg: str, flags: int, quiet: bool = False, ignore_socket_errors: bool = True, timeout: int = 10 ) -> str: """Main entry point: Perform initial lookup on TLD whois server, or other server to get region-specific whois server, then if quick flag is false, perform a second lookup on the region-specific server for contact records. If `quiet` is `True`, no message will be printed to STDOUT when a socket error is encountered. If `ignore_socket_errors` is `False`, will raise an exception instead of returning a string containing the error.""" nichost = None # whoud happen when this function is called by other than main if options is None: options = {} if ("whoishost" not in options or options["whoishost"] is None) and ( "country" not in options or options["country"] is None ): self.use_qnichost = True options["whoishost"] = NICClient.NICHOST if not (flags & NICClient.WHOIS_QUICK): flags |= NICClient.WHOIS_RECURSE if "country" in options and options["country"] is not None: result = self.whois( query_arg, options["country"] + NICClient.QNICHOST_TAIL, flags, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout ) elif self.use_qnichost: nichost = self.choose_server(query_arg, timeout=timeout) if nichost is not None: result = self.whois(query_arg, nichost, flags, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout) else: result = "" else: result = self.whois(query_arg, options["whoishost"], flags, quiet=quiet, ignore_socket_errors=ignore_socket_errors, timeout=timeout) return result def parse_command_line(argv: list[str]) -> tuple[optparse.Values, list[str]]: """Options handling mostly follows the UNIX whois(1) man page, except long-form options can also be used. """ usage = "usage: %prog [options] name" parser = optparse.OptionParser(add_help_option=False, usage=usage) parser.add_option( "-a", "--arin", action="store_const", const=NICClient.ANICHOST, dest="whoishost", help="Lookup using host " + NICClient.ANICHOST, ) parser.add_option( "-A", "--apnic", action="store_const", const=NICClient.PNICHOST, dest="whoishost", help="Lookup using host " + NICClient.PNICHOST, ) parser.add_option( "-b", "--abuse", action="store_const", const=NICClient.ABUSEHOST, dest="whoishost", help="Lookup using host " + NICClient.ABUSEHOST, ) parser.add_option( "-c", "--country", action="store", type="string", dest="country", help="Lookup using country-specific NIC", ) parser.add_option( "-d", "--mil", action="store_const", const=NICClient.DNICHOST, dest="whoishost", help="Lookup using host " + NICClient.DNICHOST, ) parser.add_option( "-g", "--gov", action="store_const", const=NICClient.GNICHOST, dest="whoishost", help="Lookup using host " + NICClient.GNICHOST, ) parser.add_option( "-h", "--host", action="store", type="string", dest="whoishost", help="Lookup using specified whois host", ) parser.add_option( "-i", "--nws", action="store_const", const=NICClient.INICHOST, dest="whoishost", help="Lookup using host " + NICClient.INICHOST, ) parser.add_option( "-I", "--iana", action="store_const", const=NICClient.IANAHOST, dest="whoishost", help="Lookup using host " + NICClient.IANAHOST, ) parser.add_option( "-l", "--lcanic", action="store_const", const=NICClient.LNICHOST, dest="whoishost", help="Lookup using host " + NICClient.LNICHOST, ) parser.add_option( "-m", "--ra", action="store_const", const=NICClient.MNICHOST, dest="whoishost", help="Lookup using host " + NICClient.MNICHOST, ) parser.add_option( "-p", "--port", action="store", type="int", dest="port", help="Lookup using specified tcp port", ) parser.add_option( "--prefer-ipv6", action="store_true", dest="prefer_ipv6", default=False, help="Prioritize IPv6 resolution for WHOIS servers", ) parser.add_option( "-Q", "--quick", action="store_true", dest="b_quicklookup", help="Perform quick lookup", ) parser.add_option( "-r", "--ripe", action="store_const", const=NICClient.RNICHOST, dest="whoishost", help="Lookup using host " + NICClient.RNICHOST, ) parser.add_option( "-R", "--ru", action="store_const", const="ru", dest="country", help="Lookup Russian NIC", ) parser.add_option( "-6", "--6bone", action="store_const", const=NICClient.SNICHOST, dest="whoishost", help="Lookup using host " + NICClient.SNICHOST, ) parser.add_option( "-n", "--ina", action="store_const", const=NICClient.PANDIHOST, dest="whoishost", help="Lookup using host " + NICClient.PANDIHOST, ) parser.add_option( "-t", "--timeout", action="store", type="int", dest="timeout", help="Set timeout for WHOIS request", ) parser.add_option("-?", "--help", action="help") return parser.parse_args(argv) if __name__ == "__main__": flags = 0 options, args = parse_command_line(sys.argv) nic_client = NICClient(prefer_ipv6=options.prefer_ipv6) if options.b_quicklookup: flags = flags | NICClient.WHOIS_QUICK logger.debug(nic_client.whois_lookup(options.__dict__, args[1], flags))