我在使用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());
任何帮助将不胜感激。谢谢!
答案 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)。