Fix a bunch of examples
This commit is contained in:
parent
7c76690ad3
commit
5c548a6e93
|
@ -5,18 +5,14 @@ package main
|
|||
// (c) Miek Gieben - 2011
|
||||
import (
|
||||
"dns"
|
||||
"dns/resolver"
|
||||
"os"
|
||||
"fmt"
|
||||
"net"
|
||||
)
|
||||
|
||||
func main() {
|
||||
r := new(resolver.Resolver)
|
||||
qr := r.NewQuerier()
|
||||
r := new(dns.Resolver)
|
||||
r.FromFile("/etc/resolv.conf")
|
||||
var in resolver.Msg
|
||||
|
||||
if len(os.Args) != 2 {
|
||||
fmt.Printf("%s DOMAIN\n", os.Args[0])
|
||||
os.Exit(1)
|
||||
|
@ -24,64 +20,54 @@ func main() {
|
|||
|
||||
m := new(dns.Msg)
|
||||
m.Question = make([]dns.Question, 1)
|
||||
for _, a := range addresses(qr, os.Args[0]) {
|
||||
for _, a := range addresses(r, os.Args[0]) {
|
||||
// set the resolver to query the NS directly
|
||||
r.Servers = []string{a.String()}
|
||||
m.Question[0] = dns.Question{"version.bind.", dns.TypeTXT, dns.ClassCHAOS}
|
||||
qr <- resolver.Msg{m, nil, nil}
|
||||
in = <-qr
|
||||
if in.Dns != nil && in.Dns.Answer != nil {
|
||||
fmt.Printf("%v\n", in.Dns.Answer[0])
|
||||
in, _ := r.Query(m)
|
||||
if in != nil && in.Answer != nil {
|
||||
fmt.Printf("%v\n", in.Answer[0])
|
||||
}
|
||||
m.Question[0] = dns.Question{"hostname.bind.", dns.TypeTXT, dns.ClassCHAOS}
|
||||
qr <- resolver.Msg{m, nil, nil}
|
||||
in = <-qr
|
||||
if in.Dns != nil && in.Dns.Answer != nil {
|
||||
fmt.Printf("%v\n", in.Dns.Answer[0])
|
||||
in, _ = r.Query(m)
|
||||
if in != nil && in.Answer != nil {
|
||||
fmt.Printf("%v\n", in.Answer[0])
|
||||
}
|
||||
}
|
||||
|
||||
// Stop the resolver, send it a null mesg
|
||||
qr <- resolver.Msg{}
|
||||
<-qr
|
||||
}
|
||||
|
||||
func addresses(qr chan resolver.Msg, name string) []net.IP {
|
||||
func addresses(r *dns.Resolver, name string) []net.IP {
|
||||
m := new(dns.Msg)
|
||||
m.MsgHdr.RecursionDesired = true //only set this bit
|
||||
m.Question = make([]dns.Question, 1)
|
||||
var ips []net.IP
|
||||
|
||||
m.Question[0] = dns.Question{os.Args[1], dns.TypeA, dns.ClassINET}
|
||||
qr <- resolver.Msg{m, nil, nil}
|
||||
in := <-qr
|
||||
|
||||
if in.Dns == nil {
|
||||
fmt.Printf("Nothing recevied: %s\n", in.Error.String())
|
||||
in, err := r.Query(m)
|
||||
if in == nil {
|
||||
fmt.Printf("Nothing recevied: %s\n", err.String())
|
||||
return nil
|
||||
}
|
||||
|
||||
if in.Dns.Rcode != dns.RcodeSuccess {
|
||||
if in.Rcode != dns.RcodeSuccess {
|
||||
return nil
|
||||
}
|
||||
// Stuff must be in the answer section
|
||||
for _, a := range in.Dns.Answer {
|
||||
for _, a := range in.Answer {
|
||||
ips = append(ips, a.(*dns.RR_A).A)
|
||||
}
|
||||
m.Question[0] = dns.Question{os.Args[1], dns.TypeAAAA, dns.ClassINET}
|
||||
qr <- resolver.Msg{m, nil, nil}
|
||||
in = <-qr
|
||||
|
||||
if in.Dns == nil {
|
||||
fmt.Printf("Nothing recevied: %s\n", in.Error.String())
|
||||
in, err = r.Query(m)
|
||||
if in == nil {
|
||||
fmt.Printf("Nothing recevied: %s\n", err.String())
|
||||
return nil
|
||||
}
|
||||
|
||||
if in.Dns.Rcode != dns.RcodeSuccess {
|
||||
if in.Rcode != dns.RcodeSuccess {
|
||||
return nil
|
||||
}
|
||||
// Stuff must be in the answer section
|
||||
for _, a := range in.Dns.Answer {
|
||||
for _, a := range in.Answer {
|
||||
ips = append(ips, a.(*dns.RR_AAAA).AAAA)
|
||||
}
|
||||
return ips
|
||||
|
|
|
@ -10,16 +10,14 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"net"
|
||||
"dns"
|
||||
"dns/responder"
|
||||
"os/signal"
|
||||
)
|
||||
|
||||
type server responder.Server
|
||||
type server dns.Server
|
||||
|
||||
func (s *server) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
func (s *server) ReplyUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
if !inmsg.Unpack(in) {
|
||||
// FormError
|
||||
|
@ -41,20 +39,17 @@ func (s *server) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
|||
if !b {
|
||||
println("Failed to pack")
|
||||
}
|
||||
responder.SendUDP(out, c, a)
|
||||
dns.SendUDP(out, c, a)
|
||||
}
|
||||
|
||||
func (s *server) ResponderTCP(c *net.TCPConn, in []byte) {
|
||||
func (s *server) ReplyTCP(c *net.TCPConn, a net.Addr, in []byte) {
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
s := new(responder.Server)
|
||||
s.Address = "127.0.0.1"
|
||||
s.Port = "8053"
|
||||
var srv *server
|
||||
ch := make(chan os.Error)
|
||||
go s.NewResponder(srv, ch)
|
||||
ch := make(chan bool)
|
||||
go dns.ListenAndServe("127.0.0.1:8053", srv, ch)
|
||||
|
||||
forever:
|
||||
for {
|
||||
|
@ -62,7 +57,7 @@ forever:
|
|||
select {
|
||||
case <-signal.Incoming:
|
||||
println("Signal received, stopping")
|
||||
ch <- nil
|
||||
ch <- true
|
||||
break forever
|
||||
}
|
||||
}
|
||||
|
|
|
@ -133,6 +133,7 @@ func accepterTCP(l *net.TCPListener, ch chan *Request, quit chan bool) {
|
|||
panic("not reached")
|
||||
}
|
||||
|
||||
// Setup both the udp and tcp listener
|
||||
func ListenAndServe(addr string, handler Handler, q chan bool) os.Error {
|
||||
ta, err := net.ResolveTCPAddr(addr)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue