summaryrefslogtreecommitdiff
path: root/method/svcb.go
diff options
context:
space:
mode:
authorMDK <[email protected]>2024-03-25 17:15:25 +0800
committerMDK <[email protected]>2024-03-25 17:15:25 +0800
commit7115311c42ccd8a7565a5f8728bcaa18bf20bf02 (patch)
tree48eaac3c73914db31600fa8c9e96d6ffbf22c0f6 /method/svcb.go
programs for edns, svcb, https support measurement
Diffstat (limited to 'method/svcb.go')
-rw-r--r--method/svcb.go63
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
+}