簡體   English   中英

C#沒有顯示完整的IP地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM