2016-12-16 21 views
-1

我使用中間人杜松子酒作爲服務器使用如下如何從請求對象得到遠程客戶端的IPv4地址

func dashboardHandler(c *gin.Context) { 
    c.HTML(200, "dashboard", gin.H{ 
     "title": "Dashboard" 
}) 

隨着標題代碼渲染HTML我想通過遠程客戶端的IPv4地址以及。我試着使用下面的代碼來獲得IP地址,但是對於本地主機,它給了我::1:56797作爲輸出。我的服務器上localhost:8080

ip, port, err := net.SplitHostPort(c.Request.RemoteAddr) 
fmt.Println(ip + ":" + port) 
if err != nil { 
    fmt.Println(err.Error()) 
} 

我跟着Correct way of getting Client's IP Addresses from http.Request (Golang)參考運行。有什麼方法可以從請求中獲得IPV4地址嗎?

+1

其實輸出是正確的,你運行你的服務器與ipv4和ipv6的支持。如果你只是想運行在IPv4的服務器,你可以檢查[這裏](http://stackoverflow.com/questions/38592064/go-lang-go-gin-listen-on-tcp4-not-tcp6) – Motakjuq

+0

要另一種說法是,客戶端沒有連接IPv4,所以沒有IPv4地址。 – JimB

回答

-1

你可以使用這個函數來獲取IP和用戶代理,但它會給一個括號字符,如果你是從本地主機嘗試,但如果你從別的地方試試它會工作。

func GetIPAndUserAgent(r *http.Request) (ip string, user_agent string) { 
     ip = r.Header.Get("X-Forwarded-For") 
     if ip == "" { 
      ip = strings.Split(r.RemoteAddr, ":")[0] 
     } 

     user_agent = r.UserAgent() 
     return ip, user_agent 

    } 
+0

'X-Forwarded-For'是代理用來存儲客戶端IP的舊頭。如果沒有代理服務器,代理服務器不使用舊的標題格式,或者代理服務器根本沒有包含轉發標頭,它就不存在。 – JimB

相關問題