Funkensturm updates

This commit is contained in:
Miek Gieben 2011-12-20 12:53:47 +01:00
parent fb54a7f460
commit d6b1d886d1
3 changed files with 35 additions and 15 deletions

View File

@ -1,15 +1,32 @@
package main
// This is transparant proxy
import (
"dns"
"fmt"
)
func send(m *dns.Msg) (buf []byte) {
var o *dns.Msg
for _, c := range qr {
o, _ = c.Client.Exchange(m, c.Addr)
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()
}
buf, _ = o.Pack()
return
}

View File

@ -9,10 +9,7 @@ package main
import (
"dns"
"flag"
"log"
"os"
"os/signal"
"runtime/pprof"
"strings"
)
@ -76,14 +73,15 @@ func listenAndServe(add, net string) {
}
func main() {
sserver := flag.String("sserver", "127.0.0.1:8053", "set the listener address")
rserver := flag.String("rserver", "127.0.0.1:53", "remote server address(es), seperate with commas")
cpuprofile := flag.String("cpuprofile", "", "write cpu profile to file")
listen := flag.String("listen", "127.0.0.1:8053", "set the listener address")
server := flag.String("server", "127.0.0.1:53", "remote server address(es), seperate with commas")
verbose = flag.Bool("verbose", false, "Print packet as it flows through")
// cpuprofile := flag.String("cpuprofile", "", "write cpu profile to file")
flag.Usage = func() {
flag.PrintDefaults()
}
flag.Parse()
/*
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
@ -92,8 +90,9 @@ func main() {
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
*/
clients := strings.Split(*rserver, ",")
clients := strings.Split(*server, ",")
qr = make([]*FunkClient, len(clients))
for i, ra := range clients {
qr[i] = new(FunkClient)
@ -109,8 +108,8 @@ func main() {
}
dns.HandleFunc(".", serve)
go listenAndServe(*sserver, "tcp")
go listenAndServe(*sserver, "udp")
go listenAndServe(*listen, "tcp")
go listenAndServe(*listen, "udp")
forever:
for {

View File

@ -134,9 +134,13 @@ type Question struct {
Qclass uint16
}
func (q *Question) String() string {
func (q *Question) String() (s string) {
// prefix with ; (as in dig)
s := ";" + q.Name + "\t"
if len(q.Name) == 0 {
s = ";.\t" // root label
} else {
s = ";" + q.Name + "\t"
}
s = s + Class_str[q.Qclass] + "\t"
if _, ok := Rr_str[q.Qtype]; ok {
s += " " + Rr_str[q.Qtype]