From cb8f1f178ad92898a77a293d368d65849d206497 Mon Sep 17 00:00:00 2001 From: jbergner Date: Fri, 17 Jan 2025 21:58:08 +0100 Subject: [PATCH] =?UTF-8?q?Weitere=20Tests=20f=C3=BCr=20IPv6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/main.go b/main.go index 7a38249..9db9850 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,12 @@ import ( "github.com/miekg/dns" ) +/* + +DNS-Status-Code übersicht: https://pkg.go.dev/github.com/miekg/dns@v1.1.62#TypeSOA + +*/ + type DB map[string]dns_entry var D map[string]dns_entry @@ -213,6 +219,57 @@ func handlerIP(w http.ResponseWriter, r *http.Request) { w.Write([]byte(remoteIP)) } +func handlerIPv6Pro(w http.ResponseWriter, r *http.Request) { + // Funktion zum Extrahieren der IP-Adresse + getIP := func(r *http.Request) string { + // Prüfen, ob X-Forwarded-For vorhanden ist (für Proxys) + xff := r.Header.Get("X-Forwarded-For") + if xff != "" { + // X-Forwarded-For kann mehrere IPs enthalten (Client, Proxy, etc.) + ips := strings.Split(xff, ",") + return strings.TrimSpace(ips[0]) + } + + // Prüfen, ob X-Real-IP vorhanden ist (eine alternative Proxy-Header-Option) + xRealIP := r.Header.Get("X-Real-IP") + if xRealIP != "" { + return xRealIP + } + + // Fallback: RemoteAddr verwenden + host, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + return r.RemoteAddr // Falls SplitHostPort fehlschlägt, gib die Raw-Adresse zurück + } + return host + } + + // Die IP-Adresse des Clients auslesen + clientIP := getIP(r) + + // Prüfen, ob IPv4 oder IPv6 + parsedIP := net.ParseIP(clientIP) + if parsedIP == nil { + http.Error(w, "Ungültige IP-Adresse", http.StatusInternalServerError) + return + } + + // Ausgabe der Adresse + if parsedIP.To4() != nil { + fmt.Fprintf(w, "Client IPv4-Adresse: %s\n", clientIP) + } else { + fmt.Fprintf(w, "Client IPv6-Adresse: %s\n", clientIP) + } + + // Optionale Ausgabe aller Header (Debugging) + fmt.Fprintln(w, "\nAlle HTTP-Header:") + for name, values := range r.Header { + for _, value := range values { + fmt.Fprintf(w, "%s: %s\n", name, value) + } + } +} + func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) { // Bereite die Antwort vor msg := new(dns.Msg) @@ -415,6 +472,7 @@ func main() { http.HandleFunc("/", handler) http.HandleFunc("/ip", handlerIP) + http.HandleFunc("/ipv6", handlerIPv6Pro) /* DNS-PART */