2015-10-22 37 views
1

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

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

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

+3

这是一个完整的IP地址;它是IPv6本地主机。 – SLaks

+0

有什么方法可以获得IPv4地址或者这是不可能的? – user2101411

回答

1

此行

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

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

X - 转发,对于:客户端1,PROXY1,Proxy2发出,...

source

地址:: 1是IPv6环回地址。在不进一步了解您的网络体系结构的情况下,无法知道为什么标题使用:: 1填充。

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

Request.ServerVariables [“REMOTE_ADDR”]

请注意,这不是100%可靠,因为有些代理服务器将取代自己的IP地址和而不是填充X-Forwarded-For头(AOL对此很臭名昭着,但还有很多其他示例)。

有什么方法可以获得IPv4地址或者这是不可能的?

不是每一块硬件都分配了一个IPv4地址,尽管实际上大多数仍然是。如果你能得到IPv4地址,它将是127.0.0.1(本地主机)。

+0

它从内置的IIS服务器运行Visual Studio社区2015 – user2101411

+0

感谢您的帮助! – user2101411