├── holehe ├── __init__.py ├── modules │ ├── __init__.py │ ├── cms │ │ ├── __init__.py │ │ ├── gravatar.py │ │ ├── atlassian.py │ │ ├── voxmedia.py │ │ └── wordpress.py │ ├── forum │ │ ├── __init__.py │ │ ├── raidforums.py │ │ ├── cracked_to.py │ │ ├── koditv.py │ │ ├── cpahero.py │ │ ├── mybb.py │ │ └── cpaelites.py │ ├── jobs │ │ ├── __init__.py │ │ ├── coroflot.py │ │ ├── freelancer.py │ │ └── seoclerks.py │ ├── mails │ │ ├── __init__.py │ │ ├── laposte.py │ │ ├── protonmail.py │ │ ├── mail_ru.py │ │ └── google.py │ ├── medias │ │ ├── __init__.py │ │ ├── sporcle.py │ │ ├── komoot.py │ │ ├── flickr.py │ │ ├── ello.py │ │ └── rambler.py │ ├── music │ │ ├── __init__.py │ │ ├── lastfm.py │ │ ├── smule.py │ │ ├── spotify.py │ │ ├── blip.py │ │ └── tunefind.py │ ├── osint │ │ ├── __init__.py │ │ └── rocketreach.py │ ├── porn │ │ ├── __init__.py │ │ ├── xvideos.py │ │ ├── redtube.py │ │ └── pornhub.py │ ├── sport │ │ ├── __init__.py │ │ └── bodybuilding.py │ ├── company │ │ ├── __init__.py │ │ └── aboutme.py │ ├── crowfunding │ │ ├── __init__.py │ │ └── buymeacoffee.py │ ├── learning │ │ ├── __init__.py │ │ ├── quora.py │ │ └── diigo.py │ ├── medical │ │ ├── __init__.py │ │ ├── caringbridge.py │ │ └── sevencups.py │ ├── payment │ │ ├── __init__.py │ │ └── venmo.py │ ├── products │ │ ├── __init__.py │ │ ├── samsung.py │ │ ├── nike.py │ │ └── eventbrite.py │ ├── programing │ │ ├── __init__.py │ │ ├── replit.py │ │ ├── github.py │ │ ├── devrant.py │ │ ├── codecademy.py │ │ ├── teamtreehouse.py │ │ └── codepen.py │ ├── real_estate │ │ ├── __init__.py │ │ └── vrbo.py │ ├── shopping │ │ ├── __init__.py │ │ ├── armurerieauxerre.py │ │ ├── envato.py │ │ ├── dominosfr.py │ │ ├── ebay.py │ │ ├── deliveroo.py │ │ ├── amazon.py │ │ ├── naturabuy.py │ │ └── vivino.py │ ├── software │ │ ├── __init__.py │ │ ├── office365.py │ │ ├── firefox.py │ │ ├── docker.py │ │ ├── archive.py │ │ ├── lastpass.py │ │ ├── issuu.py │ │ └── adobe.py │ ├── transport │ │ ├── __init__.py │ │ └── blablacar.py │ ├── productivity │ │ ├── __init__.py │ │ ├── anydo.py │ │ └── evernote.py │ └── social_media │ │ ├── __init__.py │ │ ├── twitter.py │ │ ├── pinterest.py │ │ ├── fanpop.py │ │ ├── plurk.py │ │ ├── tellonym.py │ │ ├── patreon.py │ │ ├── imgur.py │ │ ├── snapchat.py │ │ ├── bitmoji.py │ │ ├── vsco.py │ │ ├── parler.py │ │ ├── tumblr.py │ │ ├── taringa.py │ │ ├── wattpad.py │ │ ├── strava.py │ │ ├── xing.py │ │ ├── myspace.py │ │ ├── instagram.py │ │ └── crevado.py └── instruments.py ├── .gitignore ├── FUNDING.yml ├── .github ├── FUNDING.yml └── workflows │ └── codeql-analysis.yml └── setup.py /holehe/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/cms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/forum/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/jobs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/mails/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/medias/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/music/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/osint/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/porn/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/sport/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/company/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/crowfunding/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/learning/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/medical/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/payment/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/products/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/programing/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/real_estate/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/shopping/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/software/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/transport/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/productivity/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /holehe/modules/social_media/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | test.py 3 | todolist 4 | __pycache__ 5 | holehe.egg-info 6 | .idea 7 | venv -------------------------------------------------------------------------------- /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) -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.github/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 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from setuptools import setup, find_packages 3 | 4 | 5 | setup( 6 | name='holehe', 7 | version="1.58.9.3", 8 | packages=find_packages(), 9 | author="megadose", 10 | author_email="megadose@protonmail.com", 11 | install_requires=["termcolor","bs4","httpx","trio","argparse","tqdm"], 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 | -------------------------------------------------------------------------------- /holehe/modules/software/office365.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def office365(email, client, out): 6 | name = "office365" 7 | domain = "office365.com" 8 | method = "other" 9 | frequent_rate_limit=False 10 | 11 | user_agent = 'Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.12026; Pro)' 12 | headers = {'User-Agent': user_agent, 'Accept': 'application/json'} 13 | r = await client.get( 14 | 'https://outlook.office365.com/autodiscover/autodiscover.json/v1.0/{}?Protocol=Autodiscoverv1'.format( 15 | email), 16 | headers=headers, 17 | allow_redirects=False) 18 | if r.status_code == 200: 19 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 20 | "rateLimit": False, 21 | "exists": True, 22 | "emailrecovery": None, 23 | "phoneNumber": None, 24 | "others": None}) 25 | else: 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": False, 28 | "exists": False, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 : 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 : 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 | -------------------------------------------------------------------------------- /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 = "gravatar.com" 8 | method="other" 9 | frequent_rate_limit=False 10 | 11 | hashed_name = hashlib.md5(email.encode()).hexdigest() 12 | r = await client.get('https://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 | name = data['entry'][0]['name'].get('formatted') 25 | others = { 26 | 'FullName': name, 27 | } 28 | 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": others}) 35 | return None 36 | except BaseException: 37 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 38 | "rateLimit": True, 39 | "exists": False, 40 | "emailrecovery": None, 41 | "phoneNumber": None, 42 | "others": None}) 43 | return None 44 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 : 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 | -------------------------------------------------------------------------------- /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 = "repl.it" 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://repl.it', 18 | 'Connection': 'keep-alive', 19 | } 20 | 21 | data = '{"email":"' + str(email) + '"}' 22 | 23 | response = await client.post('https://repl.it/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 BaseException: 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 BaseException: 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /holehe/modules/medias/ello.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def ello(email, client, out): 6 | name = "ello" 7 | domain = "ello.co" 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 | 'Referer': 'https://ello.co/join', 16 | 'Content-Type': 'application/json', 17 | 'Origin': 'https://ello.co', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | data = '{"email":"' + email + '"}' 24 | try: 25 | response = await client.post('https://ello.co/api/v2/availability', headers=headers, data=data) 26 | if response.json()["availability"]["email"]: 27 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 28 | "rateLimit": False, 29 | "exists": False, 30 | "emailrecovery": None, 31 | "phoneNumber": None, 32 | "others": None}) 33 | else: 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 | except BaseException: 41 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 42 | "rateLimit": True, 43 | "exists": False, 44 | "emailrecovery": None, 45 | "phoneNumber": None, 46 | "others": None}) 47 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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: 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 | -------------------------------------------------------------------------------- /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 BaseException: 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 | -------------------------------------------------------------------------------- /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 BaseException: 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /holehe/modules/cms/atlassian.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def atlassian(email, client, out): 6 | name = "atlassian" 7 | domain = "atlassian.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': 'en,en-US;q=0.5', 15 | 'Referer': 'https://id.atlassian.com/', 16 | 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 17 | 'Origin': 'https://id.atlassian.com', 18 | 'DNT': '1', 19 | 'Connection': 'keep-alive', 20 | } 21 | try: 22 | r = await client.get("https://id.atlassian.com/login", headers=headers) 23 | data = {'csrfToken': r.text.split('{"csrfToken":"')[ 24 | 1].split('"')[0], 'username': email} 25 | except : 26 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 27 | "rateLimit": True, 28 | "exists": False, 29 | "emailrecovery": None, 30 | "phoneNumber": None, 31 | "others": None}) 32 | return None 33 | 34 | response = await client.post('https://id.atlassian.com/rest/check-username', headers=headers, data=data) 35 | if response.json()["action"] == "signup": 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": False, 45 | "exists": True, 46 | "emailrecovery": None, 47 | "phoneNumber": None, 48 | "others": None}) 49 | -------------------------------------------------------------------------------- /holehe/modules/social_media/tellonym.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def tellonym(email, client, out): 6 | name = "tellonym" 7 | domain = "tellonym.me" 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 | 'tellonym-client': 'web:0.51.1', 16 | 'content-type': 'application/json;charset=utf-8', 17 | 'Origin': 'https://tellonym.me', 18 | 'Connection': 'keep-alive', 19 | 'Referer': 'https://tellonym.me/register/email', 20 | 'TE': 'Trailers', 21 | } 22 | 23 | params = { 24 | 'email': str(email), 25 | 'errorMessage': '', 26 | 'limit': '25', 27 | } 28 | 29 | try: 30 | response = await client.get('https://api.tellonym.me/accounts/check', headers=headers, params=params) 31 | if "EMAIL_ALREADY_IN_USE" in response.text: 32 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 33 | "rateLimit": False, 34 | "exists": True, 35 | "emailrecovery": None, 36 | "phoneNumber": None, 37 | "others": None}) 38 | else: 39 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 40 | "rateLimit": False, 41 | "exists": False, 42 | "emailrecovery": None, 43 | "phoneNumber": None, 44 | "others": None}) 45 | except BaseException: 46 | out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, 47 | "rateLimit": True, 48 | "exists": False, 49 | "emailrecovery": None, 50 | "phoneNumber": None, 51 | "others": None}) 52 | -------------------------------------------------------------------------------- /holehe/modules/programing/github.py: -------------------------------------------------------------------------------- 1 | from holehe.core import * 2 | from holehe.localuseragent import * 3 | 4 | 5 | async def github(email, client, out): 6 | name = "github" 7 | domain = "github.com" 8 | method = "register" 9 | frequent_rate_limit=False 10 | 11 | freq = await client.get("https://github.com/join") 12 | token_regex = re.compile( 13 | r'\n