diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9bc0ca8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +version: 2 +updates: + # Keep GitHub Actions up to date + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + labels: + - "dependencies" + + # Keep Python dependencies up to date + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + labels: + - "dependencies" diff --git a/.github/workflows/create-release-from-tag.yml b/.github/workflows/create-release-from-tag.yml index 392c49d..737935c 100644 --- a/.github/workflows/create-release-from-tag.yml +++ b/.github/workflows/create-release-from-tag.yml @@ -1,19 +1,77 @@ -name: Releases +name: Publish and Release on: push: tags: - - '1.202[34][0-9][0-9].[0-9]' + - "1.20[2-9][0-9][0-9][0-9][0-9][0-9].[0-9]*" -jobs: +permissions: + contents: read +jobs: build: + name: Build distribution packages + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Set up Python 3.10 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.10" + + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build hatchling + + - name: Build sdist and wheel + run: python -m build + + - name: Upload built artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: dist + path: dist/ + + publish-to-pypi: + name: Publish to PyPI + needs: build runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/whoisdomain permissions: - contents: write + id-token: write + steps: + - name: Download built artifacts + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: dist + path: dist/ + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + + create-github-release: + name: Create GitHub release + needs: build + runs-on: ubuntu-latest + permissions: + contents: write steps: - - uses: actions/checkout@v3 - - uses: ncipollo/release-action@v1 - with: - bodyFile: "README.md" + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Download built artifacts + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: dist + path: dist/ + + - name: Create GitHub release + uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0 + with: + bodyFile: "README.md" + artifacts: "dist/*" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 56151ff..63c3c42 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,24 +1,90 @@ -name: "lint" -on: [push, pull_request] +name: "CI" +on: + push: + branches: ["**"] + pull_request: + branches: ["**"] +permissions: + contents: read jobs: - mypy: + lint: + name: Lint and type-check runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Check out repository - uses: actions/checkout@v4 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Set up Python 3.9 - uses: actions/setup-python@v5 + - name: Set up Python 3.10 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: 3.9 + python-version: "3.10" - name: Install dependencies run: | python -m pip install --upgrade pip - pip install mypy tld - python3 -m pip install types-redis - python3 -m pip install types-requests + pip install ruff mypy pylint tld types-redis types-requests python-dateutil - - name: Run mypy - run: mypy --strict *.py whoisdomain + - name: Run ruff format check + run: ruff format --check *.py whoisdomain/ + + - name: Run ruff lint + run: ruff check *.py whoisdomain/ + + - name: Run mypy (strict) + run: mypy --strict --no-incremental *.py whoisdomain/ + + - name: Run pylint + run: pylint --rcfile=.pylintrc whoisdomain/ + + test: + name: Test on Python ${{ matrix.python-version }} + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + steps: + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Install package + run: | + python -m pip install --upgrade pip + pip install . + + - name: Smoke test + run: python -c "import whoisdomain; print(whoisdomain.getVersion())" + + build: + name: Build distribution packages + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Set up Python 3.10 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.10" + + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build hatchling + + - name: Build sdist and wheel + run: python -m build + + - name: Upload built artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: dist + path: dist/ diff --git a/.gitignore b/.gitignore index 3a9f0b4..51f26cf 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,4 @@ out 22 lint.txt pylint.txt +vtmp/ diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index 7ee32e1..0000000 --- a/.pylintrc +++ /dev/null @@ -1,641 +0,0 @@ -[MAIN] - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Clear in-memory caches upon conclusion of linting. Useful if running pylint -# in a server-like mode. -clear-cache-post-run=yes - -# Load and enable all available extensions. Use --list-extensions to see a list -# all available extensions. -#enable-all-extensions= - -# In error mode, messages with a category besides ERROR or FATAL are -# suppressed, and no reports are done by default. Error mode is compatible with -# disabling specific errors. -#errors-only= - -# Always return a 0 (non-error) status code, even if lint errors are found. -# This is primarily useful in continuous integration scripts. -#exit-zero= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-allow-list= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. (This is an alternative name to extension-pkg-allow-list -# for backward compatibility.) -extension-pkg-whitelist= - -# Return non-zero exit code if any of these messages/categories are detected, -# even if score is above --fail-under value. Syntax same as enable. Messages -# specified are enabled, while categories only check already-enabled messages. -fail-on= - -# Specify a score threshold under which the program will exit with error. -fail-under=8 - -# Interpret the stdin as a python script, whose filename needs to be passed as -# the module_or_package argument. -#from-stdin= - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regular expressions patterns to the -# ignore-list. The regex matches against paths and can be in Posix or Windows -# format. Because '\\' represents the directory delimiter on Windows systems, -# it can't be used as an escape character. -ignore-paths= - -# Files or directories matching the regular expression patterns are skipped. -# The regex matches against base names, not paths. The default value ignores -# Emacs file locks -ignore-patterns=^\.# - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use, and will cap the count on Windows to -# avoid hangs. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.9 - -# Discover python modules and packages in the file system subtree. -recursive=yes - -# Add paths to the list of the source roots. Supports globbing patterns. The -# source root is an absolute path or a path relative to the current working -# directory used to determine a package namespace for modules located under the -# source root. -source-roots= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=no - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - -# In verbose mode, extra non-checker-related info will be displayed. -#verbose= - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=any - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. If left empty, argument names will be checked with the set -# naming style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=any - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. If left empty, attribute names will be checked with the set naming -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Bad variable names regexes, separated by a comma. If names match any regex, -# they will always be refused -bad-names-rgxs= - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. If left empty, class attribute names will be checked -# with the set naming style. -#class-attribute-rgx= - -# Naming style matching correct class constant names. -class-const-naming-style=UPPER_CASE - -# Regular expression matching correct class constant names. Overrides class- -# const-naming-style. If left empty, class constant names will be checked with -# the set naming style. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. If left empty, class names will be checked with the set naming style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. If left empty, constant names will be checked with the set naming -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=any - -# Regular expression matching correct function names. Overrides function- -# naming-style. If left empty, function names will be checked with the set -# naming style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Good variable names regexes, separated by a comma. If names match any regex, -# they will always be accepted -good-names-rgxs= - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. If left empty, inline iteration names will be checked -# with the set naming style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=any - -# Regular expression matching correct method names. Overrides method-naming- -# style. If left empty, method names will be checked with the set naming style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=any - -# Regular expression matching correct module names. Overrides module-naming- -# style. If left empty, module names will be checked with the set naming style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Regular expression matching correct type alias names. If left empty, type -# alias names will be checked with the set naming style. -#typealias-rgx= - -# Regular expression matching correct type variable names. If left empty, type -# variable names will be checked with the set naming style. -#typevar-rgx= - -# Naming style matching correct variable names. -variable-naming-style=any - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. If left empty, variable names will be checked with the set -# naming style. -#variable-rgx= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - asyncSetUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[DESIGN] - -# List of regular expressions of class ancestor names to ignore when counting -# public methods (see R0903) -exclude-too-few-public-methods= - -# List of qualified class names to ignore when counting class parents (see -# R0901) -ignored-parents= - -# Maximum number of arguments for function / method. -max-args=25 - -# Maximum number of attributes for a class (see R0902). -max-attributes=20 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=50 - -# Maximum number of locals for function / method body. -max-locals=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=25 - -# Maximum number of statements in function / method body. -max-statements=250 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=0 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when caught. -overgeneral-exceptions=builtins.BaseException,builtins.Exception - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=160 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow explicit reexports by alias from a package __init__. -allow-reexport-from-package=no - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules= - -# Output a graph (.gv or any supported image format) of external dependencies -# to the given file (report RP0402 must not be disabled). -ext-import-graph= - -# Output a graph (.gv or any supported image format) of all (i.e. internal and -# external) dependencies to the given file (report RP0402 must not be -# disabled). -import-graph= - -# Output a graph (.gv or any supported image format) of internal dependencies -# to the given file (report RP0402 must not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[LOGGING] - -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=new - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, -# UNDEFINED. -confidence=HIGH, - CONTROL_FLOW, - INFERENCE, - INFERENCE_FAILURE, - UNDEFINED - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then re-enable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - use-symbolic-message-instead, - pointless-string-statement, - unused-argument, - global-statement, - unused-variable, - global-variable-not-assigned, - attribute-defined-outside-init, - missing-function-docstring, -# deprecated-pragma, - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[METHOD_ARGS] - -# List of qualified names (i.e., library.method) which require a timeout -# parameter e.g. 'requests.api.get,requests.api.post' -timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME - -# Regular expression of note tags to take in consideration. -notes-rgx= - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit,argparse.parse_error - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'fatal', 'error', 'warning', 'refactor', -# 'convention', and 'info' which contain the number of messages in each -# category, as well as 'statement' which is the total number of statements -# analyzed. This score is used by the global evaluation report (RP0004). -evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -#output-format= - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=yes - -# Signatures are removed from the similarity computation -ignore-signatures=yes - -# Minimum lines number of a similarity. -min-similarity-lines=8 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: en (aspell), en_AG -# (hunspell), en_AU (aspell), en_BS (hunspell), en_BW (hunspell), en_BZ -# (hunspell), en_CA (aspell), en_DK (hunspell), en_GB (aspell), en_GH -# (hunspell), en_HK (hunspell), en_IE (hunspell), en_IN (hunspell), en_JM -# (hunspell), en_MW (hunspell), en_NA (hunspell), en_NG (hunspell), en_NZ -# (hunspell), en_PH (hunspell), en_SG (hunspell), en_TT (hunspell), en_US -# (aspell), en_ZA (hunspell), en_ZM (hunspell), en_ZW (hunspell). -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear at the beginning of a comment and should not be checked. -spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of symbolic message names to ignore for Mixin members. -ignored-checks-for-mixins=no-member, - not-async-context-manager, - not-context-manager, - attribute-defined-outside-init - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# Regex pattern to define which classes are considered mixins. -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of names allowed to shadow builtins -allowed-redefined-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/Df-36 b/Df-36 deleted file mode 100644 index be90701..0000000 --- a/Df-36 +++ /dev/null @@ -1,9 +0,0 @@ -FROM python:3.6-alpine - -RUN apk update --no-cache -RUN apk add --no-cache whois - -VOLUME /context -ENTRYPOINT ["/context/test2.py"] - -# CMD ["--help"] diff --git a/Makefile b/Makefile index 473455b..7543840 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,5 @@ # ========================================================== -# ========================================================== -# https://docs.secure.software/cli - -SHELL := /bin/bash -l +SHELL := /bin/bash -l export SHELL VENV := ./vtmp/ @@ -19,18 +16,9 @@ PIP_INSTALL := pip3 -q \ # ========================================== # Code formatting and checks -PY_FILES := *.py bin/*.py whoisdomain/ - -LINE_LENGTH := 160 -PL_LINTERS := eradicate,mccabe,pycodestyle,pyflakes,pylint -PL_LINTERS := eradicate,mccabe,pycodestyle,pylint +PY_FILES := *.py whoisdomain/ -# C0114 Missing module docstring [pylint] -# C0115 Missing class docstring [pylint] -# C0116 Missing function or method docstring [pylint] -# E203 whitespace before ':' [pycodestyle] - -PL_IGNORE := C0114,C0115,C0116,E203,C901 +# LINE_LENGTH := 160 MYPY_INSTALL := \ types-requests \ @@ -40,47 +28,22 @@ COMMON_VENV := rm -rf $(VENV); \ $(MIN_PYTHON_VERSION) -m venv $(VENV); \ source ./$(VENV)/bin/activate; -WHAT := whoisdomain -DOCKER_WHO := mbootgithub - -TEST_OPTIONS_ALL = \ - --withPublicSuffix \ - --extractServers \ - --stripHttpStatus - -.PHONY: TestSimple TestSimple2 TestAll clean - -first: prep test1 test2 test3 # test4 - # -------------------------------------------------- # reformat, lint and verify basics # -------------------------------------------------- -prep: clean black pylama mypy +prep: clean format check mypy clean: rm -rf tmp/* 1 2 out *.out *.1 *.2 rm -rf $(VENV) rm -f ./rl-secure-list-*.txt rm -f ./rl-secure-status-*.txt - # docker container prune -f - # docker image prune --all --force - # docker image ls -a -black: - $(COMMON_VENV) \ - $(PIP_INSTALL) black; \ - black \ - --line-length $(LINE_LENGTH) \ - $(PY_FILES) +format: + ruff format $(PY_FILES) -pylama: - $(COMMON_VENV) \ - $(PIP_INSTALL) setuptools pylama; \ - pylama \ - --max-line-length $(LINE_LENGTH) \ - --linters "${PL_LINTERS}" \ - --ignore "${PL_IGNORE}" \ - $(PY_FILES) | tee $@.out || exit 0 +check: + ruff check --fix $(PY_FILES) mypy: $(COMMON_VENV) \ @@ -90,118 +53,11 @@ mypy: --no-incremental \ $(PY_FILES) | tee $@.out -# -------------------------------------------------- -# Tests -# -------------------------------------------------- - -test1: - ./test1.py | tee tmp/$@.1 - -# test2 has the data type in the output -test2: - ./test2.py -f testdata/DOMAINS.txt 2>tmp/$@.2 | tee tmp/$@.1 - -# test3 simulates the whoisdomain command and has no data type in the output -test3: - ./test3.py -f testdata/DOMAINS.txt 2>tmp/$@.2 | tee tmp/$@.1 - -test4: - LOGLEVEL=DEBUG ./test2.py $(TEST_OPTIONS_ALL) -t 2>tmp/$@.2 | tee tmp/$@.1 - -test_with: withPublicSuffix withExtractServers stripHttpStatus - -withPublicSuffix: - ./test2.py -d www.dublin.airport.aero --withPublicSuffix - -withExtractServers: - ./test2.py -d google.com --extractServers - -stripHttpStatus: - ./test2.py -d nic.aarp --stripHttpStatus - ./test2.py -d nic.abudhabi --stripHttpStatus - ./test2.py -d META.AU --stripHttpStatus - ./test2.py -d google.AU --stripHttpStatus - -# test using python 3.6 -zz: - docker build -t df36 -f Df-36 . - docker run -v .:/context df36 -d google.com - -# -------------------------------------------------- -# build related -# -------------------------------------------------- - # this step creates or updates the toml file -build: first +build: ./bin/build.sh ./bin/testLocalWhl.sh 2>tmp/$@.22 | tee tmp/$@.1 ./bin/test.sh 2>tmp/$@.2 | tee -a tmp/$@.1 -# ========================================================== -# build docker images with the latest python and run a test -a -docker: docker_build testdocker dockerRunLocal dockerTestdata testdockerTestdata - -docker_build: - export VERSION=$(shell cat work/version) && \ - docker build \ - --build-arg VERSION \ - --tag $(DOCKER_WHO)/$(WHAT) \ - --tag $(DOCKER_WHO)/$(WHAT)-$${VERSION} \ - --tag $(WHAT)-$${VERSION} \ - --tag $(WHAT) \ - -f Dockerfile . - -testdocker: - docker image ls - docker container ls - docker run whoisdomain-test -t $(TEST_OPTIONS_ALL) - -dockerRunLocal: - export VERSION=$(shell cat work/version) && \ - docker run \ - -v ./testdata:/testdata \ - $(WHAT)-$${VERSION} \ - -d google.com -j | jq -r . - -dockerTestdata: - @export VERSION=$(shell cat work/version) && \ - docker run \ - -v ./testdata:/testdata \ - $(WHAT)-$${VERSION} \ - -f /testdata/DOMAINS.txt $(TEST_OPTIONS_ALL) 2>tmp/$@-2 | \ - tee tmp/$@-1 - -testdockerTestdata: - @export VERSION=$(shell cat work/version) && \ - docker run \ - -v ./testdata:/testdata \ - $(WHAT)-$${VERSION}-test \ - -f /testdata/DOMAINS.txt $(TEST_OPTIONS_ALL) 2>tmp/$@-2 | \ - tee tmp/$@-1 - - -dockerPush: - export VERSION=$(shell cat work/version) && \ - docker image push \ - --all-tags $(DOCKER_WHO)/$(WHAT) - docker run mbootgithub/whoisdomain -d google.com -j | jq -r . - -# ==================================================== -# uploading to pypi an pypiTestUpload -# build a test-mypi and download the image in a venv ane run a test -pypiTest: pypiTestUpload testTestPypi # testdocker testdockerTestdata - -# this is only the upload now for pypi builders -pypiTestUpload: - ./bin/upload_to_pypiTest.sh - -testTestPypi: - ./bin/testTestPyPiUpload.sh 2>tmp/$@-2 | tee tmp/$@-1 - -releaseTest: build pypiTestUpload testTestPypi - -release: pypi - -# this is for pypi owners after all tests have finished -pypi: - ./bin/upload_to_pypi.sh +test: + make -f Makefile.tests diff --git a/Makefile.docker b/Makefile.docker new file mode 100644 index 0000000..7c6a04d --- /dev/null +++ b/Makefile.docker @@ -0,0 +1,66 @@ +# ========================================================== +SHELL := /bin/bash -l +export SHELL + +# tested on 3.10-3.14 +MIN_PYTHON_VERSION := $(shell basename $$( ls /usr/bin/python3.[0-9][0-9] | awk '{print $0; exit}' ) ) +export MIN_PYTHON_VERSION + +WHAT := whoisdomain +DOCKER_WHO := mbootgithub + +TEST_OPTIONS_ALL = \ + --withPublicSuffix \ + --extractServers \ + --stripHttpStatus + +docker: docker_build \ + testdocker \ + dockerRunLocal \ + dockerTestdata \ + testdockerTestdata + +docker_build: + export VERSION=$(shell cat work/version) && \ + docker build \ + --build-arg VERSION \ + --tag $(DOCKER_WHO)/$(WHAT) \ + --tag $(DOCKER_WHO)/$(WHAT)-$${VERSION} \ + --tag $(WHAT)-$${VERSION} \ + --tag $(WHAT) \ + -f Dockerfile . + +testdocker: + docker image ls + docker container ls + docker run whoisdomain-test -t $(TEST_OPTIONS_ALL) + +dockerRunLocal: + export VERSION=$(shell cat work/version) && \ + docker run \ + -v ./testdata:/testdata \ + $(WHAT)-$${VERSION} \ + -d google.com -j | jq -r . + +dockerTestdata: + @export VERSION=$(shell cat work/version) && \ + docker run \ + -v ./testdata:/testdata \ + $(WHAT)-$${VERSION} \ + -f /testdata/DOMAINS.txt $(TEST_OPTIONS_ALL) 2>tmp/$@-2 | \ + tee tmp/$@-1 + +testdockerTestdata: + @export VERSION=$(shell cat work/version) && \ + docker run \ + -v ./testdata:/testdata \ + $(WHAT)-$${VERSION}-test \ + -f /testdata/DOMAINS.txt $(TEST_OPTIONS_ALL) 2>tmp/$@-2 | \ + tee tmp/$@-1 + +# prod push: needs to be called manually +dockerPush: + export VERSION=$(shell cat work/version) && \ + docker image push \ + --all-tags $(DOCKER_WHO)/$(WHAT) + docker run mbootgithub/whoisdomain -d google.com -j | jq -r . diff --git a/Makefile.pypi b/Makefile.pypi new file mode 100644 index 0000000..be2fb5a --- /dev/null +++ b/Makefile.pypi @@ -0,0 +1,35 @@ +# ========================================================== +# ========================================================== +# https://docs.secure.software/cli + +SHELL := /bin/bash -l +export SHELL + +# tested on 3.10-3.14 +MIN_PYTHON_VERSION := $(shell basename $$( ls /usr/bin/python3.[0-9][0-9] | awk '{print $0; exit}' ) ) +export MIN_PYTHON_VERSION + +run: pypiTest + +# ==================================================== +# uploading to pypi an pypiTestUpload +# build a test-mypi and download the image in a venv ane run a test +pypiTest: pypiTestUpload testTestPypi + +# this is only the upload now for pypi builders +pypiTestUpload: # untested ./bin/upload_to_pypiTest.sh + VERSION=$(shell cat ./work/version ); + ls -l ./dist/*$(VERSION)* + twine upload -r testpypi dist/*$(VERSION)* + +testTestPypi: + ./bin/testTestPyPiUpload.sh 2>tmp/$@-2 | tee tmp/$@-1 + +# this is for pypi owners after all tests have finished +# needs to be called manually, can be transferred to github action +release: pypi + +pypi: # ./bin/upload_to_pypi.sh + VERSION=$(shell cat ./work/version ) + ls -l ./dist/*$(VERSION)* + twine upload --verbose dist/*$(VERSION)* diff --git a/Makefile.tests b/Makefile.tests new file mode 100644 index 0000000..7d9d5a0 --- /dev/null +++ b/Makefile.tests @@ -0,0 +1,57 @@ +# Makefile + +SHELL := /bin/bash -l +export SHELL + +VENV := ./vtmp/ +export VENV + +# tested on 3.10-3.14 +MIN_PYTHON_VERSION := $(shell basename $$( ls /usr/bin/python3.[0-9][0-9] | awk '{print $0; exit}' ) ) +export MIN_PYTHON_VERSION + +# ========================================== +# Code formatting and checks +PY_FILES := *.py bin/*.py whoisdomain/ + +LINE_LENGTH := 160 + +TEST_OPTIONS_ALL = \ + --withPublicSuffix \ + --extractServers \ + --stripHttpStatus + +.PHONY: test1 test2 test3 test4 testwith + +# -------------------------------------------------- +# Tests +# -------------------------------------------------- +test: test1 testwith test2 test3 test4 + +test1: + ./test1.py | tee tmp/$@.1 + +# test2 has the data type in the output +test2: + ./test2.py -f testdata/DOMAINS.txt 2>tmp/$@.2 | tee tmp/$@.1 + +# test3 simulates the whoisdomain command and has no data type in the output +test3: + ./test3.py -f testdata/DOMAINS.txt 2>tmp/$@.2 | tee tmp/$@.1 + +test4: + LOGLEVEL=DEBUG ./test2.py $(TEST_OPTIONS_ALL) -t 2>tmp/$@.2 | tee tmp/$@.1 + +testwith: withPublicSuffix withExtractServers stripHttpStatus + +withPublicSuffix: + ./test2.py -d www.dublin.airport.aero --withPublicSuffix + +withExtractServers: + ./test2.py -d google.com --extractServers + +stripHttpStatus: + ./test2.py -d nic.aarp --stripHttpStatus + ./test2.py -d nic.abudhabi --stripHttpStatus + ./test2.py -d META.AU --stripHttpStatus + ./test2.py -d google.AU --stripHttpStatus diff --git a/README.md b/README.md index 5c04019..eb3e07f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -# whoisdomain +# whoisdomain [![Spectra Assure Community Badge](https://secure.software/pypi/badge/whoisdomain)](https://secure.software/pypi/packages/whoisdomain) * A Python package for retrieving WHOIS information of DOMAIN'S ONLY. * Python 2.x IS NOT supported. + * Python >=3.10 * Currently no additional python packages need to be installed. + --- ## Notes @@ -69,7 +71,7 @@ and `make suggest`. --- ## Support - * Python 3.x is supported for x >= 9 + * Python 3.x is supported for x >= 10 * Python 2.x IS NOT supported. ## Author's @@ -131,4 +133,12 @@ add switch not to ignore leading www in the domain request - fix co.il and add il tld - cleanup some obsolete tld's +## 1.20260326.1 +- fix 'be' and 'pl' ; thanks Misiu Tomasz. +- add additional domains from iana. +- remove domains no longer in iana. +- Makefile: switch to ruff instead of black and pylama. + ## in progress +- switch to minimal version 3.10 +- update gitgub-action lint (mypy) to use `setup-python@v6` and `checkout@v6` diff --git a/analizer/Makefile b/analizer/Makefile index 4f51a3b..b11c5df 100644 --- a/analizer/Makefile +++ b/analizer/Makefile @@ -18,21 +18,7 @@ PIP_INSTALL := pip3 -q \ # ========================================== # Code formatting and checks -PY_FILES := \ - *.py - -LINE_LENGTH := 120 -PL_LINTERS := eradicate,mccabe,pycodestyle,pyflakes,pylint - -# C0114 Missing module docstring [pylint] -# C0115 Missing class docstring [pylint] -# C0116 Missing function or method docstring [pylint] -# E203 whitespace before ':' [pycodestyle] -# -# W0105 String statement has no effect -# C901 : is to complex - -PL_IGNORE := C0114,C0115,C0116,E203 +PY_FILES := *.py MYPY_INSTALL := \ types-requests \ @@ -52,44 +38,27 @@ all: clean prep test clean: cleanupVenv rm -f *.1 *.2 *.log *.tmp 1 2 rm -rf .mypy_cache - rm -f IanaDb.sqlite + # rm -f IanaDb.sqlite # dont remove during testing rm -rf .iana_cache/ .psl_cache/ # cleanup the virtual env cleanupVenv: rm -rf $(VENV) -# ====================================== -# prep the code with format, lint typing +prep: format check -prep: black pylama +format: + ruff format $(PY_FILES) -black: - $(COMMON_VENV) \ - $(PIP_INSTALL) black; \ - black \ - --line-length $(LINE_LENGTH) \ - $(PY_FILES) +check: + ruff check --fix $(PY_FILES) -pylama: - $(COMMON_VENV) \ - $(PIP_INSTALL) setuptools pylama; \ - pylama \ - --max-line-length $(LINE_LENGTH) \ - --linters "${PL_LINTERS}" \ - --ignore "${PL_IGNORE}" \ - $(PY_FILES) - -mypy: +test: IanaDb.sqlite $(COMMON_VENV) \ - $(PIP_INSTALL) mypy $(MYPY_INSTALL); \ - mypy \ - --strict \ - --no-incremental \ - $(PY_FILES) + $(PIP_INSTALL) -r requirements.txt ;\ + ./investigateTld.py 2>2 | tee 1 -test: +IanaDb.sqlite: $(COMMON_VENV) \ $(PIP_INSTALL) -r requirements.txt ;\ - ./analizeIanaTld.py; \ - ./investigateTld.py 2>2 | tee 1 + ./analizeIanaTld.py diff --git a/analizer/README.md b/analizer/README.md index 1c94a16..999646a 100644 --- a/analizer/README.md +++ b/analizer/README.md @@ -1,5 +1,4 @@ # README -1. first run analizeIanaTld.py -1. then run investigateTld.py - +1. first run `analizeIanaTld.py` to build the sqlite db from the iana web data +1. then run `investigateTld.py` to process the difference between the database and the ZZ dict diff --git a/analizer/analizeIanaTld.py b/analizer/analizeIanaTld.py index 31bbeb6..e0ff764 100755 --- a/analizer/analizeIanaTld.py +++ b/analizer/analizeIanaTld.py @@ -1,19 +1,18 @@ #! /usr/bin/env python3 -""" -Analyze all tld's currently in the iana root db -""" +# Analyze all tld's currently in the iana root db import io import re + from dns.resolver import ( - Resolver, LRUCache, + Resolver, ) from ianaCrawler import IanaCrawler -from pslGrabber import PslGrabber from ianaDatabase import IanaDatabase +from pslGrabber import PslGrabber def prepDb( @@ -29,7 +28,8 @@ def prepDb( def prepResolver() -> Resolver: resolver: Resolver = Resolver() - resolver.cache = LRUCache() # type: ignore + resolver.cache = LRUCache() + return resolver def updateAllIanaTldData( @@ -37,7 +37,7 @@ def updateAllIanaTldData( verbose: bool = False, ) -> IanaCrawler: iac = IanaCrawler(verbose=verbose, resolver=resolver) - iac.getTldInfoAllFromIanaUrl() + iac.fromIanaGetAllCurrenlyDefinedTld() iac.addInfoToAllTld() return iac @@ -50,7 +50,7 @@ def doOnePslEntry( verbose: bool = False, ) -> None: n = 0 - z = z.split()[0] + z = z.split(maxsplit=1)[0] if "." in z: tld = z.split(".")[-1] n = len(z.split(".")) @@ -70,7 +70,10 @@ def doOnePslEntry( iad.doSql(sql, data) -def getAllPslDataAndProcess(iad: IanaDatabase, verbose: bool = False) -> None: +def getAllPslDataAndProcess( + iad: IanaDatabase, + verbose: bool = False, +) -> None: pg: PslGrabber = PslGrabber() response = pg.getData(pg.getUrl()) text = response.text @@ -118,6 +121,7 @@ def xMain() -> None: dbFileName: str = "IanaDb.sqlite" resolver: Resolver = prepResolver() + print(resolver) iac = updateAllIanaTldData(resolver, verbose) iad = prepDb(dbFileName, verbose) @@ -127,13 +131,17 @@ def xMain() -> None: for tld in xx: sql = iad.makeDelSqlTld(tld) iad.doSql(sql) + sql = iad.makeDelSqlPsl(tld) iad.doSql(sql) # process all known tld's xx = iac.getResults() for item in xx["data"]: - sql, data = iad.makeInsOrUpdSqlTld(xx["header"], item) + sql, data = iad.makeInsOrUpdSqlTld( + xx["header"], + item, + ) iad.doSql(sql, data) getAllPslDataAndProcess( diff --git a/analizer/get_registrars.py b/analizer/get_registrars.py index 61ca6ce..e4b6596 100755 --- a/analizer/get_registrars.py +++ b/analizer/get_registrars.py @@ -2,14 +2,11 @@ # import sys import csv -import requests - -from tld import get_tld +import pathlib from urllib.parse import urlparse -from Typing import ( - List, -) +import requests +from tld import get_tld FILE_NAME: str = "registrar-ids-1.csv" FILE_URL: str = f"https://www.iana.org/assignments/registrar-ids/{FILE_NAME}" @@ -19,19 +16,15 @@ def getFileFromUrl(fileName: str, url: str) -> None: r = requests.get( url, allow_redirects=True, + timeout=300, ) - open( - fileName, - "wb", - ).write( - r.content, - ) + pathlib.Path(fileName).write_bytes(r.content) return fileName def readCsvFile(fileName: str): - result: List[List[str]] = [] - with open(fileName) as csv_file: + result: list[list[str]] = [] + with pathlib.Path(fileName).open("r", encoding="utf8") as csv_file: csv_reader = csv.reader(csv_file, delimiter=",") line_count = 0 @@ -49,15 +42,15 @@ def readCsvFile(fileName: str): def xMain() -> None: fileName: str = getFileFromUrl(FILE_NAME, FILE_URL) - result: List[List[str]] = readCsvFile(fileName) + result: list[list[str]] = readCsvFile(fileName) - rdapList: List[str] = [] - hostList: List[str] = [] - tldList: List[str] = [] - fldList: List[str] = [] + rdapList: list[str] = [] + hostList: list[str] = [] + tldList: list[str] = [] + fldList: list[str] = [] for row in result: - if row[3].strip() == "": + if not row[3].strip(): continue rdap = row[3] diff --git a/analizer/ianaCrawler.py b/analizer/ianaCrawler.py old mode 100755 new mode 100644 index 8304c0f..336d87b --- a/analizer/ianaCrawler.py +++ b/analizer/ianaCrawler.py @@ -1,16 +1,12 @@ -# +import sys +import time from typing import ( - Optional, - List, - Dict, Any, - # Tuple, ) -import sys -from bs4 import BeautifulSoup -import time +import dns.resolver import requests_cache +from bs4 import BeautifulSoup class IanaCrawler: @@ -22,11 +18,9 @@ class IanaCrawler: verbose: bool = False cacheBackend: str = "filesystem" - records: List[Any] = [] - columns: List[Any] = [] - toDelete: List[str] = [] - - resolver: Any = None + records: list[Any] = [] + columns: list[Any] = [] + toDelete: list[str] = [] def __init__( self, @@ -60,25 +54,23 @@ def _getPageFromUrlIntoSoupWithRetry( try: response = self.Session.get(url) except Exception as e: - # in case of no data, sleep and try again print(e, file=sys.stderr) - time.sleep(15) + time.sleep(5) - soup = BeautifulSoup(response.text, "html.parser") - return soup + return BeautifulSoup(response.text, "html.parser") def _getAdditionalItem( self, what: str, - data: List[str], - ) -> Optional[str]: + data: list[str], + ) -> str | None: for i in [0, 1]: try: z: str = f"{what}:" if z in data[i]: return data[i].replace(z, "").strip() - except Exception as _: - _ = _ + except Exception as e: + _ = e return None return None @@ -86,53 +78,58 @@ def _getTldParagraphWithString( self, soup: BeautifulSoup, text: str, - ) -> Optional[str]: - gfg: List[Any] = soup.find_all(lambda tag: tag.name == "p" and text in tag.text) - if len(gfg): - s: str = gfg[0].text.strip() - return s - return None + ) -> str | None: + gfg: list[Any] = soup.find_all(lambda tag: tag.name == "p" and text in tag.text) + return gfg[0].text.strip() if len(gfg) else None def _resolveWhois( self, whois: str, - ) -> List[Any]: - ll: List[Any] = [] - if self.resolver: - answer: List[Any] = [] - - n: int = 3 - while n: - try: - answer = list(self.resolver.resolve(whois, "A").response.answer) - break - except Exception as e: - print(whois, e, n, file=sys.stderr) - time.sleep(5) - n = n - 1 - - for a in answer: - s = str(a) - if "\n" in s: - ss = s.split("\n") - ll.append(ss) - else: - ll.append(s) + ) -> list[Any]: + ll: list[Any] = [] + + if not self.resolver: + print(f"no resolver set: {whois}") + return None + + answer: list[Any] = [] + + n: int = 3 + while n: + try: + x = dns.resolver.resolve(whois, "A") + answer = list(x.response.answer) + break + except Exception as e: + print(whois, e, n, file=sys.stderr) + time.sleep(5) + n -= 1 + + for a in answer: + s = str(a) + if "\n" in s: + ss = s.split("\n") + ll.append(ss) + else: + ll.append(s) return ll def extractInfoFromPageSoup( self, - soup: BeautifulSoup, - tldItem: List[Any], + page: BeautifulSoup, + tldItem: list[Any], ) -> None: + # URL for registration services: http://www.aaa.com + # WHOIS Server: whois.nic.aaa + # RDAP Server: https://rdap.nic.aaa/ zz = { "Whois": "WHOIS Server", "RegistrationUrl": "URL for registration services", + "Rdap": "RDAP Server", } - for key, val in zz.items(): - regDataW: Optional[str] = self._getTldParagraphWithString(soup, val) + regDataW: str | None = self._getTldParagraphWithString(page, val) if not regDataW: tldItem.append(None) continue @@ -140,53 +137,57 @@ def extractInfoFromPageSoup( regDataW = regDataW.replace(val, key) regDataA = regDataW.split("\n") for s in [key]: - tldItem.append(self._getAdditionalItem(s, regDataA)) + s = self._getAdditionalItem(s, regDataA) + tldItem.append(s) def doWhoisServerResolve_DoesItExist( self, - server: Optional[str], - tldItem: List[Any], + server: str | None, + tldItem: list[Any], ) -> None: if server is None: tldItem.append(None) return - ll = self._resolveWhois(server) # try to resolve the whois server, does it actually exist + ll = self._resolveWhois(server) + print(ll) tldItem.append(ll) def _addInfoToOneTld( self, - tldItem: List[Any], - ) -> List[str]: - tldName = tldItem[0] + tld_item: list[Any], + ) -> list[str]: + this_tld_name = tld_item[0] - if tldItem[3] == "Not assigned": - tldItem[3] = None + if tld_item[3] == "Not assigned": + tld_item[3] = None return None - tldUrl: str = self._getUrl() + "/" + tldName + ".html" - soup = self._getPageFromUrlIntoSoupWithRetry(tldUrl) + this_tld_url: str = self._getUrl() + "/" + this_tld_name + ".html" + page = self._getPageFromUrlIntoSoupWithRetry(this_tld_url) - self.extractInfoFromPageSoup(soup, tldItem) - self.doWhoisServerResolve_DoesItExist(tldItem[4], tldItem) + self.extractInfoFromPageSoup(page, tld_item) + print(tld_item[4]) + self.doWhoisServerResolve_DoesItExist(tld_item[4], tld_item) - return tldItem + return tld_item - def _processOneTableData(self, trs: List[str]) -> List[str]: - record: List[str] = [] + def _processOneTableData(self, trs: list[str]) -> list[str]: + record: list[str] = [] for each in trs: try: link = each.find("a")["href"] aa = link.split("/") - record.append(aa[-1].replace(".html", "")) - record.append(each.text.strip()) - except Exception as _: - _ = _ + s = aa[-1].replace(".html", "") + record.append(s) + s = each.text.strip() + record.append(s) + except Exception as e: + _ = f"{e}" record.append(each.text) return record def _processOneTableRow(self, tr: str) -> None: - # extract header info if present ths = tr.findAll("th") # Table Header if ths != []: for each in ths: @@ -197,16 +198,13 @@ def _processOneTableRow(self, tr: str) -> None: record = self._processOneTableData(trs) self.records.append(record) - def getTldInfoAllFromIanaUrl(self) -> None: - """ - extract all current defined tld names from the main iana root db page - - """ - soup = self._getPageFromUrlIntoSoupWithRetry(self._getUrl()) - table: Any = soup.find("table") # the first table has the tld data - - self.records: List[Any] = [] - self.columns: List[Any] = [] + # Public + def fromIanaGetAllCurrenlyDefinedTld(self) -> None: + # from the main page we get all the current tld names + page = self._getPageFromUrlIntoSoupWithRetry(self._getUrl()) + table: Any = page.find("table") # from the first table we get the current defined tld records + self.records: list[Any] = [] + self.columns: list[Any] = [] for tr in table.findAll("tr"): # Table Row self._processOneTableRow(tr) @@ -214,13 +212,14 @@ def getTldInfoAllFromIanaUrl(self) -> None: self.columns.insert(0, "Link") def addInfoToAllTld(self) -> None: - records2: List[str] = [] - toDelete: List[str] = [] + records2: list[str] = [] + toDelete: list[str] = [] self.columns[3] = self.columns[3].replace(" ", "_") self.columns.insert(4, "Whois") # is there a whois server defined self.columns.insert(5, "RegistrationUrl") # is there a registration url defined - self.columns.insert(6, "DnsResolve-A") # if we have a whois server does it actually resolve to sometething real + self.columns.insert(6, "Rdap") # is there a whois server defined + self.columns.insert(7, "DnsResolve-A") # if we have a whois server does it actually resolve to sometething real for tldItem in self.records: # tldItem is a list rr = self._addInfoToOneTld(tldItem) @@ -234,12 +233,11 @@ def addInfoToAllTld(self) -> None: def getDeleted( self, - ) -> List[str]: + ) -> list[str]: return self.toDelete - def getResults(self) -> Dict[str, Any]: + def getResults(self) -> dict[str, Any]: ll = list(self.columns) - # ll[3] = ll[3].replace(" ", "_") return { "header": ll, "data": self.records, diff --git a/analizer/ianaDatabase.py b/analizer/ianaDatabase.py index efd950c..42dcbaf 100755 --- a/analizer/ianaDatabase.py +++ b/analizer/ianaDatabase.py @@ -1,17 +1,12 @@ #! /usr/bin/env python3 +import json +import sqlite3 +import sys from typing import ( - # Optional, - List, # Dict, Any, - Tuple, ) -import sys - -import json -import sqlite3 - class IanaDatabase: verbose: bool = False @@ -32,25 +27,23 @@ def connectDb( def testValidConnection(self) -> None: if self.conn is None: - raise Exception("No valid connection to the database exist") + msg = "No valid connection to the database exist" + raise Exception(msg) def selectSql( self, sql: str, data: Any = None, - ) -> Tuple[Any, Any]: + ) -> tuple[Any, Any]: self.testValidConnection() cur: Any = self.conn.cursor() try: - if data: - result = cur.execute(sql, data) - else: - result = cur.execute(sql) + result = cur.execute(sql, data) if data else cur.execute(sql) except Exception as e: print(sql, data, e, file=sys.stderr) - exit(101) + sys.exit(101) return result, cur def doSql( @@ -63,17 +56,14 @@ def doSql( cur: Any = self.conn.cursor() try: - if data: - result = cur.execute(sql, data) - else: - result = cur.execute(sql) + result = cur.execute(sql, data) if data else cur.execute(sql) if withCommit: self.conn.commit() except Exception as e: print(sql, e, file=sys.stderr) - exit(101) + sys.exit(101) return result def createTableTld(self) -> None: @@ -84,12 +74,12 @@ def createTableTld(self) -> None: Type TEXT NOT NULL, TLD_Manager TEXT, Whois TEXT, - 'DnsResolve-A' TEXT, - RegistrationUrl TEXT + RegistrationUrl TEXT, + Rdap TEXT, + 'DnsResolve-A' TEXT ); """ - rr = self.doSql(sql) - return rr + return self.doSql(sql) def createTablePsl(self) -> None: sql = """ @@ -102,14 +92,13 @@ def createTablePsl(self) -> None: PRIMARY KEY (Tld, Psl) ); """ - rr = self.doSql(sql) - return rr + return self.doSql(sql) def prepData( self, - columns: List[str], - values: List[str], - ) -> Tuple[str, str, List[Any]]: + columns: list[str], + values: list[str], + ) -> tuple[str, str, list[Any]]: cc = "`" + "`,`".join(columns) + "`" data = [] @@ -134,9 +123,9 @@ def prepData( def makeInsOrUpdSqlTld( self, - columns: List[str], - values: List[str], - ) -> Tuple[str, List[Any]]: + columns: list[str], + values: list[str], + ) -> tuple[str, list[Any]]: cc, vv, data = self.prepData(columns, values) return ( f""" @@ -152,14 +141,14 @@ def makeInsOrUpdSqlTld( def makeDelSqlTld( self, tld: str, - ) -> Tuple[str, List[Any]]: + ) -> tuple[str, list[Any]]: return f"DELETE FROM IANA_TLD WHERE Link = '{tld}';" def makeInsOrUpdSqlPsl( self, - columns: List[str], - values: List[str], - ) -> Tuple[str, List[Any]]: + columns: list[str], + values: list[str], + ) -> tuple[str, list[Any]]: cc, vv, data = self.prepData(columns, values) return ( @@ -176,5 +165,23 @@ def makeInsOrUpdSqlPsl( def makeDelSqlPsl( self, tld: str, - ) -> Tuple[str, List[Any]]: + ) -> tuple[str, list[Any]]: return f"DELETE FROM IANA_PSL WHERE Tld = '{tld}';" + + def getAllDataTld(self) -> tuple[Any, Any]: + sql = """ +SELECT + Link, + Domain, + Type, + TLD_Manager, + RegistrationUrl, + Whois, + Rdap, + `DnsResolve-A` +FROM + IANA_TLD + """ + + result, cursor = self.selectSql(sql) + return result, cursor diff --git a/analizer/investigateTld.py b/analizer/investigateTld.py index 0768236..42fc566 100755 --- a/analizer/investigateTld.py +++ b/analizer/investigateTld.py @@ -2,305 +2,40 @@ # should run after a valid database is created with analizeIanaTld.py +import sys from typing import ( - Dict, Any, - List, - Tuple, ) -import re -import sys - import idna as idna2 from ianaDatabase import IanaDatabase +from oneTld import OneTld # the next 2 belong together sys.path.append("..") -from whoisdomain.tldDb import tld_regexpr # noqa: E402 - -MM = { - "com": [ - "whois.afilias-srs.net", - "whois2.afilias-grs.net", - "whois.nic.google", - "whois.nic.gmo", - "whois.gtld.knet.cn", - "whois.registry.in", - "whois.ngtld.cn", - ], - "sg": [ - "whois.sgnic.sg", - ], - "_teleinfo": [ - "whois.teleinfo.cn", - ], - "tw": [ - "whois.twnic.net.tw", - ], - "_centralnic": [ - "whois.centralnic.com", - ], -} - - -class OneTld: - verbose: bool = True - allKnownTldDict: Dict[str, Any] = {} - - row: Any = None - allTld: Dict[str, Any] = {} - ss: List[str] = [] - - tld = None - tld2 = None - tld3 = None - tld4 = None - - manager = None - w = None - resolve = None - reg = None - - thisTld: Dict[str, Any] = {} - - def __init__( - self, - allKnownTldDict: Dict[str, Any], - verbose: bool = False, - ): - self.verbose = verbose - self.allKnownTldDict = allKnownTldDict - - def _normalizeRow(self) -> None: - self.tld = self.row[0].replace("'", "") - self.tld2 = "".join(map(lambda s: s and re.sub(r"[^\w\s]", "", s), self.row[1])) - self.tld3 = self.row[1].replace(".", "").replace("'", "").replace("\u200f", "").replace("\u200e", "") - self.tld4 = self.tld3 - - self.manager = self.row[3] - self.w = self.row[4].replace("'", "") - self.resolve = self.row[5] - self.reg = self.row[6] - - def _doCentralNic(self, s1: str, TLD: Dict[str, Any]) -> bool: - return True - - kk = "_centralnic" - if s1 == self.w and "extend" in TLD and TLD["extend"] in [kk, "com"]: - return True - - s = f"ZZ['{self.tld}']" + ' = {"extend": ' + f"{kk}, " + '"_server":' + f'"{self.w}"' + "} # < suggest ### " - - if "extend" in TLD: - print(s, "# current > ", s1, self.w, TLD["extend"], TLD) - else: - print(s, "# current > ", s1, self.w, "_no_extend_", TLD) - - return True - - def _doDonuts(self, s1: str, TLD: Dict[str, Any]) -> bool: - # currently not used - return True - - kk = "_donuts" - if s1 == self.w and "extend" in TLD and TLD["extend"] in [kk, "com"]: - return True - - s = f"ZZ['{self.tld}']" + ' = {"extend": ' + f"{kk}, " + '"_server":' + f'"{self.w}"' + "} # suggest ### " - - if "extend" in TLD: - print(s, "# current ", s1, self.w, TLD["extend"], TLD) - else: - print(s, "# current ", s1, self.w, "_no_extend_", TLD) - - return True - - def _doUnknownTld(self): - if not self.w or self.w == "NULL": # no whois server defined - print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # no whois server found in iana') - else: - print(f"# unknown tld {self.tld}, {self.tld2}, {self.tld3}, {self.tld4}, {self.w},") - - def _getServerHint(self): - k = "_server" - serverHint = "" - if k in self.thisTld: - serverHint = self.thisTld[k] - return serverHint - - def _skipSpecialResolve(self): - serverHint = self._getServerHint() - - if "whois.centralnicregistry.com." in self.resolve and self._doCentralNic(serverHint, self.thisTld): - return True - - if "whois.donuts.co" in self.resolve and self._doCentralNic(serverHint, self.thisTld): - return True - - return False - - def _doUtf8Preparations(self): - try: - self.tld3 = idna2.encode(self.tld3).decode() or self.tld3 - except Exception as e: - print(f"## {self.tld} {self.tld2} {self.tld3} {e}") - return - - self.tld4 = self.tld4.encode("idna").decode() - if self.tld != self.tld2: - if 0 and self.tld2 not in self.ss: - print("# idna", self.tld, self.tld2, self.tld3, self.tld4, self.tld.encode("idna")) - - if self.tld != self.tld3: - print(f"#SKIP {self.tld} {self.tld2} {self.tld3}") - return True - - return False +from whoisdomain.tldDb import tld_regexpr - def _skipKnowTld(self): - if self.tld2 == self.tld and self.tld in self.allKnownTldDict: - return True - if self.tld2 in self.allKnownTldDict and self.tld in self.allKnownTldDict: - return True - - return False - - def _doNoManagerTld(self): - if self.manager == "NULL": - if self.tld not in self.allKnownTldDict: - print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # no manager') - - if self.tld2 != self.tld: - if self.tld2 not in self.allKnownTldDict: - print(f'# ZZ["{self.tld2}"] = ' + '{"_privateRegistry": True} # no manager') - - return True - - return False - - def _doFoundTld(self): - for key, value in MM.items(): - for n in value: - if n in self.resolve: - if self.tld not in self.allKnownTldDict: - print(f'ZZ["{self.tld}"] = ' + '{"_server": "' + n + '", "extend": "' + key + '"}') - if self.tld2 != self.tld: - if self.tld2 not in self.allKnownTldDict: - print(f'ZZ["{self.tld2}"] = ' + '{"_server": "' + n + '", "extend": "' + key + '"}') - return True - return False - - def _doNoWhois(self): - if self.reg == "NULL" and self.w == "NULL": - return True - # unclear, - # we have existing ns records indicating some self.tld's actually exist - # but have no whois, lets skip for now - # TODO add ns records - if self.tld not in self.allKnownTldDict: - print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # noWhois ') - - if self.w == "NULL": - return True - - return False - - def _doCleanuphois(self): - def xx(zz): - if zz not in self.allKnownTldDict: - print( - f'ZZ["{zz}"] = ' + '{"_server": "' + self.w + '", "extend": "' + self.ss[self.w][0] + '"}', - "# ", - self.w, - self.ss[self.w], - ) - - self.w = self.w.replace("'", "") - if self.w in self.ss: - xx(self.tld) - if self.tld2 != self.tld: - xx(self.tld2) - return True - return False - - def processRow( - self, - row: Any, - allTld: Dict[str, Any], - ss: List[str], - ): - sequence = [ - self._skipSpecialResolve, - self._doUtf8Preparations, - self._skipKnowTld, - self._doNoManagerTld, - self._doFoundTld, - self._doNoWhois, - self._doCleanuphois, - ] - - self.row = row - self.allTld = allTld - self.ss = ss - - self._normalizeRow() - if self.tld not in self.allTld: - self.allTld.append(self.tld) - - if self.allKnownTldDict.get(self.tld) is None: - if self.verbose: - print(f"|{self.tld}|", file=sys.stderr) - self._doUnknownTld() - return - - self.thisTld = self.allKnownTldDict[self.tld] - - for n in sequence: - if n(): - return - - print("# MISSING", self.tld, self.tld2, self.tld3, self.manager.replace("\n", ";"), self.w, self.resolve, self.reg) - - -def extractServers(aDict: Dict[str, Any]) -> Dict[str, Any]: - servers: Dict[str, Any] = {} +def extract_server_hints(aDict: dict[str, Any]) -> dict[str, Any]: + # key will be the whois server, data will be the list of tld's using this server + servers: dict[str, Any] = {} k = "_server" - for key in aDict.keys(): - if k in aDict[key]: - server = aDict[key][k] + for key, value in aDict.items(): + if k in value: + server = value[k] if server not in servers: servers[server] = [] servers[server].append(key) + # print(servers) return servers -def getAllDataTld(iad: Any) -> Tuple[Any, Any]: - # investigate all known iana tld and see if we have them - - sql = """ -SELECT - Link, - Domain, - Type, - TLD_Manager, - Whois, - `DnsResolve-A`, - RegistrationUrl -FROM - IANA_TLD -""" - - result, cursor = iad.selectSql(sql) - return result, cursor - - -def postProcessingOne(allTld: List[str], tld: str): - if "." in tld: +def look_for_missing_in_iana_web(allTld: list[str], tld: str): + if "." in tld: # not a real tld a pseudo tld return - if "_" == tld[0]: + + if tld.startswith("_"): # magic collector tld return try: @@ -310,30 +45,36 @@ def postProcessingOne(allTld: List[str], tld: str): tld2 = tld if tld not in allTld and tld2 not in allTld: - print(f"# currently defined in ZZ but missing in iana: {tld}") - - -def postProcessing(allTld: List[str]): - allTld = sorted(allTld) - for tld in tld_regexpr.ZZ: - postProcessingOne(allTld, tld) + print(f"# currently defined in ZZ but missing in iana: {tld}, {tld2}") def xMain() -> None: verbose = True dbFileName = "IanaDb.sqlite" - allTld: List[str] = [] + allTld: list[str] = [] - ss = extractServers(tld_regexpr.ZZ) + # print(tld_regexpr.ZZ) + # sys.exit(0) + server_hints = extract_server_hints(tld_regexpr.ZZ) iad = IanaDatabase(verbose=verbose) iad.connectDb(dbFileName) - rr, cur = getAllDataTld(iad) + _, cur = iad.getAllDataTld() + + forest: dict[str, Any] = {} for row in cur: ot = OneTld(tld_regexpr.ZZ, verbose=verbose) - ot.processRow(row, allTld, ss) + ot.processRow(row, allTld, server_hints) + tld = ot.tld + forest[tld] = ot + + for tld, data in forest.items(): + if data.rdap_info != "NULL": + print(tld, data.rdap_info) - postProcessing(allTld) + allTld = sorted(allTld) + for tld in tld_regexpr.ZZ: + look_for_missing_in_iana_web(allTld, tld) xMain() diff --git a/analizer/oneTld.py b/analizer/oneTld.py new file mode 100644 index 0000000..fe357cf --- /dev/null +++ b/analizer/oneTld.py @@ -0,0 +1,266 @@ +import re +import sys +from typing import ( + Any, +) + +import idna as idna2 + +# the next 2 belong together +sys.path.append("..") + +MM = { + "com": [ + "whois.afilias-srs.net", + "whois2.afilias-grs.net", + "whois.nic.google", + "whois.nic.gmo", + "whois.gtld.knet.cn", + "whois.registry.in", + "whois.ngtld.cn", + ], + "sg": [ + "whois.sgnic.sg", + ], + "_teleinfo": [ + "whois.teleinfo.cn", + ], + "tw": [ + "whois.twnic.net.tw", + ], + "_centralnic": [ + "whois.centralnic.com", + ], +} + + +class OneTld: + verbose: bool = True + allKnownTldDict: dict[str, Any] = {} + + row: Any = None + allTld: dict[str, Any] = {} + server_hints: list[str] = [] + + tld = None + tld2 = None + tld3 = None + tld4 = None + + manager: str = "" + whois_hint: str = "" + resolved_whois_servers: str = "" + registration_url: str = "" + rdap_info: str = "" + thisTld: dict[str, Any] = {} + + def __init__( + self, + allKnownTldDict: dict[str, Any], + verbose: bool = False, + ): + self.verbose = verbose + self.allKnownTldDict = allKnownTldDict + + def _normalizeRow(self) -> None: + # print("row:", self.row, file=sys.stderr) + + # 0: Link + # 1: Domain + # 2: Type + # 3: TldManager + # 4: REgistrationUrl + # 5: Whois + # 6: RDap + # 7: whois resolved + self.tld = self.row[0] + self.tld2 = "".join(map(lambda s: s and re.sub(r"[^\w\s]", "", s), self.row[1])) # noqa: C417 + self.tld3 = self.row[1].replace(".", "").replace("\u200f", "").replace("\u200e", "") # utf8 right to left + self.tld4 = self.tld3 + + self.manager = self.row[3] + self.registration_url = self.row[4] + self.whois_hint = self.row[5] + self.resolved_whois_servers = self.row[7] + self.rdap_info = self.row[6] + + def _doCentralNic(self, s1: str, TLD: dict[str, Any]) -> bool: + return True + + kk = "_centralnic" + if s1 == self.whois_hint and "extend" in TLD and TLD["extend"] in [kk, "com"]: + return True + + s = f'ZZ[\'{self.tld}\'] = {{"extend": {kk}, "_server":"{self.whois_hint}"}} # < suggest ### ' + + if "extend" in TLD: + print(s, "# current > ", s1, self.whois_hint, TLD["extend"], TLD) + else: + print(s, "# current > ", s1, self.whois_hint, "_no_extend_", TLD) + + return True + + def _doDonuts(self, s1: str, TLD: dict[str, Any]) -> bool: + # currently not used + return True + + kk = "_donuts" + if s1 == self.whois_hint and "extend" in TLD and TLD["extend"] in [kk, "com"]: + return True + + s = f'ZZ[\'{self.tld}\'] = {{"extend": {kk}, "_server":"{self.whois_hint}"}} # suggest ### ' + + if "extend" in TLD: + print(s, "# current ", s1, self.whois_hint, TLD["extend"], TLD) + else: + print(s, "# current ", s1, self.whois_hint, "_no_extend_", TLD) + + return True + + def _doUnknownTld(self): + if not self.whois_hint or self.whois_hint == "NULL": # no whois server defined + print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # no whois server found in iana') + else: + print(f"# unknown tld {self.tld}, {self.tld2}, {self.tld3}, {self.tld4}, {self.whois_hint},") + + def _getServerHint(self): + k = "_server" + serverHint = "" + if k in self.thisTld: + serverHint = self.thisTld[k] + return serverHint + + def _skipSpecialResolve(self): + serverHint = self._getServerHint() + + if "whois.centralnicregistry.com." in self.resolved_whois_servers and self._doCentralNic( + serverHint, self.thisTld + ): + return True + + return "whois.donuts.co" in self.resolved_whois_servers and self._doCentralNic(serverHint, self.thisTld) + + def _doUtf8Preparations(self): + try: + self.tld3 = idna2.encode(self.tld3).decode() or self.tld3 + except Exception as e: + print(f"## {self.tld} {self.tld2} {self.tld3} {e}") + return None + + self.tld4 = self.tld4.encode("idna").decode() + if self.tld != self.tld3: + print(f"#SKIP {self.tld} {self.tld2} {self.tld3}") + return True + + return False + + def _skipKnowTld(self): + if self.tld2 == self.tld and self.tld in self.allKnownTldDict: + return True + + return self.tld2 in self.allKnownTldDict and self.tld in self.allKnownTldDict + + def _doNoManagerTld(self): + if self.manager == "NULL": + print(f"no manager fir tld: {self.tld}") + if self.tld not in self.allKnownTldDict: + print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # no manager') + + if self.tld2 != self.tld: + if self.tld2 not in self.allKnownTldDict: + print(f'# ZZ["{self.tld2}"] = ' + '{"_privateRegistry": True} # no manager') + + return True + + return False + + def _doFoundTld(self): + for key, value in MM.items(): + for n in value: + if n in self.resolved_whois_servers: + if self.tld not in self.allKnownTldDict: + print(f'ZZ["{self.tld}"] = ' + '{"_server": "' + n + '", "extend": "' + key + '"}') + if self.tld2 != self.tld: + if self.tld2 not in self.allKnownTldDict: + print(f'ZZ["{self.tld2}"] = ' + '{"_server": "' + n + '", "extend": "' + key + '"}') + return True + return False + + def _doNoWhois(self): + if self.registration_url == "NULL" and self.whois_hint == "NULL": + print(f"{self.tld} has no whois and no reg server", file=sys.stderr) + return True + + if self.whois_hint == "NULL": + if self.tld not in self.allKnownTldDict: + print(f'# ZZ["{self.tld}"] = ' + '{"_privateRegistry": True} # noWhois ') + + return self.whois_hint == "NULL" + + def _do_cleanup_whois_info(self): + def xx(zz): + if zz not in self.allKnownTldDict: + x = '{"_server": "' + self.whois_hint + f'", "extend": {self.server_hints[self.whois_hint][0]}' + '"}' + y = f"# {self.whois_hint} {self.server_hints[self.whois_hint]}" + print(f'ZZ["{zz}"] = ', x, y) + + self.whois_hint = self.whois_hint.replace("'", "") + if self.whois_hint in self.server_hints: + xx(self.tld) + if self.tld2 != self.tld: + xx(self.tld2) + return True + return False + + def processRow( + self, + row: Any, + allTld: dict[str, Any], + server_hints: list[str], + ): + self.allTld = allTld + self.server_hints = server_hints + + self.row = list(row) # from tuple to list and cleanup the strings + for index, data in enumerate(self.row): + data = data.replace("'", "") + self.row[index] = data + + # --------------------------------- + self._normalizeRow() + if self.tld not in self.allTld: + self.allTld.append(self.tld) + + if self.allKnownTldDict.get(self.tld) is None: + if self.verbose: + print(f"|{self.tld}|", file=sys.stderr) + self._doUnknownTld() + return + + self.thisTld = self.allKnownTldDict[self.tld] + + # run a sequence of functions are return if we have a value + sequence = [ + self._skipSpecialResolve, + self._doUtf8Preparations, + self._skipKnowTld, + self._doNoManagerTld, + self._doFoundTld, + self._doNoWhois, + self._do_cleanup_whois_info, + ] + + for n in sequence: + if n(): + return + + print( + "# MISSING", + self.tld, + self.tld2, + self.tld3, + self.manager.replace("\n", ";"), + self.whois_hint, + self.resolved_whois_servers, + self.registration_url, + ) diff --git a/analizer/pslGrabber.py b/analizer/pslGrabber.py old mode 100755 new mode 100644 index 10735c5..a025c02 --- a/analizer/pslGrabber.py +++ b/analizer/pslGrabber.py @@ -1,5 +1,4 @@ from typing import ( - List, Any, ) @@ -30,10 +29,9 @@ def getData( self, url: str, ) -> Any: - response = self.Session.get(url) - return response + return self.Session.get(url) - def ColumnsPsl(self) -> List[str]: + def ColumnsPsl(self) -> list[str]: return [ "Tld", "Psl", diff --git a/analizer/pyproject.toml b/analizer/pyproject.toml new file mode 100644 index 0000000..83b20e3 --- /dev/null +++ b/analizer/pyproject.toml @@ -0,0 +1,113 @@ +[project] + name = "tld_analyze" + +[tool.ruff] + target-version = "py310" # always keep it on the lowest official vesion + line-length = 120 + exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".mypy_cache", + ".nox", + ".pants.d", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + "__pypackages__", + "_build", + "buck-out", + "build", + "venv", + ] + +[tool.ruff.lint] + select = [ + "AIR", + "FAST", + "YTT", + "ASYNC", + "S", + "S1", "S2", "S302", "S303", "S304", "S305", "S306", "S307", "S31", "S32", "S401", "S402", "S406", "S407", "S408", "S409", "S41", "S5", "S601", "S602", "S604", "S605", "S606", "S607", "S609", "S61", "S7", + "FBT", + "B", + "B00", "B01", "B020", "B021", "B022", "B023", "B025", "B027", "B028", "B029", "B03", "B901", "B903", "B905", "B911", + "A", + "COM", + "C4", + "DTZ003", "DTZ004", "DTZ012", "DTZ901", + "T10", + "DJ003", "DJ01", + "EM", + "EXE", + "FIX", + "FA", + "INT", + "ISC", + "ICN", + "LOG", + "G001", "G002", "G01", "G1", "G2", + "INP", + "PIE", + "T20", + "PYI", + "PT", + "Q", + "RSE", + "RET", + "SIM", + "SLOT", + "TID", + "TD001", "TD004", "TD005", "TD007", + "TC", + "ARG003", "ARG004", "ARG005", + "PTH", + "FLY", + "I", + "C90", + "NPY", + "PD", + "N803", "N804", "N805", "N811", "N812", "N813", "N814", "N817", "N818", "N999", + "PERF1", "PERF2", "PERF401", + "E", + "W", + "DOC202", "DOC403", "DOC502", + "D2", "D3", "D402", "D403", "D405", "D406", "D407", "D408", "D409", "D410", "D411", "D412", "D413", "D414", "D416", + "F", + "PGH", + "PLC", + "PLE", + "PLR01", "PLR02", "PLR04", "PLR0915", "PLR1711", "PLR1704", "PLR1714", "PLR1716", "PLR172", "PLR173", "PLR2044", "PLR5", "PLR6104", "PLR6201", + "PLW", + "UP", + "FURB", + "RUF", + "TRY003", "TRY004", "TRY2", "TRY300", "TRY401", + ] + + ignore = [ + # ignore for now: + "S101", "N803", "N999", "PLR6201", + "S602", "FBT002", "FBT001", "RUF001", "N812", "PLW0603", "PLW0602", + "PLW2901", "PIE810", "PERF203", "FIX004", "N818","N802","N815","S608", + "RUF067", + # end for now. + "COM812", "D203", + "T201", # print statements are ok + "SIM102", + "RUF012", + "D205", + "FIX002", # TODOs need some love but we will probably not get of them + "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible. + "PT028", # experimental rule, incomplete + ] + + # Allow autofix for all enabled rules (when `--fix`) is provided. + fixable = ["ALL"] + unfixable = [] + preview = true diff --git a/analizer/registrar-ids-1.csv b/analizer/registrar-ids-1.csv deleted file mode 100644 index a89cdd1..0000000 --- a/analizer/registrar-ids-1.csv +++ /dev/null @@ -1,3764 +0,0 @@ -"ID",Registrar Name,Status,RDAP Base URL -1,Reserved,Reserved, -2,"Network Solutions, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -3,Registry Installation,Reserved, -4,"Advanced Systems Consulting, Inc.",Terminated, -6,asf,Terminated, -8,Test Registrar,Reserved, -9,"Register.com, Inc.",Accredited,https://rdap.register.com/rdap/ -10,AT&T Corporation,Terminated, -11,"Edge, Inc.",Terminated, -12,"Bazillion, Inc.",Terminated, -13,Webcentral Group Limited dba Melbourne IT,Accredited,https://webcentralgroup.rdap.tucows.com/ -14,ORANGE,Accredited,https://whois-data-reminder-policy.orange-business.com/rdap/ -15,"COREhub, S.R.L.",Accredited,https://rdap.corenic.net/ -16,AOL LLC,Terminated, -18,CADVision Development Corporation dba GetDomain.com,Terminated, -19,"CommuniTech.Net, Inc.",Terminated, -22,"eXtraActive, Inc.",Terminated, -25,"FloridaNet, Inc. d/b/a ValueWeb",Terminated, -26,HKNet Company Limited,Terminated, -27,"Identity Defense, Inc.",Terminated, -28,InfoBack Corporation,Terminated, -30,NameSecure L.L.C.,Accredited,https://rdap.namesecure.com/rdap/ -31,"DSTR Acquisition PA I, LLC dba DomainBank.com",Terminated, -44,Prodigy Communications Corporation,Terminated, -45,RCN Corporation,Terminated, -47,REACTO.com Limited,Terminated, -48,"eNom, LLC",Accredited,https://enom.rdap.tucows.com/ -49,"GMO Internet Group, Inc. d/b/a Onamae.com",Accredited,https://rdap.gmo-onamae.com/rdap/v1/ -50,Telepartner A/S,Terminated, -51,"Verio, Inc.",Terminated, -52,Hostopia Canada Corp,Accredited, -53,"A Technology Company, Inc.",Terminated, -54,"Signature Domains, LLC",Terminated, -56,"Inquent Technologies, Inc. f/k/a WebHosting.com, Inc.",Terminated, -57,"Advanced Internet Technologies, Inc. (AIT)",Accredited,https://rdap.ait.com/rdap/ -58,"AW Registry, Inc.",Terminated, -59,"Tech Dogs, Inc.",Terminated, -60,Internet Domain Registrars d/b/a Registrars.com,Terminated, -61,"Hosting.com, Inc.",Terminated, -62,WebTrends Corporation,Terminated, -63,"eNom401, Incorporated",Terminated, -64,"Domain Registration Services, Inc. dba dotEarth.com",Accredited,https://secure.iviewer.com/rdap-server/ -65,"DomainPeople, Inc.",Accredited,https://domainpeople.rdap.tucows.com/ -66,"Enameco, LLC",Accredited,https://EIG.rdap.tucows.com/ -67,CASDNS Inc.,Terminated, -68,NordNet SA,Accredited,https://rdap.nordnet.fr/rdap/ -69,Tucows Domains Inc.,Accredited,https://opensrs.rdap.tucows.com/ -70,Group NBT plc aka NetNames,Terminated, -71,Jiva Online Pty Ltd.,Terminated, -72,"Dotster, Inc.",Terminated, -73,Ports Group AB,Accredited,https://rdap.ports.domains/ -74,Online SAS,Accredited,https://rdap.bookmyname.com/ -75,"Tech Electro Industries, Inc.",Terminated, -76,Nominalia Internet S.L.,Accredited,https://rdap-nominalia.info/ -78,"PSI-Japan, Inc.",Accredited,https://rdap.psi.jp/ -79,Easyspace Limited,Accredited,https://easyspace.rdap.tucows.com/ -80,Virtualis Systems Inc.,Terminated, -81,Gandi SAS,Accredited,https://rdap.gandi.net/ -82,"OnlineNIC, Inc.",Accredited,https://onlinenic.com/rdap/ -83,IONOS SE,Accredited,https://rdap.ionos.com/ -84,UK-2 Limited,Accredited,https://rdapserver.net/ -85,EPAG Domainservices GmbH,Accredited,https://epag.rdap.tucows.com/ -86,DomainSpot LLC,Accredited,https://rdapanchor.com/ -87,"HANGANG Systems, Inc. dba Doregi.com",Accredited,https://rdap.doregi.com/ -88,Namebay SAM,Accredited,https://rdap.namebay.com/ -89,Computer Data Networks dba Shop4domain.com and Netonedomains.com,Terminated, -91,"007Names, Inc.",Accredited,https://rdap.007names.net/ -93,"GKG.NET, INC.",Accredited, -94,"Parava Networks, Inc. dba 10-Domains.com",Terminated, -97,"DomainZoo.com, Inc.",Terminated, -98,EnetRegistry.com Corporation,Terminated, -99,"pair Networks, Inc. d/b/a pair Domains",Accredited,https://www.pairdomains.com/rdap/ -100,Whois Corp.,Accredited,https://www.yesnic.com/rdap/ -101,"#1 Domain Names International, Inc. dba 1dni.com",Terminated, -103,PacNames Ltd,Terminated, -105,"MyDomain, Inc.",Terminated, -106,"Ascio Technologies, Inc. Danmark - Filial af Ascio technologies, Inc. USA",Accredited,https://rdap.ascio.com/ -109,"MS Intergate, Inc.",Terminated, -110,"Shaver Communications, Inc.",Terminated, -111,Secura GmbH,Accredited,https://rdap.domainregistry.de/ -112,"Webhero, Inc.",Accredited,https://rdapserver.net/ -113,CSL Computer Service Langenbach GmbH d/b/a joker.com,Accredited,https://rdap.joker.com/ -119,Reserved for Internal Registry Use,Reserved, -120,Xin Net Technology Corporation,Accredited,https://rdap.xinnet.com/rdap/ -121,"Dotregistrar, LLC",Terminated, -122,"Free Yellow.Com, Inc.",Terminated, -123,"The Registry at Info Avenue, LLC d/b/a Spirit Communications",Accredited,https://rdapserver.net/ -124,"NameEngine, Inc.",Terminated, -125,"Talk.com, Inc.",Terminated, -127,I.D.R Internet Domain Registry LTD.,Terminated, -128,DomainRegistry.com LLC,Accredited, -129,Eastern Communications Company Limited,Terminated, -130,"Netpia.com, Inc.",Accredited, -131,Total Web Solutions Limited trading as TotalRegistrations,Accredited,https://rdap.totalregistrations.com/ -132,NETPLEX LLC,Terminated, -133,1stDomain LLC,Terminated, -134,BB-Online UK Limited,Accredited,https://rdap.bb-online.com/ -139,2Day Internet Limited dba 2day.com,Terminated, -140,"Acens Technologies, S.L.U.",Accredited,https://rdap.acens.net/ -141,Cronon GmbH,Accredited,https://rdap.cronon.net/ -142,"Innerwise, Inc. d/b/a ItsYourDomain.com",Terminated, -143,"Omnis Network, LLC",Accredited,https://rdap.omnis.com/ -144,"Alldomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -145,"Siteleader, Inc.",Terminated, -146,"GoDaddy.com, LLC",Accredited,https://rdap.godaddy.com/v1/ -148,I.net,Terminated, -151,"PSI-USA, Inc. dba Domain Robot",Accredited,https://rdap.psi-usa.info/ -152,"FullWeb, Inc. d/b/a FullNic",Terminated, -166,7Ways,Terminated, -167,"DEXT Co., Ltd.",Terminated, -168,Register SPA,Accredited,https://rdap-register.info/ -186,Namescout Ltd,Accredited,https://rdap.rebel.com/ -206,"Antelecom, Inc. f/k/a Hughes Electronic Commerce, Inc.",Terminated, -226,Deutsche Telekom AG,Accredited,https://rdap.telekom-registrar.de/rdap/ -228,Moniker Online Services LLC,Accredited,https://rdap.rrpproxy.net/ -230,"Centergate Research Group, LLC",Terminated, -232,Datasource Network Australia Limited,Terminated, -239,"7DC, Inc.",Terminated, -240,PlanetDomain Pty Ltd,Terminated, -241,Ranger Registration (Madeira) LLC,Terminated, -242,iRegisterDomainsHere.Com Inc.,Terminated, -244,"Gabia, Inc.",Accredited,https://rdap.gabiadns.com/v1/ -245,"123 Registration, Inc.",Terminated, -246,"nondotcom, inc.",Terminated, -247,Active 24 AS,Terminated, -249,Mps Infotecnics Limited,Accredited,https://rdapserver.net/ -250,"Echo, Inc.",Terminated, -255,Hi-Tech Information & Marketing Pvt. Ltd.,Terminated, -256,New Era Information Systems Incorporation d/b/a WebYourCompany.com,Terminated, -257,"GlobalHosting, Inc. d/b/a SiteRegister",Terminated, -258,"Marksonline, Inc.",Terminated, -268,"pAsia, Inc.",Terminated, -269,Key-Systems GmbH,Accredited,https://rdap.rrpproxy.net/ -270,"Address Creation, LLC",Accredited,https://EIG.rdap.tucows.com/ -274,American Domain Name Registry,Terminated, -275,"Alice's Registry, Inc.",Terminated, -276,"Globedom Datenkommunikations GmbH, d/b/a Globedom",Terminated, -277,"Interlink Co., Ltd.",Accredited,https://rdap.gonbei.jp/ -278,"4Domains, Inc.",Terminated, -279,NameRepublic.com,Terminated, -281,"Research Institute for Computer Science, Inc.",Terminated, -282,"Central Registrar, Inc. DBA Domainmonger.com",Terminated, -291,"DNC Holdings, Inc.",Accredited,https://rdap.directnic.com/rdap/ -292,MarkMonitor Inc.,Accredited,https://rdap.markmonitor.com/rdap/ -293,Yellowiz Corp. d/b/a Yellowname.com,Terminated, -295,British Telecommunications (BT plc),Terminated, -298,"Netblue Communications Co., Ltd.",Terminated, -299,"CSC Corporate Domains, Inc.",Accredited,https://apis.cscglobal.com/dbs/rdap-api/v1/ -300,"Wooho Technology CO., Ltd d/b/a RGNames.com",Terminated, -301,"000domains, LLC",Terminated, -303,PDR Ltd. d/b/a PublicDomainRegistry.com,Accredited,https://rdapserver.net/ -304,freenet Cityline GmbH d/b/a freenet Datenkommunikations GmbH,Terminated, -317,"Philippine Registry.com, Inc.",Terminated, -320,TLDS L.L.C. d/b/a SRSPlus,Accredited,https://rdap.srsplus.com/rdap/ -321,"Registration Technologies, Inc.",Accredited, -347,"NameTree, Inc.",Terminated, -353,Bombora Technologies Pty Ltd,Accredited,https://rdap.bomboraregistrar.com/rdap/ -360,Abu-Ghazaleh Intellectual Property dba TAGIdomains.com,Accredited,https://tagidomains.com/rdap/ -363,"Funpeas Media Ventures, LLC dba DomainProcessor.com",Terminated,https://www.domainprocessor.com/rdap/ -364,Triara.com S.A. de C.V.,Terminated, -365,Reserved for historical use (EDUCAUSE),Reserved, -376,RESERVED-Internet Assigned Numbers Authority,Reserved, -377,"Venture.com, Inc. d/b/a DomainCity.com",Terminated, -378,2030138 Ontario Inc. dba NamesBeyond.com and dba GoodLuckDomain.com,Terminated, -379,"Arsys Internet, S.L. dba NICLINE.COM",Accredited,https://rdap.domainconnection.info/ -380,Tuonome.it Srl d/b/a APIsrs.com,Accredited,https://rdap.tuonome.com/ -381,DomReg Ltd. d/b/a LIBRIS.COM,Accredited,https://rdap.libris.com/ -400,"@Com Technology, LLC",Terminated, -401,"Misk.com, Inc.",Accredited,https://rdap.misk.com/ -402,Adgrafix Corporation,Terminated, -403,"AZC, Inc. d/b/a AZC.com",Terminated, -404,"C I Host, Inc.",Terminated, -407,Concentric Network Corporation,Terminated, -408,"Cydian Technologies, LLC",Terminated, -409,"DevelopersNetwork.com., Inc. dba DomainInvestigator.com (Canada)",Terminated, -410,"Apex Registry, Inc.",Terminated, -411,"Sea Wasp, LLC",Accredited,https://rdap.fabulous.com/rdap/ -412,"Domain-It!, Inc.",Accredited,https://rdap.domainit.com/ -413,"Domain Pro, LLC",Accredited,https://EIG.rdap.tucows.com/ -414,Eastern Counties Newspaper Group Ltd. d/b/a Eastern Counties Network,Terminated, -415,"Equitron, Inc. d/b/a DomainNameRegistration.com",Terminated, -416,eWindowShop.com,Terminated, -417,ExtremeNames.com,Terminated, -418,CommuniGal Communication Ltd.,Accredited,https://rdap.communigal.net/rdap/ -419,HDFC WebNet Services Ltd.,Terminated, -420,"Alibaba Cloud Computing (Beijing) Co., Ltd.",Accredited,https://whois.aliyun.com/rdap/ -421,"InfoNetworks, Inc.",Terminated, -422,InfoUSA.com,Terminated, -423,"Internetplaza City Co., Ltd.",Terminated, -424,Internetters Limited,Terminated, -425,"Intuit, Inc.",Terminated, -426,"iTool.com, Inc.",Terminated, -427,Lightrealm,Terminated, -428,"Name.Space, Incorporated",Terminated, -429,"Neomode Co., Ltd.",Terminated, -430,CORPORATION SERVICE COMPANY (UK) LIMITED,Accredited,https://apis.cscglobal.com/dbs/rdap-api/v1/ -431,"DreamHost, LLC",Accredited,https://dreamhost.rdap.tucows.com/ -432,Nobel Networks,Terminated, -433,OVH sas,Accredited,https://rdap.ovh.com/ -434,PRIMUS Telecommunications Canada Inc.,Terminated, -435,"Professo, LLC",Terminated, -436,PSINet Inc.,Terminated, -437,SiteName Ltd.,Accredited,https://rdap.communigal.net/rdap/ -438,Direct Connection Ltd.,Terminated, -439,"USA Webhost, Inc.",Terminated, -440,"Wild West Domains, LLC",Accredited,https://rdap.wildwestdomains.com/v1/ -441,"HANILNETWORKS Co., Ltd.",Terminated, -442,IKANO Communications,Terminated, -443,Vayala Corporation dba Demand.com,Terminated, -444,"Inames Co., Ltd.",Accredited,https://rdap.inames.co.kr/rdap/ -445,"Bondi, LLC",Terminated, -446,"Hosting-Network, Inc.",Terminated, -447,SafeNames Ltd.,Accredited,https://rdap.safenames.legal/rdap/ -448,"Universal Registration Services, Inc. dba NewDentity.com",Accredited,https://EIG.rdap.tucows.com/ -449,"Korea Information Certificate Authority, Inc. dba DomainCA.com",Terminated, -450,"DomainName.com, Inc.",Accredited,https://rdap.namecheap.com/ -451,"AAAQ.COM, Inc.",Terminated, -452,"Name105, Inc.",Accredited,https://namerdap.systems/ -453,"AllGlobalNames, S.A. dba Cyberegistro.com",Accredited,https://www.allglobalnames.com/es/ -455,"EnCirca, Inc.",Accredited,https://rdap.encirca.com/ -456,Webnames.ca Inc.,Accredited,https://www.webnames.ca/rdap/ -457,"Cydentity, Inc. dba Cypack.com",Terminated, -458,#1 Accredited Registrar,Terminated, -459,"Domain Monkeys, LLC",Terminated, -460,Web Commerce Communications Limited dba WebNic.cc,Accredited,https://rdap.webnic.cc/ -461,DotForce Corp. dba DotForce.com,Terminated, -462,Personal Names Limited,Terminated, -463,"Regional Network Information Center, JSC dba RU-CENTER",Accredited,https://www.nic.ru/rdap/ -464,"Name 2 Host, Inc. dba name2host.com",Terminated, -465,Domains.coop Limited,Accredited,https://rdap.domains.coop/ -466,"DomainSite, Inc.",Accredited,https://namerdap.systems/ -467,NHN JAPAN Corp.,Terminated, -468,"Amazon Registrar, Inc.",Accredited,https://rdap.registrar.amazon.com/rdap/ -469,easyDNS Technologies Inc.,Accredited,https://easydns.rdap.tucows.com/ -470,Nom-iq Ltd. dba COM LAUDE,Accredited,https://rdap.comlaude.com/rdap/ -471,"Bizcn.com, Inc.",Accredited,https://rdap.bizcn.com/rdap/ -472,Dynadot Inc,Accredited,https://rdap.dynadot.com/ -473,"Best Registration Services, Inc. dba BestRegistrar.com",Terminated, -474,IDC Frontier Inc.,Accredited,https://rdap.do-reg.net/rdap/ -475,R. Lee Chambers Company LLC dba DomainsToBeSeen.com,Terminated, -600,Rebel Ltd,Accredited,https://rdap.rebel.com/ -601,French Connexion SARL dba Domaine.fr,Accredited,https://secure.alliancenic.com:8443/rdap/ -602,LCN.COM Ltd.,Terminated, -603,Inic GmbH,Accredited,https://rdap.inic.ch/rdap/ -604,In2net Network Inc.,Accredited,https://iregister.rdap.tucows.com/ -605,rockenstein AG,Accredited,https://rdap.rockenstein.de/rdap/ -606,"Namezero, LLC",Accredited,https://EIG.rdap.tucows.com/ -607,Annulet LLC,Accredited,https://rdap.annulet.com/ -608,"EnetRegistry, Inc.",Terminated, -609,"Sav.com, LLC",Accredited,https://rdap.virtualcloud.co/rdap/ -610,Server-Service AG,Terminated, -611,"Inter China Network Software (Beijing) Co., Ltd. (aka 3721)",Terminated, -612,"Blue Razor Domains, LLC",Accredited,https://rdap.bluerazor.com/v1/ -614,"ESoftwiz, Inc.",Terminated, -615,"Vivid Domains, Inc.",Accredited, -616,Acropolis Telecom,Terminated, -617,"Epik, Inc.",Accredited,https://rdap-whois.epik.com/ -618,Enetica Pty Ltd,Terminated, -619,"Domainducks, LLC",Accredited,https://EIG.rdap.tucows.com/ -620,"Fiducia LLC, Latvijas Parstavnieciba",Accredited,https://rdap.fiducia.com/ -622,"Nameview, Inc.",Terminated, -623,"Name124, Inc.",Terminated, -624,"Name122, Inc.",Terminated, -625,"Name.com, Inc.",Accredited,https://namerdap.systems/ -626,Globis LLC,Accredited,https://rdap.neonic.com/ -627,Name Trance LLC,Terminated, -628,"Vedacore.com, Inc.",Terminated, -629,Domainz Limited,Terminated, -630,Answerable.com (I) Pvt Ltd,Terminated, -631,"Web.com Holding Company, Inc.",Terminated, -632,"Asadal, Inc.",Terminated, -633,Beijing Innovative Linkage Software Service Co. Ltd,Terminated, -634,NetTuner Corp. dba Webmasters.com,Accredited,https://rdap.webmasters.com/ -635,"SNAPNAMES 72, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -636,"BRANDON GRAY INTERNET SERVICES INC. (dba ""NameJuice.com”)",Accredited,https://namejuice.com/rdap/ -637,Dot Holding Inc.,Accredited,https://rdap.dotology.com/rdap/ -638,Name SRS AB,Accredited,https://rdap.namesrs.com/ -639,"Sipence, Inc.",Terminated, -640,"Mobile Name Services, Inc.",Terminated, -641,H. J. Linnen Associates Ltd.,Terminated, -642,Corsearch Domains LLC,Accredited,https://rdap.corsearch.domains/ -643,DNS:NET Internet Service GmbH,Terminated, -644,"Aim High!, Inc.",Terminated, -645,GMO-Z.com Pte. Ltd.,Accredited,https://rdap.gmo-onamae.com/rdap/v1/ -646,"SNAPNAMES 73, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -647,"SNAPNAMES 74, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -648,Webagentur.at Internet Services GmbH,Accredited,https://rdap.inname.net/ -649,Nictrade Internet Identity Provider AB,Terminated, -650,"SNAPNAMES 75, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -651,"Total Calories, Inc. dba Slim Names",Terminated, -652,"SNAPNAMES 76, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -653,"NamePal.com #8028, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -654,"SNAPNAMES 77, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -655,"SNAPNAMES 78, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -656,"SNAPNAMES 79, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -658,"Register Names, LLC",Accredited,https://EIG.rdap.tucows.com/ -659,"SNAPNAMES 80, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -660,"Vista.com, Inc.",Terminated, -661,"SNAPNAMES 81, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -662,"SNAPNAMES 82, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -663,"SNAPNAMES 83, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -664,Web4Africa (Pty) Ltd,Accredited,https://rdapserver.net/ -665,iRegistry Corp.,Terminated, -666,"SNAPNAMES 84, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -667,"Name Share, Inc.",Accredited,https://rdap.nameshare.com/ -668,Lead Networks Domains Pvt. Ltd.,Terminated, -669,ResellerSRS Inc dba ResellerSRS.com,Terminated, -670,"$$$ Private Label Internet Service Kiosk, Inc. (dba ""PLISK.com"")",Accredited,https://rdap.plisk.com/ -671,"CSC Management Consulting (Shanghai) Co., Ltd.",Accredited,https://apis.cscglobal.com/dbs/rdap-api/v1/ -672,"SNAPNAMES 85, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -673,NJ Tech Solutions Inc. dba Expertsrs.com,Terminated, -674,CVO.ca Inc.,Terminated, -675,Super Registry Ltd,Accredited,https://rdap.rebel.com/ -676,ExtremeDomains.ca Inc.,Terminated, -677,NetRegistry Pty Ltd.,Terminated, -678,"Ace of Domains, Inc.",Terminated, -679,Compana LLC,Terminated, -680,SearchName.ca Internet Services Corporation,Terminated, -681,DomainPlaza.ca Inc.,Terminated, -682,"NamePal.com #8008, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -683,WorldNames.ca Inc.,Terminated, -684,Domainscape.ca Inc.,Terminated, -685,Domainscostless.com Inc.,Terminated, -686,PriceDomain.ca Internet Services Corporation,Terminated, -687,"GoName-WA.com, Inc.",Terminated, -688,PrimeDomain.ca Inc.,Terminated, -689,Domains2be.com Inc.,Terminated, -690,GotNames.ca Inc.,Terminated, -691,DomainMarketPlace.ca Inc.,Terminated, -693,IPXcess.com Sdn Bhd,Terminated, -694,Whoistoolbar Corp.,Terminated, -695,MOBIKAPP Limited,Accredited,https://rdap.communigal.net/rdap/ -696,"Entorno Digital, S.A.",Accredited,https://rdap.entorno.es/ -697,"Todaynic.com, Inc.",Accredited,https://rdap.now.cn:8443/v1/ -698,"Dagnabit, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -699,"Internet Internal Affairs, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -700,"Blisternet, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -701,"Domainnovations, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -702,"Dropoutlet, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -703,"Nom Infinitum, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -704,"SNAPNAMES 89, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -705,"Extra Threads, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -706,"Indirection Identity, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -707,"Fushi Tarazu, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -708,"SNAPNAMES 1, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -709,"DomainAllies.com, Inc.",Accredited, -710,"! ! ! $0 Cost Domain and Hosting Services, Inc.",Terminated, -711,"DomainSystems, Inc. dba DomainsSystems.com",Terminated, -712,"Tahoe Domains, Inc.",Terminated, -713,3597245 Canada Inc. dba Nic-Name Internet Service Corp.,Terminated, -714,3684458 Canada Inc. dba Quark.ca Internet Services Corporation,Terminated, -715,GoNames.ca Inc.,Terminated, -716,DomainsFirst.ca Inc.,Terminated, -717,"BeMyDomain.net, Inc.",Terminated, -718,DomainBuzz.ca Inc.,Terminated, -719,"NamePal.com #8001, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -720,PopularDomains.ca Inc.,Terminated, -721,LuckyDomains.ca Inc.,Terminated, -722,"GoName-FL.com, Inc.",Terminated, -723,SecureDomain.ca Internet Services Corporation,Terminated, -724,South America Domains Ltd. dba namefrog.com.,Terminated, -725,"NameStream.com, Inc.",Terminated, -726,"EntertheDomain.com, Inc.",Terminated, -727,Hostmaster.ca Inc.,Terminated, -728,YourDomainCo.com Inc.,Terminated, -729,Regnow.ca Inc.,Terminated, -730,ZippyDomains.ca Inc.,Terminated, -731,Domus Enterprises LLC dba DOMUS,Accredited,https://rdap.domus.com/ -733,UsefulDomains.net Inc.,Terminated, -734,"NamePal.com #8004, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -735,Rebel.ca Corp.,Accredited,https://rdap.rebel.com/ -736,Romel Corporation,Terminated, -737,Matchnames.ca Inc.,Terminated, -738,DomainMall.ca Inc.,Terminated, -739,DomainAuthority.ca Inc.,Terminated, -740,"GoName-HI.com, Inc.",Terminated, -741,Abdomainations.ca Inc.,Terminated, -742,DomainStreet.ca Inc.,Terminated, -743,"NamePal.com #8002, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -744,Crazy8Domains.com Inc.,Terminated, -745,Domains2Go.ca Inc.,Terminated, -746,MyNameOnline.ca Inc,Terminated, -747,Intersolved-WA.com Inc.,Terminated, -748,"NamePal.com #8023, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -749,DomainCentral.ca Inc.,Terminated, -750,"Nerd Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -751,"Sicherregister, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -752,"SNAPNAMES 2, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -753,"Name Thread, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -754,"Sssasss, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -755,"Name Nelly, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -756,2003300 Ontario Inc. dba GetDomainsIWant.ca Internet Services Corp.,Terminated, -757,3349608 Canada Inc. dba GetYourDotInfo.com Inc.,Terminated, -758,6230644 Canada Inc. dba Megabyte.ca Internet Services Corp.,Terminated, -759,AvailableDomains.ca Inc.,Terminated, -760,"Intersolved-TX.com, Inc.",Terminated, -761,Coolhosting.ca Inc.,Terminated, -762,"NamePal.com #8024, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -763,"NamePal.com #8025, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -764,Domainestic.com Inc.,Terminated, -765,Domainfighter.ca Inc.,Terminated, -766,"Intersolved-TN.com, Inc.",Terminated, -767,DomainHeadz.ca Inc.,Terminated, -768,DomainIdeas.ca Inc.,Terminated, -769,Domainlink.ca Inc.,Terminated, -770,DomainLuminary.ca Inc.,Terminated, -771,"NamePal.com #8026, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -772,"MyManager, Inc.",Terminated, -773,DomainParadise.ca Inc.,Terminated, -774,Domainreign.ca Inc.,Terminated, -775,Domains4u.ca Inc.,Terminated, -776,Zhuimi Inc,Accredited,http://rdap.park.io:8080/rdap/ -777,Paimi Inc,Accredited,https://register.paimi.com/rdap/ -778,Agrinoon Inc,Terminated, -779,DomainVentures.ca Internet Services Corporation,Terminated, -780,"NamePal.com #8006, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -781,"NamePal.com #8007, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -782,"NamePal.com #8021, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -783,Grabton.ca Inc.,Terminated, -784,Hipsearch.com Inc.,Terminated, -785,"NamePal.com #8009, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -786,Maindomain.ca Inc.,Terminated, -787,"GoName-TN.com, Inc.",Terminated, -788,Name.cc Inc,Terminated,https://register.paimi.com/rdap/ -789,Notablenames.ca Inc.,Terminated, -790,Premierename.ca Inc.,Terminated, -791,PrimeRegistrar.ca Inc.,Terminated, -792,"NamePal.com #8019, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -793,Redomainder Internet Services Corporation,Terminated, -794,RegisterMyDomains.ca Inc.,Terminated, -795,Registerone.ca Inc.,Terminated, -796,ScoopDomain.ca Inc.,Terminated, -797,Securadomain.ca Inc.,Terminated, -798,Submit.ca Inc.,Terminated, -799,TheDomainNameStore.ca Inc.,Terminated, -800,TheDomainShop.ca Inc.,Terminated, -801,WeRegisterIt.ca Inc.,Terminated, -802,WhatsYourName.ca Inc.,Terminated, -803,Wisdomain.ca Inc.,Terminated, -804,Zidodomain.ca Inc.,Terminated, -805,Domainiac.ca Inc.,Terminated, -807,Simply Named Inc. dba SimplyNamed.com,Terminated, -808,"Registrar Company, Inc.",Terminated, -809,Ledl.net GmbH,Accredited,https://rdap.ledl.net/ -810,About Domain Dot Com Solutions Pvt. Ltd. d/b/a www.aboutdomainsolutions.com,Terminated, -811,Atlas Advanced Internet Solutions Ltd. dba Atlas Internet,Terminated, -812,"CoolHandle Hosting, LLC",Terminated, -813,"Basic Fusion, Inc.",Terminated, -814,Internet.bs Corp.,Terminated, -815,Planet Online Corp.,Terminated, -816,"0101 Internet, Inc.",Accredited,https://rdapserver.net/ -817,MAFF Inc.,Accredited,https://whois.xz.com/rdap/ -818,"Interdominios, Inc.",Accredited,https://rdapserver.net/ -819,Turkticaret.net Yazılım Hizmetleri Sanayi ve Ticaret A.Ş.,Accredited,https://rdapserver.net/ -820,PHPNET France DBA Nuxit,Accredited,https://rdapserver.net/ -821,"RegisterFly.com, Inc.",Terminated, -822,"Registrar Label, Inc.",Terminated, -823,"Internet Service Registrar, Inc.",Terminated, -825,"BP Holdings Group, Inc. dba IS.COM",Terminated, -826,"Name.net, Inc.",Accredited,https://namerdap.systems/ -827,"Mouzz Interactive, Inc.",Terminated, -828,Hetzner Online GmbH,Accredited,https://rdap.your-server.de/ -829,"Anytime Sites, LLC",Accredited,https://rdapserver.net/ -830,"IPNIC, Inc.",Terminated, -831,"Crisp Names, LLC",Accredited,https://rdapserver.net/ -832,"EstDomains, Inc.",Terminated, -833,"Dotted Ventures, Inc.",Terminated, -834,"Domain Jingles, Inc.",Terminated, -835,KuwaitNET General Trading Co.,Accredited,https://rdapserver.net/ -836,The Namespace Group Pty Ltd,Accredited,https://rdapserver.net/ -837,"Freeparking Domain Registrars, Inc.",Terminated, -838,BatDomains.com Ltd.,Terminated, -839,Realtime Register B.V.,Accredited,https://rdap.yoursrs.com/ -840,Nicco Ltd.,Accredited,https://rdap.nicco.com/ -841,Tiger Technologies LLC,Accredited,https://www.tigertech.net/rdap/ -842,"SoftLayer Technologies, Inc.",Terminated, -843,Incuborn Solutions Inc.,Terminated, -844,Minds and Machines Registrar UK Limited,Terminated, -845,"1800-website, LLC",Accredited,https://EIG.rdap.tucows.com/ -846,"123domainrenewals, LLC",Accredited,https://EIG.rdap.tucows.com/ -847,"Hostlane, LLC",Accredited,https://EIG.rdap.tucows.com/ -848,"PrivacyPost, LLC",Accredited,https://EIG.rdap.tucows.com/ -849,"Allindomains, LLC",Terminated, -850,"Allaccessdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -851,"Addressontheweb, LLC",Accredited,https://EIG.rdap.tucows.com/ -852,"Atozdomainsmarket, LLC",Terminated, -853,"Austriadomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -854,"995discountdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -855,"24x7domains, LLC",Accredited,https://EIG.rdap.tucows.com/ -856,"1st-for-domain-names, LLC",Accredited,https://EIG.rdap.tucows.com/ -857,"Capitoldomains, LLC",Terminated, -858,"Chinesedomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -859,"Cocosislandsdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -860,"Belgiumdomains, LLC",Terminated, -861,"Bidfordomainnames, LLC",Accredited,https://EIG.rdap.tucows.com/ -862,"Capitaldomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -863,"Deutchdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -864,"Domaincamping, LLC",Accredited,https://EIG.rdap.tucows.com/ -865,"Domaindoorman, LLC",Terminated, -866,"Domainhostingweb, LLC",Accredited,https://EIG.rdap.tucows.com/ -867,"Domaininternetname, LLC",Accredited,https://EIG.rdap.tucows.com/ -868,"Domainnamebidder, LLC",Accredited,https://EIG.rdap.tucows.com/ -869,"Domainnamelookup, LLC",Accredited,https://EIG.rdap.tucows.com/ -870,"Niuedomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -871,"Samoandomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -872,"Tuvaludomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -873,"Unitedkingdomdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -874,"Chocolatecovereddomains,LLC",Accredited,https://EIG.rdap.tucows.com/ -875,"Claimeddomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -876,"Department-of-domains, LLC",Accredited,https://EIG.rdap.tucows.com/ -877,"Decentdomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -878,"Columbiadomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -879,"Domainbusinessnames, LLC",Accredited,https://EIG.rdap.tucows.com/ -880,"Domainclub.com, LLC",Accredited,https://rdap.domainclub.com/v1/ -881,"Domainbulkregistration, LLC",Accredited,https://EIG.rdap.tucows.com/ -882,"Domain-A-Go-Go, LLC",Accredited,https://EIG.rdap.tucows.com/ -883,"Discountdomainservices, LLC",Accredited,https://EIG.rdap.tucows.com/ -884,"Diggitydot, LLC",Accredited,https://EIG.rdap.tucows.com/ -885,"Austriandomains, LLC",Accredited,https://EIG.rdap.tucows.com/ -886,"Domain.com, LLC",Accredited,https://endurance.rdap.tucows.com/ -887,"Netdorm, Inc. dba DnsExit.com",Accredited, -888,"Pheenix, Inc.",Terminated, -889,"Domainclip Domains, Inc.",Accredited,https://rdapserver.net/ -890,IP Mirror Pte Ltd dba IP MIRROR,Terminated, -891,"Iron Mountain Intellectual Property Management, Inc.",Terminated, -892,"Netfirms, Inc.",Terminated, -893,NetraCorp LLC dba Global Internet,Terminated, -894,"Domain Jamboree, LLC",Accredited,https://rdap.domainjamboreellc.com/ -895,Squarespace Domains II LLC,Accredited, -896,Aruba SpA,Accredited, -897,"21Company, Inc. dba 21-domain.com",Terminated, -898,Alantron Inc.,Accredited,https://rdap.alantron.com/ -899,Naugus Limited LLC,Accredited,https://rdap.naugus.com/ -900,Netregistry Wholesale Pty Ltd,Accredited,https://tpp.rdap.tucows.com/ -901,AirNames.com Inc.,Terminated, -902,"Arab Internet Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -903,"AsiaDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -904,AvidDomains.com Inc.,Terminated, -905,CodyCorp.com Inc.,Terminated, -906,CSIRegistry.com Inc.,Terminated, -907,"DNSvillage.com, Inc.",Terminated, -908,DomainHip.com Inc.,Terminated, -909,DynaNames.com Inc.,Terminated, -910,"Entertainment Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -911,BrandNames.com SARL,Terminated, -912,"Kingdomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -913,PocketDomain.com Inc.,Accredited,https://whois.xz.com/rdap/ -914,"Postaldomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -915,"Private Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -916,RallyDomains.com Inc.,Terminated, -917,"SBSNames, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -918,"Small Business Names And Certs, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -919,"Traffic Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -920,"Travel Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -921,"Whiteglove Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -922,"Afterdark Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -923,"One Putt, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -924,Ynot Domains Corp.,Terminated, -925,"Everyones Internet, Ltd. dba SoftLayer",Terminated, -926,"Reseller Services, Inc. dba ResellServ.com",Accredited,https://secure.iviewer.com/rdap-server/ -927,Nomer Registro de Dominio e Hospedagem de sites Ltda DBA Nomer.com.br,Terminated, -928,"Hostway Services, Inc.",Terminated, -929,"AfterGen, Inc. dba JumpingDot",Terminated, -930,"Zipa, L.L.C.",Terminated, -931,UdomainName.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -932,FindUAName.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -933,YouDamain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -934,GoServeYourDomain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -935,"Commerce Island, LLC",Accredited,https://rdapserver.net/ -936,"Ground Internet, Inc.",Terminated, -937,"Blue Fractal, LLC",Accredited,https://rdapserver.net/ -938,WHC Online Solutions Inc.,Accredited,https://rdapserver.net/ -939,"Desert Devil, LLC",Accredited,https://rdapserver.net/ -940,Above.com Pty Ltd.,Accredited,https://www.above.com/rdap/ -941,"Dynamic Dolphin, Inc.",Terminated, -942,Autica Domain Services Inc.,Terminated, -943,DotSpeedy LLC dba dotspeedy.com,Terminated, -944,IServeYourDomain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -945,Udamain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -946,FindYouADomain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -947,FindYouAName.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -948,Kontent GmbH,Accredited, -949,Verza Domain Depot BV,Terminated, -950,"A Rite Tern, LLC",Terminated, -951,Humeia Corporation,Terminated, -952,SaveMoreNames.com Inc.,Terminated, -953,Nanjing Imperiosus Technology Co. Ltd.,Terminated, -954,INDOM SAS,Terminated, -955,Launchpad.com Inc.,Accredited,https://rdapserver.net/ -956,Hosting365 Inc.,Terminated, -957,"Titanic Hosting, LLC",Accredited,https://rdapserver.net/ -958,"Virtual Registrar, Inc.",Terminated, -959,"Tropic Management Systems, Inc.",Accredited,https://rdapserver.net/ -960,"WebZero, Inc.",Terminated, -961,"Rank USA, LLC",Accredited,https://rdapserver.net/ -962,"Red Register, Inc.",Terminated, -963,Nom d'un Net ! Sarl,Terminated, -965,Fluccs - The Australian Cloud Pty Ltd,Accredited,https://rdapserver.net/ -966,"Web Business, LLC",Terminated, -967,"! #1 Host Australia, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -968,"! #1 Host Germany, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -969,"! #1 Host Brazil, Inc.",Terminated, -970,"! #1 Host China, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -971,"! #1 Host Canada, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -972,Netregistry Domains Pty Ltd,Terminated, -973,"Haveaname, LLC",Accredited,https://rdap.haveaname.com/ -974,"Netestate, LLC",Accredited,https://rdap.netestate.com/ -975,"Topsystem, LLC",Accredited,https://rdap.topsystem.com/ -976,http.net Internet GmbH,Accredited,https://rdap.routing.net/ -977,Broadspire Inc.,Terminated, -978,"! #1 Host Israel, Inc.",Terminated, -979,"! #1 Host United Kingdom, Inc.",Terminated, -980,"! #1 Host Japan, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -981,"! #1 Host Korea, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -982,"! #1 Host Kuwait, Inc.",Terminated, -983,"! #1 Host Malaysia, Inc.",Terminated, -984,"ID Genesis, LLC",Terminated, -985,"Own Identity, Inc.",Accredited,https://rdap.ownidentity.com/rdap/ -986,"Mighty Bay, LLC",Accredited,https://rdapserver.net/ -987,"Imperial Registrations, Inc.",Accredited,https://rdapserver.net/ -988,R.B. Data Net LTD.,Terminated, -989,Tarton Domain Names Ltd.,Terminated, -990,The Black Cow Corp.,Terminated, -991,Jaz Domain Names Ltd.,Terminated, -992,"MojoNIC, L.L.C. dba MojoNIC.com",Terminated, -993,"CareerBuilder, LLC dba CareerBuilder.com",Terminated, -994,$ PPC Marketing LLC,Terminated, -995,Europe Domains LLC,Terminated, -996,"DomainAdministration.com, LLC",Accredited,https://rdap.domainadministration.com/ -997,"NamePal.com, LLC",Accredited,https://www.namepal.com/rdap/ -998,Tzolkin Corporation dba: TZO.COM,Terminated, -999,Mobiline USA dba domainbonus.com,Terminated, -1000,"******nondotcom, Inc.",Terminated, -1001,Domeneshop AS dba domainnameshop.com,Accredited,https://rdap.domeneshop.no/ -1002,"Maxim Internet, Inc.",Terminated, -1003,"Ekados, Inc., d/b/a groundregistry.com",Accredited,https://rdapserver.net/ -1004,Netlynx Inc.,Terminated, -1005,NetEarth One Inc. d/b/a NetEarth,Accredited,https://rdapserver.net/ -1006,"Az.pl, Inc.",Terminated, -1007,Net 4 India Limited,Terminated, -1008,"SNAPNAMES 7, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1009,"SNAPNAMES 8, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1010,"SNAPNAMES 9, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1011,101domain GRS Limited,Accredited,https://rdap.101domain.com/ -1012,"SNAPNAMES 10, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1013,"SNAPNAMES 11, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1014,"SNAPNAMES 12, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1015,MOBILE.CO DOMAINS CORP.,Terminated, -1016,"Gee Whiz Domains, Inc.",Terminated, -1017,"Black Ice Domains, Inc.",Terminated, -1018,"Backslap Domains, Inc.",Terminated, -1019,"Threadagent.com, Inc.",Accredited,https://whois.xz.com/rdap/ -1020,"Threadwalker.com, Inc.",Terminated, -1021,"Threadwatch.com, Inc.",Terminated, -1022,"NamePal.com #8010, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1023,NamePal.com #8011,Accredited,https://rdap.networksolutions.com/rdap/ -1024,"NamePal.com #8012, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1025,"NamePal.com #8013, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1026,"NamePal.com #8014, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1027,"NamePal.com #8015, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1028,"NamePal.com #8016, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1029,"NamePal.com #8017, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1030,"Threadwise.com, Inc.",Terminated, -1031,"NamePal.com #8018, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1032,DNGLOBE LLC,Terminated, -1033,"SNAPNAMES 13, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1034,"SNAPNAMES 14, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1035,"SNAPNAMES 15, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1036,"SNAPNAMES 16, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1037,"SNAPNAMES 17, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1038,"SNAPNAMES 18, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1039,Cheapies.com Inc.,Terminated, -1040,"Name106, Inc.",Accredited,https://namerdap.systems/ -1041,"Good Luck Internet Services PVT, LTD.",Terminated, -1042,"Big House Services, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1043,"Domain Rouge, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1044,"SNAPNAMES 3, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1045,"SNAPNAMES 4, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1046,"SNAPNAMES 5, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1047,"SNAPNAMES 6, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1048,"SNAPNAMES 19, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1049,"SNAPNAMES 20, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1050,"SNAPNAMES 36, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1051,"SNAPNAMES 71, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1052,EuroDNS S.A.,Accredited,https://rdap.eurodns.com/ -1053,"SNAPNAMES 98, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1054,"Retail Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1055,"SearchNResQ, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1056,"Fenominal, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1057,"SNAPNAMES 86, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1058,"SNAPNAMES 95, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1059,"SNAPNAMES 96, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1060,"SNAPNAMES 97, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1061,"SNAPNAMES 87, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1062,"SNAPNAMES 94, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1063,"SNAPNAMES 92, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1064,"SNAPNAMES 93, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1065,"SNAPNAMES 88, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1066,"SNAPNAMES 90, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1067,"SNAPNAMES 91, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1068,"NameCheap, Inc.",Accredited,https://rdap.namecheap.com/ -1069,"DropExtra.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1070,"DropFall.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1071,"DropHub.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1072,"DropJump.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1073,"DropLabel.com, Inc.",Terminated, -1074,"DropLimited.com, Inc.",Terminated, -1075,"DropSave.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1076,"Domain Guardians, Inc.",Accredited,https://rdap.domainguardians.com/rdap/ -1077,"DropWalk.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1078,"DropWeek.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1079,Internet Solutions (Pty) Ltd.,Terminated, -1080,Locaweb Servicos de Internet S/A dba Locaweb,Terminated, -1081,"Bargin Register, Inc.",Terminated, -1082,"Register4Less, Inc.",Accredited,https://rdapserver.net/ -1083,"Curious Net, LLC",Accredited,https://rdapserver.net/ -1084,"AsiaRegister, Inc.",Accredited,https://rdap.asiaregister.com/ -1085,"Click Registrar, LLC dba publicdomainregistry.com",Accredited,https://rdapserver.net/ -1086,Marcaria International LLC,Accredited,https://rdapserver.net/ -1087,MOOZOOY MEDIA INC.,Terminated, -1088,"Globe Hosting, Inc.",Terminated, -1089,"Blue Gravity Communications, Inc.",Terminated, -1090,"Active Registrar, Inc.",Terminated, -1091,"IHS Telekom, Inc.",Accredited,https://rdapserver.net/ -1092,"Best Bulk Register, Inc.",Terminated, -1093,"Cool Ocean, LLC",Accredited,https://rdapserver.net/ -1094,HooYoo (US) Inc.,Terminated, -1095,European NIC Inc.,Terminated, -1096,"Find Good Domains, LLC",Accredited,https://rdapserver.net/ -1097,"Nettica Domains, Inc.",Terminated, -1098,"Domain Mantra, LLC",Accredited,https://rdapserver.net/ -1099,"Domain Band, LLC",Accredited,https://rdapserver.net/ -1100,"Net Juggler, LLC",Accredited,https://rdapserver.net/ -1101,"Power Carrier, LLC",Accredited,https://rdapserver.net/ -1102,"Network Savior, LLC",Accredited,https://rdapserver.net/ -1103,"Name For Name, Inc.",Terminated, -1104,"Name To Fame, LLC",Accredited,https://rdapserver.net/ -1105,"Unpower, LLC",Accredited,https://rdapserver.net/ -1106,"Unified Servers, LLC",Accredited,https://rdapserver.net/ -1107,"Tech Tyrants, LLC",Accredited,https://rdapserver.net/ -1108,"Ultra Registrar, LLC",Accredited,https://rdapserver.net/ -1109,"Trade Starter, LLC",Accredited,https://rdapserver.net/ -1110,FBS Inc.,Accredited,https://rdap.isimtescil.net/api/ -1111,"DomainContext, Inc.",Accredited,https://rdap.domaincontext.com/ -1112,"Internet Invest, Ltd. dba Imena.ua",Accredited,https://rdapserver.net/ -1113,"Instinct Solutions, LLC",Accredited,https://rdapserver.net/ -1114,Media Elite Holdings Limited,Accredited,https://rdap.registermatrix.com/ -1115,"Visual Monster, LLC",Accredited,https://rdapserver.net/ -1116,"Domerati, Inc.",Terminated, -1117,"Platinum Registrar, LLC",Accredited,https://rdapserver.net/ -1118,"Crystal Coal, LLC",Accredited,https://rdapserver.net/ -1119,"Extremely Wild, LLC",Accredited,https://rdapserver.net/ -1120,"Game For Names, LLC",Accredited,https://rdapserver.net/ -1121,"Go Full House, LLC",Accredited,https://rdapserver.net/ -1122,"Key Registrar, LLC",Accredited,https://rdapserver.net/ -1123,"Magic Friday, LLC",Accredited,https://rdapserver.net/ -1124,"Need Servers, LLC",Accredited,https://rdapserver.net/ -1125,"Name Perfections, LLC",Accredited,https://rdapserver.net/ -1126,"Yellow Start, LLC",Accredited,https://rdapserver.net/ -1127,"Zone Casting, LLC",Accredited,https://rdapserver.net/ -1128,"Power Namers, LLC",Accredited,https://rdapserver.net/ -1129,"Extend Names, LLC",Accredited,https://rdapserver.net/ -1130,"Ever Ready Names, LLC",Accredited,https://rdapserver.net/ -1131,Experian Services Corp.,Terminated, -1132,Dotname Korea Corp.,Accredited,https://rdap.dotnamekorea.com/ -1133,"The Names Registration, Inc.",Terminated, -1134,"General Names, Inc.",Terminated, -1135,"Best Site Names, Inc.",Terminated, -1136,"Specific Name, Inc.",Terminated, -1137,"Naming Associate, Inc.",Terminated, -1138,"Names Real, Inc.",Terminated, -1139,"Names Bond, Inc.",Terminated, -1140,"Global Names Online, Inc.",Terminated, -1141,"Get Real Names, Inc.",Terminated, -1142,"Genuine Names, Inc.",Terminated, -1143,"Your Domain King, LLC",Accredited,https://rdapserver.net/ -1144,"The Registrar Service, LLC",Accredited,https://rdapserver.net/ -1145,"Big Domain Shop, LLC",Accredited,https://rdapserver.net/ -1146,"Western United Domains, Inc.",Terminated, -1147,"Super Name World, LLC",Accredited,https://rdapserver.net/ -1148,"Jumbo Name, LLC",Accredited,https://rdapserver.net/ -1149,"Go China Domains, LLC",Accredited,https://rdap.gochinadomains.com/v1/ -1150,"Go Canada Domains, LLC",Accredited,https://rdap.gocanadadomains.com/v1/ -1151,"Go Australia Domains, LLC",Accredited,https://rdap.goaustraliadomains.com/v1/ -1152,"Go Montenegro Domains, LLC",Accredited,https://rdap.gomontenegrodomains.com/v1/ -1153,"Go France Domains, LLC",Accredited,https://rdap.gofrancedomains.com/v1/ -1154,FastDomain Inc.,Accredited,https://rdap.web.com/rdap/ -1155,Power Brand Center Corp.,Terminated, -1156,Identify.com Web Services LLC,Terminated, -1157,AtlanticFriendNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1158,Adomainofyourown.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1159,Allearthdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1160,Atomicdomainnames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1161,Baronofdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1162,Beartrapdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1163,Belmontdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1164,Betterthanaveragedomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1165,Biglizarddomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1166,BullRunDomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1167,Allworldnames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1168,Burnsidedomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1169,Columbianames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1170,Compuglobalhypermega.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1171,Deschutesdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1172,Domainamania.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1173,Domainarmada.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1174,DomainCannon.com LLC,Terminated, -1175,Domaincapitan.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1176,Domaincomesaround.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1177,Domaingazelle.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1178,Domainhawks.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1179,Domainhysteria.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1180,Domaininthebasket.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1181,Domaininthehole.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1182,Domainjungle.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1183,DomainParkBlock.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1184,Domainraker.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1185,Domainroyale.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1186,DomainSails.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1187,Domainsalsa.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1188,Domainsareforever.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1189,Domainsinthebag.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1190,Domainsofcourse.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1191,Domainsoftheday.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1192,Domainsoftheworld.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1193,Domainsofvalue.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1194,Domainsouffle.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1195,Domainsoverboard.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1196,Domainsovereigns.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1197,DomainSprouts.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1198,Domainstreetdirect.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1199,Domainsurgeon.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1200,Domaintimemachine.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1201,Domainyeti.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1202,DuckBilledDomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1203,EUNameFlood.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1204,EunamesOregon.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1205,EuropeanConnectiononline.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1206,EurotrashNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1207,EUTurbo.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1208,Flancrestdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1209,Freshbreweddomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1210,FrontStreetDomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1211,Godomaingo.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1212,Gozerdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1213,Gradeadomainnames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1214,Heavydomains.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1215,Imminentdomains.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1216,Interlakenames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1217,Mypreciousdomain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1218,Namearsenal.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1219,Namecroc.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1220,Nameemperor.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1221,Namefinger.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1222,NotSoFamousNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1223,Octopusdomains.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1224,OldTownDomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1225,OldWorldAliases.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1226,OregonEU.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1227,OregonURLs.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1228,PDXPrivateNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1229,PearlNamingService.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1230,PortlandNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1231,Protondomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1232,Skykomishdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1233,ThirdFloorDNS.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1234,WillametteNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1235,ZigZagNames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1236,"iCrossing, Inc.",Terminated, -1237,"Sundance Group, Inc.",Terminated, -1238,"OOO ""Russian Registrar""",Terminated, -1239,CPS-Datensysteme GmbH,Accredited,https://rdap.cps-datensysteme.de/ -1240,Digirati Informatica Servicos e Telecomunicacoes LTDA dba Hostnet.com,Terminated, -1241,"Alfena, LLC",Accredited, -1242,"Ignitela, LLC",Terminated, -1243,"yenkos, LLC",Terminated, -1244,"Intersolved-HI.com, Inc.",Terminated, -1245,WhiteCowDomains.com Inc.,Terminated, -1246,Dontaskwhy.ca Inc.,Terminated, -1247,"Intersolved-FL.com, Inc.",Terminated, -1248,"GoName-TX.com, Inc.",Terminated, -1249,DotAlliance Inc.,Accredited,https://rdap.dotalliance.com/rdap/ -1250,"OwnRegistrar, Inc.",Accredited,https://rdapbase.com/ -1251,Nameshield SAS,Accredited,https://rdap.nameshield.net/ -1252,OPENNAME LLC,Accredited,https://rdap.openname.com/ -1253,NICREG LLC,Accredited,https://rdap.nicreg.com/ -1254,NEUDOMAIN LLC,Accredited,https://rdap.neudomain.com/ -1255,MISTERNIC LLC,Accredited,https://rdap.misternic.com/ -1256,INSTANTNAMES LLC,Accredited,https://rdap.instantnames.com/ -1257,Variomedia AG,Accredited,https://rdap.variomedia.de/ -1258,"Namehouse, Inc.",Terminated, -1259,SBNames Ltd.,Terminated, -1260,ISPREG LTD,Terminated, -1261,ABSYSTEMS INC dba yournamemonkey.com,Terminated, -1262,Dinahosting s.l.,Accredited,https://rdap.dinahosting.com/ -1263,"SNAPNAMES 21, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1264,"SNAPNAMES 22, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1265,"SNAPNAMES 23, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1266,"SNAPNAMES 24, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1267,"SNAPNAMES 26, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1268,"SNAPNAMES 27, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1269,"SNAPNAMES 28, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1270,"SNAPNAMES 29, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1271,"SNAPNAMES 30, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1272,"SNAPNAMES 31, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1273,"SNAPNAMES 32, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1274,"SNAPNAMES 33, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1275,"SNAPNAMES 34, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1276,"SNAPNAMES 35, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1277,"SNAPNAMES 37, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1278,"SNAPNAMES 38, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1279,"SNAPNAMES 39, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1280,"SNAPNAMES 41, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1281,"SNAPNAMES 51, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1282,"SNAPNAMES 52, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1283,"SNAPNAMES 53, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1284,"SNAPNAMES 54, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1285,"SNAPNAMES 55, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1286,"SNAPNAMES 56, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1287,"SNAPNAMES 60, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1288,"SNAPNAMES 61, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1289,"SNAPNAMES 62, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1290,SafeBrands SAS,Accredited,https://rdap.safebrands.com/ -1291,Dreamscape Networks International Pte Ltd,Accredited,https://rdap.dreamscapenetworks.com/ -1292,"SNAPNAMES 45, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1293,"SNAPNAMES 49, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1294,"SNAPNAMES 48, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1295,"SNAPNAMES 25, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1296,"SNAPNAMES 58, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1297,"SNAPNAMES 65, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1298,Corporation Service Company (DBS) INC.,Accredited,https://apis.cscglobal.com/dbs/rdap-api/v1/ -1299,"SNAPNAMES 68, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1300,"SNAPNAMES 63, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1301,"SNAPNAMES 57, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1302,"SNAPNAMES 40, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1303,"SNAPNAMES 66, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1304,"SNAPNAMES 42, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1305,"SNAPNAMES 46, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1306,"SNAPNAMES 67, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1307,"SNAPNAMES 47, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1308,"SNAPNAMES 50, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1309,"SNAPNAMES 43, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1310,"SNAPNAMES 44, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1311,"SNAPNAMES 70, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1312,"SNAPNAMES 59, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1313,"SNAPNAMES 69, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1314,"SNAPNAMES 64, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1315,USA Intra Corp.,Terminated, -1316,"Xiamen 35.Com Technology Co., Ltd.",Accredited,https://rdap.35.com/rdap/ -1317,documentdata Anstalt,Terminated, -1318,Kaunas University of Technology,Accredited,https://rdap.domains.lt/ -1319,Mister Name SARL,Terminated, -1320,NGI SpA,Terminated, -1321,ATXDOMAINS Inc.,Terminated, -1322,GPDOMAINS Inc.,Terminated, -1323,IDNDOMAINS Inc.,Terminated, -1324,TLDOMAINS Inc.,Terminated, -1325,"VentureDomains, Inc.",Terminated, -1326,"Webair Internet Development, Inc.",Accredited,https://rdapserver.net/ -1327,"Vitalwerks Internet Solutions, LLC DBA No-IP",Accredited,https://rdap.noip.com/rdap/ -1328,RegistryGate GmbH,Accredited,https://rdap.registrygate.com/ -1329,"Intermedia.NET, Inc.",Terminated, -1330,Microsoft Corporation,Accredited, -1331,"eName Technology Co., Ltd.",Accredited,https://whois.ename.com/rdap/ -1332,Experinom Inc.,Accredited,https://rdapserver.net/ -1333,"Samjung Data Service Co., Ltd",Accredited,https://rdap.directdomain.co.kr/rdap/domain/ -1334,"#1 Internet Services International, Inc. dba 1ISI",Terminated, -1335,"Volusion, Inc.",Terminated, -1336,"Net-Chinese Co., Ltd.",Accredited,https://rdap.net-chinese.com/ -1337,Terranet (India) Private Limited,Accredited, -1338,"UltraRPM, Inc. dba metapredict.com",Terminated, -1339,M. G. Infocom Pvt. Ltd. dba MindGenies,Terminated, -1340,"Arctic Names, Inc.",Terminated,https://arcticnames.rdap.tucows.com/ -1341,Hawthornedomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1342,Namevolcano.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1343,Namesalacarte.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1344,Namepanther.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1345,"Key-Systems, LLC",Accredited,https://rdap.rrpproxy.net/ -1346,Sitefrenzy.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1347,Silverbackdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1348,Savethename.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1349,Santiamdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1350,Sammamishdomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1351,Rainydaydomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1352,GateKeeperDomains.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1353,Soyouwantadomain.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1354,Snoqulamiedomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1355,Snappyregistrar.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1356,Mvpdomainnames.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1357,Microbreweddomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1358,Masterofmydomains.net LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1359,Lakeodomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1360,Klaatudomains.com LLC,Accredited,https://rdap.networksolutions.com/rdap/ -1361,"IBI.Net, Inc.",Terminated, -1362,Regtime Ltd.,Accredited,https://rdap.webnames.ru/rdap/ -1363,"FarStar Domains, Inc.",Terminated, -1364,Kheweul.com SA,Accredited,https://rdapserver.net/ -1365,Open System Ltda - Me,Terminated, -1366,"Xiamen ChinaSource Internet Service Co., Ltd",Accredited,https://rdap.zzy.cn/ -1367,Paknic (Private) Limited,Accredited,https://rdap.paknic.com/ -1368,"1 Domain Source Ltd. dba Domain One Source, Inc.",Terminated, -1369,Discount Domains Ltd.,Terminated, -1370,Internet Viennaweb Service GmbH,Terminated, -1371,Name SRS AB,Terminated, -1372,Sedo.com LLC,Accredited, -1373,"DotArai Co., Ltd.",Accredited,https://rdap.dotarai.com/rdap/ -1374,"Standard Names, LLC",Terminated, -1375,Register.ca Inc.,Accredited,https://registerca.rdap.tucows.com/ -1376,Instra Corporation Pty Ltd.,Accredited,https://rdap.instra.com/ -1377,"Alibaba (China) Technology Co., Ltd.",Terminated, -1378,Hosteur SARL,Accredited,https://rdapsvc.rag-cloud.hosteur.com/ -1379,China Organizational Name Service Center of the State Commission Office for Public Sector Reform,Accredited,https://rdap.sdc.org.cn/ -1380,Oi Internet S/A,Terminated, -1381,AFRIREGISTER S.A.,Accredited,https://rdap.afriregister.africa/ -1382,Add2Net Inc.,Terminated, -1383,"Soluciones Corporativas IP, SL",Accredited,https://rdap.scip.es/ -1384,"DevStart, Inc.",Terminated, -1385,Relevad Corporation,Terminated, -1386,Premium Registrations Sweden AB,Terminated, -1387,1API GmbH,Accredited,https://rdap.1api.net/ -1388,Dattatec Corp,Accredited,https://administracion.donweb.com/rdap/ -1389,Universo Online S/A (UOL),Terminated, -1390,Mesh Digital Limited,Accredited,https://rdap.meshdigital.com/v1/ -1391,"Azdomainz, LLC",Accredited,https://rdap.azdomainz.com/ -1392,"Azprivatez, LLC",Accredited,https://rdap.azprivatez.com/ -1393,"New Great Domains, Inc.",Terminated, -1394,"Names In Motion, Inc.",Terminated, -1395,www.com,Terminated, -1396,"Abansys & Hostytec, S.L.",Accredited, -1397,HooYoo Information Technology Co. Ltd.,Terminated, -1398,"Net Enforcers, Inc.",Terminated, -1399,Clertech.com Inc.,Terminated, -1401,domainfactory GmbH,Terminated, -1402,Hu Yi Global Information Resources (Holding) Company,Terminated, -1403,"10dencehispahard, S.L.",Accredited,https://rdap.cdmon.services/rdap/ -1404,"Web Site Source, Inc.",Terminated, -1405,Internet NAYANA Inc.,Terminated, -1406,"Thought Convergence, Inc.",Terminated, -1407,SW Hosting & Communications Technologies SL dba Serveisweb,Accredited,https://rdap.swhosting.com/ -1408,united-domains AG,Accredited,https://rdap.udag.net/ -1409,"Verelink, Inc.",Accredited, -1410,"Alisoft (Shanghai) Co., Ltd.",Terminated, -1411,DomainName Highway LLC,Accredited,https://whois.xz.com/rdap/ -1412,"China Springboard, Inc.",Terminated, -1413,"Blueweb, Inc.",Terminated, -1414,Desto! Inc.,Terminated, -1416,Minds and Machines LLC,Terminated, -1417,"Guangzhou Ming Yang Information Technology Co., Ltd",Accredited,https://www.hupo.com/rdap/ -1418,Danesco Trading Ltd.,Accredited,https://rdap.danesconames.com/ -1419,Bharti Airtel Services Limited,Terminated, -1420,INWX GmbH,Accredited,https://rdap.domrobot.com/ -1421,Lime Labs LLC,Terminated, -1422,"Deviation, LLC, d/b/a Domoden",Terminated, -1423,Uber Australia E1 Pty Ltd,Terminated, -1424,"Wingu Networks, S.A. de C.V.",Accredited,https://interplanet.rdap.tucows.com/ -1426,Registrar R01 LLC,Accredited,https://r01.ru/rdap/ -1427,"Zog Media, Inc. DBA Zog Names",Terminated, -1428,Homestead Limited dba Namevault.com,Terminated, -1429,Hebei Guoji Maoyi (Shanghai) LTD dba HebeiDomains.com,Terminated, -1430,Purenic Japan Inc.,Terminated, -1431,GLOBIX Kft.,Terminated, -1432,Alpine Domains Inc.,Accredited,https://rdapserver.net/ -1433,Digitrad France SAS,Terminated, -1434,GMO Brand Security Inc.,Accredited,https://rdap.brightsconsulting.com/ -1435,AB RIKTAD,Accredited,https://rdap.k85.itc.se/ -1436,Center of Ukrainian Internet Names (UKRNAMES),Accredited,https://rdap.ukrnames.com/ -1437,Sync Intertainment S.L.,Terminated, -1438,"Beijing RITT - Net Technology Development Co., Ltd",Terminated, -1439,Porting Access B.V.,Terminated, -1440,NetClient AS,Terminated, -1441,"TurnCommerce, Inc. DBA NameBright.com",Accredited,https://rdap.namebright.com/rdap/ -1442,Internet Networks S.A. De C.V.,Terminated, -1443,Vautron Rechenzentrum AG,Accredited,https://rdap.tmag.de/rdapgtld/rdap/ -1444,TWT S.p.A.,Accredited,https://rdap.1api.net/ -1445,"VocalSpace, LLC dba DesktopDomainer.com",Terminated, -1446,Larsen Data ApS,Accredited,https://rdap.larsendata.com/ -1447,"World Biz Domains, LLC",Terminated, -1448,Blacknight Internet Solutions Ltd.,Accredited,https://rdap.blacknight.com/ -1449,"URL Solutions, Inc.",Accredited,https://rdap.pananames.com/ -1450,Domain Services Rotterdam BV,Terminated, -1451,iWelt AG,Terminated, -1452,Site Matrix LLC,Accredited,https://profilebuilder.com/rdap/v1/ -1453,Directi Web Services Pvt. Ltd.,Terminated, -1454,Nics Telekomunikasyon A.S.,Accredited,https://rdap.nicproxy.com/ -1455,Mijndomein.nl BV,Terminated, -1456,NetArt Registrar Sp. z o.o.,Accredited,https://rdap.netart-registrar.com/ -1457,Times Internet Limited,Terminated, -1458,Telefonica Brasil S.A.,Terminated, -1459,"Domainmonster.com, Inc.",Terminated, -1460,Server Plan Srl,Accredited,https://rdap.serverplan.com/ -1461,Asusa Corporation,Terminated, -1462,One.com A/S,Accredited,https://rdap.one.com/v1/ -1463,"Global Domains International, Inc. DBA DomainCostClub.com",Accredited,https://rdap.domaincostclub.com/ -1464,NameWeb BVBA,Accredited,https://rdap-nameweb.biz/ -1465,"Hangzhou AiMing Network Co., Ltd.",Accredited,https://rdap.22.cn/ -1466,Lexsynergy Limited,Accredited,https://rdap.lexsynergy.com/ -1467,Combell NV,Accredited,https://rdap.combell.com/ -1468,Virtucom Networks S.A.,Terminated, -1469,Jiangsu Bangning Science & technology Co. Ltd.,Accredited,https://rdap.55hl.com/v1/ -1470,"Shanghai Yovole Networks, Inc.",Accredited,https://rdap.sundns.com/rdap/ -1471,Astutium Limited,Terminated, -1472,LiquidNet Ltd.,Accredited,https://rdap.liquidnetlimited.com/v1/ -1473,"Jungbonet Co., Ltd",Terminated, -1474,WIXI Incorporated,Accredited,https://rdap.dnpilot.com/ -1475,April Sea Information Technology Company Limited,Accredited,https://rdap.maprilis.com.vn/rdap/ -1476,World4You Internet Services GmbH,Accredited,https://rdap.world4you.biz/ -1477,"Name108, Inc.",Terminated, -1478,CV. Jogjacamp,Accredited,https://rdap.liqu.id/ -1479,"NameSilo, LLC",Accredited,https://www.namesilo.com/rdap/ -1480,The Registrar Company B.V.,Accredited,https://rdap.theregistrarcompany.com/ -1481,Hu Yi Global Information Hong Kong Limited,Accredited,https://whois.8hy.cn:9090/rdap/ -1482,SARL VIADUC,Terminated, -1483,Neubox Internet S.A. de C.V.,Accredited,https://rdapserver.net/ -1484,Infocom Network Ltd.,Terminated, -1485,"Japan Registry Services Co., Ltd.",Accredited,https://rdap.gtld.jprs.jp/rdap/ -1487,IndiaLinks Web Hosting Pvt Ltd.,Terminated, -1488,Demys Limited,Terminated, -1489,"Megazone Corp., dba HOSTING.KR",Accredited,https://rdap.hosting.kr/v1/ -1490,dm3 Digital Media Marketing and Monitoring FZ-LLC,Terminated, -1491,"ConnectWave co.,Ltd",Accredited,https://rdap.ssandomain.com/ -1492,NEEN S.p.A.,Accredited,https://rdapserver.net -1493,Ilait AB,Accredited,https://rdap.ilait.com/ -1494,"Beijing Guoxu Network Technology Co., Ltd.",Accredited,https://rdap.guoxuwang.cn/rdap/ -1495,BigRock Solutions Ltd.,Accredited,https://rdapserver.net/ -1496,"Name121, Inc.",Terminated, -1497,ELSERVER SRL,Terminated, -1498,NetBulk NV,Terminated, -1499,Ghana Dot Com Ltd.,Accredited,https://rdapserver.net/ -1500,Tirupati Domains and Hosting Pvt Ltd.,Accredited,https://rdapserver.net/ -1501,DotRoll Kft.,Accredited,https://rdap.dotroll.com/ -1502,Gabia C&S,Accredited,https://rdap.gabiadns.com/v1/ -1503,PT Ardh Global Indonesia,Accredited,https://rdapserver.net/ -1504,camPoint AG,Terminated, -1505,"Gransy, s.r.o.",Accredited,https://rdap.regtons.com/ -1506,Gesloten Domain N.V.,Accredited,https://rdap.gesloten.cw/ -1507,"RIDE Co., Ltd.",Terminated, -1508,TOGLODO S.A.,Terminated, -1509,"Cosmotown, Inc.",Accredited,https://www.cosmotown.com/rdap/ -1510,"Name118, Inc.",Terminated, -1511,"Name113, Inc.",Terminated, -1512,"Name112, Inc.",Terminated, -1513,"Name104, Inc.",Terminated, -1514,"Name111, Inc.",Terminated, -1515,123-Reg Limited,Accredited,https://rdap.123-reg.co.uk/v1/ -1516,"Zhengzhou Yi Fang Electronics Co., Ltd.",Terminated, -1517,HOAPDI INC.,Terminated, -1518,"Shanghai Best Oray Information S&T Co., Ltd.",Accredited,https://rdap.oray.com/ -1519,NETIM SARL,Accredited,https://netim.rdap.services/ -1520,"Adknowledge, Inc.",Terminated, -1521,Yexa.com Pty Ltd.,Terminated, -1522,home.pl S.A.,Terminated, -1523,Tong Ji Ming Lian (Beijing) Technology Corporation Ltd. (Trename),Terminated, -1524,Networking4all B.V.,Terminated, -1525,"Guangdong JinWanBang Technology Investment Co., Ltd.",Accredited,https://rdap.gzidc.com/server/ -1526,Hogan Lovells International LLP,Accredited,https://rdap.anchovy.com/ -1527,DOMAIN NAME NETWORK PTY LTD,Accredited,https://rdap.auswhois.com/rdap/ -1528,Groupe MIT SARL,Terminated, -1529,DomainLocal LLC,Accredited,https://rdap.namebright.com/rdap/ -1530,Pacific Online Inc.,Terminated, -1531,Automattic Inc.,Accredited,https://rdap.sawbuck.com/ -1532,"KINX Co., Ltd.",Terminated, -1533,Good Domain Registry Pvt Ltd.,Accredited,https://rdapserver.net/ -1534,Aerotek Bilisim Sanayi ve Ticaret AS,Accredited,https://rdapserver.net/ -1535,TheNameCo LLC,Accredited,https://rdap.namebright.com/rdap/ -1536,BoteroSolutions.com S.A.,Accredited,https://dp.boterosolutions.com/ -1537,NameJolt.com LLC,Accredited,https://rdap.namebright.com/rdap/ -1538,NameTell.com LLC,Accredited,https://rdap.namebright.com/rdap/ -1539,Nameling.com LLC,Accredited,https://rdap.namebright.com/rdap/ -1540,Domainwards.com LLC,Accredited,https://rdap.namebright.com/rdap/ -1541,DomainPrime.com LLC,Accredited,https://rdap.namebright.com/rdap/ -1542,ITEASY Inc.,Accredited,https://rdap.ksdom.kr/net/v1/ -1543,"Name110, Inc.",Terminated, -1544,"Name114, Inc.",Terminated, -1545,"Name115, Inc.",Terminated, -1546,"Name116, Inc.",Terminated, -1547,"Name117, Inc.",Accredited,https://namerdap.systems/ -1548,"Name119, Inc.",Terminated, -1549,"Name120, Inc.",Terminated, -1550,"Name109, Inc.",Terminated, -1551,"Name107, Inc.",Terminated, -1552,"Name106, Inc.",Terminated, -1553,"Small World Communications, Inc.",Accredited,https://rdap.smallworldregistrar.com/ -1554,"DomainSnap, LLC",Terminated, -1555,"22net, Inc.",Accredited,https://rdap.22.cn/ -1556,"Chengdu West Dimension Digital Technology Co., Ltd.",Accredited,https://rdap.west.cn/rdap/ -1557,"Netowl, Inc.",Accredited,https://rdap.star-domain.jp/ -1558,SiliconHouse.Net Pvt Ltd.,Terminated, -1559,Dynadot2 LLC,Accredited,https://rdap.dynadot.com/ -1560,Genious Communications SARL/AU,Accredited,https://rdapserver.net/ -1561,Purity Names Incorporated,Terminated, -1562,Badger Inc.,Terminated, -1563,"Foshan YiDong Network Co., LTD",Accredited,https://rdap.72e.net/rdap/ -1564,TLD Registrar Solutions Ltd.,Accredited,https://rdap.tldregistrarsolutions.com/ -1565,DreamScape Networks FZ-LLC,Terminated, -1566,NameSector LLC,Accredited,https://rdap.namebright.com/rdap/ -1567,NameSay LLC,Accredited,https://rdap.namebright.com/rdap/ -1568,DomainFalcon LLC,Accredited,https://rdap.namebright.com/rdap/ -1569,DomainHood LLC,Accredited,https://rdap.namebright.com/rdap/ -1570,DomainExtreme LLC,Accredited,https://rdap.namebright.com/rdap/ -1571,WorthyDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1572,GlamDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1573,NameStrategies LLC,Accredited,https://rdap.namebright.com/rdap/ -1574,DotNamed LLC,Accredited,https://rdap.namebright.com/rdap/ -1575,ZoomRegistrar LLC,Accredited,https://rdap.namebright.com/rdap/ -1576,DomainDelights LLC,Accredited,https://rdap.namebright.com/rdap/ -1577,NameForward LLC,Accredited,https://rdap.namebright.com/rdap/ -1578,TradeNamed LLC,Accredited,https://rdap.namebright.com/rdap/ -1579,ProNamed LLC,Accredited,https://rdap.namebright.com/rdap/ -1580,NameBrew LLC,Accredited,https://rdap.namebright.com/rdap/ -1581,Loopia Hosting AB,Terminated, -1582,"Tecnologia, Desarrollo Y Mercado S. de R.L. de C.V.",Accredited,https://rdap.2imagen.net/ -1583,Freeparking Limited,Accredited,https://opensrs.rdap.tucows.com/ -1584,"Tsukaerunet Co., Ltd.",Terminated, -1586,MAT BAO CORPORATION,Accredited,https://rdapserver.net/ -1587,Mijn InternetOplossing B.V.,Accredited,https://rdap.mijninternetoplossing.nl/ -1588,"Beijing Sanfront Information Technology Co., Ltd",Accredited,https://rdap.sfn.cn/rdap/ -1589,XYZ.COM LLC,Terminated, -1590,"ChinaNet Technology (SuZhou) CO., LTD",Terminated, -1591,"Promo People, Inc.",Accredited,https://promopeople.rdap.tucows.com/ -1593,Powered by Domain.com LLC,Accredited,https://endurance.rdap.tucows.com/ -1594,"Anessia, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1595,"DanCue, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1596,"BraveNames, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1597,"GreenZoneDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1598,EastNames Inc.,Terminated,https://rdap.eastnames.com/ -1599,Alibaba Cloud Computing Ltd. d/b/a HiChina (www.net.cn),Accredited,https://whois.aliyun.com/rdap/ -1600,"Tecnocrática Centro de Datos, S.L.",Accredited,https://rdap.tecnocratica.net/ -1601,Atak Domain Bilgi Teknolojileri A.Ş.,Accredited,https://rdap.apiname.com/ -1603,TransIP B.V.,Accredited,https://rdap.transip.nl/ -1604,DanDomain A/S,Terminated, -1605,"Chengdu Fly-Digital Technology Co., Ltd.",Accredited,https://whois.sudu.cn/ -1606,Registrar of Domain Names REG.RU LLC,Accredited,https://rdap.reg.com/rdap/ -1607,CCI REG S.A.,Accredited,https://rdap.ccireg.com/ -1608,Good Name Network Technology Ltd.,Accredited,https://rdap.22.cn/ -1609,Synergy Wholesale Accreditations Pty Ltd,Accredited,https://rdap.synergywholesale.com/ -1610,NamesHere LLC,Accredited,https://rdap.namebright.com/rdap/ -1611,DomainGetter LLC,Accredited,https://rdap.namebright.com/rdap/ -1612,DomainCritics LLC,Accredited,https://rdap.namebright.com/rdap/ -1613,AccentDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1614,DomainAhead LLC,Accredited,https://rdap.namebright.com/rdap/ -1615,VisualNames LLC,Accredited,https://rdap.namebright.com/rdap/ -1616,NameTurn LLC,Accredited,https://rdap.namebright.com/rdap/ -1617,PresidentialDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1618,DomainTact LLC,Accredited,https://rdap.namebright.com/rdap/ -1619,"Guangdong Nicenic Technology Co., Ltd. dba NiceNIC",Accredited,https://rdap.iisp.com/ -1620,EJEE Group Holdings Limited,Accredited,https://rdap.domain.cn/ -1621,"Shanghai Meicheng Technology Information Development Co., Ltd.",Accredited,https://rdap.cndns.com/rdap/domain/ -1622,Swedish Domains AB,Terminated, -1623,Registrar Manager Inc.,Terminated, -1624,"Shanghai Oweb Network Co., Ltd",Terminated, -1625,LEMARIT GmbH,Accredited,https://rdds.lemarit.net/rdap/info/ -1626,Domainbox Limited,Terminated,https://rdap.meshdigital.com/v1/ -1627,Domainmonster Limited,Terminated, -1628,ZNet Technologies Pvt Ltd.,Terminated, -1629,"Hangzhou Duomai E-Commerce Co., Ltd",Terminated, -1630,Ligne Web Services SARL dba LWS,Accredited,https://rdap.lws.fr/ -1631,"Fujian Litian Network Technology Co.,Ltd",Terminated, -1632,"Chengdu Century Oriental Network Communication Co., Ltd.",Accredited,https://rdap.51web.com/ -1633,"NamePal.com #8027, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1634,Netnames Pty Ltd.,Terminated, -1635,Beijing Midwest Taian Technology Services Ltd.,Terminated, -1636,"HOSTINGER operations, UAB",Accredited,https://rdapserver.net/ -1637,Dynadot0 LLC,Accredited,https://rdap.dynadot.com/ -1638,Dynadot1 LLC,Accredited,https://rdap.dynadot.com/ -1639,EBRAND Holdings S.A.,Accredited,https://rdap.eurodns.com/ -1640,"Beijing Wangzun Technology Co., Ltd.",Accredited,https://whois.namemax.cn/rdap/ -1641,Brennercom Limited,Accredited,https://rdap.brennercom.com/rdap/ -1642,"EmpireStateDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1643,"NorthNames, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1644,"SouthNames, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1645,Diamatrix C.C.,Accredited,https://rdap.domains.co.za/rdap/ -1646,"Vigson, Inc.",Terminated, -1647,Hosting Concepts B.V. d/b/a Registrar.eu,Accredited,https://rdap.registrar.eu/v1/ -1649,P.A. Viet Nam Company Limited,Accredited,https://rdap.pavietnam.vn/ -1651,Dynadot3 LLC,Accredited,https://rdap.dynadot.com/ -1652,Dynadot4 LLC,Accredited,https://rdap.dynadot.com/ -1653,Dynadot5 LLC,Accredited,https://rdap.dynadot.com/ -1654,Ourdomains Limited,Accredited,https://rdap.ourdomains.com/ -1655,"Xiamen Nawang Technology Co., Ltd",Accredited,https://rdap.nawang.cn/domain/ -1656,Kagoya Japan Inc.,Accredited,https://rdap.kagoya.net/ -1657,"WHT Co., Ltd",Terminated, -1658,Rethem Hosting LLC,Terminated, -1659,GoDaddy Online Services Cayman Islands Ltd.,Accredited,https://rdap.uniregistrar.com/v1/ -1660,"Domainshype.com, LLC",Accredited,https://rdapserver.net/ -1661,"Domdrill.com, LLC",Accredited,https://rdapserver.net/ -1662,Enset,Terminated, -1663,"Hotdomaintrade.com, LLC",Accredited,https://rdapserver.net/ -1664,"Namware.com, LLC",Accredited,https://rdapserver.net/ -1665,"Vertex names.com, LLC",Accredited,https://rdapserver.net/ -1666,OpenTLD B.V.,Accredited, -1667,"Seymour Domains, LLC",Terminated, -1668,"EastEndDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1669,"InlandDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1670,"AtlanticDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1671,"MidWestDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1672,"PacificDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1673,BDL Systemes SAS dba SYSTONIC,Accredited,https://rdap.systonic.fr/ -1674,Domainia Inc.,Terminated, -1675,CV. Rumahweb Indonesia,Accredited,https://rdap.rumahweb.com/ -1676,Vodien Australia Pty Ltd.,Terminated, -1677,AcquiredNames LLC,Accredited,https://rdap.namebright.com/rdap/ -1678,BlastDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1679,BlockHost LLC,Accredited,https://rdap.namebright.com/rdap/ -1680,ComfyDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1681,DomainCraze LLC,Accredited,https://rdap.namebright.com/rdap/ -1682,DomainCreek LLC,Accredited,https://rdap.namebright.com/rdap/ -1683,DomainLadder LLC,Accredited,https://rdap.namebright.com/rdap/ -1684,DomainPicking LLC,Accredited,https://rdap.namebright.com/rdap/ -1685,EchoDomain LLC,Accredited,https://rdap.namebright.com/rdap/ -1686,InsaneNames LLC,Accredited,https://rdap.namebright.com/rdap/ -1687,LiteDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1688,NameBake LLC,Accredited,https://rdap.namebright.com/rdap/ -1689,NameChild LLC,Accredited,https://rdap.namebright.com/rdap/ -1690,NoticedDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1691,ReclaimDomains LLC,Accredited,https://rdap.namebright.com/rdap/ -1692,RegistrarDirect LLC,Accredited,https://rdap.namebright.com/rdap/ -1693,TotallyDomain LLC,Accredited,https://rdap.namebright.com/rdap/ -1694,WhatIsYourDomain LLC,Accredited,https://rdap.namebright.com/rdap/ -1695,AvidDomain LLC,Accredited,https://rdap.namebright.com/rdap/ -1696,Hostpoint AG,Accredited,https://rdap.ascio.com/ -1697,"DNSPod, Inc.",Accredited,https://rdap.dnspod.cn/ -1698,"GoName.com, Inc",Terminated, -1699,Hostserver GmbH,Terminated, -1700,Ingenit GmbH & Co. KG,Accredited,https://rdap.123domain.eu/rdap/ -1701,DOMAINOO SAS,Accredited,https://rdap.register.com/rdap/ -1702,"Alexander the Great, LLC",Terminated, -1703,"Cyrus the Great, LLC",Terminated, -1704,"Julius Caesar, LLC",Terminated, -1705,"Akky Online Solutions, S.A. de C.V.",Accredited,https://rdap.akky.mx/ -1708,Nominet Registrar Services Limited,Accredited, -1710,Nhan Hoa Software Company Ltd.,Accredited,https://rdapserver.net/ -1712,Number One Web Hosting Limited,Accredited,https://rdap.no1host.com/ -1714,Only Domains Limited,Terminated, -1715,"DevilDogDomains.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1716,EU Technology (HK) Limited,Accredited,https://rdap.ymw.cn/rdap/ -1717,Netzadresse.at Domain Service GmbH,Accredited,https://rdap.ispcomfort.net/ -1718,Dynadot6 LLC,Accredited,https://rdap.dynadot.com/ -1719,Dynadot7 LLC,Accredited,https://rdap.dynadot.com/ -1720,Dynadot8 LLC,Accredited,https://rdap.dynadot.com/ -1721,"JPRS Registrar Co., Ltd.",Accredited,https://rdap.registrar.jprs/rdap/ -1722,Tianjin Zhuiri Science and Technology Development Co Ltd.,Accredited,https://whois.cnkuai.com/rdap/ -1723,Internet Domain Name System Beijing Engineering Research Center LLC (ZDNS),Accredited,https://rdap.zdns.cn/ -1724,Stork Registry Inc.,Accredited,https://rdap.storkregistry.com/ -1725,Global Village GmbH,Accredited,https://rdap.global-village.de/ -1726,Taka Enterprise Ltd,Accredited,https://rdap.jp-domains.com/rdap-server/ -1727,Enartia Single Member S.A.,Accredited,https://papaki.rdap.tucows.com/ -1728,IP Twins SAS,Accredited,https://rdap.rrpproxy.net/ -1729,Beijing ZhongWan Network Technology Co Ltd,Accredited,https://rdap.zw.cn/v1/ -1730,DNSimple Registrar LLC,Accredited, -1731,TLD Registrar Pty Ltd,Accredited,https://peoplebrowsr.rdap.tucows.com/ -1732,Hostnet bv,Accredited, -1733,"Beijing Zihai Technology Co., Ltd",Accredited,https://rdap.thinkpro.cn/ -1734,"Shenzhen HuLianXianFeng Technology Co.,LTD",Accredited,https://rdap.1198.cn/ -1735,Emerald Registrar Limited,Terminated, -1736,101domain Discovery Limited,Terminated, -1737,"JARHEADDOMAINS.COM, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1738,Emirates Telecommunications Corporation - Etisalat,Accredited,https://rdap.nic.ae/ -1739,"Hangzhou Dianshang Internet Technology Co., LTD.",Accredited,https://rdap.22.cn/ -1740,Henan Weichuang Network Technology Co. Ltd.,Accredited,https://www.cndns.org.cn/rdap/ -1741,Shinjiru Technology Sdn Bhd,Accredited,https://rdapserver.net/ -1742,"Zhengzhou Zitian Network Technology Co., Ltd.",Terminated, -1743,"Aahwed, Inc.",Terminated, -1744,Domain Vault Limited,Accredited, -1745,LogicBoxes Naming Services Ltd,Accredited,https://rdapserver.net/ -1746,REG.BG OOD,Terminated, -1747,PANASIA INFORMATION LIMITED,Terminated, -1748,Registrar Services LLC,Terminated, -1749,Upperlink Limited,Accredited,https://rdapserver.net/ -1750,Authentic Web Inc.,Accredited,https://authenticweb.rdap.tucows.com/ -1751,"SQUIDSAILERDOMAINS.COM, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -1752,SALENAMES LTD,Accredited,https://rdap.salenames.ru/ -1753,Domain Shield Pty Ltd,Terminated, -1754,"Shenzhen Esin Technology Co., Ltd",Terminated, -1755,Netistrar Limited,Accredited,https://rdap.netistrar.com/ -1756,DropCatch.com 345 LLC,Accredited,https://rdap.namebright.com/rdap/ -1757,DropCatch.com 346 LLC,Accredited,https://rdap.namebright.com/rdap/ -1758,DropCatch.com 347 LLC,Accredited,https://rdap.namebright.com/rdap/ -1759,DropCatch.com 348 LLC,Accredited,https://rdap.namebright.com/rdap/ -1760,DropCatch.com 349 LLC,Accredited,https://rdap.namebright.com/rdap/ -1761,DropCatch.com 350 LLC,Accredited,https://rdap.namebright.com/rdap/ -1762,DropCatch.com 351 LLC,Accredited,https://rdap.namebright.com/rdap/ -1763,DropCatch.com 352 LLC,Accredited,https://rdap.namebright.com/rdap/ -1764,DropCatch.com 353 LLC,Accredited,https://rdap.namebright.com/rdap/ -1765,DropCatch.com 354 LLC,Accredited,https://rdap.namebright.com/rdap/ -1766,DropCatch.com 355 LLC,Accredited,https://rdap.namebright.com/rdap/ -1767,DropCatch.com 356 LLC,Accredited,https://rdap.namebright.com/rdap/ -1768,DropCatch.com 357 LLC,Accredited,https://rdap.namebright.com/rdap/ -1769,DropCatch.com 358 LLC,Accredited,https://rdap.namebright.com/rdap/ -1770,DropCatch.com 359 LLC,Accredited,https://rdap.namebright.com/rdap/ -1771,DropCatch.com 360 LLC,Accredited,https://rdap.namebright.com/rdap/ -1772,DropCatch.com 361 LLC,Accredited,https://rdap.namebright.com/rdap/ -1773,DropCatch.com 362 LLC,Accredited,https://rdap.namebright.com/rdap/ -1774,DropCatch.com 363 LLC,Accredited,https://rdap.namebright.com/rdap/ -1775,DropCatch.com 364 LLC,Accredited,https://rdap.namebright.com/rdap/ -1776,DropCatch.com 365 LLC,Accredited,https://rdap.namebright.com/rdap/ -1777,DropCatch.com 366 LLC,Accredited,https://rdap.namebright.com/rdap/ -1778,DropCatch.com 367 LLC,Accredited,https://rdap.namebright.com/rdap/ -1779,DropCatch.com 368 LLC,Accredited,https://rdap.namebright.com/rdap/ -1780,DropCatch.com 369 LLC,Accredited,https://rdap.namebright.com/rdap/ -1781,DropCatch.com 370 LLC,Accredited,https://rdap.namebright.com/rdap/ -1782,DropCatch.com 371 LLC,Accredited,https://rdap.namebright.com/rdap/ -1783,DropCatch.com 372 LLC,Accredited,https://rdap.namebright.com/rdap/ -1784,DropCatch.com 373 LLC,Accredited,https://rdap.namebright.com/rdap/ -1785,DropCatch.com 374 LLC,Accredited,https://rdap.namebright.com/rdap/ -1786,DropCatch.com 375 LLC,Accredited,https://rdap.namebright.com/rdap/ -1787,DropCatch.com 376 LLC,Accredited,https://rdap.namebright.com/rdap/ -1788,DropCatch.com 377 LLC,Accredited,https://rdap.namebright.com/rdap/ -1789,DropCatch.com 378 LLC,Accredited,https://rdap.namebright.com/rdap/ -1790,DropCatch.com 379 LLC,Accredited,https://rdap.namebright.com/rdap/ -1791,DropCatch.com 380 LLC,Accredited,https://rdap.namebright.com/rdap/ -1792,DropCatch.com 381 LLC,Accredited,https://rdap.namebright.com/rdap/ -1793,DropCatch.com 382 LLC,Accredited,https://rdap.namebright.com/rdap/ -1794,DropCatch.com 383 LLC,Accredited,https://rdap.namebright.com/rdap/ -1795,DropCatch.com 384 LLC,Accredited,https://rdap.namebright.com/rdap/ -1796,DropCatch.com 385 LLC,Accredited,https://rdap.namebright.com/rdap/ -1797,DropCatch.com 386 LLC,Accredited,https://rdap.namebright.com/rdap/ -1798,DropCatch.com 387 LLC,Accredited,https://rdap.namebright.com/rdap/ -1799,DropCatch.com 388 LLC,Accredited,https://rdap.namebright.com/rdap/ -1800,DropCatch.com 389 LLC,Accredited,https://rdap.namebright.com/rdap/ -1801,DropCatch.com 390 LLC,Accredited,https://rdap.namebright.com/rdap/ -1802,DropCatch.com 391 LLC,Accredited,https://rdap.namebright.com/rdap/ -1803,DropCatch.com 392 LLC,Accredited,https://rdap.namebright.com/rdap/ -1804,DropCatch.com 393 LLC,Accredited,https://rdap.namebright.com/rdap/ -1805,DropCatch.com 394 LLC,Accredited,https://rdap.namebright.com/rdap/ -1806,DropCatch.com 395 LLC,Accredited,https://rdap.namebright.com/rdap/ -1807,DropCatch.com 396 LLC,Accredited,https://rdap.namebright.com/rdap/ -1808,DropCatch.com 397 LLC,Accredited,https://rdap.namebright.com/rdap/ -1809,DropCatch.com 398 LLC,Accredited,https://rdap.namebright.com/rdap/ -1810,DropCatch.com 399 LLC,Accredited,https://rdap.namebright.com/rdap/ -1811,DropCatch.com 400 LLC,Accredited,https://rdap.namebright.com/rdap/ -1812,DropCatch.com 401 LLC,Accredited,https://rdap.namebright.com/rdap/ -1813,DropCatch.com 402 LLC,Accredited,https://rdap.namebright.com/rdap/ -1814,DropCatch.com 403 LLC,Accredited,https://rdap.namebright.com/rdap/ -1815,DropCatch.com 404 LLC,Accredited,https://rdap.namebright.com/rdap/ -1816,DropCatch.com 405 LLC,Accredited,https://rdap.namebright.com/rdap/ -1817,DropCatch.com 406 LLC,Accredited,https://rdap.namebright.com/rdap/ -1818,DropCatch.com 407 LLC,Accredited,https://rdap.namebright.com/rdap/ -1819,DropCatch.com 408 LLC,Accredited,https://rdap.namebright.com/rdap/ -1820,DropCatch.com 409 LLC,Accredited,https://rdap.namebright.com/rdap/ -1821,DropCatch.com 410 LLC,Accredited,https://rdap.namebright.com/rdap/ -1822,DropCatch.com 411 LLC,Accredited,https://rdap.namebright.com/rdap/ -1823,DropCatch.com 412 LLC,Accredited,https://rdap.namebright.com/rdap/ -1824,DropCatch.com 413 LLC,Accredited,https://rdap.namebright.com/rdap/ -1825,DropCatch.com 414 LLC,Accredited,https://rdap.namebright.com/rdap/ -1826,DropCatch.com 415 LLC,Accredited,https://rdap.namebright.com/rdap/ -1827,DropCatch.com 416 LLC,Accredited,https://rdap.namebright.com/rdap/ -1828,DropCatch.com 417 LLC,Accredited,https://rdap.namebright.com/rdap/ -1829,DropCatch.com 418 LLC,Accredited,https://rdap.namebright.com/rdap/ -1830,DropCatch.com 419 LLC,Accredited,https://rdap.namebright.com/rdap/ -1831,DropCatch.com 420 LLC,Accredited,https://rdap.namebright.com/rdap/ -1832,DropCatch.com 421 LLC,Accredited,https://rdap.namebright.com/rdap/ -1833,DropCatch.com 422 LLC,Accredited,https://rdap.namebright.com/rdap/ -1834,DropCatch.com 423 LLC,Accredited,https://rdap.namebright.com/rdap/ -1835,DropCatch.com 424 LLC,Accredited,https://rdap.namebright.com/rdap/ -1836,DropCatch.com 425 LLC,Accredited,https://rdap.namebright.com/rdap/ -1837,DropCatch.com 426 LLC,Accredited,https://rdap.namebright.com/rdap/ -1838,DropCatch.com 427 LLC,Accredited,https://rdap.namebright.com/rdap/ -1839,DropCatch.com 428 LLC,Accredited,https://rdap.namebright.com/rdap/ -1840,DropCatch.com 429 LLC,Accredited,https://rdap.namebright.com/rdap/ -1841,DropCatch.com 430 LLC,Accredited,https://rdap.namebright.com/rdap/ -1842,DropCatch.com 431 LLC,Accredited,https://rdap.namebright.com/rdap/ -1843,DropCatch.com 432 LLC,Accredited,https://rdap.namebright.com/rdap/ -1844,DropCatch.com 433 LLC,Accredited,https://rdap.namebright.com/rdap/ -1845,DropCatch.com 434 LLC,Accredited,https://rdap.namebright.com/rdap/ -1846,DropCatch.com 435 LLC,Accredited,https://rdap.namebright.com/rdap/ -1847,DropCatch.com 436 LLC,Accredited,https://rdap.namebright.com/rdap/ -1848,DropCatch.com 437 LLC,Accredited,https://rdap.namebright.com/rdap/ -1849,DropCatch.com 438 LLC,Accredited,https://rdap.namebright.com/rdap/ -1850,DropCatch.com 439 LLC,Accredited,https://rdap.namebright.com/rdap/ -1851,DropCatch.com 440 LLC,Accredited,https://rdap.namebright.com/rdap/ -1852,DropCatch.com 441 LLC,Accredited,https://rdap.namebright.com/rdap/ -1853,DropCatch.com 442 LLC,Accredited,https://rdap.namebright.com/rdap/ -1854,DropCatch.com 443 LLC,Accredited,https://rdap.namebright.com/rdap/ -1855,DropCatch.com 444 LLC,Accredited,https://rdap.namebright.com/rdap/ -1856,DropCatch.com 445 LLC,Accredited,https://rdap.namebright.com/rdap/ -1857,Alpnames Limited,Terminated, -1858,"NameCentral, Inc.",Terminated, -1859,Namemaster RC GmbH,Terminated, -1860,Paragon Internet Group Ltd t/a Paragon Names,Accredited,https://paragon.rdap.tucows.com/ -1861,Porkbun LLC,Accredited,https://cart-before.porkbun.horse/rdap/ -1862,Onlide Inc,Accredited,https://rdap.onlide.com/ -1863,DotMedia Limited,Accredited,https://whois.xz.com/rdap/ -1864,Dynadot9 LLC,Accredited,https://rdap.dynadot.com/ -1865,Dynadot10 LLC,Accredited,https://rdap.dynadot.com/ -1866,Dynadot11 LLC,Accredited,https://rdap.dynadot.com/ -1867,Dynadot12 LLC,Accredited,https://rdap.dynadot.com/ -1868,Eranet International Limited,Accredited,https://rdap.tnet.hk:8443/v1/ -1870,"DOMAINNAME BLVD, INC.",Accredited,https://whois.xz.com/rdap/ -1871,"DOMAINNAME FWY, INC.",Accredited,https://whois.xz.com/rdap/ -1872,"FLAPPY DOMAIN, INC.",Accredited,https://whois.xz.com/rdap/ -1873,"MAFF AVENUE, INC.",Accredited,https://whois.xz.com/rdap/ -1874,AXC BV,Terminated, -1875,Intracom Middle East FZE,Accredited,https://rdap.domains.gdn/ -1876,"NCC Group Secure Registrar, Inc.",Terminated, -1877,"Attila the Hun, LLC",Terminated, -1878,"Charlemagne 888, LLC",Terminated, -1879,"Douglas MacArthur, LLC",Terminated, -1880,"Dwight D. Eisenhower, LLC",Terminated, -1881,"Genghis Khan, LLC",Terminated, -1882,"George S. Patton, LLC",Terminated, -1883,"George Washington 888, LLC",Terminated, -1884,"Hannibal Barca, LLC",Terminated, -1885,"Isoroku Yamamoto, LLC",Terminated, -1886,"Karl Von Clausewitz, LLC",Terminated, -1887,"Napoleon Bonaparte, LLC",Terminated, -1888,"Robert E. Lee 888, LLC",Terminated, -1889,"Scipio Africanus, LLC",Terminated, -1890,"Sun Tzu 888, LLC",Terminated, -1891,"Ulysses S. Grant, LLC",Terminated, -1892,"Vo Nguyen Giap, LLC",Terminated, -1893,"William the Conqueror, LLC",Terminated, -1894,humbly LLC,Accredited,https://rdap-whois.epik.com/ -1895,Namespro Solutions Inc.,Accredited,https://rdapserver.net/ -1896,ATI,Accredited,https://rdap.ati.tn:8443/rdapgtld/rdap/ -1897,Taiwan Network Information Center,Accredited,https://rdap.twnic.tw/registrar/ -1898,BR domain Inc. dba namegear.co,Accredited,https://rdap.namegear.co/rdap/ -1899,"CyanDomains, Inc.",Accredited,https://whois.xz.com/rdap/ -1900,"DomainName Bridge, Inc.",Accredited,https://whois.xz.com/rdap/ -1901,Tname Group Inc.,Accredited,https://rdap.tname.com/ -1902,"HazelDomains, Inc.",Accredited,https://whois.xz.com/rdap/ -1903,"KQW, Inc.",Accredited,https://whois.xz.com/rdap/ -1904,"Xiamen Dianmei Network Technology Co., Ltd.",Accredited,https://whois.xz.com/rdap/ -1905,"Xiamen Domains, Inc.",Accredited,https://whois.xz.com/rdap/ -1907,"DomainName Path, Inc.",Accredited,https://whois.xz.com/rdap/ -1908,"BRS, LLC",Accredited,https://brs.rdap.tucows.com/ -1909,Webnames Limited,Accredited,https://rdap.webnames.ru/rdap/ -1910,"Cloudflare, Inc.",Accredited,https://rdap.cloudflare.com/rdap/v1/ -1911,NUXIT,Terminated, -1912,Vodien Internet Solutions Pte Ltd,Accredited,https://rdap.vodien.com/ -1913,DOTSERVE INC.,Accredited,https://rdapserver.net/ -1914,Beijing Zhuoyue Shengming Technologies Company Ltd.,Accredited,https://rdap.zhuoyue.wang/ -1915,West263 International Limited,Accredited,https://rdap.hkdns.hk/rdap/ -1916,"Shenzhen Internet Works Online Technology Co., Ltd. (62.com)",Accredited,https://rdap.62.com/rdap/ -1917,MainReg Inc.,Accredited,https://rdapserver.net/ -1919,"DomainName Driveway, Inc.",Accredited,https://whois.xz.com/rdap/ -1920,"DomainName Parkway, Inc.",Accredited,https://whois.xz.com/rdap/ -1921,"Fujian Domains, Inc.",Accredited,https://whois.xz.com/rdap/ -1922,"Guangzhou Domains, Inc.",Accredited,https://whois.xz.com/rdap/ -1923,Gname.com Pte. Ltd.,Accredited,https://rdap.gname.com/ -1924,Hello Internet Corp.,Accredited,https://rdap.hello.co/ -1925,"Guangdong HUYI Internet & IP Services Co., Ltd",Accredited,https://whois.huyi.cn:9090/rdap/ -1926,DropCatch.com 446 LLC,Accredited,https://rdap.namebright.com/rdap/ -1927,DropCatch.com 447 LLC,Accredited,https://rdap.namebright.com/rdap/ -1928,DropCatch.com 448 LLC,Accredited,https://rdap.namebright.com/rdap/ -1929,DropCatch.com 449 LLC,Accredited,https://rdap.namebright.com/rdap/ -1930,DropCatch.com 450 LLC,Accredited,https://rdap.namebright.com/rdap/ -1931,DropCatch.com 451 LLC,Accredited,https://rdap.namebright.com/rdap/ -1932,DropCatch.com 452 LLC,Accredited,https://rdap.namebright.com/rdap/ -1933,DropCatch.com 453 LLC,Accredited,https://rdap.namebright.com/rdap/ -1934,DropCatch.com 454 LLC,Accredited,https://rdap.namebright.com/rdap/ -1935,DropCatch.com 455 LLC,Accredited,https://rdap.namebright.com/rdap/ -1936,DropCatch.com 456 LLC,Accredited,https://rdap.namebright.com/rdap/ -1937,DropCatch.com 457 LLC,Accredited,https://rdap.namebright.com/rdap/ -1938,DropCatch.com 458 LLC,Accredited,https://rdap.namebright.com/rdap/ -1939,DropCatch.com 459 LLC,Accredited,https://rdap.namebright.com/rdap/ -1940,DropCatch.com 460 LLC,Accredited,https://rdap.namebright.com/rdap/ -1941,DropCatch.com 461 LLC,Accredited,https://rdap.namebright.com/rdap/ -1942,DropCatch.com 462 LLC,Accredited,https://rdap.namebright.com/rdap/ -1943,DropCatch.com 463 LLC,Accredited,https://rdap.namebright.com/rdap/ -1944,DropCatch.com 464 LLC,Accredited,https://rdap.namebright.com/rdap/ -1945,DropCatch.com 465 LLC,Accredited,https://rdap.namebright.com/rdap/ -1946,DropCatch.com 466 LLC,Accredited,https://rdap.namebright.com/rdap/ -1947,DropCatch.com 467 LLC,Accredited,https://rdap.namebright.com/rdap/ -1948,DropCatch.com 468 LLC,Accredited,https://rdap.namebright.com/rdap/ -1949,DropCatch.com 469 LLC,Accredited,https://rdap.namebright.com/rdap/ -1950,DropCatch.com 470 LLC,Accredited,https://rdap.namebright.com/rdap/ -1951,DropCatch.com 471 LLC,Accredited,https://rdap.namebright.com/rdap/ -1952,DropCatch.com 472 LLC,Accredited,https://rdap.namebright.com/rdap/ -1953,DropCatch.com 473 LLC,Accredited,https://rdap.namebright.com/rdap/ -1954,DropCatch.com 474 LLC,Accredited,https://rdap.namebright.com/rdap/ -1955,DropCatch.com 475 LLC,Accredited,https://rdap.namebright.com/rdap/ -1956,DropCatch.com 476 LLC,Accredited,https://rdap.namebright.com/rdap/ -1957,DropCatch.com 477 LLC,Accredited,https://rdap.namebright.com/rdap/ -1958,DropCatch.com 478 LLC,Accredited,https://rdap.namebright.com/rdap/ -1959,DropCatch.com 479 LLC,Accredited,https://rdap.namebright.com/rdap/ -1960,DropCatch.com 480 LLC,Accredited,https://rdap.namebright.com/rdap/ -1961,DropCatch.com 481 LLC,Accredited,https://rdap.namebright.com/rdap/ -1962,DropCatch.com 482 LLC,Accredited,https://rdap.namebright.com/rdap/ -1963,DropCatch.com 483 LLC,Accredited,https://rdap.namebright.com/rdap/ -1964,DropCatch.com 484 LLC,Accredited,https://rdap.namebright.com/rdap/ -1965,DropCatch.com 485 LLC,Accredited,https://rdap.namebright.com/rdap/ -1966,DropCatch.com 486 LLC,Accredited,https://rdap.namebright.com/rdap/ -1967,DropCatch.com 487 LLC,Accredited,https://rdap.namebright.com/rdap/ -1968,DropCatch.com 488 LLC,Accredited,https://rdap.namebright.com/rdap/ -1969,DropCatch.com 489 LLC,Accredited,https://rdap.namebright.com/rdap/ -1970,DropCatch.com 490 LLC,Accredited,https://rdap.namebright.com/rdap/ -1971,DropCatch.com 491 LLC,Accredited,https://rdap.namebright.com/rdap/ -1972,DropCatch.com 492 LLC,Accredited,https://rdap.namebright.com/rdap/ -1973,DropCatch.com 493 LLC,Accredited,https://rdap.namebright.com/rdap/ -1974,DropCatch.com 494 LLC,Accredited,https://rdap.namebright.com/rdap/ -1975,DropCatch.com 495 LLC,Accredited,https://rdap.namebright.com/rdap/ -1976,DropCatch.com 496 LLC,Accredited,https://rdap.namebright.com/rdap/ -1977,DropCatch.com 497 LLC,Accredited,https://rdap.namebright.com/rdap/ -1978,DropCatch.com 498 LLC,Accredited,https://rdap.namebright.com/rdap/ -1979,DropCatch.com 499 LLC,Accredited,https://rdap.namebright.com/rdap/ -1980,DropCatch.com 500 LLC,Accredited,https://rdap.namebright.com/rdap/ -1981,DropCatch.com 501 LLC,Accredited,https://rdap.namebright.com/rdap/ -1982,DropCatch.com 502 LLC,Accredited,https://rdap.namebright.com/rdap/ -1983,DropCatch.com 503 LLC,Accredited,https://rdap.namebright.com/rdap/ -1984,DropCatch.com 504 LLC,Accredited,https://rdap.namebright.com/rdap/ -1985,DropCatch.com 505 LLC,Accredited,https://rdap.namebright.com/rdap/ -1986,DropCatch.com 506 LLC,Accredited,https://rdap.namebright.com/rdap/ -1987,DropCatch.com 507 LLC,Accredited,https://rdap.namebright.com/rdap/ -1988,DropCatch.com 508 LLC,Accredited,https://rdap.namebright.com/rdap/ -1989,DropCatch.com 509 LLC,Accredited,https://rdap.namebright.com/rdap/ -1990,DropCatch.com 510 LLC,Accredited,https://rdap.namebright.com/rdap/ -1991,DropCatch.com 511 LLC,Accredited,https://rdap.namebright.com/rdap/ -1992,DropCatch.com 512 LLC,Accredited,https://rdap.namebright.com/rdap/ -1993,DropCatch.com 513 LLC,Accredited,https://rdap.namebright.com/rdap/ -1994,DropCatch.com 514 LLC,Accredited,https://rdap.namebright.com/rdap/ -1995,DropCatch.com 515 LLC,Accredited,https://rdap.namebright.com/rdap/ -1996,DropCatch.com 516 LLC,Accredited,https://rdap.namebright.com/rdap/ -1997,DropCatch.com 517 LLC,Accredited,https://rdap.namebright.com/rdap/ -1998,DropCatch.com 518 LLC,Accredited,https://rdap.namebright.com/rdap/ -1999,DropCatch.com 519 LLC,Accredited,https://rdap.namebright.com/rdap/ -2000,DropCatch.com 520 LLC,Accredited,https://rdap.namebright.com/rdap/ -2001,DropCatch.com 521 LLC,Accredited,https://rdap.namebright.com/rdap/ -2002,DropCatch.com 522 LLC,Accredited,https://rdap.namebright.com/rdap/ -2003,DropCatch.com 523 LLC,Accredited,https://rdap.namebright.com/rdap/ -2004,DropCatch.com 524 LLC,Accredited,https://rdap.namebright.com/rdap/ -2005,DropCatch.com 525 LLC,Accredited,https://rdap.namebright.com/rdap/ -2006,DropCatch.com 526 LLC,Accredited,https://rdap.namebright.com/rdap/ -2007,DropCatch.com 527 LLC,Accredited,https://rdap.namebright.com/rdap/ -2008,DropCatch.com 528 LLC,Accredited,https://rdap.namebright.com/rdap/ -2009,DropCatch.com 529 LLC,Accredited,https://rdap.namebright.com/rdap/ -2010,DropCatch.com 530 LLC,Accredited,https://rdap.namebright.com/rdap/ -2011,DropCatch.com 531 LLC,Accredited,https://rdap.namebright.com/rdap/ -2012,DropCatch.com 532 LLC,Accredited,https://rdap.namebright.com/rdap/ -2013,DropCatch.com 533 LLC,Accredited,https://rdap.namebright.com/rdap/ -2014,DropCatch.com 534 LLC,Accredited,https://rdap.namebright.com/rdap/ -2015,DropCatch.com 535 LLC,Accredited,https://rdap.namebright.com/rdap/ -2016,DropCatch.com 536 LLC,Accredited,https://rdap.namebright.com/rdap/ -2017,DropCatch.com 537 LLC,Accredited,https://rdap.namebright.com/rdap/ -2018,DropCatch.com 538 LLC,Accredited,https://rdap.namebright.com/rdap/ -2019,DropCatch.com 539 LLC,Accredited,https://rdap.namebright.com/rdap/ -2020,DropCatch.com 540 LLC,Accredited,https://rdap.namebright.com/rdap/ -2021,DropCatch.com 541 LLC,Accredited,https://rdap.namebright.com/rdap/ -2022,DropCatch.com 542 LLC,Accredited,https://rdap.namebright.com/rdap/ -2023,DropCatch.com 543 LLC,Accredited,https://rdap.namebright.com/rdap/ -2024,DropCatch.com 544 LLC,Accredited,https://rdap.namebright.com/rdap/ -2025,DropCatch.com 545 LLC,Accredited,https://rdap.namebright.com/rdap/ -2026,DropCatch.com 546 LLC,Accredited,https://rdap.namebright.com/rdap/ -2027,DropCatch.com 547 LLC,Accredited,https://rdap.namebright.com/rdap/ -2028,DropCatch.com 548 LLC,Accredited,https://rdap.namebright.com/rdap/ -2029,DropCatch.com 549 LLC,Accredited,https://rdap.namebright.com/rdap/ -2030,DropCatch.com 550 LLC,Accredited,https://rdap.namebright.com/rdap/ -2031,DropCatch.com 551 LLC,Accredited,https://rdap.namebright.com/rdap/ -2032,DropCatch.com 552 LLC,Accredited,https://rdap.namebright.com/rdap/ -2033,DropCatch.com 553 LLC,Accredited,https://rdap.namebright.com/rdap/ -2034,DropCatch.com 554 LLC,Accredited,https://rdap.namebright.com/rdap/ -2035,DropCatch.com 555 LLC,Accredited,https://rdap.namebright.com/rdap/ -2036,DropCatch.com 556 LLC,Accredited,https://rdap.namebright.com/rdap/ -2037,DropCatch.com 557 LLC,Accredited,https://rdap.namebright.com/rdap/ -2038,DropCatch.com 558 LLC,Accredited,https://rdap.namebright.com/rdap/ -2039,DropCatch.com 559 LLC,Accredited,https://rdap.namebright.com/rdap/ -2040,DropCatch.com 560 LLC,Accredited,https://rdap.namebright.com/rdap/ -2041,DropCatch.com 561 LLC,Accredited,https://rdap.namebright.com/rdap/ -2042,DropCatch.com 562 LLC,Accredited,https://rdap.namebright.com/rdap/ -2043,DropCatch.com 563 LLC,Accredited,https://rdap.namebright.com/rdap/ -2044,DropCatch.com 564 LLC,Accredited,https://rdap.namebright.com/rdap/ -2045,DropCatch.com 565 LLC,Accredited,https://rdap.namebright.com/rdap/ -2046,DropCatch.com 566 LLC,Accredited,https://rdap.namebright.com/rdap/ -2047,DropCatch.com 567 LLC,Accredited,https://rdap.namebright.com/rdap/ -2048,DropCatch.com 568 LLC,Accredited,https://rdap.namebright.com/rdap/ -2049,DropCatch.com 569 LLC,Accredited,https://rdap.namebright.com/rdap/ -2050,DropCatch.com 570 LLC,Accredited,https://rdap.namebright.com/rdap/ -2051,DropCatch.com 571 LLC,Accredited,https://rdap.namebright.com/rdap/ -2052,DropCatch.com 572 LLC,Accredited,https://rdap.namebright.com/rdap/ -2053,DropCatch.com 573 LLC,Accredited,https://rdap.namebright.com/rdap/ -2054,DropCatch.com 574 LLC,Accredited,https://rdap.namebright.com/rdap/ -2055,DropCatch.com 575 LLC,Accredited,https://rdap.namebright.com/rdap/ -2056,DropCatch.com 576 LLC,Accredited,https://rdap.namebright.com/rdap/ -2057,DropCatch.com 577 LLC,Accredited,https://rdap.namebright.com/rdap/ -2058,DropCatch.com 578 LLC,Accredited,https://rdap.namebright.com/rdap/ -2059,DropCatch.com 579 LLC,Accredited,https://rdap.namebright.com/rdap/ -2060,DropCatch.com 580 LLC,Accredited,https://rdap.namebright.com/rdap/ -2061,DropCatch.com 581 LLC,Accredited,https://rdap.namebright.com/rdap/ -2062,DropCatch.com 582 LLC,Accredited,https://rdap.namebright.com/rdap/ -2063,DropCatch.com 583 LLC,Accredited,https://rdap.namebright.com/rdap/ -2064,DropCatch.com 584 LLC,Accredited,https://rdap.namebright.com/rdap/ -2065,DropCatch.com 585 LLC,Accredited,https://rdap.namebright.com/rdap/ -2066,DropCatch.com 586 LLC,Accredited,https://rdap.namebright.com/rdap/ -2067,DropCatch.com 587 LLC,Accredited,https://rdap.namebright.com/rdap/ -2068,DropCatch.com 588 LLC,Accredited,https://rdap.namebright.com/rdap/ -2069,DropCatch.com 589 LLC,Accredited,https://rdap.namebright.com/rdap/ -2070,DropCatch.com 590 LLC,Accredited,https://rdap.namebright.com/rdap/ -2071,DropCatch.com 591 LLC,Accredited,https://rdap.namebright.com/rdap/ -2072,DropCatch.com 592 LLC,Accredited,https://rdap.namebright.com/rdap/ -2073,DropCatch.com 593 LLC,Accredited,https://rdap.namebright.com/rdap/ -2074,DropCatch.com 594 LLC,Accredited,https://rdap.namebright.com/rdap/ -2075,DropCatch.com 595 LLC,Accredited,https://rdap.namebright.com/rdap/ -2076,DropCatch.com 596 LLC,Accredited,https://rdap.namebright.com/rdap/ -2077,DropCatch.com 597 LLC,Accredited,https://rdap.namebright.com/rdap/ -2078,DropCatch.com 598 LLC,Accredited,https://rdap.namebright.com/rdap/ -2079,DropCatch.com 599 LLC,Accredited,https://rdap.namebright.com/rdap/ -2080,DropCatch.com 600 LLC,Accredited,https://rdap.namebright.com/rdap/ -2081,DropCatch.com 601 LLC,Accredited,https://rdap.namebright.com/rdap/ -2082,DropCatch.com 602 LLC,Accredited,https://rdap.namebright.com/rdap/ -2083,DropCatch.com 603 LLC,Accredited,https://rdap.namebright.com/rdap/ -2084,DropCatch.com 604 LLC,Accredited,https://rdap.namebright.com/rdap/ -2085,DropCatch.com 605 LLC,Accredited,https://rdap.namebright.com/rdap/ -2086,DropCatch.com 606 LLC,Accredited,https://rdap.namebright.com/rdap/ -2087,DropCatch.com 607 LLC,Accredited,https://rdap.namebright.com/rdap/ -2088,DropCatch.com 608 LLC,Accredited,https://rdap.namebright.com/rdap/ -2089,DropCatch.com 609 LLC,Accredited,https://rdap.namebright.com/rdap/ -2090,DropCatch.com 610 LLC,Accredited,https://rdap.namebright.com/rdap/ -2091,DropCatch.com 611 LLC,Accredited,https://rdap.namebright.com/rdap/ -2092,DropCatch.com 612 LLC,Accredited,https://rdap.namebright.com/rdap/ -2093,DropCatch.com 613 LLC,Accredited,https://rdap.namebright.com/rdap/ -2094,DropCatch.com 614 LLC,Accredited,https://rdap.namebright.com/rdap/ -2095,DropCatch.com 615 LLC,Accredited,https://rdap.namebright.com/rdap/ -2096,DropCatch.com 616 LLC,Accredited,https://rdap.namebright.com/rdap/ -2097,DropCatch.com 617 LLC,Accredited,https://rdap.namebright.com/rdap/ -2098,DropCatch.com 618 LLC,Accredited,https://rdap.namebright.com/rdap/ -2099,DropCatch.com 619 LLC,Accredited,https://rdap.namebright.com/rdap/ -2100,DropCatch.com 620 LLC,Accredited,https://rdap.namebright.com/rdap/ -2101,DropCatch.com 621 LLC,Accredited,https://rdap.namebright.com/rdap/ -2102,DropCatch.com 622 LLC,Accredited,https://rdap.namebright.com/rdap/ -2103,DropCatch.com 623 LLC,Accredited,https://rdap.namebright.com/rdap/ -2104,DropCatch.com 624 LLC,Accredited,https://rdap.namebright.com/rdap/ -2105,DropCatch.com 625 LLC,Accredited,https://rdap.namebright.com/rdap/ -2106,DropCatch.com 626 LLC,Accredited,https://rdap.namebright.com/rdap/ -2107,DropCatch.com 627 LLC,Accredited,https://rdap.namebright.com/rdap/ -2108,DropCatch.com 628 LLC,Accredited,https://rdap.namebright.com/rdap/ -2109,DropCatch.com 629 LLC,Accredited,https://rdap.namebright.com/rdap/ -2110,DropCatch.com 630 LLC,Accredited,https://rdap.namebright.com/rdap/ -2111,DropCatch.com 631 LLC,Accredited,https://rdap.namebright.com/rdap/ -2112,DropCatch.com 632 LLC,Accredited,https://rdap.namebright.com/rdap/ -2113,DropCatch.com 633 LLC,Accredited,https://rdap.namebright.com/rdap/ -2114,DropCatch.com 634 LLC,Accredited,https://rdap.namebright.com/rdap/ -2115,DropCatch.com 635 LLC,Accredited,https://rdap.namebright.com/rdap/ -2116,DropCatch.com 636 LLC,Accredited,https://rdap.namebright.com/rdap/ -2117,DropCatch.com 637 LLC,Accredited,https://rdap.namebright.com/rdap/ -2118,DropCatch.com 638 LLC,Accredited,https://rdap.namebright.com/rdap/ -2119,DropCatch.com 639 LLC,Accredited,https://rdap.namebright.com/rdap/ -2120,DropCatch.com 640 LLC,Accredited,https://rdap.namebright.com/rdap/ -2121,DropCatch.com 641 LLC,Accredited,https://rdap.namebright.com/rdap/ -2122,DropCatch.com 642 LLC,Accredited,https://rdap.namebright.com/rdap/ -2123,DropCatch.com 643 LLC,Accredited,https://rdap.namebright.com/rdap/ -2124,DropCatch.com 644 LLC,Accredited,https://rdap.namebright.com/rdap/ -2125,DropCatch.com 645 LLC,Accredited,https://rdap.namebright.com/rdap/ -2126,DropCatch.com 646 LLC,Accredited,https://rdap.namebright.com/rdap/ -2127,DropCatch.com 647 LLC,Accredited,https://rdap.namebright.com/rdap/ -2128,DropCatch.com 648 LLC,Accredited,https://rdap.namebright.com/rdap/ -2129,DropCatch.com 649 LLC,Accredited,https://rdap.namebright.com/rdap/ -2130,DropCatch.com 650 LLC,Accredited,https://rdap.namebright.com/rdap/ -2131,DropCatch.com 651 LLC,Accredited,https://rdap.namebright.com/rdap/ -2132,DropCatch.com 652 LLC,Accredited,https://rdap.namebright.com/rdap/ -2133,DropCatch.com 653 LLC,Accredited,https://rdap.namebright.com/rdap/ -2134,DropCatch.com 654 LLC,Accredited,https://rdap.namebright.com/rdap/ -2135,DropCatch.com 655 LLC,Accredited,https://rdap.namebright.com/rdap/ -2136,DropCatch.com 656 LLC,Accredited,https://rdap.namebright.com/rdap/ -2137,DropCatch.com 657 LLC,Accredited,https://rdap.namebright.com/rdap/ -2138,DropCatch.com 658 LLC,Accredited,https://rdap.namebright.com/rdap/ -2139,DropCatch.com 659 LLC,Accredited,https://rdap.namebright.com/rdap/ -2140,DropCatch.com 660 LLC,Accredited,https://rdap.namebright.com/rdap/ -2141,DropCatch.com 661 LLC,Accredited,https://rdap.namebright.com/rdap/ -2142,DropCatch.com 662 LLC,Accredited,https://rdap.namebright.com/rdap/ -2143,DropCatch.com 663 LLC,Accredited,https://rdap.namebright.com/rdap/ -2144,DropCatch.com 664 LLC,Accredited,https://rdap.namebright.com/rdap/ -2145,DropCatch.com 665 LLC,Accredited,https://rdap.namebright.com/rdap/ -2146,DropCatch.com 666 LLC,Accredited,https://rdap.namebright.com/rdap/ -2147,DropCatch.com 667 LLC,Accredited,https://rdap.namebright.com/rdap/ -2148,DropCatch.com 668 LLC,Accredited,https://rdap.namebright.com/rdap/ -2149,DropCatch.com 669 LLC,Accredited,https://rdap.namebright.com/rdap/ -2150,DropCatch.com 670 LLC,Accredited,https://rdap.namebright.com/rdap/ -2151,DropCatch.com 671 LLC,Accredited,https://rdap.namebright.com/rdap/ -2152,DropCatch.com 672 LLC,Accredited,https://rdap.namebright.com/rdap/ -2153,DropCatch.com 673 LLC,Accredited,https://rdap.namebright.com/rdap/ -2154,DropCatch.com 674 LLC,Accredited,https://rdap.namebright.com/rdap/ -2155,DropCatch.com 675 LLC,Accredited,https://rdap.namebright.com/rdap/ -2156,DropCatch.com 676 LLC,Accredited,https://rdap.namebright.com/rdap/ -2157,DropCatch.com 677 LLC,Accredited,https://rdap.namebright.com/rdap/ -2158,DropCatch.com 678 LLC,Accredited,https://rdap.namebright.com/rdap/ -2159,DropCatch.com 679 LLC,Accredited,https://rdap.namebright.com/rdap/ -2160,DropCatch.com 680 LLC,Accredited,https://rdap.namebright.com/rdap/ -2161,DropCatch.com 681 LLC,Accredited,https://rdap.namebright.com/rdap/ -2162,DropCatch.com 682 LLC,Accredited,https://rdap.namebright.com/rdap/ -2163,DropCatch.com 683 LLC,Accredited,https://rdap.namebright.com/rdap/ -2164,DropCatch.com 684 LLC,Accredited,https://rdap.namebright.com/rdap/ -2165,DropCatch.com 685 LLC,Accredited,https://rdap.namebright.com/rdap/ -2166,DropCatch.com 686 LLC,Accredited,https://rdap.namebright.com/rdap/ -2167,DropCatch.com 687 LLC,Accredited,https://rdap.namebright.com/rdap/ -2168,DropCatch.com 688 LLC,Accredited,https://rdap.namebright.com/rdap/ -2169,DropCatch.com 689 LLC,Accredited,https://rdap.namebright.com/rdap/ -2170,DropCatch.com 690 LLC,Accredited,https://rdap.namebright.com/rdap/ -2171,DropCatch.com 691 LLC,Accredited,https://rdap.namebright.com/rdap/ -2172,DropCatch.com 692 LLC,Accredited,https://rdap.namebright.com/rdap/ -2173,DropCatch.com 693 LLC,Accredited,https://rdap.namebright.com/rdap/ -2174,DropCatch.com 694 LLC,Accredited,https://rdap.namebright.com/rdap/ -2175,DropCatch.com 695 LLC,Accredited,https://rdap.namebright.com/rdap/ -2176,DropCatch.com 696 LLC,Accredited,https://rdap.namebright.com/rdap/ -2177,DropCatch.com 697 LLC,Accredited,https://rdap.namebright.com/rdap/ -2178,DropCatch.com 698 LLC,Accredited,https://rdap.namebright.com/rdap/ -2179,DropCatch.com 699 LLC,Accredited,https://rdap.namebright.com/rdap/ -2180,DropCatch.com 700 LLC,Accredited,https://rdap.namebright.com/rdap/ -2181,DropCatch.com 701 LLC,Accredited,https://rdap.namebright.com/rdap/ -2182,DropCatch.com 702 LLC,Accredited,https://rdap.namebright.com/rdap/ -2183,DropCatch.com 703 LLC,Accredited,https://rdap.namebright.com/rdap/ -2184,DropCatch.com 704 LLC,Accredited,https://rdap.namebright.com/rdap/ -2185,DropCatch.com 705 LLC,Accredited,https://rdap.namebright.com/rdap/ -2186,DropCatch.com 706 LLC,Accredited,https://rdap.namebright.com/rdap/ -2187,DropCatch.com 707 LLC,Accredited,https://rdap.namebright.com/rdap/ -2188,DropCatch.com 708 LLC,Accredited,https://rdap.namebright.com/rdap/ -2189,DropCatch.com 709 LLC,Accredited,https://rdap.namebright.com/rdap/ -2190,DropCatch.com 710 LLC,Accredited,https://rdap.namebright.com/rdap/ -2191,DropCatch.com 711 LLC,Accredited,https://rdap.namebright.com/rdap/ -2192,DropCatch.com 712 LLC,Accredited,https://rdap.namebright.com/rdap/ -2193,DropCatch.com 713 LLC,Accredited,https://rdap.namebright.com/rdap/ -2194,DropCatch.com 714 LLC,Accredited,https://rdap.namebright.com/rdap/ -2195,DropCatch.com 715 LLC,Accredited,https://rdap.namebright.com/rdap/ -2196,DropCatch.com 716 LLC,Accredited,https://rdap.namebright.com/rdap/ -2197,DropCatch.com 717 LLC,Accredited,https://rdap.namebright.com/rdap/ -2198,DropCatch.com 718 LLC,Accredited,https://rdap.namebright.com/rdap/ -2199,DropCatch.com 719 LLC,Accredited,https://rdap.namebright.com/rdap/ -2200,DropCatch.com 720 LLC,Accredited,https://rdap.namebright.com/rdap/ -2201,DropCatch.com 721 LLC,Accredited,https://rdap.namebright.com/rdap/ -2202,DropCatch.com 722 LLC,Accredited,https://rdap.namebright.com/rdap/ -2203,DropCatch.com 723 LLC,Accredited,https://rdap.namebright.com/rdap/ -2204,DropCatch.com 724 LLC,Accredited,https://rdap.namebright.com/rdap/ -2205,DropCatch.com 725 LLC,Accredited,https://rdap.namebright.com/rdap/ -2206,DropCatch.com 726 LLC,Accredited,https://rdap.namebright.com/rdap/ -2207,DropCatch.com 727 LLC,Accredited,https://rdap.namebright.com/rdap/ -2208,DropCatch.com 728 LLC,Accredited,https://rdap.namebright.com/rdap/ -2209,DropCatch.com 729 LLC,Accredited,https://rdap.namebright.com/rdap/ -2210,DropCatch.com 730 LLC,Accredited,https://rdap.namebright.com/rdap/ -2211,DropCatch.com 731 LLC,Accredited,https://rdap.namebright.com/rdap/ -2212,DropCatch.com 732 LLC,Accredited,https://rdap.namebright.com/rdap/ -2213,DropCatch.com 733 LLC,Accredited,https://rdap.namebright.com/rdap/ -2214,DropCatch.com 734 LLC,Accredited,https://rdap.namebright.com/rdap/ -2215,DropCatch.com 735 LLC,Accredited,https://rdap.namebright.com/rdap/ -2216,DropCatch.com 736 LLC,Accredited,https://rdap.namebright.com/rdap/ -2217,DropCatch.com 737 LLC,Accredited,https://rdap.namebright.com/rdap/ -2218,DropCatch.com 738 LLC,Accredited,https://rdap.namebright.com/rdap/ -2219,DropCatch.com 739 LLC,Accredited,https://rdap.namebright.com/rdap/ -2220,DropCatch.com 740 LLC,Accredited,https://rdap.namebright.com/rdap/ -2221,DropCatch.com 741 LLC,Accredited,https://rdap.namebright.com/rdap/ -2222,DropCatch.com 742 LLC,Accredited,https://rdap.namebright.com/rdap/ -2223,DropCatch.com 743 LLC,Accredited,https://rdap.namebright.com/rdap/ -2224,DropCatch.com 744 LLC,Accredited,https://rdap.namebright.com/rdap/ -2225,DropCatch.com 745 LLC,Accredited,https://rdap.namebright.com/rdap/ -2226,"Aquarius Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2227,"Big Dipper Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2228,"Bonzai Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2229,"ChocolateChipDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2230,"CloudBreakDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2231,"CloudNineDomain, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2232,"Cool River Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2233,"Desert Sand Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2234,"DomaintoOrder, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2235,"EndeavourDomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2236,"Fetch Registrar, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2237,"Lionshare Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2238,"Lucky Elephant Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2239,"Magnate Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2240,"Nameselite, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2241,"Namesourcedomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2242,"New Order Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2243,"Noteworthydomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2244,"Painted Pony Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2245,"Pipeline Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2246,"Shining Star Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2247,"Sliceofheaven Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2248,"Tradewinds Names, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2249,"White Alligator Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2250,"Wildzebradomains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2251,"Hongkong Domain Name Information Management Co., Ltd.",Accredited,https://rdap.dnsgulf.com/ -2252,"Cool Breeze Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2253,"Domain Name Origin, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2254,"Domain Name Root, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2255,"Easy Street Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2256,"Entrust Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2257,"Fair Trade Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2258,"Fine Grain Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2259,"Free Spirit Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2260,"Hang Ten Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2261,"Leatherneckdomains.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2262,"Line Drive Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2263,"Magnolia Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2264,"Major League Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2265,"Pararescuedomains.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2266,"Pink Elephant Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2267,"Ripcord Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2268,"Ripcurl Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2269,"Riptide Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2270,"Soaring Eagle Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2271,"Soldierofonedomains.com, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2272,"Sourced Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2273,"Streamline Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2274,"Sugar Cube Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2275,"Tiger Shark Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2276,"Veritas Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2277,"White Rhino Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2278,"Wild Bunch Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2279,"Your Domain Casa, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2280,Fan Domains Ltd,Terminated, -2281,Nexigen Digital Pty Ltd,Accredited,https://rdap.synergywholesale.com/ -2282,Dynadot13 LLC,Accredited,https://rdap.dynadot.com/ -2283,Dynadot14 LLC,Accredited,https://rdap.dynadot.com/ -2284,Dynadot15 LLC,Accredited,https://rdap.dynadot.com/ -2285,Dynadot16 LLC,Accredited,https://rdap.dynadot.com/ -2286,Dynadot17 LLC,Accredited,https://rdap.dynadot.com/ -2287,DNS Africa Ltd,Accredited,https://rdap.dns.business/rdap/ -2288,Metaregistrar BV,Accredited,https://rdap.metaregistrar.com/ -2289,"Abraham Lincoln, LLC",Terminated, -2290,"Achilles 888, LLC",Terminated, -2291,"Annam, LLC",Terminated, -2292,"Apollo 888, LLC",Terminated, -2293,"Ares 888, LLC",Terminated, -2294,"Aristotle 888, LLC",Terminated, -2295,"Arthur Pendragon, LLC",Terminated, -2296,"Benjamin Franklin 888, LLC",Terminated, -2297,"Billy the Kid, LLC",Terminated, -2298,"Buddha, LLC",Terminated, -2299,"Charles Darwin, LLC",Terminated, -2300,"Confucius, LLC",Terminated, -2301,"Constantine the Great, LLC",Terminated, -2302,"Dainam, LLC",Terminated, -2303,"Dalai Lama, LLC",Terminated, -2304,"Eric the Red, LLC",Terminated, -2305,"Erwin Rommel, LLC",Terminated, -2306,"Galileo Galilei, LLC",Terminated, -2307,"Hercules 888, LLC",Terminated, -2308,"Isaac Newton, LLC",Terminated, -2309,"James Madison, LLC",Terminated, -2310,"Joan of Arc, LLC",Terminated, -2311,"Leif Ericson, LLC",Terminated, -2312,"Leonardo da Vinci, LLC",Terminated, -2313,"Leonidas, LLC",Terminated, -2314,"Mahatma Gandhi, LLC",Terminated, -2315,"Mailinh, LLC",Terminated, -2316,"Odysseus 888, LLC",Terminated, -2317,"Omni 888, LLC",Terminated, -2318,"Perseus 888, LLC",Terminated, -2319,"Peter the Great, LLC",Terminated, -2320,"Plato 888, LLC",Terminated, -2321,"Poseidon 888, LLC",Terminated, -2322,"Radu Damian, LLC",Terminated, -2323,"Ramses II, LLC",Terminated, -2324,"Richard the Lionheart 888, LLC",Terminated, -2325,"Maximus, LLC",Terminated, -2326,"Sir Lancelot du Lac, LLC",Terminated, -2327,"Socrates 888, LLC",Terminated, -2328,"Spartacus, LLC",Terminated, -2329,"Ad Valorem Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2330,"Alethia Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2331,"Baracuda Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2332,"Bonam Fortunam Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2333,"Deep Dive Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2334,"Domain Ala Carte, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2335,"Domain Collage, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2336,"Domain Esta Aqui, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2337,"Domain Lifestyle, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2338,"Domain Locale, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2339,"Domain Original, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2340,"Domaining Oro, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2341,"Domains of Origin, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2342,"Eagle Eye Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2343,"Ethos Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2344,"EZ Times Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2345,"Free Dive Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2346,"Glide Slope Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2347,"House of Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2348,"Lemon Shark Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2349,"Moon Shot Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2350,"Old Tyme Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2351,"Rally Cry Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2352,"Straight 8 Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2353,"V12 Domains, LLC",Accredited,https://rdap.networksolutions.com/rdap/ -2354,"Tan Tran, LLC",Terminated, -2355,"Theseus 888, LLC",Terminated, -2356,"Thomas Edison, LLC",Terminated, -2357,"Thomas Jefferson, LLC",Terminated, -2358,"Titus 888, LLC",Terminated, -2359,"Vlad the Impaler, LLC",Terminated, -2360,"Wild Bill Hickok, LLC",Terminated, -2361,"William Wallace, LLC",Terminated, -2362,"Winston Churchill, LLC",Terminated, -2363,"Zeus 888, LLC",Terminated, -2364,"Excalibur, LLC",Terminated, -2365,"Green Destiny, LLC",Terminated, -2366,"Heavens Will, LLC",Terminated, -2367,"Honjo Masamune, LLC",Terminated, -2368,"Hrunting, LLC",Terminated, -2369,"Joyeuse, LLC",Terminated, -2370,"La Tizone, LLC",Terminated, -2371,"Stormbringer, LLC",Terminated, -2372,"Ulfberht, LLC",Terminated, -2373,"Zulfigar, LLC",Terminated, -2374,Hosting Ukraine LLC,Accredited,https://rdap.ukraine.com.ua/ -2375,"Pheenix 1, LLC",Terminated, -2376,"Pheenix 2, LLC",Terminated, -2377,"Pheenix 3, LLC",Terminated, -2378,"Pheenix 4, LLC",Terminated, -2379,"Pheenix 5, LLC",Terminated, -2380,"Pheenix 6, LLC",Terminated, -2381,"Pheenix 7, LLC",Terminated, -2382,"Pheenix 8, LLC",Terminated, -2383,"Pheenix 9, LLC",Terminated, -2384,"Pheenix 10, LLC",Terminated, -2385,"Pheenix 11, LLC",Terminated, -2386,"Pheenix 12, LLC",Terminated, -2387,"Pheenix 13, LLC",Terminated, -2388,"Pheenix 14, LLC",Terminated, -2389,"Pheenix 15, LLC",Terminated, -2390,"Pheenix 16, LLC",Terminated, -2391,"Pheenix 17, LLC",Terminated, -2392,"Pheenix 18, LLC",Terminated, -2393,"Pheenix 19, LLC",Terminated, -2394,"Pheenix 20, LLC",Terminated, -2395,"Pheenix 21, LLC",Terminated, -2396,"Pheenix 22, LLC",Terminated, -2397,"Pheenix 23, LLC",Terminated, -2398,"Pheenix 24, LLC",Terminated, -2399,"Pheenix 25, LLC",Terminated, -2400,"Pheenix 26, LLC",Terminated, -2401,"Pheenix 27, LLC",Terminated, -2402,"Pheenix 28, LLC",Terminated, -2403,"Pheenix 29, LLC",Terminated, -2404,"Pheenix 30, LLC",Terminated, -2405,"Pheenix 31, LLC",Terminated, -2406,"Pheenix 32, LLC",Terminated, -2407,"Pheenix 33, LLC",Terminated, -2408,"Pheenix 34, LLC",Terminated, -2409,"Pheenix 35, LLC",Terminated, -2410,"Pheenix 36, LLC",Terminated, -2411,"Pheenix 37, LLC",Terminated, -2412,"Pheenix 38, LLC",Terminated, -2413,"Pheenix 39, LLC",Terminated, -2414,"Pheenix 40, LLC",Terminated, -2415,"Pheenix 41, LLC",Terminated, -2416,"Pheenix 42, LLC",Terminated, -2417,"Pheenix 43, LLC",Terminated, -2418,"Pheenix 44, LLC",Terminated, -2419,"Pheenix 45, LLC",Terminated, -2420,"Pheenix 46, LLC",Terminated, -2421,"Pheenix 47, LLC",Terminated, -2422,"Pheenix 48, LLC",Terminated, -2423,"Pheenix 49, LLC",Terminated, -2424,"Pheenix 50, LLC",Terminated, -2425,"Pheenix 51, LLC",Terminated, -2426,"Pheenix 52, LLC",Terminated, -2427,"Pheenix 53, LLC",Terminated, -2428,"Pheenix 54, LLC",Terminated, -2429,"Pheenix 55, LLC",Terminated, -2430,"Pheenix 56, LLC",Terminated, -2431,"Pheenix 57, LLC",Terminated, -2432,"Pheenix 58, LLC",Terminated, -2433,"Pheenix 59, LLC",Terminated, -2434,"Pheenix 60, LLC",Terminated, -2435,"Pheenix 61, LLC",Terminated, -2436,"Pheenix 62, LLC",Terminated, -2437,"Pheenix 63, LLC",Terminated, -2438,"Pheenix 64, LLC",Terminated, -2439,"Pheenix 65, LLC",Terminated, -2440,"Pheenix 66, LLC",Terminated, -2441,"Pheenix 67, LLC",Terminated, -2442,"Pheenix 68, LLC",Terminated, -2443,"Pheenix 69, LLC",Terminated, -2444,"Pheenix 70, LLC",Terminated, -2445,"Pheenix 71, LLC",Terminated, -2446,"Pheenix 72, LLC",Terminated, -2447,"Pheenix 73, LLC",Terminated, -2448,"Pheenix 74, LLC",Terminated, -2449,"Pheenix 75, LLC",Terminated, -2450,"Pheenix 76, LLC",Terminated, -2451,"Pheenix 77, LLC",Terminated, -2452,"Pheenix 78, LLC",Terminated, -2453,"Pheenix 79, LLC",Terminated, -2454,"Pheenix 80, LLC",Terminated, -2455,"Pheenix 81, LLC",Terminated, -2456,"Pheenix 82, LLC",Terminated, -2457,"Pheenix 83, LLC",Terminated, -2458,"Pheenix 84, LLC",Terminated, -2459,"Pheenix 85, LLC",Terminated, -2460,"Pheenix 86, LLC",Terminated, -2461,"Pheenix 87, LLC",Terminated, -2462,"Pheenix 88, LLC",Terminated, -2463,"Pheenix 89, LLC",Terminated, -2464,"Pheenix 90, LLC",Terminated, -2465,"Pheenix 91, LLC",Terminated, -2466,"Pheenix 92, LLC",Terminated, -2467,"Pheenix 93, LLC",Terminated, -2468,"Pheenix 94, LLC",Terminated, -2469,"Pheenix 95, LLC",Terminated, -2470,"Pheenix 96, LLC",Terminated, -2471,"Pheenix 97, LLC",Terminated, -2472,"Pheenix 98, LLC",Terminated, -2473,"Pheenix 99, LLC",Terminated, -2474,"Pheenix 100, LLC",Terminated, -2475,RegistrarSEC LLC,Accredited,https://rdap.registrarsec.com/ -2476,PlanetHoster Inc.,Accredited,https://www.planethoster.com/en/Domains/rdap/ -2477,Brandma.co Limited,Terminated,https://rdap.brandma.co/ -2478,"Hezhong Liancheng Beijing Technology Co., Ltd",Terminated, -2479,"Maoming QunYing Network Co., Ltd",Terminated, -2480,"Akamai Technologies, Inc.",Terminated, -2481,Blue Hi Interconnect (Beijing) Technology Limited Company,Terminated, -2482,Stichting Registrar of Last Resort Foundation,Accredited,https://rdap.rolr.uk/ -2483,NameCamp Limited,Accredited,https://rdap.namecamp.com/ -2484,"Domain Research, LLC",Accredited,https://api.domainr.com/rdap/ -2485,"SHENZHEN EIMS INFORMATION TECHNOLOGY CO., LTD",Accredited,https://rdap.190.vip/ -2486,Ednit Software Private Limited,Accredited,https://rdapserver.net/ -2487,Internet Domain Service BS Corp,Accredited,https://rdap.internet.bs/ -2489,C T CORPORATION SYSTEM DBA Corsearch,Terminated, -2490,"Cloud Bamboo, LLC",Terminated, -2491,"Cloud Beauty, LLC",Terminated, -2492,"Cloud Boom, LLC",Terminated, -2493,"Cloud City, LLC",Terminated, -2494,"Cloud Diamond, LLC",Terminated, -2495,"Cloud Orchid, LLC",Terminated, -2496,"Cloud Plum, LLC",Terminated, -2497,"Cloud Seed, LLC",Terminated, -2498,"Cloud Shark, LLC",Terminated, -2499,"Cloud Sun, LLC",Terminated, -2500,"Cloud Super, LLC",Terminated, -2501,"Cloud System, LLC",Terminated, -2502,Online Data Services Joint Stock Company,Terminated, -2504,"HongKong Di En Si International Co., Limited",Accredited,https://rdap.gooddns.com/ -2505,DropCatch.com 746 LLC,Accredited,https://rdap.namebright.com/rdap/ -2506,DropCatch.com 747 LLC,Accredited,https://rdap.namebright.com/rdap/ -2507,DropCatch.com 748 LLC,Accredited,https://rdap.namebright.com/rdap/ -2508,DropCatch.com 749 LLC,Accredited,https://rdap.namebright.com/rdap/ -2509,DropCatch.com 750 LLC,Accredited,https://rdap.namebright.com/rdap/ -2510,DropCatch.com 751 LLC,Accredited,https://rdap.namebright.com/rdap/ -2511,DropCatch.com 752 LLC,Accredited,https://rdap.namebright.com/rdap/ -2512,DropCatch.com 753 LLC,Accredited,https://rdap.namebright.com/rdap/ -2513,DropCatch.com 754 LLC,Accredited,https://rdap.namebright.com/rdap/ -2514,DropCatch.com 755 LLC,Accredited,https://rdap.namebright.com/rdap/ -2515,DropCatch.com 756 LLC,Accredited,https://rdap.namebright.com/rdap/ -2516,DropCatch.com 757 LLC,Accredited,https://rdap.namebright.com/rdap/ -2517,DropCatch.com 758 LLC,Accredited,https://rdap.namebright.com/rdap/ -2518,DropCatch.com 759 LLC,Accredited,https://rdap.namebright.com/rdap/ -2519,DropCatch.com 760 LLC,Accredited,https://rdap.namebright.com/rdap/ -2520,DropCatch.com 761 LLC,Accredited,https://rdap.namebright.com/rdap/ -2521,DropCatch.com 762 LLC,Accredited,https://rdap.namebright.com/rdap/ -2522,DropCatch.com 763 LLC,Accredited,https://rdap.namebright.com/rdap/ -2523,DropCatch.com 764 LLC,Accredited,https://rdap.namebright.com/rdap/ -2524,DropCatch.com 765 LLC,Accredited,https://rdap.namebright.com/rdap/ -2525,DropCatch.com 766 LLC,Accredited,https://rdap.namebright.com/rdap/ -2526,DropCatch.com 767 LLC,Accredited,https://rdap.namebright.com/rdap/ -2527,DropCatch.com 768 LLC,Accredited,https://rdap.namebright.com/rdap/ -2528,DropCatch.com 769 LLC,Accredited,https://rdap.namebright.com/rdap/ -2529,DropCatch.com 770 LLC,Accredited,https://rdap.namebright.com/rdap/ -2530,DropCatch.com 771 LLC,Accredited,https://rdap.namebright.com/rdap/ -2531,DropCatch.com 772 LLC,Accredited,https://rdap.namebright.com/rdap/ -2532,DropCatch.com 773 LLC,Accredited,https://rdap.namebright.com/rdap/ -2533,DropCatch.com 774 LLC,Accredited,https://rdap.namebright.com/rdap/ -2534,DropCatch.com 775 LLC,Accredited,https://rdap.namebright.com/rdap/ -2535,DropCatch.com 776 LLC,Accredited,https://rdap.namebright.com/rdap/ -2536,DropCatch.com 777 LLC,Accredited,https://rdap.namebright.com/rdap/ -2537,DropCatch.com 778 LLC,Accredited,https://rdap.namebright.com/rdap/ -2538,DropCatch.com 779 LLC,Accredited,https://rdap.namebright.com/rdap/ -2539,DropCatch.com 780 LLC,Accredited,https://rdap.namebright.com/rdap/ -2540,DropCatch.com 781 LLC,Accredited,https://rdap.namebright.com/rdap/ -2541,DropCatch.com 782 LLC,Accredited,https://rdap.namebright.com/rdap/ -2542,DropCatch.com 783 LLC,Accredited,https://rdap.namebright.com/rdap/ -2543,DropCatch.com 784 LLC,Accredited,https://rdap.namebright.com/rdap/ -2544,DropCatch.com 785 LLC,Accredited,https://rdap.namebright.com/rdap/ -2545,DropCatch.com 786 LLC,Accredited,https://rdap.namebright.com/rdap/ -2546,DropCatch.com 787 LLC,Accredited,https://rdap.namebright.com/rdap/ -2547,DropCatch.com 788 LLC,Accredited,https://rdap.namebright.com/rdap/ -2548,DropCatch.com 789 LLC,Accredited,https://rdap.namebright.com/rdap/ -2549,DropCatch.com 790 LLC,Accredited,https://rdap.namebright.com/rdap/ -2550,DropCatch.com 791 LLC,Accredited,https://rdap.namebright.com/rdap/ -2551,DropCatch.com 792 LLC,Accredited,https://rdap.namebright.com/rdap/ -2552,DropCatch.com 793 LLC,Accredited,https://rdap.namebright.com/rdap/ -2553,DropCatch.com 794 LLC,Accredited,https://rdap.namebright.com/rdap/ -2554,DropCatch.com 795 LLC,Accredited,https://rdap.namebright.com/rdap/ -2555,DropCatch.com 796 LLC,Accredited,https://rdap.namebright.com/rdap/ -2556,DropCatch.com 797 LLC,Accredited,https://rdap.namebright.com/rdap/ -2557,DropCatch.com 798 LLC,Accredited,https://rdap.namebright.com/rdap/ -2558,DropCatch.com 799 LLC,Accredited,https://rdap.namebright.com/rdap/ -2559,DropCatch.com 800 LLC,Accredited,https://rdap.namebright.com/rdap/ -2560,DropCatch.com 801 LLC,Accredited,https://rdap.namebright.com/rdap/ -2561,DropCatch.com 802 LLC,Accredited,https://rdap.namebright.com/rdap/ -2562,DropCatch.com 803 LLC,Accredited,https://rdap.namebright.com/rdap/ -2563,DropCatch.com 804 LLC,Accredited,https://rdap.namebright.com/rdap/ -2564,DropCatch.com 805 LLC,Accredited,https://rdap.namebright.com/rdap/ -2565,DropCatch.com 806 LLC,Accredited,https://rdap.namebright.com/rdap/ -2566,DropCatch.com 807 LLC,Accredited,https://rdap.namebright.com/rdap/ -2567,DropCatch.com 808 LLC,Accredited,https://rdap.namebright.com/rdap/ -2568,DropCatch.com 809 LLC,Accredited,https://rdap.namebright.com/rdap/ -2569,DropCatch.com 810 LLC,Accredited,https://rdap.namebright.com/rdap/ -2570,DropCatch.com 811 LLC,Accredited,https://rdap.namebright.com/rdap/ -2571,DropCatch.com 812 LLC,Accredited,https://rdap.namebright.com/rdap/ -2572,DropCatch.com 813 LLC,Accredited,https://rdap.namebright.com/rdap/ -2573,DropCatch.com 814 LLC,Accredited,https://rdap.namebright.com/rdap/ -2574,DropCatch.com 815 LLC,Accredited,https://rdap.namebright.com/rdap/ -2575,DropCatch.com 816 LLC,Accredited,https://rdap.namebright.com/rdap/ -2576,DropCatch.com 817 LLC,Accredited,https://rdap.namebright.com/rdap/ -2577,DropCatch.com 818 LLC,Accredited,https://rdap.namebright.com/rdap/ -2578,DropCatch.com 819 LLC,Accredited,https://rdap.namebright.com/rdap/ -2579,DropCatch.com 820 LLC,Accredited,https://rdap.namebright.com/rdap/ -2580,DropCatch.com 821 LLC,Accredited,https://rdap.namebright.com/rdap/ -2581,DropCatch.com 822 LLC,Accredited,https://rdap.namebright.com/rdap/ -2582,DropCatch.com 823 LLC,Accredited,https://rdap.namebright.com/rdap/ -2583,DropCatch.com 824 LLC,Accredited,https://rdap.namebright.com/rdap/ -2584,DropCatch.com 825 LLC,Accredited,https://rdap.namebright.com/rdap/ -2585,DropCatch.com 826 LLC,Accredited,https://rdap.namebright.com/rdap/ -2586,DropCatch.com 827 LLC,Accredited,https://rdap.namebright.com/rdap/ -2587,DropCatch.com 828 LLC,Accredited,https://rdap.namebright.com/rdap/ -2588,DropCatch.com 829 LLC,Accredited,https://rdap.namebright.com/rdap/ -2589,DropCatch.com 830 LLC,Accredited,https://rdap.namebright.com/rdap/ -2590,DropCatch.com 831 LLC,Accredited,https://rdap.namebright.com/rdap/ -2591,DropCatch.com 832 LLC,Accredited,https://rdap.namebright.com/rdap/ -2592,DropCatch.com 833 LLC,Accredited,https://rdap.namebright.com/rdap/ -2593,DropCatch.com 834 LLC,Accredited,https://rdap.namebright.com/rdap/ -2594,DropCatch.com 835 LLC,Accredited,https://rdap.namebright.com/rdap/ -2595,DropCatch.com 836 LLC,Accredited,https://rdap.namebright.com/rdap/ -2596,DropCatch.com 837 LLC,Accredited,https://rdap.namebright.com/rdap/ -2597,DropCatch.com 838 LLC,Accredited,https://rdap.namebright.com/rdap/ -2598,DropCatch.com 839 LLC,Accredited,https://rdap.namebright.com/rdap/ -2599,DropCatch.com 840 LLC,Accredited,https://rdap.namebright.com/rdap/ -2600,DropCatch.com 841 LLC,Accredited,https://rdap.namebright.com/rdap/ -2601,DropCatch.com 842 LLC,Accredited,https://rdap.namebright.com/rdap/ -2602,DropCatch.com 843 LLC,Accredited,https://rdap.namebright.com/rdap/ -2603,DropCatch.com 844 LLC,Accredited,https://rdap.namebright.com/rdap/ -2604,DropCatch.com 845 LLC,Accredited,https://rdap.namebright.com/rdap/ -2605,DropCatch.com 846 LLC,Accredited,https://rdap.namebright.com/rdap/ -2606,DropCatch.com 847 LLC,Accredited,https://rdap.namebright.com/rdap/ -2607,DropCatch.com 848 LLC,Accredited,https://rdap.namebright.com/rdap/ -2608,DropCatch.com 849 LLC,Accredited,https://rdap.namebright.com/rdap/ -2609,DropCatch.com 850 LLC,Accredited,https://rdap.namebright.com/rdap/ -2610,DropCatch.com 851 LLC,Accredited,https://rdap.namebright.com/rdap/ -2611,DropCatch.com 852 LLC,Accredited,https://rdap.namebright.com/rdap/ -2612,DropCatch.com 853 LLC,Accredited,https://rdap.namebright.com/rdap/ -2613,DropCatch.com 854 LLC,Accredited,https://rdap.namebright.com/rdap/ -2614,DropCatch.com 855 LLC,Accredited,https://rdap.namebright.com/rdap/ -2615,DropCatch.com 856 LLC,Accredited,https://rdap.namebright.com/rdap/ -2616,DropCatch.com 857 LLC,Accredited,https://rdap.namebright.com/rdap/ -2617,DropCatch.com 858 LLC,Accredited,https://rdap.namebright.com/rdap/ -2618,DropCatch.com 859 LLC,Accredited,https://rdap.namebright.com/rdap/ -2619,DropCatch.com 860 LLC,Accredited,https://rdap.namebright.com/rdap/ -2620,DropCatch.com 861 LLC,Accredited,https://rdap.namebright.com/rdap/ -2621,DropCatch.com 862 LLC,Accredited,https://rdap.namebright.com/rdap/ -2622,DropCatch.com 863 LLC,Accredited,https://rdap.namebright.com/rdap/ -2623,DropCatch.com 864 LLC,Accredited,https://rdap.namebright.com/rdap/ -2624,DropCatch.com 865 LLC,Accredited,https://rdap.namebright.com/rdap/ -2625,DropCatch.com 866 LLC,Accredited,https://rdap.namebright.com/rdap/ -2626,DropCatch.com 867 LLC,Accredited,https://rdap.namebright.com/rdap/ -2627,DropCatch.com 868 LLC,Accredited,https://rdap.namebright.com/rdap/ -2628,DropCatch.com 869 LLC,Accredited,https://rdap.namebright.com/rdap/ -2629,DropCatch.com 870 LLC,Accredited,https://rdap.namebright.com/rdap/ -2630,DropCatch.com 871 LLC,Accredited,https://rdap.namebright.com/rdap/ -2631,DropCatch.com 872 LLC,Accredited,https://rdap.namebright.com/rdap/ -2632,DropCatch.com 873 LLC,Accredited,https://rdap.namebright.com/rdap/ -2633,DropCatch.com 874 LLC,Accredited,https://rdap.namebright.com/rdap/ -2634,DropCatch.com 875 LLC,Accredited,https://rdap.namebright.com/rdap/ -2635,DropCatch.com 876 LLC,Accredited,https://rdap.namebright.com/rdap/ -2636,DropCatch.com 877 LLC,Accredited,https://rdap.namebright.com/rdap/ -2637,DropCatch.com 878 LLC,Accredited,https://rdap.namebright.com/rdap/ -2638,DropCatch.com 879 LLC,Accredited,https://rdap.namebright.com/rdap/ -2639,DropCatch.com 880 LLC,Accredited,https://rdap.namebright.com/rdap/ -2640,DropCatch.com 881 LLC,Accredited,https://rdap.namebright.com/rdap/ -2641,DropCatch.com 882 LLC,Accredited,https://rdap.namebright.com/rdap/ -2642,DropCatch.com 883 LLC,Accredited,https://rdap.namebright.com/rdap/ -2643,DropCatch.com 884 LLC,Accredited,https://rdap.namebright.com/rdap/ -2644,DropCatch.com 885 LLC,Accredited,https://rdap.namebright.com/rdap/ -2645,DropCatch.com 886 LLC,Accredited,https://rdap.namebright.com/rdap/ -2646,DropCatch.com 887 LLC,Accredited,https://rdap.namebright.com/rdap/ -2647,DropCatch.com 888 LLC,Accredited,https://rdap.namebright.com/rdap/ -2648,DropCatch.com 889 LLC,Accredited,https://rdap.namebright.com/rdap/ -2649,DropCatch.com 890 LLC,Accredited,https://rdap.namebright.com/rdap/ -2650,DropCatch.com 891 LLC,Accredited,https://rdap.namebright.com/rdap/ -2651,DropCatch.com 892 LLC,Accredited,https://rdap.namebright.com/rdap/ -2652,DropCatch.com 893 LLC,Accredited,https://rdap.namebright.com/rdap/ -2653,DropCatch.com 894 LLC,Accredited,https://rdap.namebright.com/rdap/ -2654,DropCatch.com 895 LLC,Accredited,https://rdap.namebright.com/rdap/ -2655,DropCatch.com 896 LLC,Accredited,https://rdap.namebright.com/rdap/ -2656,DropCatch.com 897 LLC,Accredited,https://rdap.namebright.com/rdap/ -2657,DropCatch.com 898 LLC,Accredited,https://rdap.namebright.com/rdap/ -2658,DropCatch.com 899 LLC,Accredited,https://rdap.namebright.com/rdap/ -2659,DropCatch.com 900 LLC,Accredited,https://rdap.namebright.com/rdap/ -2660,DropCatch.com 901 LLC,Accredited,https://rdap.namebright.com/rdap/ -2661,DropCatch.com 902 LLC,Accredited,https://rdap.namebright.com/rdap/ -2662,DropCatch.com 903 LLC,Accredited,https://rdap.namebright.com/rdap/ -2663,DropCatch.com 904 LLC,Accredited,https://rdap.namebright.com/rdap/ -2664,DropCatch.com 905 LLC,Accredited,https://rdap.namebright.com/rdap/ -2665,DropCatch.com 906 LLC,Accredited,https://rdap.namebright.com/rdap/ -2666,DropCatch.com 907 LLC,Accredited,https://rdap.namebright.com/rdap/ -2667,DropCatch.com 908 LLC,Accredited,https://rdap.namebright.com/rdap/ -2668,DropCatch.com 909 LLC,Accredited,https://rdap.namebright.com/rdap/ -2669,DropCatch.com 910 LLC,Accredited,https://rdap.namebright.com/rdap/ -2670,DropCatch.com 911 LLC,Accredited,https://rdap.namebright.com/rdap/ -2671,DropCatch.com 912 LLC,Accredited,https://rdap.namebright.com/rdap/ -2672,DropCatch.com 913 LLC,Accredited,https://rdap.namebright.com/rdap/ -2673,DropCatch.com 914 LLC,Accredited,https://rdap.namebright.com/rdap/ -2674,DropCatch.com 915 LLC,Accredited,https://rdap.namebright.com/rdap/ -2675,DropCatch.com 916 LLC,Accredited,https://rdap.namebright.com/rdap/ -2676,DropCatch.com 917 LLC,Accredited,https://rdap.namebright.com/rdap/ -2677,DropCatch.com 918 LLC,Accredited,https://rdap.namebright.com/rdap/ -2678,DropCatch.com 919 LLC,Accredited,https://rdap.namebright.com/rdap/ -2679,DropCatch.com 920 LLC,Accredited,https://rdap.namebright.com/rdap/ -2680,DropCatch.com 921 LLC,Accredited,https://rdap.namebright.com/rdap/ -2681,DropCatch.com 922 LLC,Accredited,https://rdap.namebright.com/rdap/ -2682,DropCatch.com 923 LLC,Accredited,https://rdap.namebright.com/rdap/ -2683,DropCatch.com 924 LLC,Accredited,https://rdap.namebright.com/rdap/ -2684,DropCatch.com 925 LLC,Accredited,https://rdap.namebright.com/rdap/ -2685,DropCatch.com 926 LLC,Accredited,https://rdap.namebright.com/rdap/ -2686,DropCatch.com 927 LLC,Accredited,https://rdap.namebright.com/rdap/ -2687,DropCatch.com 928 LLC,Accredited,https://rdap.namebright.com/rdap/ -2688,DropCatch.com 929 LLC,Accredited,https://rdap.namebright.com/rdap/ -2689,DropCatch.com 930 LLC,Accredited,https://rdap.namebright.com/rdap/ -2690,DropCatch.com 931 LLC,Accredited,https://rdap.namebright.com/rdap/ -2691,DropCatch.com 932 LLC,Accredited,https://rdap.namebright.com/rdap/ -2692,DropCatch.com 933 LLC,Accredited,https://rdap.namebright.com/rdap/ -2693,DropCatch.com 934 LLC,Accredited,https://rdap.namebright.com/rdap/ -2694,DropCatch.com 935 LLC,Accredited,https://rdap.namebright.com/rdap/ -2695,DropCatch.com 936 LLC,Accredited,https://rdap.namebright.com/rdap/ -2696,DropCatch.com 937 LLC,Accredited,https://rdap.namebright.com/rdap/ -2697,DropCatch.com 938 LLC,Accredited,https://rdap.namebright.com/rdap/ -2698,DropCatch.com 939 LLC,Accredited,https://rdap.namebright.com/rdap/ -2699,DropCatch.com 940 LLC,Accredited,https://rdap.namebright.com/rdap/ -2700,DropCatch.com 941 LLC,Accredited,https://rdap.namebright.com/rdap/ -2701,DropCatch.com 942 LLC,Accredited,https://rdap.namebright.com/rdap/ -2702,DropCatch.com 943 LLC,Accredited,https://rdap.namebright.com/rdap/ -2703,DropCatch.com 944 LLC,Accredited,https://rdap.namebright.com/rdap/ -2704,DropCatch.com 945 LLC,Accredited,https://rdap.namebright.com/rdap/ -2705,DropCatch.com 946 LLC,Accredited,https://rdap.namebright.com/rdap/ -2706,DropCatch.com 947 LLC,Accredited,https://rdap.namebright.com/rdap/ -2707,DropCatch.com 948 LLC,Accredited,https://rdap.namebright.com/rdap/ -2708,DropCatch.com 949 LLC,Accredited,https://rdap.namebright.com/rdap/ -2709,DropCatch.com 950 LLC,Accredited,https://rdap.namebright.com/rdap/ -2710,DropCatch.com 951 LLC,Accredited,https://rdap.namebright.com/rdap/ -2711,DropCatch.com 952 LLC,Accredited,https://rdap.namebright.com/rdap/ -2712,DropCatch.com 953 LLC,Accredited,https://rdap.namebright.com/rdap/ -2713,DropCatch.com 954 LLC,Accredited,https://rdap.namebright.com/rdap/ -2714,DropCatch.com 955 LLC,Accredited,https://rdap.namebright.com/rdap/ -2715,DropCatch.com 956 LLC,Accredited,https://rdap.namebright.com/rdap/ -2716,DropCatch.com 957 LLC,Accredited,https://rdap.namebright.com/rdap/ -2717,DropCatch.com 958 LLC,Accredited,https://rdap.namebright.com/rdap/ -2718,DropCatch.com 959 LLC,Accredited,https://rdap.namebright.com/rdap/ -2719,DropCatch.com 960 LLC,Accredited,https://rdap.namebright.com/rdap/ -2720,DropCatch.com 961 LLC,Accredited,https://rdap.namebright.com/rdap/ -2721,DropCatch.com 962 LLC,Accredited,https://rdap.namebright.com/rdap/ -2722,DropCatch.com 963 LLC,Accredited,https://rdap.namebright.com/rdap/ -2723,DropCatch.com 964 LLC,Accredited,https://rdap.namebright.com/rdap/ -2724,DropCatch.com 965 LLC,Accredited,https://rdap.namebright.com/rdap/ -2725,DropCatch.com 966 LLC,Accredited,https://rdap.namebright.com/rdap/ -2726,DropCatch.com 967 LLC,Accredited,https://rdap.namebright.com/rdap/ -2727,DropCatch.com 968 LLC,Accredited,https://rdap.namebright.com/rdap/ -2728,DropCatch.com 969 LLC,Accredited,https://rdap.namebright.com/rdap/ -2729,DropCatch.com 970 LLC,Accredited,https://rdap.namebright.com/rdap/ -2730,DropCatch.com 971 LLC,Accredited,https://rdap.namebright.com/rdap/ -2731,DropCatch.com 972 LLC,Accredited,https://rdap.namebright.com/rdap/ -2732,DropCatch.com 973 LLC,Accredited,https://rdap.namebright.com/rdap/ -2733,DropCatch.com 974 LLC,Accredited,https://rdap.namebright.com/rdap/ -2734,DropCatch.com 975 LLC,Accredited,https://rdap.namebright.com/rdap/ -2735,DropCatch.com 976 LLC,Accredited,https://rdap.namebright.com/rdap/ -2736,DropCatch.com 977 LLC,Accredited,https://rdap.namebright.com/rdap/ -2737,DropCatch.com 978 LLC,Accredited,https://rdap.namebright.com/rdap/ -2738,DropCatch.com 979 LLC,Accredited,https://rdap.namebright.com/rdap/ -2739,DropCatch.com 980 LLC,Accredited,https://rdap.namebright.com/rdap/ -2740,DropCatch.com 981 LLC,Accredited,https://rdap.namebright.com/rdap/ -2741,DropCatch.com 982 LLC,Accredited,https://rdap.namebright.com/rdap/ -2742,DropCatch.com 983 LLC,Accredited,https://rdap.namebright.com/rdap/ -2743,DropCatch.com 984 LLC,Accredited,https://rdap.namebright.com/rdap/ -2744,DropCatch.com 985 LLC,Accredited,https://rdap.namebright.com/rdap/ -2745,DropCatch.com 986 LLC,Accredited,https://rdap.namebright.com/rdap/ -2746,DropCatch.com 987 LLC,Accredited,https://rdap.namebright.com/rdap/ -2747,DropCatch.com 988 LLC,Accredited,https://rdap.namebright.com/rdap/ -2748,DropCatch.com 989 LLC,Accredited,https://rdap.namebright.com/rdap/ -2749,DropCatch.com 990 LLC,Accredited,https://rdap.namebright.com/rdap/ -2750,DropCatch.com 991 LLC,Accredited,https://rdap.namebright.com/rdap/ -2751,DropCatch.com 992 LLC,Accredited,https://rdap.namebright.com/rdap/ -2752,DropCatch.com 993 LLC,Accredited,https://rdap.namebright.com/rdap/ -2753,DropCatch.com 994 LLC,Accredited,https://rdap.namebright.com/rdap/ -2754,DropCatch.com 995 LLC,Accredited,https://rdap.namebright.com/rdap/ -2755,DropCatch.com 996 LLC,Accredited,https://rdap.namebright.com/rdap/ -2756,DropCatch.com 997 LLC,Accredited,https://rdap.namebright.com/rdap/ -2757,DropCatch.com 998 LLC,Accredited,https://rdap.namebright.com/rdap/ -2758,DropCatch.com 999 LLC,Accredited,https://rdap.namebright.com/rdap/ -2759,DropCatch.com 1000 LLC,Accredited,https://rdap.namebright.com/rdap/ -2760,DropCatch.com 1001 LLC,Accredited,https://rdap.namebright.com/rdap/ -2761,DropCatch.com 1002 LLC,Accredited,https://rdap.namebright.com/rdap/ -2762,DropCatch.com 1003 LLC,Accredited,https://rdap.namebright.com/rdap/ -2763,DropCatch.com 1004 LLC,Accredited,https://rdap.namebright.com/rdap/ -2764,DropCatch.com 1005 LLC,Accredited,https://rdap.namebright.com/rdap/ -2765,DropCatch.com 1006 LLC,Accredited,https://rdap.namebright.com/rdap/ -2766,DropCatch.com 1007 LLC,Accredited,https://rdap.namebright.com/rdap/ -2767,DropCatch.com 1008 LLC,Accredited,https://rdap.namebright.com/rdap/ -2768,DropCatch.com 1009 LLC,Accredited,https://rdap.namebright.com/rdap/ -2769,DropCatch.com 1010 LLC,Accredited,https://rdap.namebright.com/rdap/ -2770,DropCatch.com 1011 LLC,Accredited,https://rdap.namebright.com/rdap/ -2771,DropCatch.com 1012 LLC,Accredited,https://rdap.namebright.com/rdap/ -2772,DropCatch.com 1013 LLC,Accredited,https://rdap.namebright.com/rdap/ -2773,DropCatch.com 1014 LLC,Accredited,https://rdap.namebright.com/rdap/ -2774,DropCatch.com 1015 LLC,Accredited,https://rdap.namebright.com/rdap/ -2775,DropCatch.com 1016 LLC,Accredited,https://rdap.namebright.com/rdap/ -2776,DropCatch.com 1017 LLC,Accredited,https://rdap.namebright.com/rdap/ -2777,DropCatch.com 1018 LLC,Accredited,https://rdap.namebright.com/rdap/ -2778,DropCatch.com 1019 LLC,Accredited,https://rdap.namebright.com/rdap/ -2779,DropCatch.com 1020 LLC,Accredited,https://rdap.namebright.com/rdap/ -2780,DropCatch.com 1021 LLC,Accredited,https://rdap.namebright.com/rdap/ -2781,DropCatch.com 1022 LLC,Accredited,https://rdap.namebright.com/rdap/ -2782,DropCatch.com 1023 LLC,Accredited,https://rdap.namebright.com/rdap/ -2783,DropCatch.com 1024 LLC,Accredited,https://rdap.namebright.com/rdap/ -2784,DropCatch.com 1025 LLC,Accredited,https://rdap.namebright.com/rdap/ -2785,DropCatch.com 1026 LLC,Accredited,https://rdap.namebright.com/rdap/ -2786,DropCatch.com 1027 LLC,Accredited,https://rdap.namebright.com/rdap/ -2787,DropCatch.com 1028 LLC,Accredited,https://rdap.namebright.com/rdap/ -2788,DropCatch.com 1029 LLC,Accredited,https://rdap.namebright.com/rdap/ -2789,DropCatch.com 1030 LLC,Accredited,https://rdap.namebright.com/rdap/ -2790,DropCatch.com 1031 LLC,Accredited,https://rdap.namebright.com/rdap/ -2791,DropCatch.com 1032 LLC,Accredited,https://rdap.namebright.com/rdap/ -2792,DropCatch.com 1033 LLC,Accredited,https://rdap.namebright.com/rdap/ -2793,DropCatch.com 1034 LLC,Accredited,https://rdap.namebright.com/rdap/ -2794,DropCatch.com 1035 LLC,Accredited,https://rdap.namebright.com/rdap/ -2795,DropCatch.com 1036 LLC,Accredited,https://rdap.namebright.com/rdap/ -2796,DropCatch.com 1037 LLC,Accredited,https://rdap.namebright.com/rdap/ -2797,DropCatch.com 1038 LLC,Accredited,https://rdap.namebright.com/rdap/ -2798,DropCatch.com 1039 LLC,Accredited,https://rdap.namebright.com/rdap/ -2799,DropCatch.com 1040 LLC,Accredited,https://rdap.namebright.com/rdap/ -2800,DropCatch.com 1041 LLC,Accredited,https://rdap.namebright.com/rdap/ -2801,DropCatch.com 1042 LLC,Accredited,https://rdap.namebright.com/rdap/ -2802,DropCatch.com 1043 LLC,Accredited,https://rdap.namebright.com/rdap/ -2803,DropCatch.com 1044 LLC,Accredited,https://rdap.namebright.com/rdap/ -2804,DropCatch.com 1045 LLC,Accredited,https://rdap.namebright.com/rdap/ -2805,"Zhengzhou Century Connect Electronic Technology Development Co., Ltd",Accredited,https://rdap.59.cn/rdap/ -2806,All Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2807,Backstop Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2808,Best Drop Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2809,Blue Angel Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2810,Bounce Pass Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2811,Catch Deleting Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2812,Catch Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2813,Chipshot Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2814,Circle of Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2815,Copper Domain Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2816,Coral Reef Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2817,Curveball Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2818,Deep Sea Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2819,Deep Water Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2820,Deleting Name Zone LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2821,Domain Bazaar LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2822,Domain Gold Zone LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2823,Domain Grabber LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2824,Domain Landing Zone LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2825,Domain Pickup LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2826,Domain Secure LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2827,Domain Source LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2828,Domain Stopover LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2829,Domain Success LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2830,Domaincatcher LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2831,Domaincircle LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2832,Domaindrop LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2833,Domainer Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2834,Domainplace LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2835,Domains Etc LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2836,Domains Express LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2837,Domainshop LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2838,Domainsnapper LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2839,Draftpick Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2840,Drop Catch Mining LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2841,Dropcatch Auction LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2842,Dropcatch Landing Spot LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2843,Dropcatch Marketplace LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2844,Dropcatching Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2845,Exclusive Domain Find LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2846,Fastball Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2847,Firstround Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2848,Free Drop Zone LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2849,Freefall Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2850,Gold Domain Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2851,Goldenfind Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2852,Goldmine Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2853,Goto Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2854,Hanging Curve Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2855,Iconicnames LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2856,Jumpshot Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2857,Layup Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2858,Long Drive Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2859,Millennial Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2860,Meganames LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2861,Name Connection Area LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2862,Name Connection Spot LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2863,Name Find Source LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2864,Name Icon LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2865,Namecatch LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2866,Namecatch Zone LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2867,Namegrab LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2868,Names Express LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2869,Names On The Drop LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2870,Names Stop Here LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2871,Namesaplenty LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2872,Namesnap LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2873,NameSnapper LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2874,Namesource LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2875,Namestop LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2876,Namewinner LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2877,Rare Gem Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2878,Secondround Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2879,Sharkweek Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2880,Silver Domain Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2881,Slamdunk Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2882,Slow Motion Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2883,Slow Putt Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2884,Snag Your Name LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2885,Snapsource LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2886,Sterling Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2887,Swordfish Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2888,Targeted Drop Catch LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2889,The Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2890,Thirdroundnames LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2891,Threepoint Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2892,Top Level Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2893,Top Pick Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2894,Top Shelf Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2895,Top Tier Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2896,Touchdown Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2897,Treasure Trove Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2898,Turbonames LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2899,Victorynames LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2900,Wide Left Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2901,Wide Right Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2902,Win Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2903,Your Domain LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2904,Zinc Domain Names LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2905,Zone of Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -2906,Protocol Internet Technology Limited T/A Hosting Ireland,Accredited,https://rdapserver.net/ -2907,Zhong Yu Network Technology Company Limited,Terminated, -2908,"Beijing HuaRui Wireless Technology Co., Ltd",Accredited,https://rdap.rntd.cn/rdap/ -2909,"PierX, Inc",Terminated, -2910,Beijing Brandma International Networking Technology Ltd.,Accredited,https://rdap.brandcloud.cn/ -2911,"Lightscend Co.,Ltd.",Accredited,https://rdap.rrpproxy.net/ -2913,"Dominion Domains, LLC",Accredited,https://rdap.myorderbox.com/ -2915,"Xiamen Xin click Network Group Co.,Ltd",Terminated, -2916,"Hangzhou Midaizi Network Co., Ltd.",Accredited, -2917,Aiming Limited,Accredited,https://rdap.22.cn/ -2918,NetZone AG,Accredited,https://rdap.netzone.ch/ -2919,"Camelot 1, LLC",Terminated, -2920,"Camelot 2, LLC",Terminated, -2921,"Camelot 3, LLC",Terminated, -2922,"Camelot 4, LLC",Terminated, -2923,"Camelot 5, LLC",Terminated, -2924,"Camelot 6, LLC",Terminated, -2925,"Camelot 7, LLC",Terminated, -2926,"Camelot 8, LLC",Terminated, -2927,"Camelot 9, LLC",Terminated, -2928,"Camelot 10, LLC",Terminated, -2929,"Camelot 11, LLC",Terminated, -2930,"Camelot 12, LLC",Terminated, -2931,"Camelot 13, LLC",Terminated, -2932,"Camelot 14, LLC",Terminated, -2933,"Camelot 15, LLC",Terminated, -2934,"Camelot 16, LLC",Terminated, -2935,"Camelot 17, LLC",Terminated, -2936,"Camelot 18, LLC",Terminated, -2937,"Camelot 19, LLC",Terminated, -2938,"Camelot 20, LLC",Terminated, -2939,"Camelot 21, LLC",Terminated, -2940,"Camelot 22, LLC",Terminated, -2941,"Camelot 23, LLC",Terminated, -2942,"Camelot 24, LLC",Terminated, -2943,"Camelot 25, LLC",Terminated, -2944,"Camelot 26, LLC",Terminated, -2945,"Camelot 27, LLC",Terminated, -2946,"Camelot 28, LLC",Terminated, -2947,"Camelot 29, LLC",Terminated, -2948,"Camelot 30, LLC",Terminated, -2949,"Camelot 31, LLC",Terminated, -2950,"Camelot 32, LLC",Terminated, -2951,"Camelot 33, LLC",Terminated, -2952,"Camelot 34, LLC",Terminated, -2953,"Camelot 35, LLC",Terminated, -2954,"Camelot 36, LLC",Terminated, -2955,"Camelot 37, LLC",Terminated, -2956,"Camelot 38, LLC",Terminated, -2957,"Camelot 39, LLC",Terminated, -2958,"Camelot 40, LLC",Terminated, -2959,"Camelot 41, LLC",Terminated, -2960,"Camelot 42 888, LLC",Terminated, -2961,"Camelot 43, LLC",Terminated, -2962,"Camelot 44, LLC",Terminated, -2963,"Camelot 45, LLC",Terminated, -2964,"Camelot 46, LLC",Terminated, -2965,"Camelot 47, LLC",Terminated, -2966,"Camelot 48, LLC",Terminated, -2967,"Camelot 49, LLC",Terminated, -2968,"Camelot 50, LLC",Terminated, -2969,"Camelot 51, LLC",Terminated, -2970,"Camelot 52, LLC",Terminated, -2971,"Camelot 53, LLC",Terminated, -2972,"Camelot 54, LLC",Terminated, -2973,"Camelot 55, LLC",Terminated, -2974,"Camelot 56, LLC",Terminated, -2975,"Camelot 57, LLC",Terminated, -2976,"Camelot 58, LLC",Terminated, -2977,"Camelot 59, LLC",Terminated, -2978,"Camelot 60, LLC",Terminated, -2979,"Camelot 61, LLC",Terminated, -2980,"Camelot 62, LLC",Terminated, -2981,"Camelot 63, LLC",Terminated, -2982,"Camelot 64, LLC",Terminated, -2983,"Camelot 65, LLC",Terminated, -2984,"Camelot 66, LLC",Terminated, -2985,"Camelot 67, LLC",Terminated, -2986,"Camelot 68, LLC",Terminated, -2987,"Camelot 69, LLC",Terminated, -2988,"Camelot 70, LLC",Terminated, -2989,"Camelot 71, LLC",Terminated, -2990,"Camelot 72, LLC",Terminated, -2991,"Camelot 73, LLC",Terminated, -2992,"Camelot 74, LLC",Terminated, -2993,"Camelot 75, LLC",Terminated, -2994,"Camelot 76, LLC",Terminated, -2995,"Camelot 77, LLC",Terminated, -2996,"Camelot 78, LLC",Terminated, -2997,"Camelot 79, LLC",Terminated, -2998,"Camelot 80, LLC",Terminated, -2999,"Camelot 81, LLC",Terminated, -3000,"Camelot 82, LLC",Terminated, -3001,"Camelot 83, LLC",Terminated, -3002,"Camelot 84, LLC",Terminated, -3003,"Camelot 85, LLC",Terminated, -3004,"Camelot 86, LLC",Terminated, -3005,"Camelot 87, LLC",Terminated, -3006,"Camelot 88, LLC",Terminated, -3007,"Camelot 89, LLC",Terminated, -3008,"Camelot 90, LLC",Terminated, -3009,"Camelot 91, LLC",Terminated, -3010,"Camelot 92, LLC",Terminated, -3011,"Camelot 93, LLC",Terminated, -3012,"Camelot 94, LLC",Terminated, -3013,"Camelot 95, LLC",Terminated, -3014,"Camelot 96, LLC",Terminated, -3015,"Camelot 97, LLC",Terminated, -3016,"Camelot 98, LLC",Terminated, -3017,"Camelot 99, LLC",Terminated, -3018,"Camelot 100, LLC",Terminated, -3019,"Everest 1, LLC",Terminated, -3020,"Everest 2, LLC",Terminated, -3021,"Everest 3, LLC",Terminated, -3022,"Everest 4, LLC",Terminated, -3023,"Everest 5, LLC",Terminated, -3024,"Everest 6, LLC",Terminated, -3025,"Everest 7, LLC",Terminated, -3026,"Everest 8, LLC",Terminated, -3027,"Everest 9, LLC",Terminated, -3028,"Everest 10, LLC",Terminated, -3029,"Everest 11, LLC",Terminated, -3030,"Everest 12, LLC",Terminated, -3031,"Everest 13, LLC",Terminated, -3032,"Everest 14, LLC",Terminated, -3033,"Everest 15, LLC",Terminated, -3034,"Everest 16, LLC",Terminated, -3035,"Everest 17, LLC",Terminated, -3036,"Everest 18, LLC",Terminated, -3037,"Everest 19, LLC",Terminated, -3038,"Everest 20, LLC",Terminated, -3039,"Everest 21, LLC",Terminated, -3040,"Everest 22, LLC",Terminated, -3041,"Everest 23, LLC",Terminated, -3042,"Everest 24, LLC",Terminated, -3043,"Everest 25, LLC",Terminated, -3044,"Everest 26, LLC",Terminated, -3045,"Everest 27, LLC",Terminated, -3046,"Everest 28, LLC",Terminated, -3047,"Everest 29, LLC",Terminated, -3048,"Everest 30, LLC",Terminated, -3049,"Everest 31, LLC",Terminated, -3050,"Everest 32, LLC",Terminated, -3051,"Everest 33, LLC",Terminated, -3052,"Everest 34, LLC",Terminated, -3053,"Everest 35, LLC",Terminated, -3054,"Everest 36, LLC",Terminated, -3055,"Everest 37, LLC",Terminated, -3056,"Everest 38, LLC",Terminated, -3057,"Everest 39, LLC",Terminated, -3058,"Everest 40, LLC",Terminated, -3059,"Everest 41, LLC",Terminated, -3060,"Everest 42, LLC",Terminated, -3061,"Everest 43, LLC",Terminated, -3062,"Everest 44, LLC",Terminated, -3063,"Everest 45, LLC",Terminated, -3064,"Everest 46, LLC",Terminated, -3065,"Everest 47, LLC",Terminated, -3066,"Everest 48, LLC",Terminated, -3067,"Everest 49, LLC",Terminated, -3068,"Everest 50, LLC",Terminated, -3069,"Everest 51, LLC",Terminated, -3070,"Everest 52, LLC",Terminated, -3071,"Everest 53, LLC",Terminated, -3072,"Everest 54, LLC",Terminated, -3073,"Everest 55, LLC",Terminated, -3074,"Everest 56, LLC",Terminated, -3075,"Everest 57, LLC",Terminated, -3076,"Everest 58, LLC",Terminated, -3077,"Everest 59, LLC",Terminated, -3078,"Everest 60, LLC",Terminated, -3079,"Everest 61, LLC",Terminated, -3080,"Everest 62, LLC",Terminated, -3081,"Everest 63, LLC",Terminated, -3082,"Everest 64, LLC",Terminated, -3083,"Everest 65, LLC",Terminated, -3084,"Everest 66, LLC",Terminated, -3085,"Everest 67, LLC",Terminated, -3086,"Everest 68, LLC",Terminated, -3087,"Everest 69, LLC",Terminated, -3088,"Everest 70, LLC",Terminated, -3089,"Everest 71, LLC",Terminated, -3090,"Everest 72, LLC",Terminated, -3091,"Everest 73, LLC",Terminated, -3092,"Everest 74, LLC",Terminated, -3093,"Everest 75, LLC",Terminated, -3094,"Everest 76, LLC",Terminated, -3095,"Everest 77, LLC",Terminated, -3096,"Everest 78, LLC",Terminated, -3097,"Everest 79, LLC",Terminated, -3098,"Everest 80, LLC",Terminated, -3099,"Everest 81, LLC",Terminated, -3100,"Everest 82, LLC",Terminated, -3101,"Everest 83, LLC",Terminated, -3102,"Everest 84, LLC",Terminated, -3103,"Everest 85, LLC",Terminated, -3104,"Everest 86, LLC",Terminated, -3105,"Everest 87, LLC",Terminated, -3106,"Everest 88, LLC",Terminated, -3107,"Everest 89, LLC",Terminated, -3108,"Everest 90, LLC",Terminated, -3109,"Everest 91, LLC",Terminated, -3110,"Everest 92, LLC",Terminated, -3111,"Everest 93, LLC",Terminated, -3112,"Everest 94, LLC",Terminated, -3113,"Everest 95, LLC",Terminated, -3114,"Everest 96, LLC",Terminated, -3115,"Everest 97, LLC",Terminated, -3116,"Everest 98, LLC",Terminated, -3117,"Everest 99, LLC",Terminated, -3118,"Everest 100, LLC",Terminated, -3119,"Nimzo 1, LLC",Terminated, -3120,"Nimzo 2, LLC",Terminated, -3121,"Nimzo 3, LLC",Terminated, -3122,"Nimzo 4, LLC",Terminated, -3123,"Nimzo 5, LLC",Terminated, -3124,"Nimzo 6, LLC",Terminated, -3125,"Nimzo 7, LLC",Terminated, -3126,"Nimzo 8, LLC",Terminated, -3127,"Nimzo 9, LLC",Terminated, -3128,"Nimzo 10, LLC",Terminated, -3129,"Nimzo 11, LLC",Terminated, -3130,"Nimzo 12, LLC",Terminated, -3131,"Nimzo 13, LLC",Terminated, -3132,"Nimzo 14, LLC",Terminated, -3133,"Nimzo 15, LLC",Terminated, -3134,"Nimzo 16, LLC",Terminated, -3135,"Nimzo 17, LLC",Terminated, -3136,"Nimzo 18, LLC",Terminated, -3137,"Nimzo 19, LLC",Terminated, -3138,"Nimzo 20, LLC",Terminated, -3139,"Nimzo 21, LLC",Terminated, -3140,"Nimzo 22, LLC",Terminated, -3141,"Nimzo 23, LLC",Terminated, -3142,"Nimzo 24, LLC",Terminated, -3143,"Nimzo 25, LLC",Terminated, -3144,"Nimzo 26, LLC",Terminated, -3145,"Nimzo 27, LLC",Terminated, -3146,"Nimzo 28, LLC",Terminated, -3147,"Nimzo 29, LLC",Terminated, -3148,"Nimzo 30, LLC",Terminated, -3149,"Nimzo 31, LLC",Terminated, -3150,"Nimzo 32, LLC",Terminated, -3151,"Nimzo 33, LLC",Terminated, -3152,"Nimzo 34, LLC",Terminated, -3153,"Nimzo 35, LLC",Terminated, -3154,"Nimzo 36, LLC",Terminated, -3155,"Nimzo 37, LLC",Terminated, -3156,"Nimzo 38, LLC",Terminated, -3157,"Nimzo 39, LLC",Terminated, -3158,"Nimzo 40, LLC",Terminated, -3159,"Nimzo 41, LLC",Terminated, -3160,"Nimzo 42, LLC",Terminated, -3161,"Nimzo 43, LLC",Terminated, -3162,"Nimzo 44, LLC",Terminated, -3163,"Nimzo 45, LLC",Terminated, -3164,"Nimzo 46, LLC",Terminated, -3165,"Nimzo 47, LLC",Terminated, -3166,"Nimzo 48, LLC",Terminated, -3167,"Nimzo 49, LLC",Terminated, -3168,"Nimzo 50, LLC",Terminated, -3169,"Nimzo 51, LLC",Terminated, -3170,"Nimzo 52, LLC",Terminated, -3171,"Nimzo 53, LLC",Terminated, -3172,"Nimzo 54, LLC",Terminated, -3173,"Nimzo 55, LLC",Terminated, -3174,"Nimzo 56, LLC",Terminated, -3175,"Nimzo 57, LLC",Terminated, -3176,"Nimzo 58, LLC",Terminated, -3177,"Nimzo 59, LLC",Terminated, -3178,"Nimzo 60, LLC",Terminated, -3179,"Nimzo 61, LLC",Terminated, -3180,"Nimzo 62, LLC",Terminated, -3181,"Nimzo 63, LLC",Terminated, -3182,"Nimzo 64, LLC",Terminated, -3183,"Nimzo 65, LLC",Terminated, -3184,"Nimzo 66, LLC",Terminated, -3185,"Nimzo 67, LLC",Terminated, -3186,"Nimzo 68, LLC",Terminated, -3187,"Nimzo 69, LLC",Terminated, -3188,"Nimzo 70, LLC",Terminated, -3189,"Nimzo 71, LLC",Terminated, -3190,"Nimzo 72, LLC",Terminated, -3191,"Nimzo 73, LLC",Terminated, -3192,"Nimzo 74, LLC",Terminated, -3193,"Nimzo 75, LLC",Terminated, -3194,"Nimzo 76, LLC",Terminated, -3195,"Nimzo 77, LLC",Terminated, -3196,"Nimzo 78, LLC",Terminated, -3197,"Nimzo 79, LLC",Terminated, -3198,"Nimzo 80, LLC",Terminated, -3199,"Nimzo 81, LLC",Terminated, -3200,"Nimzo 82, LLC",Terminated, -3201,"Nimzo 83, LLC",Terminated, -3202,"Nimzo 84, LLC",Terminated, -3203,"Nimzo 85, LLC",Terminated, -3204,"Nimzo 86, LLC",Terminated, -3205,"Nimzo 87, LLC",Terminated, -3206,"Nimzo 88, LLC",Terminated, -3207,"Nimzo 89, LLC",Terminated, -3208,"Nimzo 90, LLC",Terminated, -3209,"Nimzo 91, LLC",Terminated, -3210,"Nimzo 92, LLC",Terminated, -3211,"Nimzo 93, LLC",Terminated, -3212,"Nimzo 94, LLC",Terminated, -3213,"Nimzo 95, LLC",Terminated, -3214,"Nimzo 96, LLC",Terminated, -3215,"Nimzo 97, LLC",Terminated, -3216,"Nimzo 98, LLC",Terminated, -3217,"Nimzo 99, LLC",Terminated, -3218,"Nimzo 100, LLC",Terminated, -3219,"Zhengzhou Business Technology Co., Ltd.",Accredited,https://rdap.reg.cn/rdap/ -3220,Swizzonic Ltd.,Terminated, -3221,Overcasts Limited,Accredited,https://rdap.mayiwww.com/rdap/ -3222,Domainipr Limited,Accredited,https://rdap.longming.com/rdap/ -3223,"Xiamen Booksir Qiyoutong Technology Co., Ltd.",Accredited,https://whois.micang.com/ -3224,Registrator Domenov LLC,Accredited,https://rdap.mastername.ru/ -3225,"Knet Registrar Co., Ltd",Accredited,https://rdap.knetreg.cn/ -3226,PE Overseas Limited,Accredited,https://rdapserver.net/ -3227,EJEE Group Beijing Limited,Accredited,https://rdap.domain.cn/ -3228,Jiangxi Nanshi Information Service Company Limited,Terminated, -3229,Aboss Technology Limited,Terminated, -3230,Domraider SAS,Accredited,https://rdap.domraider.com/ -3231,"HLJ E-Link Network Co., Ltd",Terminated, -3232,"Xiamen Yuwang Technology Co., LTD",Accredited,https://rdap.yuwang.com/ -3233,"Beijing Baidu Netcom Science Technology Co., Ltd.",Accredited,https://rdap.baidu.com/rdap/ -3234,iNET CORPORATION,Accredited,https://rdap.inet.vn/ -3235,"Focus IP, Inc. dba Tracer",Accredited,https://rdap.tracer.ai/ -3236,"RegistrarTrust, LLC",Accredited,https://rdap.tracer.ai/ -3237,"RegistrarSafe, LLC",Accredited,https://rdap.registrarsafe.com/ -3238,Rabbitsfoot.com LLC d/b/a Oxygen.nyc,Accredited,https://whois.oxygen.nyc/ -3240,Infomaniak Network SA,Accredited,https://rdap.infomaniak.com/ -3241,"Xiamen Mimei Technology Co., Ltd.",Terminated, -3242,"WingNames Co., Ltd.",Accredited,https://rdap.rrpproxy.net/ -3243,"Sky Clear Co., Ltd.",Accredited,https://rdap.rrpproxy.net/ -3244,"Dai Nippon Joho System Co., Ltd.",Accredited,https://rdap.rrpproxy.net/ -3245,Arcanes Technologies,Accredited,https://rdapserver.net -3246,Reliable Software,Accredited,https://rdap.hoster.by/ -3247,DDD TECHNOLOGY PTE. LTD.,Accredited, -3248,"Marine Domains, LLC",Terminated, -3250,Host SpA,Terminated, -3251,"Shenzhen Digital Assets Exchange Information Technology Co., Ltd",Terminated, -3252,DOMAIN ORIENTAL LIMITED,Accredited,https://rdap.domainoriental.com/rdap/ -3253,"DigitalCandy, Inc.",Accredited,https://rdap.digitalcandy.com/ -3254,CNOBIN INFORMATION TECHNOLOGY LIMITED,Accredited,https://rdap.cnobin.com/rdap/ -3255,DropCatch.com 1046 LLC,Accredited,https://rdap.namebright.com/rdap/ -3256,DropCatch.com 1047 LLC,Accredited,https://rdap.namebright.com/rdap/ -3257,DropCatch.com 1048 LLC,Accredited,https://rdap.namebright.com/rdap/ -3258,DropCatch.com 1049 LLC,Accredited,https://rdap.namebright.com/rdap/ -3259,DropCatch.com 1050 LLC,Accredited,https://rdap.namebright.com/rdap/ -3260,DropCatch.com 1051 LLC,Accredited,https://rdap.namebright.com/rdap/ -3261,DropCatch.com 1052 LLC,Accredited,https://rdap.namebright.com/rdap/ -3262,DropCatch.com 1053 LLC,Accredited,https://rdap.namebright.com/rdap/ -3263,DropCatch.com 1054 LLC,Accredited,https://rdap.namebright.com/rdap/ -3264,DropCatch.com 1055 LLC,Accredited,https://rdap.namebright.com/rdap/ -3265,DropCatch.com 1056 LLC,Accredited,https://rdap.namebright.com/rdap/ -3266,DropCatch.com 1057 LLC,Accredited,https://rdap.namebright.com/rdap/ -3267,DropCatch.com 1058 LLC,Accredited,https://rdap.namebright.com/rdap/ -3268,DropCatch.com 1059 LLC,Accredited,https://rdap.namebright.com/rdap/ -3269,DropCatch.com 1060 LLC,Accredited,https://rdap.namebright.com/rdap/ -3270,DropCatch.com 1061 LLC,Accredited,https://rdap.namebright.com/rdap/ -3271,DropCatch.com 1062 LLC,Accredited,https://rdap.namebright.com/rdap/ -3272,DropCatch.com 1063 LLC,Accredited,https://rdap.namebright.com/rdap/ -3273,DropCatch.com 1064 LLC,Accredited,https://rdap.namebright.com/rdap/ -3274,DropCatch.com 1065 LLC,Accredited,https://rdap.namebright.com/rdap/ -3275,DropCatch.com 1066 LLC,Accredited,https://rdap.namebright.com/rdap/ -3276,DropCatch.com 1067 LLC,Accredited,https://rdap.namebright.com/rdap/ -3277,DropCatch.com 1068 LLC,Accredited,https://rdap.namebright.com/rdap/ -3278,DropCatch.com 1069 LLC,Accredited,https://rdap.namebright.com/rdap/ -3279,DropCatch.com 1070 LLC,Accredited,https://rdap.namebright.com/rdap/ -3280,DropCatch.com 1071 LLC,Accredited,https://rdap.namebright.com/rdap/ -3281,DropCatch.com 1072 LLC,Accredited,https://rdap.namebright.com/rdap/ -3282,DropCatch.com 1073 LLC,Accredited,https://rdap.namebright.com/rdap/ -3283,DropCatch.com 1074 LLC,Accredited,https://rdap.namebright.com/rdap/ -3284,DropCatch.com 1075 LLC,Accredited,https://rdap.namebright.com/rdap/ -3285,DropCatch.com 1076 LLC,Accredited,https://rdap.namebright.com/rdap/ -3286,DropCatch.com 1077 LLC,Accredited,https://rdap.namebright.com/rdap/ -3287,DropCatch.com 1078 LLC,Accredited,https://rdap.namebright.com/rdap/ -3288,DropCatch.com 1079 LLC,Accredited,https://rdap.namebright.com/rdap/ -3289,DropCatch.com 1080 LLC,Accredited,https://rdap.namebright.com/rdap/ -3290,DropCatch.com 1081 LLC,Accredited,https://rdap.namebright.com/rdap/ -3291,DropCatch.com 1082 LLC,Accredited,https://rdap.namebright.com/rdap/ -3292,DropCatch.com 1083 LLC,Accredited,https://rdap.namebright.com/rdap/ -3293,DropCatch.com 1084 LLC,Accredited,https://rdap.namebright.com/rdap/ -3294,DropCatch.com 1085 LLC,Accredited,https://rdap.namebright.com/rdap/ -3295,DropCatch.com 1086 LLC,Accredited,https://rdap.namebright.com/rdap/ -3296,DropCatch.com 1087 LLC,Accredited,https://rdap.namebright.com/rdap/ -3297,DropCatch.com 1088 LLC,Accredited,https://rdap.namebright.com/rdap/ -3298,DropCatch.com 1089 LLC,Accredited,https://rdap.namebright.com/rdap/ -3299,DropCatch.com 1090 LLC,Accredited,https://rdap.namebright.com/rdap/ -3300,DropCatch.com 1091 LLC,Accredited,https://rdap.namebright.com/rdap/ -3301,DropCatch.com 1092 LLC,Accredited,https://rdap.namebright.com/rdap/ -3302,DropCatch.com 1093 LLC,Accredited,https://rdap.namebright.com/rdap/ -3303,DropCatch.com 1094 LLC,Accredited,https://rdap.namebright.com/rdap/ -3304,DropCatch.com 1095 LLC,Accredited,https://rdap.namebright.com/rdap/ -3305,DropCatch.com 1096 LLC,Accredited,https://rdap.namebright.com/rdap/ -3306,DropCatch.com 1097 LLC,Accredited,https://rdap.namebright.com/rdap/ -3307,DropCatch.com 1098 LLC,Accredited,https://rdap.namebright.com/rdap/ -3308,DropCatch.com 1099 LLC,Accredited,https://rdap.namebright.com/rdap/ -3309,DropCatch.com 1100 LLC,Accredited,https://rdap.namebright.com/rdap/ -3310,DropCatch.com 1101 LLC,Accredited,https://rdap.namebright.com/rdap/ -3311,DropCatch.com 1102 LLC,Accredited,https://rdap.namebright.com/rdap/ -3312,DropCatch.com 1103 LLC,Accredited,https://rdap.namebright.com/rdap/ -3313,DropCatch.com 1104 LLC,Accredited,https://rdap.namebright.com/rdap/ -3314,DropCatch.com 1105 LLC,Accredited,https://rdap.namebright.com/rdap/ -3315,DropCatch.com 1106 LLC,Accredited,https://rdap.namebright.com/rdap/ -3316,DropCatch.com 1107 LLC,Accredited,https://rdap.namebright.com/rdap/ -3317,DropCatch.com 1108 LLC,Accredited,https://rdap.namebright.com/rdap/ -3318,DropCatch.com 1109 LLC,Accredited,https://rdap.namebright.com/rdap/ -3319,DropCatch.com 1110 LLC,Accredited,https://rdap.namebright.com/rdap/ -3320,DropCatch.com 1111 LLC,Accredited,https://rdap.namebright.com/rdap/ -3321,DropCatch.com 1112 LLC,Accredited,https://rdap.namebright.com/rdap/ -3322,DropCatch.com 1113 LLC,Accredited,https://rdap.namebright.com/rdap/ -3323,DropCatch.com 1114 LLC,Accredited,https://rdap.namebright.com/rdap/ -3324,DropCatch.com 1115 LLC,Accredited,https://rdap.namebright.com/rdap/ -3325,DropCatch.com 1116 LLC,Accredited,https://rdap.namebright.com/rdap/ -3326,DropCatch.com 1117 LLC,Accredited,https://rdap.namebright.com/rdap/ -3327,DropCatch.com 1118 LLC,Accredited,https://rdap.namebright.com/rdap/ -3328,DropCatch.com 1119 LLC,Accredited,https://rdap.namebright.com/rdap/ -3329,DropCatch.com 1120 LLC,Accredited,https://rdap.namebright.com/rdap/ -3330,DropCatch.com 1121 LLC,Accredited,https://rdap.namebright.com/rdap/ -3331,DropCatch.com 1122 LLC,Accredited,https://rdap.namebright.com/rdap/ -3332,DropCatch.com 1123 LLC,Accredited,https://rdap.namebright.com/rdap/ -3333,DropCatch.com 1124 LLC,Accredited,https://rdap.namebright.com/rdap/ -3334,DropCatch.com 1125 LLC,Accredited,https://rdap.namebright.com/rdap/ -3335,DropCatch.com 1126 LLC,Accredited,https://rdap.namebright.com/rdap/ -3336,DropCatch.com 1127 LLC,Accredited,https://rdap.namebright.com/rdap/ -3337,DropCatch.com 1128 LLC,Accredited,https://rdap.namebright.com/rdap/ -3338,DropCatch.com 1129 LLC,Accredited,https://rdap.namebright.com/rdap/ -3339,DropCatch.com 1130 LLC,Accredited,https://rdap.namebright.com/rdap/ -3340,DropCatch.com 1131 LLC,Accredited,https://rdap.namebright.com/rdap/ -3341,DropCatch.com 1132 LLC,Accredited,https://rdap.namebright.com/rdap/ -3342,DropCatch.com 1133 LLC,Accredited,https://rdap.namebright.com/rdap/ -3343,DropCatch.com 1134 LLC,Accredited,https://rdap.namebright.com/rdap/ -3344,DropCatch.com 1135 LLC,Accredited,https://rdap.namebright.com/rdap/ -3345,DropCatch.com 1136 LLC,Accredited,https://rdap.namebright.com/rdap/ -3346,DropCatch.com 1137 LLC,Accredited,https://rdap.namebright.com/rdap/ -3347,DropCatch.com 1138 LLC,Accredited,https://rdap.namebright.com/rdap/ -3348,DropCatch.com 1139 LLC,Accredited,https://rdap.namebright.com/rdap/ -3349,DropCatch.com 1140 LLC,Accredited,https://rdap.namebright.com/rdap/ -3350,DropCatch.com 1141 LLC,Accredited,https://rdap.namebright.com/rdap/ -3351,DropCatch.com 1142 LLC,Accredited,https://rdap.namebright.com/rdap/ -3352,DropCatch.com 1143 LLC,Accredited,https://rdap.namebright.com/rdap/ -3353,DropCatch.com 1144 LLC,Accredited,https://rdap.namebright.com/rdap/ -3354,DropCatch.com 1145 LLC,Accredited,https://rdap.namebright.com/rdap/ -3355,DropCatch.com 1146 LLC,Accredited,https://rdap.namebright.com/rdap/ -3356,DropCatch.com 1147 LLC,Accredited,https://rdap.namebright.com/rdap/ -3357,DropCatch.com 1148 LLC,Accredited,https://rdap.namebright.com/rdap/ -3358,DropCatch.com 1149 LLC,Accredited,https://rdap.namebright.com/rdap/ -3359,DropCatch.com 1150 LLC,Accredited,https://rdap.namebright.com/rdap/ -3360,DropCatch.com 1151 LLC,Accredited,https://rdap.namebright.com/rdap/ -3361,DropCatch.com 1152 LLC,Accredited,https://rdap.namebright.com/rdap/ -3362,DropCatch.com 1153 LLC,Accredited,https://rdap.namebright.com/rdap/ -3363,DropCatch.com 1154 LLC,Accredited,https://rdap.namebright.com/rdap/ -3364,DropCatch.com 1155 LLC,Accredited,https://rdap.namebright.com/rdap/ -3365,DropCatch.com 1156 LLC,Accredited,https://rdap.namebright.com/rdap/ -3366,DropCatch.com 1157 LLC,Accredited,https://rdap.namebright.com/rdap/ -3367,DropCatch.com 1158 LLC,Accredited,https://rdap.namebright.com/rdap/ -3368,DropCatch.com 1159 LLC,Accredited,https://rdap.namebright.com/rdap/ -3369,DropCatch.com 1160 LLC,Accredited,https://rdap.namebright.com/rdap/ -3370,DropCatch.com 1161 LLC,Accredited,https://rdap.namebright.com/rdap/ -3371,DropCatch.com 1162 LLC,Accredited,https://rdap.namebright.com/rdap/ -3372,DropCatch.com 1163 LLC,Accredited,https://rdap.namebright.com/rdap/ -3373,DropCatch.com 1164 LLC,Accredited,https://rdap.namebright.com/rdap/ -3374,DropCatch.com 1165 LLC,Accredited,https://rdap.namebright.com/rdap/ -3375,DropCatch.com 1166 LLC,Accredited,https://rdap.namebright.com/rdap/ -3376,DropCatch.com 1167 LLC,Accredited,https://rdap.namebright.com/rdap/ -3377,DropCatch.com 1168 LLC,Accredited,https://rdap.namebright.com/rdap/ -3378,DropCatch.com 1169 LLC,Accredited,https://rdap.namebright.com/rdap/ -3379,DropCatch.com 1170 LLC,Accredited,https://rdap.namebright.com/rdap/ -3380,DropCatch.com 1171 LLC,Accredited,https://rdap.namebright.com/rdap/ -3381,DropCatch.com 1172 LLC,Accredited,https://rdap.namebright.com/rdap/ -3382,DropCatch.com 1173 LLC,Accredited,https://rdap.namebright.com/rdap/ -3383,DropCatch.com 1174 LLC,Accredited,https://rdap.namebright.com/rdap/ -3384,DropCatch.com 1175 LLC,Accredited,https://rdap.namebright.com/rdap/ -3385,DropCatch.com 1176 LLC,Accredited,https://rdap.namebright.com/rdap/ -3386,DropCatch.com 1177 LLC,Accredited,https://rdap.namebright.com/rdap/ -3387,DropCatch.com 1178 LLC,Accredited,https://rdap.namebright.com/rdap/ -3388,DropCatch.com 1179 LLC,Accredited,https://rdap.namebright.com/rdap/ -3389,DropCatch.com 1180 LLC,Accredited,https://rdap.namebright.com/rdap/ -3390,DropCatch.com 1181 LLC,Accredited,https://rdap.namebright.com/rdap/ -3391,DropCatch.com 1182 LLC,Accredited,https://rdap.namebright.com/rdap/ -3392,DropCatch.com 1183 LLC,Accredited,https://rdap.namebright.com/rdap/ -3393,DropCatch.com 1184 LLC,Accredited,https://rdap.namebright.com/rdap/ -3394,DropCatch.com 1185 LLC,Accredited,https://rdap.namebright.com/rdap/ -3395,DropCatch.com 1186 LLC,Accredited,https://rdap.namebright.com/rdap/ -3396,DropCatch.com 1187 LLC,Accredited,https://rdap.namebright.com/rdap/ -3397,DropCatch.com 1188 LLC,Accredited,https://rdap.namebright.com/rdap/ -3398,DropCatch.com 1189 LLC,Accredited,https://rdap.namebright.com/rdap/ -3399,DropCatch.com 1190 LLC,Accredited,https://rdap.namebright.com/rdap/ -3400,DropCatch.com 1191 LLC,Accredited,https://rdap.namebright.com/rdap/ -3401,DropCatch.com 1192 LLC,Accredited,https://rdap.namebright.com/rdap/ -3402,DropCatch.com 1193 LLC,Accredited,https://rdap.namebright.com/rdap/ -3403,DropCatch.com 1194 LLC,Accredited,https://rdap.namebright.com/rdap/ -3404,DropCatch.com 1195 LLC,Accredited,https://rdap.namebright.com/rdap/ -3405,DropCatch.com 1196 LLC,Accredited,https://rdap.namebright.com/rdap/ -3406,DropCatch.com 1197 LLC,Accredited,https://rdap.namebright.com/rdap/ -3407,DropCatch.com 1198 LLC,Accredited,https://rdap.namebright.com/rdap/ -3408,DropCatch.com 1199 LLC,Accredited,https://rdap.namebright.com/rdap/ -3409,DropCatch.com 1200 LLC,Accredited,https://rdap.namebright.com/rdap/ -3410,DropCatch.com 1201 LLC,Accredited,https://rdap.namebright.com/rdap/ -3411,DropCatch.com 1202 LLC,Accredited,https://rdap.namebright.com/rdap/ -3412,DropCatch.com 1203 LLC,Accredited,https://rdap.namebright.com/rdap/ -3413,DropCatch.com 1204 LLC,Accredited,https://rdap.namebright.com/rdap/ -3414,DropCatch.com 1205 LLC,Accredited,https://rdap.namebright.com/rdap/ -3415,DropCatch.com 1206 LLC,Accredited,https://rdap.namebright.com/rdap/ -3416,DropCatch.com 1207 LLC,Accredited,https://rdap.namebright.com/rdap/ -3417,DropCatch.com 1208 LLC,Accredited,https://rdap.namebright.com/rdap/ -3418,DropCatch.com 1209 LLC,Accredited,https://rdap.namebright.com/rdap/ -3419,DropCatch.com 1210 LLC,Accredited,https://rdap.namebright.com/rdap/ -3420,DropCatch.com 1211 LLC,Accredited,https://rdap.namebright.com/rdap/ -3421,DropCatch.com 1212 LLC,Accredited,https://rdap.namebright.com/rdap/ -3422,DropCatch.com 1213 LLC,Accredited,https://rdap.namebright.com/rdap/ -3423,DropCatch.com 1214 LLC,Accredited,https://rdap.namebright.com/rdap/ -3424,DropCatch.com 1215 LLC,Accredited,https://rdap.namebright.com/rdap/ -3425,DropCatch.com 1216 LLC,Accredited,https://rdap.namebright.com/rdap/ -3426,DropCatch.com 1217 LLC,Accredited,https://rdap.namebright.com/rdap/ -3427,DropCatch.com 1218 LLC,Accredited,https://rdap.namebright.com/rdap/ -3428,DropCatch.com 1219 LLC,Accredited,https://rdap.namebright.com/rdap/ -3429,DropCatch.com 1220 LLC,Accredited,https://rdap.namebright.com/rdap/ -3430,DropCatch.com 1221 LLC,Accredited,https://rdap.namebright.com/rdap/ -3431,DropCatch.com 1222 LLC,Accredited,https://rdap.namebright.com/rdap/ -3432,DropCatch.com 1223 LLC,Accredited,https://rdap.namebright.com/rdap/ -3433,DropCatch.com 1224 LLC,Accredited,https://rdap.namebright.com/rdap/ -3434,DropCatch.com 1225 LLC,Accredited,https://rdap.namebright.com/rdap/ -3435,DropCatch.com 1226 LLC,Accredited,https://rdap.namebright.com/rdap/ -3436,DropCatch.com 1227 LLC,Accredited,https://rdap.namebright.com/rdap/ -3437,DropCatch.com 1228 LLC,Accredited,https://rdap.namebright.com/rdap/ -3438,DropCatch.com 1229 LLC,Accredited,https://rdap.namebright.com/rdap/ -3439,DropCatch.com 1230 LLC,Accredited,https://rdap.namebright.com/rdap/ -3440,DropCatch.com 1231 LLC,Accredited,https://rdap.namebright.com/rdap/ -3441,DropCatch.com 1232 LLC,Accredited,https://rdap.namebright.com/rdap/ -3442,DropCatch.com 1233 LLC,Accredited,https://rdap.namebright.com/rdap/ -3443,DropCatch.com 1234 LLC,Accredited,https://rdap.namebright.com/rdap/ -3444,DropCatch.com 1235 LLC,Accredited,https://rdap.namebright.com/rdap/ -3445,DropCatch.com 1236 LLC,Accredited,https://rdap.namebright.com/rdap/ -3446,DropCatch.com 1237 LLC,Accredited,https://rdap.namebright.com/rdap/ -3447,DropCatch.com 1238 LLC,Accredited,https://rdap.namebright.com/rdap/ -3448,DropCatch.com 1239 LLC,Accredited,https://rdap.namebright.com/rdap/ -3449,DropCatch.com 1240 LLC,Accredited,https://rdap.namebright.com/rdap/ -3450,DropCatch.com 1241 LLC,Accredited,https://rdap.namebright.com/rdap/ -3451,DropCatch.com 1242 LLC,Accredited,https://rdap.namebright.com/rdap/ -3452,DropCatch.com 1243 LLC,Accredited,https://rdap.namebright.com/rdap/ -3453,DropCatch.com 1244 LLC,Accredited,https://rdap.namebright.com/rdap/ -3454,DropCatch.com 1245 LLC,Accredited,https://rdap.namebright.com/rdap/ -3455,DropCatch.com 1246 LLC,Accredited,https://rdap.namebright.com/rdap/ -3456,DropCatch.com 1247 LLC,Accredited,https://rdap.namebright.com/rdap/ -3457,DropCatch.com 1248 LLC,Accredited,https://rdap.namebright.com/rdap/ -3458,DropCatch.com 1249 LLC,Accredited,https://rdap.namebright.com/rdap/ -3459,DropCatch.com 1250 LLC,Accredited,https://rdap.namebright.com/rdap/ -3460,DropCatch.com 1251 LLC,Accredited,https://rdap.namebright.com/rdap/ -3461,DropCatch.com 1252 LLC,Accredited,https://rdap.namebright.com/rdap/ -3462,DropCatch.com 1253 LLC,Accredited,https://rdap.namebright.com/rdap/ -3463,DropCatch.com 1254 LLC,Accredited,https://rdap.namebright.com/rdap/ -3464,DropCatch.com 1255 LLC,Accredited,https://rdap.namebright.com/rdap/ -3465,DropCatch.com 1256 LLC,Accredited,https://rdap.namebright.com/rdap/ -3466,DropCatch.com 1257 LLC,Accredited,https://rdap.namebright.com/rdap/ -3467,DropCatch.com 1258 LLC,Accredited,https://rdap.namebright.com/rdap/ -3468,DropCatch.com 1259 LLC,Accredited,https://rdap.namebright.com/rdap/ -3469,DropCatch.com 1260 LLC,Accredited,https://rdap.namebright.com/rdap/ -3470,DropCatch.com 1261 LLC,Accredited,https://rdap.namebright.com/rdap/ -3471,DropCatch.com 1262 LLC,Accredited,https://rdap.namebright.com/rdap/ -3472,DropCatch.com 1263 LLC,Accredited,https://rdap.namebright.com/rdap/ -3473,DropCatch.com 1264 LLC,Accredited,https://rdap.namebright.com/rdap/ -3474,DropCatch.com 1265 LLC,Accredited,https://rdap.namebright.com/rdap/ -3475,DropCatch.com 1266 LLC,Accredited,https://rdap.namebright.com/rdap/ -3476,DropCatch.com 1267 LLC,Accredited,https://rdap.namebright.com/rdap/ -3477,DropCatch.com 1268 LLC,Accredited,https://rdap.namebright.com/rdap/ -3478,DropCatch.com 1269 LLC,Accredited,https://rdap.namebright.com/rdap/ -3479,DropCatch.com 1270 LLC,Accredited,https://rdap.namebright.com/rdap/ -3480,DropCatch.com 1271 LLC,Accredited,https://rdap.namebright.com/rdap/ -3481,DropCatch.com 1272 LLC,Accredited,https://rdap.namebright.com/rdap/ -3482,DropCatch.com 1273 LLC,Accredited,https://rdap.namebright.com/rdap/ -3483,DropCatch.com 1274 LLC,Accredited,https://rdap.namebright.com/rdap/ -3484,DropCatch.com 1275 LLC,Accredited,https://rdap.namebright.com/rdap/ -3485,DropCatch.com 1276 LLC,Accredited,https://rdap.namebright.com/rdap/ -3486,DropCatch.com 1277 LLC,Accredited,https://rdap.namebright.com/rdap/ -3487,DropCatch.com 1278 LLC,Accredited,https://rdap.namebright.com/rdap/ -3488,DropCatch.com 1279 LLC,Accredited,https://rdap.namebright.com/rdap/ -3489,DropCatch.com 1280 LLC,Accredited,https://rdap.namebright.com/rdap/ -3490,DropCatch.com 1281 LLC,Accredited,https://rdap.namebright.com/rdap/ -3491,DropCatch.com 1282 LLC,Accredited,https://rdap.namebright.com/rdap/ -3492,DropCatch.com 1283 LLC,Accredited,https://rdap.namebright.com/rdap/ -3493,DropCatch.com 1284 LLC,Accredited,https://rdap.namebright.com/rdap/ -3494,DropCatch.com 1285 LLC,Accredited,https://rdap.namebright.com/rdap/ -3495,DropCatch.com 1286 LLC,Accredited,https://rdap.namebright.com/rdap/ -3496,DropCatch.com 1287 LLC,Accredited,https://rdap.namebright.com/rdap/ -3497,DropCatch.com 1288 LLC,Accredited,https://rdap.namebright.com/rdap/ -3498,DropCatch.com 1289 LLC,Accredited,https://rdap.namebright.com/rdap/ -3499,DropCatch.com 1290 LLC,Accredited,https://rdap.namebright.com/rdap/ -3500,DropCatch.com 1291 LLC,Accredited,https://rdap.namebright.com/rdap/ -3501,DropCatch.com 1292 LLC,Accredited,https://rdap.namebright.com/rdap/ -3502,DropCatch.com 1293 LLC,Accredited,https://rdap.namebright.com/rdap/ -3503,DropCatch.com 1294 LLC,Accredited,https://rdap.namebright.com/rdap/ -3504,DropCatch.com 1295 LLC,Accredited,https://rdap.namebright.com/rdap/ -3505,DropCatch.com 1296 LLC,Accredited,https://rdap.namebright.com/rdap/ -3506,DropCatch.com 1297 LLC,Accredited,https://rdap.namebright.com/rdap/ -3507,DropCatch.com 1298 LLC,Accredited,https://rdap.namebright.com/rdap/ -3508,DropCatch.com 1299 LLC,Accredited,https://rdap.namebright.com/rdap/ -3509,DropCatch.com 1300 LLC,Accredited,https://rdap.namebright.com/rdap/ -3510,DropCatch.com 1301 LLC,Accredited,https://rdap.namebright.com/rdap/ -3511,DropCatch.com 1302 LLC,Accredited,https://rdap.namebright.com/rdap/ -3512,DropCatch.com 1303 LLC,Accredited,https://rdap.namebright.com/rdap/ -3513,DropCatch.com 1304 LLC,Accredited,https://rdap.namebright.com/rdap/ -3514,DropCatch.com 1305 LLC,Accredited,https://rdap.namebright.com/rdap/ -3515,DropCatch.com 1306 LLC,Accredited,https://rdap.namebright.com/rdap/ -3516,DropCatch.com 1307 LLC,Accredited,https://rdap.namebright.com/rdap/ -3517,DropCatch.com 1308 LLC,Accredited,https://rdap.namebright.com/rdap/ -3518,DropCatch.com 1309 LLC,Accredited,https://rdap.namebright.com/rdap/ -3519,DropCatch.com 1310 LLC,Accredited,https://rdap.namebright.com/rdap/ -3520,DropCatch.com 1311 LLC,Accredited,https://rdap.namebright.com/rdap/ -3521,DropCatch.com 1312 LLC,Accredited,https://rdap.namebright.com/rdap/ -3522,DropCatch.com 1313 LLC,Accredited,https://rdap.namebright.com/rdap/ -3523,DropCatch.com 1314 LLC,Accredited,https://rdap.namebright.com/rdap/ -3524,DropCatch.com 1315 LLC,Accredited,https://rdap.namebright.com/rdap/ -3525,DropCatch.com 1316 LLC,Accredited,https://rdap.namebright.com/rdap/ -3526,DropCatch.com 1317 LLC,Accredited,https://rdap.namebright.com/rdap/ -3527,DropCatch.com 1318 LLC,Accredited,https://rdap.namebright.com/rdap/ -3528,DropCatch.com 1319 LLC,Accredited,https://rdap.namebright.com/rdap/ -3529,DropCatch.com 1320 LLC,Accredited,https://rdap.namebright.com/rdap/ -3530,DropCatch.com 1321 LLC,Accredited,https://rdap.namebright.com/rdap/ -3531,DropCatch.com 1322 LLC,Accredited,https://rdap.namebright.com/rdap/ -3532,DropCatch.com 1323 LLC,Accredited,https://rdap.namebright.com/rdap/ -3533,DropCatch.com 1324 LLC,Accredited,https://rdap.namebright.com/rdap/ -3534,DropCatch.com 1325 LLC,Accredited,https://rdap.namebright.com/rdap/ -3535,DropCatch.com 1326 LLC,Accredited,https://rdap.namebright.com/rdap/ -3536,DropCatch.com 1327 LLC,Accredited,https://rdap.namebright.com/rdap/ -3537,DropCatch.com 1328 LLC,Accredited,https://rdap.namebright.com/rdap/ -3538,DropCatch.com 1329 LLC,Accredited,https://rdap.namebright.com/rdap/ -3539,DropCatch.com 1330 LLC,Accredited,https://rdap.namebright.com/rdap/ -3540,DropCatch.com 1331 LLC,Accredited,https://rdap.namebright.com/rdap/ -3541,DropCatch.com 1332 LLC,Accredited,https://rdap.namebright.com/rdap/ -3542,DropCatch.com 1333 LLC,Accredited,https://rdap.namebright.com/rdap/ -3543,DropCatch.com 1334 LLC,Accredited,https://rdap.namebright.com/rdap/ -3544,DropCatch.com 1335 LLC,Accredited,https://rdap.namebright.com/rdap/ -3545,DropCatch.com 1336 LLC,Accredited,https://rdap.namebright.com/rdap/ -3546,DropCatch.com 1337 LLC,Accredited,https://rdap.namebright.com/rdap/ -3547,DropCatch.com 1338 LLC,Accredited,https://rdap.namebright.com/rdap/ -3548,DropCatch.com 1339 LLC,Accredited,https://rdap.namebright.com/rdap/ -3549,DropCatch.com 1340 LLC,Accredited,https://rdap.namebright.com/rdap/ -3550,DropCatch.com 1341 LLC,Accredited,https://rdap.namebright.com/rdap/ -3551,DropCatch.com 1342 LLC,Accredited,https://rdap.namebright.com/rdap/ -3552,DropCatch.com 1343 LLC,Accredited,https://rdap.namebright.com/rdap/ -3553,DropCatch.com 1344 LLC,Accredited,https://rdap.namebright.com/rdap/ -3554,DropCatch.com 1345 LLC,Accredited,https://rdap.namebright.com/rdap/ -3555,DropCatch.com 1346 LLC,Accredited,https://rdap.namebright.com/rdap/ -3556,DropCatch.com 1347 LLC,Accredited,https://rdap.namebright.com/rdap/ -3557,DropCatch.com 1348 LLC,Accredited,https://rdap.namebright.com/rdap/ -3558,DropCatch.com 1349 LLC,Accredited,https://rdap.namebright.com/rdap/ -3559,DropCatch.com 1350 LLC,Accredited,https://rdap.namebright.com/rdap/ -3560,DropCatch.com 1351 LLC,Accredited,https://rdap.namebright.com/rdap/ -3561,DropCatch.com 1352 LLC,Accredited,https://rdap.namebright.com/rdap/ -3562,DropCatch.com 1353 LLC,Accredited,https://rdap.namebright.com/rdap/ -3563,DropCatch.com 1354 LLC,Accredited,https://rdap.namebright.com/rdap/ -3564,DropCatch.com 1355 LLC,Accredited,https://rdap.namebright.com/rdap/ -3565,DropCatch.com 1356 LLC,Accredited,https://rdap.namebright.com/rdap/ -3566,DropCatch.com 1357 LLC,Accredited,https://rdap.namebright.com/rdap/ -3567,DropCatch.com 1358 LLC,Accredited,https://rdap.namebright.com/rdap/ -3568,DropCatch.com 1359 LLC,Accredited,https://rdap.namebright.com/rdap/ -3569,DropCatch.com 1360 LLC,Accredited,https://rdap.namebright.com/rdap/ -3570,DropCatch.com 1361 LLC,Accredited,https://rdap.namebright.com/rdap/ -3571,DropCatch.com 1362 LLC,Accredited,https://rdap.namebright.com/rdap/ -3572,DropCatch.com 1363 LLC,Accredited,https://rdap.namebright.com/rdap/ -3573,DropCatch.com 1364 LLC,Accredited,https://rdap.namebright.com/rdap/ -3574,DropCatch.com 1365 LLC,Accredited,https://rdap.namebright.com/rdap/ -3575,DropCatch.com 1366 LLC,Accredited,https://rdap.namebright.com/rdap/ -3576,DropCatch.com 1367 LLC,Accredited,https://rdap.namebright.com/rdap/ -3577,DropCatch.com 1368 LLC,Accredited,https://rdap.namebright.com/rdap/ -3578,DropCatch.com 1369 LLC,Accredited,https://rdap.namebright.com/rdap/ -3579,DropCatch.com 1370 LLC,Accredited,https://rdap.namebright.com/rdap/ -3580,DropCatch.com 1371 LLC,Accredited,https://rdap.namebright.com/rdap/ -3581,DropCatch.com 1372 LLC,Accredited,https://rdap.namebright.com/rdap/ -3582,DropCatch.com 1373 LLC,Accredited,https://rdap.namebright.com/rdap/ -3583,DropCatch.com 1374 LLC,Accredited,https://rdap.namebright.com/rdap/ -3584,DropCatch.com 1375 LLC,Accredited,https://rdap.namebright.com/rdap/ -3585,DropCatch.com 1376 LLC,Accredited,https://rdap.namebright.com/rdap/ -3586,DropCatch.com 1377 LLC,Accredited,https://rdap.namebright.com/rdap/ -3587,DropCatch.com 1378 LLC,Accredited,https://rdap.namebright.com/rdap/ -3588,DropCatch.com 1379 LLC,Accredited,https://rdap.namebright.com/rdap/ -3589,DropCatch.com 1380 LLC,Accredited,https://rdap.namebright.com/rdap/ -3590,DropCatch.com 1381 LLC,Accredited,https://rdap.namebright.com/rdap/ -3591,DropCatch.com 1382 LLC,Accredited,https://rdap.namebright.com/rdap/ -3592,DropCatch.com 1383 LLC,Accredited,https://rdap.namebright.com/rdap/ -3593,DropCatch.com 1384 LLC,Accredited,https://rdap.namebright.com/rdap/ -3594,DropCatch.com 1385 LLC,Accredited,https://rdap.namebright.com/rdap/ -3595,DropCatch.com 1386 LLC,Accredited,https://rdap.namebright.com/rdap/ -3596,DropCatch.com 1387 LLC,Accredited,https://rdap.namebright.com/rdap/ -3597,DropCatch.com 1388 LLC,Accredited,https://rdap.namebright.com/rdap/ -3598,DropCatch.com 1389 LLC,Accredited,https://rdap.namebright.com/rdap/ -3599,DropCatch.com 1390 LLC,Accredited,https://rdap.namebright.com/rdap/ -3600,DropCatch.com 1391 LLC,Accredited,https://rdap.namebright.com/rdap/ -3601,DropCatch.com 1392 LLC,Accredited,https://rdap.namebright.com/rdap/ -3602,DropCatch.com 1393 LLC,Accredited,https://rdap.namebright.com/rdap/ -3603,DropCatch.com 1394 LLC,Accredited,https://rdap.namebright.com/rdap/ -3604,DropCatch.com 1395 LLC,Accredited,https://rdap.namebright.com/rdap/ -3605,DropCatch.com 1396 LLC,Accredited,https://rdap.namebright.com/rdap/ -3606,DropCatch.com 1397 LLC,Accredited,https://rdap.namebright.com/rdap/ -3607,DropCatch.com 1398 LLC,Accredited,https://rdap.namebright.com/rdap/ -3608,DropCatch.com 1399 LLC,Accredited,https://rdap.namebright.com/rdap/ -3609,DropCatch.com 1400 LLC,Accredited,https://rdap.namebright.com/rdap/ -3610,DropCatch.com 1401 LLC,Accredited,https://rdap.namebright.com/rdap/ -3611,DropCatch.com 1402 LLC,Accredited,https://rdap.namebright.com/rdap/ -3612,DropCatch.com 1403 LLC,Accredited,https://rdap.namebright.com/rdap/ -3613,DropCatch.com 1404 LLC,Accredited,https://rdap.namebright.com/rdap/ -3614,DropCatch.com 1405 LLC,Accredited,https://rdap.namebright.com/rdap/ -3615,DropCatch.com 1406 LLC,Accredited,https://rdap.namebright.com/rdap/ -3616,DropCatch.com 1407 LLC,Accredited,https://rdap.namebright.com/rdap/ -3617,DropCatch.com 1408 LLC,Accredited,https://rdap.namebright.com/rdap/ -3618,DropCatch.com 1409 LLC,Accredited,https://rdap.namebright.com/rdap/ -3619,DropCatch.com 1410 LLC,Accredited,https://rdap.namebright.com/rdap/ -3620,DropCatch.com 1411 LLC,Accredited,https://rdap.namebright.com/rdap/ -3621,DropCatch.com 1412 LLC,Accredited,https://rdap.namebright.com/rdap/ -3622,DropCatch.com 1413 LLC,Accredited,https://rdap.namebright.com/rdap/ -3623,DropCatch.com 1414 LLC,Accredited,https://rdap.namebright.com/rdap/ -3624,DropCatch.com 1415 LLC,Accredited,https://rdap.namebright.com/rdap/ -3625,DropCatch.com 1416 LLC,Accredited,https://rdap.namebright.com/rdap/ -3626,DropCatch.com 1417 LLC,Accredited,https://rdap.namebright.com/rdap/ -3627,DropCatch.com 1418 LLC,Accredited,https://rdap.namebright.com/rdap/ -3628,DropCatch.com 1419 LLC,Accredited,https://rdap.namebright.com/rdap/ -3629,DropCatch.com 1420 LLC,Accredited,https://rdap.namebright.com/rdap/ -3630,DropCatch.com 1421 LLC,Accredited,https://rdap.namebright.com/rdap/ -3631,DropCatch.com 1422 LLC,Accredited,https://rdap.namebright.com/rdap/ -3632,DropCatch.com 1423 LLC,Accredited,https://rdap.namebright.com/rdap/ -3633,DropCatch.com 1424 LLC,Accredited,https://rdap.namebright.com/rdap/ -3634,DropCatch.com 1425 LLC,Accredited,https://rdap.namebright.com/rdap/ -3635,DropCatch.com 1426 LLC,Accredited,https://rdap.namebright.com/rdap/ -3636,DropCatch.com 1427 LLC,Accredited,https://rdap.namebright.com/rdap/ -3637,DropCatch.com 1428 LLC,Accredited,https://rdap.namebright.com/rdap/ -3638,DropCatch.com 1429 LLC,Accredited,https://rdap.namebright.com/rdap/ -3639,DropCatch.com 1430 LLC,Accredited,https://rdap.namebright.com/rdap/ -3640,DropCatch.com 1431 LLC,Accredited,https://rdap.namebright.com/rdap/ -3641,DropCatch.com 1432 LLC,Accredited,https://rdap.namebright.com/rdap/ -3642,DropCatch.com 1433 LLC,Accredited,https://rdap.namebright.com/rdap/ -3643,DropCatch.com 1434 LLC,Accredited,https://rdap.namebright.com/rdap/ -3644,DropCatch.com 1435 LLC,Accredited,https://rdap.namebright.com/rdap/ -3645,DropCatch.com 1436 LLC,Accredited,https://rdap.namebright.com/rdap/ -3646,DropCatch.com 1437 LLC,Accredited,https://rdap.namebright.com/rdap/ -3647,DropCatch.com 1438 LLC,Accredited,https://rdap.namebright.com/rdap/ -3648,DropCatch.com 1439 LLC,Accredited,https://rdap.namebright.com/rdap/ -3649,DropCatch.com 1440 LLC,Accredited,https://rdap.namebright.com/rdap/ -3650,DropCatch.com 1441 LLC,Accredited,https://rdap.namebright.com/rdap/ -3651,DropCatch.com 1442 LLC,Accredited,https://rdap.namebright.com/rdap/ -3652,DropCatch.com 1443 LLC,Accredited,https://rdap.namebright.com/rdap/ -3653,DropCatch.com 1444 LLC,Accredited,https://rdap.namebright.com/rdap/ -3654,DropCatch.com 1445 LLC,Accredited,https://rdap.namebright.com/rdap/ -3655,DropCatch.com 1446 LLC,Accredited,https://rdap.namebright.com/rdap/ -3656,DropCatch.com 1447 LLC,Accredited,https://rdap.namebright.com/rdap/ -3657,DropCatch.com 1448 LLC,Accredited,https://rdap.namebright.com/rdap/ -3658,DropCatch.com 1449 LLC,Accredited,https://rdap.namebright.com/rdap/ -3659,DropCatch.com 1450 LLC,Accredited,https://rdap.namebright.com/rdap/ -3660,DropCatch.com 1451 LLC,Accredited,https://rdap.namebright.com/rdap/ -3661,DropCatch.com 1452 LLC,Accredited,https://rdap.namebright.com/rdap/ -3662,DropCatch.com 1453 LLC,Accredited,https://rdap.namebright.com/rdap/ -3663,DropCatch.com 1454 LLC,Accredited,https://rdap.namebright.com/rdap/ -3664,DropCatch.com 1455 LLC,Accredited,https://rdap.namebright.com/rdap/ -3665,DropCatch.com 1456 LLC,Accredited,https://rdap.namebright.com/rdap/ -3666,DropCatch.com 1457 LLC,Accredited,https://rdap.namebright.com/rdap/ -3667,DropCatch.com 1458 LLC,Accredited,https://rdap.namebright.com/rdap/ -3668,DropCatch.com 1459 LLC,Accredited,https://rdap.namebright.com/rdap/ -3669,DropCatch.com 1460 LLC,Accredited,https://rdap.namebright.com/rdap/ -3670,DropCatch.com 1461 LLC,Accredited,https://rdap.namebright.com/rdap/ -3671,DropCatch.com 1462 LLC,Accredited,https://rdap.namebright.com/rdap/ -3672,DropCatch.com 1463 LLC,Accredited,https://rdap.namebright.com/rdap/ -3673,DropCatch.com 1464 LLC,Accredited,https://rdap.namebright.com/rdap/ -3674,DropCatch.com 1465 LLC,Accredited,https://rdap.namebright.com/rdap/ -3675,DropCatch.com 1466 LLC,Accredited,https://rdap.namebright.com/rdap/ -3676,DropCatch.com 1467 LLC,Accredited,https://rdap.namebright.com/rdap/ -3677,DropCatch.com 1468 LLC,Accredited,https://rdap.namebright.com/rdap/ -3678,DropCatch.com 1469 LLC,Accredited,https://rdap.namebright.com/rdap/ -3679,DropCatch.com 1470 LLC,Accredited,https://rdap.namebright.com/rdap/ -3680,DropCatch.com 1471 LLC,Accredited,https://rdap.namebright.com/rdap/ -3681,DropCatch.com 1472 LLC,Accredited,https://rdap.namebright.com/rdap/ -3682,DropCatch.com 1473 LLC,Accredited,https://rdap.namebright.com/rdap/ -3683,DropCatch.com 1474 LLC,Accredited,https://rdap.namebright.com/rdap/ -3684,DropCatch.com 1475 LLC,Accredited,https://rdap.namebright.com/rdap/ -3685,DropCatch.com 1476 LLC,Accredited,https://rdap.namebright.com/rdap/ -3686,DropCatch.com 1477 LLC,Accredited,https://rdap.namebright.com/rdap/ -3687,DropCatch.com 1478 LLC,Accredited,https://rdap.namebright.com/rdap/ -3688,DropCatch.com 1479 LLC,Accredited,https://rdap.namebright.com/rdap/ -3689,DropCatch.com 1480 LLC,Accredited,https://rdap.namebright.com/rdap/ -3690,DropCatch.com 1481 LLC,Accredited,https://rdap.namebright.com/rdap/ -3691,DropCatch.com 1482 LLC,Accredited,https://rdap.namebright.com/rdap/ -3692,DropCatch.com 1483 LLC,Accredited,https://rdap.namebright.com/rdap/ -3693,DropCatch.com 1484 LLC,Accredited,https://rdap.namebright.com/rdap/ -3694,DropCatch.com 1485 LLC,Accredited,https://rdap.namebright.com/rdap/ -3695,DropCatch.com 1486 LLC,Accredited,https://rdap.namebright.com/rdap/ -3696,DropCatch.com 1487 LLC,Accredited,https://rdap.namebright.com/rdap/ -3697,DropCatch.com 1488 LLC,Accredited,https://rdap.namebright.com/rdap/ -3698,DropCatch.com 1489 LLC,Accredited,https://rdap.namebright.com/rdap/ -3699,DropCatch.com 1490 LLC,Accredited,https://rdap.namebright.com/rdap/ -3700,DropCatch.com 1491 LLC,Accredited,https://rdap.namebright.com/rdap/ -3701,DropCatch.com 1492 LLC,Accredited,https://rdap.namebright.com/rdap/ -3702,DropCatch.com 1493 LLC,Accredited,https://rdap.namebright.com/rdap/ -3703,DropCatch.com 1494 LLC,Accredited,https://rdap.namebright.com/rdap/ -3704,DropCatch.com 1495 LLC,Accredited,https://rdap.namebright.com/rdap/ -3705,DropCatch.com 1496 LLC,Accredited,https://rdap.namebright.com/rdap/ -3706,DropCatch.com 1497 LLC,Accredited,https://rdap.namebright.com/rdap/ -3707,DropCatch.com 1498 LLC,Accredited,https://rdap.namebright.com/rdap/ -3708,DropCatch.com 1499 LLC,Accredited,https://rdap.namebright.com/rdap/ -3709,DropCatch.com 1500 LLC,Accredited,https://rdap.namebright.com/rdap/ -3710,DropCatch.com 1501 LLC,Accredited,https://rdap.namebright.com/rdap/ -3711,DropCatch.com 1502 LLC,Accredited,https://rdap.namebright.com/rdap/ -3712,DropCatch.com 1503 LLC,Accredited,https://rdap.namebright.com/rdap/ -3713,DropCatch.com 1504 LLC,Accredited,https://rdap.namebright.com/rdap/ -3714,DropCatch.com 1505 LLC,Accredited,https://rdap.namebright.com/rdap/ -3715,DropCatch.com 1506 LLC,Accredited,https://rdap.namebright.com/rdap/ -3716,DropCatch.com 1507 LLC,Accredited,https://rdap.namebright.com/rdap/ -3717,DropCatch.com 1508 LLC,Accredited,https://rdap.namebright.com/rdap/ -3718,DropCatch.com 1509 LLC,Accredited,https://rdap.namebright.com/rdap/ -3719,DropCatch.com 1510 LLC,Accredited,https://rdap.namebright.com/rdap/ -3720,DropCatch.com 1511 LLC,Accredited,https://rdap.namebright.com/rdap/ -3721,DropCatch.com 1512 LLC,Accredited,https://rdap.namebright.com/rdap/ -3722,DropCatch.com 1513 LLC,Accredited,https://rdap.namebright.com/rdap/ -3723,DropCatch.com 1514 LLC,Accredited,https://rdap.namebright.com/rdap/ -3724,DropCatch.com 1515 LLC,Accredited,https://rdap.namebright.com/rdap/ -3725,DropCatch.com 1516 LLC,Accredited,https://rdap.namebright.com/rdap/ -3726,DropCatch.com 1517 LLC,Accredited,https://rdap.namebright.com/rdap/ -3727,DropCatch.com 1518 LLC,Accredited,https://rdap.namebright.com/rdap/ -3728,DropCatch.com 1519 LLC,Accredited,https://rdap.namebright.com/rdap/ -3729,DropCatch.com 1520 LLC,Accredited,https://rdap.namebright.com/rdap/ -3730,DropCatch.com 1521 LLC,Accredited,https://rdap.namebright.com/rdap/ -3731,DropCatch.com 1522 LLC,Accredited,https://rdap.namebright.com/rdap/ -3732,DropCatch.com 1523 LLC,Accredited,https://rdap.namebright.com/rdap/ -3733,DropCatch.com 1524 LLC,Accredited,https://rdap.namebright.com/rdap/ -3734,DropCatch.com 1525 LLC,Accredited,https://rdap.namebright.com/rdap/ -3735,DropCatch.com 1526 LLC,Accredited,https://rdap.namebright.com/rdap/ -3736,DropCatch.com 1527 LLC,Accredited,https://rdap.namebright.com/rdap/ -3737,DropCatch.com 1528 LLC,Accredited,https://rdap.namebright.com/rdap/ -3738,DropCatch.com 1529 LLC,Accredited,https://rdap.namebright.com/rdap/ -3739,DropCatch.com 1530 LLC,Accredited,https://rdap.namebright.com/rdap/ -3740,DropCatch.com 1531 LLC,Accredited,https://rdap.namebright.com/rdap/ -3741,DropCatch.com 1532 LLC,Accredited,https://rdap.namebright.com/rdap/ -3742,DropCatch.com 1533 LLC,Accredited,https://rdap.namebright.com/rdap/ -3743,DropCatch.com 1534 LLC,Accredited,https://rdap.namebright.com/rdap/ -3744,DropCatch.com 1535 LLC,Accredited,https://rdap.namebright.com/rdap/ -3745,DropCatch.com 1536 LLC,Accredited,https://rdap.namebright.com/rdap/ -3746,DropCatch.com 1537 LLC,Accredited,https://rdap.namebright.com/rdap/ -3747,DropCatch.com 1538 LLC,Accredited,https://rdap.namebright.com/rdap/ -3748,DropCatch.com 1539 LLC,Accredited,https://rdap.namebright.com/rdap/ -3749,DropCatch.com 1540 LLC,Accredited,https://rdap.namebright.com/rdap/ -3750,DropCatch.com 1541 LLC,Accredited,https://rdap.namebright.com/rdap/ -3751,DropCatch.com 1542 LLC,Accredited,https://rdap.namebright.com/rdap/ -3752,DropCatch.com 1543 LLC,Accredited,https://rdap.namebright.com/rdap/ -3753,DropCatch.com 1544 LLC,Accredited,https://rdap.namebright.com/rdap/ -3754,DropCatch.com 1545 LLC,Accredited,https://rdap.namebright.com/rdap/ -3755,Tencent Cloud Computing (Beijing) Limited Liability Company,Accredited,https://rdap.dnspod.com/ -3756,"SHANGHAI XIAOLAN NETWORK TECHNOLOGY CO., LTD.",Terminated, -3757,Maxinames LTD,Accredited,https://rdapserver.net/ -3758,"Hefei Juming Network Technology Co., Ltd",Accredited,https://rdap.jumi.com/ -3759,Mfro Inc.,Accredited,https://rdap.quicca.com/rdap/ -3760,Ten Network Technology Limited,Terminated, -3761,"WangJu Brands Management Co., Ltd.",Accredited,https://whois.wjbrands.com:9090/rdap/ -3762,"Hainan Universal Technology Co., Ltd",Terminated, -3763,"Fuzhou Zhongxu Network Technology Co., Ltd.",Accredited,https://rdap.zxnic.cn/rdap/ -3764,"Xiamen Digital Engine Network Technology Co., Ltd",Terminated, -3765,"NICENIC INTERNATIONAL GROUP CO., LIMITED",Accredited,https://rdap.iisp.com/ -3766,"SHENZHEN DOMAINSTAR TECHNOLOGY CO., LIMITED",Terminated, -3767,"JIANGSU CHENGFUTONG NETWORK TECHNOLOGY CO., LTD.",Terminated, -3768,First Alliance Group Ltd T/A Netclues Inc,Accredited,https://rdapserver.net/ -3769,"Shanghai UCloud Information Technology Co., Ltd.",Terminated, -3770,"SUPER DATA CO., LTD",Terminated, -3771,Domain Best Limited,Accredited,https://www.17domain.com/rdap/ -3772,Cheap Domains Pte Ltd.,Terminated, -3773,PT Biznet GIO Nusantara,Accredited,https://rdap.biznetgio.com/ -3774,IPIP INC.,Accredited,https://rdap.treasure.cn/rdap/ -3775,ALIBABA.COM SINGAPORE E-COMMERCE PRIVATE LIMITED,Accredited,https://whois.aliyun.com/rdap/ -3776,Barbero & Associates Limited,Accredited,https://rdap.barbero.co.uk/ -3777,"Hangzhou MarkSmile Technology Co., Ltd",Accredited,https://rdap.marksmile.com/rdap/ -3778,Nanjing EDNS Technology Limited,Terminated, -3779,Knipp Medien und Kommunikation GmbH,Accredited,https://rdap.knipp.de/ -3780,Webveloper Inc.,Terminated, -3781,"Beijing Aidi Tong Lian Technology, LLC",Terminated, -3782,HONG KONG HUBU INTERNATIONAL INVESTMENT AND DEVELOPMENT COMPANY LIMITED,Terminated, -3783,ZYSM Technologies Limited,Accredited,https://rdap.zysm.wang/ -3784,"Wolfe Domain, LLC dba Dot Brand Registrar Services",Accredited,https://rdap.1api.net/ -3785,AC Webconnecting N.V. DBA domain.cam,Accredited,https://rdap.domain.cam/ -3786,"GoDaddy Corporate Domains, LLC",Accredited,https://rdap.brandsight.com/v1/ -3787,"RegistrarBrand, LLC",Accredited,https://rdap.appdetex.com/ -3788,"RegistrarGuard, LLC",Accredited,https://rdap.appdetex.com/ -3789,"RegistrarSecure, LLC",Accredited,https://rdap.appdetex.com/ -3790,"Shenzhen Domain Protection Technology Co., Ltd.",Accredited,https://rdap.62.com/rdap/ -3791,SINO PROFIT (HONG KONG) LIMITED,Accredited,https://rdap.62.com/rdap/ -3792,Global Domain Name Trading Center Ltd,Accredited,https://rdap.gdntcl.com/rdap/ -3793,"Guangzhou Yunxun Information Technology Co., Ltd.",Accredited,https://rdap.dnspod.cn/ -3794,AF Proxy Services Ltd,Accredited,https://rdap.afproxy.africa/rdap/ -3795,"Hangzhou Newdun Network Technology Co., Ltd.",Terminated, -3796,Abbey Road Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3797,Aconcagua Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3798,Active Market Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3799,Adriatic Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3800,Aegean Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3801,Buzinessware FZCO,Accredited,https://rdapserver.net/ -3802,Ubilibet S.L.,Accredited,https://rdap.ubilibet.com/ -3803,Zoho Corporation Private Limited,Accredited,https://domains.zoho.com/rdap/v1/ -3804,Edomains LLC,Accredited,https://rdap.edomains.com/rdap/ -3805,Topnets Group Limited,Accredited,https://rdap.1198.cn/ -3806,Beget LLC,Accredited,https://rdapserver.net/ -3807,Alboran Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3808,Alpha Beta Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3809,Annapurna Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3810,Aquila Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3811,Australe Domains LLC,Accredited,https://rdap.networksolutions.com/rdap/ -3812,Innovadeus Pvt. Ltd.,Terminated, -3813,"ShangYu Global Technology Co., Ltd.",Accredited,https://whois.shangyuglobal.com:9090/rdap/ -3814,Zunyi Brandma Network Technology Ltd.,Accredited,https://rdap.zuuq.cn/rdap/ -3817,Wix.com Ltd.,Accredited,https://www.wix.com/_api/whois/rdap/ -3818,Baidu Europe B.V.,Accredited, -3819,Alibaba Cloud US LLC,Accredited,https://whois.aliyun.com/rdap/ -3820,"Qinghai Yunnet Electronics Technology Co., Ltd",Accredited,https://rdap.jia10000.cn/ -3821,"Guangzhou YI YOU Information and Technology Co., Ltd",Accredited, -3824,Cloud Yuqu LLC,Accredited,https://rdap.diymysite.com/rdap/ -3825,Xi'an Qianxi Network Technology Co. Ltd.,Accredited,https://rdap.qianxiyun.com/ -3826,İsimtescil Bilişim A.Ş.,Accredited,https://rdap.isimtescil.net/api/ -3827,Squarespace Domains LLC,Accredited,https://rdap.squarespace.domains/ -3830,"Chunghwa Telecom Co., Ltd.",Accredited,https://rdap.hinet.net/ -3831,Canada 001 Names Ltd.,Accredited,https://rdap.001.ca/ -3832,Tongle Information Industry Limited,Terminated, -3833,VIP internet Industry Limited,Accredited,https://rdap.domain.cn/ -3835,"Domain (Shanghai) Network Technology Co., Ltd",Accredited,https://rdap.doumaitech.cn/rdap/ -3836,"Domain Future (Beijing) Technology Co., Ltd.",Terminated, -3837,Gmo-Z.Com Runsystem Joint Stock Company,Accredited, -3838,"MarkMonitor Information Technology (Shanghai) Co., Ltd.",Accredited,https://rdap.markmonitor.com/rdap/ -3839,Nerd Origins Ltd,Accredited, -3840,Tool Domains Ltd dba Edoms.com,Accredited,https://rdap.tool.domains/ -3841,VIAWEB Inc.,Accredited,https://rdap.nayana.com/v1/ -3842,"Shenzhen Ping An Communication Technology Co., Ltd.",Accredited,https://rdap.pinganyun.com/rdap/ -3844,"AppCroNix Infotech Private Limited, d/b/a VEBONIX.com",Accredited,https://rdapserver.net/ -3846,DomainsBot S.R.L.,Accredited,https://rdapserver.net/ -3847,Beijing Jingkewang Technology Company Ltd.,Accredited,https://www.jingkewang.net/a/rdap/ -3848,"Shandong Huaimi Network Technology Co., Ltd",Accredited,https://whois.huaimi.com/rdap/ -3849,Zerolek Pty Ltd,Terminated, -3850,"Topvisor Co., Ltd",Terminated, -3851,Yunnan DingHong Technology Co. Ltd.,Terminated, -3852,"Xiamen Zhongtuo Internet Technology Co., Ltd.",Accredited,https://rdap.zhong.top/domain/ -3853,Grupo Loading Systems S.L.,Accredited,https://rdap.loading.es/ -3854,"Access Japan Co, Ltd. dba REGne (www.regne.net)",Accredited,https://rdap.regne.net/ -3855,"Hong Kong Juming Network Technology Co., Ltd",Accredited,https://rdap.gathernames.com/ -3856,RiVidium Inc.,Accredited,https://rdap.triplecyber.com/rdap/ -3857,Dynu Systems Incorporated,Accredited,https://rdap.dynu.com/v2/rdap/ -3858,Aceville Pte. Ltd.,Accredited,https://global-rdap.dnspod.com/ -3859,"Intellectual Property Management Company, Inc.",Terminated, -3860,"WEDOS Internet, a.s.",Accredited,https://rdap.wedos.com/ -3861,Purple IT Ltd,Accredited,https://rdapserver.net/ -3862,"Spaceship, Inc.",Accredited,https://rdap.spaceship.com/ -3863,Domain International Services Limited,Accredited,https://rdap.wdomain.com/rdap/ -3864,Wanyuhulian Technology Limited,Accredited,https://rdap.wanyuhulian.com/rdap/ -3865,Community Advice s.r.o.,Accredited,https://rdapserver.net/ -3866,Active.Domains Limited Liability Company,Accredited,https://rdap.active.domains/ -3867,Yelles AB,Accredited,https://rdap.ispcomfort.net/ -3868,VIP Brand Management Limited,Terminated, -3869,"Vantage of Convergence (Chengdu) Technology Co., Ltd.",Accredited,https://rdap.domain.iwanshang.com/ -3870,Registrar of domains names s.r.o.,Accredited,https://rdapserver.net/regdomains/ -3871,ODTÜ Geliştirme Vakfi Bilgi Teknolojileri Sanayi Ve Ticaret Anonim Şirketi,Accredited,https://rdap.metunic.com.tr/ -3872,17 Domain Limited,Accredited,https://www.17domain.com/rdap/ -3873,Vianames LLC,Accredited,https://rdap.vianames.net/ -3874,Butterfly Asset Management Pte. Ltd,Accredited,https://rdap.arin.net/ -3875,Virtualia LLC,Accredited,https://rdap.virtualia.com/rdap/ -3876,"17 Domain 1, Limited",Accredited,https://www.17domain.com/rdap/ -3877,"17 Domain 2, Limited",Accredited,https://www.17domain.com/rdap/ -3878,"17 Domain 3, Limited",Accredited,https://www.17domain.com/rdap/ -3879,"17 Domain 4, Limited",Accredited,https://www.17domain.com/rdap/ -3880,Cross Marketing Technology Ltd.,Accredited,https://rdap.cm-tech-reg.com/ -3881,Enterprise Guardian Inc.,Accredited,https://rdapserver.net/ -3882,Domain Science Kutatási Szolgáltató Korlátolt Felelősségű Társaság,Accredited,https://rdap.namerider.com/ -3883,Brand Focus Limited,Accredited,https://rdap.brandcloud.cn/rdap/ -3884,"Staclar, Inc.",Accredited,https://rdap.staclar.com/ -3885,Discount Domain Name Services Pty Ltd,Accredited, -3886,GrepApps Technology Inc.,Accredited,https://rdapserver.net/ -3887,"Second Genistrar, LLC",Accredited,https://rdap.secondgenistrar.com/ -3888,Longming Pte. Ltd.,Accredited,https://rdap.wdomain.com/rdap/ -3889,"Xinyang 171cloud Co., Ltd.",Accredited,https://rdap.171cloud.com/rdap/ -3890,"Hefei Xunyun Network Technology Co., Ltd",Accredited,https://rdap.juming.com/ -3891,"Sav.com, LLC - 1",Accredited,https://rdap.virtualcloud.co/rdap/ -3892,"Sav.com, LLC - 2",Accredited,https://rdap.virtualcloud.co/rdap/ -3893,"Sav.com, LLC - 3",Accredited,https://rdap.virtualcloud.co/rdap/ -3894,"Sav.com, LLC - 4",Accredited,https://rdap.virtualcloud.co/rdap/ -3895,"Sav.com, LLC - 5",Accredited,https://rdap.virtualcloud.co/rdap/ -3896,"Sav.com, LLC - 6",Accredited,https://rdap.virtualcloud.co/rdap/ -3897,"Sav.com, LLC - 7",Accredited,https://rdap.virtualcloud.co/rdap/ -3898,"Sav.com, LLC - 8",Accredited,https://rdap.virtualcloud.co/rdap/ -3899,"Sav.com, LLC - 9",Accredited,https://rdap.virtualcloud.co/rdap/ -3900,"Sav.com, LLC - 10",Accredited,https://rdap.virtualcloud.co/rdap/ -3901,"Sav.com, LLC - 11",Accredited,https://rdap.virtualcloud.co/rdap/ -3902,"Sav.com, LLC - 12",Accredited,https://rdap.virtualcloud.co/rdap/ -3903,"Sav.com, LLC - 13",Accredited,https://rdap.virtualcloud.co/rdap/ -3904,"Sav.com, LLC - 14",Accredited,https://rdap.virtualcloud.co/rdap/ -3905,"Sav.com, LLC - 15",Accredited,https://rdap.virtualcloud.co/rdap/ -3906,"Sav.com, LLC - 16",Accredited,https://rdap.virtualcloud.co/rdap/ -3907,"Sav.com, LLC - 17",Accredited,https://rdap.virtualcloud.co/rdap/ -3908,"Sav.com, LLC - 18",Accredited,https://rdap.virtualcloud.co/rdap/ -3909,"Sav.com, LLC - 19",Accredited,https://rdap.virtualcloud.co/rdap/ -3910,"Sav.com, LLC - 20",Accredited,https://rdap.virtualcloud.co/rdap/ -3911,"Sav.com, LLC - 21",Accredited,https://rdap.virtualcloud.co/rdap/ -3912,"Sav.com, LLC - 22",Accredited,https://rdap.virtualcloud.co/rdap/ -3913,"Sav.com, LLC - 23",Accredited,https://rdap.virtualcloud.co/rdap/ -3914,"Sav.com, LLC - 24",Accredited,https://rdap.virtualcloud.co/rdap/ -3915,"Sav.com, LLC - 25",Accredited,https://rdap.virtualcloud.co/rdap/ -3916,"Sav.com, LLC - 26",Accredited,https://rdap.virtualcloud.co/rdap/ -3917,"Sav.com, LLC - 27",Accredited,https://rdap.virtualcloud.co/rdap/ -3918,"Sav.com, LLC - 28",Accredited,https://rdap.virtualcloud.co/rdap/ -3919,"Sav.com, LLC - 29",Accredited,https://rdap.virtualcloud.co/rdap/ -3920,"Sav.com, LLC - 30",Accredited,https://rdap.virtualcloud.co/rdap/ -3921,"Sav.com, LLC - 31",Accredited,https://rdap.virtualcloud.co/rdap/ -3922,"Sav.com, LLC - 32",Accredited,https://rdap.virtualcloud.co/rdap/ -3923,"Sav.com, LLC - 33",Accredited,https://rdap.virtualcloud.co/rdap/ -3924,"Sav.com, LLC - 34",Accredited,https://rdap.virtualcloud.co/rdap/ -3925,"Sav.com, LLC - 35",Accredited,https://rdap.virtualcloud.co/rdap/ -3926,"Sav.com, LLC - 36",Accredited,https://rdap.virtualcloud.co/rdap/ -3927,"Sav.com, LLC - 37",Accredited,https://rdap.virtualcloud.co/rdap/ -3928,"Sav.com, LLC - 38",Accredited,https://rdap.virtualcloud.co/rdap/ -3929,"Sav.com, LLC - 39",Accredited,https://rdap.virtualcloud.co/rdap/ -3930,"Sav.com, LLC - 40",Accredited,https://rdap.virtualcloud.co/rdap/ -3931,"Sav.com, LLC - 41",Accredited,https://rdap.virtualcloud.co/rdap/ -3932,"Sav.com, LLC - 42",Accredited,https://rdap.virtualcloud.co/rdap/ -3933,"Sav.com, LLC - 43",Accredited,https://rdap.virtualcloud.co/rdap/ -3934,"Sav.com, LLC - 44",Accredited,https://rdap.virtualcloud.co/rdap/ -3935,"Sav.com, LLC - 45",Accredited,https://rdap.virtualcloud.co/rdap/ -3936,"Sav.com, LLC - 46",Accredited,https://rdap.virtualcloud.co/rdap/ -3937,"Sav.com, LLC - 47",Accredited,https://rdap.virtualcloud.co/rdap/ -3938,"Sav.com, LLC - 48",Accredited,https://rdap.virtualcloud.co/rdap/ -3939,"Sav.com, LLC - 49",Accredited,https://rdap.virtualcloud.co/rdap/ -3940,"Sav.com, LLC - 50",Accredited,https://rdap.virtualcloud.co/rdap/ -3941,Gname 001 Inc,Accredited,https://rdap.gname.com/ -3942,Gname 002 Inc,Accredited,https://rdap.gname.com/ -3943,Gname 003 Inc,Accredited,https://rdap.gname.com/ -3944,Gname 004 Inc,Accredited,https://rdap.gname.com/ -3945,Gname 005 Inc,Accredited,https://rdap.gname.com/ -3946,Gname 006 Inc,Accredited,https://rdap.gname.com/ -3947,Gname 007 Inc,Accredited,https://rdap.gname.com/ -3948,Gname 008 Inc,Accredited,https://rdap.gname.com/ -3949,Gname 009 Inc,Accredited,https://rdap.gname.com/ -3950,Gname 010 Inc,Accredited,https://rdap.gname.com/ -3951,"Webempresa Europa, S.L.",Accredited,https://wedominios.webempresa.eu/rdap/ -3952,"Instant Domains, Inc.",Accredited,https://instantdomains.com/services/rdap/ -3953,Zoo Hosting,Accredited, -3954,Whogohost Limited,Accredited,https://rdapserver.net/ -3955,Hainan Meijieda Technology Limited,Accredited,https://www.qidaodao.com/rdap/ -3956,Global Domain Group LLC,Accredited,https://rdap.globaldomaingroup.com/ -3957,Sternforth Limited t/a Web World,Accredited,https://rdapserver.net/ -3958,SecureBackorder EOOD,Accredited,https://rdap.securebackorder.com/ -3959,Salestrar EOOD,Accredited,https://rdap.salestrar.com/ -3960,Mixun Ltd,Accredited, -3961,WDomain.Com Limited,Accredited,https://rdap.wdomain.com/rdap/ -3962,WDomain.Com1 Limited,Accredited,https://rdap.wdomain.com/rdap/ -3963,WDomain.Com2 Limited,Accredited,https://rdap.wdomain.com/rdap/ -3964,WDomain.Com3 Limited,Accredited,https://rdap.wdomain.com/rdap/ -3965,WDomain.Com4 Limited,Accredited,https://rdap.wdomain.com/rdap/ -3966,WDomain.Com5 Limited,Accredited,https://rdap.wdomain.com/rdap/ -3967,"Mixun Network Technology Co., Limited",Accredited, -3968,xTom GmbH,Accredited,https://rdap.xtom.com/ -3969,ZeroFox Inc.,Accredited, -3970,"Zhengzhou Longming Network Technology Co., Ltd",Accredited,https://rdap.longming.com/rdap/ -3971,Costrar EOOD,Accredited,https://rdap.costrar.com/ -3972,Hongkong Kouming International Limited,Accredited, -3973,Brandfish.Com Inc,Accredited,https://rdapserver.net/ -3974,Costdomain.Com Inc,Accredited,https://rdapserver.net/ -3975,Dropping.Co Inc,Accredited,https://rdapserver.net/ -3976,Namebeacon.Com Inc,Accredited,https://rdapserver.net/ -3977,Namesaw.Com Inc,Accredited,https://rdapserver.net/ -3978,Domains API LLC,Terminated, -3979,"Link, For Technology & General Trading Ltd.",Accredited,https://rdap1.linkdata.com/ -3980,Gname 011 Inc,Accredited,https://rdap.gname.com/ -3981,Gname 012 Inc,Accredited,https://rdap.gname.com/ -3982,Gname 013 Inc,Accredited,https://rdap.gname.com/ -3983,Gname 014 Inc,Accredited,https://rdap.gname.com/ -3984,Gname 015 Inc,Accredited,https://rdap.gname.com/ -3985,Gname 016 Inc,Accredited,https://rdap.gname.com/ -3986,Gname 017 Inc,Accredited,https://rdap.gname.com/ -3987,Gname 018 Inc,Accredited,https://rdap.gname.com/ -3988,Gname 019 Inc,Accredited,https://rdap.gname.com/ -3989,Gname 020 Inc,Accredited,https://rdap.gname.com/ -3990,Gname 021 Inc,Accredited,https://rdap.gname.com/ -3991,Gname 022 Inc,Accredited,https://rdap.gname.com/ -3992,Gname 023 Inc,Accredited,https://rdap.gname.com/ -3993,Gname 024 Inc,Accredited,https://rdap.gname.com/ -3994,Gname 025 Inc,Accredited,https://rdap.gname.com/ -3995,Gname 026 Inc,Accredited,https://rdap.gname.com/ -3996,Gname 027 Inc,Accredited,https://rdap.gname.com/ -3997,Gname 028 Inc,Accredited,https://rdap.gname.com/ -3998,Gname 029 Inc,Accredited,https://rdap.gname.com/ -3999,Gname 030 Inc,Accredited,https://rdap.gname.com/ -4000,Gname 031 Inc,Accredited,https://rdap.gname.com/ -4001,Gname 032 Inc,Accredited,https://rdap.gname.com/ -4002,Gname 033 Inc,Accredited,https://rdap.gname.com/ -4003,Gname 034 Inc,Accredited,https://rdap.gname.com/ -4004,Gname 035 Inc,Accredited,https://rdap.gname.com/ -4005,Gname 036 Inc,Accredited,https://rdap.gname.com/ -4006,Gname 037 Inc,Accredited,https://rdap.gname.com/ -4007,Gname 038 Inc,Accredited,https://rdap.gname.com/ -4008,Gname 039 Inc,Accredited,https://rdap.gname.com/ -4009,Gname 040 Inc,Accredited,https://rdap.gname.com/ -4010,Gname 041 Inc,Accredited,https://rdap.gname.com/ -4011,Gname 042 Inc,Accredited,https://rdap.gname.com/ -4012,Gname 043 Inc,Accredited,https://rdap.gname.com/ -4013,Gname 044 Inc,Accredited,https://rdap.gname.com/ -4014,Gname 045 Inc,Accredited,https://rdap.gname.com/ -4015,Gname 046 Inc,Accredited,https://rdap.gname.com/ -4016,Gname 047 Inc,Accredited,https://rdap.gname.com/ -4017,Gname 048 Inc,Accredited,https://rdap.gname.com/ -4018,Gname 049 Inc,Accredited,https://rdap.gname.com/ -4019,Gname 050 Inc,Accredited,https://rdap.gname.com/ -4020,Webslice International Pte. Ltd,Accredited, -4021,HostPro Lab,Accredited, -4022,Bolster Inc.,Accredited, -4023,WDomain Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4024,WDomain 1 Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4025,WDomain 2 Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4026,WDomain 3 Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4027,WDomain 4 Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4028,WDomain 5 Ltd,Accredited,https://rdap.wdomain.com/rdap/ -4029,PT Aksara Data Digital,Accredited,https://rdap.aksaradata.id/ -4030,UK Intis Telecom Ltd,Accredited,https://rdap.dnsale.com/ -4031,Dynadot1700 LLC,Accredited,https://rdap.dynadot.com/ -4032,Dynadot3184 LLC,Accredited,https://rdap.dynadot.com/ -4033,Dynadot3804 LLC,Accredited,https://rdap.dynadot.com/ -4034,Dynadot5706 LLC,Accredited,https://rdap.dynadot.com/ -4035,Dynadot9266 LLC,Accredited,https://rdap.dynadot.com/ -4036,Strange Domains LLC,Accredited, -4037,Europlanet G.P.,Accredited, -4038,PS Internet Company LLP,Accredited, -4039,Domain Global Services Pte. Ltd.,Accredited,https://rdap.wdomain.com/rdap/ -4040,Bhatia Labs Inc,Accredited, -4041,"Hydra Registrar, LLC",Accredited, -4042,Zname Ltd,Accredited,https://rdap.zname.com/rdap/ -4043,Gname 051 Inc,Accredited,https://rdap.gname.com/ -4044,Gname 052 Inc,Accredited,https://rdap.gname.com/ -4045,Gname 053 Inc,Accredited,https://rdap.gname.com/ -4046,Gname 054 Inc,Accredited,https://rdap.gname.com/ -4047,Gname 055 Inc,Accredited,https://rdap.gname.com/ -4048,Gname 056 Inc,Accredited,https://rdap.gname.com/ -4049,Gname 057 Inc,Accredited,https://rdap.gname.com/ -4050,Gname 058 Inc,Accredited,https://rdap.gname.com/ -4051,Gname 059 Inc,Accredited,https://rdap.gname.com/ -4052,Gname 060 Inc,Accredited,https://rdap.gname.com/ -4053,Gname 061 Inc,Accredited,https://rdap.gname.com/ -4054,Gname 062 Inc,Accredited,https://rdap.gname.com/ -4055,Gname 063 Inc,Accredited,https://rdap.gname.com/ -4056,Gname 064 Inc,Accredited,https://rdap.gname.com/ -4057,Gname 065 Inc,Accredited,https://rdap.gname.com/ -4058,Gname 066 Inc,Accredited,https://rdap.gname.com/ -4059,Gname 067 Inc,Accredited,https://rdap.gname.com/ -4060,Gname 068 Inc,Accredited,https://rdap.gname.com/ -4061,Gname 069 Inc,Accredited,https://rdap.gname.com/ -4062,Gname 070 Inc,Accredited,https://rdap.gname.com/ -4063,Gname 071 Inc,Accredited,https://rdap.gname.com/ -4064,Gname 072 Inc,Accredited,https://rdap.gname.com/ -4065,Gname 073 Inc,Accredited,https://rdap.gname.com/ -4066,Gname 074 Inc,Accredited,https://rdap.gname.com/ -4067,Gname 075 Inc,Accredited,https://rdap.gname.com/ -4068,Gname 076 Inc,Accredited,https://rdap.gname.com/ -4069,Gname 077 Inc,Accredited,https://rdap.gname.com/ -4070,Gname 078 Inc,Accredited,https://rdap.gname.com/ -4071,Gname 079 Inc,Accredited,https://rdap.gname.com/ -4072,Gname 080 Inc,Accredited,https://rdap.gname.com/ -4073,Gname 081 Inc,Accredited,https://rdap.gname.com/ -4074,Gname 082 Inc,Accredited,https://rdap.gname.com/ -4075,Gname 083 Inc,Accredited,https://rdap.gname.com/ -4076,Gname 084 Inc,Accredited,https://rdap.gname.com/ -4077,Gname 085 Inc,Accredited,https://rdap.gname.com/ -4078,Gname 086 Inc,Accredited,https://rdap.gname.com/ -4079,Gname 087 Inc,Accredited,https://rdap.gname.com/ -4080,Gname 088 Inc,Accredited,https://rdap.gname.com/ -4081,Gname 089 Inc,Accredited,https://rdap.gname.com/ -4082,Gname 090 Inc,Accredited,https://rdap.gname.com/ -4083,Gname 091 Inc,Accredited,https://rdap.gname.com/ -4084,Gname 092 Inc,Accredited,https://rdap.gname.com/ -4085,Gname 093 Inc,Accredited,https://rdap.gname.com/ -4086,Gname 094 Inc,Accredited,https://rdap.gname.com/ -4087,Gname 095 Inc,Accredited,https://rdap.gname.com/ -4088,Gname 096 Inc,Accredited,https://rdap.gname.com/ -4089,Gname 097 Inc,Accredited,https://rdap.gname.com/ -4090,Gname 098 Inc,Accredited,https://rdap.gname.com/ -4091,Gname 099 Inc,Accredited,https://rdap.gname.com/ -4092,Gname 100 Inc,Accredited,https://rdap.gname.com/ -4093,Gname 101 Inc,Accredited,https://rdap.gname.com/ -4094,Gname 102 Inc,Accredited,https://rdap.gname.com/ -4095,Gname 103 Inc,Accredited,https://rdap.gname.com/ -4096,Gname 104 Inc,Accredited,https://rdap.gname.com/ -4097,Gname 105 Inc,Accredited,https://rdap.gname.com/ -4098,Gname 106 Inc,Accredited,https://rdap.gname.com/ -4099,Gname 107 Inc,Accredited,https://rdap.gname.com/ -4100,Gname 108 Inc,Accredited,https://rdap.gname.com/ -4101,Gname 109 Inc,Accredited,https://rdap.gname.com/ -4102,Gname 110 Inc,Accredited,https://rdap.gname.com/ -4103,Gname 111 Inc,Accredited,https://rdap.gname.com/ -4104,Gname 112 Inc,Accredited,https://rdap.gname.com/ -4105,Gname 113 Inc,Accredited,https://rdap.gname.com/ -4106,Gname 114 Inc,Accredited,https://rdap.gname.com/ -4107,Gname 115 Inc,Accredited,https://rdap.gname.com/ -4108,Gname 116 Inc,Accredited,https://rdap.gname.com/ -4109,Gname 117 Inc,Accredited,https://rdap.gname.com/ -4110,Gname 118 Inc,Accredited,https://rdap.gname.com/ -4111,Gname 119 Inc,Accredited,https://rdap.gname.com/ -4112,Gname 120 Inc,Accredited,https://rdap.gname.com/ -4113,Gname 121 Inc,Accredited,https://rdap.gname.com/ -4114,Gname 122 Inc,Accredited,https://rdap.gname.com/ -4115,Gname 123 Inc,Accredited,https://rdap.gname.com/ -4116,Gname 124 Inc,Accredited,https://rdap.gname.com/ -4117,Gname 125 Inc,Accredited,https://rdap.gname.com/ -4118,Gname 126 Inc,Accredited,https://rdap.gname.com/ -4119,Gname 127 Inc,Accredited,https://rdap.gname.com/ -4120,Gname 128 Inc,Accredited,https://rdap.gname.com/ -4121,Gname 129 Inc,Accredited,https://rdap.gname.com/ -4122,Gname 130 Inc,Accredited,https://rdap.gname.com/ -4123,Gname 131 Inc,Accredited,https://rdap.gname.com/ -4124,Gname 132 Inc,Accredited,https://rdap.gname.com/ -4125,Gname 133 Inc,Accredited,https://rdap.gname.com/ -4126,Gname 134 Inc,Accredited,https://rdap.gname.com/ -4127,Gname 135 Inc,Accredited,https://rdap.gname.com/ -4128,Gname 136 Inc,Accredited,https://rdap.gname.com/ -4129,Gname 137 Inc,Accredited,https://rdap.gname.com/ -4130,Gname 138 Inc,Accredited,https://rdap.gname.com/ -4131,Gname 139 Inc,Accredited,https://rdap.gname.com/ -4132,Gname 140 Inc,Accredited,https://rdap.gname.com/ -4133,Gname 141 Inc,Accredited,https://rdap.gname.com/ -4134,Gname 142 Inc,Accredited,https://rdap.gname.com/ -4135,Gname 143 Inc,Accredited,https://rdap.gname.com/ -4136,Gname 144 Inc,Accredited,https://rdap.gname.com/ -4137,Gname 145 Inc,Accredited,https://rdap.gname.com/ -4138,Gname 146 Inc,Accredited,https://rdap.gname.com/ -4139,Gname 147 Inc,Accredited,https://rdap.gname.com/ -4140,Gname 148 Inc,Accredited,https://rdap.gname.com/ -4141,Gname 149 Inc,Accredited,https://rdap.gname.com/ -4142,Gname 150 Inc,Accredited,https://rdap.gname.com/ -4143,"Zuffix, Inc.",Accredited,https://rdap.corenic.net/ -4144,C-Soft Oy dba NordName,Accredited,https://rdap.nordname.net/rdap/ -4145,Cluvit Corporation,Accredited, -4146,"Neo Strive, LLC D/B/A Domtake",Accredited,https://rdap.domtake.com/ -4147,Navicosoft Pty Ltd,Accredited,https://manage.navicosoft.com/rdap/ -4148,Nomeo BV,Accredited, -4149,Dnsgulf Pte. Ltd.,Accredited,https://rdap.dnsgulf.com/domain/dnsgulf.com/ -4150,Nominus.com LLC,Accredited,https://rdapserver.net/nominus.com/ -4151,ZDNS Innovate International Limited,Accredited,https://rdap.zdns.hk/ -4157,"Yunnan Landui Cloud Computing Co., Ltd.",Accredited,https://www.landui.com/rdap/domain/ -9994,Reserved for Registry Operator acting as Registrar where directed by ICANN,Reserved, -9995,Reserved for Pre-Delegation Testing transactions #1 reporting,Reserved, -9996,Reserved for Pre-Delegation Testing transactions #2 reporting,Reserved, -9997,Reserved for ICANN's Registry SLA Monitoring System transactions reporting,Reserved, -9998,Reserved for billable transactions where Registry Operator acts as Registrar,Reserved, -9999,Reserved for non-billable transactions where Registry Operator acts as Registrar,Reserved, -10007,Domain The Net Technologies Ltd.,Accredited,https://rdap.domainthenet.com/ -10009,Internet Assigned Numbers Authority (IANA),Reserved, -4000001,Reserved for Historic use by mTLD Registry Operator acting as Registrar,Reserved, -8888888,Reserved for historic use by Registry Operator acting as Registrar,Reserved, diff --git a/analizer/requirements.txt b/analizer/requirements.txt index cc6c664..9177d1e 100644 --- a/analizer/requirements.txt +++ b/analizer/requirements.txt @@ -1,3 +1,3 @@ -dnspython3 +dnspython beautifulsoup4 requests-cache diff --git a/analizer/vtmp/pyvenv.cfg b/analizer/vtmp/pyvenv.cfg index 6cab8ef..fac13eb 100644 --- a/analizer/vtmp/pyvenv.cfg +++ b/analizer/vtmp/pyvenv.cfg @@ -1,3 +1,3 @@ home = /usr/bin include-system-site-packages = false -version = 3.10.19 +version = 3.10.20 diff --git a/bin/upload_to_pypi.sh b/bin/OLD/upload_to_pypi.sh similarity index 100% rename from bin/upload_to_pypi.sh rename to bin/OLD/upload_to_pypi.sh diff --git a/bin/upload_to_pypiTest.sh b/bin/OLD/upload_to_pypiTest.sh similarity index 100% rename from bin/upload_to_pypiTest.sh rename to bin/OLD/upload_to_pypiTest.sh diff --git a/bin/old/reformat-code.sh b/bin/old/reformat-code.sh deleted file mode 100755 index db03a08..0000000 --- a/bin/old/reformat-code.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /bin/bash - -set -x - -doIt() -{ - black --line-length=160 . - pylama --ignore "C0114,C0115"--max-line-length=160 *.py bin/*.py whoisdomain/ | - awk ' - /__init__/ && / W0611/ { next } -# / W0401 / { next } - / E203 / { next } # E203 whitespace before ':' [pycodestyle] - / C901 / { next } # C901 is too complex () [mccabe] - { print } - ' -} - -main() -{ - doIt - - mypy --strict --no-incremental *.py - mypy --strict --no-incremental bin/*.py - mypy --strict --no-incremental whoisdomain -} - -main diff --git a/bin/test.py b/bin/test.py index 9686ad0..ddfdc9c 100755 --- a/bin/test.py +++ b/bin/test.py @@ -1,16 +1,9 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # from: https://github.com/maarten-boot/python-whois-extended import sys -from typing import ( - Optional, - List, -) - - import whoisdomain as whois DOMAINS: str = """ @@ -88,11 +81,11 @@ def query( domain: str, - host: Optional[str] = None, + host: str | None = None, ) -> None: - print("") + print() print("-" * 80) - print("Domain: {0}, host: {1}".format(domain, host)) + print(f"Domain: {domain}, host: {host}") timout = 30 # seconds try: @@ -121,7 +114,7 @@ def parse(data: str) -> None: query(data) return - dList: List[str] = data.split(",") + dList: list[str] = data.split(",") if len(dList) == 1: query(dList[0]) diff --git a/bin/testTestPyPiUpload.sh b/bin/testTestPyPiUpload.sh index f6b1471..71aeba9 100755 --- a/bin/testTestPyPiUpload.sh +++ b/bin/testTestPyPiUpload.sh @@ -2,7 +2,7 @@ set -x -time=300 +time=60 # 1 minute VERSION=$( cat ./work/version ) WHAT="whoisdomain" @@ -19,11 +19,6 @@ makeVenv() source ./${ENV}/bin/activate } -installFromDistWhl() -{ - pip3 install dist/${WHAT}-${VERSION}-py3-none-any.whl -} - installFromTestPyPi() { sleep $time @@ -34,35 +29,29 @@ installFromTestPyPi() done } -getInstalledVersion() +main() { - # after install - WE_HAVE=$( whoisdomain -V ) + [ ! -f "${PACKAGE_FILE}" ] && { + echo "$(basename $0) missing whl file ${PACKAGE_FILE}" >&2 + exit 101 + } + makeVenv + + installFromTestPyPi + + local WE_HAVE=$( whoisdomain -V ) echo "$WE_HAVE" >&2 -} -testAllIfCorrectVersion() -{ [ "$WE_HAVE" == "$VERSION" ] && { - whoisdomain -f testdata/DOMAINS.txt --withPublicSuffix --extractServers --stripHttpStatus - # clean up the venv - rm -rf ${ENV} - exit 0 - } -} - -main() -{ - [ -f "${PACKAGE_FILE}" ] && { - makeVenv - # installFromDistWhl - installFromTestPyPi - getInstalledVersion - testAllIfCorrectVersion + whoisdomain \ + -f testdata/DOMAINS.txt \ + --withPublicSuffix \ + --extractServers \ + --stripHttpStatus } - echo "$(basename $0) Failed" >&2 - exit 101 + # clean up the venv + rm -rf ${ENV} } main diff --git a/bin/test_adjust.py b/bin/test_adjust.py index 8ef8bc9..0e82caf 100755 --- a/bin/test_adjust.py +++ b/bin/test_adjust.py @@ -1,15 +1,11 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # from https://github.com/maarten-boot/python-whois-extended -from whoisdomain.handleDateStrings import str_to_date -from typing import ( - List, -) +from whoisdomain.handleDateStrings import str_to_date -TEST_DATETIMES: List[str] = [ +TEST_DATETIMES: list[str] = [ "02-jan-2000", "02.02.2000", "01/06/2011", diff --git a/pylint.txt b/pylint.txt index 67b55d4..1a74f88 100644 --- a/pylint.txt +++ b/pylint.txt @@ -1,22 +1 @@ -whoisdomain/domain.py:22:1 R0902 Too many instance attributes (22/20) [pylint] -whoisdomain/processWhoisDomainRequest.py:38:5 R0917 Too many positional arguments (6/5) [pylint] -whoisdomain/processWhoisDomainRequest.py:54:5 C901 'ProcessWhoisDomainRequest._analyzeDomainStringAndValidate' is too complex (11) [mccabe] -whoisdomain/processWhoisDomainRequest.py:168:16 W0718 Catching too general exception Exception [pylint] -whoisdomain/processWhoisDomainRequest.py:207:5 C901 'ProcessWhoisDomainRequest._prepRequest' is too complex (11) [mccabe] -whoisdomain/processWhoisDomainRequest.py:305:13 W1203 Use lazy % formatting in logging functions [pylint] -whoisdomain/main.py:119:5 C901 'ResponseCleaner.cleanupWhoisResponse' is too complex (11) [mccabe] -whoisdomain/main.py:305:1 C901 'testDomains' is too complex (13) [mccabe] -whoisdomain/main.py:549:1 C901 'main' is too complex (44) [mccabe] -whoisdomain/whoisParser.py:183:82 E203 whitespace before ':' [pycodestyle] -whoisdomain/whoisParser.py:281:5 C901 'WhoisParser._cleanupWhoisResponse' is too complex (11) [mccabe] -whoisdomain/__init__.py:19:1 W0611 'typing.cast' imported but unused [pyflakes] -whoisdomain/__init__.py:39:1 W0611 '.tldInfo.TldInfo' imported but unused [pyflakes] -whoisdomain/__init__.py:46:1 W0611 '.tldDb.tld_regexpr.ZZ' imported but unused [pyflakes] -whoisdomain/__init__.py:77:5 W0611 'redis' imported but unused [pyflakes] -whoisdomain/__init__.py:98:5 W0611 'tld as libTld' imported but unused [pyflakes] -whoisdomain/__init__.py:182:20 W0718 Catching too general exception Exception [pylint] -whoisdomain/__init__.py:205:13 R1722 Consider using 'sys.exit' instead [pylint] -whoisdomain/__init__.py:269:1 R0917 Too many positional arguments (24/5) [pylint] -whoisdomain/procFunc.py:68:9 W0719 Raising too general exception: Exception [pylint] -whoisdomain/tldDb/finders.py:26:5 W0101 Unreachable code [pylint] -whoisdomain/tldDb/finders.py:161:1 R0917 Too many positional arguments (6/5) [pylint] +switch to ruff diff --git a/pyproject.toml b/pyproject.toml index 6e9dbb6..ede4d50 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ description = "Python package for retrieving WHOIS information of domains." readme = "README.md" - requires-python = ">3.6" + requires-python = ">=3.10" license = "MIT" @@ -68,6 +68,123 @@ "/.gitignore", ] -[tool.pylama] - max_line_length = 160 - skip = "*/.pytest_cache/*, */.tox/*, */mypy_cache/*, ./dist, ./docs" +[tool.ruff] + target-version = "py310" + line-length = 160 + exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".mypy_cache", + ".nox", + ".pants.d", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "venv", + ] + +[tool.ruff.lint] + select = [ + "AIR", + "FAST", + "YTT", + "ASYNC", + "S1", "S2", "S302", "S303", "S304", "S305", "S306", "S307", "S31", "S32", "S401", "S402", "S406", "S407", "S408", "S409", "S41", "S5", "S601", "S602", "S604", "S605", "S606", "S607", "S609", "S61", "S7", + "FBT", + "B00", "B01", "B020", "B021", "B022", "B023", "B025", "B027", "B028", "B029", "B03", "B901", "B903", "B905", "B911", + "A", + "COM", + "C4", + "DTZ003", "DTZ004", "DTZ012", "DTZ901", + "T10", + "DJ003", "DJ01", + "EM", + "EXE", + "FIX", + "FA", + "INT", + "ISC", + "ICN", + "LOG", + "G001", "G002", "G01", "G1", "G2", + "INP", + "PIE", + "T20", + "PYI", + "PT", + "Q", + "RSE", + "RET", + "SIM", + "SLOT", + "TID", + "TD001", "TD004", "TD005", "TD007", + "TC", + "ARG003", "ARG004", "ARG005", + "PTH", + "FLY", + "I", + "C90", + "NPY", + "PD", + "N803", "N804", "N805", "N811", "N812", "N813", "N814", "N817", "N818", "N999", + "PERF1", "PERF2", "PERF401", + "E", + "W", + "DOC202", "DOC403", "DOC502", + "D2", "D3", "D402", "D403", "D405", "D406", "D407", "D408", "D409", "D410", "D411", "D412", "D413", "D414", "D416", + "F", + "PGH", + "PLC", + "PLE", + "PLR01", "PLR02", "PLR04", "PLR0915", "PLR1711", "PLR1704", "PLR1714", "PLR1716", "PLR172", "PLR173", "PLR2044", "PLR5", "PLR6104", "PLR6201", + "PLW", + "UP", + "FURB", + "RUF", + "TRY003", "TRY004", "TRY2", "TRY300", "TRY401", + ] + + ignore = [ + # ignore for now: + "S101", "N803", "N999", "PLR6201", + "S602", "FBT002", "FBT001", "RUF001", "N812", "PLW0603", "PLW0602", + "PLW2901", "PIE810", "PERF203", "FIX004", "N818", + "RUF067", + # end for now. + "COM812", "D203", + "T201", # print statements are ok + "SIM102", + "RUF012", + "D205", + "FIX002", # TODOs need some love but we will probably not get of them + "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible. + "PT028", # experimental rule, incomplete + ] + + # Allow autofix for all enabled rules (when `--fix`) is provided. + fixable = ["ALL"] + unfixable = [] + preview = true + +[tool.ruff.lint.per-file-ignores] + +[tool.ruff.lint.flake8-boolean-trap] + +[tool.ruff.lint.pylint] + max-statements = 234 + +[tool.ruff.lint.mccabe] + max-complexity = 70 # value is far from perfect (recommended default is 10). But we will try to decrease it over the time. diff --git a/t1.py b/t1.py index d6a9f94..9a51bb2 100755 --- a/t1.py +++ b/t1.py @@ -1,7 +1,6 @@ #! /usr/bin/env python3 - import os - +import sys from typing import Any from whoisdomain import ProcFunc @@ -20,7 +19,7 @@ def remoteFunc( conn.send(reply) except EOFError as e: _ = e - exit(0) + sys.exit(0) if n >= max_requests: break diff --git a/testProc.py b/testProc.py index 1501b92..1875161 100755 --- a/testProc.py +++ b/testProc.py @@ -17,12 +17,9 @@ def main() -> None: restart_after_count: int = 100 f = pf.makeHandler(whoisdomain.remoteQ2, restart_after_count) - n = 0 - for tld in whoisdomain.validTlds(): - n += 1 + for n, tld in enumerate(whoisdomain.validTlds(), start=1): domain = whoisdomain.getTestHint(tld) - domain = domain if domain else f"meta.{tld}" - + domain = domain or f"meta.{tld}" try: print(f"# try: {domain}") pc = whoisdomain.ParameterContext() diff --git a/testdata/domena.pl/input b/testdata/domena.pl/input new file mode 100644 index 0000000..1106154 --- /dev/null +++ b/testdata/domena.pl/input @@ -0,0 +1,27 @@ +DOMAIN NAME: domena.pl +registrant type: organization +nameservers: ns1.domena.pl. [193.239.44.33] + ns2.domena.pl. [91.234.176.240] + ns3.domena.pl. [195.110.49.49] +created: 1999.05.20 01:00:00 +last modified: 2022.03.02 11:00:20 +renewal date: 2032.05.19 00:00:00 + +option created: 2020.05.02 12:01:14 +option expiration date: 2026.05.02 12:01:14 + +dnssec: Unsigned + +REGISTRAR: +Domena.pl sp. z o.o. +ul. Gdanska 119 +85-022 Bydgoszcz +Polska/Poland +Tel: +48.523667777 +Tel: +48.523667788 +https://www.domena.pl/ +bok@domena.pl + +WHOIS database responses: https://dns.pl/en/whois + +WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system diff --git a/testdata/google.be/input b/testdata/google.be/input new file mode 100644 index 0000000..d7fb371 --- /dev/null +++ b/testdata/google.be/input @@ -0,0 +1,61 @@ +% .be Whois Server 6.1 +% +% The WHOIS service offered by DNS Belgium and the access to the records in the DNS Belgium +% 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. +% +% DNS Belgium cannot, under any circumstances, be held liable where the stored +% information would prove to be incomplete or inaccurate 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; +% - to cause nuisance in any possible way to the domain name holders by sending +% messages to them (whether by automated, electronic processes capable of +% enabling high volumes or 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 DNS Belgium, nor in any attempt thereof, to apply automated, electronic +% processes to DNS Belgium (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 +% DNS Belgium 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. +% + +Domain: google.be +Status: NOT AVAILABLE +Registered: Tue Dec 12 2000 + +Registrant: + Not shown, please visit www.dnsbelgium.be for webbased whois. + +Registrar Technical Contacts: + +Registrar: + Name: Markmonitor Inc. + Website: https://www.markmonitor.com + +Nameservers: + ns3.google.com + ns1.google.com + ns2.google.com + ns4.google.com + +Keys: + +Flags: + clientTransferProhibited + +Please visit www.dnsbelgium.be for more info. diff --git a/testdata/wp.pl/input b/testdata/wp.pl/input new file mode 100644 index 0000000..e775b2c --- /dev/null +++ b/testdata/wp.pl/input @@ -0,0 +1,25 @@ +DOMAIN NAME: wp.pl +registrant type: organization +nameservers: ns1.wp.pl. [212.77.106.200] + ns2.wp.pl. [153.19.88.162] +created: 1998.04.28 13:00:00 +last modified: 2026.02.18 14:22:40 +renewal date: 2027.04.27 14:00:00 + +option created: 2026.02.10 10:51:12 +option expiration date: 2029.02.10 10:51:12 + +dnssec: Unsigned + +REGISTRAR: +AZ.pl Sp. z o.o. +ul. Zbozowa 4 +70-653 Szczecin +Polska/Poland +Tel: +48.914243780 +https://az.pl/ +domena@az.pl + +WHOIS database responses: https://dns.pl/en/whois + +WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system diff --git a/tests/Makefile b/tests/Makefile index a8503e8..5554d3e 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,13 +1,13 @@ google: - ./test-google-tld.py 2>2 | tee 1 + /usr/bin/python3 ./test-google-tld.py 2>2 | tee 1 redacted: # show redacted output anyway - ./testWithRedacted.py + /usr/bin/python3 ./testWithRedacted.py fr: - ./testFr.py + /usr/bin/python3 ./testFr.py cache: - ./testCache.py + /usr/bin/python3 ./testCache.py diff --git a/tests/memtest.py b/tests/memtest.py index 420a9b9..953e96c 100755 --- a/tests/memtest.py +++ b/tests/memtest.py @@ -1,20 +1,17 @@ #! /usr/bin/env python3 -from typing import ( - Optional, - List, -) -import sys import gc import re +import sys re._MAXCACHE = 1 -from memory_profiler import profile -from collections import defaultdict +from collections import defaultdict # noqa: E402 + +from memory_profiler import profile # noqa: E402 sys.path.append("..") -import whoisdomain +import whoisdomain # noqa: E402 domains = [ "google.com", @@ -44,13 +41,13 @@ ] -def getAllCurrentTld() -> List[str]: +def getAllCurrentTld() -> list[str]: return whoisdomain.validTlds() def appendHint( - rr: List[str], - allRegex: Optional[str], + rr: list[str], + allRegex: str | None, tld: str, ) -> None: hint = whoisdomain.getTestHint(tld) @@ -59,9 +56,9 @@ def appendHint( def makeTestAllCurrentTld( - allRegex: Optional[str] = None, -) -> List[str]: - rr: List[str] = [] + allRegex: str | None = None, +) -> list[str]: + rr: list[str] = [] for tld in getAllCurrentTld(): if allRegex is None: appendHint(rr, allRegex, tld) diff --git a/tests/test-facebook-tld.py b/tests/test-facebook-tld.py index f59eac0..a9c309c 100755 --- a/tests/test-facebook-tld.py +++ b/tests/test-facebook-tld.py @@ -1,23 +1,19 @@ #! /usr/bin/env python3 import sys -import requests sys.path.append("..") -import whoisdomain - from typing import ( - List, - Dict, - Optional, cast, ) +import whoisdomain + def getDomains( url: str, verbose: bool = False, -) -> List[str]: +) -> list[str]: return [ "facebook.cn", "facebook.com", @@ -52,7 +48,7 @@ def getDomains( def getOneRegistrant( domain: str, - registrants: Dict[str | None, List[str]], + registrants: dict[str | None, list[str]], verbose: bool = False, ) -> None: try: @@ -88,13 +84,13 @@ def xMain() -> None: verbose: bool = True url: str = "https://www.google.com/supported_domains" - domains: List[str] = getDomains(url, verbose) - registrants: Dict[str | None, List[str]] = {} + domains: list[str] = getDomains(url, verbose) + registrants: dict[str | None, list[str]] = {} for domain in domains: getOneRegistrant(domain, registrants, verbose) - ll = cast(List[str], registrants.keys()) + ll = cast("list[str]", registrants.keys()) for k in sorted(ll): print(k, registrants[k]) diff --git a/tests/test-google-tld.py b/tests/test-google-tld.py index b310b4b..3d17499 100755 --- a/tests/test-google-tld.py +++ b/tests/test-google-tld.py @@ -1,33 +1,30 @@ #! /usr/bin/env python3 import sys + import requests sys.path.append("..") -import whoisdomain - from typing import ( - List, - Dict, - Optional, cast, ) +import whoisdomain + def getDomains( url: str, verbose: bool = False, -) -> List[str]: - r = requests.get(url) +) -> list[str]: + r = requests.get(url, timeout=300) if verbose: print(r.text, file=sys.stderr) - domains = [domain[1:] for domain in r.text.splitlines()] - return domains + return [domain[1:] for domain in r.text.splitlines()] def getOneRegistrant( domain: str, - registrants: Dict[str | None, List[str]], + registrants: dict[str | None, list[str]], verbose: bool = False, ) -> None: try: @@ -66,8 +63,8 @@ def xMain() -> None: verbose: bool = True url: str = "https://www.google.com/supported_domains" - domains: List[str] = getDomains(url, verbose) - registrants: Dict[str | None, List[str]] = {} + domains: list[str] = getDomains(url, verbose) + registrants: dict[str | None, list[str]] = {} for domain in domains: getOneRegistrant( @@ -76,7 +73,7 @@ def xMain() -> None: verbose, ) - ll = cast(List[str], registrants.keys()) + ll = cast("list[str]", registrants.keys()) for k in sorted(ll): print(k, registrants[k]) diff --git a/tests/testCache.py b/tests/testCache.py index 729c42b..9f9424d 100755 --- a/tests/testCache.py +++ b/tests/testCache.py @@ -5,7 +5,6 @@ sys.path.append("..") import whoisdomain - print("TEST: manually setup a cache", file=sys.stderr) verbose: bool = True diff --git a/tests/testFR.py b/tests/testFR.py index eff564f..02cd6de 100755 --- a/tests/testFR.py +++ b/tests/testFR.py @@ -10,7 +10,7 @@ if w_fr is None or w_com is None: print("NO DATA FOUND") - exit(101) + sys.exit(101) print("TEST registrant organization: will fail if test fails") assert w_fr.registrant == "SOCIETE FRANCAISE DU RADIOTELEPHONE - SFR" diff --git a/vtmp/bin/Activate.ps1 b/vtmp/bin/Activate.ps1 deleted file mode 100644 index b49d77b..0000000 --- a/vtmp/bin/Activate.ps1 +++ /dev/null @@ -1,247 +0,0 @@ -<# -.Synopsis -Activate a Python virtual environment for the current PowerShell session. - -.Description -Pushes the python executable for a virtual environment to the front of the -$Env:PATH environment variable and sets the prompt to signify that you are -in a Python virtual environment. Makes use of the command line switches as -well as the `pyvenv.cfg` file values present in the virtual environment. - -.Parameter VenvDir -Path to the directory that contains the virtual environment to activate. The -default value for this is the parent of the directory that the Activate.ps1 -script is located within. - -.Parameter Prompt -The prompt prefix to display when this virtual environment is activated. By -default, this prompt is the name of the virtual environment folder (VenvDir) -surrounded by parentheses and followed by a single space (ie. '(.venv) '). - -.Example -Activate.ps1 -Activates the Python virtual environment that contains the Activate.ps1 script. - -.Example -Activate.ps1 -Verbose -Activates the Python virtual environment that contains the Activate.ps1 script, -and shows extra information about the activation as it executes. - -.Example -Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv -Activates the Python virtual environment located in the specified location. - -.Example -Activate.ps1 -Prompt "MyPython" -Activates the Python virtual environment that contains the Activate.ps1 script, -and prefixes the current prompt with the specified string (surrounded in -parentheses) while the virtual environment is active. - -.Notes -On Windows, it may be required to enable this Activate.ps1 script by setting the -execution policy for the user. You can do this by issuing the following PowerShell -command: - -PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - -For more information on Execution Policies: -https://go.microsoft.com/fwlink/?LinkID=135170 - -#> -Param( - [Parameter(Mandatory = $false)] - [String] - $VenvDir, - [Parameter(Mandatory = $false)] - [String] - $Prompt -) - -<# Function declarations --------------------------------------------------- #> - -<# -.Synopsis -Remove all shell session elements added by the Activate script, including the -addition of the virtual environment's Python executable from the beginning of -the PATH variable. - -.Parameter NonDestructive -If present, do not remove this function from the global namespace for the -session. - -#> -function global:deactivate ([switch]$NonDestructive) { - # Revert to original values - - # The prior prompt: - if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { - Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt - Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT - } - - # The prior PYTHONHOME: - if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { - Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME - Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME - } - - # The prior PATH: - if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { - Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH - Remove-Item -Path Env:_OLD_VIRTUAL_PATH - } - - # Just remove the VIRTUAL_ENV altogether: - if (Test-Path -Path Env:VIRTUAL_ENV) { - Remove-Item -Path env:VIRTUAL_ENV - } - - # Just remove VIRTUAL_ENV_PROMPT altogether. - if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { - Remove-Item -Path env:VIRTUAL_ENV_PROMPT - } - - # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: - if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { - Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force - } - - # Leave deactivate function in the global namespace if requested: - if (-not $NonDestructive) { - Remove-Item -Path function:deactivate - } -} - -<# -.Description -Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the -given folder, and returns them in a map. - -For each line in the pyvenv.cfg file, if that line can be parsed into exactly -two strings separated by `=` (with any amount of whitespace surrounding the =) -then it is considered a `key = value` line. The left hand string is the key, -the right hand is the value. - -If the value starts with a `'` or a `"` then the first and last character is -stripped from the value before being captured. - -.Parameter ConfigDir -Path to the directory that contains the `pyvenv.cfg` file. -#> -function Get-PyVenvConfig( - [String] - $ConfigDir -) { - Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" - - # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). - $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue - - # An empty map will be returned if no config file is found. - $pyvenvConfig = @{ } - - if ($pyvenvConfigPath) { - - Write-Verbose "File exists, parse `key = value` lines" - $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath - - $pyvenvConfigContent | ForEach-Object { - $keyval = $PSItem -split "\s*=\s*", 2 - if ($keyval[0] -and $keyval[1]) { - $val = $keyval[1] - - # Remove extraneous quotations around a string value. - if ("'""".Contains($val.Substring(0, 1))) { - $val = $val.Substring(1, $val.Length - 2) - } - - $pyvenvConfig[$keyval[0]] = $val - Write-Verbose "Adding Key: '$($keyval[0])'='$val'" - } - } - } - return $pyvenvConfig -} - - -<# Begin Activate script --------------------------------------------------- #> - -# Determine the containing directory of this script -$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition -$VenvExecDir = Get-Item -Path $VenvExecPath - -Write-Verbose "Activation script is located in path: '$VenvExecPath'" -Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" -Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" - -# Set values required in priority: CmdLine, ConfigFile, Default -# First, get the location of the virtual environment, it might not be -# VenvExecDir if specified on the command line. -if ($VenvDir) { - Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" -} -else { - Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." - $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") - Write-Verbose "VenvDir=$VenvDir" -} - -# Next, read the `pyvenv.cfg` file to determine any required value such -# as `prompt`. -$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir - -# Next, set the prompt from the command line, or the config file, or -# just use the name of the virtual environment folder. -if ($Prompt) { - Write-Verbose "Prompt specified as argument, using '$Prompt'" -} -else { - Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" - if ($pyvenvCfg -and $pyvenvCfg['prompt']) { - Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" - $Prompt = $pyvenvCfg['prompt']; - } - else { - Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" - Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" - $Prompt = Split-Path -Path $venvDir -Leaf - } -} - -Write-Verbose "Prompt = '$Prompt'" -Write-Verbose "VenvDir='$VenvDir'" - -# Deactivate any currently active virtual environment, but leave the -# deactivate function in place. -deactivate -nondestructive - -# Now set the environment variable VIRTUAL_ENV, used by many tools to determine -# that there is an activated venv. -$env:VIRTUAL_ENV = $VenvDir - -if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { - - Write-Verbose "Setting prompt to '$Prompt'" - - # Set the prompt to include the env name - # Make sure _OLD_VIRTUAL_PROMPT is global - function global:_OLD_VIRTUAL_PROMPT { "" } - Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT - New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt - - function global:prompt { - Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " - _OLD_VIRTUAL_PROMPT - } - $env:VIRTUAL_ENV_PROMPT = $Prompt -} - -# Clear PYTHONHOME -if (Test-Path -Path Env:PYTHONHOME) { - Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME - Remove-Item -Path Env:PYTHONHOME -} - -# Add the venv to the PATH -Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH -$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/vtmp/bin/activate b/vtmp/bin/activate deleted file mode 100644 index fedc3fb..0000000 --- a/vtmp/bin/activate +++ /dev/null @@ -1,69 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# you cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # This should detect bash and zsh, which have a hash command that must - # be called to get it to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r 2> /dev/null - fi - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - unset VIRTUAL_ENV_PROMPT - if [ ! "${1:-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -VIRTUAL_ENV=/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp -export VIRTUAL_ENV - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/"bin":$PATH" -export PATH - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - PS1='(vtmp) '"${PS1:-}" - export PS1 - VIRTUAL_ENV_PROMPT='(vtmp) ' - export VIRTUAL_ENV_PROMPT -fi - -# This should detect bash and zsh, which have a hash command that must -# be called to get it to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r 2> /dev/null -fi diff --git a/vtmp/bin/activate.csh b/vtmp/bin/activate.csh deleted file mode 100644 index 030d5ba..0000000 --- a/vtmp/bin/activate.csh +++ /dev/null @@ -1,26 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. -# Created by Davide Di Blasi . -# Ported to Python 3.3 venv by Andrew Svetlov - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV /home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/"bin":$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = '(vtmp) '"$prompt" - setenv VIRTUAL_ENV_PROMPT '(vtmp) ' -endif - -alias pydoc python -m pydoc - -rehash diff --git a/vtmp/bin/activate.fish b/vtmp/bin/activate.fish deleted file mode 100644 index cf20bca..0000000 --- a/vtmp/bin/activate.fish +++ /dev/null @@ -1,69 +0,0 @@ -# This file must be used with "source /bin/activate.fish" *from fish* -# (https://fishshell.com/); you cannot run it directly. - -function deactivate -d "Exit virtual environment and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - set -e _OLD_FISH_PROMPT_OVERRIDE - # prevents error when using nested fish instances (Issue #93858) - if functions -q _old_fish_prompt - functions -e fish_prompt - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - end - - set -e VIRTUAL_ENV - set -e VIRTUAL_ENV_PROMPT - if test "$argv[1]" != "nondestructive" - # Self-destruct! - functions -e deactivate - end -end - -# Unset irrelevant variables. -deactivate nondestructive - -set -gx VIRTUAL_ENV /home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/"bin $PATH - -# Unset PYTHONHOME if set. -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # Save the current fish_prompt function as the function _old_fish_prompt. - functions -c fish_prompt _old_fish_prompt - - # With the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command. - set -l old_status $status - - # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s%s%s" (set_color 4B8BBE) '(vtmp) ' (set_color normal) - - # Restore the return status of the previous command. - echo "exit $old_status" | . - # Output the original/"old" prompt. - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" - set -gx VIRTUAL_ENV_PROMPT '(vtmp) ' -end diff --git a/vtmp/bin/dmypy b/vtmp/bin/dmypy deleted file mode 100755 index 68fb3b1..0000000 --- a/vtmp/bin/dmypy +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from mypy.dmypy.client import console_entry -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(console_entry()) diff --git a/vtmp/bin/mypy b/vtmp/bin/mypy deleted file mode 100755 index 161d69a..0000000 --- a/vtmp/bin/mypy +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from mypy.__main__ import console_entry -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(console_entry()) diff --git a/vtmp/bin/mypyc b/vtmp/bin/mypyc deleted file mode 100755 index f6986a3..0000000 --- a/vtmp/bin/mypyc +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from mypyc.__main__ import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/pip b/vtmp/bin/pip deleted file mode 100755 index 2092739..0000000 --- a/vtmp/bin/pip +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/pip3 b/vtmp/bin/pip3 deleted file mode 100755 index 2092739..0000000 --- a/vtmp/bin/pip3 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/pip3.10 b/vtmp/bin/pip3.10 deleted file mode 100755 index 2092739..0000000 --- a/vtmp/bin/pip3.10 +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/python b/vtmp/bin/python deleted file mode 120000 index c3cc991..0000000 --- a/vtmp/bin/python +++ /dev/null @@ -1 +0,0 @@ -python3.10 \ No newline at end of file diff --git a/vtmp/bin/python3 b/vtmp/bin/python3 deleted file mode 120000 index c3cc991..0000000 --- a/vtmp/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -python3.10 \ No newline at end of file diff --git a/vtmp/bin/python3.10 b/vtmp/bin/python3.10 deleted file mode 120000 index 5202249..0000000 --- a/vtmp/bin/python3.10 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python3.10 \ No newline at end of file diff --git a/vtmp/bin/stubgen b/vtmp/bin/stubgen deleted file mode 100755 index 59b788c..0000000 --- a/vtmp/bin/stubgen +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from mypy.stubgen import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/stubtest b/vtmp/bin/stubtest deleted file mode 100755 index aa73e9c..0000000 --- a/vtmp/bin/stubtest +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from mypy.stubtest import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/vtmp/bin/update-tld-names b/vtmp/bin/update-tld-names deleted file mode 100755 index 915bcdd..0000000 --- a/vtmp/bin/update-tld-names +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/mboot/DEV/00-github.com/mboot-github/WhoisDomain/vtmp/bin/python3.10 -# -*- coding: utf-8 -*- -import re -import sys -from tld.utils import update_tld_names_cli -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(update_tld_names_cli()) diff --git a/vtmp/lib64 b/vtmp/lib64 deleted file mode 120000 index 7951405..0000000 --- a/vtmp/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/vtmp/pyvenv.cfg b/vtmp/pyvenv.cfg deleted file mode 100644 index 6cab8ef..0000000 --- a/vtmp/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.10.19 diff --git a/whoisdomain/__init__.py b/whoisdomain/__init__.py old mode 100755 new mode 100644 index a46e813..bb31023 --- a/whoisdomain/__init__.py +++ b/whoisdomain/__init__.py @@ -9,72 +9,59 @@ All public data is vizible via the __all__ List """ -import sys -import os -import logging import gc - +import logging +import os +import sys from functools import wraps +from typing import Any -from typing import ( - cast, - Optional, - List, - Dict, - Tuple, - Any, - Callable, -) - +from .cache.dbmCache import DBMCache +from .cache.dummyCache import DummyCache +from .cache.simpleCacheBase import SimpleCacheBase +from .cache.simpleCacheWithFile import SimpleCacheWithFile +from .context.dataContext import DataContext +from .context.parameterContext import ParameterContext +from .domain import Domain +from .doWhoisCommand import setMyCache from .exceptions import ( - UnknownTld, FailedParsingWhoisOutput, UnknownDateFormat, + UnknownTld, WhoisCommandFailed, + WhoisCommandTimeout, WhoisPrivateRegistry, WhoisQuotaExceeded, - WhoisCommandTimeout, ) - -from .tldInfo import TldInfo -from .version import VERSION -from .processWhoisDomainRequest import ProcessWhoisDomainRequest -from .doWhoisCommand import setMyCache -from .domain import Domain -from .strings.noneStrings import NoneStrings, NoneStringsAdd -from .strings.quotaStrings import QuotaStrings, QuotaStringsAdd -from .tldDb.tld_regexpr import ZZ -from .context.dataContext import DataContext -from .context.parameterContext import ParameterContext -from .cache.simpleCacheBase import SimpleCacheBase -from .cache.simpleCacheWithFile import SimpleCacheWithFile -from .cache.dummyCache import DummyCache -from .cache.dbmCache import DBMCache -from .whoisParser import WhoisParser -from .whoisCliInterface import WhoisCliInterface -from .procFunc import ProcFunc - from .helpers import ( + cleanupWhoisResponse, filterTldToSupportedPattern, - mergeExternalDictWithRegex, - validTlds, get_TLD_RE, - getVersion, getTestHint, - cleanupWhoisResponse, + getVersion, + mergeExternalDictWithRegex, + validTlds, ) - from .lastWhois import ( get_last_raw_whois_data, initLastWhois, ) +from .processWhoisDomainRequest import ProcessWhoisDomainRequest +from .procFunc import ProcFunc +from .strings.noneStrings import NoneStrings, NoneStringsAdd +from .strings.quotaStrings import QuotaStrings, QuotaStringsAdd +from .tldDb.tld_regexpr import ZZ +from .tldInfo import TldInfo +from .version import VERSION +from .whoisCliInterface import WhoisCliInterface +from .whoisParser import WhoisParser log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) HAS_REDIS = False try: - import redis + import redis # noqa: F401 HAS_REDIS = True except ImportError as e: @@ -95,61 +82,53 @@ TLD_LIB_PRESENT: bool = False try: - import tld as libTld + import tld as libTld # noqa: F401 TLD_LIB_PRESENT = True except ImportError as e: _ = e # ignore any error __all__ = [ - # from exceptions - "UnknownTld", + "VERSION", + "ZZ", + "DBMCache", + "DummyCache", "FailedParsingWhoisOutput", + "NoneStrings", + "NoneStringsAdd", + "ParameterContext", + "ProcFunc", + "QuotaStrings", + "QuotaStringsAdd", + "RedisCache", + "SimpleCacheBase", + "SimpleCacheWithFile", + "TldInfo", "UnknownDateFormat", + "UnknownTld", "WhoisCommandFailed", + "WhoisCommandTimeout", "WhoisPrivateRegistry", "WhoisQuotaExceeded", - "WhoisCommandTimeout", - # from helpers - "validTlds", - "mergeExternalDictWithRegex", + "cleanupWhoisResponse", "filterTldToSupportedPattern", - "get_TLD_RE", - "getVersion", "getTestHint", - "cleanupWhoisResponse", # we will drop this most likely - # from version - "VERSION", - # from parameterContext - "ParameterContext", - # from this file - "query", - "q2", - # from lastWhois + "getVersion", + "get_TLD_RE", "get_last_raw_whois_data", - # from doWhoisCommand - "setMyCache", # to build your own caching interface - # from doParse - "NoneStrings", - "NoneStringsAdd", - "QuotaStrings", - "QuotaStringsAdd", - # from Cache - "SimpleCacheBase", - "SimpleCacheWithFile", - "DummyCache", - "DBMCache", - "RedisCache", - # from procFunc - "ProcFunc", + "mergeExternalDictWithRegex", + "q2", + "query", + "setMyCache", + "validTlds", ] def _result2dict(func: Any) -> Any: @wraps(func) - def _inner(*args: str, **kw: Any) -> Dict[str, Any]: + def _inner(*args: str, **kw: Any) -> dict[str, Any]: r = func(*args, **kw) - return r and vars(r) or {} + return (r and vars(r)) or {} return _inner @@ -162,7 +141,7 @@ def remoteQ2( n: int = 0 while True: n += 1 - reply: Dict[str, Any] = {} + reply: dict[str, Any] = {} try: # unpicle the request @@ -202,7 +181,7 @@ def remoteQ2( except EOFError as e: # if the caller is done so are we _ = e - exit(0) + sys.exit(0) if n >= max_requests: break @@ -211,7 +190,7 @@ def remoteQ2( def q2( domain: str, pc: ParameterContext, -) -> Optional[Domain]: +) -> Domain | None: if pc.verbose is True: os.putenv("LOGLEVEL", "DEBUG") os.environ["LOGLEVEL"] = "DEBUG" @@ -269,22 +248,22 @@ def q2( def query( domain: str, force: bool = False, - cache_file: Optional[str] = None, + cache_file: str | None = None, cache_age: int = 60 * 60 * 48, slow_down: int = 0, ignore_returncode: bool = False, - server: Optional[str] = None, + server: str | None = None, verbose: bool = False, with_cleanup_results: bool = False, internationalized: bool = False, include_raw_whois_text: bool = False, return_raw_text_for_unsupported_tld: bool = False, - timeout: Optional[float] = None, + timeout: float | None = None, parse_partial_response: bool = False, cmd: str = "whois", simplistic: bool = False, withRedacted: bool = False, - pc: Optional[ParameterContext] = None, + pc: ParameterContext | None = None, tryInstallMissingWhoisOnWindows: bool = False, shortResponseLen: int = 5, withPublicSuffix: bool = False, @@ -292,7 +271,7 @@ def query( stripHttpStatus: bool = False, noIgnoreWww: bool = False, # if you use pc as argument all above params (except domain are ignored) -) -> Optional[Domain]: +) -> Domain | None: # see documentation about paramaters in parameterContext.py assert isinstance(domain, str), Exception("`domain` - must be ") diff --git a/whoisdomain/cache/dbmCache.py b/whoisdomain/cache/dbmCache.py index 4d14770..330899f 100644 --- a/whoisdomain/cache/dbmCache.py +++ b/whoisdomain/cache/dbmCache.py @@ -1,11 +1,6 @@ -# import sys import dbm -import os import logging - -from typing import ( - Optional, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -23,7 +18,7 @@ def __init__( def get( self, keyString: str, - ) -> Optional[str]: + ) -> str | None: msg = f"{type(self).__name__} get: {keyString}" log.debug(msg) diff --git a/whoisdomain/cache/dummyCache.py b/whoisdomain/cache/dummyCache.py index e3c10bc..2a63781 100644 --- a/whoisdomain/cache/dummyCache.py +++ b/whoisdomain/cache/dummyCache.py @@ -1,10 +1,5 @@ -# import sys -import os import logging - -from typing import ( - Optional, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -20,7 +15,7 @@ def __init__( def get( self, keyString: str, - ) -> Optional[str]: + ) -> str | None: return None def put( diff --git a/whoisdomain/cache/redisCache.py b/whoisdomain/cache/redisCache.py index d992fab..883bad4 100644 --- a/whoisdomain/cache/redisCache.py +++ b/whoisdomain/cache/redisCache.py @@ -1,13 +1,5 @@ -#! /usr/bin/env python3 -# pylint: disable=duplicate-code -# pylint disable=broad-exception-caught - -import os import logging - -from typing import ( - Optional, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -34,7 +26,7 @@ def __init__(self, verbose: bool = False, host: str = "localhost", port: int = 6 def get( self, keyString: str, - ) -> Optional[str]: + ) -> str | None: data = self.redis.get(keyString) if data: return str(data) diff --git a/whoisdomain/cache/simpleCacheBase.py b/whoisdomain/cache/simpleCacheBase.py old mode 100755 new mode 100644 index e503418..a3d49d7 --- a/whoisdomain/cache/simpleCacheBase.py +++ b/whoisdomain/cache/simpleCacheBase.py @@ -1,16 +1,6 @@ -#! /usr/bin/env python3 - -import time - -# import sys -import os import logging - -from typing import ( - Dict, - Optional, - Tuple, -) +import os +import time log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -23,7 +13,7 @@ def __init__( cacheMaxAge: int = (60 * 60 * 48), ) -> None: self.verbose = verbose - self.memCache: Dict[str, Tuple[float, str]] = {} + self.memCache: dict[str, tuple[float, str]] = {} self.cacheMaxAge: int = cacheMaxAge def put( @@ -41,7 +31,7 @@ def put( def get( self, keyString: str, - ) -> Optional[str]: + ) -> str | None: cData = self.memCache.get(keyString) if cData is None: return None @@ -52,7 +42,3 @@ def get( return None return cData[1] - - -if __name__ == "__main__": - pass diff --git a/whoisdomain/cache/simpleCacheWithFile.py b/whoisdomain/cache/simpleCacheWithFile.py old mode 100755 new mode 100644 index 74d29f8..532dde8 --- a/whoisdomain/cache/simpleCacheWithFile.py +++ b/whoisdomain/cache/simpleCacheWithFile.py @@ -1,12 +1,7 @@ -#! /usr/bin/env python3 - -import os import json import logging - -from typing import ( - Optional, -) +import os +import pathlib from .simpleCacheBase import ( SimpleCacheBase, @@ -17,12 +12,12 @@ class SimpleCacheWithFile(SimpleCacheBase): - cacheFilePath: Optional[str] = None + cacheFilePath: str | None = None def __init__( self, verbose: bool = False, - cacheFilePath: Optional[str] = None, + cacheFilePath: str | None = None, cacheMaxAge: int = (60 * 60 * 48), ) -> None: super().__init__(verbose=verbose, cacheMaxAge=cacheMaxAge) @@ -34,10 +29,10 @@ def _fileLoad( if self.cacheFilePath is None: return - if not os.path.isfile(self.cacheFilePath): + if not pathlib.Path(self.cacheFilePath).is_file(): return - with open(self.cacheFilePath, "r", encoding="utf-8") as f: + with pathlib.Path(self.cacheFilePath).open(encoding="utf-8") as f: try: self.memCache = json.load(f) except ValueError as e: @@ -50,7 +45,7 @@ def _fileSave( if self.cacheFilePath is None: return - with open(self.cacheFilePath, "w", encoding="utf-8") as f: + with pathlib.Path(self.cacheFilePath).open("w", encoding="utf-8") as f: json.dump(self.memCache, f) def put( @@ -65,10 +60,6 @@ def put( def get( self, keyString: str, - ) -> Optional[str]: + ) -> str | None: self._fileLoad() return super().get(keyString=keyString) - - -if __name__ == "__main__": - pass diff --git a/whoisdomain/context/dataContext.py b/whoisdomain/context/dataContext.py index 4dcb738..1bbb450 100644 --- a/whoisdomain/context/dataContext.py +++ b/whoisdomain/context/dataContext.py @@ -1,13 +1,7 @@ -#! /usr/bin/env python3 - -import os import logging - +import os from typing import ( - List, - Dict, Any, - Optional, ) log = logging.getLogger(__name__) @@ -25,17 +19,17 @@ def __init__( # the working domain splitted on '.' , # may change as we try to find a one that gets a response from whois - self.dList: List[str] = [] + self.dList: list[str] = [] self.domain: str = domain # the working domain , may change after cleanup (e.g.www) - self.tldString: Optional[str] = None # the detected toplevel 'aaa' or 'aaa.bbb' - self.publicSuffixStr: Optional[str] = None # the detected public Suffix if we can import tld + self.tldString: str | None = None # the detected toplevel 'aaa' or 'aaa.bbb' + self.publicSuffixStr: str | None = None # the detected public Suffix if we can import tld self.hasPublicSuffix: bool = False self.rawWhoisStr: str = "" # the result string from whois cli before clean self.whoisStr: str = "" # the result string from whois cli after clean - self.data: Dict[str, Any] = {} # the data we need to build the domain object - self.exeptionStr: Optional[str] = None # if we handle exceptions as result string instead of throw - self.thisTld: Dict[str, Any] = {} # the dict of regex and info as defined by ZZ and parsed by TldInfo - self.servers: List[str] = [] # extract whois servers from the whois output (may need --verbose on rfc1036/whois) + self.data: dict[str, Any] = {} # the data we need to build the domain object + self.exeptionStr: str | None = None # if we handle exceptions as result string instead of throw + self.thisTld: dict[str, Any] = {} # the dict of regex and info as defined by ZZ and parsed by TldInfo + self.servers: list[str] = [] # extract whois servers from the whois output (may need --verbose on rfc1036/whois) diff --git a/whoisdomain/context/parameterContext.py b/whoisdomain/context/parameterContext.py old mode 100755 new mode 100644 index 16647f5..dba702b --- a/whoisdomain/context/parameterContext.py +++ b/whoisdomain/context/parameterContext.py @@ -1,12 +1,7 @@ -#! /usr/bin/env python3 - -import os -import logging import json - +import logging +import os from typing import ( - List, - Dict, Any, ) @@ -152,18 +147,18 @@ class ParameterContext: - params: Dict[str, Any] - value: Dict[str, Any] + params: dict[str, Any] + value: dict[str, Any] - KT: Dict[str, Any] = { + KT: dict[str, Any] = { "int": int, "float": float, "str": str, "bool": bool, } - def _loadDefaults(self) -> List[str]: - mandatory: List[str] = [] + def _loadDefaults(self) -> list[str]: + mandatory: list[str] = [] for i, k in self.params.items(): if "default" in k: self.value[i] = k["default"] @@ -174,8 +169,8 @@ def _loadDefaults(self) -> List[str]: def _addArgs( self, - mandatory: List[str], - **kwargs: Dict[str, Any], + mandatory: list[str], + **kwargs: dict[str, Any], ) -> None: for name, value in kwargs.items(): if name not in self.params: @@ -199,7 +194,7 @@ def _addArgs( def _validateAllMandatoryNowKnown( self, - mandatory: List[str], + mandatory: list[str], ) -> None: if len(mandatory) != 0: msg = f"missing mandatory parametrs: {sorted(mandatory)}" @@ -212,7 +207,7 @@ def __init__( self.params = json.loads(ParamsStringJson) self.value = {} - mandatory: List[str] = self._loadDefaults() + mandatory: list[str] = self._loadDefaults() self._addArgs(mandatory, **kwargs) self._validateAllMandatoryNowKnown(mandatory) @@ -230,7 +225,8 @@ def __setattr__(self, name: str, value: Any) -> None: def get(self, name: str) -> Any: if name in self.value: return self.value[name] - raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'") + msg = f"'{self.__class__.__name__}' object has no attribute '{name}'" + raise AttributeError(msg) def set(self, name: str, value: Any) -> None: if name not in self.params: @@ -251,8 +247,8 @@ def set(self, name: str, value: Any) -> None: # leave the default def toJson(self) -> str: - rr: Dict[str, Any] = {} - for k, v in self.params.items(): + rr: dict[str, Any] = {} + for k in self.params: rr[k] = self.get(k) return json.dumps(rr) diff --git a/whoisdomain/doWhoisCommand.py b/whoisdomain/doWhoisCommand.py old mode 100755 new mode 100644 index d5ae8d7..0aed8e6 --- a/whoisdomain/doWhoisCommand.py +++ b/whoisdomain/doWhoisCommand.py @@ -1,18 +1,13 @@ -#! /usr/bin/env python3 - -# import sys -import os import logging - +import os from typing import ( - Optional, Any, ) -from .whoisCliInterface import WhoisCliInterface from .cache.simpleCacheWithFile import SimpleCacheWithFile -from .context.parameterContext import ParameterContext from .context.dataContext import DataContext +from .context.parameterContext import ParameterContext +from .whoisCliInterface import WhoisCliInterface log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -73,7 +68,7 @@ def doWhoisAndReturnString( keyString = ".".join(dc.dList) if pc.force is False: - oldData: Optional[str] = cache.get(keyString) + oldData: str | None = cache.get(keyString) if oldData: return str(oldData) diff --git a/whoisdomain/domain.py b/whoisdomain/domain.py old mode 100755 new mode 100644 index dd830a8..0ed2ca9 --- a/whoisdomain/domain.py +++ b/whoisdomain/domain.py @@ -1,19 +1,13 @@ -#! /usr/bin/env python3 - -# import sys +import logging import os import re -import logging - from typing import ( Any, - List, - Dict, ) -from .handleDateStrings import str_to_date -from .context.parameterContext import ParameterContext from .context.dataContext import DataContext +from .context.parameterContext import ParameterContext +from .handleDateStrings import str_to_date log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -49,12 +43,13 @@ class Domain: def init(pc: ParameterContext,dc: DataContext) -> None: initialize the object with the current data from dc.data: Dict[str, Any] the init is separated from creating an instance as we want to use dependency injection as much as possible. + """ def _cleanupArray( self, - data: List[str], - ) -> List[str]: + data: list[str], + ) -> list[str]: if "" in data: index = data.index("") data.pop(index) @@ -65,17 +60,16 @@ def _doNameservers( pc: ParameterContext, dc: DataContext, ) -> None: - tmp: List[str] = [] + tmp: list[str] = [] for x in dc.data["name_servers"]: if isinstance(x, str): tmp.append(x.strip().lower()) continue # not a string but an array - for y in x: - tmp.append(y.strip().lower()) + tmp.extend(y.strip().lower() for y in x) - self.name_servers: List[str] = [] + self.name_servers: list[str] = [] for x in tmp: x = x.strip(" .") # remove any leading or trailing spaces and/or dots if x: @@ -116,7 +110,7 @@ def _doStatus( # deduplicate results with set comprehension {} self.statuses = sorted( - list({s.strip() for s in dc.data["status"]}), + {s.strip() for s in dc.data["status"]}, ) if "" in self.statuses: self.statuses = self._cleanupArray(self.statuses) @@ -130,7 +124,7 @@ def _doStatus( def _doOptionalFields( self, - data: Dict[str, Any], + data: dict[str, Any], ) -> None: # optional fields @@ -157,7 +151,7 @@ def _doOptionalFields( # list(set(...))) to deduplicate results self.emails = sorted( - list({s.strip() for s in data["emails"]}), + {s.strip() for s in data["emails"]}, ) if "" in self.emails: self.emails = self._cleanupArray(self.emails) diff --git a/whoisdomain/exceptions.py b/whoisdomain/exceptions.py old mode 100755 new mode 100644 index 9b7979e..1dcdec2 --- a/whoisdomain/exceptions.py +++ b/whoisdomain/exceptions.py @@ -1,5 +1,5 @@ -import os import logging +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) diff --git a/whoisdomain/handleDateStrings.py b/whoisdomain/handleDateStrings.py index 21cbbb6..db811c0 100644 --- a/whoisdomain/handleDateStrings.py +++ b/whoisdomain/handleDateStrings.py @@ -1,19 +1,16 @@ -#! /usr/bin/env python3 """ This module isolates all date parsing in one place str_to_date() is the only entry point """ -import re -import os -import logging -import datetime -from typing import Optional +import datetime +import logging +import os +import re from .exceptions import UnknownDateFormat - log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -84,9 +81,9 @@ def str_to_date( text: str, - tld: Optional[str] = None, + tld: str | None = None, verbose: bool = False, -) -> Optional[datetime.datetime]: +) -> datetime.datetime | None: text = text.strip().lower() noDate = [ @@ -104,7 +101,7 @@ def str_to_date( # text = re.sub(r"(\+[0-9]{2})$", "\\1:00", text) # text = re.sub(r"(\+[0-9]{2})$", "\\100", text) # python 3.6 does not parse : in the timezone offset if re.search(r"(\+[0-9]{2})$", text): - text = text + "00" + text += "00" # strip trailing space and comment text = re.sub(r"(\ #.*)", "", text) @@ -136,14 +133,10 @@ def str_to_date( for f in _DATE_FORMATS: try: z = datetime.datetime.strptime(text, f) - z = z.astimezone() - z = z.replace(tzinfo=None) - return z except ValueError as v: _ = v + else: + return z.astimezone().replace(tzinfo=None) - raise UnknownDateFormat(f"Unknown date format: '{text}'") - - -if __name__ == "__main__": - pass + msg = f"Unknown date format: '{text}'" + raise UnknownDateFormat(msg) diff --git a/whoisdomain/helpers.py b/whoisdomain/helpers.py index bf883fa..fb8e5ed 100644 --- a/whoisdomain/helpers.py +++ b/whoisdomain/helpers.py @@ -1,19 +1,14 @@ -import os import logging - +import os from typing import ( - Optional, - List, - Dict, Any, ) +from .context.parameterContext import ParameterContext from .exceptions import WhoisQuotaExceeded - +from .tldDb.tld_regexpr import ZZ from .tldInfo import TldInfo from .version import VERSION -from .tldDb.tld_regexpr import ZZ -from .context.parameterContext import ParameterContext log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -21,15 +16,15 @@ def filterTldToSupportedPattern( domain: str, - dList: List[str], + dList: list[str], verbose: bool = False, -) -> Optional[str]: +) -> str | None: global tldInfo return tldInfo.filterTldToSupportedPattern(domain, dList, verbose=verbose) def mergeExternalDictWithRegex( - aDict: Optional[Dict[str, Any]] = None, + aDict: dict[str, Any] | None = None, ) -> None: global tldInfo if aDict is None: @@ -40,12 +35,12 @@ def mergeExternalDictWithRegex( tldInfo.mergeExternalDictWithRegex(aDict) -def validTlds() -> List[str]: +def validTlds() -> list[str]: global tldInfo return tldInfo.validTlds() -def get_TLD_RE() -> Dict[str, Any]: +def get_TLD_RE() -> dict[str, Any]: global tldInfo return tldInfo.TLD_RE() @@ -54,7 +49,7 @@ def getVersion() -> str: return VERSION -def getTestHint(tldString: str) -> Optional[str]: +def getTestHint(tldString: str) -> str | None: k: str = "_test" if tldString in ZZ and k in ZZ[tldString] and ZZ[tldString][k]: return str(ZZ[tldString][k]) @@ -67,9 +62,9 @@ def cleanupWhoisResponse( verbose: bool = False, with_cleanup_results: bool = False, withRedacted: bool = False, - pc: Optional[ParameterContext] = None, + pc: ParameterContext | None = None, ) -> str: - tmp2: List[str] = [] + tmp2: list[str] = [] if pc is None: pc = ParameterContext( @@ -78,7 +73,7 @@ def cleanupWhoisResponse( with_cleanup_results=with_cleanup_results, ) - tmp: List[str] = whoisStr.split("\n") + tmp: list[str] = whoisStr.split("\n") for line in tmp: # some servers respond with: % Quota exceeded in the comment section (lines starting with %) if "quota exceeded" in line.lower(): diff --git a/whoisdomain/lastWhois.py b/whoisdomain/lastWhois.py index d72e0ab..ca5ced8 100644 --- a/whoisdomain/lastWhois.py +++ b/whoisdomain/lastWhois.py @@ -8,12 +8,9 @@ """ -import os import logging - +import os from typing import ( - List, - Dict, Any, ) @@ -22,11 +19,11 @@ log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -LastWhois: Dict[str, Any] = {} +LastWhois: dict[str, Any] = {} def updateLastWhois( - dList: List[str], + dList: list[str], whoisStr: str, pc: ParameterContext, ) -> None: @@ -46,6 +43,6 @@ def initLastWhois() -> None: LastWhois["Try"] = [] # init on start of query -def get_last_raw_whois_data() -> Dict[str, Any]: +def get_last_raw_whois_data() -> dict[str, Any]: global LastWhois return LastWhois diff --git a/whoisdomain/main.py b/whoisdomain/main.py index 1c88687..d9ad603 100755 --- a/whoisdomain/main.py +++ b/whoisdomain/main.py @@ -1,19 +1,15 @@ #!/usr/bin/python3 -import os -import re +import gc import getopt -import sys import json import logging -import gc - +import os +import pathlib +import re +import sys from typing import ( - Optional, - Tuple, Any, - List, - Dict, ) import whoisdomain as whois # to be compatible with dannycork @@ -30,7 +26,7 @@ PrintGetRawWhoisResult: bool = False Ruleset: bool = False -Failures: Dict[str, Any] = {} +Failures: dict[str, Any] = {} IgnoreReturncode: bool = False TestAllTld: bool = False TestRunOnly: bool = False @@ -43,7 +39,7 @@ class ResponseCleaner: data: str - rDict: Dict[str, Any] = {} + rDict: dict[str, Any] = {} def __init__( self, @@ -55,17 +51,16 @@ def readInputFile( self, pathToTestFile: str, ) -> str: - if not os.path.exists(pathToTestFile): + if not pathlib.Path(pathToTestFile).exists(): return "" - with open(pathToTestFile, mode="rb") as f: # switch to binary mode as that is what Popen uses - # make sure the data is treated exactly the same as the output of Popen - return f.read().decode(errors="ignore") + # switch to binary mode as that is what Popen uses; make sure the data is treated exactly the same + return pathlib.Path(pathToTestFile).read_bytes().decode(errors="ignore") def cleanSection( self, - section: List[str], - ) -> List[str]: + section: list[str], + ) -> list[str]: # cleanup any beginning and ending empty lines from the section if len(section) == 0: @@ -86,12 +81,12 @@ def cleanSection( def splitBodyInSections( self, - body: List[str], - ) -> List[str]: + body: list[str], + ) -> list[str]: # split the body on empty line, cleanup all sections, remove empty sections # return list of body's - sections: List[List[str]] = [] + sections: list[list[str]] = [] n = 0 sections.append([]) for line in body: @@ -107,7 +102,7 @@ def splitBodyInSections( m += 1 # now remove empty sections and return - sections2: List[str] = [] + sections2: list[str] = [] m = 0 while m < len(sections): if len(sections[m]) > 0: @@ -120,23 +115,23 @@ def cleanupWhoisResponse( self, verbose: bool = False, with_cleanup_results: bool = False, - ) -> Tuple[str, Dict[Any, Any]]: + ) -> tuple[str, dict[Any, Any]]: result = whois.cleanupWhoisResponse( self.data, verbose, with_cleanup_results, ) - self.rDict: Dict[str, Any] = { + self.rDict: dict[str, Any] = { "BodyHasSections": False, # if this is true the body is not a list of lines but a list of sections with lines "Preamble": [], # the lines telling what whois servers wwere contacted "Percent": [], # lines staring with %% , often not present but may contain hints "Body": [], # the body of the whois, may be in sections separated by empty lines "Postamble": [], # copyright and other not relevant info for actual parsing whois } - body: List[str] = [] + body: list[str] = [] - rr: List[str] = [] + rr: list[str] = [] z = result.split("\n") preambleSeen = False postambleSeen = False @@ -167,13 +162,14 @@ def cleanupWhoisResponse( body.append(line) + ll = line if "\t" in line: - line = "TAB;" + line # mark lines having tabs + ll = "TAB;" + line # mark lines having tabs - if line.endswith("\r"): - line = "CR;" + line # mark lines having CR (\r) + if ll.endswith("\r"): + ll = "CR;" + line # mark lines having CR (\r) - rr.append(line) + rr.append(ll) body = self.cleanSection(body) self.rDict["Body"] = self.splitBodyInSections(body) @@ -190,19 +186,17 @@ def printMe(self) -> None: k = "Body" if self.rDict[k]: - n = 0 - for lines in self.rDict[k]: + for n, lines in enumerate(self.rDict[k]): ws = " [WHITESPACE AT END] " if re.search(r"[ \t]+\r?\n", lines) else "" tab = " [TAB] " if "\t" in lines else "" # tabs are present in this section cr = " [CR] " if "\r" in lines else "" # \r is present in this section print(f"# --- {k} Section: {n} {cr}{tab}{ws}") - n += 1 print(lines) def prepItem(d: str) -> None: if PrintJson is False: - print("") + print() print(f"test domain: <<<<<<<<<< {d} >>>>>>>>>>>>>>>>>>>>") @@ -222,19 +216,18 @@ def testItem1( d: str, printgetRawWhoisResult: bool = False, ) -> None: - global IgnoreReturncode - global Verbose - global PrintGetRawWhoisResult - - global SIMPLISTIC - global TestAllTld - global TestRunOnly - - global WithRedacted - global WithPublicSuffix - global WithExtractServers - global WithStripHttpStatus - global WithNoIgnoreWww + global \ + IgnoreReturncode, \ + Verbose, \ + PrintGetRawWhoisResult, \ + SIMPLISTIC, \ + TestAllTld, \ + TestRunOnly, \ + WithRedacted, \ + WithPublicSuffix, \ + WithExtractServers, \ + WithStripHttpStatus, \ + WithNoIgnoreWww pc = whois.ParameterContext( ignore_returncode=IgnoreReturncode, @@ -302,7 +295,7 @@ def errorItem(d: str, e: Any, what: str = "Generic") -> None: print(message) -def testDomains(aList: List[str]) -> None: +def testDomains(aList: list[str]) -> None: for d in aList: # skip empty lines if not d: @@ -316,32 +309,29 @@ def testDomains(aList: List[str]) -> None: continue # skip comments behind the domain - d = d.split("#")[0] - d = d.strip() + dd = d.split("#")[0].strip() - prepItem(d) + prepItem(dd) try: - testItem1(d) + testItem1(dd) except whois.UnknownTld as e: - errorItem(d, e, what="UnknownTld") + errorItem(dd, e, what="UnknownTld") except whois.FailedParsingWhoisOutput as e: - errorItem(d, e, what="FailedParsingWhoisOutput") + errorItem(dd, e, what="FailedParsingWhoisOutput") except whois.UnknownDateFormat as e: - errorItem(d, e, what="UnknownDateFormat") + errorItem(dd, e, what="UnknownDateFormat") except whois.WhoisCommandFailed as e: - errorItem(d, e, what="WhoisCommandFailed") + errorItem(dd, e, what="WhoisCommandFailed") except whois.WhoisQuotaExceeded as e: - errorItem(d, e, what="WhoisQuotaExceeded") + errorItem(dd, e, what="WhoisQuotaExceeded") except whois.WhoisPrivateRegistry as e: - errorItem(d, e, what="WhoisPrivateRegistry") + errorItem(dd, e, what="WhoisPrivateRegistry") except whois.WhoisCommandTimeout as e: - errorItem(d, e, what="WhoisCommandTimeout") - # except Exception as e: - # errorItem(d, e, what="Generic") + errorItem(dd, e, what="WhoisCommandTimeout") -def getTestFileOne(fPath: str, fileData: Dict[str, Any]) -> None: - if not os.path.isfile(fPath): # only files +def getTestFileOne(fPath: str, fileData: dict[str, Any]) -> None: + if not pathlib.Path(fPath).is_file(): # only files return if not fPath.endswith(".txt"): # ending in .txt @@ -351,13 +341,13 @@ def getTestFileOne(fPath: str, fileData: Dict[str, Any]) -> None: fileData[bName] = [] xx = fileData[bName] - with open(fPath, encoding="utf-8") as f: - for index, line in enumerate(f): - line = line.strip() - if len(line) == 0 or line.startswith("#"): + with pathlib.Path(fPath).open(encoding="utf-8") as f: + for line in f: + ll = line.strip() + if len(ll) == 0 or ll.startswith("#"): continue - aa = re.split(r"\s+", line) + aa = re.split(r"\s+", ll) if aa[0] not in xx: xx.append(aa[0]) @@ -366,40 +356,37 @@ def getTestFileOne(fPath: str, fileData: Dict[str, Any]) -> None: def getTestFilesAll( tDir: str, - fileData: Dict[str, Any], + fileData: dict[str, Any], ) -> None: - for item in os.listdir(tDir): - fPath = f"{tDir}/{item}" - getTestFileOne(fPath, fileData) + for item in pathlib.Path(tDir).iterdir(): + getTestFileOne(str(item), fileData) -def getAllCurrentTld() -> List[str]: +def getAllCurrentTld() -> list[str]: return whois.validTlds() def appendHintOrMeta( - rr: List[str], - allRegex: Optional[str], + rr: list[str], + allRegex: str | None, tld: str, ) -> None: - global TestAllTld - global TestRunOnly + global TestAllTld, TestRunOnly if TestAllTld is True: hint = whois.getTestHint(tld) - hint = hint if hint else f"meta.{tld}" + hint = hint or f"meta.{tld}" rr.append(f"{hint}") else: rr.append(f"meta.{tld}") def appendHint( - rr: List[str], - allRegex: Optional[str], + rr: list[str], + allRegex: str | None, tld: str, ) -> None: - global TestAllTld - global TestRunOnly + global TestAllTld, TestRunOnly if TestAllTld is True: hint = whois.getTestHint(tld) @@ -408,10 +395,10 @@ def appendHint( def makeMetaAllCurrentTld( - allHaving: Optional[str] = None, - allRegex: Optional[str] = None, -) -> List[str]: - rr: List[str] = [] + allHaving: str | None = None, + allRegex: str | None = None, +) -> list[str]: + rr: list[str] = [] for tld in getAllCurrentTld(): if allRegex is None: appendHintOrMeta(rr, allRegex, tld) @@ -424,9 +411,9 @@ def makeMetaAllCurrentTld( def makeTestAllCurrentTld( - allRegex: Optional[str] = None, -) -> List[str]: - rr: List[str] = [] + allRegex: str | None = None, +) -> list[str]: + rr: list[str] = [] for tld in getAllCurrentTld(): if allRegex is None: appendHint(rr, allRegex, tld) @@ -455,10 +442,9 @@ def ShowRuleset(tld: str) -> None: def usage() -> None: - name = os.path.basename(sys.argv[0]) + name = pathlib.Path(sys.argv[0]).name - print( - f""" + print(f""" {name} [ -h | --usage ] print this text and exit @@ -524,8 +510,7 @@ def usage() -> None: # test one specific directory with verbose and IgnoreReturncode example: {name} -v -I -D tests -""" - ) +""") """ TODO @@ -547,28 +532,15 @@ def showFailures() -> None: def main() -> None: - global PrintJson - global Verbose - global IgnoreReturncode - global PrintGetRawWhoisResult - global Ruleset - global SIMPLISTIC - global WithRedacted - global TestAllTld - global TestRunOnly - global WithPublicSuffix - global WithExtractServers - global WithStripHttpStatus - global WithNoIgnoreWww - - name: str = os.path.basename(sys.argv[0]) + global PrintJson, Verbose, IgnoreReturncode, PrintGetRawWhoisResult, Ruleset, SIMPLISTIC, WithRedacted, TestAllTld, TestRunOnly, WithPublicSuffix, WithExtractServers, WithStripHttpStatus, WithNoIgnoreWww # noqa: E501 # pylint: disable=line-too-long + + name: str = pathlib.Path(sys.argv[0]).name + SIMPLISTIC = True if name == "test2.py": SIMPLISTIC = False - else: - SIMPLISTIC = True try: - opts, args = getopt.getopt( + opts, _ = getopt.getopt( sys.argv[1:], "TtjRSpvVIhaf:d:D:r:H:C:", [ @@ -601,19 +573,19 @@ def main() -> None: # TestAllTld: bool = False - allHaving: Optional[str] = None # from all supported tld only process the ones having this :: TODO :: - allRegex: Optional[str] = None # from all supported tld process only the ones matching this regex + allHaving: str | None = None # from all supported tld only process the ones having this :: TODO :: + allRegex: str | None = None # from all supported tld process only the ones matching this regex - directory: Optional[str] = None - dirs: List[str] = [] + directory: str | None = None + dirs: list[str] = [] - filename: Optional[str] = None - files: List[str] = [] + filename: str | None = None + files: list[str] = [] - domain: Optional[str] = None - domains: List[str] = [] + domain: str | None = None + domains: list[str] = [] - fileData: Dict[str, Any] = {} + fileData: dict[str, Any] = {} for opt, arg in opts: if opt in ("-S", "SupportedTld"): @@ -669,26 +641,26 @@ def main() -> None: if opt in ("-D", "--Directory"): directory = arg - isDir = os.path.isdir(directory) + isDir = pathlib.Path(directory).is_dir() if isDir is False: print(f"{directory} cannot be found or is not a directory", file=sys.stderr) sys.exit(101) if opt in ("-C", "--Cleanup"): inFile = arg - isFile = os.path.isfile(arg) + isFile = pathlib.Path(arg).is_file() if isFile is False: print(f"{inFile} cannot be found or is not a file", file=sys.stderr) sys.exit(101) rc = ResponseCleaner(inFile) - d1, rDict = rc.cleanupWhoisResponse() + _, _ = rc.cleanupWhoisResponse() rc.printMe() sys.exit(0) if opt in ("-f", "--file"): filename = arg - isFile = os.path.isfile(filename) + isFile = pathlib.Path(filename).is_file() if isFile is False: print(f"{filename} cannot be found or is not a file", file=sys.stderr) sys.exit(101) @@ -738,7 +710,7 @@ def main() -> None: fileData = {} for dName in dirs: getTestFilesAll(dName, fileData) - for testFile, x in fileData.items(): + for x in fileData.values(): testDomains(x) showFailures() sys.exit(0) @@ -747,7 +719,7 @@ def main() -> None: fileData = {} for testFile in files: getTestFileOne(testFile, fileData) - for testFile, x in fileData.items(): + for x in fileData.values(): testDomains(x) showFailures() sys.exit(0) diff --git a/whoisdomain/procFunc.py b/whoisdomain/procFunc.py index ca4d664..9d84de3 100644 --- a/whoisdomain/procFunc.py +++ b/whoisdomain/procFunc.py @@ -1,17 +1,12 @@ # python3 -import sys import errno +import multiprocessing as mp +import sys from typing import ( - Tuple, Any, - Dict, ) -from socket import error as SocketError - -import multiprocessing as mp - from .context.parameterContext import ParameterContext # from .domain import Domain @@ -25,7 +20,7 @@ def __init__(self, ctx: Any = None) -> None: ctx = mp.get_context("spawn") self.ctx = ctx - def startProc(self, f: Any, max_requests: int) -> Tuple[Any, Any]: + def startProc(self, f: Any, max_requests: int) -> tuple[Any, Any]: # start the whole parent part self.parent_conn, self.child_conn = mp.Pipe() @@ -46,7 +41,7 @@ def oneItem( ) -> Any: jStr = pc.toJson() - request: Dict[str, Any] = { + request: dict[str, Any] = { "domain": domain, "pc": jStr, } @@ -61,9 +56,8 @@ def oneItem( print("OneItem:RECEIVE:", reply, file=sys.stderr) if reply["status"] is True: - result = reply["result"] # possibly re convert this into a Domain object. - return result + return reply["result"] raise Exception(reply["exception"]) @@ -81,7 +75,7 @@ def inner_func( nonlocal self try: return self.oneItem(domain, pc) - except SocketError as e: + except OSError as e: if e.errno != errno.ECONNRESET: print(f"restart process {e}", file=sys.stderr) raise diff --git a/whoisdomain/processWhoisDomainRequest.py b/whoisdomain/processWhoisDomainRequest.py index 56b8235..660c834 100644 --- a/whoisdomain/processWhoisDomainRequest.py +++ b/whoisdomain/processWhoisDomainRequest.py @@ -1,26 +1,16 @@ # import sys -import os import logging - -from typing import ( - Optional, - List, - Tuple, -) - -from .exceptions import UnknownTld +import os from .context.dataContext import DataContext from .context.parameterContext import ParameterContext - -from .helpers import filterTldToSupportedPattern -from .helpers import get_TLD_RE - -from .doWhoisCommand import doWhoisAndReturnString -from .whoisParser import WhoisParser from .domain import Domain +from .doWhoisCommand import doWhoisAndReturnString +from .exceptions import UnknownTld +from .helpers import filterTldToSupportedPattern, get_TLD_RE from .lastWhois import updateLastWhois from .whoisCliInterface import WhoisCliInterface +from .whoisParser import WhoisParser log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -45,7 +35,7 @@ def __init__( ) -> None: self.pc = pc self.dc = dc - self.dom: Optional[Domain] = dom + self.dom: Domain | None = dom self.wci = wci self.parser = parser if self.pc.verbose: @@ -54,7 +44,7 @@ def __init__( def _analyzeDomainStringAndValidate( self, ) -> None: - def _internationalizedDomainNameToPunyCode(d: List[str]) -> List[str]: + def _internationalizedDomainNameToPunyCode(d: list[str]) -> list[str]: return [k.encode("idna").decode() or k for k in d] # Prep the domain ================ @@ -115,14 +105,13 @@ def _internationalizedDomainNameToPunyCode(d: List[str]) -> List[str]: def _makeMessageForUnsupportedTld( self, - ) -> Optional[str]: + ) -> str | None: if self.pc.return_raw_text_for_unsupported_tld: return None a = f"The TLD {self.dc.tldString} is currently not supported by this package." b = "Use validTlds() to see what toplevel domains are supported." - msg = f"{a} {b}" - return msg + return f"{a} {b}" def _doUnsupportedTldAnyway( self, @@ -150,7 +139,7 @@ def _doUnsupportedTldAnyway( def _doOneLookup( self, - ) -> Tuple[Optional[Domain], bool]: + ) -> tuple[Domain | None, bool]: msg = f"### lookup: tldString: {self.dc.tldString}; dList: {self.dc.dList}" log.debug(msg) @@ -167,7 +156,7 @@ def _doOneLookup( ) except Exception as e: if self.pc.simplistic is False: - raise e + raise self.dc.exeptionStr = f"{e}" assert self.dom is not None @@ -207,9 +196,9 @@ def _doOneLookup( def _prepRequest(self) -> bool: try: self._analyzeDomainStringAndValidate() # may raise UnknownTld - except UnknownTld as e: + except UnknownTld: if self.pc.simplistic is False: - raise e + raise self.dc.exeptionStr = "UnknownTld" @@ -231,7 +220,7 @@ def _prepRequest(self) -> bool: return True # ================================================= - myKeys: List[str] = [] + myKeys: list[str] = [] for item in get_TLD_RE(): myKeys.append(item) @@ -280,7 +269,7 @@ def _prepRequest(self) -> bool: def init(self) -> None: pass - def processRequest(self) -> Optional[Domain]: + def processRequest(self) -> Domain | None: finished = self._prepRequest() if finished is True: return self.dom @@ -295,14 +284,11 @@ def processRequest(self) -> Optional[Domain]: # so ".".join(self.dc.dList) would be like: aaa. or perhaps aaa.bbb. # and may change if we find no data in cli whois - tldLevel: List[str] = [] - if self.dc.hasPublicSuffix: - tldLevel = str(self.dc.publicSuffixStr).split(".") - else: - tldLevel = str(self.dc.tldString).split(".") + tldLevel: list[str] = [] + tldLevel = str(self.dc.publicSuffixStr).split(".") if self.dc.hasPublicSuffix else str(self.dc.tldString).split(".") while len(self.dc.dList) > len(tldLevel): - log.debug(f"{self.dc.dList}") + log.debug("%s", self.dc.dList) z, finished = self._doOneLookup() if finished: diff --git a/whoisdomain/strings/ignoreStrings.py b/whoisdomain/strings/ignoreStrings.py index 81d3f7b..562188f 100644 --- a/whoisdomain/strings/ignoreStrings.py +++ b/whoisdomain/strings/ignoreStrings.py @@ -1,15 +1,10 @@ -import os import logging - - -from typing import ( - List, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -IGNORESTRINGS: List[str] = [ +IGNORESTRINGS: list[str] = [ "", "Contact Privacy Inc. Customer", "Data Protected", @@ -53,7 +48,7 @@ ] -def IgnoreStrings() -> List[str]: +def IgnoreStrings() -> list[str]: return IGNORESTRINGS diff --git a/whoisdomain/strings/noneStrings.py b/whoisdomain/strings/noneStrings.py index 3c0b81b..f138a8b 100644 --- a/whoisdomain/strings/noneStrings.py +++ b/whoisdomain/strings/noneStrings.py @@ -1,15 +1,11 @@ -import os import logging - -from typing import ( - List, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -NONESTRINGS: List[str] = [ +NONESTRINGS: list[str] = [ "the domain has not been registered", "no match found for", "no matching record", @@ -33,7 +29,7 @@ ] -def NoneStrings() -> List[str]: +def NoneStrings() -> list[str]: return NONESTRINGS diff --git a/whoisdomain/strings/quotaStrings.py b/whoisdomain/strings/quotaStrings.py index c21122e..9be2a68 100644 --- a/whoisdomain/strings/quotaStrings.py +++ b/whoisdomain/strings/quotaStrings.py @@ -1,14 +1,10 @@ -import os import logging - -from typing import ( - List, -) +import os log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -QUOTASTRINGS: List[str] = [ +QUOTASTRINGS: list[str] = [ "limit exceeded", "quota exceeded", "try again later", @@ -21,7 +17,7 @@ ] -def QuotaStrings() -> List[str]: +def QuotaStrings() -> list[str]: return QUOTASTRINGS diff --git a/whoisdomain/tldDb/finders.py b/whoisdomain/tldDb/finders.py index 623defc..a275e2d 100644 --- a/whoisdomain/tldDb/finders.py +++ b/whoisdomain/tldDb/finders.py @@ -1,39 +1,33 @@ +import logging import os import re -import logging +from collections.abc import Callable # re._MAXCACHE = 1 - # pylint: disable=unused-argument # import typing from typing import ( - Dict, Any, - List, - Callable, - Tuple, ) log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -PATTERN_CACHE: Dict[Tuple[str, int], Any] = {} +PATTERN_CACHE: dict[tuple[str, int], Any] = {} def make_pat(reStr: str, flags: int) -> Any: - return re.compile(reStr, flags=flags) - if (reStr, flags) in PATTERN_CACHE: - pattern = PATTERN_CACHE[(reStr, flags)] + pattern = PATTERN_CACHE[reStr, flags] else: pattern = re.compile(reStr, flags=flags) - PATTERN_CACHE[(reStr, flags)] = pattern + PATTERN_CACHE[reStr, flags] = pattern return pattern def newLineSplit( ignoreCase: bool = True, -) -> Callable[[str], List[str]]: +) -> Callable[[str], list[str]]: def xNewlineSplit( whoisStr: str, verbose: bool = False, @@ -52,11 +46,11 @@ def xNewlineSplit( def R( reStr: str, ignoreCase: bool = True, -) -> Callable[[str, List[str], bool], List[str]]: +) -> Callable[[str, list[str], bool], list[str]]: # regular simple regex strings are converter with currying to functins to be called later def reFindAll( textStr: str, - sData: List[str], + sData: list[str], verbose: bool = False, ) -> Any: flags = re.IGNORECASE if ignoreCase else 0 # NOFLAG is 3.11 @@ -79,14 +73,14 @@ def findFromToAndLookFor( lookForStr: str, ignoreCase: bool = True, verbose: bool = False, -) -> Callable[[str, List[str], bool], List[str]]: +) -> Callable[[str, list[str], bool], list[str]]: # look for a particular string like R() # but limit the context we look in # to a specific sub section of the whois cli response # use currying to create a func that will be called later def xFindFromToAndLookFor( textStr: str, - sData: List[str], + sData: list[str], verbose: bool = False, ) -> Any: flags = re.IGNORECASE if ignoreCase else 0 # NOFLAG is 3.11 @@ -165,7 +159,7 @@ def findFromToAndLookForWithFindFirst( lookForStr: str, ignoreCase: bool = True, verbose: bool = False, -) -> Callable[[str, List[str], bool], List[str]]: +) -> Callable[[str, list[str], bool], list[str]]: # look for a particular string like R() with find first # then build a from ,to context using the result from findFirst (google.fr is a example) # but limit the context we look in @@ -173,9 +167,9 @@ def findFromToAndLookForWithFindFirst( # use currying to create a func that will be called later def xFindFromToAndLookForWithFindFirst( textStr: str, - sData: List[str], + sData: list[str], verbose: bool = False, - ) -> List[str]: + ) -> list[str]: flags = re.IGNORECASE if ignoreCase else 0 # NOFLAG is 3.11 ff = re.findall(findFirst, textStr, flags=flags) @@ -183,7 +177,7 @@ def xFindFromToAndLookForWithFindFirst( return [] ff2: str = str(ff[0].strip()) # only use the first element and clean it - if ff2 == "": + if not ff2: return [] msg = f"we found: {ff2}, now combine with {fromStr}" @@ -229,13 +223,13 @@ def findInSplitedLookForHavingFindFirst( extract: str, ignoreCase: bool = True, verbose: bool = False, -) -> Callable[[str, List[str], bool], List[str]]: +) -> Callable[[str, list[str], bool], list[str]]: # requires splitted data def xfindInSplitedLookForHavingFindFirst( textStr: str, - sData: List[str], + sData: list[str], verbose: bool = False, - ) -> List[str]: + ) -> list[str]: flags = re.IGNORECASE if ignoreCase else 0 # NOFLAG is 3.11 ff = re.findall(findFirst, textStr, flags=flags) @@ -243,7 +237,7 @@ def xfindInSplitedLookForHavingFindFirst( return [] ff2: str = str(ff[0].strip()) # only use the first element and clean it - if ff2 == "": + if not ff2: return [] lookForStr2 = lookForStr.replace(r"{}", ff2) diff --git a/whoisdomain/tldDb/groupers.py b/whoisdomain/tldDb/groupers.py index ce71529..dcd24d0 100644 --- a/whoisdomain/tldDb/groupers.py +++ b/whoisdomain/tldDb/groupers.py @@ -1,19 +1,14 @@ # import re # import sys -import os import logging - -from typing import ( - Dict, - List, - Callable, -) +import os +from collections.abc import Callable log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) -COM_LIST: List[str] = [ +COM_LIST: list[str] = [ r"\nRegistrar", r"\nRegistrant", r"\nTech", @@ -23,12 +18,12 @@ ] -def groupFromList(aList: List[str]) -> Callable[[str], Dict[str, str]]: +def groupFromList(aList: list[str]) -> Callable[[str], dict[str, str]]: def xgroupFromList( whoisStr: str, verbose: bool = False, - ) -> Dict[str, str]: - result: Dict[str, str] = {} + ) -> dict[str, str]: + result: dict[str, str] = {} # iterate over the lines of whoisStr # for key each item in the list # create a empty list diff --git a/whoisdomain/tldDb/tld_regexpr.py b/whoisdomain/tldDb/tld_regexpr.py index e10d386..6558996 100644 --- a/whoisdomain/tldDb/tld_regexpr.py +++ b/whoisdomain/tldDb/tld_regexpr.py @@ -1,19 +1,16 @@ # pylint: disable=C0302 -import os -import logging +# line length = 160 -from typing import ( - Dict, - Any, - # Callable, -) +import logging +import os +from typing import Any from .finders import ( - newLineSplit, R, findFromToAndLookFor, findFromToAndLookForWithFindFirst, findInSplitedLookForHavingFindFirst, + newLineSplit, ) log = logging.getLogger(__name__) @@ -52,7 +49,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: # The database # When we finally apply the regexes we use IGNORE CASE allways on all matches -ZZ: Dict[str, Any] = {} +ZZ: dict[str, Any] = {} # ====================================== # meta registrars start with _ are only used a s a common toll to define others @@ -69,7 +66,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_server": "whois.donuts.co", "registrant": R(r"Registrant Organization:\s?(.+)"), "status": R(r"Domain Status:\s?(.+)"), -} # updated all downstream +} ZZ["_centralnic"] = { "extend": "com", @@ -80,14 +77,14 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "expiration_date": R(r"Registry Expiry Date:\s?(.+)"), "updated_date": R(r"Updated Date:\s?(.+)"), "status": R(r"Domain Status:\s?(.+)"), -} # updated all downstream +} ZZ["_gtldKnet"] = { "extend": "com", "_server": "whois.gtld.knet.cn", "admin": R(r"Admin\s*Name:\s+(.+)"), "_test": None, -} # updated all downstream +} # ====================================== # start of regular entries, simple domains are at the end @@ -113,7 +110,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "creation_date": R(r"Registered on:\s*(.+)"), "expiration_date": R(r"Expiry date:\s*(.+)"), "updated_date": R(r"Last updated:\s*(.+)"), - "name_servers": R(r"Name servers:%s\n\n" % xStr(r"(?:\n[ \t]+(\S+).*)?", 10)), # capture up to 10 + "name_servers": R(r"Name servers:{}\n\n".format(xStr(r"(?:\n[ \t]+(\S+).*)?", 10))), # capture up to 10 "status": R(r"Registration status:\n\s*(.+)"), } @@ -124,7 +121,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "owner": R(r"Domain Owner:\n\s?(.+)"), "registrar": R(r"Registered By:\n\s?(.+)"), "registrant": R(r"Registrant Contact:\n([^\n]*)"), - "name_servers": R(r"Servers:%s\n\n" % xStr(r"(?:\n[ \t]+(\S+).*)?", 10)), + "name_servers": R(r"Servers:{}\n\n".format(xStr(r"(?:\n[ \t]+(\S+).*)?", 10))), "expiration_date": R(r"Renewal date:\n\s*(.+)"), "updated_date": R(r"Entry updated:\n\s*(.+)"), "creation_date": R(r"Entry created:\n\s?(.+)"), @@ -146,7 +143,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: } ZZ["mc"] = { - "_server": "whois.nic.mc", + "_server": "whois.nic.mc", "extend": "com", "_test": "nic.mc", "domain_name": R(r"Domain\s+:\s+(.+)"), @@ -171,8 +168,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_test": "greenpeace.org.uk", } -# ltd.uk: no example to test with - ZZ["me.uk"] = { "extend": "co.uk", "_server": "whois.nic.uk", @@ -190,6 +185,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: # police.uk: no example to test; may not actually have a public whois server # Armenia + ZZ["am"] = { "domain_name": R(r"Domain name:\s+(.+)"), "_server": "whois.amnic.net", @@ -200,7 +196,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "creation_date": R(r"Registered:\s+(.+)"), "expiration_date": R(r"Expires:\s+(.+)"), "updated_date": R(r"Last modified:\s+(.+)"), - "name_servers": R(r"DNS servers.*:\n%s" % xStr(r"(?:\s+(\S+)\n)?", 4)), + "name_servers": R(r"DNS servers.*:\n{}".format(xStr(r"(?:\s+(\S+)\n)?", 4))), "_test": "amnic.net", } @@ -238,7 +234,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "updated_date": R(r"changed:\s?(.+)"), "name_servers": R(r"nserver:\s*(.+)"), "registrar": R(r"registrar:\s?(.+)"), - # "registrant": R(r"registrant:\s?(.+)"), "registrant": findInSplitedLookForHavingFindFirst( findFirst=r"registrant:\s?(.+)", lookForStr=r"nic-hdl:\s*{}\n", @@ -277,12 +272,16 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: } ZZ["be"] = { - "extend": "pl", + "extend": "com", + "_server": "whois.dns.be", "domain_name": R(r"\nDomain:\s*(.+)"), - "registrar": R(r"Company Name:\n?(.+)"), + "registrar": R(r"Registrar:\s*\n\s+Name:\s*(.+)"), "creation_date": R(r"Registered:\s*(.+)\n"), - "status": R(r"Status:\s?(.+)"), - "name_servers": R(r"Nameservers:(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?\n\n"), + "expiration_date": None, + "updated_date": None, + "status": R(r"Status:\s*(.+)"), + "name_servers": R(r"Nameservers:(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?(?:\n[ \t]+(\S+))?\n"), + "_test": "google.be", } ZZ["biz"] = { @@ -402,7 +401,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "extend": "com", "domain_name": R(r"domain:\s?(.+)"), "registrar": R(r"registrar:\s?(.+)"), - # "registrant": R(r"registrant:\s?(.+)"), "registrant_country": None, "creation_date": R(r"registered:\s?(.+)"), "expiration_date": R(r"expire:\s?(.+)"), @@ -444,7 +442,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "creation_date": R(r"Domain record activated:\s?(.+)"), "updated_date": R(r"Domain record last updated:\s?(.+)"), "expiration_date": R(r"Domain expires:\s?(.+)"), - "name_servers": R(r"Name Servers:\s?%s" % xStr(r"(?:\t(.+)\n)?", 10)), + "name_servers": R(r"Name Servers:\s?{}".format(xStr(r"(?:\t(.+)\n)?", 10))), "_test": "rutgers.edu", } @@ -486,14 +484,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "extend": "com", "domain_name": R(r"domain:\s?(.+)"), "registrar": R(r"registrar:\s*(.+)"), - # "registrant": R(r"contact:\s?(.+)"), - # "registrant_organization": R(r"type:\s+ORGANIZATION\scontact:\s+(.*)"), "creation_date": R(r"created:\s?(.+)"), "expiration_date": R(r"Expiry Date:\s?(.+)"), "updated_date": R(r"last-update:\s?(.+)"), "name_servers": R(r"nserver:\s*(.+)"), "status": R(r"status:\s?(.+)"), - # "registrant_country": R(r"Country:\s?(.+)"), "_test": "sfr.fr", "registrant": findFromToAndLookForWithFindFirst( findFirst=r"holder-c:\s*([^\n]*)\n", @@ -564,7 +559,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_server": "whois.isnic.is", "domain_name": R(r"domain:\s?(.+)"), "registrar": None, - # "registrant": R(r"registrant:\s?(.+)"), "registrant_country": None, "creation_date": R(r"created:\s?(.+)"), "expiration_date": R(r"expires:\s?(.+)"), @@ -592,7 +586,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "status": R(r"Status:\s?(.+)"), } -# The Japanese whois servers always return English unless a Japanese locale is specified in the user's LANG environmental variable. +# The Japanese whois servers always return English +# unless a Japanese locale is specified in the user's LANG environmental variable. # See: https://www.computerhope.com/unix/uwhois.htm # Additionally, whois qeuries can explicitly request english: # To suppress Japanese output, add'/e' at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. @@ -728,7 +723,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "expiration_date": None, "registrant_country": None, "domain_name": R(r"Domain name:\s?(.+)"), - "name_servers": R(r"Domain nameservers.*:\n%s" % xStr(r"(?:\s+(\S+)\n)?", 10)), + "name_servers": R(r"Domain nameservers.*:\n{}".format(xStr(r"(?:\s+(\S+)\n)?", 10))), "reseller": R(r"Reseller:\s?(.+)"), "abuse_contact": R(r"Abuse Contact:\s?(.+)"), "_test": "google.nl", @@ -792,15 +787,17 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: } ZZ["pl"] = { - "extend": "uk", + "extend": "com", + "_server": "whois.dns.pl", + "domain_name": R(r"DOMAIN NAME:\s*(.+)"), "registrar": R(r"\nREGISTRAR:\s*(.+)\n"), "creation_date": R(r"\ncreated:\s*(.+)\n"), "updated_date": R(r"\nlast modified:\s*(.+)\n"), # "expiration_date": R(r"\noption expiration date:\s*(.+)\n"), # If no "option expiration date:" is present, use "renewal date:", but only - # if it's not not followed by "option expiration date:". google.pl is the test case here + # if it's not followed by "option expiration date:". google.pl is the test case here "expiration_date": R(r"(?:\noption expiration date:|renewal date:(?!(?:.|\n)*\noption expiration date:))\s*(.+)\n"), - "name_servers": R(r"nameservers:%s" % xStr(r"(?:\s+(\S+)[^\n]*\n)?", 4)), + "name_servers": R(r"nameservers:{}".format(xStr(r"(?:\s+(\S+)[^\n]*\n)?", 4))), "status": R(r"\nStatus:\n\s*(.+)"), "_test": "google.pl", } @@ -813,7 +810,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "creation_date": R(r"Creation Date:\s?(.+)"), "expiration_date": R(r"Expiration Date:\s?(.+)"), "updated_date": None, - "name_servers": R(r"Name Server:%s" % xStr(r"(?:\s*(\S+)[^\n]*\n)?", 2)), + "name_servers": R(r"Name Server:{}".format(xStr(r"(?:\s*(\S+)[^\n]*\n)?", 2))), "status": R(r"Domain Status:\s?(.+)"), "_test": None, # portugal never answeres, timout is all we get } @@ -947,7 +944,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "creation_date": R(r"Creation date\.+:\s?(.+)"), "expiration_date": None, "updated_date": None, - "name_servers": R(r"DNS servers\n%s" % xStr(r"(?:Name\.+:\s*(\S+)\n)?", 4)), + "name_servers": R(r"DNS servers\n{}".format(xStr(r"(?:Name\.+:\s*(\S+)\n)?", 4))), "status": R(r"Domain status\.+:(.+)"), } @@ -995,7 +992,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "expiration_date": R(r"Expiration Date:\s?(.+)"), "updated_date": R(r"Updated Date:\s?(.+)"), "status": R(r"Status:\s?(.+)"), - "name_servers": R(r"Domain servers in listed order:%s\n\n" % xStr(r"(?:\n\s+(\S+))?", 4)), + "name_servers": R(r"Domain servers in listed order:{}\n\n".format(xStr(r"(?:\n\s+(\S+))?", 4))), # sometimes 'not.defined is returned as a nameserver (e.g. google.uz) } @@ -1050,7 +1047,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_server": "whois.register.bg", "domain_name": R(r"DOMAIN\s+NAME:\s+(.+)"), "status": R(r"registration\s+status:\s(.+)"), - "name_servers": R(r"NAME SERVER INFORMATION:\n%s" % xStr(r"(?:(.+)\n)?", 4)), + "name_servers": R(r"NAME SERVER INFORMATION:\n{}".format(xStr(r"(?:(.+)\n)?", 4))), "creation_date": None, "expiration_date": None, "updated_date": None, @@ -1129,7 +1126,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "updated_date": R(r"\s+Modified Date:\s+(.+)"), "status": R(r"\s+Domain Status:\s(.+)"), "registrant_country": None, - "name_servers": R(r"Name Servers:%s" % xStr(r"(?:\n[ \t]+(\S+)[^\n]*)?", 4)), + "name_servers": R(r"Name Servers:{}".format(xStr(r"(?:\n[ \t]+(\S+)[^\n]*)?", 4))), # make sure the dnssec is not matched "_test": "sgnic.sg", } @@ -1143,7 +1140,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "registrar": R(r"Registration\s+Service\s+Provider:\s+(.+)"), "updated_date": None, "registrant_country": None, - "name_servers": R(r"Domain servers in listed order:%s" % xStr(r"(?:\s+(\S+)[ \t]*\r?\n)?", 4)), + "name_servers": R(r"Domain servers in listed order:{}".format(xStr(r"(?:\s+(\S+)[ \t]*\r?\n)?", 4))), "_test": "net.tw", "registrant": R(r"\n\s*Registrant:[\s\n]*([^\n]*)\n*"), } @@ -1271,7 +1268,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_server": "whois.marnet.mk", "domain_name": R(r"domain:\s?(.+)"), "registrar": R(r"registrar:\s?(.+)"), - # "registrant": R(r"registrant:\s?(.+)"), "registrant_country": R(r"Registrant Country:\s?(.+)"), "creation_date": R(r"registered:\s?(.+)"), "expiration_date": R(r"expire:\s?(.+)"), @@ -1353,7 +1349,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "_server": "whois.nic.ve", "domain_name": R(r"domain\s*:\s?(.+)"), "registrar": R(r"registrar:\s?(.+)"), - # "registrant": R(r"registrant:\s?(.+)"), "creation_date": R(r"created:\s?(.+)"), "expiration_date": R(r"expire:\s?(.+)"), "updated_date": R(r"changed\s*:\s?(.+)"), @@ -1429,7 +1424,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "registrant": r"Registrant:\s*([^\n]*)\n", } -# unknown tld pf, pf, pf, pf, whois.registry.pf, ZZ["pf"] = { "_server": "whois.registry.pf", "_test": "registry.pf", @@ -1443,18 +1437,36 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: "registrant_country": None, } +ZZ["download"] = { + "extend": "amsterdam", + "name_servers": R(r"Name Server:[ \t]+(\S+)"), + "status": R(r"Domain Status:\s*([a-zA-z]+)"), + "_server": "whois.nic.download", +} + +ZZ["global"] = { + "extend": "amsterdam", + "name_servers": R(r"Name Server: (.+)"), + "_server": "whois.nic.global", + "_test": "nic.global", +} + # ====================================== # ====================================== # ====================================== +ZZ["aaa"] = {"_privateRegistry": True} # no whois server found in iana ZZ["aarp"] = {"_server": "whois.nic.aarp", "extend": "com", "_test": "nic.aarp"} ZZ["abbott"] = {"_server": "whois.nic.abbott", "extend": "com", "_test": "nic.abbott"} +ZZ["abb"] = {"_server": "whois.nic.abb", "_test": "nic.abb", "extend": "com"} ZZ["abbvie"] = {"_server": "whois.nic.abbvie", "extend": "com", "_test": "nic.abbvie"} ZZ["abc"] = {"_server": "whois.nic.abc", "extend": "com", "_test": "nic.abc"} +ZZ["able"] = {"_privateRegistry": True} # no whois server found in iana ZZ["abogado"] = {"_server": "whois.nic.abogado", "extend": "com", "_test": "nic.abogado"} ZZ["abudhabi"] = {"_server": "whois.nic.abudhabi", "extend": "com", "_test": "nic.abudhabi"} ZZ["academy"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ac.bd"] = {"extend": "bd"} +ZZ["accenture"] = {"_privateRegistry": True} # no whois server found in iana ZZ["accountant"] = {"extend": "com", "_server": "whois.nic.accountant", "_test": "nic.accountant"} ZZ["accountants"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ac.jp"] = {"extend": "co.jp", "_test": "icu.ac.jp"} @@ -1465,20 +1477,20 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["actor"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ac.ug"] = {"extend": "ug", "_privateRegistry": True} ZZ["ad.jp"] = {"extend": "co.jp", "_test": "nic.ad.jp"} +ZZ["ad"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ads"] = {"_server": "whois.nic.ads", "extend": "com", "_test": "nic.ads"} ZZ["adult"] = {"_server": "whois.nic.adult", "extend": "com", "_test": "nic.adult"} ZZ["aeg"] = {"_server": "whois.nic.aeg", "extend": "com", "_test": "nic.aeg"} ZZ["aero"] = {"extend": "ac", "_server": "whois.aero", "registrant_country": R(r"Registrant\s+Country:\s+(.+)")} +ZZ["aetna"] = {"_privateRegistry": True} # no whois server found in iana ZZ["af"] = {"extend": "ac"} -ZZ["com.af"] = {"extend": "af"} ZZ["afl"] = {"_server": "whois.nic.afl", "extend": "com", "_test": "nic.afl"} ZZ["africa"] = {"extend": "com", "_server": "whois.nic.africa", "_test": "nic.africa"} ZZ["agakhan"] = {"_server": "whois.nic.agakhan", "extend": "com", "_test": "nic.agakhan"} ZZ["agency"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ag"] = {"extend": "ac"} -ZZ["com.ag"] = {"extend": "ac"} - ZZ["ai"] = {"extend": "com", "_server": "whois.nic.ai"} # Anguill, "_test": "nic.ai"} +ZZ["aig"] = {"_privateRegistry": True} # no whois server found in iana ZZ["airbus"] = {"_server": "whois.nic.airbus", "extend": "com", "_test": "nic.airbus"} ZZ["airforce"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["airtel"] = {"_server": "whois.nic.airtel", "extend": "com", "_test": "nic.airtel"} @@ -1492,17 +1504,24 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["alsace"] = {"_server": "whois.nic.alsace", "extend": "com", "_test": "nic.alsace"} ZZ["alstom"] = {"_server": "whois.nic.alstom", "extend": "com", "_test": "nic.alstom"} ZZ["amazon"] = {"_server": "whois.nic.amazon", "extend": "com", "_test": "nic.amazon"} +ZZ["americanexpress"] = {"_privateRegistry": True} # no whois server found in iana ZZ["americanfamily"] = {"_server": "whois.nic.americanfamily", "extend": "com", "_test": "nic.americanfamily"} +ZZ["amex"] = {"_privateRegistry": True} # no whois server found in iana ZZ["amfam"] = {"_server": "whois.nic.amfam", "extend": "com", "_test": "nic.amfam"} +ZZ["amica"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["analytics"] = {"_privateRegistry": True} # no whois server found in iana ZZ["android"] = {"_server": "whois.nic.android", "extend": "com", "_test": "nic.android"} ZZ["anquan"] = {"extend": "_teleinfo", "_server": "whois.teleinfo.cn"} ZZ["anz"] = {"_server": "whois.nic.anz", "extend": "com", "_test": "nic.anz"} ZZ["aol"] = {"_server": "whois.nic.aol", "extend": "com", "_test": "nic.aol"} +ZZ["ao"] = {"_privateRegistry": True} # no whois server found in iana ZZ["apartments"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["app"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["apple"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["aq"] = {"_privateRegistry": True} # no whois server found in iana ZZ["aquarelle"] = {"_server": "whois.nic.aquarelle", "extend": "com", "_test": "nic.aquarelle"} ZZ["arab"] = {"_server": "whois.nic.arab", "extend": "com", "_test": "nic.arab"} +ZZ["aramco"] = {"_privateRegistry": True} # no whois server found in iana ZZ["archi"] = {"_server": "whois.nic.archi", "extend": "com", "_test": "nic.archi"} ZZ["army"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["arte"] = {"_server": "whois.nic.arte", "extend": "com", "_test": "nic.arte"} @@ -1511,6 +1530,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["as"] = {"extend": "gg"} ZZ["asia"] = {"extend": "com"} ZZ["associates"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["athleta"] = {"_privateRegistry": True} # no whois server found in iana ZZ["attorney"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["auction"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["audible"] = {"_server": "whois.nic.audible", "extend": "com", "_test": "nic.audible"} @@ -1520,13 +1540,15 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["author"] = {"_server": "whois.nic.author", "extend": "com", "_test": "nic.author"} ZZ["auto"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["autos"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} -# ZZ["avianca"] = {"_server": "whois.afilias-srs.net", "extend": "com"} -ZZ["aw"] = {"extend": "nl", "name_servers": R(r"Domain nameservers.*:\n%s" % xStr(r"(?:\s+(\S+)\n)?", 4))} +ZZ["aw"] = {"extend": "nl", "name_servers": R(r"Domain nameservers.*:\n{}".format(xStr(r"(?:\s+(\S+)\n)?", 4)))} ZZ["aws"] = {"_server": "whois.nic.aws", "extend": "com", "_test": "nic.aws"} +ZZ["axa"] = {"_privateRegistry": True} # no whois server found in iana ZZ["az"] = {"extend": "_privateReg"} +ZZ["azure"] = {"_privateRegistry": True} # no whois server found in iana ZZ["baby"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["ba"] = {"extend": "_privateReg"} ZZ["baidu"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": "nic.baidu"} +ZZ["banamex"] = {"_privateRegistry": True} # no whois server found in iana ZZ["band"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["barcelona"] = {"_server": "whois.nic.barcelona", "extend": "com", "_test": "nic.barcelona"} ZZ["barclaycard"] = {"_server": "whois.nic.barclaycard", "extend": "com", "_test": "nic.barclaycard"} @@ -1534,10 +1556,12 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["barefoot"] = {"_server": "whois.nic.barefoot", "extend": "com", "_test": "nic.barefoot"} ZZ["bar"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["bargains"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["baseball"] = {"_privateRegistry": True} # no whois server found in iana ZZ["basketball"] = {"_server": "whois.nic.basketball", "extend": "com", "_test": "nic.basketball"} ZZ["bauhaus"] = {"_server": "whois.nic.bauhaus", "extend": "com", "_test": "nic.bauhaus"} ZZ["bayern"] = {"_server": "whois.nic.bayern", "extend": "com", "_test": "nic.bayern"} ZZ["bbc"] = {"_server": "whois.nic.bbc", "extend": "com", "_test": "nic.bbc"} +ZZ["bb"] = {"_privateRegistry": True} # no whois server found in iana ZZ["bbt"] = {"_server": "whois.nic.bbt", "extend": "com", "_test": "nic.bbt"} ZZ["bbva"] = {"_server": "whois.nic.bbva", "extend": "com", "_test": "nic.bbva"} ZZ["bcg"] = {"_server": "whois.nic.bcg", "extend": "com", "_test": "nic.bcg"} @@ -1546,31 +1570,37 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["beats"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["beauty"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["beer"] = {"_server": "whois.nic.beer", "extend": "com", "_test": "nic.beer"} -# ZZ["bentley"] = {"_server": "whois.nic.bentley", "extend": "com", "_test": "nic.bentley"} ZZ["berlin"] = {"_server": "whois.nic.berlin", "extend": "com", "_test": "nic.berlin"} ZZ["bestbuy"] = {"_server": "whois.nic.bestbuy", "extend": "com", "_test": "nic.bestbuy"} ZZ["best"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["bet"] = {"extend": "ac", "_server": "whois.nic.bet", "_test": "nic.bet"} ZZ["bf"] = {"extend": "com", "_server": "whois.nic.bf", "registrant": R(r"Registrant Name:\s?(.+)"), "_test": "nic.bf"} +ZZ["bharti"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["bh"] = {"_privateRegistry": True} # no whois server found in iana ZZ["bible"] = {"_server": "whois.nic.bible", "extend": "com", "_test": "nic.bible"} ZZ["bid"] = {"extend": "ac", "_server": "whois.nic.bid", "_test": "nic.bid"} ZZ["bike"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["bingo"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["bing"] = {"_privateRegistry": True} # no whois server found in iana ZZ["bio"] = {"_server": "whois.nic.bio", "extend": "com", "_test": "nic.bio"} ZZ["bi"] = {"_server": "whois1.nic.bi", "extend": "com"} ZZ["blackfriday"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} ZZ["black"] = {"_server": "whois.nic.black", "extend": "com", "_test": "nic.black"} ZZ["blockbuster"] = {"_server": "whois.nic.blockbuster", "extend": "com", "_test": "nic.blockbuster"} ZZ["blog"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["bloomberg"] = {"_privateRegistry": True} # no whois server found in iana ZZ["blue"] = {"extend": "com"} +ZZ["bm"] = {"_privateRegistry": True} # no whois server found in iana ZZ["bms"] = {"_server": "whois.nic.bms", "extend": "com", "_test": "nic.bms"} ZZ["bmw"] = {"_server": "whois.nic.bmw", "extend": "com", "_test": "nic.bmw"} ZZ["bnpparibas"] = {"_server": "whois.nic.bnpparibas", "extend": "com", "_test": "group.bnpparibas"} +ZZ["bn"] = {"_server": "whois.bnnic.bn", "_test": "bnnic.bn", "extend": "com"} ZZ["boats"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["boehringer"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["bofa"] = {"_server": "whois.nic.bofa", "extend": "com", "_test": "nic.bofa"} ZZ["bom"] = {"extend": "com", "_server": "whois.gtlds.nic.br"} ZZ["bond"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["booking"] = {"_privateRegistry": True} # no whois server found in iana ZZ["book"] = {"_server": "whois.nic.book", "extend": "com", "_test": "nic.book"} ZZ["boo"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["bosch"] = {"_server": "whois.nic.bosch", "extend": "com", "_test": "nic.bosch"} @@ -1585,17 +1615,22 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["broker"] = {"_server": "whois.nic.broker", "extend": "com", "_test": "nic.broker"} ZZ["brother"] = {"_server": "whois.nic.brother", "extend": "com", "_test": "nic.brother"} ZZ["brussels"] = {"_server": "whois.nic.brussels", "extend": "com", "_test": "nic.brussels"} +ZZ["bs"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["bt"] = {"_privateRegistry": True} # no whois server found in iana ZZ["builders"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["build"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["business"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["buy"] = {"_server": "whois.nic.buy", "extend": "com", "_test": "nic.buy"} ZZ["buzz"] = {"extend": "amsterdam", "_server": "whois.nic.buzz"} +ZZ["bv"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["bw"] = {"_server": "whois.nic.net.bw", "_test": "net.bw", "extend": "com"} ZZ["bz"] = {"extend": "_privateReg"} ZZ["cab"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ca"] = {"extend": "com"} ZZ["cafe"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["call"] = {"_server": "whois.nic.call", "extend": "com", "_test": "nic.call"} ZZ["cal"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["calvinklein"] = {"_privateRegistry": True} # no whois server found in iana ZZ["camera"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["cam"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["camp"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -1603,6 +1638,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["capetown"] = {"_server": "whois.nic.capetown", "extend": "com", "_test": "nic.capetown"} ZZ["capital"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["capitalone"] = {"_server": "whois.nic.capitalone", "extend": "com", "_test": "nic.capitalone"} +ZZ["caravan"] = {"_privateRegistry": True} # no whois server found in iana ZZ["cards"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["career"] = {"_server": "whois.nic.career", "extend": "com", "_test": "nic.career"} ZZ["careers"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -1618,16 +1654,19 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["catholic"] = {"_server": "whois.nic.catholic", "extend": "com", "_test": "nic.catholic"} ZZ["ca.ug"] = {"extend": "ug"} ZZ["cba"] = {"_server": "whois.nic.cba", "extend": "com", "_test": "nic.cba"} -# ZZ["cbs"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["cbn"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["cbre"] = {"_privateRegistry": True} # no whois server found in iana ZZ["cd"] = {"extend": "ac", "_server": "whois.nic.cd", "registrant_country": R(r"Registrant\s+Country:\s+(.+)"), "_test": "nic.cd"} ZZ["center"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ceo"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["cern"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["cfa"] = {"_server": "whois.nic.cfa", "extend": "com", "_test": "nic.cfa"} ZZ["cfd"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["cg"] = {"_privateRegistry": True} # no whois server found in iana ZZ["chanel"] = {"_server": "whois.nic.chanel", "extend": "com", "_test": "nic.chanel"} ZZ["channel"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["charity"] = {"extend": "_donuts", "_server": "whois.nic.charity", "_test": "nic.charity"} +ZZ["chase"] = {"_privateRegistry": True} # no whois server found in iana ZZ["chat"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["cheap"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ch"] = {"extend": "_privateReg"} @@ -1637,9 +1676,13 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["church"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["cipriani"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["circle"] = {"_server": "whois.nic.circle", "extend": "com", "_test": "nic.circle"} +ZZ["cisco"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ci"] = {"_server": "whois.nic.ci", "extend": "com", "_test": "nic.ci"} -# ZZ["cityeats"] = {"_server": "whois.nic.cityeats", "extend": "com", "_test": "nic.cityeats"} +ZZ["citadel"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["citic"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["citi"] = {"_privateRegistry": True} # no whois server found in iana ZZ["city"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["ck"] = {"_privateRegistry": True} # no whois server found in iana ZZ["claims"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["cleaning"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["click"] = {"extend": "com"} @@ -1651,20 +1694,23 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["clubmed"] = {"_server": "whois.nic.clubmed", "extend": "com", "_test": "nic.clubmed"} ZZ["cm"] = {"extend": "com"} ZZ["coach"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["co.cr"] = {"extend": "cr"} ZZ["codes"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["co"] = {"extend": "biz", "status": R(r"Status:\s?(.+)")} ZZ["coffee"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["co.ke"] = {"extend": "ke"} ZZ["college"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["cologne"] = {"_server": "whois.ryce-rsp.com", "extend": "com"} +ZZ["com.af"] = {"extend": "af"} +ZZ["com.ag"] = {"extend": "ac"} ZZ["com.au"] = {"extend": "au"} ZZ["com.bd"] = {"extend": "bd"} ZZ["com.bo"] = {"extend": "bo"} -# ZZ["comcast"] = {"_server": "whois.nic.comcast", "extend": "com", "_test": "nic.comcast"} # Revocation of the .comcast domain (2024-02-07) ZZ["com.cn"] = {"extend": "cn"} ZZ["com.do"] = {"extend": "_privateReg"} ZZ["com.ec"] = {"extend": "ec"} -ZZ["com.eg"] = {"extend": "_privateReg"} # Egipt +ZZ["com.eg"] = {"extend": "_privateReg"} +ZZ["com.et"] = {"extend": "et", "_test": "google.com.et"} ZZ["com.ly"] = {"extend": "ly"} ZZ["commbank"] = {"_server": "whois.nic.commbank", "extend": "com", "_test": "nic.commbank"} ZZ["com.mo"] = {"extend": "mo"} @@ -1695,6 +1741,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["co.rw"] = {"extend": "rw"} ZZ["co.ug"] = {"extend": "ug"} ZZ["country"] = {"_server": "whois.nic.country", "extend": "com", "_test": "nic.country"} +ZZ["coupon"] = {"_privateRegistry": True} # no whois server found in iana ZZ["coupons"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["courses"] = {"extend": "com"} ZZ["co.ve"] = {"extend": "ve"} @@ -1703,21 +1750,20 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["creditcard"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["credit"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["creditunion"] = {"_server": "whois.afilias-srs.net", "extend": "com"} - ZZ["cr"] = {"extend": "cz"} -ZZ["co.cr"] = {"extend": "cr"} - ZZ["cricket"] = {"extend": "com", "_server": "whois.nic.cricket", "_test": "nic.cricket"} +ZZ["crown"] = {"_server": "whois.nic.crown", "_test": "nic.crown", "extend": "com"} +ZZ["crs"] = {"_server": "whois.nic.crs", "_test": "nic.crs", "extend": "com"} ZZ["cruise"] = {"_server": "whois.nic.cruise", "extend": "com", "_test": "nic.cruise"} ZZ["cruises"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["cuisinella"] = {"_server": "whois.nic.cuisinella", "extend": "com", "_test": "nic.cuisinella"} +ZZ["cu"] = {"_privateRegistry": True} # no whois server found in iana ZZ["cv"] = {"extend": "_privateReg"} # Cape Verde ZZ["cw"] = {"extend": "_privateReg"} ZZ["cx"] = {"extend": "com"} -ZZ["cymru"] = {"_server": "whois.nic.cymru", "extend": "com", "_test": "nic.cymru"} +ZZ["cymru"] = {"_server": "whois.nic.cymru", "extend": "com", "_test": "nic.cymru"} # Yea ZZ["cyou"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["cy"] = {"_privateRegistry": True} -# ZZ["dabur"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["dad"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["dance"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["data"] = {"_server": "whois.nic.data", "extend": "com", "_test": "nic.data"} @@ -1732,6 +1778,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["deals"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["degree"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["delivery"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["dell"] = {"_privateRegistry": True} # no whois server found in iana ZZ["deloitte"] = {"_server": "whois.nic.deloitte", "extend": "com", "_test": "nic.deloitte"} ZZ["delta"] = {"_server": "whois.nic.delta", "extend": "com", "_test": "nic.delta"} ZZ["democrat"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -1740,14 +1787,17 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["desi"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["design"] = {"extend": "ac"} ZZ["dev"] = {"extend": "com"} +ZZ["dhl"] = {"_privateRegistry": True} # no whois server found in iana ZZ["diamonds"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["diet"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} ZZ["digital"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["direct"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["directory"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["discount"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["discover"] = {"_privateRegistry": True} # no whois server found in iana ZZ["dish"] = {"_server": "whois.nic.dish", "extend": "com", "_test": "nic.dish"} ZZ["diy"] = {"_server": "whois.nic.diy", "extend": "com", "_test": "nic.diy"} +ZZ["dj"] = {"_privateRegistry": True} # no whois server found in iana ZZ["dm"] = {"_server": "whois.dmdomains.dm", "extend": "com"} ZZ["dnp"] = {"_server": "whois.nic.dnp", "extend": "com", "_test": "nic.dnp"} ZZ["docs"] = {"_server": "whois.nic.google", "extend": "com"} @@ -1757,17 +1807,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["dog"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["domains"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["dot"] = {"_server": "whois.nic.dot", "extend": "com", "_test": "nic.dot"} -ZZ["download"] = { - "extend": "amsterdam", - "name_servers": R(r"Name Server:[ \t]+(\S+)"), - "status": R(r"Domain Status:\s*([a-zA-z]+)"), - "_server": "whois.nic.download", -} ZZ["drive"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["dtv"] = {"_server": "whois.nic.dtv", "extend": "com", "_test": "nic.dtv"} ZZ["dubai"] = {"_server": "whois.nic.dubai", "extend": "com", "_test": "nic.dubai"} ZZ["duckdns.org"] = {"extend": "_privateReg"} -# ZZ["dunlop"] = {"_server": "whois.nic.dunlop", "extend": "com", "_test": "nic.dunlop"} +ZZ["dupont"] = {"_privateRegistry": True} # no whois server found in iana ZZ["durban"] = {"_server": "whois.nic.durban", "extend": "com", "_test": "nic.durban"} ZZ["dvag"] = {"_server": "whois.nic.dvag", "extend": "com", "_test": "nic.dvag"} ZZ["dvr"] = {"_server": "whois.nic.dvr", "extend": "com", "_test": "nic.dvr"} @@ -1792,12 +1836,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["equipment"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ericsson"] = {"_server": "whois.nic.ericsson", "extend": "com", "_test": "nic.ericsson"} ZZ["erni"] = {"_server": "whois.nic.erni", "extend": "com", "_test": "nic.erni"} +ZZ["er"] = {"_privateRegistry": True} # no whois server found in iana ZZ["es"] = {"extend": "_privateReg"} ZZ["esq"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["estate"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["et"] = {"extend": "com", "_server": "whois.ethiotelecom.et"} -ZZ["com.et"] = {"extend": "et", "_test": "google.com.et"} -# ZZ["etisalat"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["eurovision"] = {"_server": "whois.nic.eurovision", "extend": "com", "_test": "nic.eurovision"} ZZ["eus"] = {"extend": "ac"} ZZ["events"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -1813,12 +1856,14 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["family"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["fan"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["fans"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["farmers"] = {"_privateRegistry": True} # no whois server found in iana ZZ["farm"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["fashion"] = {"extend": "com", "_server": "whois.nic.fashion", "_test": "nic.fashion"} ZZ["fast"] = {"_server": "whois.nic.fast", "extend": "com", "_test": "nic.fast"} ZZ["fedex"] = {"_server": "whois.nic.fedex", "extend": "com", "_test": "nic.fedex"} ZZ["feedback"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["ferrari"] = {"_server": "whois.nic.ferrari", "extend": "com", "_test": "nic.ferrari"} +ZZ["ferrero"] = {"_privateRegistry": True} # no whois server found in iana ZZ["fidelity"] = {"_server": "whois.nic.fidelity", "extend": "com", "_test": "nic.fidelity"} ZZ["fido"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["film"] = {"_server": "whois.nic.film", "extend": "com", "_test": "nic.film"} @@ -1832,14 +1877,20 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["fishing"] = {"_server": "whois.nic.fishing", "extend": "com", "_test": "nic.fishing"} ZZ["fit"] = {"extend": "com"} ZZ["fitness"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["fj"] = {"_server": "whois.nic.fj", "_test": "nic.fj", "extend": "com"} +ZZ["fk"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["flickr"] = {"_privateRegistry": True} # no whois server found in iana ZZ["flights"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["flir"] = {"_privateRegistry": True} # no whois server found in iana ZZ["florist"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["flowers"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} ZZ["fly"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["fm"] = {"extend": "com"} ZZ["fo"] = {"extend": "com", "registrant": None} +ZZ["food"] = {"_privateRegistry": True} # no whois server found in iana ZZ["foo"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["football"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["ford"] = {"_privateRegistry": True} # no whois server found in iana ZZ["forex"] = {"_server": "whois.nic.forex", "extend": "com", "_test": "nic.forex"} ZZ["forsale"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["forum"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} @@ -1849,7 +1900,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["fresenius"] = {"_server": "whois.nic.fresenius", "extend": "com", "_test": "nic.fresenius"} ZZ["frl"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["frogans"] = {"_server": "whois.nic.frogans", "extend": "com", "_test": "nic.frogans"} -# ZZ["frontdoor"] = {"_server": "whois.nic.frontdoor", "extend": "com", "_test": "nic.frontdoor"} +ZZ["frontier"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["ftr"] = {"_privateRegistry": True} # no whois server found in iana ZZ["fujitsu"] = {"_server": "whois.nic.gmo", "extend": "com"} ZZ["fund"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["fun"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} @@ -1863,9 +1915,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["gal"] = {"_server": "whois.nic.gal", "extend": "com", "_test": "nic.gal"} ZZ["game"] = {"extend": "amsterdam", "_server": "whois.nic.game"} ZZ["games"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["gap"] = {"_privateRegistry": True} # no whois server found in iana ZZ["garden"] = {"extend": "com", "_server": "whois.nic.garden", "_test": "nic.garden"} ZZ["gay"] = {"extend": "com", "_server": "whois.nic.gay", "_test": "nic.gay"} ZZ["gbiz"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["gb"] = {"_privateRegistry": True} # no whois server found in iana ZZ["gd"] = {"extend": "com"} ZZ["gdn"] = {"_server": "whois.nic.gdn", "extend": "com", "_test": "nic.gdn"} # no host ip for whois.nic.gdn ZZ["gea"] = {"_server": "whois.nic.gea", "extend": "com", "_test": "nic.gea"} @@ -1884,18 +1938,14 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["giving"] = {"_server": "whois.nic.giving", "extend": "com", "_test": "nic.giving"} ZZ["glass"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["gle"] = {"_server": "whois.nic.google", "extend": "com"} -ZZ["global"] = { - "extend": "amsterdam", - "name_servers": R(r"Name Server: (.+)"), - "_server": "whois.nic.global", - "_test": "nic.global", -} ZZ["globo"] = {"_server": "whois.gtlds.nic.br", "extend": "bom"} ZZ["gl"] = {"_server": "whois.nic.gl", "extend": "com", "_test": "nic.gl"} ZZ["gmail"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["gmbh"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["gmo"] = {"_server": "whois.nic.gmo", "extend": "com", "_test": "nic.gmo"} +ZZ["gm"] = {"_privateRegistry": True} # no whois server found in iana ZZ["gmx"] = {"_server": "whois.nic.gmx", "extend": "com", "_test": "nic.gmx"} +ZZ["gn"] = {"_privateRegistry": True} # no whois server found in iana ZZ["gob.ec"] = {"extend": "ec"} ZZ["godaddy"] = {"_server": "whois.nic.godaddy", "extend": "com", "_test": "nic.godaddy"} ZZ["go.jp"] = {"extend": "co.jp"} @@ -1906,21 +1956,25 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["goodyear"] = {"_server": "whois.nic.goodyear", "extend": "com", "_test": "nic.goodyear"} ZZ["google"] = {"_server": "whois.nic.google", "extend": "com", "_test": "nic.google"} ZZ["goog"] = {"_server": "whois.nic.google", "extend": "com"} -ZZ["goo"] = {"_server": "whois.nic.gmo", "extend": "com"} +# ZZ["goo"] = {"_server": "whois.nic.gmo", "extend": "com"} ZZ["gop"] = {"_server": "whois.nic.gop", "extend": "com", "_test": "nic.gop"} ZZ["go.th"] = {"extend": "co.th"} ZZ["got"] = {"_server": "whois.nic.got", "extend": "com", "_test": "nic.got"} ZZ["gov.bd"] = {"extend": "bd"} +ZZ["gov.bn"] = {"_server": "whois.bnnic.bn", "_test": "egc.gov.bn", "extend": "com"} ZZ["gov"] = {"extend": "com"} ZZ["gov.rw"] = {"extend": "rw"} ZZ["gov.tr"] = {"extend": "com.tr", "_server": "whois.trabis.gov.tr", "_test": "www.turkiye.gov.tr"} +ZZ["gp"] = {"_server": "whois.nic.gp", "_test": "nic.gp", "extend": "com"} ZZ["gq"] = {"extend": "ml", "_server": "whois.domino.gq"} +ZZ["grainger"] = {"_privateRegistry": True} # no whois server found in iana ZZ["graphics"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["gratis"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["green"] = {"extend": "com"} ZZ["gr"] = {"extend": "_privateReg"} ZZ["gripe"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["gr.jp"] = {"extend": "co.jp"} +ZZ["grocery"] = {"_privateRegistry": True} # no whois server found in iana ZZ["group"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["gs"] = {"_server": "whois.nic.gs", "extend": "com", "_test": "nic.gs"} ZZ["gt"] = {"extend": "_privateReg"} @@ -1928,12 +1982,15 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["guge"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["guide"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["guitars"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} +ZZ["gu"] = {"_privateRegistry": True} # no whois server found in iana ZZ["guru"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["gw"] = {"_privateRegistry": True} # no whois server found in iana ZZ["gy"] = {"extend": "com"} ZZ["hair"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["hamburg"] = {"_server": "whois.nic.hamburg", "extend": "com", "_test": "nic.hamburg"} ZZ["hangout"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["haus"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["hbo"] = {"_privateRegistry": True} # no whois server found in iana ZZ["hdfcbank"] = {"_server": "whois.nic.hdfcbank", "extend": "com", "_test": "nic.hdfcbank"} ZZ["hdfc"] = {"_server": "whois.nic.hdfc", "extend": "com", "_test": "nic.hdfc"} ZZ["healthcare"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -1947,11 +2004,14 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["hitachi"] = {"_server": "whois.nic.gmo", "extend": "com"} ZZ["hiv"] = {"_server": "whois.nic.hiv", "extend": "com", "_test": "nic.hiv"} ZZ["hkt"] = {"_server": "whois.nic.hkt", "extend": "com", "_test": "nic.hkt"} +ZZ["hm"] = {"_server": "whois.registry.hm", "_test": "registry.hm", "extend": "com"} ZZ["hn"] = {"extend": "com"} # Honduras ZZ["hockey"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["holdings"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["holiday"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["homedepot"] = {"_server": "whois.nic.homedepot", "extend": "com", "_test": "nic.homedepot"} +ZZ["homegoods"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["homesense"] = {"_privateRegistry": True} # no whois server found in iana ZZ["homes"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["honda"] = {"_server": "whois.nic.honda", "extend": "com", "_test": "nic.honda"} ZZ["hopto.org"] = {"extend": "_privateReg"} # dynamic dns without any whois @@ -1959,17 +2019,22 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["hospital"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["host"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["hosting"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} +ZZ["hotels"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["hotmail"] = {"_privateRegistry": True} # no whois server found in iana ZZ["hot"] = {"_server": "whois.nic.hot", "extend": "com", "_test": "nic.hot"} ZZ["house"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["how"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["hsbc"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ht"] = {"_server": "whois.nic.ht", "extend": "com", "_test": "nic.ht"} ZZ["hu"] = {"extend": "_privateReg"} ZZ["hughes"] = {"_server": "whois.nic.hughes", "extend": "com", "_test": "nic.hughes"} +ZZ["hyatt"] = {"_privateRegistry": True} # no whois server found in iana ZZ["hyundai"] = {"_server": "whois.nic.hyundai", "extend": "com", "_test": "nic.hyundai"} ZZ["ibm"] = {"_server": "whois.nic.ibm", "extend": "com", "_test": "nic.ibm"} ZZ["icbc"] = {"_server": "whois.nic.icbc", "extend": "com", "_test": "nic.icbc"} ZZ["ice"] = {"_server": "whois.nic.ice", "extend": "com", "_test": "nic.ice"} ZZ["icu"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["ieee"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ie"] = {"extend": "com"} # Ireland ZZ["ifm"] = {"_server": "whois.nic.ifm", "extend": "com", "_test": "nic.ifm"} ZZ["ikano"] = {"_server": "whois.nic.ikano", "extend": "com", "_test": "nic.ikano"} @@ -1981,7 +2046,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["industries"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["in"] = {"extend": "com", "_server": "whois.registry.in"} ZZ["infiniti"] = {"_server": "whois.nic.gmo", "extend": "com"} -# ZZ["info"] = {"extend": "com"} # only rdap ZZ["info.ke"] = {"extend": "ke"} ZZ["info.ve"] = {"extend": "ve"} ZZ["ing"] = {"_server": "whois.nic.google", "extend": "com"} @@ -1991,12 +2055,17 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["insure"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["international"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["in.th"] = {"extend": "co.th"} +ZZ["int"] = {"_server": "whois.iana.org", "_test": "eu.int", "extend": "cz"} +ZZ["intuit"] = {"_privateRegistry": True} # no whois server found in iana ZZ["investments"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["io"] = {"extend": "com", "expiration_date": R(r"\nRegistry Expiry Date:\s?(.+)")} +ZZ["ipiranga"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["iq"] = {"_server": " whois.cmc.iq", "_test": "cmc.iq", "extend": "com"} # ho host: whois.cmc.iq ZZ["irish"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["ismaili"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["istanbul"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["ist"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["itau"] = {"_privateRegistry": True} # no whois server found in iana ZZ["itv"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["jaguar"] = {"_server": "whois.nic.jaguar", "extend": "com", "_test": "nic.jaguar"} ZZ["java"] = {"_server": "whois.nic.java", "extend": "com", "_test": "nic.java"} @@ -2007,42 +2076,53 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["jewelry"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["jio"] = {"_server": "whois.nic.jio", "extend": "com", "_test": "nic.jio"} ZZ["jll"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["jmp"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["jm"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["jnj"] = {"_privateRegistry": True} # no whois server found in iana ZZ["jobs"] = {"_server": "whois.nic.jobs", "extend": "com", "_test": "nic.jobs"} ZZ["joburg"] = {"_server": "whois.nic.joburg", "extend": "com", "_test": "nic.joburg"} +ZZ["jo"] = {"_privateRegistry": True} # no whois server found in iana ZZ["jot"] = {"_server": "whois.nic.jot", "extend": "com", "_test": "nic.jot"} ZZ["joy"] = {"_server": "whois.nic.joy", "extend": "com", "_test": "nic.joy"} +ZZ["jpmorgan"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["jprs"] = {"_privateRegistry": True} # no whois server found in iana ZZ["juegos"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} ZZ["juniper"] = {"_server": "whois.nic.juniper", "extend": "com", "_test": "nic.juniper"} ZZ["kaufen"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["kddi"] = {"_server": "whois.nic.kddi", "extend": "com", "_test": "nic.kddi"} ZZ["ke"] = {"extend": "com", "_server": "whois.kenic.or.ke"} ZZ["kerryhotels"] = {"_server": "whois.nic.kerryhotels", "extend": "com", "_test": "nic.kerryhotels"} -# ZZ["kerrylogistics"] = {"_server": "whois.nic.kerrylogistics", "extend": "com", "_test": "nic.kerrylogistics"} ZZ["kerryproperties"] = {"_server": "whois.nic.kerryproperties", "extend": "com", "_test": "nic.kerryproperties"} ZZ["kfh"] = {"_server": "whois.nic.kfh", "extend": "com", "_test": "nic.kfh"} +ZZ["kh"] = {"_privateRegistry": True} # no whois server found in iana ZZ["kia"] = {"_server": "whois.nic.kia", "extend": "com", "_test": "nic.kia"} ZZ["kids"] = {"_server": "whois.afilias-srs.net", "extend": "com"} -ZZ["ki"] = {"extend": "com", "_server": "whois.nic.ki", "_test": None} # kiribati never answeres, timout is the normal response +ZZ["ki"] = {"extend": "com", "_server": "whois.nic.ki", "_test": None} # kiribati never answeres ZZ["kim"] = {"_server": "whois.nic.kim", "extend": "com", "_test": "nic.kim"} ZZ["kindle"] = {"_server": "whois.nic.kindle", "extend": "com", "_test": "nic.kindle"} ZZ["kitchen"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["kiwi"] = {"extend": "com"} +ZZ["km"] = {"_privateRegistry": True} # no whois server found in iana ZZ["kn"] = {"extend": "com"} # Saint Kitts and Nevis ZZ["koeln"] = {"_server": "whois.ryce-rsp.com", "extend": "com"} ZZ["komatsu"] = {"_server": "whois.nic.komatsu", "extend": "com", "_test": "nic.komatsu"} ZZ["kosher"] = {"_server": "whois.nic.kosher", "extend": "com", "_test": "nic.kosher"} +ZZ["kpmg"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["kpn"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["kp"] = {"_privateRegistry": True} # no whois server found in iana ZZ["krd"] = {"_server": "whois.nic.krd", "extend": "com", "_test": "nic.krd"} ZZ["kred"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["kuokgroup"] = {"_server": "whois.nic.kuokgroup", "extend": "com", "_test": "nic.kuokgroup"} +ZZ["kw"] = {"_privateRegistry": True} # no whois server found in iana ZZ["kyoto"] = {"_server": "whois.nic.kyoto", "extend": "com", "_test": "nic.kyoto"} ZZ["ky"] = {"_server": "whois.kyregistry.ky", "extend": "com"} ZZ["lacaixa"] = {"_server": "whois.nic.lacaixa", "extend": "com", "_test": "nic.lacaixa"} ZZ["la"] = {"extend": "com"} ZZ["lamborghini"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["lamer"] = {"_server": "whois.nic.lamer", "extend": "com", "_test": "nic.lamer"} -# ZZ["lancaster"] = {"_server": "whois.nic.lancaster", "extend": "com", "_test": "nic.lancaster"} ZZ["land"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["landrover"] = {"_server": "whois.nic.landrover", "extend": "com", "_test": "nic.landrover"} +ZZ["lanxess"] = {"_privateRegistry": True} # no whois server found in iana ZZ["lasalle"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["lat"] = {"extend": "com"} ZZ["latino"] = {"_server": "whois.nic.latino", "extend": "com", "_test": "nic.latino"} @@ -2063,14 +2143,17 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["lidl"] = {"_server": "whois.nic.lidl", "extend": "com", "_test": "nic.lidl"} ZZ["li"] = {"extend": "_privateReg"} ZZ["life"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["lifeinsurance"] = {"_privateRegistry": True} # no whois server found in iana ZZ["lifestyle"] = {"_server": "whois.nic.lifestyle", "extend": "com", "_test": "nic.lifestyle"} ZZ["lighting"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["like"] = {"_server": "whois.nic.like", "extend": "com", "_test": "nic.like"} +ZZ["lilly"] = {"_privateRegistry": True} # no whois server found in iana ZZ["limited"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["limo"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["lincoln"] = {"_privateRegistry": True} # no whois server found in iana ZZ["link"] = {"extend": "amsterdam", "_server": "whois.uniregistry.net"} -# ZZ["lipsy"] = {"_server": "whois.nic.lipsy", "extend": "com", "_test": "nic.lipsy"} ZZ["live"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["living"] = {"_privateRegistry": True} # no whois server found in iana ZZ["lk"] = {"extend": "_privateReg"} # Sri Lanka ZZ["llc"] = {"_server": "whois.nic.llc", "extend": "com", "_test": "nic.llc"} ZZ["llp"] = {"_server": "whois.nic.llp", "extend": "com", "_test": "nic.llp"} @@ -2085,6 +2168,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["love"] = {"extend": "ac", "registrant_country": R(r"Registrant\s+Country:\s+(.+)")} ZZ["lplfinancial"] = {"_server": "whois.nic.lplfinancial", "extend": "com", "_test": "nic.lplfinancial"} ZZ["lpl"] = {"_server": "whois.nic.lpl", "extend": "com", "_test": "nic.lpl"} +ZZ["lr"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ls"] = {"extend": "cz", "_server": "whois.nic.ls", "_test": "nic.ls"} ZZ["ltda"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["ltd"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2095,6 +2179,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["ly"] = {"extend": "ac", "_server": "whois.nic.ly", "registrant_country": R(r"Registrant\s+Country:\s+(.+)"), "_test": "nic.ly"} ZZ["madrid"] = {"_server": "whois.nic.madrid", "extend": "com", "_test": "nic.madrid"} ZZ["ma"] = {"extend": "ac", "_server": "whois.registre.ma", "registrar": R(r"Sponsoring Registrar:\s*(.+)")} +ZZ["maif"] = {"_privateRegistry": True} # no whois server found in iana ZZ["maison"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["makeup"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["management"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2105,6 +2190,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["marketing"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["markets"] = {"_server": "whois.nic.markets", "extend": "com", "_test": "nic.markets"} ZZ["marriott"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["marshalls"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["mattel"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mba"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["mckinsey"] = {"_server": "whois.nic.mckinsey", "extend": "com", "_test": "nic.mckinsey"} ZZ["media"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2116,17 +2203,23 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["memorial"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["men"] = {"_server": "whois.nic.men", "extend": "com", "_test": "nic.men"} ZZ["menu"] = {"_server": "whois.nic.menu", "extend": "com", "_test": "nic.menu"} +ZZ["merckmsd"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mg"] = {"extend": "ac", "registrant_country": R(r"Registrant\s+Country:\s+(.+)")} +ZZ["mh"] = {"_privateRegistry": True} # no whois server found in iana ZZ["miami"] = {"_server": "whois.nic.miami", "extend": "com", "_test": "nic.miami"} +ZZ["microsoft"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["mil"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mil.rw"] = {"extend": "rw"} ZZ["mini"] = {"_server": "whois.nic.mini", "extend": "com", "_test": "nic.mini"} +ZZ["mint"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mit"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["mitsubishi"] = {"_server": "whois.nic.gmo", "extend": "com"} +ZZ["mlb"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mls"] = {"_server": "whois.nic.mls", "extend": "com", "_test": "nic.mls"} ZZ["mma"] = {"_server": "whois.nic.mma", "extend": "com", "_test": "nic.mma"} +ZZ["mm"] = {"_server": "whois.registry.gov.mm", "_test": "registry.gov.mm", "extend": "com"} ZZ["mn"] = {"extend": "com"} ZZ["mn"] = {"extend": "com", "_server": "whois.nic.mn", "_test": "nic.mn"} -# ZZ["mobi"] = {"extend": "com", "expiration_date": R(r"\nRegistry Expiry Date:\s?(.+)"), "updated_date": R(r"\nUpdated Date:\s?(.+)")} # only rdap ZZ["mobi.ke"] = {"extend": "ke"} ZZ["mobile"] = {"_server": "whois.nic.mobile", "extend": "com", "_test": "nic.mobile"} ZZ["moda"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2139,35 +2232,41 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["mormon"] = {"_server": "whois.nic.mormon", "extend": "com", "_test": "nic.mormon"} ZZ["mortgage"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["moscow"] = {"_server": "whois.nic.moscow", "extend": "com", "_test": "nic.moscow"} +ZZ["moto"] = {"_privateRegistry": True} # no whois server found in iana ZZ["motorcycles"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["mov"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["movie"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["mp"] = {"extend": "_privateReg"} ZZ["mq"] = {"extend": "si", "_server": "whois.mediaserv.net"} -ZZ["mr"] = {"_server": "whois.nic.mr", "extend": "com", "_test": "nic.mr"} # server exists but: "Unable to connect to remote host" -ZZ["msk.ru"] = {"extend": "com.ru"} # test with: mining.msk.ru -# ZZ["ms"] = {"_server": "whois.nic.ms", "extend": "com", "_test": "nic.ms"} # whois.nic.ms does not exist +ZZ["mr"] = {"_server": "whois.nic.mr", "extend": "com", "_test": "nic.mr"} +ZZ["msd"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ms"] = {"extend": "_privateReg"} +ZZ["msk.ru"] = {"extend": "com.ru"} # test with: mining.msk.ru ZZ["mtn"] = {"_server": "whois.nic.mtn", "extend": "com", "_test": "nic.mtn"} +ZZ["mt"] = {"_privateRegistry": True} # no whois server found in iana ZZ["mtr"] = {"_server": "whois.nic.mtr", "extend": "com", "_test": "nic.mtr"} ZZ["mu"] = {"extend": "bank"} ZZ["mu"] = {"extend": "bank"} ZZ["museum"] = {"_server": "whois.nic.museum", "extend": "com", "_test": "nic.museum"} ZZ["music"] = {"_server": "whois.nic.music", "extend": "com", "_test": "nic.music"} +ZZ["mv"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["mw"] = {"_server": "whois.nic.mw", "_test": "nic.mw", "extend": "fr"} ZZ["my"] = {"extend": "_privateReg"} ZZ["mz"] = {"_server": "whois.nic.mz", "extend": "com", "_test": "nic.mz"} ZZ["nab"] = {"_server": "whois.nic.nab", "extend": "com", "_test": "nic.nab"} ZZ["nagoya"] = {"_server": "whois.nic.nagoya", "extend": "com", "_test": "nic.nagoya"} ZZ["name"] = {"extend": "com", "status": R(r"Domain Status:\s?(.+)")} ZZ["na"] = {"_server": "whois.na-nic.com.na", "extend": "com"} -# ZZ["natura"] = {"_server": "whois.gtlds.nic.br", "extend": "bom"} ZZ["navy"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["nba"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nec"] = {"_server": "whois.nic.nec", "extend": "com", "_test": "nic.nec"} ZZ["ne.jp"] = {"extend": "co.jp"} ZZ["ne.ke"] = {"extend": "ke"} +ZZ["ne"] = {"_privateRegistry": True} # no whois server found in iana ZZ["netbank"] = {"_server": "whois.nic.netbank", "extend": "com", "_test": "nic.netbank"} ZZ["net.bd"] = {"extend": "bd"} ZZ["net"] = {"extend": "com"} +ZZ["netflix"] = {"_privateRegistry": True} # no whois server found in iana ZZ["net.ph"] = {"extend": "ph"} ZZ["net.rw"] = {"extend": "rw"} ZZ["net.tr"] = {"extend": "com.tr", "_server": "whois.trabis.gov.tr", "_test": "trt.net.tr"} @@ -2175,18 +2274,22 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["net.ve"] = {"extend": "ve"} ZZ["network"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["net.za"] = {"extend": "za", "_server": "net-whois.registry.net.za"} +ZZ["neustar"] = {"_privateRegistry": True} # no whois server found in iana ZZ["new"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["news"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["nextdirect"] = {"_server": "whois.nic.nextdirect", "extend": "com", "_test": "nic.nextdirect"} ZZ["next"] = {"_server": "whois.nic.next", "extend": "com", "_test": "nic.next"} ZZ["nexus"] = {"extend": "com", "_server": "whois.nic.google"} +ZZ["nfl"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nf"] = {"_server": "whois.nic.nf", "extend": "com", "_test": "nic.nf"} ZZ["ngo"] = {"_server": "whois.nic.ngo", "extend": "com", "_test": "nic.ngo"} ZZ["ng"] = {"_server": "whois.nic.net.ng", "extend": "ac", "registrant_country": R(r"Registrant Country:\s+(.+)")} ZZ["nhk"] = {"_server": "whois.nic.nhk", "extend": "com", "_test": "nic.nhk"} ZZ["nico"] = {"_server": "whois.nic.nico", "extend": "com", "_test": "nic.nico"} +ZZ["nike"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nikon"] = {"_server": "whois.nic.nikon", "extend": "com", "_test": "nic.nikon"} ZZ["ninja"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["ni"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nissan"] = {"_server": "whois.nic.gmo", "extend": "com"} ZZ["nissay"] = {"_server": "whois.nic.nissay", "extend": "com", "_test": "nic.nissay"} ZZ["noip.com"] = {"extend": "_privateReg"} @@ -2198,10 +2301,13 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["nowtv"] = {"_server": "whois.nic.nowtv", "extend": "com", "_test": "nic.nowtv"} ZZ["np"] = {"extend": "_privateReg"} ZZ["nra"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["nr"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nrw"] = {"extend": "com"} +ZZ["ntt"] = {"_privateRegistry": True} # no whois server found in iana ZZ["nu"] = {"extend": "se"} ZZ["obi"] = {"_server": "whois.nic.obi", "extend": "com", "_test": "nic.obi"} ZZ["observer"] = {"extend": "com", "_server": "whois.nic.observer", "_test": "nic.observer"} +ZZ["office"] = {"_privateRegistry": True} # no whois server found in iana ZZ["okinawa"] = {"_server": "whois.nic.okinawa", "extend": "com", "_test": "nic.okinawa"} ZZ["olayangroup"] = {"_server": "whois.nic.olayangroup", "extend": "com", "_test": "nic.olayangroup"} ZZ["olayan"] = {"_server": "whois.nic.olayan", "extend": "com", "_test": "nic.olayan"} @@ -2210,9 +2316,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["om"] = {"_server": "whois.registry.om", "extend": "com", "_test": "registry.om"} ZZ["one"] = {"extend": "com", "_server": "whois.nic.one", "_test": "nic.one"} ZZ["ong"] = {"extend": "ac", "registrant_country": R(r"Registrant Country:\s+(.+)")} +ZZ["onion"] = {"_privateRegistry": True} # this is a special case https://tools.ietf.org/html/rfc7686 ZZ["onl"] = {"extend": "com"} ZZ["online"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["ooo"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["open"] = {"_privateRegistry": True} # no whois server found in iana ZZ["oracle"] = {"_server": "whois.nic.oracle", "extend": "com", "_test": "nic.oracle"} ZZ["orange"] = {"_server": "whois.nic.orange", "extend": "com", "_test": "nic.orange"} ZZ["organic"] = {"_server": "whois.nic.organic", "extend": "com", "_test": "nic.organic"} @@ -2241,6 +2349,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["pccw"] = {"_server": "whois.nic.pccw", "extend": "com", "_test": "nic.pccw"} ZZ["pe"] = {"extend": "com", "registrant": R(r"Registrant Name:\s?(.+)"), "admin": R(r"Admin Name:\s?(.+)")} ZZ["pet"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["pfizer"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["pg"] = {"_privateRegistry": True} # no whois server found in iana ZZ["phd"] = {"extend": "com", "_server": "whois.nic.google"} ZZ["ph"] = {"extend": "_privateReg"} ZZ["ph"] = {"extend": "_privateReg"} @@ -2251,8 +2361,10 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["photos"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["physio"] = {"_server": "whois.nic.physio", "extend": "com", "_test": "nic.physio"} ZZ["pics"] = {"extend": "ac"} +ZZ["pictet"] = {"_privateRegistry": True} # no whois server found in iana ZZ["pictures"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["pid"] = {"_server": "whois.nic.pid", "extend": "com", "_test": "nic.pid"} +ZZ["ping"] = {"_privateRegistry": True} # no whois server found in iana ZZ["pink"] = {"_server": "whois.nic.pink", "extend": "com", "_test": "nic.pink"} ZZ["pin"] = {"_server": "whois.nic.pin", "extend": "com", "_test": "nic.pin"} ZZ["pioneer"] = {"_server": "whois.nic.pioneer", "extend": "com", "_test": "nic.pioneer"} @@ -2265,10 +2377,13 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["plus"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["pm"] = {"extend": "re", "_server": "whois.nic.pm", "_test": "nic.pm"} ZZ["pnc"] = {"_server": "whois.nic.pnc", "extend": "com", "_test": "nic.pnc"} +ZZ["pn"] = {"_privateRegistry": True} # no whois server found in iana ZZ["pohl"] = {"_server": "whois.nic.pohl", "extend": "com", "_test": "nic.pohl"} ZZ["poker"] = {"_server": "whois.nic.poker", "extend": "com", "_test": "nic.poker"} ZZ["politie"] = {"_server": "whois.nic.politie", "extend": "com", "_test": "nic.politie"} ZZ["porn"] = {"_server": "whois.nic.porn", "extend": "com", "_test": "nic.porn"} +ZZ["post"] = {"_server": "whois.dotpostregistry.net", "_test": "us.post", "extend": "com"} +ZZ["praxi"] = {"_privateRegistry": True} # no whois server found in iana ZZ["press"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["prime"] = {"_server": "whois.nic.prime", "extend": "com", "_test": "nic.prime"} ZZ["prod"] = {"_server": "whois.nic.google", "extend": "com"} @@ -2281,6 +2396,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["property"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} ZZ["protection"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["pr"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["prudential"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["pru"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ps"] = {"_privateRegistry": True} # no host can be contacted only http://www.nic.ps ZZ["pub"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["pwc"] = {"_server": "whois.afilias-srs.net", "extend": "com"} @@ -2293,10 +2410,10 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["radio"] = {"extend": "com", "_server": "whois.nic.radio", "_test": "nic.radio"} ZZ["read"] = {"_server": "whois.nic.read", "extend": "com", "_test": "nic.read"} ZZ["realestate"] = {"_server": "whois.nic.realestate", "extend": "com", "_test": "nic.realestate"} +ZZ["realtor"] = {"_server": "whois.nic.realtor", "_test": "nic.realtor", "extend": "com"} ZZ["realty"] = {"_server": "whois.nic.realty", "extend": "com", "_test": "nic.realty"} ZZ["recipes"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["red"] = {"extend": "com"} -# ZZ["redstone"] = {"_server": "whois.nic.redstone", "extend": "com", "_test": "nic.redstone"} ZZ["redumbrella"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["rehab"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["reise"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2335,6 +2452,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["saarland"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["safe"] = {"_server": "whois.nic.safe", "extend": "com", "_test": "nic.safe"} ZZ["safety"] = {"_server": "whois.nic.safety", "extend": "com", "_test": "nic.safety"} +ZZ["sakura"] = {"_privateRegistry": True} # no whois server found in iana ZZ["sale"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["salon"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["samsclub"] = {"_server": "whois.nic.samsclub", "extend": "com", "_test": "nic.samsclub"} @@ -2344,12 +2462,12 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["sanofi"] = {"_server": "whois.nic.sanofi", "extend": "com", "_test": "nic.sanofi"} ZZ["sap"] = {"_server": "whois.nic.sap", "extend": "com", "_test": "nic.sap"} ZZ["sarl"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["sas"] = {"_privateRegistry": True} # no whois server found in iana ZZ["save"] = {"_server": "whois.nic.save", "extend": "com", "_test": "nic.save"} ZZ["saxo"] = {"_server": "whois.nic.saxo", "extend": "com", "_test": "nic.saxo"} ZZ["sb"] = {"extend": "com", "_server": "whois.nic.net.sb"} ZZ["sbi"] = {"_server": "whois.nic.sbi", "extend": "com", "_test": "nic.sbi"} ZZ["sbs"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} -# ZZ["sca"] = {"_server": "whois.nic.sca", "extend": "com", "_test": "nic.sca"} # Revocation of the .sca domain (2023-12-11) ZZ["scb"] = {"_server": "whois.nic.scb", "extend": "com", "_test": "nic.scb"} ZZ["schaeffler"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["schmidt"] = {"_server": "whois.nic.schmidt", "extend": "com", "_test": "nic.schmidt"} @@ -2368,6 +2486,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["security"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["seek"] = {"_server": "whois.nic.seek", "extend": "com", "_test": "nic.seek"} ZZ["select"] = {"_server": "whois.nic.select", "extend": "com", "_test": "nic.select"} +ZZ["sener"] = {"_privateRegistry": True} # no whois server found in iana ZZ["한국"] = {"_server": "whois.kr", "extend": "kr"} ZZ["삼성"] = {"_server": "whois.kr", "extend": "kr"} ZZ["닷컴"] = {"_server": "whois.nic.xn--mk1bu44c", "extend": "xn--mk1bu44c"} @@ -2380,7 +2499,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["sfr"] = {"_server": "whois.nic.sfr", "extend": "com", "_test": "nic.sfr"} ZZ["shangrila"] = {"_server": "whois.nic.shangrila", "extend": "com", "_test": "nic.shangrila"} ZZ["sharp"] = {"_server": "whois.nic.gmo", "extend": "com"} -# ZZ["shaw"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["shell"] = {"_server": "whois.nic.shell", "extend": "com", "_test": "nic.shell"} ZZ["shia"] = {"_server": "whois.nic.shia", "extend": "com", "_test": "nic.shia"} ZZ["shiksha"] = {"_server": "whois.nic.shiksha", "extend": "com", "_test": "nic.shiksha"} @@ -2389,13 +2507,14 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["shopping"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["shouji"] = {"extend": "_teleinfo", "_server": "whois.teleinfo.cn"} ZZ["show"] = {"extend": "_donuts", "_server": "whois.donuts.co"} -# ZZ["showtime"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["silk"] = {"_server": "whois.nic.silk", "extend": "com", "_test": "nic.silk"} ZZ["sina"] = {"_server": "whois.nic.sina", "extend": "com", "_test": "nic.sina"} ZZ["singles"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["site"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["sj"] = {"_privateRegistry": True} # no whois server found in iana ZZ["skin"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["ski"] = {"_server": "whois.nic.ski", "extend": "com", "_test": "nic.ski"} +ZZ["skype"] = {"_privateRegistry": True} # no whois server found in iana ZZ["sky"] = {"_server": "whois.nic.sky", "extend": "com", "_test": "nic.sky"} ZZ["sl"] = {"extend": "com", "_server": "whois.nic.sl", "_test": "nic.sl"} ZZ["sling"] = {"_server": "whois.nic.sling", "extend": "com", "_test": "nic.sling"} @@ -2407,8 +2526,10 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["so"] = {"extend": "com"} ZZ["softbank"] = {"_server": "whois.nic.softbank", "extend": "com", "_test": "nic.softbank"} ZZ["software"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["sohu"] = {"_privateRegistry": True} # no whois server found in iana ZZ["solar"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["solutions"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["song"] = {"_privateRegistry": True} # no whois server found in iana ZZ["sony"] = {"_server": "whois.nic.sony", "extend": "com", "_test": "nic.sony"} ZZ["soy"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["space"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} @@ -2420,8 +2541,10 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["srl"] = {"_server": "whois.afilias-srs.net", "extend": "ac", "registrant_country": R(r"Registrant Country:\s+(.+)")} ZZ["ss"] = {"_server": "whois.nic.ss", "extend": "com", "_test": "nic.ss"} ZZ["stada"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["staples"] = {"_privateRegistry": True} # no whois server found in iana ZZ["star"] = {"_server": "whois.nic.star", "extend": "com", "_test": "nic.star"} ZZ["statebank"] = {"_server": "whois.nic.statebank", "extend": "com", "_test": "nic.statebank"} +ZZ["statefarm"] = {"_privateRegistry": True} # no whois server found in iana ZZ["stcgroup"] = {"_server": "whois.nic.stcgroup", "extend": "com", "_test": "nic.stcgroup"} ZZ["stc"] = {"_server": "whois.nic.stc", "extend": "com", "_test": "nic.stc"} ZZ["stockholm"] = {"_server": "whois.afilias-srs.net", "extend": "com"} @@ -2446,10 +2569,12 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["sydney"] = {"_server": "whois.nic.sydney", "extend": "com", "_test": "nic.sydney"} ZZ["sy"] = {"extend": "com", "_server": "whois.tld.sy", "_test": "tld.sy"} ZZ["systems"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["sz"] = {"_privateRegistry": True} # no whois server found in iana ZZ["tab"] = {"_server": "whois.nic.tab", "extend": "com", "_test": "nic.tab"} ZZ["taipei"] = {"_server": "whois.nic.taipei", "extend": "com", "_test": "nic.taipei"} ZZ["talk"] = {"_server": "whois.nic.talk", "extend": "com", "_test": "nic.talk"} ZZ["taobao"] = {"_server": "whois.nic.taobao", "extend": "com", "_test": "nic.taobao"} +ZZ["target"] = {"_privateRegistry": True} # no whois server found in iana ZZ["tatamotors"] = {"_server": "whois.nic.tatamotors", "extend": "com", "_test": "nic.tatamotors"} ZZ["tatar"] = {"_server": "whois.nic.tatar", "extend": "com", "_test": "nic.tatar"} ZZ["tattoo"] = {"extend": "_uniregistry", "_server": "whois.uniregistry.net"} @@ -2475,7 +2600,11 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["tips"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["tires"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["tirol"] = {"_server": "whois.nic.tirol", "extend": "com", "_test": "nic.tirol"} +ZZ["tjmaxx"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["tj"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["tjx"] = {"_privateRegistry": True} # no whois server found in iana ZZ["tk"] = {"extend": "_privateReg"} +ZZ["tkmaxx"] = {"_privateRegistry": True} # no whois server found in iana ZZ["tl"] = {"extend": "com"} ZZ["tmall"] = {"_server": "whois.nic.tmall", "extend": "com", "_test": "nic.tmall"} ZZ["today"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2534,15 +2663,16 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["viking"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["villas"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["vin"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["vi"] = {"_privateRegistry": True} # no whois server found in iana ZZ["vip"] = {"_server": "whois.nic.vip", "extend": "com", "updated_date": None, "_test": "nic.vip"} ZZ["virgin"] = {"_server": "whois.nic.virgin", "extend": "com", "_test": "nic.virgin"} ZZ["visa"] = {"_server": "whois.nic.visa", "extend": "com", "_test": "nic.visa"} ZZ["vision"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["viva"] = {"_server": "whois.nic.viva", "extend": "com", "_test": "nic.viva"} +ZZ["vivo"] = {"_privateRegistry": True} # no whois server found in iana ZZ["vlaanderen"] = {"_server": "whois.nic.vlaanderen", "extend": "com", "_test": "nic.vlaanderen"} ZZ["vn"] = {"extend": "_privateReg"} ZZ["vodka"] = {"_server": "whois.nic.vodka", "extend": "com", "_test": "nic.vodka"} -# ZZ["volkswagen"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["volvo"] = {"_server": "whois.nic.volvo", "extend": "com", "_test": "nic.volvo"} ZZ["vote"] = {"_server": "whois.nic.vote", "extend": "com", "_test": "nic.vote"} ZZ["voting"] = {"_server": "whois.nic.voting", "extend": "com", "_test": "nic.voting"} @@ -2556,6 +2686,8 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["wanggou"] = {"_server": "whois.nic.wanggou", "extend": "com", "_test": "nic.wanggou"} ZZ["watches"] = {"_server": "whois.nic.watches", "extend": "com", "_test": "nic.watches"} ZZ["watch"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["weatherchannel"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["weather"] = {"_privateRegistry": True} # no whois server found in iana ZZ["webcam"] = {"extend": "com", "_server": "whois.nic.webcam", "_test": "nic.webcam"} ZZ["weber"] = {"_server": "whois.nic.weber", "extend": "com", "_test": "nic.weber"} ZZ["website"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} @@ -2564,23 +2696,29 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["wedding"] = {"_server": "whois.nic.wedding", "extend": "com", "_test": "nic.wedding"} ZZ["wed"] = {"_server": "whois.nic.wed", "extend": "com", "_test": "nic.wed"} ZZ["weibo"] = {"_server": "whois.nic.weibo", "extend": "com", "_test": "nic.weibo"} +ZZ["weir"] = {"_server": "whois.nic.weir", "_test": "nic.weir", "extend": "com"} ZZ["whoswho"] = {"_server": "whois.nic.whoswho", "extend": "com", "_test": "nic.whoswho"} ZZ["wien"] = {"_server": "whois.nic.wien", "extend": "com", "_test": "nic.wien"} +ZZ["williamhill"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["windows"] = {"_privateRegistry": True} # no whois server found in iana ZZ["wine"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["win"] = {"extend": "com"} +ZZ["winners"] = {"_privateRegistry": True} # no whois server found in iana ZZ["wme"] = {"_server": "whois.nic.wme", "extend": "com", "_test": "nic.wme"} -ZZ["wolterskluwer"] = {"_server": "whois.nic.wolterskluwer", "extend": "com", "_test": "nic.wolterskluwer"} +# ZZ["wolterskluwer"] = {"_server": "whois.nic.wolterskluwer", "extend": "com", "_test": "nic.wolterskluwer"} ZZ["woodside"] = {"_server": "whois.nic.woodside", "extend": "com", "_test": "nic.woodside"} ZZ["works"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["world"] = {"extend": "_donuts", "_server": "whois.donuts.co"} ZZ["wow"] = {"_server": "whois.nic.wow", "extend": "com", "_test": "nic.wow"} ZZ["wtc"] = {"_server": "whois.nic.wtc", "extend": "com", "_test": "nic.wtc"} ZZ["wtf"] = {"extend": "_donuts", "_server": "whois.donuts.co"} +ZZ["xbox"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xerox"] = {"_server": "whois.nic.xerox", "extend": "com", "_test": "nic.xerox"} -# ZZ["xfinity"] = {"_server": "whois.nic.xfinity", "extend": "com", "_test": "nic.xfinity"} # Revocation of the .xfinity domain (2024-02-07) ZZ["xihuan"] = {"extend": "_teleinfo", "_server": "whois.teleinfo.cn"} ZZ["xin"] = {"extend": "com", "_server": "whois.nic.xin", "_test": "nic.xin"} ZZ["xn--11b4c3d"] = {"_server": "whois.nic.xn--11b4c3d", "extend": "com", "_test": "nic.xn--11b4c3d"} +ZZ["xn--1ck2e1b"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--1ck2e1b"] = {"_server": "whois.nic.xn--1ck2e1b", "_test": "nic.xn--1ck2e1b", "extend": "com"} ZZ["xn--1qqw23a"] = {"_server": "whois.ngtld.cn", "extend": "com"} ZZ["xn--2scrj9c"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--30rr7y"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} @@ -2594,6 +2732,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["xn--45brj9c"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--45q11c"] = {"extend": "_gtldKnet", "_server": "whois.gtld.knet.cn", "_test": None} ZZ["xn--4gbrim"] = {"_server": "whois.nic.xn--4gbrim", "extend": "com", "_test": "nic.xn--4gbrim"} +ZZ["xn--54b7fta0cc"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--55qx5d"] = {"_server": "whois.ngtld.cn", "extend": "com"} ZZ["xn--5su34j936bgsg"] = {"_server": "whois.nic.xn--5su34j936bgsg", "extend": "com", "_test": "nic.xn--5su34j936bgsg"} ZZ["xn--5tzm5g"] = {"_server": "whois.nic.xn--5tzm5g", "extend": "com", "_test": "nic.xn--5tzm5g"} @@ -2609,16 +2748,25 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["xn--9et52u"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} ZZ["xn--9krt00a"] = {"_server": "whois.nic.xn--9krt00a", "extend": "com", "_test": "nic.xn--9krt00a"} ZZ["xn--b4w605ferd"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["xn--bck1b9a5dre4c"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--bck1b9a5dre4c"] = {"_server": "whois.nic.xn--bck1b9a5dre4c", "_test": "nic.xn--bck1b9a5dre4c", "extend": "com"} ZZ["xn--c1avg"] = {"_server": "whois.nic.xn--c1avg", "extend": "com", "_test": "nic.xn--c1avg"} ZZ["xn--c2br7g"] = {"_server": "whois.nic.xn--c2br7g", "extend": "com", "_test": "nic.xn--c2br7g"} +ZZ["xn--cck2b3b"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--cck2b3b"] = {"_server": "whois.nic.xn--cck2b3b", "_test": "nic.xn--cck2b3b", "extend": "com"} ZZ["xn--cckwcxetd"] = {"_server": "whois.nic.xn--cckwcxetd", "extend": "com", "_test": "nic.xn--cckwcxetd"} ZZ["xn--cg4bki"] = {"_server": "whois.kr", "extend": "kr"} ZZ["xn--clchc0ea0b2g2a9gcd"] = {"_server": "whois.sgnic.sg", "extend": "sg"} +ZZ["xn--czr694b"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--czrs0t"] = {"_server": "whois.nic.xn--czrs0t", "extend": "com", "_test": "nic.xn--czrs0t"} ZZ["xn--czru2d"] = {"extend": "_gtldKnet", "_server": "whois.gtld.knet.cn", "_test": None} ZZ["xn--d1alf"] = {"_server": "whois.marnet.mk", "extend": "mk"} ZZ["xn--e1a4c"] = {"_server": "whois.eu", "extend": "eu"} +ZZ["xn--eckvdtc9d"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--eckvdtc9d"] = {"_server": "whois.nic.xn--eckvdtc9d", "_test": "nic.xn--eckvdtc9d", "extend": "com"} ZZ["xn--efvy88h"] = {"_server": "whois.nic.xn--efvy88h", "extend": "com", "_test": "nic.xn--efvy88h"} +ZZ["xn--fct429k"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--fct429k"] = {"_server": "whois.nic.xn--fct429k", "_test": "nic.xn--fct429k", "extend": "com"} ZZ["xn--fhbei"] = {"_server": "whois.nic.xn--fhbei", "extend": "com", "_test": "nic.xn--fhbei"} ZZ["xn--fiq228c5hs"] = {"extend": "_teleinfo", "_server": "whois.teleinfo.cn"} ZZ["xn--fiq64b"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} @@ -2627,31 +2775,48 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["xn--fjq720a"] = {"_server": "whois.nic.xn--fjq720a", "extend": "com", "_test": "nic.xn--fjq720a"} ZZ["xn--flw351e"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["xn--fpcrj9c3d"] = {"_server": "whois.registry.in", "extend": "com"} +ZZ["xn--fzc2c9e2c"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--fzys8d69uvgm"] = {"_server": "whois.nic.xn--fzys8d69uvgm", "extend": "com", "_test": "nic.xn--fzys8d69uvgm"} +ZZ["xn--g2xx48c"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--g2xx48c"] = {"_server": "whois.nic.xn--g2xx48c", "_test": "nic.xn--g2xx48c", "extend": "com"} +ZZ["xn--gckr3f0f"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--gckr3f0f"] = {"_server": "whois.nic.xn--gckr3f0f", "_test": "nic.xn--gckr3f0f", "extend": "com"} ZZ["xn--gecrj9c"] = {"_server": "whois.registry.in", "extend": "com"} +ZZ["xn--gk3at1e"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--gk3at1e"] = {"_server": "whois.nic.xn--gk3at1e", "_test": "nic.xn--gk3at1e", "extend": "com"} ZZ["xn--h2breg3eve"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--h2brj9c8c"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--h2brj9c"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--hxt814e"] = {"extend": "_gtldKnet", "_server": "whois.gtld.knet.cn", "_test": None} ZZ["xn--i1b6b1a6a2e"] = {"_server": "whois.nic.xn--i1b6b1a6a2e", "extend": "com", "_test": "nic.xn--i1b6b1a6a2e"} +ZZ["xn--imr513n"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--io0a7i"] = {"_server": "whois.ngtld.cn", "extend": "com"} ZZ["xn--j1aef"] = {"_server": "whois.nic.xn--j1aef", "extend": "com", "_test": "nic.xn--j1aef"} ZZ["xn--j6w193g"] = {"_server": "whois.hkirc.hk", "extend": "hk", "_test": "hkirc.hk"} ZZ["xn--jlq480n2rg"] = {"_server": "whois.nic.xn--jlq480n2rg", "extend": "com", "_test": "nic.xn--jlq480n2rg"} +ZZ["xn--jvr189m"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--jvr189m"] = {"_server": "whois.nic.xn--jvr189m", "_test": "nic.xn--jvr189m", "extend": "com"} ZZ["xn--kcrx77d1x4a"] = {"_server": "whois.nic.xn--kcrx77d1x4a", "extend": "com", "_test": "nic.xn--kcrx77d1x4a"} ZZ["xn--kprw13d"] = {"extend": "tw", "_test": "google.xn--kprw13d"} ZZ["xn--kpry57d"] = {"extend": "tw", "_test": "google.xn--kpry57d"} ZZ["xn--kput3i"] = {"_server": "whois.nic.xn--kput3i", "extend": "com", "_test": "nic.xn--kput3i"} +ZZ["xn--l1acc"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--l1acc"] = {"_server": "whois.mn", "_test": "whois.mn", "extend": "mn"} ZZ["xn--mgb9awbf"] = {"_server": "whois.registry.om", "extend": "om"} +ZZ["xn--mgba3a3ejt"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--mgba7c0bbn0a"] = {"_server": "whois.nic.xn--mgba7c0bbn0a", "extend": "com", "_test": "nic.xn--mgba7c0bbn0a"} -# ZZ["xn--mgbaakc7dvf"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} ZZ["xn--mgbab2bd"] = {"_server": "whois.nic.xn--mgbab2bd", "extend": "com", "_test": "nic.xn--mgbab2bd"} ZZ["xn--mgbah1a3hjkrd"] = {"_server": "whois.nic.mr", "extend": "mr"} +ZZ["xn--mgbai9azgqp6j"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--mgbayh7gpa"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--mgbbh1a71e"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--mgbbh1a"] = {"_server": "whois.registry.in", "extend": "com"} +ZZ["xn--mgbc0a9azcg"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--mgbca7dzdo"] = {"_server": "whois.nic.xn--mgbca7dzdo", "extend": "com", "_test": "nic.xn--mgbca7dzdo"} +ZZ["xn--mgbcpq6gpa1a"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--mgbgu82a"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--mgbi4ecexp"] = {"_server": "whois.nic.xn--mgbi4ecexp", "extend": "com", "_test": "nic.xn--mgbi4ecexp"} +ZZ["xn--mgbpl2fh"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--mgbt3dhd"] = {"_server": "whois.nic.xn--mgbt3dhd", "extend": "com", "_test": "nic.xn--mgbt3dhd"} ZZ["xn--mix891f"] = {"_server": "whois.monic.mo", "extend": "mo"} ZZ["xn--mk1bu44c"] = {"_server": "whois.nic.xn--mk1bu44c", "extend": "com", "_test": "nic.xn--mk1bu44c"} @@ -2659,16 +2824,23 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["xn--ngbc5azd"] = {"_server": "whois.nic.xn--ngbc5azd", "extend": "com", "_test": "nic.xn--ngbc5azd"} ZZ["xn--ngbe9e0a"] = {"_server": "whois.nic.xn--ngbe9e0a", "extend": "com", "_test": "nic.xn--ngbe9e0a"} ZZ["xn--ngbrx"] = {"_server": "whois.nic.xn--ngbrx", "extend": "com", "_test": "nic.xn--ngbrx"} +ZZ["xn--node"] = {"_privateRegistry": True} # no whois server ZZ["xn--nqv7fs00ema"] = {"_server": "whois.nic.xn--nqv7fs00ema", "extend": "com", "_test": "nic.xn--nqv7fs00ema"} ZZ["xn--nqv7f"] = {"_server": "whois.nic.xn--nqv7f", "extend": "com", "_test": "nic.xn--nqv7f"} +ZZ["xn--nyqy26a"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--o3cw4h"] = {"_server": "whois.thnic.co.th", "extend": "co.th"} ZZ["xn--ogbpf8fl"] = {"_server": "whois.tld.sy", "extend": "sy", "_test": "tld.sy"} +ZZ["xn--otu796d"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--p1acf"] = {"extend": "com"} ZZ["xn--p1ai"] = {"extend": "ru"} ZZ["xn--pssy2u"] = {"_server": "whois.nic.xn--pssy2u", "extend": "com", "_test": "nic.xn--pssy2u"} ZZ["xn--q9jyb4c"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["xn--qcka1pmc"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["xn--qxa6a"] = {"_server": "whois.eu", "extend": "eu"} +ZZ["xn--qxam"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--rhqv96g"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--rovu88b"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["xn--rovu88b"] = {"_server": "whois.nic.xn--rovu88b", "_test": "nic.xn--rovu88b", "extend": "com"} ZZ["xn--rvc1e0am3e"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--s9brj9c"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--ses554g"] = {"_server": "whois.nic.xn--ses554g", "extend": "com", "_test": "nic.xn--ses554g"} @@ -2682,14 +2854,18 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["xn--vuq861b"] = {"extend": "_teleinfo", "_server": "whois.teleinfo.cn"} ZZ["xn--w4r85el8fhu5dnra"] = {"_server": "whois.nic.xn--w4r85el8fhu5dnra", "extend": "com", "_test": "nic.xn--w4r85el8fhu5dnra"} ZZ["xn--w4rs40l"] = {"_server": "whois.nic.xn--w4rs40l", "extend": "com", "_test": "nic.xn--w4rs40l"} +ZZ["xn--wgbh1c"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--wgbl6a"] = {"_server": "whois.registry.qa", "extend": "qa", "_test": "registry.qa"} ZZ["xn--xhq521b"] = {"_server": "whois.ngtld.cn", "extend": "com"} +ZZ["xn--xkc2al3hye2a"] = {"_privateRegistry": True} # no whois server found in iana ZZ["xn--xkc2dl3a5ee0h"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["xn--yfro4i67o"] = {"_server": "whois.sgnic.sg", "extend": "sg"} ZZ["xxx"] = {"_server": "whois.nic.xxx", "extend": "com", "_test": "nic.xxx"} ZZ["xyz"] = {"extend": "_centralnic", "_server": "whois.nic.xyz", "_test": "nic.xyz"} ZZ["yachts"] = {"extend": "_centralnic", "_server": "whois.centralnic.com"} +ZZ["yahoo"] = {"_privateRegistry": True} # no whois server found in iana ZZ["yamaxun"] = {"_server": "whois.nic.yamaxun", "extend": "com", "_test": "nic.yamaxun"} +ZZ["yandex"] = {"_privateRegistry": True} # no whois server found in iana ZZ["ye"] = {"extend": "com", "_server": "whois.y.net.ye", "_test": "net.ye"} ZZ["yodobashi"] = {"_server": "whois.nic.gmo", "extend": "com"} ZZ["yoga"] = {"_server": "whois.nic.yoga", "extend": "com", "_test": "nic.yoga"} @@ -2701,6 +2877,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["za"] = {"extend": "com"} ZZ["zappos"] = {"_server": "whois.nic.zappos", "extend": "com", "_test": "nic.zappos"} ZZ["zara"] = {"_server": "whois.afilias-srs.net", "extend": "com"} +ZZ["zero"] = {"_privateRegistry": True} # no whois server found in iana ZZ["zip"] = {"extend": "com", "_server": "whois.nic.zip", "_test": "nic.zip"} ZZ["zm"] = {"extend": "com"} ZZ["zone"] = {"extend": "_donuts", "_server": "whois.donuts.co"} @@ -2711,6 +2888,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["католик"] = {"_server": "whois.nic.xn--80aqecdr1a", "extend": "xn--80aqecdr1a"} ZZ["ком"] = {"_server": "whois.nic.xn--j1aef", "extend": "xn--j1aef"} ZZ["мкд"] = {"_server": "whois.marnet.mk", "extend": "mk"} +ZZ["мон"] = {"_server": "whois.mn", "extend": "xn--l1acc"} # whois.mn ['xn--l1acc'] ZZ["москва"] = {"_server": "whois.nic.xn--80adxhks", "extend": "xn--80adxhks"} ZZ["онлайн"] = {"extend": "com"} ZZ["орг"] = {"_server": "whois.nic.xn--c1avg", "extend": "xn--c1avg"} @@ -2719,7 +2897,6 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["сайт"] = {"_server": "whois.nic.xn--80aswg", "extend": "xn--80aswg"} ZZ["קום"] = {"_server": "whois.nic.xn--9dbq2a", "extend": "xn--9dbq2a"} ZZ["ابوظبي"] = {"_server": "whois.nic.xn--mgbca7dzdo", "extend": "xn--mgbca7dzdo"} -ZZ["اتصالات"] = {"_server": "whois.centralnic.com", "extend": "_centralnic"} ZZ["العليان"] = {"_server": "whois.nic.xn--mgba7c0bbn0a", "extend": "xn--mgba7c0bbn0a"} ZZ["بارت"] = {"_server": "whois.registry.in", "extend": "com"} ZZ["بازار"] = {"_server": "whois.nic.xn--mgbab2bd", "extend": "xn--mgbab2bd"} @@ -2736,27 +2913,16 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["موريتانيا"] = {"_server": "whois.nic.mr", "extend": "mr"} ZZ["موقع"] = {"_server": "whois.nic.xn--4gbrim", "extend": "xn--4gbrim"} ZZ["همراه"] = {"_server": "whois.nic.xn--mgbt3dhd", "extend": "xn--mgbt3dhd"} -ZZ["कम"] = {"_server": "whois.nic.xn--11b4c3d", "extend": "xn--11b4c3d"} -ZZ["नट"] = {"_server": "whois.nic.xn--c2br7g", "extend": "xn--c2br7g"} -ZZ["भरत"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["भरत"] = {"_server": "whois.registry.in", "extend": "in"} -# ZZ["भरतम"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["सगठन"] = {"_server": "whois.nic.xn--i1b6b1a6a2e", "extend": "xn--i1b6b1a6a2e"} -ZZ["ভরত"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ভৰত"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ਭਰਤ"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ભરત"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ଭରତ"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["இநதய"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["சஙகபபர"] = {"_server": "whois.sgnic.sg", "extend": "sg"} -ZZ["భరత"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ಭರತ"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["ഭരത"] = {"_server": "whois.registry.in", "extend": "in"} -ZZ["คอม"] = {"_server": "whois.nic.xn--42c2d9a", "extend": "xn--42c2d9a"} # +ZZ["คอม"] = {"_server": "whois.nic.xn--42c2d9a", "extend": "xn--42c2d9a"} ZZ["ไทย"] = {"_server": "whois.thnic.co.th", "extend": "co.th"} ZZ["アマゾン"] = {"_server": "whois.nic.xn--cckwcxetd", "extend": "xn--cckwcxetd"} ZZ["グーグル"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["クラウド"] = {"_server": "whois.nic.xn--gckr3f0f", "extend": "xn--gckr3f0f"} # whois.nic.xn--gckr3f0f ['xn--gckr3f0f'] ZZ["コム"] = {"_server": "whois.nic.xn--tckwe", "extend": "xn--tckwe"} +ZZ["ストア"] = {"_server": "whois.nic.xn--cck2b3b", "extend": "xn--cck2b3b"} # whois.nic.xn--cck2b3b ['xn--cck2b3b'] +ZZ["セール"] = {"_server": "whois.nic.xn--1ck2e1b", "extend": "xn--1ck2e1b"} # whois.nic.xn--1ck2e1b ['xn--1ck2e1b'] +ZZ["ファッション"] = {"_server": "whois.nic.xn--bck1b9a5dre4c", "extend": "xn--bck1b9a5dre4c"} # whois.nic.xn--bck1b9a5dre4c ['xn--bck1b9a5dre4c'] +ZZ["ポイント"] = {"_server": "whois.nic.xn--eckvdtc9d", "extend": "xn--eckvdtc9d"} # whois.nic.xn--eckvdtc9d ['xn--eckvdtc9d'] ZZ["みんな"] = {"_server": "whois.nic.google", "extend": "com"} ZZ["中信"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} ZZ["中国"] = {"_server": "whois.cnnic.cn", "extend": "xn--fiqs8s"} @@ -2778,6 +2944,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["大拿"] = {"_server": "whois.nic.xn--pssy2u", "extend": "xn--pssy2u"} ZZ["天主教"] = {"_server": "whois.nic.xn--tiq49xqyj", "extend": "xn--tiq49xqyj"} ZZ["娱乐"] = {"_server": "whois.nic.xn--fjq720a", "extend": "xn--fjq720a"} +ZZ["家電"] = {"_server": "whois.nic.xn--fct429k", "extend": "xn--fct429k"} # whois.nic.xn--fct429k ['xn--fct429k'] ZZ["广东"] = {"_server": "whois.ngtld.cn", "extend": "com"} ZZ["微博"] = {"_server": "whois.nic.xn--9krt00a", "extend": "xn--9krt00a"} ZZ["慈善"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} @@ -2787,6 +2954,7 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["新加坡"] = {"_server": "whois.sgnic.sg", "extend": "sg"} ZZ["新闻"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} ZZ["时尚"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} +ZZ["書籍"] = {"_server": "whois.nic.xn--rovu88b", "extend": "xn--rovu88b"} # whois.nic.xn--rovu88b ['xn--rovu88b'] ZZ["机构"] = {"_server": "whois.nic.xn--nqv7f", "extend": "xn--nqv7f"} ZZ["淡马锡"] = {"_server": "whois.afilias-srs.net", "extend": "com"} ZZ["游戏"] = {"_server": "whois.nic.xn--unup4y", "extend": "xn--unup4y"} @@ -2800,269 +2968,128 @@ def xStr(what: str, times: int = 1, firstMandatory: bool = True) -> str: ZZ["网络"] = {"_server": "whois.ngtld.cn", "extend": "com", "_test": "ngtld.cn"} ZZ["联通"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} ZZ["谷歌"] = {"_server": "whois.nic.google", "extend": "com"} +ZZ["购物"] = {"_server": "whois.nic.xn--g2xx48c", "extend": "xn--g2xx48c"} # whois.nic.xn--g2xx48c ['xn--g2xx48c'] +ZZ["通販"] = {"_server": "whois.nic.xn--gk3at1e", "extend": "xn--gk3at1e"} # whois.nic.xn--gk3at1e ['xn--gk3at1e'] ZZ["集团"] = {"_server": "whois.gtld.knet.cn", "extend": "com", "_test": None} ZZ["電訊盈科"] = {"_server": "whois.nic.xn--fzys8d69uvgm", "extend": "xn--fzys8d69uvgm"} ZZ["飞利浦"] = {"_server": "whois.nic.xn--kcrx77d1x4a", "extend": "xn--kcrx77d1x4a"} +ZZ["食品"] = {"_server": "whois.nic.xn--jvr189m", "extend": "xn--jvr189m"} # whois.nic.xn--jvr189m ['xn--jvr189m'] ZZ["香格里拉"] = {"_server": "whois.nic.xn--5su34j936bgsg", "extend": "xn--5su34j936bgsg", "_test": "nic.xn--5su34j936bgsg"} ZZ["香港"] = {"_server": "whois.hkirc.hk", "extend": "hk", "_test": "hkirc.hk"} -# भारतम् xn--h2breg3eve ; still issues with some utf8 strings 2023-08-28 mboot - -ZZ["aaa"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["able"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["accenture"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ad"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["aetna"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["aig"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["americanexpress"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["amex"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["amica"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["analytics"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ao"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["aq"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["aramco"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["athleta"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["axa"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["azure"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["banamex"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["bananarepublic"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["baseball"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bb"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bh"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bharti"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bing"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bloomberg"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bm"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["booking"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bs"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bt"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["bv"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["calvinklein"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["caravan"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["cbn"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["cbre"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["cg"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["chase"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["cisco"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["citadel"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["citi"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["citic"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ck"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["coupon"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["cu"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["dell"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["dhl"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["discover"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["dj"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["dupont"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["er"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["farmers"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ferrero"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["fk"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["flickr"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["flir"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["food"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ford"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["frontier"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ftr"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gap"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gb"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gm"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gn"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["grainger"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["grocery"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gu"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["guardian"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["gw"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["hbo"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["homegoods"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["homesense"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["hotels"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["hotmail"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["hsbc"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["hyatt"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ieee"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["intuit"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ipiranga"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["itau"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jm"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jmp"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jnj"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jo"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jpmorgan"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["jprs"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["kh"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["kinder"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["km"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["kp"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["kpmg"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["kpn"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["kw"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["lanxess"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["lifeinsurance"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["lilly"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["lincoln"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["living"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["lr"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["maif"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["marshalls"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mattel"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["merckmsd"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mh"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["microsoft"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mil"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mint"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mlb"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["moto"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["msd"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mt"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["mv"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["nba"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ne"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["netflix"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["neustar"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["nfl"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ni"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["nike"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["nr"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ntt"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["office"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["oldnavy"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["open"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["pfizer"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["pg"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["pictet"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["ping"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["pn"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["pramerica"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["praxi"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["pru"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["prudential"] = {"_privateRegistry": True} # no whois server found in iana -# ZZ["rocher"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sakura"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sas"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sener"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sj"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["skype"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sohu"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["song"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["staples"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["statefarm"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["sz"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["target"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["tj"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["tjmaxx"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["tjx"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["tkmaxx"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["vi"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["vivo"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["weather"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["weatherchannel"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["williamhill"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["windows"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["winners"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xbox"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--1ck2e1b"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--54b7fta0cc"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--bck1b9a5dre4c"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--cck2b3b"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--czr694b"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--eckvdtc9d"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--fct429k"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--fzc2c9e2c"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--g2xx48c"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--gckr3f0f"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--gk3at1e"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--imr513n"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--jvr189m"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--l1acc"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgba3a3ejt"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgbai9azgqp6j"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgbayh7gpa"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgbc0a9azcg"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgbcpq6gpa1a"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--mgbpl2fh"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--nyqy26a"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--otu796d"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--qxam"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--rhqv96g"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--rovu88b"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--wgbh1c"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["xn--xkc2al3hye2a"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["yahoo"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["yandex"] = {"_privateRegistry": True} # no whois server found in iana -ZZ["zero"] = {"_privateRegistry": True} # no whois server found in iana - -ZZ["onion"] = {"_privateRegistry": True} # this is a special case https://tools.ietf.org/html/rfc7686 - -# 2023-11-14 -ZZ["abb"] = {"_server": "whois.nic.abb", "_test": "nic.abb", "extend": "com"} -ZZ["bn"] = {"_server": "whois.bnnic.bn", "_test": "bnnic.bn", "extend": "com"} -ZZ["gov.bn"] = {"_server": "whois.bnnic.bn", "_test": "egc.gov.bn", "extend": "com"} -ZZ["bw"] = {"_server": "whois.nic.net.bw", "_test": "net.bw", "extend": "com"} -ZZ["crown"] = {"_server": "whois.nic.crown", "_test": "nic.crown", "extend": "com"} -ZZ["crs"] = {"_server": "whois.nic.crs", "_test": "nic.crs", "extend": "com"} -ZZ["fj"] = {"_server": "whois.nic.fj", "_test": "nic.fj", "extend": "com"} # actually not working but server exists (dns), -ZZ["gp"] = {"_server": "whois.nic.gp", "_test": "nic.gp", "extend": "com"} # actually not working but server exists (dns) -ZZ["hm"] = {"_server": "whois.registry.hm", "_test": "registry.hm", "extend": "com"} # actually not working but server exists (dns) -ZZ["int"] = {"_server": "whois.iana.org", "_test": "eu.int", "extend": "cz"} - -ZZ["iq"] = {"_server": " whois.cmc.iq", "_test": "cmc.iq", "extend": "com"} # ho host: whois.cmc.iq -ZZ["mm"] = {"_server": "whois.registry.gov.mm", "_test": "registry.gov.mm", "extend": "com"} -ZZ["mw"] = {"_server": "whois.nic.mw", "_test": "nic.mw", "extend": "fr"} -ZZ["post"] = {"_server": "whois.dotpostregistry.net", "_test": "us.post", "extend": "com"} -ZZ["realtor"] = {"_server": "whois.nic.realtor", "_test": "nic.realtor", "extend": "com"} -ZZ["weir"] = {"_server": "whois.nic.weir", "_test": "nic.weir", "extend": "com"} -ZZ["xn--node"] = {"_privateRegistry": True} # no whois server -ZZ["भरतम"] = {"_server": "whois.registry.in", "extend": "in"} - -# 2026-01-06 -# MISSING xn--1ck2e1b セール xn--1ck2e1b 'Amazon Registry Services, Inc.' whois.nic.xn--1ck2e1b '[]' 'http://www.nic.xn--1ck2e1b' -# MISSING xn--bck1b9a5dre4c ファッション xn--bck1b9a5dre4c 'Amazon Registry Services, Inc.' whois.nic.xn--bck1b9a5dre4c '[]' 'http://www.nic.xn--bck1b9a5dre4c' -# MISSING xn--cck2b3b ストア xn--cck2b3b 'Amazon Registry Services, Inc.' whois.nic.xn--cck2b3b '[]' 'http://www.nic.xn--cck2b3b' -# MISSING xn--eckvdtc9d ポイント xn--eckvdtc9d 'Amazon Registry Services, Inc.' whois.nic.xn--eckvdtc9d '[]' 'http://www.nic.xn--eckvdtc9d' -# MISSING xn--fct429k 家電 xn--fct429k 'Amazon Registry Services, Inc.' whois.nic.xn--fct429k '[]' 'http://www.nic.xn--fct429k' -# MISSING xn--g2xx48c 购物 xn--g2xx48c 'Nawang Heli(Xiamen) Network Service Co., LTD.' whois.nic.xn--g2xx48c '[]' 'http://gouwunic.com/' -# MISSING xn--gckr3f0f クラウド xn--gckr3f0f 'Amazon Registry Services, Inc.' whois.nic.xn--gckr3f0f '[]' 'http://www.nic.xn--gckr3f0f' -# MISSING xn--gk3at1e 通販 xn--gk3at1e 'Amazon Registry Services, Inc.' whois.nic.xn--gk3at1e '[]' 'http://www.nic.xn--gk3at1e' -# MISSING xn--jvr189m 食品 xn--jvr189m 'Amazon Registry Services, Inc.' whois.nic.xn--jvr189m '[]' 'http://www.nic.xn--jvr189m' -# MISSING xn--l1acc мон xn--l1acc 'Datacom Co.,Ltd' whois.mn '[]' 'https://www.datacom.mn/' -# MISSING xn--rovu88b 書籍 xn--rovu88b 'Amazon Registry Services, Inc.' whois.nic.xn--rovu88b '[]' 'http://www.nic.xn--rovu88b' - -# unknown tld arpa, arpa, arpa, arpa, whois.iana.org, -# unknown tld xn--4dbrk0ce, ישראל, ישראל, ישראל, whois.isoc.org.il, -# unknown tld xn--55qw42g, 公益, 公益, 公益, whois.conac.cn, -# unknown tld xn--80ao21a, қаз, қаз, қаз, whois.nic.kz, -# unknown tld xn--90a3ac, срб, срб, срб, whois.rnids.rs, -# unknown tld xn--90ae, бг, бг, бг, whois.imena.bg, -# unknown tld xn--90ais, бел, бел, бел, whois.cctld.by, -# unknown tld xn--d1acj3b, дети, дети, дети, whois.nic.xn--d1acj3b, -# unknown tld xn--j1amh, укр, укр, укр, whois.dotukr.com, -# unknown tld xn--lgbbat1ad8j, الجزائر, الجزائر, الجزائر, whois.nic.dz, -# unknown tld xn--mgba3a4f16a, ایران, ایران, ایران, whois.nic.ir, -# unknown tld xn--mgbaam7a8h, امارات, امارات, امارات, whois.aeda.net.ae, -# unknown tld xn--mgberp4a5d4ar, السعودية, السعودية, السعودية, whois.nic.net.sa, -# unknown tld xn--mgbtx2b, عراق, عراق, عراق, whois.cmc.iq, -# unknown tld xn--mgbx4cd0ab, مليسيا, مليسيا, مليسيا, whois.mynic.my, -# unknown tld xn--pgbs0dh, تونس, تونس, تونس, whois.ati.tn, -# unknown tld xn--q7ce6a, ລາວ, ລາວ, ລາວ, whois.nic.la, -# unknown tld xn--y9a3aq, հայ, հայ, հայ, whois.amnic.net, -# unknown tld xn--ygbi2ammx, فلسطين, فلسطين, فلسطين, whois.pnina.ps, -# unknown tld xn--zfr164b, 政务, 政务, 政务, whois.conac.cn, - -# currently defined in ZZ but missing in iana: اتصالات +ZZ["info"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["merck"] = {"_privateRegistry": True} # no whois server found in iana +ZZ["mobi"] = {"_privateRegistry": True} # no whois server found in iana + +ZZ["arpa"] = {"_server": "whois.iana.org", "_test": "iana.org", "extend": "com"} +ZZ["xn--4dbrk0ce"] = {"_server": "whois.isoc.org.il", "_test": "isoc.org.il", "extend": "com"} + +ZZ["xn--zfr164b"] = {"_server": "whois.conac.cn", "_test": "conac.cn", "extend": "com"} +ZZ["xn--55qw42g"] = {"_server": "whois.conac.cn", "_test": "conac.cn", "extend": "com"} + +ZZ["xn--90a3ac"] = {"_server": "whois.rnids.rs", "_test": "rnids.rs", "extend": "com"} +ZZ["xn--90ae"] = {"_server": "whois.imena.bg", "_test": "imena.bg", "extend": "com"} +ZZ["xn--90ais"] = {"_server": "whois.cctld.by", "_test": "cctld.by", "extend": "com"} +ZZ["xn--d1acj3b"] = {"_server": "whois.nic.xn--d1acj3b", "_test": "nic.xn--d1acj3b", "extend": "com"} +ZZ["xn--j1amh"] = {"_server": "whois.dotukr.com", "_test": "dotukr.com", "extend": "com"} +ZZ["xn--lgbbat1ad8j"] = {"_server": "whois.nic.dz", "_test": "nic.dz", "extend": "com"} +ZZ["xn--mgba3a4f16a"] = {"_server": "whois.nic.ir", "_test": "nic.ir", "extend": "com"} +ZZ["xn--mgbaam7a8h"] = {"_server": "whois.aeda.net.ae", "_test": "aeda.net.ae", "extend": "com"} +ZZ["xn--mgberp4a5d4ar"] = {"_server": "whois.nic.net.sa", "_test": "nic.net.sa", "extend": "com"} +ZZ["xn--mgbtx2b"] = {"_server": "whois.cmc.iq", "_test": "cmc.iq", "extend": "com"} +ZZ["xn--mgbx4cd0ab"] = {"_server": "whois.mynic.my", "_test": "mynic.my", "extend": "com"} +ZZ["xn--q7ce6a"] = {"_server": "whois.nic.la", "_test": "nic.la", "extend": "com"} +ZZ["xn--y9a3aq"] = {"_server": "whois.amnic.net", "_test": "amnic.net", "extend": "com"} +ZZ["xn--ygbi2ammx"] = {"_server": "whois.pnina.ps", "_test": "pnina.ps", "extend": "com"} + +ZZ["xn--pgbs0dh"] = {"_server": "whois.ati.tn", "_test": "ati.tn", "extend": "tn"} +ZZ["xn--80ao21a"] = {"_server": "whois.nic.kz", "_test": "nic.kz", "extend": "kz"} + +ZZ["कम"] = {"_server": "whois.nic.xn--11b4c3d", "extend": "xn--11b4c3d"} # whois.nic.xn--11b4c3d ['xn--11b4c3d'] +ZZ["ישראל"] = {"_server": "whois.isoc.org.il", "extend": "co.il"} # whois.isoc.org.il ['co.il', 'xn--4dbrk0ce'] +ZZ["公益"] = {"_server": "whois.conac.cn", "extend": "xn--zfr164b"} # whois.conac.cn ['xn--zfr164b', 'xn--55qw42g'] +ZZ["қаз"] = {"_server": "whois.nic.kz", "extend": "xn--80ao21a"} # whois.nic.kz ['xn--80ao21a'] +ZZ["срб"] = {"_server": "whois.rnids.rs", "extend": "xn--90a3ac"} # whois.rnids.rs ['xn--90a3ac'] +ZZ["бг"] = {"_server": "whois.imena.bg", "extend": "xn--90ae"} # whois.imena.bg ['xn--90ae'] +ZZ["бел"] = {"_server": "whois.cctld.by", "extend": "xn--90ais"} # whois.cctld.by ['xn--90ais'] +ZZ["नट"] = {"_server": "whois.nic.xn--c2br7g", "extend": "xn--c2br7g"} # whois.nic.xn--c2br7g ['xn--c2br7g'] +ZZ["дети"] = {"_server": "whois.nic.xn--d1acj3b", "extend": "xn--d1acj3b"} # whois.nic.xn--d1acj3b ['xn--d1acj3b'] +ZZ["सगठन"] = {"_server": "whois.nic.xn--i1b6b1a6a2e", "extend": "xn--i1b6b1a6a2e"} # whois.nic.xn--i1b6b1a6a2e ['xn--i1b6b1a6a2e'] +ZZ["укр"] = {"_server": "whois.dotukr.com", "extend": "xn--j1amh"} # whois.dotukr.com ['xn--j1amh'] +ZZ["الجزائر"] = {"_server": "whois.nic.dz", "extend": "xn--lgbbat1ad8j"} # whois.nic.dz ['xn--lgbbat1ad8j'] +ZZ["ایران"] = {"_server": "whois.nic.ir", "extend": "ir"} # whois.nic.ir ['ir', 'xn--mgba3a4f16a'] +ZZ["امارات"] = {"_server": "whois.aeda.net.ae", "extend": "ae"} # whois.aeda.net.ae ['ae', 'xn--mgbaam7a8h'] +ZZ["السعودية"] = {"_server": "whois.nic.net.sa", "extend": "xn--mgberp4a5d4ar"} # whois.nic.net.sa ['xn--mgberp4a5d4ar'] +ZZ["عراق"] = {"_server": "whois.cmc.iq", "extend": "xn--mgbtx2b"} # whois.cmc.iq ['xn--mgbtx2b'] +ZZ["مليسيا"] = {"_server": "whois.mynic.my", "extend": "xn--mgbx4cd0ab"} # whois.mynic.my ['xn--mgbx4cd0ab'] +ZZ["تونس"] = {"_server": "whois.ati.tn", "extend": "xn--pgbs0dh"} # whois.ati.tn ['xn--pgbs0dh'] +ZZ["ລາວ"] = {"_server": "whois.nic.la", "extend": "xn--q7ce6a"} # whois.nic.la ['xn--q7ce6a'] +ZZ["հայ"] = {"_server": "whois.amnic.net", "extend": "am"} # whois.amnic.net ['am', 'xn--y9a3aq'] +ZZ["فلسطين"] = {"_server": "whois.pnina.ps", "extend": "xn--ygbi2ammx"} # whois.pnina.ps ['xn--ygbi2ammx'] +ZZ["政务"] = {"_server": "whois.conac.cn", "extend": "xn--zfr164b"} # whois.conac.cn ['xn--zfr164b', 'xn--55qw42g'] + +ZZ["xn--clchc0ea0b2g2a9gcd"] = {"_server": "whois.ta.sgnic.sg", "_test": "ta.sgnic.sg", "extend": "sg"} +ZZ["xn--2scrj9c"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--3hcrj9c"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--45br5cyl"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--45brj9c"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--fpcrj9c3d"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--gecrj9c"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--h2breg3eve"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--rvc1e0am3e"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--s9brj9c"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} +ZZ["xn--xkc2dl3a5ee0h"] = {"_server": "whois.nixiregistry.in", "_test": "nixiregistry.in", "extend": "in"} + +ZZ["ಭರತ"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ଭରତ"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ভৰত"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ভরত"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["சஙகபபர"] = {"_server": "whois.ta.sgnic.sg", "extend": "xn--clchc0ea0b2g2a9gcd"} # whois.ta.sgnic.sg ['xn--clchc0ea0b2g2a9gcd'] +ZZ["భరత"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ભરત"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["भरतम"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["भरत"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["भरत"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ഭരത"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["ਭਰਤ"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +ZZ["இநதய"] = { + "_server": "whois.nixiregistry.in", + "extend": "xn--2scrj9c", +} +# currently defined in ZZ but missing in iana: onion # currently defined in ZZ but missing in iana: कम # currently defined in ZZ but missing in iana: नट -# currently defined in ZZ but missing in iana: भरत # currently defined in ZZ but missing in iana: सगठन -# currently defined in ZZ but missing in iana: ভরত -# currently defined in ZZ but missing in iana: ভৰত -# currently defined in ZZ but missing in iana: ਭਰਤ -# currently defined in ZZ but missing in iana: ભરત -# currently defined in ZZ but missing in iana: ଭରତ -# currently defined in ZZ but missing in iana: இநதய -# currently defined in ZZ but missing in iana: சஙகபபர -# currently defined in ZZ but missing in iana: భరత -# currently defined in ZZ but missing in iana: ಭರತ -# currently defined in ZZ but missing in iana: ഭരത -# currently defined in ZZ but missing in iana: भरतम diff --git a/whoisdomain/tldInfo.py b/whoisdomain/tldInfo.py index 95148d2..9fd9387 100644 --- a/whoisdomain/tldInfo.py +++ b/whoisdomain/tldInfo.py @@ -1,12 +1,8 @@ # import re -import os import logging - +import os from typing import ( - Dict, - List, Any, - Optional, ) log = logging.getLogger(__name__) @@ -16,7 +12,7 @@ class TldInfo: def __init__( self, - zzDict: Dict[str, Any], + zzDict: dict[str, Any], verbose: bool = False, ) -> None: self.verbose = verbose @@ -30,7 +26,7 @@ def __init__( self.withStore: bool = True # the database of processed tld entries (if withStoe is True) - self.tldRegexDb: Dict[str, Dict[str, Any]] = {} + self.tldRegexDb: dict[str, dict[str, Any]] = {} def _initOne( self, @@ -60,15 +56,13 @@ def _initOne( if self.withStore: self.tldRegexDb[tld2] = what - def _cleanupResultDict(self, resultDict: Dict[str, Any]) -> Dict[str, Any]: + def _cleanupResultDict(self, resultDict: dict[str, Any]) -> dict[str, Any]: # we dont want to propagate the extend data - if "extend" in resultDict: - del resultDict["extend"] - if "_extend" in resultDict: - del resultDict["_extend"] + resultDict.pop("extend", None) + resultDict.pop("_extend", None) # we inhert all except extend or _extend - cleanResultDict: Dict[str, Any] = {} + cleanResultDict: dict[str, Any] = {} for key, val in resultDict.items(): cleanResultDict[key] = val @@ -80,9 +74,9 @@ def flattenMasterTldEntry( self, tldString: str, override: bool = False, - ) -> Dict[str, Any]: + ) -> dict[str, Any]: tldDict = self.zzDictRef[tldString] - hasExtend: Optional[str] = tldDict.get("extend") or tldDict.get("_extend") + hasExtend: str | None = tldDict.get("extend") or tldDict.get("_extend") if hasExtend: eDict = self.flattenMasterTldEntry(hasExtend) # call recursive tmpDict = eDict.copy() @@ -95,15 +89,15 @@ def flattenMasterTldEntry( def init(self) -> None: # build the database of all tld - for tld in self.zzDictRef.keys(): + for tld in self.zzDictRef: self._initOne(tld, override=False) def filterTldToSupportedPattern( self, domain: str, - dList: List[str], + dList: list[str], verbose: bool = False, - ) -> Optional[str]: + ) -> str | None: # we have max 2 levels so first check if the last 2 are in our list tld = f"{dList[-2]}.{dList[-1]}" if tld in self.zzDictRef: @@ -118,7 +112,7 @@ def filterTldToSupportedPattern( def mergeExternalDictWithRegex( self, - aDict: Optional[Dict[str, Any]] = None, + aDict: dict[str, Any] | None = None, ) -> None: if aDict is None: return @@ -127,17 +121,17 @@ def mergeExternalDictWithRegex( return # merge in ZZ, this extends ZZ with new tld's and overrides existing tld's - for tld in aDict.keys(): + for tld in aDict: self.zzDictRef[tld] = aDict[tld] # reprocess the regexes we newly defined or overrode override = True - for tld in aDict.keys(): + for tld in aDict: self._initOne(tld, override) - def validTlds(self) -> List[str]: + def validTlds(self) -> list[str]: return sorted(self.tldRegexDb.keys()) - def TLD_RE(self) -> Dict[str, Dict[str, Any]]: + def TLD_RE(self) -> dict[str, dict[str, Any]]: # this returns the currenly prepared list of all tlds ane theyr compiled regexes return self.tldRegexDb diff --git a/whoisdomain/version.py b/whoisdomain/version.py index d42a9f0..310b84c 100644 --- a/whoisdomain/version.py +++ b/whoisdomain/version.py @@ -1,2 +1,3 @@ -'''This module only makes the version available for dynamic versioning''' -VERSION = '1.20260106.1' +"""This module only makes the version available for dynamic versioning""" + +VERSION = "1.20260326.1" diff --git a/whoisdomain/whoisCliInterface.py b/whoisdomain/whoisCliInterface.py old mode 100755 new mode 100644 index 4dd60c2..30c9102 --- a/whoisdomain/whoisCliInterface.py +++ b/whoisdomain/whoisCliInterface.py @@ -1,26 +1,18 @@ -#! /usr/bin/env python3 - -import subprocess -import time - -# import sys +import logging import os +import pathlib import platform import shutil -import logging - -from typing import ( - List, -) +import subprocess +import time +from .context.dataContext import DataContext +from .context.parameterContext import ParameterContext from .exceptions import ( WhoisCommandFailed, WhoisCommandTimeout, ) -from .context.parameterContext import ParameterContext -from .context.dataContext import DataContext - log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -28,7 +20,7 @@ class WhoisCliInterface: def _specificOnNonWindowsPlatforms(self) -> None: self.IS_WINDOWS: bool = platform.system() == "Windows" - self.STDBUF_OFF_CMD: List[str] = [] + self.STDBUF_OFF_CMD: list[str] = [] if not self.IS_WINDOWS and shutil.which("stdbuf"): self.STDBUF_OFF_CMD = ["stdbuf", "-o0"] @@ -45,9 +37,10 @@ def _tryInstallMissingWhoisOnWindows(self) -> None: Windows 'whois' command wrapper https://docs.microsoft.com/en-us/sysinternals/downloads/whois """ - folder = os.getcwd() - copy_command = r"copy \\live.sysinternals.com\tools\whois.exe " + folder - msg = "downloading dependencies: {copy_command}" + folder = pathlib.Path.cwd() + rr = r"copy \\live.sysinternals.com\tools\whois.exe " + copy_command = f"{rr} {folder}" + msg = f"downloading dependencies: {copy_command}" log.debug(msg) subprocess.call( @@ -58,10 +51,10 @@ def _tryInstallMissingWhoisOnWindows(self) -> None: ) def _onWindowsFindWhoisCliAndInstallIfNeeded(self, k: str) -> None: - paths = os.environ["path"].split(";") + paths = os.environ["PATH"].split(";") for path in paths: - wpath = os.path.join(path, k) - if os.path.exists(wpath): + wpath = str(pathlib.Path(path) / k) + if pathlib.Path(wpath).exists(): self.pc.cmd = wpath # note we update cmd if we find one return @@ -70,23 +63,23 @@ def _onWindowsFindWhoisCliAndInstallIfNeeded(self, k: str) -> None: def _makeWhoisCommandToRunWindows( self, - whoisCommandList: List[str], - ) -> List[str]: + whoisCommandList: list[str], + ) -> list[str]: if self.pc.cmd == "whois": # the default string k: str = "whois.exe" - if os.path.exists(k): - self.pc.cmd = os.path.join(".", k) + if pathlib.Path(k).exists(): + self.pc.cmd = str(pathlib.Path(k)) else: self._onWindowsFindWhoisCliAndInstallIfNeeded(k) whoisCommandList = [self.pc.cmd] if self.pc.server: - return whoisCommandList + ["-v", "-nobanner", self.domain, self.pc.server] - return whoisCommandList + ["-v", "-nobanner", self.domain] + return [*whoisCommandList, "-v", "-nobanner", self.domain, self.pc.server] + return [*whoisCommandList, "-v", "-nobanner", self.domain] - def _makeWhoisCommandToRun(self) -> List[str]: - whoisCommandList: List[str] = [self.pc.cmd] + def _makeWhoisCommandToRun(self) -> list[str]: + whoisCommandList: list[str] = [self.pc.cmd] if " " in self.pc.cmd: whoisCommandList = self.pc.cmd.split(" ") @@ -96,12 +89,12 @@ def _makeWhoisCommandToRun(self) -> List[str]: ) if self.pc.extractServers: - whoisCommandList = whoisCommandList + ["--verbose"] + whoisCommandList += ["--verbose"] if self.pc.server: - whoisCommandList = whoisCommandList + ["-h", self.pc.server] + whoisCommandList += ["-h", self.pc.server] - return whoisCommandList + [self.domain] + return [*whoisCommandList, self.domain] def _postProcessingResult(self) -> str: msg = f"{self.rawWhoisResultString}" @@ -125,8 +118,6 @@ def _runWhoisCliOnThisOs(self) -> str: # LANG=en is added to make the ".jp" output consisent across all environments # STDBUF_OFF_CMD needed to not lose data on kill - s: str = "" - with subprocess.Popen( self.STDBUF_OFF_CMD + self._makeWhoisCommandToRun(), stdout=subprocess.PIPE, @@ -139,9 +130,7 @@ def _runWhoisCliOnThisOs(self) -> str: try: self.rawWhoisResultString = self.processHandle.communicate( timeout=self.pc.timeout, - )[ - 0 - ].decode(errors="ignore") + )[0].decode(errors="ignore") except subprocess.TimeoutExpired as ex: # Kill the child process & flush any output buffers self.processHandle.kill() @@ -153,21 +142,18 @@ def _runWhoisCliOnThisOs(self) -> str: msg = f"timeout: query took more then {self.pc.timeout} seconds" raise WhoisCommandTimeout(msg) from ex - s = self._postProcessingResult() - - # self.processHandle = None - return s + return self._postProcessingResult() def _returnWhoisPythonFromStaticTestData(self) -> str: testDir = os.getenv("TEST_WHOIS_PYTHON") pathToTestFile = f"{testDir}/{self.domain}/input" - if os.path.exists(pathToTestFile): - with open(pathToTestFile, mode="rb") as f: # switch to binary mode as that is what Popen uses - # make sure the data is treated exactly the same as the output of Popen - return f.read().decode(errors="ignore") + if pathlib.Path(pathToTestFile).exists(): + # switch to binary mode as that is what Popen uses; make sure the data is treated exactly the same + return pathlib.Path(pathToTestFile).read_bytes().decode(errors="ignore") - raise WhoisCommandFailed("") + msg = f"no test data found for: {pathToTestFile}" + raise WhoisCommandFailed(msg) # public diff --git a/whoisdomain/whoisParser.py b/whoisdomain/whoisParser.py old mode 100755 new mode 100644 index bb42000..31d1a93 --- a/whoisdomain/whoisParser.py +++ b/whoisdomain/whoisParser.py @@ -1,37 +1,25 @@ -#! /usr/bin/env python3 -# pylint: disable=duplicate-code - +import logging +import os +import re from typing import ( Any, - Dict, - Optional, - List, - # Union, - Tuple, # cast, ) -import re -import os -import logging +from .context.dataContext import DataContext +from .context.parameterContext import ParameterContext +from .domain import Domain # import sys - from .exceptions import ( FailedParsingWhoisOutput, - WhoisQuotaExceeded, WhoisPrivateRegistry, + WhoisQuotaExceeded, ) - -from .domain import Domain +from .helpers import get_TLD_RE +from .strings.ignoreStrings import IgnoreStrings from .strings.noneStrings import NoneStrings from .strings.quotaStrings import QuotaStrings -from .strings.ignoreStrings import IgnoreStrings - -from .context.parameterContext import ParameterContext -from .context.dataContext import DataContext -from .helpers import get_TLD_RE - log = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) @@ -45,8 +33,8 @@ def __init__( ) -> None: self.pc = pc self.dc = dc - self.dom: Optional[Domain] = None - self.resultDict: Dict[str, Any] = {} + self.dom: Domain | None = None + self.resultDict: dict[str, Any] = {} if self.pc.verbose: logging.basicConfig(level="DEBUG") @@ -91,7 +79,7 @@ def _doExtractPattensFromWhoisString( ) -> None: empty = [""] # Historical: we use 'empty string' as default, not None , or [] - sData: List[str] = [] + sData: list[str] = [] splitter = self.dc.thisTld.get("_split") if splitter: sData = splitter(self.dc.whoisStr, self.pc.verbose) @@ -128,7 +116,7 @@ def _doExtractPattensFromWhoisString( def _doSourceIana( self, - ) -> Optional[Domain]: + ) -> Domain | None: self.dc.whoisStr = str(self.dc.whoisStr) # here we can handle the example.com and example.net permanent IANA domains @@ -137,14 +125,14 @@ def _doSourceIana( msg: str = f"i have seen {k}" log.debug(msg) - whois_splitted: List[str] = self.dc.whoisStr.split(k) + whois_splitted: list[str] = self.dc.whoisStr.split(k) z: int = len(whois_splitted) if z > 2: self.dc.whoisStr = k.join(whois_splitted[1:]) self.dom = None return self.dom - if z == 2 and whois_splitted[1].strip() != "": + if z == 2 and whois_splitted[1].strip(): # if we see source: IANA and the part after is not only whitespace msg = f"after: {k} we see not only whitespace: {whois_splitted[1]}" log.debug(msg) @@ -188,7 +176,7 @@ def _doDnsSec( if self.dc.whoisStr is None: return False - whoisDnsSecList: List[str] = self.dc.whoisStr.split("DNSSEC:") + whoisDnsSecList: list[str] = self.dc.whoisStr.split("DNSSEC:") if len(whoisDnsSecList) >= 2: msg = "DEGUG: i have seen dnssec: {whoisDnsSecStr}" log.debug(msg) @@ -201,7 +189,7 @@ def _doDnsSec( def _handleShortResponse( self, - ) -> Optional[Domain]: + ) -> Domain | None: if self.dc.whoisStr is None: self.dom = None return self.dom @@ -266,7 +254,7 @@ def _handleShortResponse( raise FailedParsingWhoisOutput(self.dc.whoisStr) - def _extractWhoisServer(self) -> List[str]: + def _extractWhoisServer(self) -> list[str]: # jp starts comments with [\s result = re.findall(r"^Using\s+server\s+([^\n]*)\n", str(self.dc.whoisStr), flags=re.IGNORECASE) if result: @@ -281,10 +269,10 @@ def _extractWhoisServer(self) -> List[str]: def _cleanupWhoisResponse( self, ) -> str: - tmp2: List[str] = [] + tmp2: list[str] = [] self.dc.whoisStr = str(self.dc.whoisStr) - tmp: List[str] = self.dc.whoisStr.split("\n") + tmp: list[str] = self.dc.whoisStr.split("\n") for line in tmp: # some servers respond with: % Quota exceeded in the comment section (lines starting with %) if "quota exceeded" in line.lower(): @@ -375,8 +363,8 @@ def init( def parse( self, - dom: Optional[Domain], - ) -> Tuple[Optional[Domain], bool]: + dom: Domain | None, + ) -> tuple[Domain | None, bool]: self.dc.whoisStr = str(self.dc.whoisStr) self.dom = dom diff --git a/work/version b/work/version index 12565bb..52a4383 100644 --- a/work/version +++ b/work/version @@ -1 +1 @@ -1.20260106.1 +1.20260326.1