繁体   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