From 809301d089bf749d44c13fc13bac12494afa4d95 Mon Sep 17 00:00:00 2001 From: buyuxiang <347586493@qq.com> Date: Fri, 12 Aug 2022 18:15:45 +0800 Subject: [PATCH] fix: add timeout for dns resolution --- hrp/internal/dial/dns.go | 77 ++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/hrp/internal/dial/dns.go b/hrp/internal/dial/dns.go index d91141d0..7f1e7e03 100644 --- a/hrp/internal/dial/dns.go +++ b/hrp/internal/dial/dns.go @@ -37,6 +37,10 @@ const ( DnsRecordTypeCNAME = 5 ) +var dnsHttpClient = &http.Client{ + Timeout: 5 * time.Minute, +} + type DnsOptions struct { DnsSourceType int DnsRecordType int @@ -142,61 +146,58 @@ func httpDns(url string, dnsRecordType int) (dnsResult DnsResult, err error) { if dnsRecordType == DnsRecordTypeAAAA { target += "&aid=13&f=2" } - resp, err := http.Get(target) + resp, err := dnsHttpClient.Get(target) dnsResult.DnsSource = DnsSourceTypeHttp dnsResult.DnsRecordType = dnsRecordType if err != nil { return - } else { - defer resp.Body.Close() - var buf []byte - buf, err = ioutil.ReadAll(resp.Body) - if err != nil { - return - } - var result httpDnsResp - err = json.Unmarshal(buf, &result) - if err != nil { - return - } - dnsResult.DnsList = result.Ips - dnsResult.Ttl = result.Ttl } + defer resp.Body.Close() + var buf []byte + buf, err = ioutil.ReadAll(resp.Body) + if err != nil { + return + } + var result httpDnsResp + err = json.Unmarshal(buf, &result) + if err != nil { + return + } + dnsResult.DnsList = result.Ips + dnsResult.Ttl = result.Ttl return } func googleDns(url string, dnsRecordType int) (dnsResult DnsResult, err error) { - resp, err := http.Get(googleDnsUrl + "?name=" + url + "&type=" + strconv.Itoa(dnsRecordType)) + resp, err := dnsHttpClient.Get(googleDnsUrl + "?name=" + url + "&type=" + strconv.Itoa(dnsRecordType)) dnsResult.DnsSource = DnsSourceTypeGoogle dnsResult.DnsRecordType = dnsRecordType if err != nil { return - } else { - defer resp.Body.Close() - var buf []byte - buf, err = ioutil.ReadAll(resp.Body) - if err != nil { - return + } + defer resp.Body.Close() + var buf []byte + buf, err = ioutil.ReadAll(resp.Body) + if err != nil { + return + } + var result googleDnsResp + err = json.Unmarshal(buf, &result) + if err != nil { + return + } + if len(result.Answer) == 0 { + return + } + for _, answer := range result.Answer { + if answer.Type == dnsRecordType { + dnsResult.Ttl = answer.TTL + dnsResult.DnsList = append(dnsResult.DnsList, answer.Data) } - var result googleDnsResp - err = json.Unmarshal(buf, &result) - if err != nil { - return - } - if len(result.Answer) == 0 { - return - } - for _, answer := range result.Answer { - if answer.Type == dnsRecordType { - dnsResult.Ttl = answer.TTL - dnsResult.DnsList = append(dnsResult.DnsList, answer.Data) - } - } - } return } @@ -240,7 +241,7 @@ func DoDns(dnsOptions *DnsOptions, args []string) (err error) { if err != nil { dnsResult.Suc = false dnsResult.ErrMsg = err.Error() - log.Error().Err(err).Msgf("fail to do DNS for %s", dnsTarget, err) + log.Error().Err(err).Msgf("fail to do DNS for %s", dnsTarget) } else { dnsResult.Suc = true dnsResult.ErrMsg = ""