Repository: realgam3/pymultitor Branch: master Commit: 44ff84ba7b72 Files: 12 Total size: 116.3 KB Directory structure: gitextract_xf2j_25a/ ├── .github/ │ └── workflows/ │ └── publish.yml ├── .gitignore ├── Dockerfile ├── LICENSE.md ├── README.md ├── examples/ │ ├── john.txt │ ├── on-count_whatismyip.py │ ├── on-regex_credential_stuffing.py │ └── on-string_bruteforce.py ├── pymultitor.py ├── requirements.txt └── setup.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/publish.yml ================================================ name: Build and Publish on: push: branches: - '**' tags: - 'v[0-9]+.[0-9]+' # Trigger on tags like v1.0, 2.3, etc. - 'v[0-9]+.[0-9]+.*' # Trigger on tags like v1.0.0, 2.3.0, etc. permissions: contents: read jobs: dockerhub-publish: runs-on: ubuntu-latest environment: release if: github.ref_type == 'branch' || github.ref_type == 'tag' steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Docker Hub run: docker login -u "${{ vars.DOCKERHUB_USER }}" -p "${{ secrets.DOCKERHUB_TOKEN }}" - name: Build Docker Image run: | DOCKER_IMAGE_TAG="${GITHUB_REPOSITORY}:${GITHUB_REF_NAME}" docker build -t "$DOCKER_IMAGE_TAG" . if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then docker tag "$DOCKER_IMAGE_TAG" "${GITHUB_REPOSITORY}:latest" fi - name: Publish Docker Image run: | DOCKER_IMAGE_TAG="${GITHUB_REPOSITORY}:${GITHUB_REF_NAME}" docker push "$DOCKER_IMAGE_TAG" if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then docker push "${GITHUB_REPOSITORY}:latest" fi pypi-publish: runs-on: ubuntu-latest environment: release permissions: id-token: write if: github.ref_type == 'tag' steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install wheel - name: Build Python Package run: python setup.py sdist bdist_wheel - name: Publish Python Package uses: pypa/gh-action-pypi-publish@release/v1 ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject # Pycharm project settings .idea/ /Pipfile /Pipfile.lock ================================================ FILE: Dockerfile ================================================ FROM mitmproxy/mitmproxy:12.1 # Create app directory WORKDIR /app # Bundle app source COPY requirements.txt /app/ RUN set -eux; \ \ apt-get update && apt-get install -y tor; \ pip install -r requirements.txt COPY pymultitor.py /app/ EXPOSE 8080 ENTRYPOINT [ "python3", "/app/pymultitor.py", "-lh", "0.0.0.0", "-lp", "8080" ] ================================================ FILE: LICENSE.md ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. {http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {{project}} Copyright (C) {{year}} {{fullname}} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see {http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read {http://www.gnu.org/philosophy/why-not-lgpl.html}. ================================================ FILE: README.md ================================================ ## PyMultiTor [![PyPI version](https://img.shields.io/pypi/v/pymultitor)](https://pypi.org/project/pymultitor/) [![Downloads](https://pepy.tech/badge/pymultitor)](https://pepy.tech/project/pymultitor) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pymultitor) Python Multi Threaded Tor Proxy, Did you ever want to be at two different places at the same time? When I asked myself this question, I actually started developing this solution in my mind. While performing penetration tests there are often problems caused by security devices that block the "attacking" IP. This really annoyed me, so I wrote a script to supply a solution for this problem. With a large number of IP addresses performing the attacks, better results are guaranteed - especially when attempting attacks to bypass Web Application Firewalls, Brute-Force type attacks and many more. [Blackhat Asia] https://www.blackhat.com/asia-17/arsenal.html#pymultitor [Owasp-IL Presentation] https://www.owasp.org/images/3/3d/OWASPIL-2016-02-02_PyMultiTor_TomerZait.pdf [DigitalWhisper Article (Hebrew)] http://www.digitalwhisper.co.il/files/Zines/0x2E/DW46-3-PyMultitor.pdf ![Logo](https://raw.githubusercontent.com/realgam3/pymultitor/master/assets/img/pymultitor-logo.png) ## Installation ### Prerequisites * Python 3.10+. * mitmproxy (https://mitmproxy.org/). * tor. * On Ubuntu / Kali, `sudo apt install -y tor` * On Centos, `sudo yum install -y tor` * On Fedora, `sudo dnf install -y tor` * On Windows, * download tor expert bundle: https://www.torproject.org/download/tor/ * insert tor to your path environment: `{tor-win32-*_path}\Tor` * if you don't know how remember tor.exe path and use `--tor-cmd` argument on pymultitor (for example: `pymultitor --tor-cmd "c:\Pentest\Web\tor-win32-0.2.9.9\Tor\tor.exe"`) * On MacOS, `brew install tor` ### From pip ```shell pip3 install pymultitor ``` ### From Docker ```shell docker pull realgam3/pymultitor ``` ### From Source ```shell git clone https://github.com/realgam3/pymultitor.git cd pymultitor # Install python dependencies. # Depending on your setup, one or both of these may require sudo. pip3 install -r requirements.txt python3 setup.py install # Confirm that everything works pymultitor --help ``` Bug reports on installation issues are welcome! ## Usage ### Basic Usage 1. Run `pymultitor --on-string "Your IP Address Blocked"`. 2. On your script use proxy (`http://127.0.0.1:8080`). When the string `Your IP Address Blocked` will present in the response content, you will exit from another IP address. ### Docker Usage 1. Run `docker run --rm -p 8080:8080 realgam3/pymultitor --on-string "Your IP Address Blocked"`. 2. On your script use proxy (`http://127.0.0.1:8080`). When the string `Your IP Address Blocked` will present in the response content, you will exit from another IP address. ### API Usage PyMultiTor provides a REST API for managing proxy identities. You can use the API to change your proxy identity on demand. #### Authentication The API requires authentication using a Bearer token. You can set the token in two ways: 1. **Environment Variable**: Set the `PYMULTITOR_TOKEN` environment variable: ```bash export PYMULTITOR_TOKEN="your-secret-token-here" ``` **Note**: If `PYMULTITOR_TOKEN` is not set, PyMultiTor will automatically generate a random token for you. 2. **Command Line**: starting PyMultiTor: ```bash pymultitor ``` #### Endpoints **Change Identity** - **URL**: `/identity` - **Method**: `POST` **Example Usage**: ```bash curl http://pymultitor/identity -X POST \ --header "Proxy-Authorization: Bearer {Token}" \ --proxy http://localhost:8080 ``` **Status** - **URL**: `/status` - **Method**: `GET` **Example Usage**: ```bash curl http://pymultitor/status \ --header "Proxy-Authorization: Bearer {Token}" \ --proxy http://localhost:8080 ``` **Note**: Replace `{Token}` with your actual authentication token. ### Command Line Arguments ```shell pymultitor --help ``` ```text usage: pymultitor.py [-h] [-v] [-lh LISTEN_HOST] [-lp LISTEN_PORT] [-s] [-a AUTH] [-i] [-d] [-p PROCESSES] [-c CMD] [-e CONFIG] [-t TIMEOUT] [-r TRIES] [--request-timeout REQUEST_TIMEOUT] [--on-count ON_COUNT] [--on-string ON_STRING] [--on-regex ON_REGEX] [--on-rst] [--on-status-code [ON_STATUS_CODE ...]] [--on-timeout] options: -h, --help show this help message and exit -v, --version show program's version number and exit -lh, --host LISTEN_HOST proxy listen host. (default: 127.0.0.1) -lp, --port LISTEN_PORT proxy listen port (default: 8080) -s, --socks use as socks proxy (not http proxy) (default: False) -a, --auth AUTH set proxy authentication (format: 'username:pass') (default: ) -i, --insecure insecure ssl (default: False) -d, --debug Debug Log. (default: False) -p, --tor-processes PROCESSES number of tor processes in the cycle (default: 2) -c, --tor-cmd CMD tor cmd (executable path + arguments) (default: tor) -e, --tor-config CONFIG tor extended json configuration (default: {}) -t, --tor-timeout TIMEOUT timeout in seconds for starting a tor instance; 0 disables timeout (default: 90) -r, --tor-tries TRIES number tries to start a tor instance before it fails (default: 5) --request-timeout REQUEST_TIMEOUT timeout in seconds for http requests; 0 disables timeout (default: 0) --on-count ON_COUNT change ip every x requests (resources also counted) (default: 0) --on-string ON_STRING change ip when string found in the response content (default: ) --on-regex ON_REGEX change ip when regex found in The response content (default: ) --on-rst change ip when connection closed with tcp rst (default: False) --on-status-code [ON_STATUS_CODE ...] change ip when one of the specified status codes is returned (default: []) --on-timeout change ip when request times out (default: False) ``` ================================================ FILE: examples/john.txt ================================================ 12345:12345 abc123:abc123 password:password computer:computer 123456:123456 tigger:tigger 1234:1234 a1b2c3:a1b2c3 qwerty:qwerty 123:123 xxx:xxx money:money test:test carmen:carmen mickey:mickey secret:secret summer:summer internet:internet service:service canada:canada hello:hello ranger:ranger shadow:shadow baseball:baseball donald:donald harley:harley hockey:hockey letmein:letmein maggie:maggie mike:mike mustang:mustang snoopy:snoopy buster:buster dragon:dragon jordan:jordan michael:michael michelle:michelle mindy:mindy patrick:patrick 123abc:123abc andrew:andrew bear:bear calvin:calvin changeme:changeme diamond:diamond fuckme:fuckme fuckyou:fuckyou matthew:matthew miller:miller ou812:ou812 tiger:tiger trustno1:trustno1 12345678:12345678 alex:alex apple:apple avalon:avalon brandy:brandy chelsea:chelsea coffee:coffee dave:dave falcon:falcon freedom:freedom gandalf:gandalf golf:golf green:green helpme:helpme linda:linda magic:magic merlin:merlin molson:molson newyork:newyork soccer:soccer thomas:thomas wizard:wizard Monday:Monday asdfgh:asdfgh bandit:bandit batman:batman boris:boris butthead:butthead dorothy:dorothy eeyore:eeyore fishing:fishing football:football george:george happy:happy iloveyou:iloveyou jennifer:jennifer jonathan:jonathan love:love marina:marina master:master missy:missy monday:monday monkey:monkey natasha:natasha ncc1701:ncc1701 newpass:newpass pamela:pamela pepper:pepper piglet:piglet poohbear:poohbear pookie:pookie rabbit:rabbit rachel:rachel rocket:rocket rose:rose smile:smile sparky:sparky spring:spring steven:steven success:success sunshine:sunshine thx1138:thx1138 victoria:victoria whatever:whatever zapata:zapata 1:1 8675309:8675309 Internet:Internet amanda:amanda andy:andy angel:angel august:august barney:barney biteme:biteme boomer:boomer brian:brian casey:casey coke:coke cowboy:cowboy delta:delta doctor:doctor fisher:fisher foobar:foobar island:island john:john joshua:joshua karen:karen marley:marley orange:orange please:please rascal:rascal richard:richard sarah:sarah scooter:scooter shalom:shalom silver:silver skippy:skippy stanley:stanley taylor:taylor welcome:welcome zephyr:zephyr 111111:111111 1928:1928 aaaaaa:aaaaaa abc:abc access:access albert:albert alexander:alexander andrea:andrea anna:anna anthony:anthony asdfjkl;:asdfjkl; ashley:ashley basf:basf basketball:basketball beavis:beavis black:black bob:bob booboo:booboo bradley:bradley brandon:brandon buddy:buddy caitlin:caitlin camaro:camaro charlie:charlie chicken:chicken chris:chris cindy:cindy cricket:cricket dakota:dakota dallas:dallas daniel:daniel david:david debbie:debbie dolphin:dolphin elephant:elephant emily:emily fish:fish fred:fred friend:friend fucker:fucker ginger:ginger goodluck:goodluck hammer:hammer heather:heather help:help iceman:iceman jason:jason jessica:jessica jesus:jesus joseph:joseph jupiter:jupiter justin:justin kevin:kevin knight:knight lacrosse:lacrosse lakers:lakers lizard:lizard madison:madison mary:mary mother:mother muffin:muffin murphy:murphy ncc1701d:ncc1701d newuser:newuser nirvana:nirvana none:none paris:paris pat:pat pentium:pentium phoenix:phoenix picture:picture rainbow:rainbow sandy:sandy saturn:saturn scott:scott shannon:shannon shithead:shithead skeeter:skeeter sophie:sophie special:special stephanie:stephanie stephen:stephen steve:steve sweetie:sweetie teacher:teacher tennis:tennis test123:test123 tommy:tommy topgun:topgun tristan:tristan wally:wally william:william wilson:wilson 1q2w3e:1q2w3e 654321:654321 666666:666666 777:777 a12345:a12345 a1b2c3d4:a1b2c3d4 alpha:alpha amber:amber angela:angela angie:angie archie:archie asdf:asdf blazer:blazer bond007:bond007 booger:booger charles:charles christin:christin claire:claire control:control danny:danny david1:david1 dennis:dennis digital:digital disney:disney dog:dog duck:duck duke:duke edward:edward elvis:elvis felix:felix flipper:flipper floyd:floyd franklin:franklin frodo:frodo guest:guest honda:honda horses:horses hunter:hunter indigo:indigo info:info james:james jasper:jasper jeremy:jeremy joe:joe julian:julian kelsey:kelsey killer:killer kingfish:kingfish lauren:lauren marie:marie maryjane:maryjane matrix:matrix maverick:maverick mayday:mayday mercury:mercury micro:micro mitchell:mitchell morgan:morgan mountain:mountain niners:niners nothing:nothing oliver:oliver peace:peace peanut:peanut pearljam:pearljam phantom:phantom popcorn:popcorn princess:princess psycho:psycho pumpkin:pumpkin purple:purple randy:randy rebecca:rebecca reddog:reddog robert:robert rocky:rocky roses:roses salmon:salmon sam:sam samson:samson sharon:sharon sierra:sierra smokey:smokey startrek:startrek steelers:steelers stimpy:stimpy sunflower:sunflower superman:superman support:support sydney:sydney techno:techno telecom:telecom test1:test1 walter:walter willie:willie willow:willow winner:winner ziggy:ziggy zxcvbnm:zxcvbnm 7777:7777 OU812:OU812 a:a absolut:absolut alaska:alaska alexis:alexis alice:alice animal:animal apples:apples babylon5:babylon5 backup:backup barbara:barbara benjamin:benjamin bill:bill billy:billy bird33:bird33 blue:blue bluebird:bluebird bobby:bobby bonnie:bonnie bubba:bubba camera:camera chocolate:chocolate clark:clark claudia:claudia cocacola:cocacola compton:compton connect:connect cookie:cookie cruise:cruise deliver:deliver douglas:douglas dreamer:dreamer dreams:dreams duckie:duckie eagles:eagles eddie:eddie einstein:einstein enter:enter explorer:explorer faith:faith family:family ferrari:ferrari fire:fire flamingo:flamingo flip:flip flower:flower foxtrot:foxtrot francis:francis freddy:freddy friday:friday froggy:froggy galileo:galileo giants:giants gizmo:gizmo global:global goofy:goofy gopher:gopher hansolo:hansolo happy1:happy1 hendrix:hendrix henry:henry herman:herman homer:homer honey:honey house:house houston:houston iguana:iguana indiana:indiana insane:insane inside:inside irish:irish ironman:ironman jake:jake jane:jane jasmin:jasmin jeanne:jeanne jerry:jerry jim:jim joey:joey justice:justice katherine:katherine kermit:kermit kitty:kitty koala:koala larry:larry leslie:leslie logan:logan lucky:lucky mark:mark martin:martin matt:matt minnie:minnie misty:misty mitch:mitch mom:mom mouse:mouse nancy:nancy nascar:nascar nelson:nelson netware:netware pantera:pantera parker:parker passwd:passwd penguin:penguin peter:peter phil:phil phish:phish piano:piano pizza:pizza porsche911:porsche911 prince:prince punkin:punkin pyramid:pyramid rain:rain raymond:raymond red:red robin:robin roger:roger rosebud:rosebud route66:route66 royal:royal running:running sadie:sadie sasha:sasha security:security sergei:sergei sheena:sheena sheila:sheila skiing:skiing snapple:snapple snowball:snowball sparrow:sparrow spencer:spencer spike:spike star:star stealth:stealth student:student sun:sun sunny:sunny sylvia:sylvia tamara:tamara taurus:taurus tech:tech teresa:teresa theresa:theresa thunderbird:thunderbird tigers:tigers tony:tony toyota:toyota training:training travel:travel truck:truck tuesday:tuesday victory:victory video:video viper1:viper1 volvo:volvo wesley:wesley whisky:whisky winnie:winnie winter:winter wolves:wolves xyz123:xyz123 zorro:zorro !@#$%:!@#$% 007:007 123123:123123 1234567:1234567 1969:1969 5683:5683 696969:696969 888888:888888 Anthony:Anthony Bond007:Bond007 Friday:Friday Hendrix:Hendrix Joshua:Joshua Matthew:Matthew October:October Taurus:Taurus Tigger:Tigger aaa:aaa aaron:aaron abby:abby abcdef:abcdef adidas:adidas adrian:adrian alexandr:alexandr alfred:alfred arthur:arthur athena:athena austin:austin awesome:awesome badger:badger bamboo:bamboo beagle:beagle bears:bears beatles:beatles beautiful:beautiful beaver:beaver benny:benny bigmac:bigmac bingo:bingo bitch:bitch blonde:blonde boogie:boogie boston:boston brenda:brenda bright:bright bubba1:bubba1 bubbles:bubbles buffy:buffy button:button buttons:buttons cactus:cactus candy:candy captain:captain carlos:carlos caroline:caroline carrie:carrie casper:casper catalog:catalog catch22:catch22 challenge:challenge chance:chance charity:charity charlotte:charlotte cheese:cheese cheryl:cheryl chloe:chloe chris1:chris1 clancy:clancy clipper:clipper coltrane:coltrane compaq:compaq conrad:conrad cooper:cooper cooter:cooter copper:copper cosmos:cosmos cougar:cougar cracker:cracker crawford:crawford crystal:crystal curtis:curtis cyclone:cyclone cyrano:cyrano dan:dan dance:dance dawn:dawn dean:dean deutsch:deutsch diablo:diablo dilbert:dilbert dollars:dollars dookie:dookie doom:doom dumbass:dumbass dundee:dundee e-mail:e-mail elizabeth:elizabeth eric:eric europe:europe export:export farmer:farmer firebird:firebird fletcher:fletcher fluffy:fluffy ford:ford fountain:fountain fox:fox france:france freak1:freak1 friends:friends frog:frog fuckoff:fuckoff gabriel:gabriel gabriell:gabriell galaxy:galaxy gambit:gambit garden:garden garfield:garfield garlic:garlic garnet:garnet genesis:genesis genius:genius godzilla:godzilla goforit:goforit golfer:golfer goober:goober grace:grace grateful:grateful greenday:greenday groovy:groovy grover:grover guitar:guitar hacker:hacker harry:harry hazel:hazel hector:hector herbert:herbert hoops:hoops horizon:horizon hornet:hornet howard:howard icecream:icecream imagine:imagine impala:impala informix:informix jack:jack janice:janice jasmine:jasmine jason1:jason1 jeanette:jeanette jeffrey:jeffrey jenifer:jenifer jenni:jenni jesus1:jesus1 jewels:jewels joker:joker julie:julie julie1:julie1 junior:junior justin1:justin1 kathleen:kathleen keith:keith kelly:kelly kelly1:kelly1 kennedy:kennedy kevin1:kevin1 knicks:knicks lady:lady larry1:larry1 ledzep:ledzep lee:lee leonard:leonard lestat:lestat library:library lincoln:lincoln lionking:lionking london:london louise:louise lucky1:lucky1 lucy:lucy maddog:maddog mailman:mailman majordomo:majordomo mantra:mantra margaret:margaret mariposa:mariposa market:market marlboro:marlboro martin1:martin1 marty:marty master1:master1 mazda1:mazda1 mensuck:mensuck mercedes:mercedes metal:metal metallic:metallic midori:midori mikey:mikey millie:millie mirage:mirage mmm:mmm molly:molly monet:monet money1:money1 monica:monica monopoly:monopoly mookie:mookie moose:moose moroni:moroni music:music naomi:naomi nathan:nathan ncc1701e:ncc1701e nesbitt:nesbitt news:news nguyen:nguyen nicholas:nicholas nicole:nicole nimrod:nimrod october:october olive:olive olivia:olivia one:one online:online open:open oscar:oscar oxford:oxford pacific:pacific painter:painter peaches:peaches penelope:penelope pepsi:pepsi pete:pete petunia:petunia philip:philip phoenix1:phoenix1 photo:photo pickle:pickle player:player poiuyt:poiuyt porsche:porsche porter:porter ppp:ppp puppy:puppy python:python quality:quality quest:quest raquel:raquel raven:raven remember:remember republic:republic research:research robbie:robbie robert1:robert1 roman:roman rugby:rugby runner:runner russell:russell ryan:ryan sailing:sailing sailor:sailor samantha:samantha savage:savage sbdc:sbdc scarlett:scarlett school:school sean:sean seven:seven shadow1:shadow1 sheba:sheba shelby:shelby shit:shit shoes:shoes simba:simba simple:simple skipper:skipper smiley:smiley snake:snake snickers:snickers sniper:sniper snoopdog:snoopdog snowman:snowman sonic:sonic spitfire:spitfire sprite:sprite spunky:spunky starwars:starwars station:station stella:stella stingray:stingray storm:storm stormy:stormy stupid:stupid sumuinen:sumuinen sunny1:sunny1 sunrise:sunrise supra:supra surfer:surfer susan:susan tammy:tammy tango:tango tanya:tanya tara:tara teddy1:teddy1 temp:temp testing:testing theboss:theboss theking:theking thumper:thumper tina:tina tintin:tintin tomcat:tomcat trebor:trebor trek:trek trevor:trevor tweety:tweety unicorn:unicorn valentine:valentine valerie:valerie vanilla:vanilla veronica:veronica victor:victor vincent:vincent viper:viper warrior:warrior warriors:warriors weasel:weasel wheels:wheels wilbur:wilbur winston:winston wisdom:wisdom wombat:wombat xanadu:xanadu xavier:xavier xxxx:xxxx yellow:yellow zaphod:zaphod zeppelin:zeppelin zeus:zeus !@#$%^:!@#$%^ !@#$%^&*:!@#$%^&* *:* 0007:0007 1022:1022 10sne1:10sne1 1111:1111 1212:1212 1911:1911 1948:1948 1973:1973 1978:1978 1996:1996 1p2o3i:1p2o3i 2000:2000 2222:2222 3bears:3bears 5252:5252 Andrew:Andrew Broadway:Broadway Champs:Champs Family:Family Fisher:Fisher Friends:Friends Jeanne:Jeanne Killer:Killer Knight:Knight Master:Master Michael:Michael Michelle:Michelle Pentium:Pentium Pepper:Pepper Raistlin:Raistlin Sierra:Sierra Snoopy:Snoopy Tennis:Tennis Tuesday:Tuesday abacab:abacab abcd:abcd abcd1234:abcd1234 abcdefg:abcdefg abigail:abigail account:account ace:ace acropolis:acropolis adam:adam adi:adi alex1:alex1 alice1:alice1 allison:allison alpine:alpine amy:amy anders:anders andre1:andre1 andrea1:andrea1 angel1:angel1 anita:anita annette:annette antares:antares apache:apache apollo:apollo aragorn:aragorn arizona:arizona arnold:arnold arsenal:arsenal asdfasdf:asdfasdf asdfg:asdfg asdfghjk:asdfghjk avenger:avenger avenir:avenir baby:baby babydoll:babydoll bach:bach bailey:bailey banana:banana barry:barry basil:basil basket:basket bass:bass batman1:batman1 beaner:beaner beast:beast beatrice:beatrice beer:beer bella:bella ben:ben bertha:bertha bigben:bigben bigdog:bigdog biggles:biggles bigman:bigman binky:binky biology:biology bishop:bishop bliss:bliss blondie:blondie blowfish:blowfish bluefish:bluefish bmw:bmw bobcat:bobcat bosco:bosco boss:boss braves:braves brazil:brazil bridges:bridges bruce:bruce bruno:bruno brutus:brutus buck:buck buffalo:buffalo bugsy:bugsy bull:bull bulldog:bulldog bullet:bullet bullshit:bullshit bunny:bunny business:business butch:butch butler:butler butter:butter california:california cannondale:cannondale canon:canon carebear:carebear carol:carol carol1:carol1 carole:carole cassie:cassie castle:castle catalina:catalina catherine:catherine catnip:catnip cccccc:cccccc celine:celine center:center champion:champion chanel:chanel chaos:chaos chelsea1:chelsea1 chester1:chester1 chicago:chicago chico:chico chip:chip christian:christian christy:christy church:church cinder:cinder civil:civil colleen:colleen colorado:colorado columbia:columbia commander:commander connie:connie content:content cook:cook cookies:cookies cooking:cooking cordelia:cordelia corona:corona cowboys:cowboys coyote:coyote crack1:crack1 craig:craig creative:creative crow:crow cuddles:cuddles cuervo:cuervo cutie:cutie cyber:cyber daddy:daddy daisie:daisie daisy:daisy daniel1:daniel1 danielle:danielle dark1:dark1 database:database davids:davids deadhead:deadhead death:death denali:denali denis:denis depeche:depeche derek:derek design:design destiny:destiny diana:diana diane:diane dickens:dickens dickhead:dickhead digger:digger dodger:dodger don:don donna:donna dougie:dougie draft:draft dragonfly:dragonfly dylan:dylan eagle:eagle eclipse:eclipse electric:electric emerald:emerald emmitt:emmitt entropy:entropy etoile:etoile excalibur:excalibur express:express farout:farout farside:farside feedback:feedback fender:fender fidel:fidel fiona:fiona fireman:fireman firenze:firenze fish1:fish1 flash:flash fletch:fletch florida:florida flowers:flowers fool:fool foster:foster fozzie:fozzie francesco:francesco francine:francine francois:francois frank:frank french:french fuckface:fuckface fun:fun gargoyle:gargoyle gasman:gasman gemini:gemini general:general gerald:gerald germany:germany gilbert:gilbert goaway:goaway gold:gold golden:golden goldfish:goldfish goose:goose gordon:gordon graham:graham grant:grant graphic:graphic gregory:gregory gretchen:gretchen gunner:gunner hal9000:hal9000 hannah:hannah harold:harold harrison:harrison harvey:harvey hawkeye:hawkeye heaven:heaven heidi:heidi helen:helen helena:helena hell:hell herzog:herzog hithere:hithere hobbit:hobbit huey:huey ibanez:ibanez idontknow:idontknow image:image integra:integra intern:intern intrepid:intrepid ireland:ireland irene:irene isaac:isaac isabel:isabel jackie:jackie jackson:jackson jaguar:jaguar jamaica:jamaica japan:japan jeff:jeff jenny1:jenny1 jessie:jessie jethrotull:jethrotull jkl123:jkl123 joel:joel johan:johan johanna1:johanna1 johnny:johnny joker1:joker1 jordan23:jordan23 judith:judith julia:julia jumanji:jumanji jussi:jussi kangaroo:kangaroo karen1:karen1 kathy:kathy keepout:keepout keith1:keith1 kenneth:kenneth kidder:kidder kim:kim kimberly:kimberly king:king kingdom:kingdom kirk:kirk kitkat:kitkat kramer:kramer kris:kris kristen:kristen lambda:lambda laura:laura laurie:laurie law:law lawrence:lawrence lawyer:lawyer legend:legend leon:leon liberty:liberty light:light lindsay:lindsay lindsey:lindsey lisa:lisa liverpool:liverpool logical:logical lola:lola lonely:lonely lorrie:lorrie louis:louis lovely:lovely loveme:loveme lucas:lucas m:m madonna:madonna mail:mail major:major malcolm:malcolm malibu:malibu marathon:marathon marcel:marcel maria1:maria1 mariah:mariah mariah1:mariah1 marilyn:marilyn mariner:mariner mario:mario mark1:mark1 marvin:marvin maurice:maurice max:max maxine:maxine maxwell:maxwell me:me media:media meggie:meggie melanie:melanie melissa:melissa melody:melody merlot:merlot mexico:mexico michael1:michael1 michele:michele midnight:midnight midway:midway mike1:mike1 miki:miki mine:mine miracle:miracle misha:misha mishka:mishka mmouse:mmouse molly1:molly1 monique:monique montreal:montreal moocow:moocow moon:moon moore:moore mopar:mopar morris:morris mort:mort mortimer:mortimer mouse1:mouse1 mulder:mulder nautica:nautica nellie:nellie nermal:nermal new:new newton:newton nicarao:nicarao nick:nick nina:nina nirvana1:nirvana1 nissan:nissan norman:norman notebook:notebook ocean:ocean olivier:olivier ollie:ollie olsen:olsen opera:opera opus:opus oranges:oranges oregon:oregon orion:orion overkill:overkill pacers:pacers packer:packer panda:panda pandora:pandora panther:panther passion:passion patricia:patricia pearl:pearl peewee:peewee pencil:pencil penny:penny people:people percy:percy person:person peter1:peter1 petey:petey picard:picard picasso:picasso pierre:pierre pinkfloyd:pinkfloyd pit:pit plus:plus polar:polar polaris:polaris police:police polo:polo pookie1:pookie1 poppy:poppy power:power predator:predator preston:preston primus:primus prometheus:prometheus public:public q1w2e3:q1w2e3 queen:queen queenie:queenie quentin:quentin radio:radio ralph:ralph random:random rangers:rangers raptor:raptor rastafarian:rastafarian reality:reality redrum:redrum remote:remote reptile:reptile reynolds:reynolds rhonda:rhonda ricardo:ricardo ricardo1:ricardo1 ricky:ricky river:river roadrunner:roadrunner rob:rob robinhood:robinhood robotech:robotech rocknroll:rocknroll rocky1:rocky1 rodeo:rodeo rolex:rolex ronald:ronald rouge:rouge roxy:roxy roy:roy ruby:ruby ruthie:ruthie sabrina:sabrina sakura:sakura salasana:salasana sally:sally sampson:sampson samuel:samuel sandra:sandra santa:santa sapphire:sapphire scarecrow:scarecrow scarlet:scarlet scorpio:scorpio scott1:scott1 scottie:scottie scout:scout scruffy:scruffy scuba1:scuba1 seattle:seattle serena:serena sergey:sergey shanti:shanti shark:shark shogun:shogun simon:simon singer:singer skibum:skibum skull:skull skunk:skunk skywalker:skywalker slacker:slacker smashing:smashing smiles:smiles snowflake:snowflake snowski:snowski snuffy:snuffy soccer1:soccer1 soleil:soleil sonny:sonny sound:sound spanky:spanky speedy:speedy spider:spider spooky:spooky stacey:stacey star69:star69 start:start starter:starter steven1:steven1 sting1:sting1 stinky:stinky strawberry:strawberry stuart:stuart sugar:sugar sunbird:sunbird sundance:sundance superfly:superfly suzanne:suzanne suzuki:suzuki swimmer:swimmer swimming:swimming system:system taffy:taffy tarzan:tarzan tbird:tbird teddy:teddy teddybear:teddybear teflon:teflon temporal:temporal terminal:terminal terry:terry the:the theatre:theatre thejudge:thejudge thunder:thunder thursday:thursday time:time tinker:tinker toby:toby today:today tokyo:tokyo tootsie:tootsie tornado:tornado tracy:tracy tree:tree tricia:tricia trident:trident trojan:trojan trout:trout truman:truman trumpet:trumpet tucker:tucker turtle:turtle tyler:tyler utopia:utopia vader:vader val:val valhalla:valhalla visa:visa voyager:voyager warcraft:warcraft warlock:warlock warren:warren water:water wayne:wayne wendy:wendy williams:williams willy:willy win95:win95 windsurf:windsurf winona:winona wolf:wolf wolf1:wolf1 woody:woody woofwoof:woofwoof wrangler:wrangler wright:wright www:www xcountry:xcountry xfiles:xfiles xxxxxx:xxxxxx y:y yankees:yankees yoda:yoda yukon:yukon yvonne:yvonne zebra:zebra zenith:zenith zigzag:zigzag zombie:zombie zxc123:zxc123 zxcvb:zxcvb zzz:zzz 000000:000000 007007:007007 11111:11111 11111111:11111111 1213:1213 1214:1214 1225:1225 123321:123321 1313:1313 1316:1316 1332:1332 1412:1412 1430:1430 171717:171717 1818:1818 181818:181818 1950:1950 1952:1952 1953:1953 1955:1955 1956:1956 1960:1960 1964:1964 1975:1975 1977:1977 1991:1991 1a2b3c:1a2b3c 1chris:1chris 1kitty:1kitty 1qw23e:1qw23e 2001:2001 2020:2020 2112:2112 22:22 2200:2200 2252:2252 2kids:2kids 3010:3010 3112:3112 3141:3141 333:333 3533:3533 4055:4055 4444:4444 4788:4788 4854:4854 4runner:4runner 5050:5050 5121:5121 54321:54321 55555:55555 57chevy:57chevy 6262:6262 6301:6301 6969:6969 7777777:7777777 789456:789456 7dwarfs:7dwarfs 88888888:88888888 Abcdefg:Abcdefg Alexis:Alexis Alpha:Alpha Animals:Animals Ariel:Ariel BOSS:BOSS Bailey:Bailey Bastard:Bastard Beavis:Beavis Bismillah:Bismillah Bonzo:Bonzo Booboo:Booboo Boston:Boston Canucks:Canucks Cardinal:Cardinal Carol:Carol Celtics:Celtics ChangeMe:ChangeMe Charlie:Charlie Chris:Chris Computer:Computer Cougar:Cougar Creative:Creative Curtis:Curtis Daniel:Daniel Darkman:Darkman Denise:Denise Dragon:Dragon Eagles:Eagles Elizabeth:Elizabeth Esther:Esther Figaro:Figaro Fishing:Fishing Fortune:Fortune Freddy:Freddy Front242:Front242 Gandalf:Gandalf Geronimo:Geronimo Gingers:Gingers Golden:Golden Goober:Goober Gretel:Gretel HARLEY:HARLEY Hacker:Hacker Hammer:Hammer Harley:Harley Heather:Heather Henry:Henry Hershey:Hershey Homer:Homer Jackson:Jackson Janet:Janet Jennifer:Jennifer Jersey:Jersey Jessica:Jessica Joanna:Joanna Johnson:Johnson Jordan:Jordan KILLER:KILLER Katie:Katie Kitten:Kitten Liberty:Liberty Lindsay:Lindsay Lizard:Lizard Madeline:Madeline Margaret:Margaret Maxwell:Maxwell Mellon:Mellon Merlot:Merlot Metallic:Metallic Michel1:Michel1 Money:Money Monster:Monster Montreal:Montreal Newton:Newton Nicholas:Nicholas Noriko:Noriko Paladin:Paladin Pamela:Pamela Password:Password Peaches:Peaches Peanuts:Peanuts Peter:Peter Phoenix:Phoenix Piglet:Piglet Pookie:Pookie Princess:Princess Purple:Purple Rabbit:Rabbit Raiders:Raiders Random:Random Rebecca:Rebecca Robert:Robert Russell:Russell Sammy:Sammy Saturn:Saturn Service:Service Shadow:Shadow Sidekick:Sidekick Skeeter:Skeeter Smokey:Smokey Sparky:Sparky Speedy:Speedy Sterling:Sterling Steven:Steven Summer:Summer Sunshine:Sunshine Superman:Superman Sverige:Sverige Swoosh:Swoosh Taylor:Taylor Theresa:Theresa Thomas:Thomas Thunder:Thunder Vernon:Vernon Victoria:Victoria Vincent:Vincent Waterloo:Waterloo Webster:Webster Willow:Willow Winnie:Winnie Wolverine:Wolverine Woodrow:Woodrow World:World aa:aa aaaa:aaaa aardvark:aardvark abbott:abbott abcd123:abcd123 abcde:abcde accord:accord active:active acura:acura adg:adg admin:admin admin1:admin1 adrock:adrock aerobics:aerobics africa:africa agent:agent airborne:airborne airwolf:airwolf aki123:aki123 alfaro:alfaro ali:ali alicia:alicia alien:alien aliens:aliens alina:alina aline:aline alison:alison allegro:allegro allen:allen allstate:allstate aloha:aloha alpha1:alpha1 altamira:altamira althea:althea altima:altima altima1:altima1 amanda1:amanda1 amazing:amazing america:america amour:amour anderson:anderson andre:andre andrew!:andrew! andrew1:andrew1 andromed:andromed angels:angels angie1:angie1 ann:ann anne:anne anneli:anneli annie:annie anything:anything apple1:apple1 apple2:apple2 applepie:applepie april:april aptiva:aptiva aqua:aqua aquarius:aquarius ariane:ariane ariel:ariel arlene:arlene arrow:arrow artemis:artemis asdf1234:asdf1234 asdf;lkj:asdf;lkj asdfjkl:asdfjkl ashley1:ashley1 ashraf:ashraf ashton:ashton assmunch:assmunch asterix:asterix attila:attila autumn:autumn avatar:avatar ayelet:ayelet aylmer:aylmer babes:babes bambi:bambi baraka:baraka barbie:barbie barn:barn barney1:barney1 barnyard:barnyard barrett:barrett bart:bart bartman:bartman bball:bball beaches:beaches beanie:beanie beans:beans beasty:beasty beauty:beauty beavis1:beavis1 bebe:bebe becca:becca belgium:belgium belize:belize belle:belle belmont:belmont benji:benji benson:benson beowulf:beowulf bernardo:bernardo berry:berry beryl:beryl best:best beta:beta betacam:betacam betsy:betsy betty:betty bharat:bharat bichon:bichon bigal:bigal bigboss:bigboss bigred:bigred biker:biker bilbo:bilbo bills:bills billy1:billy1 bimmer:bimmer bioboy:bioboy biochem:biochem birdie:birdie birdy:birdy birthday:birthday biscuit:biscuit bitter:bitter biz:biz blackjack:blackjack blah:blah blanche:blanche blinds:blinds blitz:blitz blood:blood blowjob:blowjob blowme:blowme blueeyes:blueeyes bluejean:bluejean blues:blues boat:boat bogart:bogart bogey:bogey bogus:bogus bombay:bombay boobie:boobie boots:boots bootsie:bootsie boulder:boulder bourbon:bourbon boxer:boxer boxers:boxers bozo:bozo brain:brain branch:branch brandi:brandi brent:brent brewster:brewster bridge:bridge britain:britain broker:broker bronco:bronco bronte:bronte brooke:brooke brother:brother bryan:bryan bubble:bubble bucks:bucks buddha:buddha budgie:budgie buffett:buffett bugs:bugs bulls:bulls burns:burns burton:burton butterfly:butterfly buzz:buzz byron:byron c00per:c00per calendar:calendar calgary:calgary calvin1:calvin1 camay:camay camel:camel camille:camille campbell:campbell camping:camping cancer:cancer canela:canela cannon:cannon car:car carbon:carbon carl:carl carnage:carnage carolyn:carolyn carrot:carrot cascade:cascade cat:cat catfish:catfish cathy:cathy catwoman:catwoman cecile:cecile celica:celica cement:cement cessna:cessna chad:chad chainsaw:chainsaw chameleon:chameleon chang:chang change:change chantal:chantal charger:charger chat:chat cherry:cherry chess:chess chiara:chiara chiefs:chiefs china:china chinacat:chinacat chinook:chinook chouette:chouette chris123:chris123 christ1:christ1 christmas:christmas christopher:christopher chronos:chronos chuck:chuck cicero:cicero cindy1:cindy1 cinema:cinema circuit:circuit cirque:cirque cirrus:cirrus civic:civic clapton:clapton clarkson:clarkson class:class claude:claude claudel:claudel cleo:cleo cliff:cliff clock:clock clueless:clueless cobain:cobain cobra:cobra cody:cody colette:colette college:college color:color colors:colors colt45:colt45 comet:comet concept:concept concorde:concorde confused:confused cool:cool coolbean:coolbean cora:cora corky:corky cornflake:cornflake corvette:corvette corwin:corwin cosmo:cosmo country:country courier:courier cows:cows crescent:crescent cross:cross crowley:crowley crusader:crusader cthulhu:cthulhu cuda:cuda cunningham:cunningham cunt:cunt cupcake:cupcake current:current cutlass:cutlass cynthia:cynthia daedalus:daedalus dagger:dagger dagger1:dagger1 daily:daily dale:dale dammit:dammit damogran:damogran dana:dana dancer:dancer daphne:daphne darkstar:darkstar darren:darren darryl:darryl darwin:darwin data1:data1 datatrain:datatrain daytek:daytek dead:dead deborah:deborah december:december decker:decker deedee:deedee deeznuts:deeznuts def:def delano:delano delete:delete demon:demon denise:denise denny:denny desert:desert deskjet:deskjet detroit:detroit devil:devil devine:devine devon:devon dexter:dexter dharma:dharma dianne:dianne diesel:diesel dillweed:dillweed dim:dim dipper:dipper director:director disco:disco dixie:dixie dixon:dixon doc:doc dodgers:dodgers dogbert:dogbert doggy:doggy doitnow:doitnow dollar:dollar dolly:dolly dominique:dominique domino:domino dontknow:dontknow doogie:doogie doors:doors dork:dork doudou:doudou doug:doug downtown:downtown dragon1:dragon1 driver:driver dude:dude dudley:dudley dutch:dutch dutchess:dutchess dwight:dwight eagle1:eagle1 easter:easter eastern:eastern edith:edith edmund:edmund effie:effie eieio:eieio eight:eight element:element elina1:elina1 elissa:elissa ella:ella ellen:ellen elliot:elliot elsie:elsie empire:empire engage:engage enigma:enigma enterprise:enterprise eric1:eric1 erin:erin ernie1:ernie1 escort:escort escort1:escort1 estelle:estelle eugene:eugene evelyn:evelyn excel:excel explore:explore eyal:eyal faculty:faculty fairview:fairview family1:family1 fatboy:fatboy faust:faust felipe:felipe fenris:fenris ferguson:ferguson ferret:ferret ferris:ferris finance:finance fireball:fireball first:first fishes:fishes fishhead:fishhead fishie:fishie flanders:flanders fleurs:fleurs flight:flight florida1:florida1 flowerpot:flowerpot flute:flute fly:fly flyboy:flyboy flyer:flyer forward:forward franka:franka freddie:freddie frederic:frederic free:free freebird:freebird freeman:freeman frisco:frisco fritz:fritz froggie:froggie froggies:froggies frogs:frogs front242:front242 frontier:frontier fucku:fucku fugazi:fugazi funguy:funguy funtime:funtime future:future fuzz:fuzz gabby:gabby gaby:gaby gaelic:gaelic gambler:gambler games:games gammaphi:gammaphi garcia:garcia garfunkel:garfunkel garth:garth gary:gary gaston:gaston gateway:gateway gateway2:gateway2 gator1:gator1 george1:george1 georgia:georgia german:german germany1:germany1 getout:getout ggeorge:ggeorge ghost:ghost gibbons:gibbons gibson:gibson gigi:gigi gilgamesh:gilgamesh giselle:giselle glider1:glider1 gmoney:gmoney goat:goat goblin:goblin goblue:goblue godiva:godiva goethe:goethe gofish:gofish gollum:gollum gone:gone good:good gramps:gramps grandma:grandma gravis:gravis gray:gray greed:greed greg:greg greg1:greg1 gremlin:gremlin greta:greta gretzky:gretzky grizzly:grizzly grumpy:grumpy guess:guess guido:guido guitar1:guitar1 gumby:gumby gustavo:gustavo h2opolo:h2opolo haggis:haggis haha:haha hailey:hailey hal:hal halloween:halloween hallowell:hallowell hamid:hamid hamilton:hamilton hamlet:hamlet hank:hank hanna:hanna hanson:hanson happy123:happy123 happyday:happyday hardcore:hardcore harley1:harley1 haro:haro harriet:harriet harris:harris harvard:harvard hawk:hawk hawkeye1:hawkeye1 health:health health1:health1 heart:heart heather1:heather1 heather2:heather2 hedgehog:hedgehog heikki:heikki helene:helene hello1:hello1 hello123:hello123 hello8:hello8 hellohello:hellohello help123:help123 helper:helper hermes:hermes heythere:heythere highland:highland hilda:hilda hillary:hillary histoire:histoire history:history hitler:hitler hobbes:hobbes holiday:holiday holly:holly homerj:homerj honda1:honda1 hongkong:hongkong hoosier:hoosier hootie:hootie hope:hope horse:horse hosehead:hosehead hotrod:hotrod huang:huang hudson:hudson hugh:hugh hugo:hugo hummer:hummer huskies:huskies hydrogen:hydrogen i:i ib6ub9:ib6ub9 idiot:idiot if6was9:if6was9 iforget:iforget ilmari:ilmari iloveu:iloveu impact:impact indonesia:indonesia ingvar:ingvar insight:insight instruct:instruct integral:integral iomega:iomega irina:irina iris:iris irmeli:irmeli isabelle:isabelle israel:israel italia:italia italy:italy izzy:izzy j0ker:j0ker j1l2t3:j1l2t3 jackie1:jackie1 jacob:jacob jakey:jakey james1:james1 jamesbond:jamesbond jamie:jamie jamjam:jamjam jan:jan jazz:jazz jean:jean jedi:jedi jeepster:jeepster jeffrey1:jeffrey1 jennie:jennie jenny:jenny jensen:jensen jer:jer jesse:jesse jesse1:jesse1 jester:jester jethro:jethro jetta1:jetta1 jimbob:jimbob jimi:jimi jimmy:jimmy joanie:joanie joanna:joanna joelle:joelle john316:john316 jordie:jordie jorge:jorge josee:josee josh:josh journey:journey joy:joy joyce:joyce jubilee:jubilee juhani:juhani jules:jules julia2:julia2 julien:julien juliet:juliet jumbo:jumbo jump:jump junebug:junebug juniper:juniper justdoit:justdoit justice4:justice4 kalamazo:kalamazo kali:kali karin:karin karine:karine karma:karma kat:kat kate:kate katerina:katerina katie:katie katie1:katie1 kayla:kayla kcin:kcin keeper:keeper keller:keller kendall:kendall kenny:kenny kerala:kerala kerrya:kerrya ketchup:ketchup khan:khan kids:kids kings:kings kissa2:kissa2 kissme:kissme kitten:kitten kittycat:kittycat kiwi:kiwi kkkkkk:kkkkkk kleenex:kleenex kombat:kombat kristi:kristi kristine:kristine lab1:lab1 labtec:labtec laddie:laddie ladybug:ladybug lamer:lamer lance:lance laser:laser laserjet:laserjet lassie1:lassie1 laurel:laurel lawson:lawson leader:leader leaf:leaf leblanc:leblanc legal:legal leland:leland lemon:lemon leo:leo lester:lester letter:letter letters:letters lev:lev lexus1:lexus1 libra:libra life:life lights:lights lima:lima lionel:lionel lions:lions lissabon:lissabon little:little liz:liz lizzy:lizzy logger:logger logos:logos loislane:loislane loki:loki lolita:lolita lonestar:lonestar longer:longer longhorn:longhorn looney:looney loren:loren lori:lori lorna:lorna loser:loser lost:lost lotus:lotus lou:lou lovers:lovers loveyou:loveyou lucia:lucia lucifer:lucifer lucky14:lucky14 macha:macha macross:macross macse30:macse30 maddie:maddie madmax:madmax madoka:madoka magic1:magic1 magnum:magnum maiden:maiden maine:maine makeitso:makeitso mallard:mallard manageme:manageme manson:manson manuel:manuel marc:marc marcus:marcus maria:maria marielle:marielle marine:marine marino:marino marshall:marshall mart:mart martha:martha math:math matti1:matti1 mattingly:mattingly maxmax:maxmax meatloaf:meatloaf mech:mech mechanic:mechanic medical:medical megan:megan meister:meister melina:melina memphis:memphis mercer:mercer merde:merde mermaid:mermaid merrill:merrill miami:miami michal:michal michel:michel michigan:michigan michou:michou mickel:mickel mickey1:mickey1 microsoft:microsoft midvale:midvale mikael:mikael milano:milano miles:miles millenium:millenium million:million minou:minou miranda:miranda miriam:miriam mission:mission mmmmmm:mmmmmm mobile:mobile mobydick:mobydick modem:modem mojo:mojo monkey1:monkey1 monroe:monroe montana:montana montana3:montana3 montrose:montrose monty:monty moomoo:moomoo moonbeam:moonbeam morecats:morecats morpheus:morpheus motor:motor motorola:motorola movies:movies mowgli:mowgli mozart:mozart mulder1:mulder1 munchkin:munchkin murray:murray muscle:muscle mustang1:mustang1 nadia:nadia nadine:nadine napoleon:napoleon nation:nation national:national neil:neil neko:neko nesbit:nesbit nestle:nestle neutrino:neutrino newaccount:newaccount newlife:newlife newyork1:newyork1 nexus6:nexus6 nichole:nichole nicklaus:nicklaus nightshadow:nightshadow nightwind:nightwind nike:nike nikita:nikita nikki:nikki nintendo:nintendo nisse:nisse nokia:nokia nomore:nomore none1:none1 nopass:nopass normal:normal norton:norton notta1:notta1 nouveau:nouveau novell:novell noway:noway nugget:nugget number9:number9 numbers:numbers nurse:nurse nutmeg:nutmeg oaxaca:oaxaca obiwan:obiwan obsession:obsession ohshit:ohshit oicu812:oicu812 omega:omega openup:openup orchid:orchid oreo:oreo orlando:orlando orville:orville otter:otter ozzy:ozzy paagal:paagal packard:packard packers:packers packrat:packrat paint:paint paloma:paloma pam:pam pancake:pancake panic:panic papa:papa paradigm:paradigm park:park parola:parola parrot:parrot partner:partner pascal:pascal pass:pass patches:patches patriots:patriots paula:paula pauline:pauline pavel:pavel payton:payton peach:peach peanuts:peanuts pedro1:pedro1 peggy:peggy pekka:pekka perfect:perfect performa:performa perry:perry peterk:peterk peterpan:peterpan phialpha:phialpha philips:philips phillips:phillips phishy:phishy phone:phone piano1:piano1 pianoman:pianoman pianos:pianos pierce:pierce pigeon:pigeon pink:pink pioneer:pioneer pipeline:pipeline piper1:piper1 pirate:pirate pisces:pisces plato:plato play:play playboy:playboy pluto:pluto poetic:poetic poetry:poetry pole:pole pontiac:pontiac pookey:pookey pope:pope popeye:popeye prayer:prayer precious:precious prelude:prelude premier:premier print:print printing:printing prof:prof provider:provider puddin:puddin pulsar:pulsar pussy:pussy pussy1:pussy1 pyro:pyro qqq111:qqq111 quebec:quebec qwer:qwer qwert:qwert qwerty12:qwerty12 qwertyui:qwertyui r0ger:r0ger rabbit1:rabbit1 racer:racer racerx:racerx rachelle:rachelle racoon:racoon radar:radar rafiki:rafiki raleigh:raleigh ram:ram rambo:rambo randy1:randy1 rasta1:rasta1 ratio:ratio ravens:ravens redcloud:redcloud redfish:redfish redman:redman redskins:redskins redwing:redwing redwood:redwood reed:reed reggae:reggae reggie:reggie reliant:reliant rene:rene renee:renee renegade:renegade rescue:rescue revolution:revolution rex:rex reznor:reznor rhino:rhino rhjrjlbk:rhjrjlbk richard1:richard1 richards:richards richmond:richmond riley:riley ripper:ripper ripple:ripple rita:rita robby:robby roberts:roberts robocop:robocop robotics:robotics roche:roche rock:rock rocket1:rocket1 rockie:rockie rockon:rockon roger1:roger1 rogers:rogers roland:roland rommel:rommel roni:roni rookie:rookie rootbeer:rootbeer rosie:rosie rossigno:rossigno rufus:rufus rugger:rugger rush:rush rusty:rusty ruthless:ruthless sabbath:sabbath sabina:sabina safety:safety safety1:safety1 saigon:saigon saint:saint samIam:samIam samiam:samiam sammie:sammie sammy:sammy samsam:samsam sandi:sandi sanjose:sanjose saphire:saphire sarah1:sarah1 saskia:saskia sassy:sassy satori:satori saturday:saturday saturn5:saturn5 schnapps:schnapps science:science scooby:scooby scoobydoo:scoobydoo scooter1:scooter1 scorpion:scorpion scotch:scotch scotty:scotty scouts:scouts scuba:scuba search:search secret3:secret3 seeker:seeker seoul:seoul september:september server:server services:services seven7:seven7 sex:sex sexy:sexy shaggy:shaggy shanghai:shanghai shanny:shanny shaolin:shaolin shasta:shasta shayne:shayne shazam:shazam shelly:shelly shelter:shelter sherry:sherry ship:ship shirley:shirley shorty:shorty shotgun:shotgun sidney:sidney sigmachi:sigmachi signal:signal signature:signature simba1:simba1 simsim:simsim sinatra:sinatra sirius:sirius skate:skate skip:skip skipper1:skipper1 skydive:skydive skyler:skyler slayer:slayer sleepy:sleepy slick:slick slider:slider slip:slip smegma:smegma smile1:smile1 smiths:smiths smitty:smitty smoke:smoke smurfy:smurfy snakes:snakes snapper:snapper snoop:snoop snow:snow sober1:sober1 solomon:solomon sonics:sonics sony:sony sophia:sophia space:space sparks:sparks spartan:spartan spazz:spazz sphynx:sphynx spike1:spike1 spock:spock sponge:sponge spoon:spoon spot:spot sprocket:sprocket spurs:spurs squash:squash stan:stan starbuck:starbuck stargate:stargate starlight:starlight stars:stars steel:steel steph1:steph1 stephi:stephi steve1:steve1 stevens:stevens stewart:stewart sting:sting stivers:stivers stocks:stocks stone:stone storage:storage stranger:stranger strat:strat strato:strato stretch:stretch strong:strong stud:stud student2:student2 studio:studio stumpy:stumpy sucker:sucker suckme:suckme sue:sue sultan:sultan summit:summit sunfire:sunfire sunset:sunset super:super superstar:superstar surfing:surfing susan1:susan1 susanna:susanna sutton:sutton suzy:suzy swanson:swanson sweden:sweden sweetpea:sweetpea sweety:sweety swim:swim switzer:switzer swordfish:swordfish system5:system5 t-bone:t-bone tab:tab tabatha:tabatha tacobell:tacobell taiwan:taiwan talon:talon tamtam:tamtam tanner:tanner tapani:tapani targas:targas target:target tarheel:tarheel tasha:tasha tata:tata tattoo:tattoo tazdevil:tazdevil tequila:tequila terry1:terry1 test2:test2 test3:test3 tester:tester testi:testi testtest:testtest texas:texas thankyou:thankyou theend:theend thelorax:thelorax thisisit:thisisit thompson:thompson thorne:thorne thrasher:thrasher tiger2:tiger2 tightend:tightend tika:tika tim:tim timber:timber timothy:timothy tinkerbell:tinkerbell tnt:tnt tom:tom tool:tool topcat:topcat topher:topher toshiba:toshiba total:total toto1:toto1 tototo:tototo toucan:toucan transfer:transfer transit:transit transport:transport trapper:trapper trash:trash travis:travis tre:tre treasure:treasure trees:trees tricky:tricky trish:trish triton:triton trombone:trombone trophy:trophy trouble:trouble trucker:trucker tucson:tucson tula:tula turbo:turbo turbo2:turbo2 twins:twins tyler1:tyler1 ultimate:ultimate unique:unique united:united unity:unity unix:unix upsilon:upsilon ursula:ursula user1:user1 vacation:vacation valley:valley vampire:vampire vanessa:vanessa vedder:vedder velo:velo venice:venice venus:venus vermont:vermont vette:vette vicki:vicki vicky:vicky victor1:victor1 vikram:vikram vincent1:vincent1 violet:violet violin:violin virago:virago virgil:virgil virginia:virginia vision:vision visual:visual volcano:volcano volley:volley voodoo:voodoo vortex:vortex waiting:waiting walden:walden waldo:waldo walleye:walleye wanker:wanker warner:warner water1:water1 wayne1:wayne1 webmaster:webmaster webster:webster wedge:wedge weezer:weezer wendy1:wendy1 western:western whale1:whale1 whit:whit white:white whitney:whitney whocares:whocares whoville:whoville wibble:wibble wildcat:wildcat will:will william1:william1 wilma:wilma wind:wind window:window winniethepooh:winniethepooh wolfgang:wolfgang wolverine:wolverine wombat1:wombat1 wonder:wonder word:word world:world x-files:x-files x-men:x-men xanth:xanth xxx123:xxx123 xxxxxxxx:xxxxxxxx xyz:xyz yamaha:yamaha yankee:yankee yogibear:yogibear yolanda:yolanda yomama:yomama yvette:yvette zachary:zachary zack:zack zebras:zebras zepplin:zepplin zoltan:zoltan zoomer:zoomer zxc:zxc zxcvbn:zxcvbn !@#$%^&:!@#$%^& 00000000:00000000 121212:121212 1234qwer:1234qwer 123go:123go 131313:131313 13579:13579 1701d:1701d 21122112:21122112 369:369 5555:5555 80486:80486 90210:90210 911:911 99999999:99999999 @#$%^&:@#$%^& ABC123:ABC123 Abcdef:Abcdef Asdfgh:Asdfgh Casio:Casio Changeme:Changeme FuckYou:FuckYou Fuckyou:Fuckyou Gizmo:Gizmo Hello:Hello JSBach:JSBach Michel:Michel NCC1701:NCC1701 PPP:PPP Qwert:Qwert Qwerty:Qwerty Windows:Windows Zxcvb:Zxcvb Zxcvbnm:Zxcvbnm action:action advil:advil allo:allo amelie:amelie anaconda:anaconda angus:angus apollo13:apollo13 artist:artist aspen:aspen ass:ass asshole:asshole ath:ath benoit:benoit bernard:bernard bernie:bernie bigbird:bigbird bird:bird blizzard:blizzard bluesky:bluesky bonjour:bonjour booster:booster byteme:byteme caesar:caesar cardinal:cardinal carolina:carolina cats:cats cedic:cedic cesar:cesar chandler:chandler changeit:changeit chapman:chapman charlie1:charlie1 chevy:chevy chiquita:chiquita chocolat:chocolat christia:christia christoph:christoph classroom:classroom cloclo:cloclo coco:coco corrado:corrado cougars:cougars courtney:courtney dasha:dasha demo:demo dirk:dirk dolphins:dolphins dominic:dominic donkey:donkey doom2:doom2 dusty:dusty e:e energy:energy fearless:fearless fiction:fiction forest:forest french1:french1 fubar:fubar gator:gator gilles:gilles glenn:glenn go:go gocougs:gocougs good-luck:good-luck graymail:graymail guinness:guinness hilbert:hilbert hola:hola home:home homebrew:homebrew hotdog:hotdog indian:indian jared:jared jimbo:jimbo jkm:jkm johnson:johnson jojo:jojo josie:josie judy:judy koko:koko kristin:kristin lloyd:lloyd lorraine:lorraine lulu:lulu lynn:lynn m1911a1:m1911a1 mac:mac macintosh:macintosh mailer:mailer mars:mars maxime:maxime memory:memory meow:meow mimi:mimi mirror:mirror nat:nat ne1410s:ne1410s ne1469:ne1469 ne14a69:ne14a69 nebraska:nebraska nemesis:nemesis network:network newcourt:newcourt nigel:nigel niki:niki nite:nite notused:notused oatmeal:oatmeal patton:patton paul:paul pedro:pedro planet:planet players:players politics:politics pomme:pomme portland:portland praise:praise property:property protel:protel psalms:psalms qwaszx:qwaszx raiders:raiders rambo1:rambo1 rancid:rancid ruth:ruth sales:sales salut:salut scrooge:scrooge shawn:shawn shelley:shelley skidoo:skidoo softball:softball spain:spain speedo:speedo sports:sports sss:sss ssssss:ssssss steele:steele steph:steph stephani:stephani sunday:sunday surf:surf sylvie:sylvie symbol:symbol tiffany:tiffany tigre:tigre toronto:toronto trixie:trixie undead:undead valentin:valentin velvet:velvet viking:viking walker:walker watson:watson young:young zhongguo:zhongguo ================================================ FILE: examples/on-count_whatismyip.py ================================================ import socket import requests from os import path from time import sleep from multiprocessing import Process from importlib.machinery import SourceFileLoader __folder__ = path.dirname(__file__) def check_pymultitor(address='127.0.0.1', port=8080): s = socket.socket() try: s.connect((address, port)) return True except socket.error: return False def execute_pymultitor(): pymultitor_path = path.abspath(path.join(__folder__, '..', 'pymultitor.py')) pymultitor_module = SourceFileLoader('pymultitor', pymultitor_path).load_module("pymultitor") process = Process(target=pymultitor_module.main, kwargs={ 'args': ['-d', '-p', '5', '--on-count', '2'] }) process.start() while not check_pymultitor(): sleep(1) return process if __name__ == '__main__': process = execute_pymultitor() for i in range(20): res = requests.get('http://httpbin.org/ip', proxies={'http': '127.0.0.1:8080'}).json() print("%d) %s" % (i + 1, res['origin'])) process.terminate() process.join() ================================================ FILE: examples/on-regex_credential_stuffing.py ================================================ import socket import requests from os import path from time import sleep from multiprocessing import Process from multiprocessing.pool import ThreadPool from importlib.machinery import SourceFileLoader __folder__ = path.dirname(__file__) def check_pymultitor(address='127.0.0.1', port=8080): s = socket.socket() try: s.connect((address, port)) return True except socket.error: return False def execute_pymultitor(): pymultitor_path = path.abspath(path.join(__folder__, '..', 'pymultitor.py')) pymultitor_module = SourceFileLoader('pymultitor', pymultitor_path).load_module("pymultitor") process = Process(target=pymultitor_module.main, kwargs={ 'args': ['-d', '-p', '5', '--on-regex', r'Your\s+IP\s+Address\s+Blocked'] }) process.start() while not check_pymultitor(): sleep(1) return process def iter_credentials(size=0): with open(path.join(__folder__, 'john.txt')) as credentials_file: for i, credentials in enumerate(credentials_file): if size and i >= size: break yield credentials.rstrip('\n').split(':') def auth(username, password, session=requests.Session()): res = session.post( url='http://multitor.realgame.co.il/login', data={ 'username': username, 'password': password, }, proxies={'http': '127.0.0.1:8080'} ) auth_res = str.encode('Successfully login!') in res.content return auth_res, username, password def callback(res): auth_res, username, password = res if auth_res: print("Username: %s, Password: %s -> Success :)" % (username, password)) return print("Username: %s, Password: %s -> Fail :(" % (username, password)) if __name__ == '__main__': process = execute_pymultitor() username = 'test' pool = ThreadPool(5) for credentials in iter_credentials(size=20): pool.apply_async(auth, args=credentials, callback=callback) pool.close() pool.join() process.terminate() process.join() ================================================ FILE: examples/on-string_bruteforce.py ================================================ import socket import requests from os import path from time import sleep from multiprocessing import Process from importlib.machinery import SourceFileLoader __folder__ = path.dirname(__file__) def check_pymultitor(address='127.0.0.1', port=8080): s = socket.socket() try: s.connect((address, port)) return True except socket.error: return False def execute_pymultitor(): pymultitor_path = path.abspath(path.join(__folder__, '..', 'pymultitor.py')) pymultitor_module = SourceFileLoader('pymultitor', pymultitor_path).load_module("pymultitor") process = Process(target=pymultitor_module.main, kwargs={ 'args': ['-d', '-p', '5', '--on-string', 'Your IP Address Blocked'] }) process.start() while not check_pymultitor(): sleep(1) return process def iter_passwords(): with open(path.join(__folder__, 'john.txt')) as credentials_file: for i, credentials in enumerate(credentials_file): yield credentials.rstrip('\n').split(':')[-1] def auth(username, password, session=requests.Session()): res = session.post( url='http://multitor.realgame.co.il/login', data={ 'username': username, 'password': password, }, proxies={'http': '127.0.0.1:8080'} ) if str.encode('Successfully login!') in res.content: return True return False if __name__ == '__main__': process = execute_pymultitor() username = 'test' for password in set(iter_passwords()): if auth(username, password): print("Username: %s, Password: %s -> Success :)" % (username, password)) break else: print("Username: %s, Password: %s -> Fail :(" % (username, password)) process.terminate() process.join() ================================================ FILE: pymultitor.py ================================================ import os import re import sys import json import atexit import socket import logging import requests import platform import itertools from os import path from time import sleep from shutil import rmtree from mitmproxy import ctx from tempfile import mkdtemp from flask import Flask, jsonify from mitmproxy.http import Response from collections.abc import Sequence from mitmproxy.addons import asgiapp from mitmproxy.tools.main import mitmdump from multiprocessing.pool import ThreadPool from stem.control import Controller, Signal from requests.exceptions import ConnectionError from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from stem.process import launch_tor_with_config, DEFAULT_INIT_TIMEOUT __version__ = "4.1.0" __author__ = 'Tomer Zait (realgam3)' app = Flask("pymultitor") token = os.getenv("PYMULTITOR_TOKEN", os.urandom(32).hex()) def is_windows(): return platform.system().lower() == "windows" def monkey_patch(): _log_mitmproxy = logging.getLogger("mitmproxy") # Patch mitmproxy.addons.termlog.log from mitmproxy.addons import termlog def _termlog_log(self, e): getattr(_log_mitmproxy, e.level)(e.msg) setattr(termlog.TermLog, "log", _termlog_log) # Patch mitmproxy.addon.dumper.echo & mitmproxy.addon.dumper.echo_error from mitmproxy.addons import dumper def _dumper_echo(self, text, ident=None, **style): if ident: text = dumper.indent(ident, text) _log_mitmproxy.info(text) setattr(dumper.Dumper, "echo", _dumper_echo) def _dumper_echo_error(self, text, **style): _log_mitmproxy.error(text) setattr(dumper.Dumper, "echo_error", _dumper_echo_error) class Tor(object): def __init__(self, cmd="tor", config=None, timeout=DEFAULT_INIT_TIMEOUT, tries=5): self.logger = logging.getLogger(__name__) self.tor_cmd = cmd self.tor_config = config or {} self.tor_timeout = timeout self.tries = tries self.socks_port = self.free_port() self.control_port = self.free_port() self.data_directory = mkdtemp() self.id = self.socks_port self.process = None self.controller = None self._is_running = False self.__is_shutdown = False def __del__(self): self.shutdown() def __enter__(self): return self.run() def __exit__(self, exc_type, exc_val, exc_tb): self.shutdown() def run(self): self.logger.debug(f"[{self.id:05d}] Executing Tor Process") for i in range(self.tries): try: self.process = launch_tor_with_config( config={ "ControlPort": str(self.control_port), "SOCKSPort": str(self.socks_port), "DataDirectory": self.data_directory, "AllowSingleHopCircuits": "1", "ExcludeSingleHopRelays": "0", **self.tor_config }, tor_cmd=self.tor_cmd, timeout=self.tor_timeout if self.tor_timeout != 0 else None, init_msg_handler=self.print_bootstrapped_line ) break except Exception as error: self.logger.debug( f"[{self.id:05d}] Tor Process Execution Failed With The Error ({i + 1}/{self.tries}): {repr(error)}" ) self.logger.debug(f"[{self.id:05d}] Creating Tor Controller") self.controller = Controller.from_port(port=self.control_port) self.controller.authenticate() return self def shutdown(self): if self.__is_shutdown: return self._is_running = False self.__is_shutdown = True self.logger.debug(f"[{self.id:05d}] Destroying Tor") self.controller.close() self.process.terminate() self.process.wait() # If Not Closed Properly if path.exists(self.data_directory): rmtree(self.data_directory) def newnym_available(self): return self.controller.is_newnym_available() def newnym_wait(self): return self.controller.get_newnym_wait() def newnym(self): if not self.newnym_available(): self.logger.debug(f"[{self.id:05d}] Could Not Change Tor Identity (Wait {round(self.newnym_wait())}s)") return False self.logger.info(f"[{self.id:05d}] Changing Tor Identity") self.controller.signal(Signal.NEWNYM) return True def print_bootstrapped_line(self, line): if "Bootstrapped" in line: self.logger.debug(f"[{self.id:05d}] Tor Bootstrapped Line: {line}") if "100%" in line: self._is_running = True self.logger.debug(f"[{self.id:05d}] Tor Process Executed Successfully") @staticmethod def free_port(): """ Determines a free port using sockets. Taken from selenium python. """ free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) free_socket.bind(("0.0.0.0", 0)) free_socket.listen(5) port = free_socket.getsockname()[1] free_socket.close() return port class MultiTor(object): def __init__(self, size=2, cmd="tor", config=None, timeout=DEFAULT_INIT_TIMEOUT, tries=5): self.logger = logging.getLogger(__name__) self.cmd = cmd self.timeout = timeout self.tries = tries self.size = size self.list = [] self.cycle = None self.current = None self.config = self.parse_config(config) def parse_config(self, config=None): config = config or {} cfg = {} try: if isinstance(config, dict): cfg = config elif path.isfile(config): with open(config, encoding="utf-8") as cfg_file: json.load(cfg_file) else: cfg = json.loads(config) except (TypeError, json.JSONDecodeError): self.logger.error(f"Could Not Parse Extended JSON Configuration: {repr(config)}") return {} except Exception as error: self.logger.error(f"Tor Configuration Parsing Error: {repr(error)}") return {} # Remove Port / Data Configurations cfg.pop("ControlPort", None) cfg.pop("SOCKSPort", None) cfg.pop("DataDirectory", None) self.logger.debug(f"Tor Extended Configuration: {json.dumps(cfg)}") return cfg def run(self): self.logger.info(f"Executing {self.size} Tor Processes") timeout = self.timeout if is_windows(): # Feature Won't Work In Windows timeout = DEFAULT_INIT_TIMEOUT pool = ThreadPool(processes=self.size) self.list = pool.map( func=lambda _: Tor( cmd=self.cmd, config=self.config, timeout=timeout, tries=self.tries, ).run(), iterable=range(self.size) ) self.logger.info("All Tor Processes Executed Successfully") self.cycle = itertools.cycle(self.list) self.current = next(self.cycle) @property def proxy(self): proxy_url = f"socks5://127.0.0.1:{self.current.socks_port:d}" return {"http": proxy_url, "https": proxy_url} def new_identity(self): identity_changed = False while not identity_changed: identity_changed = self.current.newnym() self.current = next(self.cycle) if not identity_changed: sleep(0.1) return self.proxy def shutdown(self): for tor in self.list: tor.shutdown() class PyMultiTor(object): def __init__(self): self.logger = logging.getLogger(__name__) self.insecure = False self.request_timeout = 0 # Change IP Policy (Configuration) self.counter = itertools.count() self.on_count = 0 self.on_string = "" self.on_regex = "" self.on_rst = False self.on_status_code = [] self.on_timeout = False self.multitor = None @staticmethod def load(loader): # MultiTor Configuration loader.add_option( name="tor_processes", typespec=int, default=2, help="number of tor processes in the cycle", ) loader.add_option( name="tor_cmd", typespec=str, default="tor", help="tor cmd (executable path + arguments)", ) loader.add_option( name="tor_config", typespec=str, default="{}", help="tor extended json configuration", ) loader.add_option( name="tor_timeout", typespec=int, default=DEFAULT_INIT_TIMEOUT, help="timeout in seconds for starting a tor instance; 0 disables timeout", ) loader.add_option( name="tor_tries", typespec=int, default=5, help="number tries to execute tor instance before it fails", ) loader.add_option( name="request_timeout", typespec=int, default=0, help="timeout in seconds for http requests; 0 disables timeout", ) # When To Change IP Address loader.add_option( name="on_count", typespec=int, default=0, help="change ip every x requests (resources also counted)", ) loader.add_option( name="on_string", typespec=str, default="", help="change ip when string found in the response content", ) loader.add_option( name="on_regex", typespec=str, default="", help="change ip when regex found in The response content", ) loader.add_option( name="on_rst", typespec=bool, default=False, help="change ip when connection closed with tcp rst", ) loader.add_option( name="on_status_code", typespec=Sequence[str], default=[], help="change ip when one of the specified status codes is returned", ) loader.add_option( name="on_timeout", typespec=bool, default=False, help="change ip when request times out", ) def configure(self, updates): # Configure Logger logging.basicConfig(level=logging.DEBUG if ctx.options.termlog_verbosity.lower() == "debug" else logging.INFO, format="%(asctime)s %(levelname)-8s %(message)s", datefmt="%d-%m-%y %H:%M:%S") # Disable Loggers monkey_patch() for logger_name in ["stem", "urllib3.connectionpool", "mitmproxy"]: logging.getLogger(logger_name).disabled = True # Log CMD Args If Debug Mode Enabled cmd_args = json.dumps({update: getattr(ctx.options, update) for update in updates}) self.logger.debug(f"Running With CMD Args: {cmd_args}") self.on_count = ctx.options.on_count self.on_string = ctx.options.on_string self.on_regex = ctx.options.on_regex self.on_rst = ctx.options.on_rst self.on_status_code = [int(x) for x in ctx.options.on_status_code] self.on_timeout = ctx.options.on_timeout self.insecure = ctx.options.ssl_insecure self.request_timeout = ctx.options.request_timeout self.logger.info(f"PyMultiTor Token: {token}") self.multitor = MultiTor( size=ctx.options.tor_processes, cmd=ctx.options.tor_cmd, config=ctx.options.tor_config, timeout=ctx.options.tor_timeout, tries=ctx.options.tor_tries, ) try: self.multitor.run() except KeyboardInterrupt: self.multitor.shutdown() atexit.register(self.multitor.shutdown) # Warn If No Change IP Configuration: if not any([self.on_count, self.on_string, self.on_regex, self.on_rst, self.on_status_code, self.on_timeout]): self.logger.warning("Change IP Configuration Not Set (Acting As Regular Tor Proxy)") def create_response(self, request): response = requests.request( method=request.method, url=request.url, data=request.content, headers=request.headers, allow_redirects=False, verify=not self.insecure, proxies=self.multitor.proxy, stream=False, timeout=self.request_timeout if self.request_timeout != 0 else None, ) # Content-Length and Transfer-Encoding set. This is expressly forbidden by RFC 7230 sec 3.3.2. if response.headers.get("Transfer-Encoding") == "chunked": response.headers.pop("Transfer-Encoding") return Response.make( status_code=response.status_code, content=response.content, headers=dict(response.headers), ) def request(self, flow): auth = flow.request.headers.get("Proxy-Authorization", "").split(" ", 2) if flow.request.host in ["pymultitor"] and len(auth) == 2 and auth[1] == token: return error_message = None try: flow.response = self.create_response(flow.request) except ConnectionError: # If TCP Rst Configured if self.on_rst: self.logger.debug("Got TCP Rst, While TCP Rst Configured") self.multitor.new_identity() # Set Response try: flow.response = self.create_response(flow.request) except Exception as error: error_message = f"After TCP Rst Triggered, Got Response Error: {repr(error)}" else: error_message = "Got TCP Rst, While TCP Rst Not Configured" except requests.exceptions.Timeout: # If Timeout Configured if self.on_timeout: self.logger.debug("Request Timeout, While Timeout Configured") self.multitor.new_identity() # Set Response try: flow.response = self.create_response(flow.request) except Exception as error: error_message = f"After Timeout Triggered, Got Response Error: {repr(error)}" else: error_message = "Request Timeout, While Timeout Not Configured" except Exception as error: error_message = f"Got Response Error: {repr(error)}" # When There Is No Response if error_message: self.logger.error(error_message) # Set Error Response flow.response = Response.make( status_code=500, content=error_message, headers={ "Server": f"pymultitor/{__version__}" } ) return # If String Found In Response Content if self.on_string and self.on_string in flow.response.text: self.logger.debug("String Found In Response Content") self.multitor.new_identity() # Set Response flow.response = self.create_response(flow.request) # If Regex Found In Response Content if self.on_regex and re.search(self.on_regex, flow.response.text, re.IGNORECASE): self.logger.debug("Regex Found In Response Content") self.multitor.new_identity() # Set Response flow.response = self.create_response(flow.request) # If Counter Raised To The Configured Number if self.on_count and not next(self.counter) % self.on_count: self.logger.debug("Counter Raised To The Configured Number") self.multitor.new_identity() # If A Specific Status Code Returned if flow.response.status_code in self.on_status_code: self.logger.debug("Specific Status Code Returned") self.multitor.new_identity() # Set Response flow.response = self.create_response(flow.request) def main(args=None): if args is None: args = sys.argv[1:] parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument("-v", "--version", action="version", version="%(prog)s {ver}".format(ver=__version__)) # Proxy Configuration parser.add_argument("-lh", "--host", help="proxy listen host.", dest="listen_host", default="127.0.0.1") parser.add_argument("-lp", "--port", help="proxy listen port", dest="listen_port", type=int, default=8080) parser.add_argument("-s", "--socks", help="use as socks proxy (not http proxy)", action="store_true") parser.add_argument("-a", "--auth", help="set proxy authentication (format: 'username:pass')", dest="auth", default="") parser.add_argument("-i", "--insecure", help="insecure ssl", action="store_true") parser.add_argument("-d", "--debug", help="Debug Log.", action="store_true") # MultiTor Configuration parser.add_argument("-p", "--tor-processes", help="number of tor processes in the cycle", dest="processes", type=int, default=2) parser.add_argument("-c", "--tor-cmd", help="tor cmd (executable path + arguments)", dest="cmd", default="tor") parser.add_argument("-e", "--tor-config", help="tor extended json configuration", dest="config", default="{}") parser.add_argument("-t", "--tor-timeout", help="timeout in seconds for starting a tor instance; 0 disables timeout", dest="timeout", type=int, default=DEFAULT_INIT_TIMEOUT) parser.add_argument("-r", "--tor-tries", help="number tries to start a tor instance before it fails", dest="tries", type=int, default=5) parser.add_argument("--request-timeout", help="timeout in seconds for http requests; 0 disables timeout", dest="request_timeout", type=int, default=0) # When To Change IP Address parser.add_argument("--on-count", help="change ip every x requests (resources also counted)", type=int, default=0) parser.add_argument("--on-string", help="change ip when string found in the response content", default="") parser.add_argument("--on-regex", help="change ip when regex found in The response content", default="") parser.add_argument("--on-rst", help="change ip when connection closed with tcp rst", action="store_true") parser.add_argument("--on-status-code", help="change ip when one of the specified status codes is returned", type=int, nargs='*', default=[]) parser.add_argument("--on-timeout", help="change ip when request times out", action="store_true") sys_args = vars(parser.parse_args(args=args)) mitmdump_args = [ "--scripts", __file__, "--mode", "socks5" if sys_args['socks'] else "regular", "--listen-host", sys_args['listen_host'], "--listen-port", str(sys_args['listen_port']), "--set", f"tor_cmd={sys_args['cmd']}", "--set", f"tor_config={sys_args['config']}", "--set", f"tor_timeout={sys_args['timeout']}", "--set", f"tor_tries={sys_args['tries']}", "--set", f"tor_processes={sys_args['processes']}", "--set", f"request_timeout={sys_args['request_timeout']}", "--set", f"on_string={sys_args['on_string']}", "--set", f"on_regex={sys_args['on_regex']}", "--set", f"on_count={sys_args['on_count']}", ] for status_code in sys_args["on_status_code"]: mitmdump_args.extend([ "--set", f"on_status_code={status_code}", ]) if sys_args["auth"]: mitmdump_args.extend([ "--proxyauth", sys_args["auth"], ]) if sys_args["on_rst"]: mitmdump_args.extend([ "--set", "on_rst", ]) if sys_args["on_timeout"]: mitmdump_args.extend([ "--set", "on_timeout", ]) if sys_args["debug"]: mitmdump_args.extend([ "--verbose", ]) if sys_args["insecure"]: mitmdump_args.extend([ "--ssl-insecure", ]) return mitmdump(args=mitmdump_args) @app.get("/status") def status() -> Response: is_running = False if pymultitor.multitor: is_running = all([ tor._is_running for tor in pymultitor.multitor.list ]) return jsonify({ "status": "running" if is_running else "stopped", }) @app.post("/identity") def identity() -> Response: if not pymultitor.multitor: return jsonify({ "message": "pymultitor not running", "success": False, }) pymultitor.logger.debug("API Requesting New Identity") tor = pymultitor.multitor.current res = tor.newnym() return jsonify({ "message": "new identity requested", "success": res, }) pymultitor = PyMultiTor() addons = [ asgiapp.WSGIApp(app, "pymultitor", 80), pymultitor, ] if __name__ == "__main__": main() ================================================ FILE: requirements.txt ================================================ stem>=1.8.2 mitmproxy>=10.1.6 requests[socks]>=2.31.0 ================================================ FILE: setup.py ================================================ #!/usr/bin/env python import re from os import path from setuptools import setup, find_packages __folder__ = path.dirname(__file__) with open(path.join(__folder__, "README.md")) as ld_file: long_description = ld_file.read() ld_file.flush() with open(path.join(__folder__, "pymultitor.py")) as lib_file: r = re.search(r"__version__\s+=\s+(?P[\"'])(?P\d+(?:\.\d+)*)(?P=q)", lib_file.read()) version = r.group('ver') with open(path.join(__folder__, "requirements.txt")) as req_file: install_requires = req_file.read() setup( name="PyMultitor", version=version, description="PyMultitor - Never Stop Even If Your IP Dropped.", long_description=long_description, long_description_content_type="text/markdown", author="Tomer Zait (realgam3)", author_email="realgam3@gmail.com", packages=find_packages(exclude=["examples", "tests"]), py_modules=["pymultitor"], entry_points={ "console_scripts": [ "pymultitor = pymultitor:main", ] }, python_requires=">=3.10", install_requires=install_requires, license="GPLv3", platforms="any", url="https://github.com/realgam3/pymultitor", zip_safe=False, classifiers=[ "Environment :: Console", "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", 'Operating System :: OS Independent', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', "Programming Language :: Python :: 3 :: Only", "Topic :: Security", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: Proxy Servers", "Topic :: Software Development :: Testing", "Topic :: Software Development :: Libraries :: Python Modules", ], project_urls={ 'Source': "https://github.com/realgam3/pymultitor", }, )