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

时间:2015-10-22 21:15:26

标签: javascript c#

我在使用C#获取完整IP地址时遇到了一些问题。当我通过单击按钮调用C#Web方法时,它会在JavaScript警告框中显示(或应该)IP地址。我得到的不是IP地址而是:: 1。我是通过Visual Studio 2015社区运行的。这是我的代码:

   // 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>");
    }

处理按钮的方法点击:

QString hex = "0234301c4c49541d4741546f77617220a5a91e42411e43311e44332c30301e45332c30301e47737a74756b613742413303";
QByteArray test = QByteArray::fromHex(hex.toLatin1());

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

这一行

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

不一定会获取客户端的IP地址,具体取决于您的网络设置。您和浏览器之间的代理服务器可选择添加X_FORWARDED_FOR标头。如果连接路径中没有(表现良好的)代理服务器,则可以列出许多IP地址,或者根本不存在任何IP地址。实际标题的格式为

X-Forwarded-For:client1,proxy1,proxy2,...

source

address :: 1是IPv6环回地址。在不进一步了解您的网络架构的情况下,无法知道为什么标头填充了:: 1。

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

Request.ServerVariables [&#34; REMOTE_ADDR&#34;]

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

  

有没有办法获取IPv4地址或者这是不可能的?

并非所有硬件都分配了IPv4地址,但实际上,大多数仍然是。如果你可以获得IPv4地址,那么它将是127.0.0.1(localhost)。