🏥 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.)
112 lines
5.8 KiB
Markdown
112 lines
5.8 KiB
Markdown
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:**
|
||
1. **NS Records (Nameserver):** Wer verwaltet die Domain?
|
||
* *Signal:* Wechselt der Nameserver von `ns1.hostpoint.ch` (normales Hosting) zu `ns1.sedoparking.com` oder `ns1.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.
|
||
2. **A Record (IP-Adresse):** Zeigt die Domain auf einen Server?
|
||
* *Signal:* Eintrag wird gelöscht oder zeigt auf `0.0.0.0` oder `127.0.0.1`.
|
||
* *Bedeutung:* Die Domain ist "technisch tot". Sie löst nirgendwohin auf.
|
||
3. **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:**
|
||
1. **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.
|
||
2. **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.
|
||
3. **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:**
|
||
1. **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:**
|
||
1. **Expiration Date:** Wann läuft die Domain aus?
|
||
2. **Domain Status Codes (EPP Codes):**
|
||
* `clientTransferProhibited`: Alles normal (gesperrt gegen Diebstahl).
|
||
* `clientHold` oder `serverHold`: **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: `redemptionPeriod` oder `clientHold`
|
||
* DNS: NXDOMAIN (Existiert nicht mehr)
|
||
* *Nachricht an User:* "Domain wurde vom Registrar deaktiviert. Drop steht bevor!"
|
||
|
||
### Technische Umsetzung (Tech Stack für Python)
|
||
|
||
Wenn du das bauen willst, brauchst du folgende Python-Libraries (alle Open Source):
|
||
|
||
1. **DNS:** `dnspython` (um Nameserver und MX Records abzufragen).
|
||
2. **HTTP:** `requests` (um Status Codes und Content zu prüfen).
|
||
3. **SSL:** `ssl` & `socket` (Standard-Libraries, um Zertifikatsdatum auszulesen).
|
||
4. **Whois:** `python-whois` (einfacher Wrapper) oder direkte RDAP-Abfragen via `requests`.
|
||
|
||
**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. |