欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang獲取客戶端ip的實現(xiàn)

 更新時間:2023年07月04日 10:41:41   作者:沉默小管  
本文主要介紹了golang獲取客戶端ip的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

網(wǎng)絡(luò)上的答案獲取的ip是服務(wù)器的ip或者獲取本地ip,然后通過ip獲取詳細地址,要么報錯,要么或者客戶端的位置不正確…直接給我整麻了~

網(wǎng)絡(luò)答案:

獲取局域網(wǎng)ip

func GetOutBoundIP() (ip string, err error) {
    conn, err := net.Dial("udp", "8.8.8.8:53")
    if err != nil {
        fmt.Println(err)
        return
    }
    localAddr := conn.LocalAddr().(*net.UDPAddr)
    ip = strings.Split(localAddr.String(), ":")[0]
    return
}

獲取外網(wǎng)能訪問的動態(tài)ip,獲取的是本機的ip不是客戶端的ip

func GetOutBoundIP(ctx iris.Context) (ip string, err error) {
    resp, err := http.Get("http://myexternalip.com/raw")
    if err != nil {
        return "",err
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    ip = string(body)
    return
}

后來發(fā)現(xiàn)以上都不適合或者客戶端ip

獲取客戶端ip

//通過iris的context內(nèi)部函數(shù)獲取請求頭部獲取ip
func GetOutBoundIP(ctx iris.Context) (string, error) {
?? ?//從請求頭部的X-REAL-IP獲取Ip
?? ?ip := ctx.Request().Header.Get("X-REAL-IP")
?? ?netIP := net.ParseIP(ip)
?? ?if netIP != nil {
?? ??? ?return ip, nil
?? ?}
?? ?//從請求頭部的X-FORWARDED-FOR獲取Ip
?? ?ips := ctx.Request().Header.Get("X-FORWARDED-FOR")
?? ?splitIps := strings.Split(ips, ",")
?? ?for _, ip := range splitIps {
?? ??? ?netIP := net.ParseIP(ip)
?? ??? ?if netIP != nil {
?? ??? ??? ?return ip, nil
?? ??? ?}
?? ?}
?? ?//從請求頭部的RemoteAddr獲取Ip
?? ?ip, _, err := net.SplitHostPort(ctx.Request().RemoteAddr)
?? ?if err != nil {
?? ??? ?return "", err
?? ?}
?? ?netIP = net.ParseIP(ip)
?? ?if netIP != nil {
?? ??? ?return ip, nil
?? ?}
?? ?return "", fmt.Errorf("正確ip獲取失敗")
}

到此這篇關(guān)于golang獲取客戶端ip的實現(xiàn)的文章就介紹到這了,更多相關(guān)golang獲取客戶端ip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言使用Swiss Table實現(xiàn)更快的map

    Go語言使用Swiss Table實現(xiàn)更快的map

    wiss Table 是一種高效的哈希表實現(xiàn),最初由 Google 在 C++ 中引入,后來也被其他語言(如 Rust)采用,下面我們看看如何使用 Swiss Table 的思想來實現(xiàn)一個更快的 Go map
    2025-03-03
  • Go語言使用Buffer實現(xiàn)高性能處理字節(jié)和字符

    Go語言使用Buffer實現(xiàn)高性能處理字節(jié)和字符

    在?Go?中,bytes.Buffer?是一個非常高效的類型,用于處理字節(jié)數(shù)據(jù)的讀寫操作,本文將詳細介紹一下如何使用Buffer實現(xiàn)高性能處理字節(jié)和字符,有需要的小伙伴可以了解下
    2025-01-01
  • Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素

    Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素

    這篇文章主要為大家介紹了Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 快速掌握Go語言正/反向代理

    快速掌握Go語言正/反向代理

    這篇文章主要介紹了快速掌握Go語言正/反向代理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • golang DNS服務(wù)器的簡單實現(xiàn)操作

    golang DNS服務(wù)器的簡單實現(xiàn)操作

    這篇文章主要介紹了golang DNS服務(wù)器的簡單實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang中Channel實戰(zhàn)技巧與一些說明

    Golang中Channel實戰(zhàn)技巧與一些說明

    channel是Go語言內(nèi)建的first-class類型,也是Go語言與眾不同的特性之一,下面這篇文章主要給大家介紹了關(guān)于Golang中Channel實戰(zhàn)技巧與一些說明的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例

    go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例

    在這個章節(jié)中,我們將會結(jié)合之前的知識點,實現(xiàn)一個簡易的并發(fā)網(wǎng)頁爬蟲,我們的爬蟲會先爬取一個起始頁面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-08-08
  • go中switch語句的用法詳解

    go中switch語句的用法詳解

    在Go中的switch語句類似于C、C++、Java、JavaScript和PHP中的switch語句,不同之處在于它只執(zhí)行匹配的case,因此不需要使用break語句,下面我們就一起來學(xué)習(xí)一下switch語句的具體使用吧
    2023-09-09
  • Golang 的defer執(zhí)行規(guī)則說明

    Golang 的defer執(zhí)行規(guī)則說明

    這篇文章主要介紹了Golang 的defer執(zhí)行規(guī)則說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解簡單高效的Go?struct優(yōu)化

    詳解簡單高效的Go?struct優(yōu)化

    這篇文章主要為大家介紹了簡單高效的Go?struct優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論