(转)asp.net中获得客户端的IP地址
2014-04-12 10:35
267 查看
因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下
方便以后查阅.通常我们都通过下面的代码获得IP:
string ip =System.Web.HttpContext.Current.Request.UserHostAddress;
或 string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
REMOTE_ADDR 说明:
访问客户端的 IP 地址。
此项信息用户不可以修改。
如果真的给改了的话,你也和服务器连接不了了,服务器就是按照这个来与客户端建立连接并进行通讯的。实际我测试修改这个 ServerVariables , 一点效果都没有。仍然获得是实际的值。
但如果用户使用了代理服务器,上述代码获得的是代理服务器的IP地址;如果用户使用了多个代理服务器,则是到达服务器的最后一个代理服务器的IP地址。
如何绕过代理服务器获得用户真实的IP地址呢?
private static string getIp()
{
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ',' })[0];
else
return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
Request.ServerVariables["HTTP_VIA"] ,ServerVariables["HTTP_X_FORWARDED_FOR"],Request.ServerVariables["REMOTE_ADDR"]的值分下面几种情况:
一、没有使用代理服务器的情况:
REMOTE_ADDR = 用户的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 用户的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
所以getIp()也不是最好的,因为可以编造一个假的IP,具体做法去看/article/4882127.html
总结:
"Request.UserHostAddress"是可信的.但是这样的话却又获取不了那些已使用了代理服务器的用户真实IP地址(因为在这时Request.UserHostAddress获取到的就是这代理服务器的IP)..
getIp()又有安全隐患
具体怎么做就要看自己选择了.
参考资料: http://blog.joycode.com/ghj/archive/2008/02/20/114827.aspx /article/4882127.html
相关文章推荐
- 微软YY免费公开课!《微软VS2013与.NET 4.5.1新特性、新技巧体验》
- asp.net文件操作小例子(创建文件夹,读,写,删)
- asp.net获取当前时间
- ASP.NET AJAX(开发代号Atlas)重要参考资源大收集
- T4 模板 : 一种提升ASP.NET MVC开发速度方法
- ASP.NET单选按钮控件RadioButton常用属性和方法介绍
- ASP.NET MVC5学习笔记之Controller执行ControllerDescriptor和ActionDescriptor
- Spring AOP的实现原理之<aop:aspectj-autoproxy />的解析
- selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)
- 利用Asp.net MVC处理文件的上传下载
- 处理ASP.NET 请求(IIS)
- 利用Asp.net MVC处理文件的上传下载
- Windows Server 2008下IIS 7配置ASP+ACCESS环境(超详细+图片)
- ASP.NET MVC中几个运用技巧
- asp.net 中插入数据到access
- 13个 ASP.NET MVC 的扩展
- 编译器错误消息: CS0201: 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
- ASP.NET ViewState详解
- 百度编辑器 ueditor1.1.8.1 For Asp.net 配置 上传功能详解
- ASP.NET根据URL生成网页缩略图示例程序(C#语言)