├── README.md ├── fugitive.py ├── img ├── display.png └── placeholder ├── requirements.txt └── src ├── Dork-Harvest └── dork-harvest.py ├── HarvestBin └── harvestbin.py ├── Xurma-Dox ├── README.md ├── requirements.txt ├── src │ ├── config.json │ ├── qu.py │ ├── xurma-dox-email.py │ ├── xurma-dox-ip.py │ └── xurma-dox-phone.py └── xurma-dox.py ├── adv-search.py ├── discrow.py ├── fugitive.py ├── geckodriver ├── geo-recon ├── LICENSE ├── README.md ├── geo-recon.png ├── geo-recon.py ├── header.txt ├── help.txt ├── modules │ ├── __pycache__ │ │ ├── checkIp.cpython-310.pyc │ │ ├── checkIp.cpython-37.pyc │ │ ├── checkIp.cpython-39.pyc │ │ ├── commands.cpython-310.pyc │ │ ├── commands.cpython-37.pyc │ │ ├── commands.cpython-39.pyc │ │ ├── getData.cpython-310.pyc │ │ ├── getData.cpython-37.pyc │ │ ├── getData.cpython-39.pyc │ │ ├── helps.cpython-310.pyc │ │ ├── helps.cpython-37.pyc │ │ ├── helps.cpython-39.pyc │ │ ├── myip.cpython-310.pyc │ │ ├── myip.cpython-37.pyc │ │ ├── myip.cpython-39.pyc │ │ ├── nmapVerify.cpython-310.pyc │ │ ├── nmapVerify.cpython-37.pyc │ │ ├── nmapVerify.cpython-39.pyc │ │ ├── welcome.cpython-310.pyc │ │ ├── welcome.cpython-37.pyc │ │ └── welcome.cpython-39.pyc │ ├── checkIp.py │ ├── commands.py │ ├── getData.py │ ├── helps.py │ ├── myip.py │ ├── nmap.sh │ ├── nmapVerify.py │ └── welcome.py └── requirements.txt ├── holehe ├── FUNDING.yml ├── LICENSE.md ├── README.md ├── build │ ├── lib │ │ └── holehe │ │ │ └── modules │ │ │ ├── __init__.py │ │ │ ├── cms │ │ │ ├── __init__.py │ │ │ ├── atlassian.py │ │ │ ├── gravatar.py │ │ │ ├── voxmedia.py │ │ │ └── wordpress.py │ │ │ ├── company │ │ │ ├── __init__.py │ │ │ └── aboutme.py │ │ │ ├── crm │ │ │ ├── __init__.py │ │ │ ├── amocrm.py │ │ │ ├── axonaut.py │ │ │ ├── hubspot.py │ │ │ ├── insightly.py │ │ │ ├── nimble.py │ │ │ ├── nocrm.py │ │ │ ├── nutshell.py │ │ │ ├── pipedrive.py │ │ │ ├── teamleader.py │ │ │ └── zoho.py │ │ │ ├── crowfunding │ │ │ ├── __init__.py │ │ │ └── buymeacoffee.py │ │ │ ├── forum │ │ │ ├── __init__.py │ │ │ ├── babeshows.py │ │ │ ├── badeggsonline.py │ │ │ ├── biosmods.py │ │ │ ├── biotechnologyforums.py │ │ │ ├── blackworldforum.py │ │ │ ├── blitzortung.py │ │ │ ├── bluegrassrivals.py │ │ │ ├── cambridgemt.py │ │ │ ├── chinaphonearena.py │ │ │ ├── clashfarmer.py │ │ │ ├── codeigniter.py │ │ │ ├── cpaelites.py │ │ │ ├── cpahero.py │ │ │ ├── cracked_to.py │ │ │ ├── demonforums.py │ │ │ ├── freiberg.py │ │ │ ├── koditv.py │ │ │ ├── mybb.py │ │ │ ├── nattyornot.py │ │ │ ├── ndemiccreations.py │ │ │ ├── nextpvr.py │ │ │ ├── odampublishing.py │ │ │ ├── onlinesequencer.py │ │ │ ├── raidforums.py │ │ │ ├── thecardboard.py │ │ │ ├── therianguide.py │ │ │ ├── thevapingforum.py │ │ │ └── treasureclassifieds.py │ │ │ ├── jobs │ │ │ ├── __init__.py │ │ │ ├── coroflot.py │ │ │ ├── freelancer.py │ │ │ └── seoclerks.py │ │ │ ├── learning │ │ │ ├── __init__.py │ │ │ ├── diigo.py │ │ │ └── quora.py │ │ │ ├── mails │ │ │ ├── __init__.py │ │ │ ├── google.py │ │ │ ├── laposte.py │ │ │ ├── mail_ru.py │ │ │ ├── protonmail.py │ │ │ └── yahoo.py │ │ │ ├── medias │ │ │ ├── __init__.py │ │ │ ├── ello.py │ │ │ ├── flickr.py │ │ │ ├── komoot.py │ │ │ ├── rambler.py │ │ │ └── sporcle.py │ │ │ ├── medical │ │ │ ├── __init__.py │ │ │ ├── caringbridge.py │ │ │ └── sevencups.py │ │ │ ├── music │ │ │ ├── __init__.py │ │ │ ├── blip.py │ │ │ ├── lastfm.py │ │ │ ├── smule.py │ │ │ ├── soundcloud.py │ │ │ ├── spotify.py │ │ │ └── tunefind.py │ │ │ ├── osint │ │ │ ├── __init__.py │ │ │ └── rocketreach.py │ │ │ ├── payment │ │ │ ├── __init__.py │ │ │ └── venmo.py │ │ │ ├── placeholder │ │ │ ├── porn │ │ │ ├── __init__.py │ │ │ ├── pornhub.py │ │ │ ├── redtube.py │ │ │ ├── xnxx.py │ │ │ └── xvideos.py │ │ │ ├── productivity │ │ │ ├── __init__.py │ │ │ ├── anydo.py │ │ │ └── evernote.py │ │ │ ├── products │ │ │ ├── __init__.py │ │ │ ├── eventbrite.py │ │ │ ├── nike.py │ │ │ └── samsung.py │ │ │ ├── programing │ │ │ ├── __init__.py │ │ │ ├── codecademy.py │ │ │ ├── codepen.py │ │ │ ├── devrant.py │ │ │ ├── github.py │ │ │ ├── replit.py │ │ │ └── teamtreehouse.py │ │ │ ├── real_estate │ │ │ ├── __init__.py │ │ │ └── vrbo.py │ │ │ ├── shopping │ │ │ ├── __init__.py │ │ │ ├── amazon.py │ │ │ ├── armurerieauxerre.py │ │ │ ├── deliveroo.py │ │ │ ├── dominosfr.py │ │ │ ├── ebay.py │ │ │ ├── envato.py │ │ │ ├── garmin.py │ │ │ ├── naturabuy.py │ │ │ └── vivino.py │ │ │ ├── social_media │ │ │ ├── __init__.py │ │ │ ├── bitmoji.py │ │ │ ├── crevado.py │ │ │ ├── discord.py │ │ │ ├── fanpop.py │ │ │ ├── imgur.py │ │ │ ├── instagram.py │ │ │ ├── myspace.py │ │ │ ├── odnoklassniki.py │ │ │ ├── parler.py │ │ │ ├── patreon.py │ │ │ ├── pinterest.py │ │ │ ├── plurk.py │ │ │ ├── snapchat.py │ │ │ ├── strava.py │ │ │ ├── taringa.py │ │ │ ├── tellonym.py │ │ │ ├── tumblr.py │ │ │ ├── twitter.py │ │ │ ├── vsco.py │ │ │ ├── wattpad.py │ │ │ └── xing.py │ │ │ ├── software │ │ │ ├── __init__.py │ │ │ ├── adobe.py │ │ │ ├── archive.py │ │ │ ├── docker.py │ │ │ ├── firefox.py │ │ │ ├── issuu.py │ │ │ ├── lastpass.py │ │ │ └── office365.py │ │ │ ├── sport │ │ │ ├── __init__.py │ │ │ └── bodybuilding.py │ │ │ └── transport │ │ │ ├── __init__.py │ │ │ └── blablacar.py │ └── placeholder ├── dist │ ├── holehe-1.60.3-py3.10.egg │ └── holehe-1.60.3-py3.9.egg ├── holehe.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ ├── entry_points.txt │ ├── requires.txt │ └── top_level.txt ├── holehe │ ├── __init__.py │ ├── core.py │ ├── instruments.py │ ├── localuseragent.py │ ├── modules │ │ ├── __init__.py │ │ ├── cms │ │ │ ├── __init__.py │ │ │ ├── atlassian.py │ │ │ ├── gravatar.py │ │ │ ├── voxmedia.py │ │ │ └── wordpress.py │ │ ├── company │ │ │ ├── __init__.py │ │ │ └── aboutme.py │ │ ├── crm │ │ │ ├── __init__.py │ │ │ ├── amocrm.py │ │ │ ├── axonaut.py │ │ │ ├── hubspot.py │ │ │ ├── insightly.py │ │ │ ├── nimble.py │ │ │ ├── nocrm.py │ │ │ ├── nutshell.py │ │ │ ├── pipedrive.py │ │ │ ├── teamleader.py │ │ │ └── zoho.py │ │ ├── crowfunding │ │ │ ├── __init__.py │ │ │ └── buymeacoffee.py │ │ ├── forum │ │ │ ├── __init__.py │ │ │ ├── babeshows.py │ │ │ ├── badeggsonline.py │ │ │ ├── biosmods.py │ │ │ ├── biotechnologyforums.py │ │ │ ├── blackworldforum.py │ │ │ ├── blitzortung.py │ │ │ ├── bluegrassrivals.py │ │ │ ├── cambridgemt.py │ │ │ ├── chinaphonearena.py │ │ │ ├── clashfarmer.py │ │ │ ├── codeigniter.py │ │ │ ├── cpaelites.py │ │ │ ├── cpahero.py │ │ │ ├── cracked_to.py │ │ │ ├── demonforums.py │ │ │ ├── freiberg.py │ │ │ ├── koditv.py │ │ │ ├── mybb.py │ │ │ ├── nattyornot.py │ │ │ ├── ndemiccreations.py │ │ │ ├── nextpvr.py │ │ │ ├── odampublishing.py │ │ │ ├── onlinesequencer.py │ │ │ ├── raidforums.py │ │ │ ├── thecardboard.py │ │ │ ├── therianguide.py │ │ │ ├── thevapingforum.py │ │ │ └── treasureclassifieds.py │ │ ├── jobs │ │ │ ├── __init__.py │ │ │ ├── coroflot.py │ │ │ ├── freelancer.py │ │ │ └── seoclerks.py │ │ ├── learning │ │ │ ├── __init__.py │ │ │ ├── diigo.py │ │ │ └── quora.py │ │ ├── mails │ │ │ ├── __init__.py │ │ │ ├── google.py │ │ │ ├── laposte.py │ │ │ ├── mail_ru.py │ │ │ ├── protonmail.py │ │ │ └── yahoo.py │ │ ├── medias │ │ │ ├── __init__.py │ │ │ ├── ello.py │ │ │ ├── flickr.py │ │ │ ├── komoot.py │ │ │ ├── rambler.py │ │ │ └── sporcle.py │ │ ├── medical │ │ │ ├── __init__.py │ │ │ ├── caringbridge.py │ │ │ └── sevencups.py │ │ ├── music │ │ │ ├── __init__.py │ │ │ ├── blip.py │ │ │ ├── lastfm.py │ │ │ ├── smule.py │ │ │ ├── soundcloud.py │ │ │ ├── spotify.py │ │ │ └── tunefind.py │ │ ├── osint │ │ │ ├── __init__.py │ │ │ └── rocketreach.py │ │ ├── payment │ │ │ ├── __init__.py │ │ │ └── venmo.py │ │ ├── placeholder │ │ ├── porn │ │ │ ├── __init__.py │ │ │ ├── pornhub.py │ │ │ ├── redtube.py │ │ │ ├── xnxx.py │ │ │ └── xvideos.py │ │ ├── productivity │ │ │ ├── __init__.py │ │ │ ├── anydo.py │ │ │ └── evernote.py │ │ ├── products │ │ │ ├── __init__.py │ │ │ ├── eventbrite.py │ │ │ ├── nike.py │ │ │ └── samsung.py │ │ ├── programing │ │ │ ├── __init__.py │ │ │ ├── codecademy.py │ │ │ ├── codepen.py │ │ │ ├── devrant.py │ │ │ ├── github.py │ │ │ ├── replit.py │ │ │ └── teamtreehouse.py │ │ ├── real_estate │ │ │ ├── __init__.py │ │ │ └── vrbo.py │ │ ├── shopping │ │ │ ├── __init__.py │ │ │ ├── amazon.py │ │ │ ├── armurerieauxerre.py │ │ │ ├── deliveroo.py │ │ │ ├── dominosfr.py │ │ │ ├── ebay.py │ │ │ ├── envato.py │ │ │ ├── garmin.py │ │ │ ├── naturabuy.py │ │ │ └── vivino.py │ │ ├── social_media │ │ │ ├── __init__.py │ │ │ ├── bitmoji.py │ │ │ ├── crevado.py │ │ │ ├── discord.py │ │ │ ├── fanpop.py │ │ │ ├── imgur.py │ │ │ ├── instagram.py │ │ │ ├── myspace.py │ │ │ ├── odnoklassniki.py │ │ │ ├── parler.py │ │ │ ├── patreon.py │ │ │ ├── pinterest.py │ │ │ ├── plurk.py │ │ │ ├── snapchat.py │ │ │ ├── strava.py │ │ │ ├── taringa.py │ │ │ ├── tellonym.py │ │ │ ├── tumblr.py │ │ │ ├── twitter.py │ │ │ ├── vsco.py │ │ │ ├── wattpad.py │ │ │ └── xing.py │ │ ├── software │ │ │ ├── __init__.py │ │ │ ├── adobe.py │ │ │ ├── archive.py │ │ │ ├── docker.py │ │ │ ├── firefox.py │ │ │ ├── issuu.py │ │ │ ├── lastpass.py │ │ │ └── office365.py │ │ ├── sport │ │ │ ├── __init__.py │ │ │ └── bodybuilding.py │ │ └── transport │ │ │ ├── __init__.py │ │ │ └── blablacar.py │ └── placeholder ├── placeholder └── setup.py ├── infoga ├── Dockerfile ├── LICENSE ├── README.md ├── dist │ ├── infoga-0.1.5-py2.7.egg │ └── infoga-0.1.5-py3.10.egg ├── infoga.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ ├── requires.txt │ └── top_level.txt ├── infoga.py ├── lib │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-310.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── banner.cpython-310.pyc │ │ ├── banner.cpython-39.pyc │ │ ├── check.cpython-310.pyc │ │ ├── check.cpython-39.pyc │ │ ├── colors.cpython-310.pyc │ │ ├── colors.cpython-39.pyc │ │ ├── output.cpython-310.pyc │ │ ├── output.cpython-39.pyc │ │ ├── parser.cpython-310.pyc │ │ ├── parser.cpython-39.pyc │ │ ├── request.cpython-310.pyc │ │ └── request.cpython-39.pyc │ ├── banner.py │ ├── check.py │ ├── check.pyc │ ├── colors.py │ ├── colors.pyc │ ├── output.py │ ├── output.pyc │ ├── parser.py │ ├── request.py │ └── request.pyc ├── placeholder ├── recon │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-310.pyc │ │ ├── __init__.cpython-39.pyc │ │ ├── ask.cpython-310.pyc │ │ ├── ask.cpython-39.pyc │ │ ├── baidu.cpython-310.pyc │ │ ├── baidu.cpython-39.pyc │ │ ├── bing.cpython-310.pyc │ │ ├── bing.cpython-39.pyc │ │ ├── dogpile.cpython-310.pyc │ │ ├── dogpile.cpython-39.pyc │ │ ├── exalead.cpython-310.pyc │ │ ├── exalead.cpython-39.pyc │ │ ├── google.cpython-310.pyc │ │ ├── google.cpython-39.pyc │ │ ├── mailtester.cpython-310.pyc │ │ ├── mailtester.cpython-39.pyc │ │ ├── pgp.cpython-310.pyc │ │ ├── pgp.cpython-39.pyc │ │ ├── pwned.cpython-310.pyc │ │ ├── pwned.cpython-39.pyc │ │ ├── shodan.cpython-310.pyc │ │ ├── shodan.cpython-39.pyc │ │ ├── yahoo.cpython-310.pyc │ │ └── yahoo.cpython-39.pyc │ ├── ask.py │ ├── baidu.py │ ├── bing.py │ ├── dogpile.py │ ├── exalead.py │ ├── google.py │ ├── mailtester.py │ ├── pgp.py │ ├── pwned.py │ ├── pwned.pyc │ ├── shodan.py │ └── yahoo.py ├── requirements.txt ├── result.txt ├── screen │ ├── image_5.png │ ├── main.png │ └── run_2.png └── setup.py ├── maigret ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.md ├── bin │ └── maigret ├── cookies.txt ├── docs │ ├── Makefile │ ├── make.bat │ ├── requirements.txt │ └── source │ │ ├── command-line-options.rst │ │ ├── conf.py │ │ ├── development.rst │ │ ├── extracting-information-from-pages.rst │ │ ├── features.rst │ │ ├── index.rst │ │ ├── philosophy.rst │ │ ├── roadmap.rst │ │ ├── settings.rst │ │ ├── supported-identifier-types.rst │ │ ├── tags.rst │ │ └── usage-examples.rst ├── example.ipynb ├── launcher.py ├── maigret.py ├── maigret │ ├── __init__.py │ ├── __main__.py │ ├── __pycache__ │ │ ├── __init__.cpython-39.pyc │ │ ├── __main__.cpython-39.pyc │ │ ├── __version__.cpython-39.pyc │ │ ├── activation.cpython-39.pyc │ │ ├── checking.cpython-39.pyc │ │ ├── errors.cpython-39.pyc │ │ ├── executors.cpython-39.pyc │ │ ├── maigret.cpython-39.pyc │ │ ├── notify.cpython-39.pyc │ │ ├── report.cpython-39.pyc │ │ ├── result.cpython-39.pyc │ │ ├── settings.cpython-39.pyc │ │ ├── sites.cpython-39.pyc │ │ ├── submit.cpython-39.pyc │ │ ├── types.cpython-39.pyc │ │ └── utils.cpython-39.pyc │ ├── __version__.py │ ├── activation.py │ ├── checking.py │ ├── errors.py │ ├── executors.py │ ├── maigret.py │ ├── notify.py │ ├── report.py │ ├── resources │ │ ├── data.json │ │ ├── settings.json │ │ ├── simple_report.tpl │ │ ├── simple_report_pdf.css │ │ └── simple_report_pdf.tpl │ ├── result.py │ ├── settings.py │ ├── sites.py │ ├── submit.py │ ├── types.py │ └── utils.py ├── placeholder.txt ├── pyinstaller │ ├── maigret_standalone.py │ ├── maigret_standalone.spec │ └── requirements.txt ├── pytest.ini ├── reports │ └── placeholder.txt ├── requirements.txt ├── setup.cfg ├── setup.py ├── sites.md ├── snapcraft.yaml ├── static │ ├── chat_gitter.svg │ ├── maigret.png │ ├── recursive_search.md │ ├── recursive_search.svg │ ├── report_alexaimephotography_html_screenshot.png │ ├── report_alexaimephotography_xmind_screenshot.png │ ├── report_alexaimephotographycars.html │ └── report_alexaimephotographycars.pdf ├── test-requirements.txt ├── tests │ ├── __init__.py │ ├── conftest.py │ ├── db.json │ ├── local.json │ ├── test_activation.py │ ├── test_checking.py │ ├── test_cli.py │ ├── test_data.py │ ├── test_executors.py │ ├── test_maigret.py │ ├── test_notify.py │ ├── test_report.py │ ├── test_sites.py │ └── test_utils.py ├── utils │ ├── __init__.py │ ├── add_tags.py │ ├── check_engines.py │ ├── import_sites.py │ ├── sites_diff.py │ └── update_site_data.py └── wizard.py └── placeholder.txt /README.md: -------------------------------------------------------------------------------- 1 | # ABOUT 2 | 3 | [Fugitive was made to offer resourcfulness to 'Osint Investigations' Fugitive will allow you to collect detailed information about "subjects" and in further development will become one of the best OSINT tools for your personal or professional activities] 4 | 5 | 6 | ## INSTALL 7 | ``` 8 | git clone https://github.com/RetroPackets/Fugitive 9 | cd Fugitive 10 | python3 fugitive.py 11 | ``` 12 | ![Fugitive - Disaplay](./img/display.png "Fugitive Terminal Display") 13 | 14 | [The Developer Does not and will never be responsible for witch way users decide to use this resourceful tool] 15 | -------------------------------------------------------------------------------- /img/display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/img/display.png -------------------------------------------------------------------------------- /img/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | helium 2 | argparse 3 | webdriver-manager 4 | colorama 5 | 6 | aiodns 7 | aiohttp 8 | aiohttp-socks 9 | arabic-reshaper 10 | async-timeout 11 | attrs 12 | certifi 13 | chardet 14 | colorama 15 | future 16 | future-annotations 17 | html5lib 18 | idna 19 | Jinja2 20 | lxml 21 | MarkupSafe 22 | mock 23 | multidict 24 | multidict 25 | pycountry 26 | PyPDF2 27 | PySocks 28 | python-bidi 29 | requests 30 | requests-futures 31 | six 32 | socid-extractor 33 | soupsieve 34 | stem 35 | torrequest 36 | tqdm 37 | typing-extensions 38 | webencodings 39 | xhtml2pdf 40 | XMind 41 | yarl 42 | networkx 43 | pyvis 44 | reportlab 45 | -------------------------------------------------------------------------------- /src/Xurma-Dox/README.md: -------------------------------------------------------------------------------- 1 | # XURMA DOX 2 | 3 | Scan a IP or a EMAIL or a Number and return the owners real Address/VIN/Emails/Phonenumber. 4 | This tool uses a resource to find the information on your target. 5 | 6 | ```git clone https://github.com/RetroPackets/Xurma-Dox.git`` 7 | 8 | ```cd Xurma-Dox && sudo pip install -r requirements.txt``` 9 | 10 | ```python3 xurma-dox.py``` 11 | -------------------------------------------------------------------------------- /src/Xurma-Dox/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | cloudscraper 3 | bs4 4 | colorama -------------------------------------------------------------------------------- /src/Xurma-Dox/src/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "ict(__stripe_mid": "default", 3 | "__stripe_sid": "default", 4 | "PHPSESSID": "default", 5 | "remember": "default" 6 | } -------------------------------------------------------------------------------- /src/Xurma-Dox/src/qu.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | question = input("Would you like to return to the main menu? [Y/n]: ") 5 | if question == ("y"): 6 | print ("") 7 | os.system("clear && cd .. && python3 xurma-dox.py") 8 | 9 | if question == ("n"): 10 | os.system("clear && exit") 11 | sys.exit() 12 | exit() 13 | 14 | if question == ("N"): 15 | os.system("clear && exit") 16 | sys.exit() 17 | exit() 18 | 19 | 20 | if question == ("Y"): 21 | os.system("clear && cd .. && python3 xurma-dox.py") 22 | -------------------------------------------------------------------------------- /src/discrow.py: -------------------------------------------------------------------------------- 1 | # Author: 2 | # github.com/a3r0id 3 | 4 | # File: 5 | # discord_user.py 6 | 7 | # Usage: 8 | # python3 discord_user.py 9 | 10 | # Description: 11 | # This script takes a Discord user ID and returns all public information associated with it. (Requires a valid Discord token to authenticate with the API.) 12 | 13 | # Requirements: 14 | # pip3 install requests 15 | 16 | from requests import get 17 | 18 | my_token = input("Enter your token: ").strip() 19 | user_id = input("Enter the user ID: ").strip() 20 | 21 | r = get("https://discord.com/api/v8/users/" + user_id, headers={"authorization": my_token}) 22 | 23 | if r.status_code != 200: 24 | print("[-] *Invalid user ID or token*") 25 | exit() 26 | 27 | j = r.json() 28 | j["username_full"] = "%s#%s" % (j['username'], j['discriminator'],) 29 | if (j['avatar'] is not None): 30 | j["avatar_full"] = "https://cdn.discordapp.com/avatars/%s/%s.png" % (j['id'], j['avatar'],) 31 | else: 32 | j['avatar_full'] = "" 33 | 34 | for key, value in j.items(): 35 | print(f"[+] {key}: {value}") 36 | -------------------------------------------------------------------------------- /src/geo-recon/geo-recon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/geo-recon.png -------------------------------------------------------------------------------- /src/geo-recon/header.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/geo-recon/help.txt: -------------------------------------------------------------------------------- 1 | # Geo-Recon 2 | An OSINT CLI tool desgined to fast track IP Reputation and Geo-locaton look up for Security Analysts. 3 | 4 | # Setup 5 | This tool is compactible with: 6 | * Any Linux Operating System (Debian, Ubuntu, CentOS) 7 | * Termux 8 | 9 | # Linux Install Requeriments 10 | 11 | pip3 install -r requirements.txt #You also can use the pip3 12 | 13 | # Sample Simple Syntax Linux 14 | 15 | root@kali:~/geo-recon# python3 geo-recon.py 123.456.789.10 16 | or 17 | root@kali:~/geo-recon# python3 geo-recon.py 123.456.789.10 -n 18 | 19 | 20 | # Commands 21 | 22 | python3 geo-recon.py --help or -h (Display this) 23 | 24 | python3 geo-recon.py 123.456.789.10 --nmap or -n (Nmap standard use) 25 | 26 | python3 geo-recon.py 123.456.789.10 (Standard use, info about IP) 27 | 28 | python3 geo-recon.py --commands or -c (Display avaliable commands) 29 | 30 | python3 geo-recon.py localhost (Standard use, info about YOUR IP address) 31 | 32 | python3 geo-recon.py localhost -n or --nmap (Standard use, info about YOUR IP address with Nmap log) 33 | -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/checkIp.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/checkIp.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/checkIp.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/checkIp.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/checkIp.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/checkIp.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/commands.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/commands.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/commands.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/commands.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/commands.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/commands.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/getData.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/getData.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/getData.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/getData.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/getData.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/getData.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/helps.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/helps.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/helps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/helps.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/helps.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/helps.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/myip.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/myip.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/myip.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/myip.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/myip.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/myip.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/nmapVerify.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/nmapVerify.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/nmapVerify.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/nmapVerify.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/nmapVerify.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/nmapVerify.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/welcome.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/welcome.cpython-310.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/welcome.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/welcome.cpython-37.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/__pycache__/welcome.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/geo-recon/modules/__pycache__/welcome.cpython-39.pyc -------------------------------------------------------------------------------- /src/geo-recon/modules/commands.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import sys 3 | import json 4 | from colorama import Fore, Back, Style 5 | import os 6 | 7 | def command(syA2, syA1): 8 | print("##################################### \n") 9 | if syA2 == '--nmap' or syA2 == '-n': 10 | print('-------------------------- -------------------------------------------') 11 | print("If Nmap is slow to respond don't worry, sometimes it takes a while.") 12 | print('--------------------------------------------------------------------- \n \n') 13 | ip = syA1 14 | nmapcc = os.system('nmap ' + ip) 15 | print(nmapcc) 16 | sys.exit(0) 17 | 18 | else: 19 | print('Review the command after the IP, \nwrite python geo-recon.py --command or -c to see the avaliables commands') 20 | print("\n##################################### \n") 21 | 22 | 23 | def listCommand(): 24 | print(Fore.WHITE+'# Commands') 25 | print('python geo-recon.py --help or -h (Display help)') 26 | print('python geo-recon.py 138.121.128.19 --nmap or -n (Nmap standard use)') 27 | print('python geo-recon.py 138.121.128.19 (Standard use, infos about IP)') 28 | print('python geo-recon.py --commands or -c (Display commands availables )') 29 | -------------------------------------------------------------------------------- /src/geo-recon/modules/getData.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import sys 3 | import json 4 | from colorama import Fore, Back, Style 5 | import os 6 | 7 | def getGeo(syA1): 8 | r = requests.get('http://ip-api.com/json/'+syA1) 9 | response = json.loads(r.text) 10 | 11 | #Iterate the data, filter & print ( data for specific fields 12 | #print ( sys.argv[1] ) 13 | print ( Fore.WHITE + "Country: "+ response["country"]) 14 | print ( "Region: " + response["regionName"]) 15 | print ( "City: " + response["city"]) 16 | print ( "Organization: "+response["org"]) 17 | print ( "Longitude: ", response["lon"]) 18 | print ( "Latitude: ", response["lat"]) 19 | print ( "ISP: "+ response["isp"] + "\n") 20 | 21 | -------------------------------------------------------------------------------- /src/geo-recon/modules/helps.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | from colorama import Fore, Back, Style 4 | import requests 5 | 6 | def help(syA1): 7 | print(Fore.WHITE) 8 | f = open("help.txt") 9 | print (f.read()) 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/geo-recon/modules/myip.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import sys 3 | import json 4 | from colorama import Fore, Back, Style 5 | import os 6 | 7 | 8 | def myIp(): 9 | r = requests.get('https://api.myip.com') 10 | response = json.loads(r.text) 11 | ip = (response["ip"]) 12 | return ip 13 | 14 | -------------------------------------------------------------------------------- /src/geo-recon/modules/nmap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | nmap --version > /dev/null 2>&1 3 | if [ "$?" = "0" ]; then 4 | exit 1 5 | 6 | else 7 | echo Is necessary to install Nmap, instaling... 8 | sudo apt install nmap -y > /dev/null 2>&1 9 | 10 | fi 11 | -------------------------------------------------------------------------------- /src/geo-recon/modules/nmapVerify.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | def verify(): 4 | os.system(' cd modules && sh nmap.sh ') 5 | 6 | -------------------------------------------------------------------------------- /src/geo-recon/modules/welcome.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import sys 3 | import json 4 | from colorama import Fore, Back, Style 5 | import os 6 | 7 | def welcome(): 8 | f = open("header.txt", "r") 9 | print (f.read()) 10 | 11 | -------------------------------------------------------------------------------- /src/geo-recon/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | colorama 3 | nmap 4 | 5 | -------------------------------------------------------------------------------- /src/holehe/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://btc.com/1FHDM49QfZX6pJmhjLE5tB2K6CaTLMZpXZ'] # Replace with up to 4 custom sponsorship URLs e.g., ['https://btc.com/1FHDM49QfZX6pJmhjLE5tB2K6CaTLMZpXZ'] 13 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/cms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/cms/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/cms/gravatar.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def gravatar(email, client, out): 6 | name = "gravatar" 7 | domain = "en.gravatar.com" 8 | method="other" 9 | frequent_rate_limit=False 10 | 11 | hashed_name = hashlib.md5(email.encode()).hexdigest() 12 | r = await client.get(f'https://en.gravatar.com/{hashed_name}.json') 13 | if r.status_code != 200: 14 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 15 | "rateLimit": False, 16 | "exists": False, 17 | "emailrecovery": None, 18 | "phoneNumber": None, 19 | "others": None}) 20 | return None 21 | else: 22 | try: 23 | data = r.json() 24 | FullName = data['entry'][0]['displayName'] 25 | 26 | others = { 27 | 'FullName': str(FullName)+" / "+str(data['entry'][0]["profileUrl"]), 28 | } 29 | 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": True, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": others}) 36 | return None 37 | except Exception: 38 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 39 | "rateLimit": True, 40 | "exists": False, 41 | "emailrecovery": None, 42 | "phoneNumber": None, 43 | "others": None}) 44 | return None 45 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/company/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/company/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/crm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/crm/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/crm/nimble.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def nimble(email, client, out): 6 | name = "nimble" 7 | domain = "nimble.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'Connection': 'keep-alive', 13 | 'Accept': 'application/json, text/javascript, */*; q=0.01', 14 | 'X-Requested-With': 'XMLHttpRequest', 15 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 16 | 'Sec-Fetch-Site': 'same-origin', 17 | 'Sec-Fetch-Mode': 'cors', 18 | 'Sec-Fetch-Dest': 'empty', 19 | 'Referer': 'https://www.nimble.com/', 20 | 'Accept-Language': 'en-US;q=0.8,en;q=0.7', 21 | } 22 | 23 | response = await client.get('https://www.nimble.com/lib/register.php?email='+email, headers=headers) 24 | 25 | if response.text=='"I thought you looked familiar! This email is already registered."': 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | elif response.text=="true": 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | else: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | return() 47 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/crm/teamleader.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def teamleader(email, client, out): 6 | name = "teamleader" 7 | domain = "teamleader.eu" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'authority': 'focus.teamleader.eu', 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'content-type': 'application/json', 15 | 'accept': '*/*', 16 | 'origin': 'https://signup.focus.teamleader.fr', 17 | 'sec-fetch-site': 'cross-site', 18 | 'sec-fetch-mode': 'cors', 19 | 'sec-fetch-dest': 'empty', 20 | 'referer': 'https://signup.focus.teamleader.fr/', 21 | 'accept-language': 'en-US;q=0.8,en;q=0.7', 22 | } 23 | 24 | data = '{"email":"'+email+'"}' 25 | 26 | response = await client.post('https://focus.teamleader.eu/app/emails/availability', headers=headers, data=data) 27 | if response.text=='{"available":false}': 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | elif response.text=='{"available":true}': 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": True, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | 49 | return() 50 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/crowfunding/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/crowfunding/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/forum/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/forum/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/jobs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/jobs/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/jobs/coroflot.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def coroflot(email, client, out): 6 | name = "coroflot" 7 | domain = "coroflot.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-Type': 'application/x-www-form-urlencoded', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.coroflot.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'Referer': 'https://www.coroflot.com/signup', 21 | 'TE': 'Trailers', 22 | } 23 | 24 | data = { 25 | 'email': email 26 | } 27 | try: 28 | response = await client.post('https://www.coroflot.com/home/signup_email_check',headers=headers,data=data) 29 | if response.json()["data"] == -2: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": True, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | else: 37 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 38 | "rateLimit": False, 39 | "exists": False, 40 | "emailrecovery": None, 41 | "phoneNumber": None, 42 | "others": None}) 43 | except Exception: 44 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 45 | "rateLimit": True, 46 | "exists": False, 47 | "emailrecovery": None, 48 | "phoneNumber": None, 49 | "others": None}) 50 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/learning/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/learning/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/mails/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/mails/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/mails/laposte.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def laposte(email, client, out): 6 | name = "laposte" 7 | domain = "laposte.fr" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'Origin': 'https://www.laposte.fr', 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 15 | 'Referer': 'https://www.laposte.fr/authentification', 16 | 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', 17 | } 18 | 19 | data = { 20 | 'email': email, 21 | 'customerId': '', 22 | 'tunnelSteps': '' 23 | } 24 | try: 25 | response = await client.post('https://www.laposte.fr/authentification', headers=headers, data=data) 26 | post_soup = BeautifulSoup(response.content, 'html.parser') 27 | l = post_soup.find_all('span', id="wrongEmail") 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": l != [], 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | except Exception: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": True, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medias/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/medias/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medias/flickr.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def flickr(email, client, out): 6 | name = "flickr" 7 | domain = "flickr.com" 8 | method= "login" 9 | frequent_rate_limit=False 10 | 11 | url = "https://identity-api.flickr.com/migration" 12 | headers = { 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'Accept': '*/*', 15 | 'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3', 16 | 'Referer': 'https://identity.flickr.com/login', 17 | 'Origin': 'https://identity.flickr.com', 18 | 'Connection': 'keep-alive', 19 | 'TE': 'Trailers', 20 | } 21 | try: 22 | response = await client.get(url + "?email=" + str(email), headers=headers) 23 | except Exception: 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": True, 26 | "exists": False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | return None 31 | 32 | data = json.loads(response.text) 33 | if 'state_code' in str(data.keys()) and data['state_code'] == '5': 34 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 35 | "rateLimit": False, 36 | "exists": True, 37 | "emailrecovery": None, 38 | "phoneNumber": None, 39 | "others": None}) 40 | else: 41 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 42 | "rateLimit": False, 43 | "exists": False, 44 | "emailrecovery": None, 45 | "phoneNumber": None, 46 | "others": None}) 47 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medias/komoot.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def komoot(email, client, out): 6 | name = "komoot" 7 | domain = "komoot.com" 8 | method= "register" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/json', 16 | 'Origin': 'https://account.komoot.com', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://account.komoot.com/signin', 19 | } 20 | 21 | data = '{"email":"'+email+'"}' 22 | 23 | try: 24 | response = await client.post('https://account.komoot.com/v1/signin',headers=headers,data=data) 25 | if 'login' in response.json()['type']: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | except Exception: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medias/rambler.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def rambler(email, client, out): 6 | name = "rambler" 7 | domain = "rambler.ru" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://id.rambler.ru/champ/registration', 16 | 'Content-Type': 'application/json', 17 | 'Origin': 'https://id.rambler.ru', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = '{"method":"Rambler::Id::get_email_account_info","params":[{"email":"' + email + '"}],"rpc":"2.0"}' 23 | 24 | response = await client.post( 25 | 'https://id.rambler.ru/jsonrpc', 26 | headers=headers, 27 | data=data) 28 | try: 29 | if response.json()["result"]["exists"] == 0: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | else: 37 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 38 | "rateLimit": False, 39 | "exists": True, 40 | "emailrecovery": None, 41 | "phoneNumber": None, 42 | "others": None}) 43 | except Exception: 44 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 45 | "rateLimit": True, 46 | "exists": False, 47 | "emailrecovery": None, 48 | "phoneNumber": None, 49 | "others": None}) 50 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medias/sporcle.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def sporcle(email, client, out): 6 | name = "sporcle" 7 | domain = "sporcle.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.sporcle.com', 18 | 'Connection': 'keep-alive', 19 | } 20 | 21 | data = { 22 | 'email': str(email), 23 | 'password1': '', 24 | 'password2': '', 25 | 'handle': '', 26 | 'humancheck': '', 27 | 'reg_path': 'main_header_join', 28 | 'ref_page': '', 29 | 'querystring': '' 30 | } 31 | 32 | response = await client.post('https://www.sporcle.com/auth/ajax/verify.php', headers=headers, data=data) 33 | if "account already exists with this email" in response.text: 34 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 35 | "rateLimit": False, 36 | "exists": True, 37 | "emailrecovery": None, 38 | "phoneNumber": None, 39 | "others": None}) 40 | else: 41 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 42 | "rateLimit": False, 43 | "exists": False, 44 | "emailrecovery": None, 45 | "phoneNumber": None, 46 | "others": None}) 47 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/medical/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/medical/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/music/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/music/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/music/soundcloud.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | async def soundcloud(email, client, out): 5 | name = "soundcloud" 6 | domain = "soundcloud.com" 7 | method= "register" 8 | frequent_rate_limit=False 9 | 10 | 11 | headers = { 12 | 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 13 | 'User-Agent': random.choice(ua["browsers"]["iOS"]) 14 | } 15 | 16 | getAuth = await client.get('https://soundcloud.com/octobersveryown', headers=headers) 17 | script = BeautifulSoup(getAuth.text, 'html.parser').find_all('script')[4] 18 | clientId = json.loads(script.contents[0])["runtimeConfig"]["clientId"] 19 | 20 | linkMail = email.replace('@','%40') 21 | API = await client.get(f'https://api-auth.soundcloud.com/web-auth/identifier?q={linkMail}&client_id={clientId}', headers=headers) 22 | Json = json.loads(API.text) 23 | if Json['status'] == 'available' or 'in_use': 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": False, 26 | "exists": True if Json['status'] == 'in_use' else False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | else: 31 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 32 | "rateLimit": True, 33 | "exists": False, 34 | "emailrecovery": None, 35 | "phoneNumber": None, 36 | "others": None}) 37 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/osint/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/osint/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/payment/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/payment/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/porn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/porn/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/productivity/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/productivity/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/productivity/anydo.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def anydo(email, client, out): 6 | name = "anydo" 7 | domain = "any.do" 8 | method= "login" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://desktop.any.do/', 16 | 'Content-Type': 'application/json; charset=UTF-8', 17 | 'X-Platform': '3', 18 | 'Origin': 'https://desktop.any.do', 19 | 'DNT': '1', 20 | 'Connection': 'keep-alive', 21 | 'TE': 'Trailers', 22 | } 23 | 24 | data = '{"email":"' + email + '"}' 25 | 26 | response = await client.post('https://sm-prod2.any.do/check_email', headers=headers, data=data) 27 | if response.status_code == 200: 28 | if response.json()["user_exists"]: 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | else: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": True, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/products/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/products/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/programing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/programing/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/programing/replit.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def replit(email, client, out): 6 | name = "replit" 7 | domain = "replit.com" 8 | method = "register" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'content-type': 'application/json', 16 | 'x-requested-with': 'XMLHttpRequest', 17 | 'Origin': 'https://replit.com', 18 | 'Connection': 'keep-alive', 19 | } 20 | 21 | data = '{"email":"' + str(email) + '"}' 22 | 23 | response = await client.post('https://replit.com/data/user/exists', headers=headers, data=data) 24 | try: 25 | if response.json()['exists']: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | except Exception: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/real_estate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/real_estate/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/shopping/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/shopping/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/shopping/armurerieauxerre.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def armurerieauxerre(email, client, out): 6 | name = "armurerieauxerre" 7 | domain = "armurerie-auxerre.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.armurerie-auxerre.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | data = { 24 | 'mail': email 25 | } 26 | 27 | req = await client.post('https://www.armurerie-auxerre.com/customer/Email/email/', headers=headers, data=data) 28 | if req.text == "exist": 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/shopping/envato.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def envato(email, client, out): 6 | name = "envato" 7 | domain = "envato.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-type': 'application/x-www-form-urlencoded', 16 | 'DNT': '1', 17 | 'Connection': 'keep-alive', 18 | 'TE': 'Trailers', 19 | } 20 | 21 | data = { 22 | 'email': email 23 | } 24 | req = await client.post( 25 | 'https://account.envato.com/api/validate_email', 26 | headers=headers, 27 | data=data) 28 | if 'Email is already in use' in req.text: 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | elif "Page designed by Kotulsky" in req.text: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": True, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | else: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": False, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/social_media/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/social_media/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/social_media/fanpop.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def fanpop(email, client, out): 6 | name = "fanpop" 7 | domain = "fanpop.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'text/html, */*; q=0.01', 14 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 15 | 'X-Requested-With': 'XMLHttpRequest', 16 | 'Origin': 'https://www.fanpop.com', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://www.fanpop.com/register', 19 | } 20 | 21 | data = { 22 | 'type': 'register', 23 | 'user[name]': '', 24 | 'user[password]': '', 25 | 'user[email]': email, 26 | 'agreement': '', 27 | 'PersistentCookie': 'PersistentCookie', 28 | 'redirect_url': 'https://www.fanpop.com/', 29 | 'submissiontype': 'register' 30 | } 31 | 32 | response = await client.post('https://www.fanpop.com/login/superlogin', headers=headers, data=data) 33 | 34 | if "already registered" in response.text: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": True, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": False, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/social_media/pinterest.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def pinterest(email, client, out): 6 | name = "pinterest" 7 | domain = "pinterest.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | req = await client.get( 12 | "https://www.pinterest.com/_ngjs/resource/EmailExistsResource/get/", 13 | params={ 14 | "source_url": "/", 15 | "data": '{"options": {"email": "' + email + '"}, "context": {}}'}) 16 | if 'source_field' in str(req.json()["resource_response"]["data"]) : 17 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 18 | "rateLimit": True, 19 | "exists": False, 20 | "emailrecovery": None, 21 | "phoneNumber": None, 22 | "others": None}) 23 | 24 | elif req.json()["resource_response"]["data"]: 25 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 26 | "rateLimit": False, 27 | "exists": True, 28 | "emailrecovery": None, 29 | "phoneNumber": None, 30 | "others": None}) 31 | else: 32 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 33 | "rateLimit": False, 34 | "exists": False, 35 | "emailrecovery": None, 36 | "phoneNumber": None, 37 | "others": None}) 38 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/social_media/plurk.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def plurk(email, client, out): 6 | name = "plurk" 7 | domain = "plurk.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.plurk.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = { 23 | 'email': email 24 | } 25 | 26 | response = await client.post('https://www.plurk.com/Users/isEmailFound', headers=headers, data=data) 27 | if response.text == "True": 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | elif response.text == "False": 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": True, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/social_media/twitter.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def twitter(email, client, out): 6 | name = "twitter" 7 | domain = "twitter.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | try: 12 | req = await client.get( 13 | "https://api.twitter.com/i/users/email_available.json", 14 | params={ 15 | "email": email}) 16 | if req.json()["taken"]: 17 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 18 | "rateLimit": False, 19 | "exists": True, 20 | "emailrecovery": None, 21 | "phoneNumber": None, 22 | "others": None}) 23 | else: 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": False, 26 | "exists": False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | except Exception: 31 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 32 | "rateLimit": True, 33 | "exists": False, 34 | "emailrecovery": None, 35 | "phoneNumber": None, 36 | "others": None}) 37 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/software/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/archive.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def archive(email, client, out): 6 | name = "archive" 7 | domain = "archive.org" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-Type': 'multipart/form-data; boundary=---------------------------', 16 | 'Origin': 'https://archive.org', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://archive.org/account/signup', 19 | 'Sec-GPC': '1', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | data = '-----------------------------\r\nContent-Disposition: form-data; name="input_name"\r\n\r\nusername\r\n-----------------------------\r\nContent-Disposition: form-data; name="input_value"\r\n\r\n' + email + \ 24 | '\r\n-----------------------------\r\nContent-Disposition: form-data; name="input_validator"\r\n\r\ntrue\r\n-----------------------------\r\nContent-Disposition: form-data; name="submit_by_js"\r\n\r\ntrue\r\n-------------------------------\r\n' 25 | 26 | response = await client.post('https://archive.org/account/signup', headers=headers, data=data) 27 | if "is already taken." in response.text: 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | else: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/docker.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | async def docker(email, client, out): 5 | name="docker" 6 | domain = "docker.com" 7 | method = "register" 8 | frequent_rate_limit=False 9 | 10 | headers = { 11 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 12 | 'Accept': 'application/json', 13 | 'Accept-Language': 'en,en-US;q=0.5', 14 | 'Referer': 'https://hub.docker.com/signup', 15 | 'Content-Type': 'application/json', 16 | 'X-CSRFToken': '', 17 | 'Origin': 'https://hub.docker.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = '{"email":"'+email+'","password":"","recaptcha_response":"","redirect_value":"","subscribe":true,"username":""}' 23 | 24 | response = await client.post('https://hub.docker.com/v2/users/signup/', headers=headers, data=data) 25 | if "This email is already in use." in response.text: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/firefox.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def firefox(email, client, out): 6 | name = "firefox" 7 | domain = "firefox.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | req = await client.post( 12 | "https://api.accounts.firefox.com/v1/account/status", 13 | data={ 14 | "email": email}) 15 | if "false" in req.text: 16 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 17 | "rateLimit": False, 18 | "exists": False, 19 | "emailrecovery": None, 20 | "phoneNumber": None, 21 | "others": None}) 22 | elif "true" in req.text: 23 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 24 | "rateLimit": False, 25 | "exists": True, 26 | "emailrecovery": None, 27 | "phoneNumber": None, 28 | "others": None}) 29 | else: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": True, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/issuu.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def issuu(email, client, out): 6 | name = "issuu" 7 | domain = "issuu.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://issuu.com/signup?returnUrl=https%3A%2F%2Fissuu.com%2F&issuu_product=header&issuu_subproduct=anon_home&issuu_context=signin&issuu_cta=log_up', 16 | 'Content-Type': 'application/json', 17 | 'Cache-Control': 'no-cache', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | response = await client.get( 24 | 'https://issuu.com/call/signup/check-email/' + 25 | email, 26 | headers=headers) 27 | try: 28 | if response.json()["status"] == "unavailable": 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | except Exception: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": True, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/software/lastpass.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def lastpass(email, client, out): 6 | name = "lastpass" 7 | domain = "lastpass.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://lastpass.com/', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'DNT': '1', 18 | 'Connection': 'keep-alive', 19 | 'TE': 'Trailers', 20 | } 21 | params = { 22 | 'check': 'avail', 23 | 'skipcontent': '1', 24 | 'mistype': '1', 25 | 'username': email, 26 | } 27 | 28 | response = await client.get( 29 | 'https://lastpass.com/create_account.php', 30 | params=params, 31 | headers=headers) 32 | if response.text == "no": 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": True, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | elif response.text == "ok" or response.text == "emailinvalid": 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": False, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | else: 47 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 48 | "rateLimit": True, 49 | "exists": False, 50 | "emailrecovery": None, 51 | "phoneNumber": None, 52 | "others": None}) 53 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/sport/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/sport/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/sport/bodybuilding.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def bodybuilding(email, client, out): 6 | name = "bodybuilding" 7 | domain = "bodybuilding.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json, text/plain, */*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Origin': 'https://www.bodybuilding.com', 16 | 'DNT': '1', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://www.bodybuilding.com/', 19 | } 20 | 21 | response = await client.head('https://api.bodybuilding.com/profile/email/' + email, headers=headers) 22 | if response.status_code == 200: 23 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 24 | "rateLimit": False, 25 | "exists": True, 26 | "emailrecovery": None, 27 | "phoneNumber": None, 28 | "others": None}) 29 | else: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | -------------------------------------------------------------------------------- /src/holehe/build/lib/holehe/modules/transport/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/build/lib/holehe/modules/transport/__init__.py -------------------------------------------------------------------------------- /src/holehe/build/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/dist/holehe-1.60.3-py3.10.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/dist/holehe-1.60.3-py3.10.egg -------------------------------------------------------------------------------- /src/holehe/dist/holehe-1.60.3-py3.9.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/dist/holehe-1.60.3-py3.9.egg -------------------------------------------------------------------------------- /src/holehe/holehe.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: holehe 3 | Version: 1.60.3 4 | Summary: holehe allows you to check if the mail is used on different sites like twitter, instagram , snapchat and will retrieve information on sites with the forgotten password function. 5 | Home-page: http://github.com/megadose/holehe 6 | Author: megadose 7 | Author-email: megadose@protonmail.com 8 | License: UNKNOWN 9 | Platform: UNKNOWN 10 | Classifier: Programming Language :: Python 11 | Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) 12 | License-File: LICENSE.md 13 | 14 | UNKNOWN 15 | 16 | -------------------------------------------------------------------------------- /src/holehe/holehe.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/holehe.egg-info/entry_points.txt: -------------------------------------------------------------------------------- 1 | [console_scripts] 2 | holehe = holehe.core:main 3 | 4 | -------------------------------------------------------------------------------- /src/holehe/holehe.egg-info/requires.txt: -------------------------------------------------------------------------------- 1 | argparse 2 | bs4 3 | colorama 4 | httpx 5 | termcolor 6 | tqdm 7 | trio 8 | -------------------------------------------------------------------------------- /src/holehe/holehe.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | holehe 2 | -------------------------------------------------------------------------------- /src/holehe/holehe/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/instruments.py: -------------------------------------------------------------------------------- 1 | import trio 2 | from tqdm import tqdm 3 | 4 | class TrioProgress(trio.abc.Instrument): 5 | def __init__(self, total): 6 | self.tqdm = tqdm(total=total) 7 | 8 | def task_exited(self, task): 9 | if task.name.split(".")[-1] == "launch_module": 10 | self.tqdm.update(1) -------------------------------------------------------------------------------- /src/holehe/holehe/modules/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/cms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/cms/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/cms/gravatar.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def gravatar(email, client, out): 6 | name = "gravatar" 7 | domain = "en.gravatar.com" 8 | method="other" 9 | frequent_rate_limit=False 10 | 11 | hashed_name = hashlib.md5(email.encode()).hexdigest() 12 | r = await client.get(f'https://en.gravatar.com/{hashed_name}.json') 13 | if r.status_code != 200: 14 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 15 | "rateLimit": False, 16 | "exists": False, 17 | "emailrecovery": None, 18 | "phoneNumber": None, 19 | "others": None}) 20 | return None 21 | else: 22 | try: 23 | data = r.json() 24 | FullName = data['entry'][0]['displayName'] 25 | 26 | others = { 27 | 'FullName': str(FullName)+" / "+str(data['entry'][0]["profileUrl"]), 28 | } 29 | 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": True, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": others}) 36 | return None 37 | except Exception: 38 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 39 | "rateLimit": True, 40 | "exists": False, 41 | "emailrecovery": None, 42 | "phoneNumber": None, 43 | "others": None}) 44 | return None 45 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/company/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/company/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/crm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/crm/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/crm/nimble.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def nimble(email, client, out): 6 | name = "nimble" 7 | domain = "nimble.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'Connection': 'keep-alive', 13 | 'Accept': 'application/json, text/javascript, */*; q=0.01', 14 | 'X-Requested-With': 'XMLHttpRequest', 15 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 16 | 'Sec-Fetch-Site': 'same-origin', 17 | 'Sec-Fetch-Mode': 'cors', 18 | 'Sec-Fetch-Dest': 'empty', 19 | 'Referer': 'https://www.nimble.com/', 20 | 'Accept-Language': 'en-US;q=0.8,en;q=0.7', 21 | } 22 | 23 | response = await client.get('https://www.nimble.com/lib/register.php?email='+email, headers=headers) 24 | 25 | if response.text=='"I thought you looked familiar! This email is already registered."': 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | elif response.text=="true": 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | else: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | return() 47 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/crm/teamleader.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def teamleader(email, client, out): 6 | name = "teamleader" 7 | domain = "teamleader.eu" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'authority': 'focus.teamleader.eu', 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'content-type': 'application/json', 15 | 'accept': '*/*', 16 | 'origin': 'https://signup.focus.teamleader.fr', 17 | 'sec-fetch-site': 'cross-site', 18 | 'sec-fetch-mode': 'cors', 19 | 'sec-fetch-dest': 'empty', 20 | 'referer': 'https://signup.focus.teamleader.fr/', 21 | 'accept-language': 'en-US;q=0.8,en;q=0.7', 22 | } 23 | 24 | data = '{"email":"'+email+'"}' 25 | 26 | response = await client.post('https://focus.teamleader.eu/app/emails/availability', headers=headers, data=data) 27 | if response.text=='{"available":false}': 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | elif response.text=='{"available":true}': 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": True, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | 49 | return() 50 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/crowfunding/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/crowfunding/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/forum/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/forum/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/jobs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/jobs/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/jobs/coroflot.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def coroflot(email, client, out): 6 | name = "coroflot" 7 | domain = "coroflot.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-Type': 'application/x-www-form-urlencoded', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.coroflot.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'Referer': 'https://www.coroflot.com/signup', 21 | 'TE': 'Trailers', 22 | } 23 | 24 | data = { 25 | 'email': email 26 | } 27 | try: 28 | response = await client.post('https://www.coroflot.com/home/signup_email_check',headers=headers,data=data) 29 | if response.json()["data"] == -2: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": True, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | else: 37 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 38 | "rateLimit": False, 39 | "exists": False, 40 | "emailrecovery": None, 41 | "phoneNumber": None, 42 | "others": None}) 43 | except Exception: 44 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 45 | "rateLimit": True, 46 | "exists": False, 47 | "emailrecovery": None, 48 | "phoneNumber": None, 49 | "others": None}) 50 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/learning/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/learning/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/mails/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/mails/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/mails/laposte.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def laposte(email, client, out): 6 | name = "laposte" 7 | domain = "laposte.fr" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'Origin': 'https://www.laposte.fr', 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 15 | 'Referer': 'https://www.laposte.fr/authentification', 16 | 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', 17 | } 18 | 19 | data = { 20 | 'email': email, 21 | 'customerId': '', 22 | 'tunnelSteps': '' 23 | } 24 | try: 25 | response = await client.post('https://www.laposte.fr/authentification', headers=headers, data=data) 26 | post_soup = BeautifulSoup(response.content, 'html.parser') 27 | l = post_soup.find_all('span', id="wrongEmail") 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": l != [], 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | except Exception: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": True, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medias/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/medias/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medias/flickr.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def flickr(email, client, out): 6 | name = "flickr" 7 | domain = "flickr.com" 8 | method= "login" 9 | frequent_rate_limit=False 10 | 11 | url = "https://identity-api.flickr.com/migration" 12 | headers = { 13 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 14 | 'Accept': '*/*', 15 | 'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3', 16 | 'Referer': 'https://identity.flickr.com/login', 17 | 'Origin': 'https://identity.flickr.com', 18 | 'Connection': 'keep-alive', 19 | 'TE': 'Trailers', 20 | } 21 | try: 22 | response = await client.get(url + "?email=" + str(email), headers=headers) 23 | except Exception: 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": True, 26 | "exists": False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | return None 31 | 32 | data = json.loads(response.text) 33 | if 'state_code' in str(data.keys()) and data['state_code'] == '5': 34 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 35 | "rateLimit": False, 36 | "exists": True, 37 | "emailrecovery": None, 38 | "phoneNumber": None, 39 | "others": None}) 40 | else: 41 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 42 | "rateLimit": False, 43 | "exists": False, 44 | "emailrecovery": None, 45 | "phoneNumber": None, 46 | "others": None}) 47 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medias/komoot.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def komoot(email, client, out): 6 | name = "komoot" 7 | domain = "komoot.com" 8 | method= "register" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/json', 16 | 'Origin': 'https://account.komoot.com', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://account.komoot.com/signin', 19 | } 20 | 21 | data = '{"email":"'+email+'"}' 22 | 23 | try: 24 | response = await client.post('https://account.komoot.com/v1/signin',headers=headers,data=data) 25 | if 'login' in response.json()['type']: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | except Exception: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medias/rambler.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def rambler(email, client, out): 6 | name = "rambler" 7 | domain = "rambler.ru" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://id.rambler.ru/champ/registration', 16 | 'Content-Type': 'application/json', 17 | 'Origin': 'https://id.rambler.ru', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = '{"method":"Rambler::Id::get_email_account_info","params":[{"email":"' + email + '"}],"rpc":"2.0"}' 23 | 24 | response = await client.post( 25 | 'https://id.rambler.ru/jsonrpc', 26 | headers=headers, 27 | data=data) 28 | try: 29 | if response.json()["result"]["exists"] == 0: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | else: 37 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 38 | "rateLimit": False, 39 | "exists": True, 40 | "emailrecovery": None, 41 | "phoneNumber": None, 42 | "others": None}) 43 | except Exception: 44 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 45 | "rateLimit": True, 46 | "exists": False, 47 | "emailrecovery": None, 48 | "phoneNumber": None, 49 | "others": None}) 50 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medias/sporcle.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def sporcle(email, client, out): 6 | name = "sporcle" 7 | domain = "sporcle.com" 8 | method= "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.sporcle.com', 18 | 'Connection': 'keep-alive', 19 | } 20 | 21 | data = { 22 | 'email': str(email), 23 | 'password1': '', 24 | 'password2': '', 25 | 'handle': '', 26 | 'humancheck': '', 27 | 'reg_path': 'main_header_join', 28 | 'ref_page': '', 29 | 'querystring': '' 30 | } 31 | 32 | response = await client.post('https://www.sporcle.com/auth/ajax/verify.php', headers=headers, data=data) 33 | if "account already exists with this email" in response.text: 34 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 35 | "rateLimit": False, 36 | "exists": True, 37 | "emailrecovery": None, 38 | "phoneNumber": None, 39 | "others": None}) 40 | else: 41 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 42 | "rateLimit": False, 43 | "exists": False, 44 | "emailrecovery": None, 45 | "phoneNumber": None, 46 | "others": None}) 47 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/medical/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/medical/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/music/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/music/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/music/soundcloud.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | async def soundcloud(email, client, out): 5 | name = "soundcloud" 6 | domain = "soundcloud.com" 7 | method= "register" 8 | frequent_rate_limit=False 9 | 10 | 11 | headers = { 12 | 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 13 | 'User-Agent': random.choice(ua["browsers"]["iOS"]) 14 | } 15 | 16 | getAuth = await client.get('https://soundcloud.com/octobersveryown', headers=headers) 17 | script = BeautifulSoup(getAuth.text, 'html.parser').find_all('script')[4] 18 | clientId = json.loads(script.contents[0])["runtimeConfig"]["clientId"] 19 | 20 | linkMail = email.replace('@','%40') 21 | API = await client.get(f'https://api-auth.soundcloud.com/web-auth/identifier?q={linkMail}&client_id={clientId}', headers=headers) 22 | Json = json.loads(API.text) 23 | if Json['status'] == 'available' or 'in_use': 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": False, 26 | "exists": True if Json['status'] == 'in_use' else False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | else: 31 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 32 | "rateLimit": True, 33 | "exists": False, 34 | "emailrecovery": None, 35 | "phoneNumber": None, 36 | "others": None}) 37 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/osint/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/osint/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/payment/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/payment/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/porn/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/porn/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/productivity/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/productivity/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/productivity/anydo.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def anydo(email, client, out): 6 | name = "anydo" 7 | domain = "any.do" 8 | method= "login" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://desktop.any.do/', 16 | 'Content-Type': 'application/json; charset=UTF-8', 17 | 'X-Platform': '3', 18 | 'Origin': 'https://desktop.any.do', 19 | 'DNT': '1', 20 | 'Connection': 'keep-alive', 21 | 'TE': 'Trailers', 22 | } 23 | 24 | data = '{"email":"' + email + '"}' 25 | 26 | response = await client.post('https://sm-prod2.any.do/check_email', headers=headers, data=data) 27 | if response.status_code == 200: 28 | if response.json()["user_exists"]: 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | else: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": True, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/products/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/products/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/programing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/programing/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/programing/replit.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def replit(email, client, out): 6 | name = "replit" 7 | domain = "replit.com" 8 | method = "register" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'content-type': 'application/json', 16 | 'x-requested-with': 'XMLHttpRequest', 17 | 'Origin': 'https://replit.com', 18 | 'Connection': 'keep-alive', 19 | } 20 | 21 | data = '{"email":"' + str(email) + '"}' 22 | 23 | response = await client.post('https://replit.com/data/user/exists', headers=headers, data=data) 24 | try: 25 | if response.json()['exists']: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | except Exception: 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": True, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/real_estate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/real_estate/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/shopping/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/shopping/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/shopping/armurerieauxerre.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def armurerieauxerre(email, client, out): 6 | name = "armurerieauxerre" 7 | domain = "armurerie-auxerre.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.armurerie-auxerre.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | data = { 24 | 'mail': email 25 | } 26 | 27 | req = await client.post('https://www.armurerie-auxerre.com/customer/Email/email/', headers=headers, data=data) 28 | if req.text == "exist": 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/shopping/dominosfr.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def dominosfr(email, client, out): 6 | name = "dominosfr" 7 | domain = "dominos.fr" 8 | method = "register" 9 | frequent_rate_limit=True 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': 'text/html, */*; q=0.01', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'X-Requested-With': 'XMLHttpRequest', 16 | 'DNT': '1', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://commande.dominos.fr/eStore/fr/Signup', 19 | } 20 | 21 | await client.get("https://commande.dominos.fr/eStore/fr/Signup", headers=headers) 22 | headers['X-Requested-With'] = 'XMLHttpRequest' 23 | 24 | data = {"email": email} 25 | 26 | req = await client.get('https://commande.dominos.fr/eStore/fr/Signup/IsEmailAvailable', headers=headers, params=data) 27 | if req.status_code == 200: 28 | if req.text == "false": 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | else: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": True, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/shopping/envato.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def envato(email, client, out): 6 | name = "envato" 7 | domain = "envato.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-type': 'application/x-www-form-urlencoded', 16 | 'DNT': '1', 17 | 'Connection': 'keep-alive', 18 | 'TE': 'Trailers', 19 | } 20 | 21 | data = { 22 | 'email': email 23 | } 24 | req = await client.post( 25 | 'https://account.envato.com/api/validate_email', 26 | headers=headers, 27 | data=data) 28 | if 'Email is already in use' in req.text: 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | elif "Page designed by Kotulsky" in req.text: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": True, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | else: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": False, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/social_media/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/social_media/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/social_media/fanpop.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def fanpop(email, client, out): 6 | name = "fanpop" 7 | domain = "fanpop.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'text/html, */*; q=0.01', 14 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 15 | 'X-Requested-With': 'XMLHttpRequest', 16 | 'Origin': 'https://www.fanpop.com', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://www.fanpop.com/register', 19 | } 20 | 21 | data = { 22 | 'type': 'register', 23 | 'user[name]': '', 24 | 'user[password]': '', 25 | 'user[email]': email, 26 | 'agreement': '', 27 | 'PersistentCookie': 'PersistentCookie', 28 | 'redirect_url': 'https://www.fanpop.com/', 29 | 'submissiontype': 'register' 30 | } 31 | 32 | response = await client.post('https://www.fanpop.com/login/superlogin', headers=headers, data=data) 33 | 34 | if "already registered" in response.text: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": True, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": False, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/social_media/pinterest.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def pinterest(email, client, out): 6 | name = "pinterest" 7 | domain = "pinterest.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | req = await client.get( 12 | "https://www.pinterest.com/_ngjs/resource/EmailExistsResource/get/", 13 | params={ 14 | "source_url": "/", 15 | "data": '{"options": {"email": "' + email + '"}, "context": {}}'}) 16 | if 'source_field' in str(req.json()["resource_response"]["data"]) : 17 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 18 | "rateLimit": True, 19 | "exists": False, 20 | "emailrecovery": None, 21 | "phoneNumber": None, 22 | "others": None}) 23 | 24 | elif req.json()["resource_response"]["data"]: 25 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 26 | "rateLimit": False, 27 | "exists": True, 28 | "emailrecovery": None, 29 | "phoneNumber": None, 30 | "others": None}) 31 | else: 32 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 33 | "rateLimit": False, 34 | "exists": False, 35 | "emailrecovery": None, 36 | "phoneNumber": None, 37 | "others": None}) 38 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/social_media/plurk.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def plurk(email, client, out): 6 | name = "plurk" 7 | domain = "plurk.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 15 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'Origin': 'https://www.plurk.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = { 23 | 'email': email 24 | } 25 | 26 | response = await client.post('https://www.plurk.com/Users/isEmailFound', headers=headers, data=data) 27 | if response.text == "True": 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | elif response.text == "False": 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | else: 42 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 43 | "rateLimit": True, 44 | "exists": False, 45 | "emailrecovery": None, 46 | "phoneNumber": None, 47 | "others": None}) 48 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/social_media/twitter.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def twitter(email, client, out): 6 | name = "twitter" 7 | domain = "twitter.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | try: 12 | req = await client.get( 13 | "https://api.twitter.com/i/users/email_available.json", 14 | params={ 15 | "email": email}) 16 | if req.json()["taken"]: 17 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 18 | "rateLimit": False, 19 | "exists": True, 20 | "emailrecovery": None, 21 | "phoneNumber": None, 22 | "others": None}) 23 | else: 24 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 25 | "rateLimit": False, 26 | "exists": False, 27 | "emailrecovery": None, 28 | "phoneNumber": None, 29 | "others": None}) 30 | except Exception: 31 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 32 | "rateLimit": True, 33 | "exists": False, 34 | "emailrecovery": None, 35 | "phoneNumber": None, 36 | "others": None}) 37 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/software/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/archive.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def archive(email, client, out): 6 | name = "archive" 7 | domain = "archive.org" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Content-Type': 'multipart/form-data; boundary=---------------------------', 16 | 'Origin': 'https://archive.org', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://archive.org/account/signup', 19 | 'Sec-GPC': '1', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | data = '-----------------------------\r\nContent-Disposition: form-data; name="input_name"\r\n\r\nusername\r\n-----------------------------\r\nContent-Disposition: form-data; name="input_value"\r\n\r\n' + email + \ 24 | '\r\n-----------------------------\r\nContent-Disposition: form-data; name="input_validator"\r\n\r\ntrue\r\n-----------------------------\r\nContent-Disposition: form-data; name="submit_by_js"\r\n\r\ntrue\r\n-------------------------------\r\n' 25 | 26 | response = await client.post('https://archive.org/account/signup', headers=headers, data=data) 27 | if "is already taken." in response.text: 28 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 29 | "rateLimit": False, 30 | "exists": True, 31 | "emailrecovery": None, 32 | "phoneNumber": None, 33 | "others": None}) 34 | else: 35 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 36 | "rateLimit": False, 37 | "exists": False, 38 | "emailrecovery": None, 39 | "phoneNumber": None, 40 | "others": None}) 41 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/docker.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | async def docker(email, client, out): 5 | name="docker" 6 | domain = "docker.com" 7 | method = "register" 8 | frequent_rate_limit=False 9 | 10 | headers = { 11 | 'User-Agent': random.choice(ua["browsers"]["chrome"]), 12 | 'Accept': 'application/json', 13 | 'Accept-Language': 'en,en-US;q=0.5', 14 | 'Referer': 'https://hub.docker.com/signup', 15 | 'Content-Type': 'application/json', 16 | 'X-CSRFToken': '', 17 | 'Origin': 'https://hub.docker.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | 22 | data = '{"email":"'+email+'","password":"","recaptcha_response":"","redirect_value":"","subscribe":true,"username":""}' 23 | 24 | response = await client.post('https://hub.docker.com/v2/users/signup/', headers=headers, data=data) 25 | if "This email is already in use." in response.text: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": True, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | else: 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": False, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/firefox.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def firefox(email, client, out): 6 | name = "firefox" 7 | domain = "firefox.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | req = await client.post( 12 | "https://api.accounts.firefox.com/v1/account/status", 13 | data={ 14 | "email": email}) 15 | if "false" in req.text: 16 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 17 | "rateLimit": False, 18 | "exists": False, 19 | "emailrecovery": None, 20 | "phoneNumber": None, 21 | "others": None}) 22 | elif "true" in req.text: 23 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 24 | "rateLimit": False, 25 | "exists": True, 26 | "emailrecovery": None, 27 | "phoneNumber": None, 28 | "others": None}) 29 | else: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": True, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/issuu.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def issuu(email, client, out): 6 | name = "issuu" 7 | domain = "issuu.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://issuu.com/signup?returnUrl=https%3A%2F%2Fissuu.com%2F&issuu_product=header&issuu_subproduct=anon_home&issuu_context=signin&issuu_cta=log_up', 16 | 'Content-Type': 'application/json', 17 | 'Cache-Control': 'no-cache', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | response = await client.get( 24 | 'https://issuu.com/call/signup/check-email/' + 25 | email, 26 | headers=headers) 27 | try: 28 | if response.json()["status"] == "unavailable": 29 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 30 | "rateLimit": False, 31 | "exists": True, 32 | "emailrecovery": None, 33 | "phoneNumber": None, 34 | "others": None}) 35 | else: 36 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 37 | "rateLimit": False, 38 | "exists": False, 39 | "emailrecovery": None, 40 | "phoneNumber": None, 41 | "others": None}) 42 | except Exception: 43 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 44 | "rateLimit": True, 45 | "exists": False, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/software/lastpass.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def lastpass(email, client, out): 6 | name = "lastpass" 7 | domain = "lastpass.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': '*/*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Referer': 'https://lastpass.com/', 16 | 'X-Requested-With': 'XMLHttpRequest', 17 | 'DNT': '1', 18 | 'Connection': 'keep-alive', 19 | 'TE': 'Trailers', 20 | } 21 | params = { 22 | 'check': 'avail', 23 | 'skipcontent': '1', 24 | 'mistype': '1', 25 | 'username': email, 26 | } 27 | 28 | response = await client.get( 29 | 'https://lastpass.com/create_account.php', 30 | params=params, 31 | headers=headers) 32 | if response.text == "no": 33 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 34 | "rateLimit": False, 35 | "exists": True, 36 | "emailrecovery": None, 37 | "phoneNumber": None, 38 | "others": None}) 39 | elif response.text == "ok" or response.text == "emailinvalid": 40 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 41 | "rateLimit": False, 42 | "exists": False, 43 | "emailrecovery": None, 44 | "phoneNumber": None, 45 | "others": None}) 46 | else: 47 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 48 | "rateLimit": True, 49 | "exists": False, 50 | "emailrecovery": None, 51 | "phoneNumber": None, 52 | "others": None}) 53 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/sport/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/sport/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/modules/sport/bodybuilding.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def bodybuilding(email, client, out): 6 | name = "bodybuilding" 7 | domain = "bodybuilding.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | headers = { 12 | 'User-Agent': random.choice(ua["browsers"]["firefox"]), 13 | 'Accept': 'application/json, text/plain, */*', 14 | 'Accept-Language': 'en,en-US;q=0.5', 15 | 'Origin': 'https://www.bodybuilding.com', 16 | 'DNT': '1', 17 | 'Connection': 'keep-alive', 18 | 'Referer': 'https://www.bodybuilding.com/', 19 | } 20 | 21 | response = await client.head('https://api.bodybuilding.com/profile/email/' + email, headers=headers) 22 | if response.status_code == 200: 23 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 24 | "rateLimit": False, 25 | "exists": True, 26 | "emailrecovery": None, 27 | "phoneNumber": None, 28 | "others": None}) 29 | else: 30 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 31 | "rateLimit": False, 32 | "exists": False, 33 | "emailrecovery": None, 34 | "phoneNumber": None, 35 | "others": None}) 36 | -------------------------------------------------------------------------------- /src/holehe/holehe/modules/transport/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/holehe/holehe/modules/transport/__init__.py -------------------------------------------------------------------------------- /src/holehe/holehe/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/holehe/setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from setuptools import setup, find_packages 3 | 4 | 5 | setup( 6 | name='holehe', 7 | version="1.60.3", 8 | packages=find_packages(), 9 | author="megadose", 10 | author_email="megadose@protonmail.com", 11 | install_requires=["termcolor","bs4","httpx","trio","argparse","tqdm","colorama"], 12 | description="holehe allows you to check if the mail is used on different sites like twitter, instagram , snapchat and will retrieve information on sites with the forgotten password function.", 13 | include_package_data=True, 14 | url='http://github.com/megadose/holehe', 15 | entry_points = {'console_scripts': ['holehe = holehe.core:main']}, 16 | classifiers=[ 17 | "Programming Language :: Python", 18 | "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", 19 | ], 20 | ) 21 | -------------------------------------------------------------------------------- /src/infoga/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:alpine 2 | 3 | ENV APP_HOME /usr/src/app 4 | 5 | WORKDIR $APP_HOME 6 | ADD . $APP_HOME 7 | 8 | RUN python setup.py install 9 | RUN chmod +x infoga.py 10 | 11 | ENTRYPOINT ["python","infoga.py"] 12 | -------------------------------------------------------------------------------- /src/infoga/dist/infoga-0.1.5-py2.7.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/dist/infoga-0.1.5-py2.7.egg -------------------------------------------------------------------------------- /src/infoga/dist/infoga-0.1.5-py3.10.egg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/dist/infoga-0.1.5-py3.10.egg -------------------------------------------------------------------------------- /src/infoga/infoga.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: infoga 3 | Version: 0.1.5 4 | Summary: Email OSINT 5 | Home-page: https://github.com/m4ll0k 6 | Author: Momo (m4ll0k) Outaadi 7 | Author-email: m4ll0k@protonmail.com 8 | License: GPLv3 9 | Platform: UNKNOWN 10 | License-File: LICENSE 11 | 12 | UNKNOWN 13 | 14 | -------------------------------------------------------------------------------- /src/infoga/infoga.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | LICENSE 2 | README.md 3 | setup.py 4 | infoga.egg-info/PKG-INFO 5 | infoga.egg-info/SOURCES.txt 6 | infoga.egg-info/dependency_links.txt 7 | infoga.egg-info/requires.txt 8 | infoga.egg-info/top_level.txt -------------------------------------------------------------------------------- /src/infoga/infoga.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/infoga/infoga.egg-info/requires.txt: -------------------------------------------------------------------------------- 1 | colorama 2 | requests 3 | urllib3 4 | -------------------------------------------------------------------------------- /src/infoga/infoga.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/infoga/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__init__.py -------------------------------------------------------------------------------- /src/infoga/lib/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__init__.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/banner.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/banner.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/banner.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/banner.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/check.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/check.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/check.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/check.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/colors.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/colors.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/colors.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/colors.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/output.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/output.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/output.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/output.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/parser.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/parser.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/parser.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/parser.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/request.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/request.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/lib/__pycache__/request.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/__pycache__/request.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/lib/banner.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.colors import * 9 | 10 | class Banner: 11 | def banner(self): 12 | print("") 13 | 14 | def usage(self,_exit_=False): 15 | self.banner() 16 | print("Usage: infoga.py [OPTIONS]\n") 17 | print("\t-d --domain\tTarget URL/Name") 18 | print("\t-s --source\tSource data, default \"all\":\n") 19 | print("\t\tall\tUse all search engine") 20 | print("\t\tgoogle\tUse google search engine") 21 | print("\t\tbing\tUse bing search engine") 22 | print("\t\tyahoo\tUse yahoo search engine") 23 | print("\t\task\tUse ask search engine") 24 | print("\t\tbaidu\tUse baidu search engine") 25 | print("\t\tdogpile\tUse dogpile search engine") 26 | print("\t\texalead\tUse exalead search engine") 27 | print("\t\tpgp\tUse pgp search engine\n") 28 | print("\t-b --breach\tCheck if email breached") 29 | print("\t-i --info\tGet email informations") 30 | print("\t-r --report\tSimple file text report") 31 | print("\t-v --verbose\tVerbosity level (1,2 or 3)") 32 | print("\t-H --help\tShow this help and exit\n") 33 | print("Example:") 34 | print("\tinfoga.py --domain site.gov -v 3") 35 | print("\tinfoga.py --info admin@site.gov -v 3") 36 | print("\tinfoga.py --domain site.gov --source pgp --breach -v 1") 37 | print("\tinfoga.py --domain site.gov --source google --breach --report site_gov.txt -v 3\n") 38 | if _exit_: exit(0) 39 | -------------------------------------------------------------------------------- /src/infoga/lib/check.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | try: 10 | from urllib.parse import urlparse 11 | except ImportError as e: 12 | from urlparse import urlparse 13 | 14 | def checkTarget(target): 15 | o = urlparse(target) 16 | if o.netloc == "": 17 | if "www." in o.path: return o.path.split('www.')[1] 18 | return o.path 19 | elif o.netloc != "": 20 | if "www." in o.netloc: return o.netloc.split("www.")[1] 21 | return o.netloc 22 | else: return target 23 | 24 | def checkEmail(email): 25 | if '@' not in email: 26 | exit(warn('Invalid email %s'%email)) 27 | return email 28 | 29 | def checkSource(source): 30 | list_source = ['all','ask','baidu','google','bing', 31 | 'dogpile','exalead','jigsaw','pgp','yahoo' 32 | ] 33 | if source not in list_source: 34 | exit(warn('Invalid search engine: %s'%source)) 35 | return source 36 | 37 | def checkVerbose(ver): 38 | verb = int(ver) 39 | if verb == 0: return 1 40 | elif verb == 1: return 1 41 | elif verb == 2: return 2 42 | else: return 3 -------------------------------------------------------------------------------- /src/infoga/lib/check.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/check.pyc -------------------------------------------------------------------------------- /src/infoga/lib/colors.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | import sys 9 | import colorama 10 | 11 | 12 | if sys.platform == 'win32': 13 | colorama.init() 14 | 15 | R = "\033[%s;31m" 16 | B = "\033[%s;34m" 17 | G = "\033[%s;32m" 18 | W = "\033[%s;38m" 19 | Y = "\033[%s;33m" 20 | E = "\033[0m" -------------------------------------------------------------------------------- /src/infoga/lib/colors.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/colors.pyc -------------------------------------------------------------------------------- /src/infoga/lib/output.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/output.pyc -------------------------------------------------------------------------------- /src/infoga/lib/parser.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | import re 9 | 10 | class parser: 11 | def __init__(self,content,target): 12 | self.target = target 13 | self.content = str(content) 14 | 15 | def email(self): 16 | tmp_email = re.findall(r'[a-zA-Z0-9.\-_+#~!$&\',;=:]+' 17 | +'@'+r'[a-zA-Z0-9.-]*'+self.target,self.clean) 18 | email_list = [] 19 | for _ in tmp_email: 20 | if _ not in email_list and _.split('@')[0] not in ('"',"'"): 21 | email_list.append(_) 22 | return email_list 23 | 24 | @property 25 | def clean(self): 26 | self.content = re.sub('','',self.content) 27 | self.content = re.sub('','',self.content) 28 | self.content = re.sub('','',self.content) 29 | self.content = re.sub('','',self.content) 30 | self.content = re.sub('','',self.content) 31 | self.content = re.sub('','',self.content) 32 | self.content = re.sub('','',self.content) 33 | self.content = re.sub('','',self.content) 34 | for x in ('>', ':', '=', '<', '/', '\\', ';', '&', '%3A', '%3D', '%3C'): 35 | self.content = self.content.replace(x,' ') 36 | return self.content 37 | -------------------------------------------------------------------------------- /src/infoga/lib/request.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | import urllib3 9 | import requests 10 | from lib.output import * 11 | 12 | class Request(object): 13 | agent = '' 14 | def send(self,method,url,params=None,data=None,headers=None): 15 | if headers is None: headers={} 16 | headers['User-Agent'] = Request.agent 17 | try: 18 | session = requests.Session() 19 | req = urllib3.disable_warnings( 20 | urllib3.exceptions.InsecureRequestWarning 21 | ) 22 | req = requests.request( 23 | method = method.upper(), 24 | url = url, 25 | params = params, 26 | data = data, 27 | allow_redirects = True, 28 | verify = False ) 29 | return req 30 | except Exception as e: 31 | exit(warn('Failed to establish a new connection')) -------------------------------------------------------------------------------- /src/infoga/lib/request.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/lib/request.pyc -------------------------------------------------------------------------------- /src/infoga/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/infoga/recon/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__init__.py -------------------------------------------------------------------------------- /src/infoga/recon/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__init__.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/ask.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/ask.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/ask.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/ask.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/baidu.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/baidu.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/baidu.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/baidu.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/bing.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/bing.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/bing.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/bing.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/dogpile.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/dogpile.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/dogpile.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/dogpile.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/exalead.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/exalead.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/exalead.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/exalead.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/google.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/google.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/google.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/google.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/mailtester.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/mailtester.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/mailtester.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/mailtester.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/pgp.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/pgp.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/pgp.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/pgp.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/pwned.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/pwned.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/pwned.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/pwned.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/shodan.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/shodan.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/shodan.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/shodan.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/yahoo.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/yahoo.cpython-310.pyc -------------------------------------------------------------------------------- /src/infoga/recon/__pycache__/yahoo.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/__pycache__/yahoo.cpython-39.pyc -------------------------------------------------------------------------------- /src/infoga/recon/ask.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Ask(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Ask...'%(self.target)) 19 | url = "http://www.ask.com/web?q=%40{target}&pu=100&page=0".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url 25 | ) 26 | return self.getemail(resp.content,self.target) 27 | except Exception as e: 28 | print(e) 29 | 30 | def getemail(self,content,target): 31 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/baidu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Baidu(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Baidu...'%(self.target)) 19 | url = "http://www.baidu.com/s?wd=%40{target}&pn=0".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Host':'www.baidu.com' 27 | } 28 | ) 29 | return self.getemail(resp.content,self.target) 30 | except Exception as e: 31 | pass 32 | 33 | def getemail(self,content,target): 34 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/bing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Bing(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Bing...'%(self.target)) 19 | url = "http://bing.com/search?q=%40{target}".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Cookie':'SRCHHPGUSR=ADLT=DEMOTE&NRSLT=100' 27 | } 28 | ) 29 | return self.getemail(resp.content,self.target) 30 | except Exception as e: 31 | pass 32 | 33 | def getemail(self,content,target): 34 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/dogpile.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Dogpile(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in DogPile...'%(self.target)) 19 | url = "http://www.dogpile.com/search/web?qsi=0&q=%40{target}".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Host':'www.dogpile.com' 27 | } 28 | ) 29 | return self.getemail(resp.content,self.target) 30 | except Exception as e: 31 | pass 32 | 33 | def getemail(self,content,target): 34 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/exalead.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Exalead(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Exalead...'%(self.target)) 19 | url = "http://www.exalead.com/search/web/results/?q=%40{target}&elements_per_page=50&start_index=0".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Host':'www.exalead.com', 27 | 'Referer':'http://exalead.com/search/web/results/?q=%40{target}'.format( 28 | target=self.target) 29 | } 30 | ) 31 | return self.getemail(resp.content,self.target) 32 | except Exception as e: 33 | pass 34 | 35 | def getemail(self,content,target): 36 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/google.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Google(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Google...'%(self.target)) 19 | base_url = 'https://www.google.com/search?q=intext:%22%40{target}%22&num=50'.format( 20 | target=self.target) 21 | mails = [] 22 | # First 350 results (page 0 to 6) 23 | for page in range(0, 7): 24 | url = base_url + "&start=" + str(page) 25 | try: 26 | resp = self.send( 27 | method = 'GET', 28 | url = url 29 | ) 30 | if "detected unusual traffic" in resp.text: 31 | break 32 | for email in self.getemail(resp.content,self.target): 33 | if email not in mails: 34 | mails.append(email) 35 | except: 36 | pass 37 | return mails 38 | 39 | def getemail(self,content,target): 40 | return parser(content,target).email() 41 | -------------------------------------------------------------------------------- /src/infoga/recon/mailtester.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class MailTester(Request): 13 | def __init__(self,email): 14 | Request.__init__(self) 15 | self.email = email 16 | 17 | def search(self): 18 | post_data = {'lang':'en'} 19 | post_data['email'] = self.email 20 | url = "http://mailtester.com/testmail.php" 21 | try: 22 | resp = self.send( 23 | method = 'POST', 24 | url = url, 25 | data = post_data 26 | ) 27 | return self.getip(resp.content) 28 | except Exception as e: 29 | print(e) 30 | 31 | def getip(self,content): 32 | tmp_ip = re.findall(r'[0-9]+(?:\.[0-9]+){3}',str(content),re.I) 33 | list_ip = [] 34 | for ip in tmp_ip: 35 | if ip not in list_ip: 36 | list_ip.append(ip) 37 | return list_ip -------------------------------------------------------------------------------- /src/infoga/recon/pgp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class PGP(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in PGP...'%(self.target)) 19 | url = "http://pgp.mit.edu/pks/lookup?search={target}&op=index".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Host':'pgp.mit.edu' 27 | } 28 | ) 29 | return self.getemail(resp.content,self.target) 30 | except Exception as e: 31 | pass 32 | 33 | def getemail(self,content,target): 34 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/recon/pwned.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from json import loads 9 | from lib.output import * 10 | from lib.request import * 11 | from lib.parser import * 12 | 13 | class Pwned(Request): 14 | def __init__(self,email): 15 | Request.__init__(self) 16 | self.email = email 17 | 18 | def search(self): 19 | url = "https://api.haveibeenpwned.com/unifiedsearch/{email}".format( 20 | email=self.email.replace('@','%40')) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url 25 | ) 26 | if resp.status_code == 200: 27 | return loads(resp.content) 28 | return None 29 | except Exception as e: 30 | pass -------------------------------------------------------------------------------- /src/infoga/recon/pwned.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/recon/pwned.pyc -------------------------------------------------------------------------------- /src/infoga/recon/shodan.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Shodan(Request): 13 | def __init__(self,ip): 14 | Request.__init__(self) 15 | self.ip = ip 16 | 17 | def search(self): 18 | url = "https://api.shodan.io/shodan/host/{target}?key=UNmOjxeFS2mPA3kmzm1sZwC0XjaTTksy".format( 19 | target=self.ip) 20 | try: 21 | resp = self.send( 22 | method = 'GET', 23 | url = url 24 | ) 25 | if resp.status_code != 200: return b'{}' 26 | return resp.content 27 | except Exception as e: 28 | pass 29 | -------------------------------------------------------------------------------- /src/infoga/recon/yahoo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email Information Gathering 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from lib.output import * 9 | from lib.request import * 10 | from lib.parser import * 11 | 12 | class Yahoo(Request): 13 | def __init__(self,target): 14 | Request.__init__(self) 15 | self.target = target 16 | 17 | def search(self): 18 | test('Searching "%s" in Yahoo...'%(self.target)) 19 | url = "http://search.yahoo.com/search?p=%40{target}&b=0&pz=10".format( 20 | target=self.target) 21 | try: 22 | resp = self.send( 23 | method = 'GET', 24 | url = url, 25 | headers = { 26 | 'Host':'search.yahoo.com' 27 | } 28 | ) 29 | return self.getemail(resp.content,self.target) 30 | except Exception as e: 31 | pass 32 | 33 | def getemail(self,content,target): 34 | return parser(content,target).email() -------------------------------------------------------------------------------- /src/infoga/requirements.txt: -------------------------------------------------------------------------------- 1 | colorama 2 | requests 3 | urllib3 4 | -------------------------------------------------------------------------------- /src/infoga/result.txt: -------------------------------------------------------------------------------- 1 | [+] Email: ncdsmo@nsa.gov () 2 | >> This email wasn't leaked 3 | ------------------------------ 4 | [+] Email: enc@nsa.gov () 5 | >> This email wasn't leaked 6 | ------------------------------ 7 | [+] Email: informacje@nsa.gov () 8 | >> This email wasn't leaked 9 | ------------------------------ 10 | [+] Email: Cybersecurity_Requests@nsa.gov () 11 | >> This email wasn't leaked 12 | ------------------------------ 13 | [+] Email: MediaRelations@nsa.gov () 14 | >> This email wasn't leaked 15 | ------------------------------ 16 | [+] Email: DIB_Defense@cyber.nsa.gov () 17 | >> This email wasn't leaked 18 | ------------------------------ 19 | [+] Email: cnss@nsa.gov () 20 | >> This email wasn't leaked 21 | ------------------------------ 22 | -------------------------------------------------------------------------------- /src/infoga/screen/image_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/screen/image_5.png -------------------------------------------------------------------------------- /src/infoga/screen/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/screen/main.png -------------------------------------------------------------------------------- /src/infoga/screen/run_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/infoga/screen/run_2.png -------------------------------------------------------------------------------- /src/infoga/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8 -*- 3 | # 4 | # @name : Infoga - Email OSINT 5 | # @url : http://github.com/m4ll0k 6 | # @author : Momo Outaadi (m4ll0k) 7 | 8 | from setuptools import setup 9 | 10 | setup( 11 | name='infoga', 12 | 13 | version='0.1.5', 14 | description='Email OSINT', 15 | url='https://github.com/m4ll0k', 16 | 17 | author = 'Momo (m4ll0k) Outaadi', 18 | author_email='m4ll0k@protonmail.com', 19 | license='GPLv3', 20 | 21 | install_requires = ['colorama','requests','urllib3'], 22 | console =['infoga.py'], 23 | ) -------------------------------------------------------------------------------- /src/maigret/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | Hey! I'm really glad you're reading this. Maigret contains a lot of sites, and it is very hard to keep all the sites operational. That's why any fix is important. 4 | 5 | ## How to add a new site 6 | 7 | #### Beginner level 8 | 9 | You can use Maigret **submit mode** (`maigret --submit URL`) to add a new site or update an existing site. In this mode Maigret do an automatic analysis of the given account URL or site main page URL to determine the site engine and methods to check account presence. After checking Maigret asks if you want to add the site, answering y/Y will rewrite the local database. 10 | 11 | #### Advanced level 12 | 13 | You can edit [the database JSON file](https://github.com/soxoj/maigret/blob/main/maigret/resources/data.json) (`./maigret/resources/data.json`) manually. 14 | 15 | ## Testing 16 | 17 | There are CI checks for every PR to the Maigret repository. But it will be better to run `make format`, `make link` and `make test` to ensure you've made a corrent changes. 18 | 19 | ## Submitting changes 20 | 21 | To submit you changes you must [send a GitHub PR](https://github.com/soxoj/maigret/pulls) to the Maigret project. 22 | Always write a clear log message for your commits. One-line messages are fine for small changes, but bigger changes should look like this: 23 | 24 | $ git commit -m "A brief summary of the commit 25 | > 26 | > A paragraph describing what changed and its impact." 27 | 28 | ## Coding conventions 29 | 30 | Start reading the code and you'll get the hang of it. ;) 31 | -------------------------------------------------------------------------------- /src/maigret/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9-slim 2 | MAINTAINER Soxoj 3 | WORKDIR /app 4 | RUN pip install --upgrade pip 5 | RUN apt update && \ 6 | apt install -y \ 7 | gcc \ 8 | musl-dev \ 9 | libxml2 \ 10 | libxml2-dev \ 11 | libxslt-dev 12 | RUN apt clean \ 13 | && rm -rf /var/lib/apt/lists/* /tmp/* 14 | ADD . . 15 | RUN YARL_NO_EXTENSIONS=1 python3 -m pip install . 16 | ENTRYPOINT ["maigret"] 17 | -------------------------------------------------------------------------------- /src/maigret/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Sherlock Project 4 | Copyright (c) 2020-2021 Soxoj 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/maigret/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include README.md 3 | include requirements.txt 4 | include maigret/resources/* 5 | -------------------------------------------------------------------------------- /src/maigret/Makefile: -------------------------------------------------------------------------------- 1 | LINT_FILES=maigret wizard.py tests 2 | 3 | test: 4 | coverage run --source=./maigret -m pytest tests 5 | coverage report -m 6 | coverage html 7 | 8 | rerun-tests: 9 | pytest --lf -vv 10 | 11 | lint: 12 | @echo 'syntax errors or undefined names' 13 | flake8 --count --select=E9,F63,F7,F82 --show-source --statistics ${LINT_FILES} maigret.py 14 | 15 | @echo 'warning' 16 | flake8 --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --ignore=E731,W503,E501 ${LINT_FILES} maigret.py 17 | 18 | @echo 'mypy' 19 | mypy ${LINT_FILES} 20 | 21 | speed: 22 | time python3 ./maigret.py --version 23 | python3 -c "import timeit; t = timeit.Timer('import maigret'); print(t.timeit(number = 1000000))" 24 | python3 -X importtime -c "import maigret" 2> maigret-import.log 25 | python3 -m tuna maigret-import.log 26 | 27 | format: 28 | @echo 'black' 29 | black --skip-string-normalization ${LINT_FILES} 30 | 31 | pull: 32 | git stash 33 | git checkout main 34 | git pull origin main 35 | git stash pop 36 | 37 | clean: 38 | rm -rf reports htmcov dist 39 | 40 | install: 41 | pip3 install . 42 | -------------------------------------------------------------------------------- /src/maigret/bin/maigret: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import asyncio 3 | import sys 4 | 5 | from maigret.maigret import main 6 | 7 | 8 | def run(): 9 | try: 10 | loop = asyncio.get_event_loop() 11 | loop.run_until_complete(main()) 12 | except KeyboardInterrupt: 13 | print('Maigret is interrupted.') 14 | sys.exit(1) 15 | 16 | 17 | if __name__ == "__main__": 18 | run() 19 | -------------------------------------------------------------------------------- /src/maigret/cookies.txt: -------------------------------------------------------------------------------- 1 | # HTTP Cookie File downloaded with cookies.txt by Genuinous @genuinous 2 | # This file can be used by wget, curl, aria2c and other standard compliant tools. 3 | # Usage Examples: 4 | # 1) wget -x --load-cookies cookies.txt "https://pixabay.com/users/blue-156711/" 5 | # 2) curl --cookie cookies.txt "https://pixabay.com/users/blue-156711/" 6 | # 3) aria2c --load-cookies cookies.txt "https://pixabay.com/users/blue-156711/" 7 | # 8 | .pixabay.com TRUE / TRUE 1618356838 __cfduid d56929cd50d11474f421b849df5758a881615764837 9 | .pixabay.com TRUE / TRUE 1615766638 __cf_bm ea8f7c565b44d749f65500f0e45176cebccaeb09-1615764837-1800-AYJIXh2boDJ6HPf44JI9fnteWABHOVvkxiSccACP9EiS1E58UDTGhViXtqjFfVE0QRj1WowP4ss2DzCs+pW+qUc= 10 | pixabay.com FALSE / FALSE 0 anonymous_user_id c1e4ee09-5674-4252-aa94-8c47b1ea80ab 11 | pixabay.com FALSE / FALSE 1647214439 csrftoken vfetTSvIul7gBlURt6s985JNM18GCdEwN5MWMKqX4yI73xoPgEj42dbNefjGx5fr 12 | pixabay.com FALSE / FALSE 1647300839 client_width 1680 13 | pixabay.com FALSE / FALSE 748111764839 is_human 1 14 | -------------------------------------------------------------------------------- /src/maigret/docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /src/maigret/docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /src/maigret/docs/requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx-copybutton 2 | -------------------------------------------------------------------------------- /src/maigret/docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | 3 | # -- Project information 4 | 5 | project = 'Maigret' 6 | copyright = '2021, soxoj' 7 | author = 'soxoj' 8 | 9 | release = '0.4.2' 10 | version = '0.4.2' 11 | 12 | # -- General configuration 13 | 14 | extensions = [ 15 | 'sphinx.ext.duration', 16 | 'sphinx.ext.doctest', 17 | 'sphinx.ext.autodoc', 18 | 'sphinx.ext.autosummary', 19 | 'sphinx.ext.intersphinx', 20 | 'sphinx_copybutton' 21 | ] 22 | 23 | intersphinx_mapping = { 24 | 'python': ('https://docs.python.org/3/', None), 25 | 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), 26 | } 27 | intersphinx_disabled_domains = ['std'] 28 | 29 | templates_path = ['_templates'] 30 | 31 | # -- Options for HTML output 32 | 33 | html_theme = 'sphinx_rtd_theme' 34 | 35 | # -- Options for EPUB output 36 | epub_show_urls = 'footnote' 37 | -------------------------------------------------------------------------------- /src/maigret/docs/source/index.rst: -------------------------------------------------------------------------------- 1 | .. _index: 2 | 3 | Welcome to the Maigret docs! 4 | ============================ 5 | 6 | **Maigret** is an easy-to-use and powerful OSINT tool for collecting a dossier on a person by username only. 7 | 8 | This is achieved by checking for accounts on a huge number of sites and gathering all the available information from web pages. 9 | 10 | The project's main goal - give to OSINT researchers and pentesters a **universal tool** to get maximum information about a subject and integrate it with other tools in automatization pipelines. 11 | 12 | You may be interested in: 13 | ------------------------- 14 | - :doc:`Command line options description ` and :doc:`usage examples ` 15 | - :doc:`Features list ` 16 | - :doc:`Project roadmap ` 17 | 18 | .. toctree:: 19 | :hidden: 20 | :caption: Sections 21 | 22 | command-line-options 23 | extracting-information-from-pages 24 | features 25 | philosophy 26 | roadmap 27 | supported-identifier-types 28 | tags 29 | usage-examples 30 | settings 31 | development 32 | -------------------------------------------------------------------------------- /src/maigret/docs/source/philosophy.rst: -------------------------------------------------------------------------------- 1 | .. _philosophy: 2 | 3 | Philosophy 4 | ========== 5 | 6 | Username => Dossier 7 | -------------------------------------------------------------------------------- /src/maigret/docs/source/roadmap.rst: -------------------------------------------------------------------------------- 1 | .. _roadmap: 2 | 3 | Roadmap 4 | ======= 5 | 6 | .. figure:: https://i.imgur.com/kk8cFdR.png 7 | :target: https://i.imgur.com/kk8cFdR.png 8 | :align: center 9 | 10 | Current status 11 | -------------- 12 | 13 | - Sites DB stats - ok 14 | - Scan sessions stats - ok 15 | - Site engine autodetect - ok 16 | - Engines for all the sites - WIP 17 | - Unified reporting flow - ok 18 | - Retries - ok 19 | -------------------------------------------------------------------------------- /src/maigret/docs/source/settings.rst: -------------------------------------------------------------------------------- 1 | .. _settings: 2 | 3 | Settings 4 | ============== 5 | 6 | Options are also configurable through settings files. See 7 | `settings JSON file `_ 8 | for the list of currently supported options. 9 | 10 | After start Maigret tries to load configuration from the following sources in exactly the same order: 11 | 12 | .. code-block:: console 13 | 14 | # relative path, based on installed package path 15 | resources/settings.json 16 | 17 | # absolute path, configuration file in home directory 18 | ~/.maigret/settings.json 19 | 20 | # relative path, based on current working directory 21 | settings.json 22 | 23 | Missing any of these files is not an error. 24 | If the next settings file contains already known option, 25 | this option will be rewrited. So it is possible to make 26 | custom configuration for different users and directories. 27 | -------------------------------------------------------------------------------- /src/maigret/docs/source/supported-identifier-types.rst: -------------------------------------------------------------------------------- 1 | .. _supported-identifier-types: 2 | 3 | Supported identifier types 4 | ========================== 5 | 6 | Maigret can search against not only ordinary usernames, but also through certain common identifiers. There is a list of all currently supported identifiers. 7 | 8 | - **gaia_id** - Google inner numeric user identifier, in former times was placed in a Google Plus account URL. 9 | - **steam_id** - Steam inner numeric user identifier. 10 | - **wikimapia_uid** - Wikimapia.org inner numeric user identifier. 11 | - **uidme_uguid** - uID.me inner numeric user identifier. 12 | - **yandex_public_id** - Yandex sites inner letter user identifier. See also: `YaSeeker `_. 13 | - **vk_id** - VK.com inner numeric user identifier. 14 | - **ok_id** - OK.ru inner numeric user identifier. 15 | - **yelp_userid** - Yelp inner user identifier. 16 | -------------------------------------------------------------------------------- /src/maigret/docs/source/tags.rst: -------------------------------------------------------------------------------- 1 | .. _tags: 2 | 3 | Tags 4 | ==== 5 | 6 | The use of tags allows you to select a subset of the sites from big Maigret DB for search. 7 | 8 | **Warning: tags markup is not stable now.** 9 | 10 | There are several types of tags: 11 | 12 | 1. **Country codes**: ``us``, ``jp``, ``br``... (`ISO 3166-1 alpha-2 `_). These tags reflect the site language and regional origin of its users and are then used to locate the owner of a username. If the regional origin is difficult to establish or a site is positioned as worldwide, `no country code is given`. There could be multiple country code tags for one site. 13 | 14 | 2. **Site engines**. Most of them are forum engines now: ``uCoz``, ``vBulletin``, ``XenForo`` et al. Full list of engines stored in the Maigret database. 15 | 16 | 3. **Sites' subject/type and interests of its users**. Full list of "standard" tags is `present in the source code `_ only for a moment. 17 | 18 | Usage 19 | ----- 20 | ``--tags en,jp`` -- search on US and Japanese sites (actually marked as such in the Maigret database) 21 | 22 | ``--tags coding`` -- search on sites related to software development. 23 | 24 | ``--tags ucoz`` -- search on uCoz sites only (mostly CIS countries) 25 | -------------------------------------------------------------------------------- /src/maigret/docs/source/usage-examples.rst: -------------------------------------------------------------------------------- 1 | .. _usage-examples: 2 | 3 | Usage examples 4 | ============== 5 | 6 | Start a search for accounts with username ``machine42`` on top 500 sites from the Maigret DB. 7 | 8 | .. code-block:: console 9 | 10 | maigret machine42 11 | 12 | Start a search for accounts with username ``machine42`` on **all sites** from the Maigret DB. 13 | 14 | .. code-block:: console 15 | 16 | maigret machine42 -a 17 | 18 | Start a search [...] and generate HTML and PDF reports. 19 | 20 | .. code-block:: console 21 | 22 | maigret machine42 -a -HP 23 | 24 | Start a search for accounts with username ``machine42`` only on Facebook. 25 | 26 | .. code-block:: console 27 | 28 | maigret machine42 --site Facebook 29 | 30 | Extract information from the Steam page by URL and start a search for accounts with found username ``machine42``. 31 | 32 | .. code-block:: console 33 | 34 | maigret --parse https://steamcommunity.com/profiles/76561199113454789 35 | 36 | Start a search for accounts with username ``machine42`` only on US and Japanese sites. 37 | 38 | .. code-block:: console 39 | 40 | maigret michael --tags en,jp 41 | 42 | Start a search for accounts with username ``machine42`` only on sites related to software development. 43 | 44 | .. code-block:: console 45 | 46 | maigret michael --tags coding 47 | 48 | Start a search for accounts with username ``machine42`` on uCoz sites only (mostly CIS countries). 49 | 50 | .. code-block:: console 51 | 52 | maigret michael --tags ucoz 53 | 54 | -------------------------------------------------------------------------------- /src/maigret/example.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "id": "8v6PEfyXb0Gx" 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "# clone the repo\n", 12 | "!git clone https://github.com/soxoj/maigret\n", 13 | "!pip3 install -r maigret/requirements.txt" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": null, 19 | "metadata": { 20 | "id": "cXOQUAhDchkl" 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "# help\n", 25 | "!python3 maigret/maigret.py --help" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "metadata": { 32 | "id": "SjDmpN4QGnJu" 33 | }, 34 | "outputs": [], 35 | "source": [ 36 | "# search\n", 37 | "!python3 maigret/maigret.py user" 38 | ] 39 | } 40 | ], 41 | "metadata": { 42 | "colab": { 43 | "collapsed_sections": [], 44 | "include_colab_link": true, 45 | "name": "maigret.ipynb", 46 | "provenance": [] 47 | }, 48 | "kernelspec": { 49 | "display_name": "Python 3", 50 | "language": "python", 51 | "name": "python3" 52 | }, 53 | "language_info": { 54 | "codemirror_mode": { 55 | "name": "ipython", 56 | "version": 3 57 | }, 58 | "file_extension": ".py", 59 | "mimetype": "text/x-python", 60 | "name": "python", 61 | "nbconvert_exporter": "python", 62 | "pygments_lexer": "ipython3", 63 | "version": "3.7.10" 64 | } 65 | }, 66 | "nbformat": 4, 67 | "nbformat_minor": 1 68 | } 69 | -------------------------------------------------------------------------------- /src/maigret/launcher.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | from colorama import Fore,Style 4 | 5 | print(f""" 6 | 7 | {Fore.WHITE}░█▀▀▀ █──█ █▀▀▀ ─▀─ ▀▀█▀▀ ─▀─ ▀█─█▀ █▀▀ 8 | {Fore.RED}░█▀▀▀ █──█ █─▀█ ▀█▀ ──█── ▀█▀ ─█▄█─ █▀▀ 9 | {Fore.WHITE}░█─── ─▀▀▀ ▀▀▀▀ ▀▀▀ ──▀── ▀▀▀ ──▀── ▀▀▀ 10 | {Fore.RED}⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 11 | | {Fore.CYAN}Created By {Fore.YELLOW}: {Fore.WHITE}RetroPackets {Fore.RED}| 12 | ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 13 | """) 14 | 15 | usr = input(f"{Fore.WHITE}🅴🅽🆃🅴🆁 🆄🆂🅴🆁🅽🅰🅼🅴 {Fore.YELLOW}⑆ {Fore.BLUE}") 16 | os.system("python3 maigret.py " + usr) 17 | 18 | print(f""" 19 | 20 | {Fore.WHITE}░█▀▀▀ █──█ █▀▀▀ ─▀─ ▀▀█▀▀ ─▀─ ▀█─█▀ █▀▀ 21 | {Fore.RED}░█▀▀▀ █──█ █─▀█ ▀█▀ ──█── ▀█▀ ─█▄█─ █▀▀ 22 | {Fore.WHITE}░█─── ─▀▀▀ ▀▀▀▀ ▀▀▀ ──▀── ▀▀▀ ──▀── ▀▀▀ 23 | {Fore.RED}⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 24 | | {Fore.CYAN}Created By {Fore.YELLOW}: {Fore.WHITE}RetroPackets {Fore.RED}| 25 | ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 26 | """) 27 | -------------------------------------------------------------------------------- /src/maigret/maigret.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import asyncio 3 | import sys 4 | 5 | from maigret.maigret import main 6 | 7 | 8 | def run(): 9 | try: 10 | loop = asyncio.get_event_loop() 11 | loop.run_until_complete(main()) 12 | except KeyboardInterrupt: 13 | print('Maigret is interrupted.') 14 | sys.exit(1) 15 | 16 | 17 | if __name__ == "__main__": 18 | run() 19 | -------------------------------------------------------------------------------- /src/maigret/maigret/__init__.py: -------------------------------------------------------------------------------- 1 | """Maigret""" 2 | 3 | __title__ = 'Maigret' 4 | __package__ = 'maigret' 5 | __author__ = 'Soxoj' 6 | __author_email__ = 'soxoj@protonmail.com' 7 | 8 | 9 | from .__version__ import __version__ 10 | from .checking import maigret as search 11 | from .maigret import main as cli 12 | from .sites import MaigretEngine, MaigretSite, MaigretDatabase 13 | from .notify import QueryNotifyPrint as Notifier 14 | -------------------------------------------------------------------------------- /src/maigret/maigret/__main__.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """ 4 | Maigret entrypoint 5 | """ 6 | 7 | import asyncio 8 | 9 | from .maigret import main 10 | 11 | if __name__ == "__main__": 12 | asyncio.run(main()) 13 | -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/__main__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/__main__.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/__version__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/__version__.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/activation.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/activation.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/checking.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/checking.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/errors.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/errors.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/executors.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/executors.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/maigret.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/maigret.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/notify.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/notify.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/report.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/report.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/result.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/result.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/settings.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/settings.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/sites.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/sites.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/submit.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/submit.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/types.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/types.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__pycache__/utils.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/maigret/__pycache__/utils.cpython-39.pyc -------------------------------------------------------------------------------- /src/maigret/maigret/__version__.py: -------------------------------------------------------------------------------- 1 | """Maigret version file""" 2 | 3 | __version__ = '0.4.2' 4 | -------------------------------------------------------------------------------- /src/maigret/maigret/activation.py: -------------------------------------------------------------------------------- 1 | from http.cookiejar import MozillaCookieJar 2 | from http.cookies import Morsel 3 | 4 | from aiohttp import CookieJar 5 | 6 | 7 | class ParsingActivator: 8 | @staticmethod 9 | def twitter(site, logger, cookies={}): 10 | headers = dict(site.headers) 11 | del headers["x-guest-token"] 12 | import requests 13 | 14 | r = requests.post(site.activation["url"], headers=headers) 15 | logger.info(r) 16 | j = r.json() 17 | guest_token = j[site.activation["src"]] 18 | site.headers["x-guest-token"] = guest_token 19 | 20 | @staticmethod 21 | def vimeo(site, logger, cookies={}): 22 | headers = dict(site.headers) 23 | if "Authorization" in headers: 24 | del headers["Authorization"] 25 | import requests 26 | 27 | r = requests.get(site.activation["url"], headers=headers) 28 | jwt_token = r.json()["jwt"] 29 | site.headers["Authorization"] = "jwt " + jwt_token 30 | 31 | @staticmethod 32 | def spotify(site, logger, cookies={}): 33 | headers = dict(site.headers) 34 | if "Authorization" in headers: 35 | del headers["Authorization"] 36 | import requests 37 | 38 | r = requests.get(site.activation["url"]) 39 | bearer_token = r.json()["accessToken"] 40 | site.headers["authorization"] = f"Bearer {bearer_token}" 41 | 42 | 43 | def import_aiohttp_cookies(cookiestxt_filename): 44 | cookies_obj = MozillaCookieJar(cookiestxt_filename) 45 | cookies_obj.load(ignore_discard=True, ignore_expires=True) 46 | 47 | cookies = CookieJar() 48 | 49 | cookies_list = [] 50 | for domain in cookies_obj._cookies.values(): 51 | for key, cookie in list(domain.values())[0].items(): 52 | c = Morsel() 53 | c.set(key, cookie.value, cookie.value) 54 | c["domain"] = cookie.domain 55 | c["path"] = cookie.path 56 | cookies_list.append((key, c)) 57 | 58 | cookies.update_cookies(cookies_list) 59 | 60 | return cookies 61 | -------------------------------------------------------------------------------- /src/maigret/maigret/resources/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "presence_strings": [ 3 | "username", 4 | "not found", 5 | "пользователь", 6 | "profile", 7 | "lastname", 8 | "firstname", 9 | "biography", 10 | "birthday", 11 | "репутация", 12 | "информация", 13 | "e-mail" 14 | ], 15 | "supposed_usernames": [ 16 | "alex", "god", "admin", "red", "blue", "john" 17 | ], 18 | "retries_count": 1, 19 | "sites_db_path": "resources/data.json", 20 | "timeout": 30, 21 | "max_connections": 100, 22 | "recursive_search": true, 23 | "info_extracting": true, 24 | "cookie_jar_file": null, 25 | "ignore_ids_list": [], 26 | "reports_path": "reports", 27 | "proxy_url": null, 28 | "tor_proxy_url": "socks5://127.0.0.1:9050", 29 | "i2p_proxy_url": "http://127.0.0.1:4444", 30 | "domain_search": false, 31 | "scan_all_sites": true, 32 | "top_sites_count": 500, 33 | "scan_disabled_sites": false, 34 | "scan_sites_list": [], 35 | "self_check_enabled": false, 36 | "print_not_found": false, 37 | "print_check_errors": false, 38 | "colored_print": true, 39 | "show_progressbar": true, 40 | "report_sorting": "default", 41 | "json_report_type": "", 42 | "txt_report": false, 43 | "csv_report": false, 44 | "xmind_report": false, 45 | "graph_report": false, 46 | "pdf_report": false, 47 | "html_report": false 48 | } 49 | -------------------------------------------------------------------------------- /src/maigret/maigret/resources/simple_report_pdf.css: -------------------------------------------------------------------------------- 1 | h2 { 2 | font-size: 30px; 3 | width: 100%; 4 | display:block; 5 | } 6 | h3 { 7 | font-size: 25px; 8 | width: 100%; 9 | display:block; 10 | } 11 | h4 { 12 | font-size: 20px; 13 | width: 100%; 14 | display:block; 15 | } 16 | p { 17 | margin: 0 0 5px; 18 | display: block; 19 | } 20 | 21 | 22 | table { 23 | margin-bottom: 10px; 24 | width:100%; 25 | } 26 | th { 27 | font-weight: bold; 28 | } 29 | th,td,caption { 30 | padding: 4px 10px 4px 5px; 31 | } 32 | table tr:nth-child(even) td, 33 | table tr.even td { 34 | background-color: #e5ecf9; 35 | } 36 | 37 | div { 38 | border-bottom-color: #3e3e3e; 39 | border-bottom-width: 1px; 40 | border-bottom-style: solid; 41 | } 42 | .invalid-button { 43 | position: absolute; 44 | left: 10px; 45 | } -------------------------------------------------------------------------------- /src/maigret/maigret/types.py: -------------------------------------------------------------------------------- 1 | from typing import Callable, List, Dict, Tuple, Any 2 | 3 | 4 | # search query 5 | QueryDraft = Tuple[Callable, List, Dict] 6 | 7 | # options dict 8 | QueryOptions = Dict[str, Any] 9 | 10 | # TODO: throw out 11 | QueryResultWrapper = Dict[str, Any] 12 | -------------------------------------------------------------------------------- /src/maigret/placeholder.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/placeholder.txt -------------------------------------------------------------------------------- /src/maigret/pyinstaller/maigret_standalone.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import asyncio 3 | 4 | import maigret 5 | 6 | if __name__ == "__main__": 7 | asyncio.run(maigret.cli()) -------------------------------------------------------------------------------- /src/maigret/pyinstaller/maigret_standalone.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | from PyInstaller.utils.hooks import collect_all 3 | 4 | datas = [] 5 | binaries = [] 6 | hiddenimports = [] 7 | 8 | full_import_modules = ['maigret', 'socid_extractor', 'arabic_reshaper', 'pyvis', 'reportlab.graphics.barcode'] 9 | 10 | for module in full_import_modules: 11 | tmp_ret = collect_all(module) 12 | datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] 13 | 14 | hiddenimports += ['PySocks', 'beautifulsoup4', 'python-dateutil', 15 | 'future-annotations', 'six', 'python-bidi', 16 | 'typing-extensions', 'attrs', 'torrequest'] 17 | 18 | block_cipher = None 19 | 20 | 21 | a = Analysis(['maigret_standalone.py'], 22 | pathex=[], 23 | binaries=binaries, 24 | datas=datas, 25 | hiddenimports=hiddenimports, 26 | hookspath=[], 27 | hooksconfig={}, 28 | runtime_hooks=[], 29 | excludes=[], 30 | win_no_prefer_redirects=False, 31 | win_private_assemblies=False, 32 | cipher=block_cipher, 33 | noarchive=False) 34 | 35 | pyz = PYZ(a.pure, a.zipped_data, 36 | cipher=block_cipher) 37 | 38 | exe = EXE(pyz, 39 | a.scripts, 40 | a.binaries, 41 | a.zipfiles, 42 | a.datas, 43 | [], 44 | name='maigret_standalone', 45 | debug=False, 46 | bootloader_ignore_signals=False, 47 | strip=False, 48 | upx=True, 49 | upx_exclude=[], 50 | runtime_tmpdir=None, 51 | console=True, 52 | disable_windowed_traceback=False, 53 | target_arch=None, 54 | codesign_identity=None, 55 | entitlements_file=None ) 56 | -------------------------------------------------------------------------------- /src/maigret/pyinstaller/requirements.txt: -------------------------------------------------------------------------------- 1 | maigret @ https://github.com/soxoj/maigret/archive/refs/heads/main.zip 2 | pefile==2021.9.3 3 | psutil==5.9.0 4 | pyinstaller @ https://github.com/pyinstaller/pyinstaller/archive/develop.zip 5 | pywin32-ctypes==0.2.0 -------------------------------------------------------------------------------- /src/maigret/pytest.ini: -------------------------------------------------------------------------------- 1 | # pytest.ini 2 | [pytest] 3 | filterwarnings = 4 | error 5 | ignore::UserWarning 6 | asyncio_mode=auto -------------------------------------------------------------------------------- /src/maigret/reports/placeholder.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/reports/placeholder.txt -------------------------------------------------------------------------------- /src/maigret/requirements.txt: -------------------------------------------------------------------------------- 1 | aiodns==3.0.0 2 | aiohttp==3.8.1 3 | aiohttp-socks==0.7.1 4 | arabic-reshaper==2.1.3 5 | async-timeout==4.0.2 6 | attrs==21.4.0 7 | certifi==2021.10.8 8 | chardet==4.0.0 9 | colorama==0.4.4 10 | future==0.18.2 11 | future-annotations==1.0.0 12 | html5lib==1.1 13 | idna==3.3 14 | Jinja2==3.0.3 15 | lxml==4.8.0 16 | MarkupSafe==2.0.1 17 | mock==4.0.3 18 | multidict==5.2.0;python_version<"3.7" 19 | multidict==6.0.2;python_version>="3.7" 20 | pycountry==22.1.10 21 | PyPDF2==1.26.0 22 | PySocks==1.7.1 23 | python-bidi==0.4.2 24 | requests==2.27.1 25 | requests-futures==1.0.0 26 | six==1.16.0 27 | socid-extractor>=0.0.21 28 | soupsieve==2.3.1 29 | stem==1.8.0 30 | torrequest==0.1.0 31 | tqdm==4.63.0 32 | typing-extensions==4.1.1 33 | webencodings==0.5.1 34 | xhtml2pdf==0.2.5 35 | XMind==1.2.0 36 | yarl==1.7.2 37 | networkx==2.5.1 38 | pyvis==0.1.9 39 | reportlab==3.6.6 40 | -------------------------------------------------------------------------------- /src/maigret/setup.cfg: -------------------------------------------------------------------------------- 1 | [egg_info] 2 | tag_build = 3 | tag_date = 0 4 | 5 | [flake8] 6 | per-file-ignores = __init__.py:F401 7 | 8 | [mypy] 9 | ignore_missing_imports = True -------------------------------------------------------------------------------- /src/maigret/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import ( 2 | setup, 3 | find_packages, 4 | ) 5 | 6 | 7 | with open('README.md') as fh: 8 | long_description = fh.read() 9 | 10 | with open('requirements.txt') as rf: 11 | requires = rf.read().splitlines() 12 | 13 | setup(name='maigret', 14 | version='0.4.2', 15 | description='Collect a dossier on a person by username from a huge number of sites', 16 | long_description=long_description, 17 | long_description_content_type="text/markdown", 18 | url='https://github.com/soxoj/maigret', 19 | install_requires=requires, 20 | entry_points={'console_scripts': ['maigret = maigret.maigret:run']}, 21 | packages=find_packages(), 22 | include_package_data=True, 23 | author='Soxoj', 24 | author_email='soxoj@protonmail.com', 25 | license='MIT', 26 | zip_safe=False) 27 | -------------------------------------------------------------------------------- /src/maigret/snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: maigret2 2 | version: git 3 | summary: SOCMINT / Instagram 4 | description: | 5 | Test Test Test 6 | base: core18 7 | confinement: strict 8 | 9 | 10 | parts: 11 | maigret2: 12 | plugin: python 13 | python-version: python3 14 | source: . 15 | stage-packages: 16 | - python-six 17 | 18 | 19 | apps: 20 | maigret2: 21 | command: bin/maigret 22 | 23 | 24 | architectures: 25 | - build-on: amd64 26 | - build-on: i386 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/maigret/static/chat_gitter.svg: -------------------------------------------------------------------------------- 1 | chaton gitter -------------------------------------------------------------------------------- /src/maigret/static/maigret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/static/maigret.png -------------------------------------------------------------------------------- /src/maigret/static/report_alexaimephotography_html_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/static/report_alexaimephotography_html_screenshot.png -------------------------------------------------------------------------------- /src/maigret/static/report_alexaimephotography_xmind_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/static/report_alexaimephotography_xmind_screenshot.png -------------------------------------------------------------------------------- /src/maigret/static/report_alexaimephotographycars.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/static/report_alexaimephotographycars.pdf -------------------------------------------------------------------------------- /src/maigret/test-requirements.txt: -------------------------------------------------------------------------------- 1 | reportlab==3.6.6 2 | flake8==4.0.1 3 | pytest==7.0.1 4 | pytest-asyncio==0.16.0;python_version<"3.7" 5 | pytest-asyncio==0.18.2;python_version>="3.7" 6 | pytest-cov==3.0.0 7 | pytest-httpserver==1.0.4 8 | pytest-rerunfailures==10.2 9 | -------------------------------------------------------------------------------- /src/maigret/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/tests/__init__.py -------------------------------------------------------------------------------- /src/maigret/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import glob 2 | import logging 3 | import os 4 | 5 | import pytest 6 | from _pytest.mark import Mark 7 | 8 | from maigret.sites import MaigretDatabase 9 | from maigret.maigret import setup_arguments_parser 10 | from maigret.settings import Settings 11 | 12 | 13 | CUR_PATH = os.path.dirname(os.path.realpath(__file__)) 14 | JSON_FILE = os.path.join(CUR_PATH, '../maigret/resources/data.json') 15 | SETTINGS_FILE = os.path.join(CUR_PATH, '../maigret/resources/settings.json') 16 | TEST_JSON_FILE = os.path.join(CUR_PATH, 'db.json') 17 | LOCAL_TEST_JSON_FILE = os.path.join(CUR_PATH, 'local.json') 18 | empty_mark = Mark('', (), {}) 19 | 20 | 21 | def by_slow_marker(item): 22 | return item.get_closest_marker('slow', default=empty_mark) 23 | 24 | 25 | def pytest_collection_modifyitems(items): 26 | items.sort(key=by_slow_marker, reverse=False) 27 | 28 | 29 | def get_test_reports_filenames(): 30 | return glob.glob(os.path.join('report_*'), recursive=False) 31 | 32 | 33 | def remove_test_reports(): 34 | reports_list = get_test_reports_filenames() 35 | for f in reports_list: 36 | os.remove(f) 37 | logging.error(f'Removed test reports {reports_list}') 38 | 39 | 40 | @pytest.fixture(scope='session') 41 | def default_db(): 42 | return MaigretDatabase().load_from_file(JSON_FILE) 43 | 44 | 45 | @pytest.fixture(scope='function') 46 | def test_db(): 47 | return MaigretDatabase().load_from_file(TEST_JSON_FILE) 48 | 49 | 50 | @pytest.fixture(scope='function') 51 | def local_test_db(): 52 | return MaigretDatabase().load_from_file(LOCAL_TEST_JSON_FILE) 53 | 54 | 55 | @pytest.fixture(autouse=True) 56 | def reports_autoclean(): 57 | remove_test_reports() 58 | yield 59 | remove_test_reports() 60 | 61 | 62 | @pytest.fixture(scope='session') 63 | def argparser(): 64 | settings = Settings() 65 | settings.load([SETTINGS_FILE]) 66 | return setup_arguments_parser(settings) 67 | 68 | 69 | @pytest.fixture(scope="session") 70 | def httpserver_listen_address(): 71 | return ("localhost", 8989) 72 | -------------------------------------------------------------------------------- /src/maigret/tests/db.json: -------------------------------------------------------------------------------- 1 | { 2 | "engines": {}, 3 | "sites": { 4 | "GooglePlayStore": { 5 | "tags": ["global", "us"], 6 | "disabled": false, 7 | "checkType": "status_code", 8 | "alexaRank": 1, 9 | "url": "https://play.google.com/store/apps/developer?id={username}", 10 | "urlMain": "https://play.google.com/store", 11 | "usernameClaimed": "Facebook_nosuchname", 12 | "usernameUnclaimed": "noonewouldeverusethis7" 13 | }, 14 | "Reddit": { 15 | "tags": ["news", "social", "us"], 16 | "checkType": "status_code", 17 | "presenseStrs": ["totalKarma"], 18 | "disabled": true, 19 | "alexaRank": 17, 20 | "url": "https://www.reddit.com/user/{username}", 21 | "urlMain": "https://www.reddit.com/", 22 | "usernameClaimed": "blue", 23 | "usernameUnclaimed": "noonewouldeverusethis7" 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/maigret/tests/local.json: -------------------------------------------------------------------------------- 1 | { 2 | "engines": {}, 3 | "sites": { 4 | "StatusCode": { 5 | "checkType": "status_code", 6 | "url": "http://localhost:8989/url?id={username}", 7 | "urlMain": "http://localhost:8989/", 8 | "usernameClaimed": "claimed", 9 | "usernameUnclaimed": "unclaimed" 10 | }, 11 | "Message": { 12 | "checkType": "message", 13 | "url": "http://localhost:8989/url?id={username}", 14 | "urlMain": "http://localhost:8989/", 15 | "presenseStrs": ["user", "profile"], 16 | "absenseStrs": ["not found", "404"], 17 | "usernameClaimed": "claimed", 18 | "usernameUnclaimed": "unclaimed" 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/maigret/tests/test_activation.py: -------------------------------------------------------------------------------- 1 | """Maigret activation test functions""" 2 | import json 3 | 4 | import aiohttp 5 | import pytest 6 | from mock import Mock 7 | 8 | from maigret.activation import ParsingActivator, import_aiohttp_cookies 9 | 10 | COOKIES_TXT = """# HTTP Cookie File downloaded with cookies.txt by Genuinous @genuinous 11 | # This file can be used by wget, curl, aria2c and other standard compliant tools. 12 | # Usage Examples: 13 | # 1) wget -x --load-cookies cookies.txt "https://xss.is/search/" 14 | # 2) curl --cookie cookies.txt "https://xss.is/search/" 15 | # 3) aria2c --load-cookies cookies.txt "https://xss.is/search/" 16 | # 17 | xss.is FALSE / TRUE 0 xf_csrf test 18 | xss.is FALSE / TRUE 1642709308 xf_user tset 19 | .xss.is TRUE / FALSE 0 muchacho_cache test 20 | .xss.is TRUE / FALSE 1924905600 132_evc test 21 | httpbin.org FALSE / FALSE 0 a b 22 | """ 23 | 24 | 25 | @pytest.mark.skip(reason="periodically fails") 26 | @pytest.mark.slow 27 | def test_twitter_activation(default_db): 28 | twitter_site = default_db.sites_dict['Twitter'] 29 | token1 = twitter_site.headers['x-guest-token'] 30 | 31 | ParsingActivator.twitter(twitter_site, Mock()) 32 | token2 = twitter_site.headers['x-guest-token'] 33 | 34 | assert token1 != token2 35 | 36 | 37 | @pytest.mark.asyncio 38 | async def test_import_aiohttp_cookies(): 39 | cookies_filename = 'cookies_test.txt' 40 | with open(cookies_filename, 'w') as f: 41 | f.write(COOKIES_TXT) 42 | 43 | cookie_jar = import_aiohttp_cookies(cookies_filename) 44 | assert list(cookie_jar._cookies.keys()) == ['xss.is', 'httpbin.org'] 45 | 46 | url = 'https://httpbin.org/cookies' 47 | connector = aiohttp.TCPConnector(ssl=False) 48 | session = aiohttp.ClientSession( 49 | connector=connector, trust_env=True, cookie_jar=cookie_jar 50 | ) 51 | 52 | response = await session.get(url=url) 53 | result = json.loads(await response.content.read()) 54 | await session.close() 55 | 56 | assert result == {'cookies': {'a': 'b'}} 57 | -------------------------------------------------------------------------------- /src/maigret/tests/test_data.py: -------------------------------------------------------------------------------- 1 | """Maigret data test functions""" 2 | 3 | from maigret.utils import is_country_tag 4 | 5 | 6 | def test_tags_validity(default_db): 7 | unknown_tags = set() 8 | 9 | tags = default_db._tags 10 | 11 | for site in default_db.sites: 12 | for tag in filter(lambda x: not is_country_tag(x), site.tags): 13 | if tag not in tags: 14 | unknown_tags.add(tag) 15 | 16 | assert unknown_tags == set() 17 | -------------------------------------------------------------------------------- /src/maigret/tests/test_notify.py: -------------------------------------------------------------------------------- 1 | from maigret.errors import CheckError 2 | from maigret.notify import QueryNotifyPrint 3 | from maigret.result import QueryStatus, QueryResult 4 | 5 | 6 | def test_notify_illegal(): 7 | n = QueryNotifyPrint(color=False) 8 | 9 | assert ( 10 | n.update( 11 | QueryResult( 12 | username="test", 13 | status=QueryStatus.ILLEGAL, 14 | site_name="TEST_SITE", 15 | site_url_user="http://example.com/test", 16 | ) 17 | ) 18 | == "[-] TEST_SITE: Illegal Username Format For This Site!" 19 | ) 20 | 21 | 22 | def test_notify_claimed(): 23 | n = QueryNotifyPrint(color=False) 24 | 25 | assert ( 26 | n.update( 27 | QueryResult( 28 | username="test", 29 | status=QueryStatus.CLAIMED, 30 | site_name="TEST_SITE", 31 | site_url_user="http://example.com/test", 32 | ) 33 | ) 34 | == "[+] TEST_SITE: http://example.com/test" 35 | ) 36 | 37 | 38 | def test_notify_available(): 39 | n = QueryNotifyPrint(color=False) 40 | 41 | assert ( 42 | n.update( 43 | QueryResult( 44 | username="test", 45 | status=QueryStatus.AVAILABLE, 46 | site_name="TEST_SITE", 47 | site_url_user="http://example.com/test", 48 | ) 49 | ) 50 | == "[-] TEST_SITE: Not found!" 51 | ) 52 | 53 | 54 | def test_notify_unknown(): 55 | n = QueryNotifyPrint(color=False) 56 | result = QueryResult( 57 | username="test", 58 | status=QueryStatus.UNKNOWN, 59 | site_name="TEST_SITE", 60 | site_url_user="http://example.com/test", 61 | ) 62 | result.error = CheckError('Type', 'Reason') 63 | 64 | assert n.update(result) == "[?] TEST_SITE: Type error: Reason" 65 | -------------------------------------------------------------------------------- /src/maigret/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/maigret/utils/__init__.py -------------------------------------------------------------------------------- /src/maigret/utils/add_tags.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import random 3 | from argparse import ArgumentParser, RawDescriptionHelpFormatter 4 | 5 | from maigret.maigret import MaigretDatabase 6 | from maigret.submit import get_alexa_rank 7 | 8 | 9 | def update_tags(site): 10 | tags = [] 11 | if not site.tags: 12 | print(f'Site {site.name} doesn\'t have tags') 13 | else: 14 | tags = site.tags 15 | print(f'Site {site.name} tags: ' + ', '.join(tags)) 16 | 17 | print(f'URL: {site.url_main}') 18 | 19 | new_tags = set(input('Enter new tags: ').split(', ')) 20 | if "disabled" in new_tags: 21 | new_tags.remove("disabled") 22 | site.disabled = True 23 | 24 | print(f'Old alexa rank: {site.alexa_rank}') 25 | rank = get_alexa_rank(site.url_main) 26 | if rank: 27 | print(f'New alexa rank: {rank}') 28 | site.alexa_rank = rank 29 | 30 | site.tags = [x for x in list(new_tags) if x] 31 | 32 | 33 | if __name__ == '__main__': 34 | parser = ArgumentParser(formatter_class=RawDescriptionHelpFormatter 35 | ) 36 | parser.add_argument("--base","-b", metavar="BASE_FILE", 37 | dest="base_file", default="maigret/resources/data.json", 38 | help="JSON file with sites data to update.") 39 | 40 | pool = list() 41 | 42 | args = parser.parse_args() 43 | 44 | db = MaigretDatabase() 45 | db.load_from_file(args.base_file).sites 46 | 47 | while True: 48 | site = random.choice(db.sites) 49 | if site.engine == 'uCoz': 50 | continue 51 | 52 | if not 'in' in site.tags: 53 | continue 54 | 55 | update_tags(site) 56 | 57 | db.save_to_file(args.base_file) -------------------------------------------------------------------------------- /src/maigret/utils/sites_diff.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import difflib 3 | import requests 4 | 5 | 6 | a = requests.get(sys.argv[1]).text 7 | b = requests.get(sys.argv[2]).text 8 | 9 | 10 | tokens_a = set(a.split('"')) 11 | tokens_b = set(b.split('"')) 12 | 13 | a_minus_b = tokens_a.difference(tokens_b) 14 | b_minus_a = tokens_b.difference(tokens_a) 15 | 16 | print(a_minus_b) 17 | print(b_minus_a) 18 | 19 | print(len(a_minus_b)) 20 | print(len(b_minus_a)) 21 | 22 | desired_strings = ["username", "not found", "пользователь", "profile", "lastname", "firstname", "biography", 23 | "birthday", "репутация", "информация", "e-mail"] 24 | 25 | 26 | def get_match_ratio(x): 27 | return round(max([ 28 | difflib.SequenceMatcher(a=x.lower(), b=y).ratio() 29 | for y in desired_strings 30 | ]), 2) 31 | 32 | 33 | RATIO = 0.6 34 | 35 | print(sorted(a_minus_b, key=get_match_ratio, reverse=True)[:10]) 36 | print(sorted(b_minus_a, key=get_match_ratio, reverse=True)[:10]) -------------------------------------------------------------------------------- /src/placeholder.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetroPackets/Fugitive/5ecb711a117eeaaf01f350a5276f84e57b2a7787/src/placeholder.txt --------------------------------------------------------------------------------