PTR Fix + IPv6 Fix
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
"friedhof8.hilden.de.": {
|
||||
"dns": "friedhof8.hilden.de",
|
||||
"ipv4": "1.1.1.2",
|
||||
"ipv6": "",
|
||||
"ipv6": "2001::5b:41",
|
||||
"user": "friedhof",
|
||||
"token": "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
|
||||
"lastseen": "2025-01-14 06:53:45.7690632 +0100 CET m=+27.298316601"
|
||||
|
51
main.go
51
main.go
@@ -6,6 +6,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
@@ -79,6 +80,41 @@ func VerifyToken(token, storedHash string) bool {
|
||||
return HashToken(token) == storedHash
|
||||
}
|
||||
|
||||
func reverseString(s string) string {
|
||||
// Konvertiere den String in eine Rune-Slice, um Unicode-Zeichen zu unterstützen
|
||||
runes := []rune(s)
|
||||
n := len(runes)
|
||||
// Tausche die Elemente, um den String umzudrehen
|
||||
for i := 0; i < n/2; i++ {
|
||||
runes[i], runes[n-1-i] = runes[n-1-i], runes[i]
|
||||
}
|
||||
// Konvertiere die Rune-Slice zurück in einen String
|
||||
return string(runes)
|
||||
}
|
||||
|
||||
func IPv6ToPTR(ipv6 string) (string, error) {
|
||||
// Parse the IPv6 address to validate it
|
||||
parsedIP := net.ParseIP(ipv6)
|
||||
if parsedIP == nil || parsedIP.To16() == nil || parsedIP.To4() != nil {
|
||||
return "", fmt.Errorf("invalid IPv6 address: %s", ipv6)
|
||||
}
|
||||
|
||||
// Expand the IPv6 address to its full form
|
||||
expanded := parsedIP.To16()
|
||||
|
||||
// Convert to a reversed nibble format for PTR
|
||||
var nibbles []string
|
||||
for i := len(expanded) - 1; i >= 0; i-- {
|
||||
hexByte := fmt.Sprintf("%02x", expanded[i])
|
||||
// Add the nibbles in reverse order
|
||||
nibbles = append(nibbles, string(hexByte[1]), string(hexByte[0]))
|
||||
}
|
||||
|
||||
// Join the nibbles with dots and append the reverse domain
|
||||
reversed := strings.Join(nibbles, ".")
|
||||
return reversed + ".ip6.arpa.", nil
|
||||
}
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
Dns := r.URL.Query().Get("DDNS")
|
||||
Ip := r.URL.Query().Get("IP")
|
||||
@@ -174,8 +210,19 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
|
||||
}
|
||||
case dns.TypePTR:
|
||||
for a, b := range D {
|
||||
fmt.Println(b.Ipv4, q.Name)
|
||||
if b.Ipv4 == q.Name {
|
||||
|
||||
iptocheck := reverseString(b.Ipv4)
|
||||
fmt.Println(iptocheck, q.Name)
|
||||
if iptocheck+".in-addr.arpa." == q.Name {
|
||||
rr, err := dns.NewRR(q.Name + " PTR " + a)
|
||||
if err == nil {
|
||||
msg.Answer = append(msg.Answer, rr)
|
||||
}
|
||||
}
|
||||
|
||||
ip6tocheck, _ := IPv6ToPTR(b.Ipv6)
|
||||
fmt.Println(ip6tocheck, q.Name)
|
||||
if ip6tocheck == q.Name {
|
||||
rr, err := dns.NewRR(q.Name + " PTR " + a)
|
||||
if err == nil {
|
||||
msg.Answer = append(msg.Answer, rr)
|
||||
|
Reference in New Issue
Block a user