一個(gè) IP 地址(互聯(lián)網(wǎng)協(xié)議地址)是分配給連接到網(wǎng)絡(luò)的設(shè)備的唯一標(biāo)識(shí)符婆跑,允許它們通過(guò)互聯(lián)網(wǎng)或局域網(wǎng)與其他設(shè)備通信此熬。
如何使用 Go 獲取你的 IP 地址呢?
公共 IP 地址 vs 私有 IP 地址
公共 IP 地址是分配給連接互聯(lián)網(wǎng)的設(shè)備的滑进,用于全球訪問(wèn)犀忱。它對(duì)互聯(lián)網(wǎng)上的所有人可見,并用于外部識(shí)別設(shè)備扶关。相反阴汇,私有(本地)IP 地址用于在私有網(wǎng)絡(luò)內(nèi)識(shí)別設(shè)備,僅在該私有網(wǎng)絡(luò)內(nèi)用于通信节槐,外部不可見搀庶。
如何在 Go 中獲取公共 IP 地址
在 Go 中,可以使用 net/http
包發(fā)起 HTTP 請(qǐng)求铜异,從外部 API 獲取公共 IP 地址哥倔。
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
response, err := http.Get("https://api.ipquery.io")
if err != nil {
fmt.Println("獲取公共 IP 時(shí)出錯(cuò):", err)
return
}
defer response.Body.Close()
body, _ := ioutil.ReadAll(response.Body)
fmt.Println("- IP 地址:", string(body))
}
如何在 Go 中獲取本地 IP 地址
要獲取本地 IP 地址,可以使用 net
包并檢索網(wǎng)絡(luò)接口揍庄,檢查系統(tǒng)的本地 IP 地址咆蒿。
package main
import (
"fmt"
"net"
)
func main() {
addrs, err := net.InterfaceAddrs()
if err != nil {
fmt.Println("出錯(cuò):", err)
return
}
for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
fmt.Println("- IP 地址:", ipnet.IP.String())
}
}
}
}
參考來(lái)源
- https://pkg.go.dev/net
- https://www.fortinet.com/resources/cyberglossary/what-is-ip-address
- https://en.wikipedia.org/wiki/IP_address
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!