我想在Go中提取特定域的TXT记录。我查看了一堆博客并尝试了以下代码:
包主
进口( “FMT” “净”)
func main(){ …
你的递归解析器可能是配置错误或者只是破坏了。它可能无法正确处理EDNS,或根本不处理TCP查询。 (某些客户端虚拟化解决方案具有内置的DNS转发器,但存在这些问题。)
需要TCP的原因是响应大小大于512字节:
$ dig +ignore +bufsize=512 geckoboard.com txt ; <<>> DiG 9.10.3-P4-Debian <<>> +ignore +bufsize=512 geckoboard.com txt ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60761 ;; flags: qr tc rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1200 ;; QUESTION SECTION: ;geckoboard.com. IN TXT ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Mar 06 20:39:31 CET 2019 ;; MSG SIZE rcvd: 43
该 tc flag表示客户端应该通过TCP重试。 (一般, dig 会自动执行此操作,但是 +ignore 国旗抑制了这一点。)
tc
dig
+ignore
这似乎在您的环境中失败。递归解析器本身也可能无法从全局DNS获取数据。这个事实 dig 查询导致超时,而不是响应 tc 建议后者。进一步调试需要数据包捕获。
谢谢@Florian Weimer的帮助。我有一个小扩展你的工作 dig 命令。
$ dig @8.8.8.8 +ignore +short +bufsize=1024 geckoboard.com txt "MS=ms20890953" "facebook-domain-verification=uh1r0ebrc3sig0h2za0djoj4mhkn3g" "google-site-verification=I6OUOqinHxPNuD8YBb3-c8GQA7YkbeHdx0xwUeeGLqI" "google-site-verification=PWaSMmjvCe_daQC2-b7cZ9UW4rFt6Y8ZWQ7YoRbhMDw" "google-site-verification=lSxvRgW-oP91yihSZ1kNv57EfgT97tmErxAjv5HFi2Q" "spf2.0/pra include:spf.recurly.com ~all" "status-page-domain-verification=8963fbq9nrjx" "v=spf1 include:_spf.google.com include:sendgrid.net include:spf.recurly.com include:mail.zendesk.com include:servers.mcsv.net ~all"
我的Golang代码是:
package main import ( "fmt" "os/exec" ) func main() { out, err := exec.Command("bash", "-c", "dig @8.8.8.8 +ignore +short +bufsize=1024 geckoboard.com txt").Output() s := string(out[:]) if err != nil { fmt.Println("Unexpected Error Occured ", err) } fmt.Printf(s) }