aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-12-28 21:24:52 +0100
committerMartin Polden <mpolden@mpolden.no>2019-12-28 21:24:52 +0100
commitf7a6fff7a141fa4c8f6602352c1afd4a5d731e5a (patch)
treef0797dc56fd00a0ebeec513e8463c49f30a55659
parentf5793fc43b4e4f8a7fa2401618c9ee777a12a66c (diff)
Simplify remote IP parsing
-rw-r--r--dns/proxy.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/dns/proxy.go b/dns/proxy.go
index 573afce..f74aa14 100644
--- a/dns/proxy.go
+++ b/dns/proxy.go
@@ -1,6 +1,7 @@
package dns
import (
+ "fmt"
"net"
"strings"
"time"
@@ -174,14 +175,17 @@ func answers(msg *dns.Msg) []string {
func (p *Proxy) writeMsg(w dns.ResponseWriter, msg *dns.Msg, hijacked bool) {
if p.logMode == LogAll || (hijacked && p.logMode == LogHijacked) {
- ip, _, err := net.SplitHostPort(w.RemoteAddr().String())
- if err != nil {
- p.logger.Printf("failed to parse ip: %s", w.RemoteAddr().String())
- } else {
- answers := answers(msg)
- remoteAddr := net.ParseIP(ip)
- p.logger.Record(remoteAddr, hijacked, msg.Question[0].Qtype, msg.Question[0].Name, answers...)
+ var ip net.IP
+ switch v := w.RemoteAddr().(type) {
+ case *net.UDPAddr:
+ ip = v.IP
+ case *net.TCPAddr:
+ ip = v.IP
+ default:
+ panic(fmt.Sprintf("unexpected remote address type %T", v))
}
+ answers := answers(msg)
+ p.logger.Record(ip, hijacked, msg.Question[0].Qtype, msg.Question[0].Name, answers...)
}
w.WriteMsg(msg)
}