2015-10-22 94 views
1

我在用C#獲取完整的IP地址時遇到了一些問題。當我通過點擊按鈕調用C#web方法時,它會在JavaScript警告框中顯示(或應該)IP地址。我得到的而不是IP地址是:: 1。我通過Visual Studio 2015社區運行它。這裏是我的代碼:C#沒有顯示完整的IP地址

[WebMethod] 
    public string getIPAddress() 
    { 
     // this method gets the ip address by using the server variables 
     // in C# to capture the data from the client 
     HttpContext context = HttpContext.Current; 
     string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

     if (!string.IsNullOrEmpty(ipAddress)) 
     { 
      string[] addresses = ipAddress.Split(','); 
      if (addresses.Length != 0) 
      { 
       return addresses[0]; 
      } 
     } 

     return context.Request.ServerVariables["REMOTE_ADDR"]; 
    } 

並處理該按鈕單擊方法:

// display the ip address to the user if the button is clicked (display it via a javascript alert box) 
    public void IpAddress(object sender, EventArgs e) 
    { 
     Data d = new Data(); 

     Response.Write("<script type=\"text/javascript\">alert('" + d.getIPAddress() + "');</script>"); 
    } 

任何幫助,將不勝感激。謝謝!

+3

這是一個完整的IP地址;它是IPv6本地主機。 – SLaks

+0

有什麼方法可以獲得IPv4地址或者這是不可能的? – user2101411

回答

1

此行

string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

不一定讓你的客戶端的IP地址,這取決於你的網絡設置。 X_FORWARDED_FOR標頭可選地由您和瀏覽器之間的代理服務器添加。可以列出很多IP地址,或者如果連接路徑中沒有(表現良好)的代理服務器,則根本沒有IP地址。實際標題的格式是

X - 轉發,對於:客戶端1,PROXY1,Proxy2發出,...

source

地址:: 1是IPv6環回地址。在不進一步瞭解您的網絡體系結構的情況下,無法知道爲什麼標題使用:: 1填充。

如果你只是想獲取客戶端的IP地址,使用

Request.ServerVariables [「REMOTE_ADDR」]

請注意,這不是100%可靠,因爲有些代理服務器將取代自己的IP地址和而不是填充X-Forwarded-For頭(AOL對此很臭名昭着,但還有很多其他示例)。

有什麼方法可以獲得IPv4地址或者這是不可能的?

不是每一塊硬件都分配了一個IPv4地址,儘管實際上大多數仍然是。如果你能得到IPv4地址,它將是127.0.0.1(本地主機)。

+0

它從內置的IIS服務器運行Visual Studio社區2015 – user2101411

+0

感謝您的幫助! – user2101411