Port to new api
This commit is contained in:
parent
04469aaa8b
commit
bac16eb644
|
@ -4,6 +4,7 @@ chaos \
|
|||
axfr \
|
||||
reflect \
|
||||
funkensturm \
|
||||
xfrprx \
|
||||
ds2key \
|
||||
|
||||
all:
|
||||
|
|
|
@ -12,89 +12,41 @@ package main
|
|||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"net"
|
||||
// "net"
|
||||
"fmt"
|
||||
"dns"
|
||||
)
|
||||
|
||||
// Initiate an AXFR from the server. Everything is
|
||||
// hardcoded atm
|
||||
func doTransfer() []dns.Xfr {
|
||||
res := new(dns.Resolver)
|
||||
res.Servers[0] = "127.0.0.1:53"
|
||||
func reply(d *dns.Conn, i *dns.Msg) []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
c := make(chan dns.Xfr)
|
||||
m := new(dns.Msg)
|
||||
m.SetAxfrRequest("miek.nl", dns.ClassINET)
|
||||
|
||||
go res.Axfr(m, c)
|
||||
var ret []dns.Xfr
|
||||
for x:= range c {
|
||||
ret = append(ret, x)
|
||||
func handle(d *dns.Conn, i *dns.Msg) {
|
||||
if i.MsgHdr.Response == true {
|
||||
return
|
||||
}
|
||||
return ret
|
||||
answer := reply(d, i)
|
||||
d.Write(answer)
|
||||
}
|
||||
|
||||
func replyUDP(c *net.UDPConn, a net.Addr, i *dns.Msg) {
|
||||
if i.IsNotify() {
|
||||
//doNotifyReply()
|
||||
doTransfer()
|
||||
//if checkTransfer(rtf, key) {
|
||||
// Success
|
||||
// Notify remote end
|
||||
// send axfr
|
||||
//}
|
||||
|
||||
}
|
||||
out, ok := i.Pack()
|
||||
if ok {
|
||||
dns.SendUDP(out, c, a)
|
||||
func listen(addr string, e chan os.Error, tcp string) {
|
||||
switch tcp {
|
||||
case "tcp":
|
||||
err := dns.ListenAndServeTCP(addr, handle)
|
||||
e <- err
|
||||
case "udp":
|
||||
err := dns.ListenAndServeUDP(addr, handle)
|
||||
e <- err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func replyTCP(c *net.TCPConn, a net.Addr, i *dns.Msg) {
|
||||
out, ok := i.Pack()
|
||||
if ok {
|
||||
dns.SendTCP(out, c, a)
|
||||
}
|
||||
}
|
||||
|
||||
func tcp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveTCPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
l, err := net.ListenTCP("tcp", a)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
err = dns.ServeTCP(l, replyTCP)
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
func udp(addr string, e chan os.Error) {
|
||||
a, err := net.ResolveUDPAddr(addr)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
l, err := net.ListenUDP("udp", a)
|
||||
if err != nil {
|
||||
e <- err
|
||||
}
|
||||
err = dns.ServeUDP(l, replyUDP)
|
||||
e <- err
|
||||
return
|
||||
}
|
||||
|
||||
// Step 1. Create server that sees an notify and
|
||||
// performs an AXFR.
|
||||
// Test with ldns-notify
|
||||
|
||||
func main() {
|
||||
err := make(chan os.Error)
|
||||
go udp("127.0.0.1:8053", err)
|
||||
go tcp("127.0.0.1:8053", err)
|
||||
go listen("127.0.0.1:8053", err, "tcp")
|
||||
go listen("[::1]:8053", err, "udp")
|
||||
go listen("127.0.0.1:8053", err, "tcp")
|
||||
go listen("[::1]:8053", err, "udp")
|
||||
|
||||
forever:
|
||||
for {
|
||||
|
|
14
defaults.go
14
defaults.go
|
@ -1,5 +1,7 @@
|
|||
package dns
|
||||
|
||||
// Everything is assumed in the ClassINET class
|
||||
|
||||
// Create a reply packet.
|
||||
func (dns *Msg) SetReply(id uint16) {
|
||||
dns.MsgHdr.Id = id
|
||||
|
@ -9,6 +11,8 @@ func (dns *Msg) SetReply(id uint16) {
|
|||
dns.MsgHdr.Rcode = RcodeSuccess
|
||||
}
|
||||
|
||||
// IsReply?
|
||||
|
||||
// Create a notify packet.
|
||||
func (dns *Msg) SetNotify(z string, class uint16) {
|
||||
dns.MsgHdr.Opcode = OpcodeNotify
|
||||
|
@ -30,20 +34,20 @@ func (dns *Msg) IsNotify() bool {
|
|||
}
|
||||
|
||||
// Create a dns msg suitable for requesting an ixfr.
|
||||
func (dns *Msg) SetIxfr(z string, class uint16, serial uint32) {
|
||||
func (dns *Msg) SetIxfr(z string, serial uint32) {
|
||||
dns.Question = make([]Question, 1)
|
||||
dns.Ns = make([]RR, 1)
|
||||
s := new(RR_SOA)
|
||||
s.Hdr = RR_Header{z, TypeSOA, class, DefaultTtl, 0}
|
||||
s.Hdr = RR_Header{z, TypeSOA, ClassINET, DefaultTtl, 0}
|
||||
s.Serial = serial
|
||||
|
||||
dns.Question[0] = Question{z, TypeIXFR, class}
|
||||
dns.Question[0] = Question{z, TypeIXFR, ClassINET}
|
||||
dns.Ns[0] = s
|
||||
}
|
||||
|
||||
// Create a dns msg suitable for requesting an axfr.
|
||||
func (dns *Msg) SetAxfr(z string, class uint16) {
|
||||
func (dns *Msg) SetAxfr(z string) {
|
||||
dns.Question = make([]Question, 1)
|
||||
dns.Question[0] = Question{z, TypeAXFR, class}
|
||||
dns.Question[0] = Question{z, TypeAXFR, ClassINET}
|
||||
}
|
||||
// IsIxfr/IsAxfr?
|
||||
|
|
Loading…
Reference in New Issue