miekg / dns

DNS library in Go
https://miek.nl/2014/august/16/go-dns-package
BSD 3-Clause "New" or "Revised" License
7.86k stars 1.12k forks source link

Can't retrieve TXT records for some domains #1527

Closed mkemme closed 5 months ago

mkemme commented 5 months ago

Test case:

func TestTXTRecordRetrieval(t *testing.T) {
    client := new(dns.Client)
    msg := new(dns.Msg)
    msg.SetQuestion(dns.Fqdn("github.com"), dns.TypeTXT) //however works for apache.org
    resp, _, err := client.Exchange(msg, "8.8.8.8:53")
    assert.Nil(t, err)
    assert.Greater(t, len(resp.Answer), 0)
}

Cross verified with commands:

dig github.com txt
dig apache.org txt
semihalev commented 5 months ago

You need check truncated response on udp.


func TestTXTRecordRetrieval(t *testing.T) {
    client := new(dns.Client)
    msg := new(dns.Msg)
    msg.SetQuestion(dns.Fqdn("github.com"), dns.TypeTXT) //however works for apache.org
    resp, _, err := client.Exchange(msg, "8.8.8.8:53")
    if err == nil && resp.Truncated {
        client.Net = "tcp"
        resp, _, err = client.Exchange(msg, "8.8.8.8:53")
    }
    assert.Nil(t, err)
    assert.Greater(t, len(resp.Answer), 0)
}