获取域名的 NS 记录

一个 DNS 请求常见的作用是找到域名的 名称服务,它们被存储在域名的 NS 记录中。这个功能将会在 NSrecords.go 的代码中介绍。

NSrecords.go 的代码将由俩部分展示。第一部分如下:

  1. package main
  2. import(
  3. "fmt"
  4. "net"
  5. "os"
  6. )
  7. func main() {
  8. arguments := os.Args
  9. if len(arguments) == 1 {
  10. fmt.Println("Need a domain name!")
  11. return
  12. }

在这部分,您要检查是否至少有一个命令行参数,以便有可以运行的参数。

NSrecords.go 的剩余代码如下:

  1. domain := arguments[1]
  2. NSs, err := net.LookupNS(domain)
  3. if err != nil {
  4. fmt.Println(err)
  5. return
  6. }
  7. for _, NS := range NSs {
  8. fmt.Println(NS.Host)
  9. }
  10. }

net.LookupNS() 函数做了所有的工作,它将域名的 NS 记录作为 net.NS 类型的 slice 变量返回。这是打印 slice 的每个 net.NS 元素的 Host 字段的原因。

执行 NSrecords.go 将产生如下输出:

  1. $ go run NSrecords.go mtsoukalos.eu
  2. ns5.linode.com.
  3. ns4.linode.com.
  4. ns1.linode.com.
  5. ns2.linode.com.
  6. ns3.linode.com.
  7. $ go run NSrecords.go www.mtsoukalos.eu
  8. lookup www.mtsoukalos.eu on 8.8.8.8:53: no such host

您可以用 host(1) 工具验证上面输出的正确性:

  1. $ host -t ns www.mtsoukalos.eu
  2. www.mtsoukalos.eu has no NS record
  3. $ host -t ns mtsoukalos.eu
  4. mtsoukalos.eu name server ns3.linode.com.
  5. mtsoukalos.eu name server ns1.linode.com.
  6. mtsoukalos.eu name server ns4.linode.com.
  7. mtsoukalos.eu name server ns2.linode.com.
  8. mtsoukalos.eu name server ns5.linode.com.