通过Golang获取公网IP地址

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测链路 OpenTelemetry 版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 在Go语言中,获取当前的外网(公网)IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址,例如 httpbin.org/ip 或 ipify.org。下面是一个简单的例子,展示了如何使用Go标准库中的net/http包和io/ioutil包来实现这一功能。

在Go语言中,获取当前的外网(公网)IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址,例如 httpbin.org/ipipify.org。下面是一个简单的例子,展示了如何使用Go标准库中的net/http包和io/ioutil包来实现这一功能。

1. 示例代码

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
   
   
    // 使用http.Get函数请求外部服务
    resp, err := http.Get("https://api.ipify.org")
    if err != nil {
   
   
        fmt.Printf("请求失败: %s\n", err)
        return
    }
    defer resp.Body.Close() // 确保关闭响应体

    // 读取响应体内容
    ip, err := ioutil.ReadAll(resp.Body)
    if err != nil {
   
   
        fmt.Printf("读取响应失败: %s\n", err)
        return
    }

    // 输出获取到的外网IP
    fmt.Printf("当前的外网IP是: %s\n", string(ip))
}

2. 如何工作

  1. 请求外部服务http.Get("https://api.ipify.org") 发送一个HTTP GET请求到 api.ipify.org,这个服务会返回访问者的公网IP地址。
  2. 读取响应ioutil.ReadAll(resp.Body) 读取响应体的内容,该内容即为公网IP地址。
  3. 输出结果:最后,程序会将获取到的公网IP地址打印出来。

3. 注意事项

  • 服务依赖:这种方法依赖于外部服务(如ipify.org)。如果服务不可用,这个方法也会失败。
  • 隐私考虑:发送请求到外部服务可能会暴露你的公网IP地址和其他相关信息给服务提供者。在使用这些服务时,请确保了解其隐私政策。
  • 错误处理:实际使用时,请确保对http.Getioutil.ReadAll可能返回的错误进行适当处理。

通过这种方式,你可以轻松地在Go程序中获取当前的外网IP地址。

相关文章
|
2月前
|
应用服务中间件 Go nginx
[golang]获取本机IP
[golang]获取本机IP
|
5月前
|
Go Java C++
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
63 0
Golang每日一练(leetDay0031) 解码方法、复原 IP 地址
|
网络协议 Go
golang判断ip地址是ipv4还是ipv6
golang判断ip地址是ipv4还是ipv6
|
11月前
|
Go API 定位技术
使用Golang实现HTTP代理突破IP访问限制
使用Golang实现HTTP代理突破IP访问限制
|
网络协议 Go 数据库
golang是用GeoIP数据库解析IP到城市jsonRPC服务教程
RESTful接口 请求URL: https://api.turboes.com/Tbsapi/v1/ip2addr?ip=219.140.227.235 请求方式: GET 参数: 参数名 类型 说明 ip url-qurey-string 可选 要查询的ip地址,如果不传这表示当前.
4453 0
|
1月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
53 4
Golang语言之管道channel快速入门篇
|
1月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
46 4
Golang语言文件操作快速入门篇
|
1月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
53 3
Golang语言之gRPC程序设计示例
|
1月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
43 4
|
1月前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
39 3