[英]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.