Weitere Tests für IPv6
All checks were successful
release-tag / release-image (push) Successful in 45s

This commit is contained in:
2025-01-17 21:58:08 +01:00
parent ffaa04c46c
commit cb8f1f178a

58
main.go
View File

@@ -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 */