如何为网络程序包设置DNS缓存?

时间:2019-01-25 05:09:54

标签: go dns

在“ net / http”包中,我可以通过以下方式缓存DNS查找:

client := &http.Client{
        Transport: &http.Transport{
            Dial: (&nett.Dialer{
                Resolver: &nett.CacheResolver{TTL: 5 * time.Minute},
                IPFilter: nett.DualStack,
            }).Dial,
        },

    }

然后使用客户端检索网站。如何为网络程序包缓存DNS查找?例如反向DNS请求:

net.LookupAddr(ip)

因为它不使用变量,所以我对如何设置它以及如何知道是否使用缓存实例感到困惑。

2 个答案:

答案 0 :(得分:2)

nett软件包似乎只有一个“ Resolve”方法,而不是官方net软件包具有的LookupAddr,LookupIP等。因此,反向查询似乎不可用。这是从名称中正常查找地址的方法

package main

import (
    "github.com/abursavich/nett"
    "time"
)

func main() {
    r := nett.CacheResolver{TTL: 5 * time.Minute}
    a, _ := r.Resolve("muppet.com")
    for _, i := range a {
        print(i.String())
    }
}

答案 1 :(得分:1)

net.LookupAddr的行为似乎是使用主机解析器。在产品中为服务执行此操作的方式是在主机上运行dnsmasq,以便每个主机缓存DNS查找。该文档确实提到您可以通过执行自定义解析程序来自定义行为,例如:https://golang.org/pkg/net/#LookupAddr

但是我认为您正在寻找的是(从该文档页面的顶部):

  

DefaultResolver是程序包级别的Lookup函数和没有指定解析程序的Dialer使用的解析程序。