diff options
| author | Handingkang <[email protected]> | 2023-10-10 15:53:05 +0800 |
|---|---|---|
| committer | Handingkang <[email protected]> | 2023-10-10 15:53:05 +0800 |
| commit | bed559d545fcc68ff9af4ac9df2502e2a6c93363 (patch) | |
| tree | 2bb89196ede997469014c1270736bbd7a6f6375f | |
| parent | 5b26c980df3df3ae1de66a545243d020fdc59679 (diff) | |
新增出入口关联挖掘功能
| -rw-r--r-- | Ohmyfile | 20 | ||||
| -rw-r--r-- | core/dnsserver/zdirectives.go | 1 | ||||
| -rw-r--r-- | core/plug/zplugin.go | 1 | ||||
| -rw-r--r-- | plugin.cfg | 3 | ||||
| -rw-r--r-- | plugin/rtest/rtest.go | 110 | ||||
| -rw-r--r-- | plugin/rtest/setup.go | 28 |
6 files changed, 144 insertions, 19 deletions
@@ -1,20 +1,4 @@ -#.:53 { -# v64dns n64.top { -# v4ns ns4-1 8.217.120.200 -# v6ns ns6-1 240b:4001:21b:d301:951b:8de:3cd7:c0e5 -# chain v4-1 v6-1 -# ip-embed -# chain-mlen 4 -# analyze neo4j http://localhost:7447 neo4j hdk19990815 -# } -#} - - -#prober:2115 { -# qname -# probe53 -#} - .:53 { - atk comm.a.net ns.a.net 1.2.3.4 v6.b.net ns.b.net fe80::6cc1:aafd:5039:7b2b 10 + debug + rtest ns6-1.n64.top. 2001::1 from_to.csv }
\ No newline at end of file diff --git a/core/dnsserver/zdirectives.go b/core/dnsserver/zdirectives.go index 6844d1f..ba08d92 100644 --- a/core/dnsserver/zdirectives.go +++ b/core/dnsserver/zdirectives.go @@ -19,4 +19,5 @@ var Directives = []string{ "v64dns", "whoami", "atk", + "rtest", } diff --git a/core/plug/zplugin.go b/core/plug/zplugin.go index 13c77c0..2892482 100644 --- a/core/plug/zplugin.go +++ b/core/plug/zplugin.go @@ -13,6 +13,7 @@ import ( _ "ohmydns2/plugin/prober/probe53" _ "ohmydns2/plugin/prober/qname" _ "ohmydns2/plugin/prometheus" + _ "ohmydns2/plugin/rtest" _ "ohmydns2/plugin/v64dns" _ "ohmydns2/plugin/whoami" ) @@ -8,4 +8,5 @@ v64dns:v64dns whoami:whoami qname:qname probe53:probe53 -atk:atk
\ No newline at end of file +atk:atk +rtest:rtest
\ No newline at end of file diff --git a/plugin/rtest/rtest.go b/plugin/rtest/rtest.go new file mode 100644 index 0000000..011b2db --- /dev/null +++ b/plugin/rtest/rtest.go @@ -0,0 +1,110 @@ +package rtest + +import ( + "context" + "encoding/csv" + "fmt" + "github.com/miekg/dns" + "net" + "ohmydns2/plugin/pkg/request" + "os" + "strings" + "time" +) + +type Rtest struct { + addr string + ns string + datachan chan []string +} + +func (r Rtest) ServeDNS(ctx context.Context, writer dns.ResponseWriter, msg *dns.Msg) (int, error) { + state := request.Request{W: writer, Req: msg} + m := new(dns.Msg) + m.SetReply(msg) + m.Authoritative = true + // 应对0x20 + q := strings.ToLower(state.QName()) + qlist := strings.Split(q, ".") + // 符合要求的域名 + if len(qlist) >= 4 { + // 1.入口 + _ = strings.ReplaceAll(qlist[len(qlist)-5], "-", ":") + // 2.出口 + _ = state.IP() + // 3.记录关联 + r.writeData([]string{"20011", "127001"}) + // 4.返回响应 + m = r.response(m, state) + err := writer.WriteMsg(m) + if err != nil { + log.Info(err.Error()) + return dns.RcodeServerFailure, err + } + } + return 0, nil +} + +func (r Rtest) Name() string { + return "rtest" +} + +func (r Rtest) newCSVwriterAndWrite(path string) chan []string { + f, err := os.OpenFile("./"+time.Now().Format("2006_01_02-15_03_04")+"_"+path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) + if err != nil { + fmt.Println("Error: ", err) + return nil + } + + csvWriter := *csv.NewWriter(f) + csvWriter.UseCRLF = true + var header = []string{"from", "to"} + err = csvWriter.Write(header) + if err != nil { + return nil + } + csvWriter.Flush() + datachan := make(chan []string, 10) + go func() { + defer func(f *os.File) { + err = f.Close() + if err != nil { + log.Errorf("%v", err.Error()) + } + }(f) + for i := range datachan { + log.Debug(i) + err = csvWriter.Write(i) + if err != nil { + log.Errorf("%v", err.Error()) + return + } + csvWriter.Flush() + } + }() + return datachan +} + +func (r Rtest) writeData(data []string) { + r.datachan <- data +} + +func (r Rtest) response(msg *dns.Msg, state request.Request) *dns.Msg { + //返回AAAA记录 + msg.Rcode = dns.RcodeSuccess + aaaa := new(dns.AAAA) + aaaa.Hdr = dns.RR_Header{Name: state.QName(), Class: dns.ClassINET, Ttl: 10, Rrtype: dns.TypeAAAA} + aaaa.AAAA = net.ParseIP(r.addr) + msg.Answer = append(msg.Answer, aaaa) + //授权记录 + rec := new(dns.NS) + rec.Hdr = dns.RR_Header{Name: "rtest.n64.top.", Class: dns.ClassINET, Ttl: 10, Rrtype: dns.TypeNS} + rec.Ns = r.ns + msg.Ns = append(msg.Ns, rec) + //胶水记录 + recaddr := new(dns.AAAA) + recaddr.Hdr = dns.RR_Header{Name: r.ns, Class: dns.ClassINET, Ttl: 10, Rrtype: dns.TypeAAAA} + recaddr.AAAA = net.ParseIP(state.LocalIP()) + msg.Extra = append(msg.Extra, recaddr) + return msg +} diff --git a/plugin/rtest/setup.go b/plugin/rtest/setup.go new file mode 100644 index 0000000..8e7c1f0 --- /dev/null +++ b/plugin/rtest/setup.go @@ -0,0 +1,28 @@ +package rtest + +import ( + "github.com/coredns/caddy" + "ohmydns2/core/dnsserver" + "ohmydns2/plugin" + log2 "ohmydns2/plugin/pkg/log" +) + +func init() { plugin.Register("rtest", setup) } + +func setup(c *caddy.Controller) error { + rt := new(Rtest) + c.Next() + + args := c.RemainingArgs() + rt.addr = args[1] + rt.ns = args[0] + rt.datachan = rt.newCSVwriterAndWrite(args[2]) + + dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler { + return rt + }) + + return nil +} + +var log = log2.NewWithPlugin("rtest") |
