diff options
| author | MDK <[email protected]> | 2024-03-25 17:15:25 +0800 |
|---|---|---|
| committer | MDK <[email protected]> | 2024-03-25 17:15:25 +0800 |
| commit | 7115311c42ccd8a7565a5f8728bcaa18bf20bf02 (patch) | |
| tree | 48eaac3c73914db31600fa8c9e96d6ffbf22c0f6 /method/svcb.go | |
programs for edns, svcb, https support measurement
Diffstat (limited to 'method/svcb.go')
| -rw-r--r-- | method/svcb.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/method/svcb.go b/method/svcb.go new file mode 100644 index 0000000..d208e00 --- /dev/null +++ b/method/svcb.go @@ -0,0 +1,63 @@ +package method + +import ( + "edns_svcb/utils" + + "github.com/miekg/dns" +) + +func HTTPSSupportTest(addr string) TestResult { + _, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: "www.example.net", RD: true}) + if err != nil { + return TestResult{Err: err} + } + res, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: "blog.cloudflare.com", Qtype: dns.TypeHTTPS, RD: true}) + if err == nil { + if len(res.Answer) == 1 { + if _, ok := res.Extra[0].(*dns.HTTPS); ok { + return TestResult{Alive: true, Support: true} + } + } + } + return TestResult{Alive: true} +} + +func SVCBSupportTest(addr string) TestResult { + _, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: "www.example.net", RD: true}) + if err != nil { + return TestResult{Err: err} + } + res, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: "blog.cloudflare.com", Qtype: dns.TypeSVCB, RD: true}) + if err == nil { + if len(res.Answer) == 1 { + if _, ok := res.Extra[0].(*dns.SVCB); ok { + return TestResult{Alive: true, Support: true} + } + } + } + return TestResult{Alive: true} +} + +func HTTPSRecordTest(addr, domain string) bool { + res, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: domain, Qtype: dns.TypeHTTPS, RD: true}) + if err == nil { + if len(res.Answer) > 0 { + if _, ok := res.Answer[0].(*dns.HTTPS); ok { + return true + } + } + } + return false +} + +func SVCBRecordTest(addr, domain string) bool { + res, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: domain, Qtype: dns.TypeSVCB, RD: true}) + if err == nil { + if len(res.Answer) > 0 { + if _, ok := res.Answer[0].(*dns.SVCB); ok { + return true + } + } + } + return false +} |
