c#没有显示完整的IP地址

本文关键字:IP 地址 显示 | 更新日期: 2023-09-27 18:19:02

我有一些问题获得完整的IP地址与c#。当我通过单击按钮调用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>");
    }

任何帮助都会很感激。谢谢!

c#没有显示完整的IP地址

这一行

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

不一定能得到客户端的IP地址,这取决于您的网络设置。X_FORWARDED_FOR标头可由您和浏览器之间的代理服务器添加。可以列出许多IP地址,或者如果连接路径中没有(行为良好的)代理服务器,则根本没有IP地址。实际报头的格式是

x - forward - for: client1, proxy1, proxy2,…

(源)

address::1为IPv6环回地址。如果不进一步了解您的网络架构,就不可能知道为什么头中填充了::1。

如果您只想获取客户端的IP地址,请使用

请求。ServerVariables("REMOTE_ADDR")

请注意,这不是100%可靠的,因为一些代理将替换他们自己的IP地址,而不是填充X-Forwarded-For标头(AOL为此臭名昭著,但还有许多其他例子)。

是否有办法获得IPv4地址,还是不可能?

并不是每个硬件仍然分配一个IPv4地址,尽管作为一个实际问题,大多数仍然是。如果您可以获得IPv4地址,它将是127.0.0.1 (localhost)。