307 lines
6.1 KiB
Go
307 lines
6.1 KiB
Go
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
//go:build plus
|
|
|
|
package nodes_test
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"github.com/miekg/dns"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestDNS_Query_A_UDP(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"hello.world.teaos.cn", dns.TypeA},
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
{"hello.teaos.cn", dns.TypeCNAME},
|
|
{"hello.teaos.cn", dns.TypeA},
|
|
{"edgecdn.teaos.cn", dns.TypeA},
|
|
} {
|
|
var m = new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_A_Many(t *testing.T) {
|
|
type queryDef struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
var c = new(dns.Client)
|
|
|
|
for i := 0; i < 10000; i++ {
|
|
for _, query := range []queryDef{
|
|
{"hello.goedge.cn", dns.TypeA},
|
|
} {
|
|
var m = new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
_ = r
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_CNAME(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"hello.teaos.cn", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_A_TCP(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"hello.world.teaos.cn", dns.TypeA},
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
{"hello.teaos.cn", dns.TypeCNAME},
|
|
{"goedge.cn", dns.TypeA},
|
|
{"www.goedge.cn", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
//r, _, err := c.Exchange(m, "127.0.0.1:54")
|
|
conn, err := dns.Dial("tcp", "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r, _, err := c.ExchangeWithConn(m, conn)
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_A_TLS(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"hello.world.teaos.cn", dns.TypeA},
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
{"hello.teaos.cn", dns.TypeCNAME},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
//r, _, err := c.Exchange(m, "127.0.0.1:54")
|
|
conn, err := dns.DialWithTLS("tcp", "127.0.0.1:853", &tls.Config{
|
|
InsecureSkipVerify: true,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r, _, err := c.ExchangeWithConn(m, conn)
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_Internet(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
for _, query := range []query{
|
|
{"1.goedge.cn", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
//m.RecursionDesired = true
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
|
|
conn, err := dns.Dial("udp", "ns1.teaos.cn:53")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r, _, err := c.ExchangeWithConn(m, conn)
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_TSIG(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
c.TsigSecret = map[string]string{"teaos.": "NzhhZDExMzM5NWMwN2Q5OWM5YTFhMzgxZWNkZGMwMDA2ODUzODdiYTM2ODA5N2I2YjYwZWRlNmNlNjlhMzdmM2JmNjcxZmQ4NzVjMjI1Y2QwOTQ2Njk5OWY0MzRkMTJkNTczNjFlZDgwYmQxZWZjZDM4ZjAxNDNmM2Y2NTU1YjE="}
|
|
|
|
for _, query := range []query{
|
|
{"hello.cdn.teaos.cn", dns.TypeA},
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
{"hello.teaos.cn", dns.TypeCNAME},
|
|
{"hello.teaos.cn", dns.TypeA},
|
|
{"edgecdn.teaos.cn", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
m.SetTsig("teaos.", dns.HmacSHA512, 300, time.Now().Unix())
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_A_Route(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"route.com", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Query_Recursion(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
c := new(dns.Client)
|
|
|
|
for _, query := range []query{
|
|
{"example.org", dns.TypeA},
|
|
} {
|
|
m := new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
for _, a := range r.Answer {
|
|
t.Log(a)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDNS_Flood(t *testing.T) {
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
var c = new(dns.Client)
|
|
|
|
for i := 0; i < 1_000_000; i++ {
|
|
for _, query := range []query{
|
|
{"hello.world.teaos.cn", dns.TypeA},
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
{"hello.teaos.cn", dns.TypeCNAME},
|
|
{"hello.teaos.cn", dns.TypeA},
|
|
{"edgecdn.teaos.cn", dns.TypeA},
|
|
} {
|
|
var m = new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
r, _, err := c.Exchange(m, "192.168.2.60:58")
|
|
if err != nil {
|
|
t.Fatalf("failed to exchange: %v", err)
|
|
}
|
|
_ = r
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkDNSNode(b *testing.B) {
|
|
var c = new(dns.Client)
|
|
conn, err := c.Dial("192.168.2.60:58")
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
|
|
type query struct {
|
|
Domain string
|
|
Type uint16
|
|
}
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
for _, query := range []query{
|
|
{"cdn.teaos.cn", dns.TypeA},
|
|
} {
|
|
var m = new(dns.Msg)
|
|
m.SetQuestion(query.Domain+".", query.Type)
|
|
_, _, err := c.ExchangeWithConn(m, conn)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
}
|