[英]C# not showing the full IP address
我在使用C#獲取完整IP地址時遇到一些問題。 當我通過單擊按鈕調用C#Web方法時,它在JavaScript警報框中顯示(或應該顯示)IP地址。 我得到的代替IP地址的是:: 1。 我正在通過Visual Studio 2015社區運行此程序。 這是我的代碼:
[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>");
}
任何幫助,將不勝感激。 謝謝!
這條線
string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
不一定會為您獲取客戶端的IP地址,具體取決於您的網絡設置。 X_FORWARDED_FOR標頭可以選擇由代理服務器在您和瀏覽器之間添加。 列出的IP地址可能很多,如果連接路徑中沒有(行為良好)代理服務器,則根本不列出IP地址。 實際標頭的格式為
X-Forwarded-For:client1,proxy1,proxy2,...
( 來源 )
地址:: 1是IPv6環回地址。 如果不進一步了解您的網絡體系結構,就不可能知道為什么用:: 1填充標題。
如果您只想獲取客戶端的IP地址,請使用
Request.ServerVariables [ “REMOTE_ADDR”]
請注意,這不是100%可靠的,因為某些代理將替換其自己的IP地址, 而不填充X-Forwarded-For標頭(AOL為此而臭名昭著,但還有許多其他示例)。
有沒有什么方法可以獲取IPv4地址?
盡管實際上大多數情況下仍然沒有為每個硬件分配IPv4地址。 如果可以獲取IPv4地址,則為127.0.0.1(localhost)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.