using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.IO; namespace CB.Common { public class BlackIpHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(Application_BeginRequest); } private void Application_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; //using (var sw = new StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ipaddress.txt"), true, System.Text.Encoding.Default)) //{ // sw.WriteLine("Ip => " + IPAddress); // sw.Flush(); //} if (BlackIPs.Any(ip => ip == IPAddress)) { application.Context.Response.Write("禁止访问"); application.Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden; application.CompleteRequest(); } } public static string IPAddress { get { string userIP; // HttpRequest Request = HttpContext.Current.Request; HttpRequest Request = HttpContext.Current.Request; // ForumContext.Current.Context.Request; // 如果使用代理,获取真实IP if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "") userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; else userIP = Request.ServerVariables["REMOTE_ADDR"]; if (userIP == null || userIP == "") userIP = Request.UserHostAddress; return userIP; } } private volatile static List _blacklist = null; public List BlackIPs { get { if (_blacklist == null) { _blacklist = new List(); string s = System.Configuration.ConfigurationManager.AppSettings["blackips"]; if (!string.IsNullOrEmpty(s)) { _blacklist.AddRange(s.Trim().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); } } return _blacklist; } } } }