mirror of
https://github.com/netchx/netch.git
synced 2026-03-14 17:43:18 +08:00
Add aiodns
This commit is contained in:
1
Other/aiodns/README.md
Normal file
1
Other/aiodns/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# aiodns
|
||||
48
Other/aiodns/dns.go
Normal file
48
Other/aiodns/dns.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
var (
|
||||
ChinaDNS = dns.Client{}
|
||||
OtherDNS = dns.Client{}
|
||||
)
|
||||
|
||||
func handleServerName(w dns.ResponseWriter, m *dns.Msg) {
|
||||
r := new(dns.Msg)
|
||||
r.SetReply(m)
|
||||
|
||||
for i := 0; i < len(m.Question); i++ {
|
||||
rr, err := dns.NewRR(fmt.Sprintf("%s PTR Netch", m.Question[i].Name))
|
||||
if err != nil {
|
||||
log.Printf("[aiodns][dns.NewRR] %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
r.Answer = append(m.Answer, rr)
|
||||
}
|
||||
|
||||
_ = w.WriteMsg(r)
|
||||
}
|
||||
|
||||
func handleChinaDNS(w dns.ResponseWriter, m *dns.Msg) {
|
||||
r, _, err := ChinaDNS.Exchange(m, flags.ChinaDNS)
|
||||
if err != nil {
|
||||
log.Printf("[aiodns][handleChinaDNS] %v", err)
|
||||
}
|
||||
|
||||
_ = w.WriteMsg(r)
|
||||
}
|
||||
|
||||
func handleOtherDNS(w dns.ResponseWriter, m *dns.Msg) {
|
||||
r, _, err := OtherDNS.Exchange(m, flags.OtherDNS)
|
||||
if err != nil {
|
||||
log.Printf("[aiodns][handleOtherDNS] %v", err)
|
||||
}
|
||||
|
||||
_ = w.WriteMsg(r)
|
||||
}
|
||||
5
Other/aiodns/go.mod
Normal file
5
Other/aiodns/go.mod
Normal file
@@ -0,0 +1,5 @@
|
||||
module github.com/netchx/netch/other/aiodns
|
||||
|
||||
go 1.16
|
||||
|
||||
require github.com/miekg/dns v1.1.43
|
||||
12
Other/aiodns/go.sum
Normal file
12
Other/aiodns/go.sum
Normal file
@@ -0,0 +1,12 @@
|
||||
github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg=
|
||||
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04 h1:cEhElsAv9LUt9ZUUocxzWe05oFLVd+AA2nstydTeI8g=
|
||||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
94
Other/aiodns/main.go
Normal file
94
Other/aiodns/main.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"log"
|
||||
"net"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
var (
|
||||
flags struct {
|
||||
Path string
|
||||
Listen string
|
||||
ChinaDNS string
|
||||
OtherDNS string
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.StringVar(&flags.Path, "c", "", "")
|
||||
flag.StringVar(&flags.Listen, "l", ":53", "Listen")
|
||||
flag.StringVar(&flags.ChinaDNS, "cdns", "tls://223.5.5.5:853", "China DNS")
|
||||
flag.StringVar(&flags.OtherDNS, "odns", "tls://1.1.1.1:853", "Other DNS")
|
||||
flag.Parse()
|
||||
|
||||
{
|
||||
{
|
||||
info, err := url.Parse(flags.ChinaDNS)
|
||||
if err != nil {
|
||||
log.Fatalf("[aiodns][main][url.Parse] %v", err)
|
||||
}
|
||||
|
||||
switch info.Scheme {
|
||||
case "tls":
|
||||
ChinaDNS.Net = "tcp-tls"
|
||||
default:
|
||||
ChinaDNS.Net = "tcp"
|
||||
}
|
||||
|
||||
flags.ChinaDNS = info.Host
|
||||
}
|
||||
|
||||
{
|
||||
info, err := url.Parse(flags.OtherDNS)
|
||||
if err != nil {
|
||||
log.Fatalf("[aiodns][main][url.Parse] %v", err)
|
||||
}
|
||||
|
||||
switch info.Scheme {
|
||||
case "tls":
|
||||
OtherDNS.Net = "tcp-tls"
|
||||
default:
|
||||
OtherDNS.Net = "tcp"
|
||||
}
|
||||
|
||||
flags.OtherDNS = info.Host
|
||||
}
|
||||
}
|
||||
|
||||
mux := dns.NewServeMux()
|
||||
if flags.Path != "" {
|
||||
file, err := os.Open(flags.Path)
|
||||
if err != nil {
|
||||
log.Fatalf("[aiodns][main][os.Open] %v", err)
|
||||
}
|
||||
|
||||
scan := bufio.NewScanner(file)
|
||||
for scan.Scan() {
|
||||
mux.HandleFunc(dns.Fqdn(strings.TrimSpace(scan.Text())), handleChinaDNS)
|
||||
}
|
||||
}
|
||||
mux.HandleFunc("in-addr.arpa.", handleServerName)
|
||||
mux.HandleFunc(".", handleOtherDNS)
|
||||
|
||||
tcpSocket, err := net.Listen("tcp", flags.Listen)
|
||||
if err != nil {
|
||||
log.Fatalf("[aiodns][main][net.Listen] %v", err)
|
||||
}
|
||||
|
||||
udpSocket, err := net.ListenPacket("udp", flags.Listen)
|
||||
if err != nil {
|
||||
log.Fatalf("[aiodns][main][net.ListenPacket] %v", err)
|
||||
}
|
||||
|
||||
log.Printf("[aiodns] Started")
|
||||
|
||||
go dns.ActivateAndServe(tcpSocket, nil, mux)
|
||||
dns.ActivateAndServe(nil, udpSocket, mux)
|
||||
}
|
||||
Reference in New Issue
Block a user