台灣最大裝潢接案平台
輕鬆接案網
清潔公司專精高難度抓漏工程,近30年經驗
快速找出問題所在,品質絕佳。

首頁  •  j2h 論壇 • 程式設計討論     • 

ASP.NET 程式如何取得客戶端真實 IP

房東:天使
發表時間:2007-02-12


在 ASP.NET 中使用 Request.ServerVariables("REMOTE_ADDR") 來取得客戶端(Client)的IP地址,但如果客戶端是使用代理伺服器時,那取到的就是代理伺服器的 IP 位址,而不是真正的客戶端 IP 位址。要想透過代理伺服器取得客戶端的真實IP地址,就要使用Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取。不過要注意的,並不是每個代理伺服器都能用Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的IP。另外需要注意的是:如果客戶端沒有透過代理伺服器時,那麼用Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值將是空的。因此,如果要在程式中使用這個方法,可以使用類似下面程式片段來處理:

Dim ClientIP As String = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
IF ClientIP = String.Empty Then
ClientIP = Request.ServerVariables("REMOTE_ADDR")
End IF


也就是說,如果客戶端透過代理伺服器時,我們所取到的是 HTTP_X_FORWARDED_FOR 值,如果沒透過代理伺服器,就會取到REMOTE_ADDR 的值。

'下面筆者就使用一個函式來展示如何取得遠端使用者的 IP 位址。程式的邏輯為,如果不能取客戶端真實 IP,就會取客戶端的代理IP。
Private Function GetClientIP()
Dim strIPAddr As Atring
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
End Function




  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!



  •  共 0 人回應

    姓名:
    佈告內容:
    其他選項: