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>");
}
任何帮助都会很感激。谢谢!
这一行
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)。