🏥 DOMAIN HEALTH ENGINE (from analysis_2.md): - New service: backend/app/services/domain_health.py - 4-layer analysis: 1. DNS: Nameservers, MX records, A records, parking NS detection 2. HTTP: Status codes, content, parking keyword detection 3. SSL: Certificate validity, expiration date, issuer 4. (WHOIS via existing domain_checker) 📊 HEALTH SCORING: - Score 0-100 based on all layers - Status: HEALTHY (🟢), WEAKENING (🟡), PARKED (🟠), CRITICAL (🔴) - Signals and recommendations for each domain 🔌 API ENDPOINTS: - GET /api/v1/domains/{id}/health - Full health report - POST /api/v1/domains/health-check?domain=x - Quick check any domain 🔐 PASSWORD RESET: - New script: backend/scripts/reset_admin_password.py - guggeryves@hotmail.com password: Pounce2024! PARKING DETECTION: - Known parking nameservers (Sedo, Afternic, etc.) - Page content keywords ('buy this domain', 'for sale', etc.)
5.8 KiB
Das ist der Kern deiner "Intelligence Platform".
Wenn du keine externen APIs nutzt, baust du dir im Grunde einen Gesundheits-Check für Domains. Dein System fungiert als digitaler Arzt, der regelmäßig den Puls der Domain fühlt. Wenn der Puls schwächer wird (Webseite offline, Mails kommen zurück), alarmierst du deinen User.
Hier ist der technische und logische Ablauf, wie die Pounce Domain-Analyse (Engine) funktioniert.
Wir teilen die Analyse in 4 Ebenen (Layers) auf:
Ebene 1: Der DNS-Check (Die Infrastruktur)
Das ist der "Wohnsitz"-Check. Wohnt hier noch wer?
Hier prüfst du die DNS-Einträge (Domain Name System). Das kostet dich fast keine Rechenleistung und geht extrem schnell.
Was dein Skript prüft:
- NS Records (Nameserver): Wer verwaltet die Domain?
- Signal: Wechselt der Nameserver von
ns1.hostpoint.ch(normales Hosting) zuns1.sedoparking.comoderns1.afternic.com? - Bedeutung: ALARM! Der Besitzer hat das Projekt aufgegeben und die Domain zum Verkauf ("Parking") freigegeben. Das ist der beste Moment für ein Kaufangebot.
- Signal: Wechselt der Nameserver von
- A Record (IP-Adresse): Zeigt die Domain auf einen Server?
- Signal: Eintrag wird gelöscht oder zeigt auf
0.0.0.0oder127.0.0.1. - Bedeutung: Die Domain ist "technisch tot". Sie löst nirgendwohin auf.
- Signal: Eintrag wird gelöscht oder zeigt auf
- MX Record (Mail Exchange): Kann die Domain E-Mails empfangen?
- Signal: MX Records verschwinden.
- Bedeutung: Die Firma nutzt keine E-Mails mehr unter dieser Domain. Ein sehr starkes Zeichen für Geschäftsaufgabe.
Ebene 2: Der HTTP-Check (Die Schaufenster-Analyse)
Das ist der visuelle Check. Ist der Laden noch offen?
Hier versucht dein Bot, die Webseite tatsächlich aufzurufen (wie ein Browser, aber ohne Bilder zu laden).
Was dein Skript prüft:
- Status Codes (Der Türsteher):
- 200 OK: Seite ist online.
- 404 Not Found: Seite existiert nicht (Datei fehlt).
- 500/503 Server Error: Die Webseite ist kaputt.
- Connection Refused / Timeout: Der Server ist abgeschaltet.
- Pounce Logic: Ein Wechsel von 200 auf Timeout über 3 Tage hinweg ist ein starkes "Drop"-Signal.
- Content-Length (Größe der Seite):
- Signal: Die Seite war früher 2MB groß, jetzt sind es nur noch 500 Bytes.
- Bedeutung: Der Inhalt wurde gelöscht, es steht nur noch "Coming Soon" oder eine weiße Seite da.
- Keyword-Scanning (Parked Detection):
- Das Problem: Park-Seiten (Werbung) geben oft auch einen "200 OK" Status zurück.
- Lösung: Dein Skript scannt den HTML-Text nach Wörtern wie: "Domain is for sale", "Inquire now", "Related Links", "Buy this domain".
- Bedeutung: Wenn diese Wörter auftauchen, markierst du die Domain automatisch als "On Sale / Parked".
Ebene 3: Der SSL-Check (Die Wartung)
Kümmert sich der Hausmeister noch?
Sicherheitszertifikate (SSL/TLS) müssen regelmäßig erneuert werden (oft alle 90 Tage bei Let's Encrypt, oder jährlich).
Was dein Skript prüft:
- Expiry Date des Zertifikats:
- Signal: Das Zertifikat ist gestern abgelaufen ("Expired").
- Bedeutung: Der Admin kümmert sich nicht mehr. Moderne Browser zeigen jetzt eine Warnung ("Nicht sicher"). Besucher bleiben aus. Das Projekt stirbt.
Ebene 4: Der Whois/RDAP Check (Der Vertrag)
Wann läuft der Mietvertrag aus?
Das ist der Check direkt bei der Registry (z.B. Verisign oder SWITCH). Da Whois oft Rate-Limits hat (du darfst nicht zu oft abfragen), machst du das seltener (z.B. 1x täglich). Nutze dafür am besten RDAP (Registration Data Access Protocol) – das ist der moderne, maschinenlesbare Nachfolger von Whois (JSON Format).
Was dein Skript prüft:
- Expiration Date: Wann läuft die Domain aus?
- Domain Status Codes (EPP Codes):
clientTransferProhibited: Alles normal (gesperrt gegen Diebstahl).clientHoldoderserverHold: JACKPOT! Die Domain wurde deaktiviert (meist wegen Nichtzahlung). Sie wird sehr bald gelöscht.redemptionPeriod: Die Gnadenfrist läuft. Der Besitzer muss Strafe zahlen, um sie zu retten. Tut er es nicht, droppt sie in ~30 Tagen.
Zusammenfassung: Der "Pounce Health Score"
Damit der User nicht mit technischen Daten erschlagen wird, fasst du all diese Checks in einem einfachen Status im Dashboard zusammen.
Beispiel-Logik für deine App:
-
Status: 🟢 HEALTHY (Aktiv)
- DNS: OK
- HTTP: 200 OK
- SSL: Valid
-
Status: 🟡 WEAKENING (Schwächelnd - Watchlist Alarm!)
- SSL: Expired ⚠️
- HTTP: 500 Error oder Content-Length drastisch gesunken ⚠️
- Nachricht an User: "Webseite ist kaputt gegangen und Zertifikat abgelaufen. Besitzer verliert Interesse."
-
Status: 🟠 PARKED (Zu Verkaufen)
- DNS: Zeigt auf Sedo/Afternic
- HTTP Body: Enthält "Buy this domain"
-
Status: 🔴 CRITICAL / PENDING DROP (Gleich weg)
- Whois Status:
redemptionPeriododerclientHold - DNS: NXDOMAIN (Existiert nicht mehr)
- Nachricht an User: "Domain wurde vom Registrar deaktiviert. Drop steht bevor!"
- Whois Status:
Technische Umsetzung (Tech Stack für Python)
Wenn du das bauen willst, brauchst du folgende Python-Libraries (alle Open Source):
- DNS:
dnspython(um Nameserver und MX Records abzufragen). - HTTP:
requests(um Status Codes und Content zu prüfen). - SSL:
ssl&socket(Standard-Libraries, um Zertifikatsdatum auszulesen). - Whois:
python-whois(einfacher Wrapper) oder direkte RDAP-Abfragen viarequests.
Pro-Tipp für deinen Server:
Da du viele Domains checkst, darfst du das nicht "hintereinander" machen (dauert zu lange). Du musst es asynchron machen (viele gleichzeitig). Schau dir dafür Python asyncio und aiohttp an. Damit kannst du Tausende Domains in wenigen Minuten prüfen.