45 lines
799 B
Go
45 lines
799 B
Go
package main
|
|
|
|
// This is transparant proxy
|
|
|
|
import (
|
|
"dns"
|
|
"fmt"
|
|
)
|
|
|
|
func send(m *dns.Msg) (buf []byte) {
|
|
if *verbose {
|
|
fmt.Printf("--> %s\n", m.Question[0].String())
|
|
}
|
|
|
|
var o *dns.Msg
|
|
var err error
|
|
for _, c := range qr {
|
|
o, err = c.Client.Exchange(m, c.Addr)
|
|
if *verbose {
|
|
if err == nil {
|
|
fmt.Printf("<-- %s\n", m.Question[0].String())
|
|
} else {
|
|
fmt.Printf("%s\n", err.Error())
|
|
}
|
|
}
|
|
}
|
|
if err == nil {
|
|
buf, _ = o.Pack()
|
|
}
|
|
return
|
|
}
|
|
|
|
// Return the configration
|
|
func NewFunkenSturm() *FunkenSturm {
|
|
f := new(FunkenSturm)
|
|
f.Setup = func() bool { return true } // no setup
|
|
f.Default = send
|
|
|
|
f.Funk = make([]*Funk, 1) // 1 Funk chain
|
|
f.Funk[0] = new(Funk)
|
|
f.Funk[0].Match = func(m *dns.Msg) (*dns.Msg, bool) { return m, true }
|
|
f.Funk[0].Action = send
|
|
return f
|
|
}
|