如何使用 Go 獲取你的 IP 地址

techlead_krischang發表於2024-09-18

一個 IP 地址(網際網路協議地址)是分配給連線到網路的裝置的唯一識別符號,允許它們透過網際網路或區域網與其他裝置通訊。

如何使用 Go 獲取你的 IP 地址呢?

公共 IP 地址 vs 私有 IP 地址

公共 IP 地址是分配給連線網際網路的裝置的,用於全球訪問。它對網際網路上的所有人可見,並用於外部識別裝置。相反,私有(本地)IP 地址用於在私有網路內識別裝置,僅在該私有網路內用於通訊,外部不可見。

如何在 Go 中獲取公共 IP 地址

在 Go 中,可以使用 net/http 包發起 HTTP 請求,從外部 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 時出錯:", err)
        return
    }
    defer response.Body.Close()

    body, _ := ioutil.ReadAll(response.Body)
    fmt.Println("- IP 地址:", string(body))
}

如何在 Go 中獲取本地 IP 地址

要獲取本地 IP 地址,可以使用 net 包並檢索網路介面,檢查系統的本地 IP 地址。

package main

import (
    "fmt"
    "net"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        fmt.Println("出錯:", 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())
            }
        }
    }
}

參考來源

  • https://pkg.go.dev/net
  • https://www.fortinet.com/resources/cyberglossary/what-is-ip-address
  • https://en.wikipedia.org/wiki/IP_address

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章