最近在做一个项目的时候,需要做一个自动的黑名单设置,也就是将一天内重复出错的超过一定次数的手机号,和IP给加入黑名单里面,下次请求的时候先判断是否在黑名单里。
这个是获取IP地址的方法
1 private string GetIP() 2 { 3 string ip = string.Empty; 4 if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"])) 5 ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]); 6 if (string.IsNullOrEmpty(ip)) 7 ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]); 8 return ip; 9 }
当时自己也没在意,就直接把出现错误的IP和手机存到相应的记录表里,当时我是拿自己的手机连的无线网和自己工位上的电脑测了一下没问题,可以准确获取到IP,然后就直接告诉客户没问题,就这样上线了,问题就这样的存在了。客户突然告诉我很多电话打过来说都是IP受限制,我看了一下,发现一个IP在分别用不同的手机号都出过错。这个怎么个情况呢,不可能存在这么多人用一个IP的网络啊。后来在网上查了下,才明白手机的数据网例如:2G,3G,4G这些网络不可能会一个手机号一个IP,一般都是一个地区的手机号都是一个IP,所以才出了我这边的这个错误。
然后这个当时我想到了两个解决方案,一是把IP次数加大。
另一个解决方案是把手机和一般的请求区分开,这样当时手机的请求出现时,就不考虑IP的这个问题,只有PC上的请求时再去考虑IP的问题。
这个两个方案其实都有一些瑕疵,但我这边时暂时是考虑不到请他的方法,希望高手们能多多指教。