代码之家  ›  专栏  ›  技术社区  ›  user_78361084

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

  •  2
  • user_78361084  · 技术社区  · 5 年前

    在“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 回复  |  直到 5 年前
        1
  •  2
  •   Vorsprung    5 年前

    nett包似乎只有一个“resolve”方法,而不是官方网络包中的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())
        }
    }
    
        2
  •  1
  •   danehammer    5 年前

    这似乎是 net.LookupAddr 是使用主机冲突解决程序。我在prod中为服务执行此操作的方法是在主机上运行dnsmasq,以便每个主机缓存DNS查找。文档确实提到,您可以像执行以下操作一样通过实现自定义冲突解决程序来自定义行为: https://golang.org/pkg/net/#LookupAddr

    但我认为你要找的是(从那个文件页面的顶部):

    DefaultResolver是包级查找函数和没有指定冲突解决程序的拨号程序使用的冲突解决程序。