Domainagentur
Domainer
Mit Adressen wäre interessant, aber so leider nutzlos.
Abfragen usw… gibts ja bereits die bekannten Systeme/Tools.
Abfragen usw… gibts ja bereits die bekannten Systeme/Tools.
nein, keine SicherheitslückeDann lass ich mal lieber die Finger davon![]()
DNSÜber welche Methode wurde verifiziert dass sie registriert sind/waren?
Das ist alles andere als nutzlos wenn man dafür einen usecase hat. Es gibt keine Zonefiles von .de und die Dienste, die Martin ansprach, sind nicht vollständig. Ich will nicht mutmaßen wo diese Liste herkommt. Ich hätte die zu gerne, aber werde dafür nicht someK ausgeben.Mit Adressen wäre interessant, aber so leider nutzlos.
Abfragen usw… gibts ja bereits die bekannten Systeme/Tools.
1000 .com Domains? Die 2 Zeichen Kombinationen alleine sind doch schon knapp 700 Kombinationen.kann dir ne list mit 1000 .com domains verkaufen. Mit Garantie das 95% noch registriet sind. Gibt da in Excel so ein super feature das einfach hochzählt. Und da angeblich alle 1-3 zeicher besetzt sind sollte das passen![]()
Biete eine .de-Domainliste mit 17,53 Mio aktuell registrierten Domains an.
Domain Checker Script
Version: 1.0
Author: Christopher Hüneke
Date: 13.08.2024
Description:
This script checks the registration status and expiration date of domains
with a specified length and top-level domain (TLD). It uses asynchronous
processing for improved performance and saves the results to CSV files.
Usage:
python domain_checker.py [options]
Options:
--length INT Length of the domain name (default: 2)
--tld STRING Top-level domain (default: 'de')
--max-records INT Maximum number of entries per CSV file (default: 99999)
--output-dir PATH Directory for output files (default: 'output')
--max-concurrent INT Maximum number of concurrent requests (default: 10)
Requirements:
- Python 3.7+
- whois
- aiohttp
- tqdm
Disclaimer:
This script is for educational and research purposes only. Use responsibly and in accordance
with all applicable laws and terms of service of domain registrars. USE AT YOUR OWN RISK.
# Script
import whois
import itertools
import time
import csv
import logging
import asyncio
import aiohttp
from typing import Optional, Tuple, List
from tqdm import tqdm
import argparse
from pathlib import Path
# Konfiguration des Loggings
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
async def check_domain(domain: str, session: aiohttp.ClientSession) -> Optional[Tuple[str, str]]:
"""
Überprüft eine Domain asynchron auf ihren Registrierungsstatus und Ablaufdatum.
:param domain: Die zu überprüfende Domain
:param session: Eine aiohttp ClientSession für HTTP-Anfragen
:return: Ein Tupel mit Domain und Ablaufdatum oder None bei Fehlern
"""
try:
# Verwendung von python-whois für robustere WHOIS-Abfragen
w = whois.whois(domain)
if w.domain_name:
expiration_date = w.expiration_date
if isinstance(expiration_date, list):
expiration_date = expiration_date[0]
logger.info(f"Domain registriert: {domain}, Ablaufdatum: {expiration_date}")
return domain, str(expiration_date)
else:
return None
except (whois.parser.PywhoisError, Exception) as e:
logger.error(f"Fehler bei der Abfrage von {domain}: {e}")
return None
def generate_domains(length: int, tld: str) -> str:
"""
Generiert Domains mit der angegebenen Länge und TLD.
:param length: Länge des Domainnamens (ohne TLD)
:param tld: Top-Level-Domain (z.B. 'de')
:yield: Generierte Domainnamen
"""
characters = 'abcdefghijklmnopqrstuvwxyz'
for combo in itertools.product(characters, repeat=length):
yield ''.join(combo) + f'.{tld}'
async def save_to_csv(data: List[Tuple[str, str]], file_index: int, output_dir: Path):
"""
Speichert die gefundenen Domains und ihre Ablaufdaten in einer CSV-Datei.
:param data: Liste von Tupeln (Domain, Ablaufdatum)
:param file_index: Index für den Dateinamen
:param output_dir: Verzeichnis zum Speichern der CSV-Dateien
"""
filename = output_dir / f'domains{file_index:07d}.csv'
with open(filename, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Domain', 'Ablaufdatum'])
writer.writerows(data)
logger.info(f"Datei {filename} gespeichert mit {len(data)} Einträgen.")
async def main(length: int, tld: str, max_records: int, output_dir: Path, max_concurrent: int):
"""
Hauptfunktion zum Überprüfen von Domains und Speichern der Ergebnisse.
:param length: Länge des Domainnamens (ohne TLD)
:param tld: Top-Level-Domain (z.B. 'de')
:param max_records: Maximale Anzahl von Einträgen pro CSV-Datei
:param output_dir: Verzeichnis zum Speichern der CSV-Dateien
:param max_concurrent: Maximale Anzahl gleichzeitiger Anfragen
"""
output_dir.mkdir(parents=True, exist_ok=True)
found_domains = []
file_index = 1
semaphore = asyncio.Semaphore(max_concurrent)
async with aiohttp.ClientSession() as session:
tasks = []
for domain in tqdm(generate_domains(length, tld)):
async with semaphore:
task = asyncio.create_task(check_domain(domain, session))
tasks.append(task)
if len(tasks) >= max_records:
for completed_task in asyncio.as_completed(tasks):
result = await completed_task
if result:
found_domains.append(result)
await save_to_csv(found_domains, file_index, output_dir)
found_domains = []
file_index += 1
tasks = []
# Verarbeitung der restlichen Tasks
for completed_task in asyncio.as_completed(tasks):
result = await completed_task
if result:
found_domains.append(result)
# Speichern der restlichen Domains
if found_domains:
await save_to_csv(found_domains, file_index, output_dir)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Domain-Checker")
parser.add_argument("--length", type=int, default=2, help="Länge des Domainnamens")
parser.add_argument("--tld", type=str, default="de", help="Top-Level-Domain")
parser.add_argument("--max-records", type=int, default=99999, help="Maximale Anzahl von Einträgen pro CSV-Datei")
parser.add_argument("--output-dir", type=Path, default=Path("output"), help="Verzeichnis für die Ausgabedateien")
parser.add_argument("--max-concurrent", type=int, default=10, help="Maximale Anzahl gleichzeitiger Anfragen")
args = parser.parse_args()
asyncio.run(main(args.length, args.tld, args.max_records, args.output_dir, args.max_concurrent))
pip install aiohttp tqdm
python script.py --length 3 --tld com --max-records 50000 --output-dir ./domain_results --max-concurrent 20
Das wird nicht funktionieren.
Forsche mal in Richtung Ratelimiting.
Und hacke mal 37pow10 in deinen Taschenrechner, das ist die Anzahl der möglichen Domainnamen für 10 Stellen.
Bruteforce macht wirklich nur sehr sehr bedingt Sinn.
Ratelimiting gibt dir ein timeout nach 1000 Abfragen, wenn du zu schnell abfragst. musst halt den korrekten delay reinhauen und notfalls nach 999 URLs die Proxy wechseln.
Das ist nicht meine Liste.Deine Liste macht in 6 Monaten keinen Sinn mehr, weil die Daten der letzten 6 Monate fehlen.