golang獲取客戶端ip的實現(xiàn)
網(wǎng)絡(luò)上的答案獲取的ip是服務(wù)器的ip或者獲取本地ip,然后通過ip獲取詳細(xì)地址,要么報錯,要么或者客戶端的位置不正確…直接給我整麻了~
網(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-03
Go語言使用Buffer實現(xiàn)高性能處理字節(jié)和字符
在?Go?中,bytes.Buffer?是一個非常高效的類型,用于處理字節(jié)數(shù)據(jù)的讀寫操作,本文將詳細(xì)介紹一下如何使用Buffer實現(xiàn)高性能處理字節(jié)和字符,有需要的小伙伴可以了解下2025-01-01
Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素
這篇文章主要為大家介紹了Go語言LeetCode題解961在長度2N的數(shù)組中找出重復(fù)N次元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
golang DNS服務(wù)器的簡單實現(xiàn)操作
這篇文章主要介紹了golang DNS服務(wù)器的簡單實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例
在這個章節(jié)中,我們將會結(jié)合之前的知識點,實現(xiàn)一個簡易的并發(fā)網(wǎng)頁爬蟲,我們的爬蟲會先爬取一個起始頁面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-08-08

