2014年10月1日 星期三

得到的Remote 是 ::1

參考
在button 按下去的時候,去執行以下程式 :
Dim Remote As String
Remote = Request.ServerVariables("REMOTE_ADDR")
結果得到的Remote 是 ::1
windows7 + VS2010+ASP.NET

::1 代表自己連自己
這是 IPv6 的本機 IP 位址,如果是用戶端 IPv6/IPv4 混合時,會以 IPv6 先,目前這只會在本機發生。
想要取得 IPv4 位置的話,可以去網路卡設定中將 IPv6 協定先關閉。

小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/ 
雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579

非postback的時候,這個值為何?
改使用:
  1. Request.UserHostAddress
  2. HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
  3. Page第一次載入,非postback的時候,記錄後暫存起來,讓postback不會掉。
文中提到:

REMOTE_ADDR:The IP address of the remote host that is making the request.

If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
        strIPAddr = Request.ServerVariables("REMOTE_ADDR")
    ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
        strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
    ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
        strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
    Else
        strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    End If
    Return Mid(strIPAddr, 1, 30).Trim

沒有留言:

張貼留言