Skip to content

Commit 19026f2

Browse files
committed
feat: coredns axfr for dump records
1 parent f3801f8 commit 19026f2

File tree

7 files changed

+102
-3
lines changed

7 files changed

+102
-3
lines changed

cmd/axfr/axfr.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package axfr
2+
3+
import (
4+
"os"
5+
"strings"
6+
7+
command "github.com/esonhugh/k8spider/cmd"
8+
"github.com/esonhugh/k8spider/define"
9+
"github.com/esonhugh/k8spider/pkg"
10+
"github.com/miekg/dns"
11+
log "github.com/sirupsen/logrus"
12+
"github.com/spf13/cobra"
13+
)
14+
15+
func init() {
16+
command.RootCmd.AddCommand(AxfrCmd)
17+
}
18+
19+
var AxfrCmd = &cobra.Command{
20+
Use: "axfr",
21+
Short: "axfr is a command to dump every record from dns server",
22+
Run: func(cmd *cobra.Command, args []string) {
23+
24+
if command.Opts.Zone == "" {
25+
log.Warn("zone can't empty")
26+
return
27+
}
28+
zone := dns.Fqdn(command.Opts.Zone)
29+
30+
dnsServer := command.Opts.DnsServer
31+
if command.Opts.DnsServer == "" {
32+
dnsServer = "ns.dns." + command.Opts.Zone + ":53"
33+
} else if len(strings.Split(dnsServer, ":")) < 2 {
34+
dnsServer = dnsServer + ":53"
35+
}
36+
37+
log.Debugf("same command: dig axfr %v @%v", zone, dnsServer)
38+
var records define.Records = pkg.DumpAXFR(zone, dnsServer)
39+
if command.Opts.OutputFile != "" {
40+
f, err := os.OpenFile(command.Opts.OutputFile, os.O_CREATE|os.O_WRONLY, 0644)
41+
if err != nil {
42+
log.Warnf("OpenFile failed: %v", err)
43+
}
44+
defer f.Close()
45+
records.Print(log.StandardLogger().Writer(), f)
46+
} else {
47+
records.Print(log.StandardLogger().Writer())
48+
}
49+
50+
},
51+
}

define/record.go

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type Record struct {
1414
Ip net.IP
1515
SvcDomain string
1616
SrvRecords []SrvRecord
17+
Extra string `json:"Extra,omitempty"`
1718
}
1819

1920
type SrvRecord struct {

go.mod

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/esonhugh/k8spider
33
go 1.19
44

55
require (
6+
github.com/miekg/dns v1.1.58
67
github.com/sirupsen/logrus v1.9.0
78
github.com/spf13/cobra v1.5.0
89
)
@@ -11,5 +12,8 @@ require (
1112
github.com/inconshreveable/mousetrap v1.0.0 // indirect
1213
github.com/spf13/pflag v1.0.5 // indirect
1314
github.com/stretchr/testify v1.8.0 // indirect
14-
golang.org/x/sys v0.13.0 // indirect
15+
golang.org/x/mod v0.14.0 // indirect
16+
golang.org/x/net v0.20.0 // indirect
17+
golang.org/x/sys v0.16.0 // indirect
18+
golang.org/x/tools v0.17.0 // indirect
1519
)

go.sum

+11-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
44
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
55
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
66
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
7+
github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
8+
github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
79
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
810
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
911
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -19,9 +21,16 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
1921
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
2022
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
2123
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
24+
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
25+
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
26+
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
27+
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
28+
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
2229
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
23-
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
24-
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
30+
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
31+
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
32+
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
33+
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
2534
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
2635
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
2736
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

main.go

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"github.com/esonhugh/k8spider/cmd"
55
_ "github.com/esonhugh/k8spider/cmd/all"
6+
_ "github.com/esonhugh/k8spider/cmd/axfr"
67
_ "github.com/esonhugh/k8spider/cmd/service"
78
_ "github.com/esonhugh/k8spider/cmd/subnet"
89
)

pkg/scanner.go

+28
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package pkg
22

33
import (
44
"net"
5+
"strings"
56

67
"github.com/esonhugh/k8spider/define"
8+
"github.com/miekg/dns"
79
log "github.com/sirupsen/logrus"
810
)
911

@@ -37,3 +39,29 @@ func ScanSvcForPorts(records []define.Record) []define.Record {
3739
}
3840
return records
3941
}
42+
43+
// default target should be zone
44+
func DumpAXFR(target string, dnsServer string) []define.Record {
45+
t := new(dns.Transfer)
46+
m := new(dns.Msg)
47+
m.SetAxfr(target)
48+
ch, err := t.In(m, dnsServer)
49+
if err != nil {
50+
log.Fatalf("Transfer failed: %v", err)
51+
}
52+
var records []define.Record
53+
for rr := range ch {
54+
if rr.Error != nil {
55+
log.Errorf("Error: %v", rr.Error)
56+
continue
57+
}
58+
for _, r := range rr.RR {
59+
records = append(records, define.Record{
60+
SvcDomain: r.Header().Name,
61+
Extra: strings.Join(strings.Split(r.String(), "\t"), " "),
62+
})
63+
}
64+
log.Debugf("Record: %v", rr.RR)
65+
}
66+
return records
67+
}

pkg/utils.go

+5
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,8 @@ func SRVRecord(svcDomain string) (string, []*net.SRV, error) {
4747
cname, srvs, err := NetResolver.LookupSRV(context.Background(), "", "", svcDomain)
4848
return cname, srvs, err
4949
}
50+
51+
func ARecord(domain string) (ips []net.IP, err error) {
52+
ips, err = net.LookupIP(domain)
53+
return
54+
}

0 commit comments

Comments
 (0)