最后更新于

Golang根据域名解析IP


在网络编程中,经常需要将域名解析为IP地址。Golang提供了多种方法来实现DNS查询功能。

🔧 方法一:使用标准库net包

基础解析

package main

import (
    "fmt"
    "net"
    "log"
)

func main() {
    domain := "www.google.com"

    // 解析域名获取IP地址
    ips, err := net.LookupIP(domain)
    if err != nil {
        log.Fatal(err)
    }

    for _, ip := range ips {
        fmt.Printf("IP: %s\n", ip.String())
    }
}

获取IPv4地址

func getIPv4(domain string) ([]string, error) {
    ips, err := net.LookupIP(domain)
    if err != nil {
        return nil, err
    }

    var ipv4s []string
    for _, ip := range ips {
        if ipv4 := ip.To4(); ipv4 != nil {
            ipv4s = append(ipv4s, ip.String())
        }
    }
    return ipv4s, nil
}

🌐 方法二:使用第三方DNS解析器

安装依赖

go get github.com/bogdanovich/dns_resolver

使用示例

package main

import (
    "log"
    "github.com/bogdanovich/dns_resolver"
)

func main() {
    // 配置DNS服务器
    dnsServers := []string{
        "114.114.114.114",  // 114DNS
        "114.114.115.115",  // 114DNS
        "119.29.29.29",     // 腾讯DNS
        "223.5.5.5",        // 阿里DNS
        "8.8.8.8",          // Google DNS
        "208.67.222.222",   // OpenDNS
        "208.67.220.220",   // OpenDNS
    }

    resolver := dns_resolver.New(dnsServers)
    resolver.RetryTimes = 5

    domain := "www.example.com"
    ip, err := resolver.LookupHost(domain)
    if err != nil {
        log.Printf("DNS解析失败: %v", err)
        return
    }

    log.Printf("域名 %s 解析结果: %s", domain, ip)
}

📋 DNS服务器推荐

服务商IPv4地址特点
114DNS114.114.114.114国内访问快
阿里DNS223.5.5.5稳定可靠
腾讯DNS119.29.29.29响应速度快
Google DNS8.8.8.8全球通用
Cloudflare1.1.1.1隐私保护

💡 最佳实践

  • 多DNS服务器:配置多个DNS服务器提高可用性
  • 重试机制:设置合理的重试次数
  • 超时控制:避免长时间等待
  • 缓存结果:对频繁查询的域名进行缓存

💡 提示:在生产环境中建议使用多个DNS服务器,并设置合理的超时和重试机制。