mirror of
https://github.com/SEPPDROID/JellyCAT.git
synced 2025-10-26 01:44:23 +00:00
Some testing & cleanup
This commit is contained in:
@@ -13,20 +13,17 @@ import (
|
||||
)
|
||||
|
||||
func dnsResolver() {
|
||||
// Setting up the dns server to listen on 53, currently hardcoded because that's the default dns port.
|
||||
server := &dns.Server{Addr: ":53", Net: "udp"}
|
||||
dns.HandleFunc(".", handleDNSRequest)
|
||||
|
||||
go func() {
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
fmt.Println("DNS.SERVER-ERR: Failed to start DNS server:", err)
|
||||
// Just exit if it errors, since it's the main function of using this "sthack"
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
|
||||
fmt.Println("DNS.SERVER-LOG: DNS server is ready and listening on *:53")
|
||||
|
||||
}
|
||||
|
||||
func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
|
||||
@@ -35,32 +32,46 @@ func handleDNSRequest(w dns.ResponseWriter, r *dns.Msg) {
|
||||
m.Compress = false
|
||||
|
||||
for _, q := range r.Question {
|
||||
if (q.Name == config.HijackApp || q.Name == config.HijackImg || q.Name == "jcathost.dns.") && (q.Qtype == dns.TypeA || q.Qtype == dns.TypeAAAA) {
|
||||
// Resolve hijack domain app to the IP addresses from the config
|
||||
// Had to add some trippy quadA detection, since ipv6 (AAAA) requests would end up funky
|
||||
fmt.Print("\033[A\r")
|
||||
fmt.Println("DNS.SERVER-LOG: DNS LOOKUP Hijacked for", q.Name)
|
||||
resetCommand()
|
||||
rr, err := dns.NewRR(fmt.Sprintf("%s IN A %s", q.Name, config.HijackIP))
|
||||
if err == nil {
|
||||
m.Answer = append(m.Answer, rr)
|
||||
}
|
||||
if shouldHijack(q.Name, q.Qtype) {
|
||||
handleHijackedRequest(q.Name)
|
||||
addHijackedAnswer(m, q.Name)
|
||||
} else {
|
||||
// Forward other requests to the IP address from the config
|
||||
resolver := &dns.Client{}
|
||||
resp, _, err := resolver.Exchange(r, net.JoinHostPort(config.ForwardIP, "53"))
|
||||
fmt.Print("\033[A\r")
|
||||
fmt.Println("DNS.SERVER-LOG: DNS LOOKUP forwarded for", q.Name, "| uninterested")
|
||||
resetCommand()
|
||||
if err == nil {
|
||||
m.Answer = append(m.Answer, resp.Answer...)
|
||||
}
|
||||
forwardRequest(m, r)
|
||||
}
|
||||
}
|
||||
|
||||
// Not sure if this is correct, my IDE autocorrect wanted to do it this way...
|
||||
err := w.WriteMsg(m)
|
||||
if err != nil {
|
||||
return
|
||||
fmt.Print("\033[A\r")
|
||||
fmt.Println("DNS.SERVER-ERR: Error writing response:", err)
|
||||
resetCommand()
|
||||
}
|
||||
}
|
||||
|
||||
func shouldHijack(name string, qtype uint16) bool {
|
||||
return (name == config.HijackApp || name == config.HijackImg || name == "jcathost.dns.") && (qtype == dns.TypeA || qtype == dns.TypeAAAA)
|
||||
}
|
||||
|
||||
func handleHijackedRequest(name string) {
|
||||
fmt.Print("\033[A\r")
|
||||
fmt.Println("DNS.SERVER-LOG: DNS LOOKUP Hijacked for", name)
|
||||
resetCommand()
|
||||
}
|
||||
|
||||
func addHijackedAnswer(m *dns.Msg, name string) {
|
||||
rr, err := dns.NewRR(fmt.Sprintf("%s IN A %s", name, config.HijackIP))
|
||||
if err == nil {
|
||||
m.Answer = append(m.Answer, rr)
|
||||
}
|
||||
}
|
||||
|
||||
func forwardRequest(m *dns.Msg, r *dns.Msg) {
|
||||
resolver := &dns.Client{}
|
||||
resp, _, err := resolver.Exchange(r, net.JoinHostPort(config.ForwardIP, "53"))
|
||||
if err == nil {
|
||||
m.Answer = append(m.Answer, resp.Answer...)
|
||||
}
|
||||
fmt.Print("\033[A\r")
|
||||
fmt.Println("DNS.SERVER-LOG: DNS LOOKUP forwarded for", r.Question[0].Name, "| uninterested")
|
||||
resetCommand()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user