Я хочу извлечь записи TXT определенного домена в Go. Я посмотрел на кучу блогов и попробовал следующий код:
package main
import (
"fmt"
"net"
)
func main() {
txts, err := net.LookupTXT("google.com")
if err != nil {
panic(err)
}
if len(txts) == 0 {
fmt.Printf("no record")
}
for _, txt := range txts {
fmt.Printf("%s\n", txt)
}
}
Когда я выполняю эту программу, я получаю следующий вывод.
docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e
facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95
globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=
v=spf1 include:_spf.google.com ~all
Это работает в соответствии с моим требованием, поскольку я следую https://www.kitterman.com/spf/validate.html, чтобы проверить, правильно ли я получаю вывод.
Теперь, когда я меняю свой входной домен на geckoboard.com (скажем), я получаю следующую ошибку:
panic: lookup geckoboard.com on 127.0.0.53:53: read udp 127.0.0.1:38440->127.0.0.53:53: i/o timeout
goroutine 1 [running]:
main.main()
/home/maruthi/emailheader.go:11
+0x190 exit status 2
Я понимаю, что это исключение тайм-аута. Однако, когда я выполняю тот же запрос на https://www.kitterman.com/spf/validate.html,, я получаю ожидаемый результат в течение доли секунды.
Есть ли лучший способ извлечь записи TXT, кроме использования net.LookupTXT("google.com")
? Если нет, может кто-нибудь предложить мне хороший механизм повторения для того же кода с более высоким значением времени ожидания?
Обновление 1: Пробовал ответ, предоставленный @Florian Weimer, но все еще получал тайм-аут.
$ dig +ignore +bufsize=512 geckoboard.com txt
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> +ignore +bufsize=512 geckoboard.com txt
;; global options: +cmd
;; connection timed out; no servers could be reached
Обновление 2: Как подсказывает @ThunderCat, я установил намного большее значение времени ожидания. Я добавил options timeout:30
в resolver.conf. Оба запроса, dig
и моя программа, выполняются в течение более 30 секунд перед получением тайм-аута.