golang獲取客戶端ip的實現(xiàn)
網(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
wiss Table 是一種高效的哈希表實現(xiàn),最初由 Google 在 C++ 中引入,后來也被其他語言(如 Rust)采用,下面我們看看如何使用 Swiss Table 的思想來實現(xiàn)一個更快的 Go map2025-03-03Go語言使用Buffer實現(xiàn)高性能處理字節(jié)和字符
在?Go?中,bytes.Buffer?是一個非常高效的類型,用于處理字節(jié)數(shù)據(jù)的讀寫操作,本文將詳細介紹一下如何使用Buffer實現(xiàn)高性能處理字節(jié)和字符,有需要的小伙伴可以了解下2025-01-01Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素
這篇文章主要為大家介紹了Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12golang DNS服務(wù)器的簡單實現(xiàn)操作
這篇文章主要介紹了golang DNS服務(wù)器的簡單實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例
在這個章節(jié)中,我們將會結(jié)合之前的知識點,實現(xiàn)一個簡易的并發(fā)網(wǎng)頁爬蟲,我們的爬蟲會先爬取一個起始頁面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-08-08