如何在 Go 中获取外部 IPv4/IPv6 地址

你可以在 Go 中使用 IPIfy 的 HTTP API

external_ip_lib.go
import (
    "io/ioutil"
    "net/http"
)

func GetExternalIPv4Address() (string, error) {
    // 执行请求
    resp, err := http.Get("https://api4.ipify.org")
    if err != nil {
        return "", err
    }
    // 此函数结束时清理
    defer resp.Body.Close()
    // 将所有响应数据读取到 []byte
    body, err := ioutil.ReadAll(resp.Body)
    // 解码并打印
    return string(body), nil
}

func GetExternalIPv6Address() (string, error) {
    // 执行请求
    resp, err := http.Get("https://api6.ipify.org")
    if err != nil {
        return "", err
    }
    // 此函数结束时清理
    defer resp.Body.Close()
    // 将所有响应数据读取到 []byte
    body, err := ioutil.ReadAll(resp.Body)
    // 解码并打印
    return string(body), nil
}

用法示例:

main_get_ip.go
package main

func main() {
    v4, _ := GetExternalIPv4Address()
    v6, _ := GetExternalIPv6Address()
    println(v4)
    println(v6)
}

如果你将两个文件保存在名为 GoIPAddress 的目录中,你可以运行

run_get_ip_example.sh
$ go build
$ ./GOIPAddress
31.190.168.110
2a03:4012:2:1022::1

Check out similar posts by category: Go, Networking