मेरे आवेदन में मैं सर्वर द्वारा संसाधित होने के लिए मेरी वेबसाइट के लॉगिन पृष्ठ पर अनुरोध को सीमित करना चाहता हूं और यदि अनुरोध विशिष्ट संख्या से बढ़ता है तो आईआईएस को उस आईपी पते को कुछ समय के लिए अवरुद्ध करना चाहिए। मैं आईआईएस 'आईपी एड्रेस और डोमेन प्रतिबंध' सुविधा के माध्यम से चला गया हूं, लेकिन अगर मेरी वेबसाइट पर किसी अन्य पेज और ऑपरेशन के लिए लॉगिन पेज के लिए अनुरोध नहीं आता है तो मैं अनुरोध को अवरुद्ध करना चाहता हूं। आईआईएस का उपयोग करके हम इसे कैसे प्राप्त कर सकते हैं?

4
Aishwary Rastogi 18 मार्च 2020, 07:51

1 उत्तर

सबसे बढ़िया उत्तर

IIS IP प्रतिबंध का उपयोग केवल साइट स्तर के लिए किया जा सकता है। आप विशिष्ट नियंत्रक या फ़ोल्डर के लिए गतिशील IP प्रतिबंध सेट नहीं कर सकते। तो इसके बजाय कस्टम httpmodule का उपयोग करने की अनुशंसा की जाती है। आप इस कोड में एक फ़िल्टर जोड़ सकते हैं ताकि httpmodule केवल आपके लॉगिन पृष्ठ पर हिट नंबर को प्रमाणित करे।

सीएस1

public class UrlReWrite : IHttpModule
        {

            private int rowCount = Convert.ToInt32(ConfigurationManager.AppSettings["HttpRowCount"]);

            private int httpTime = Convert.ToInt32(ConfigurationManager.AppSettings["HttpTime"]);
            public void Init(HttpApplication application)
            {
                application.BeginRequest += (new
                   EventHandler(this.Application_BeginRequest));
                application.EndRequest += (new
                   EventHandler(this.Application_EndRequest));
            }
            private void Application_BeginRequest(Object source, EventArgs e)
            {
                HttpApplication Application = (HttpApplication)source;
                HttpContext ctx = Application.Context;

                string isIp = ctx.Request.UserHostAddress;
                if (ctx.Application["time"] == null)
                {
                    ctx.Application["time"] = DateTime.Now;
                }
                else
                {
                    DateTime isTime = (DateTime)ctx.Application["time"];
                    int timeTract = Convert.ToInt32(DateTime.Now.Subtract(isTime).Minutes.ToString());
                    if (timeTract > (httpTime - 1))
                    {
                        ctx.Application["time"] = null;
                        ctx.Application["myip"] = null;
                    }
                }
                if (ctx.Application["myip"] != null && ctx.Application["myip"] is CartIp)
                {
                    CartIp cartIp = (CartIp)ctx.Application["myip"];
                    cartIp.Insert(isIp);
                    ctx.Application["myip"] = cartIp;
                    if (cartIp.GetCount(isIp) > rowCount)
                    {
                        ctx.Response.Clear();
                        ctx.Response.Close();
                    }
                }
                else
                {
                    CartIp cartIp = new CartIp();
                    cartIp.Insert(isIp);
                    HttpContext.Current.Application["myip"] = cartIp;
                }
            }
            private void Application_EndRequest(Object source, EventArgs e)
            {
            }
            public void Dispose()
            {
            }
        }
    }

Class2.cs

[Serializable]
    public class ListIp
    {
        private string ip;
        private int count;

        public string IP
        {
            get { return ip; }
            set { ip = value; }
        }

        public int Count
        {
            get { return count; }
            set { count = value; }
        }
    }
    [Serializable]
    public class CartIp
    {
        public CartIp()
        {
            if (_listIp == null)
            {
                _listIp = new List<ListIp>();
            }
        }
        private List<ListIp> _listIp;
        public List<ListIp> _ListIp
        {
            get { return _listIp; }
            set { _listIp = value; }
        }

        public void Insert(string ip)
        {
            int indexof = ItemLastInfo(ip);
            if (indexof == -1)
            {

                ListIp item = new ListIp();
                item.IP = ip;
                _listIp.Add(item);
            }
            else
            {
                _listIp[indexof].Count += 1;
            }
        }

    public int ItemLastInfo(string ip)
    {
        int index = 0;
        foreach (ListIp item in _ListIp)
        {
            if (item.IP == ip)
            {
                return index;
            }
            index += 1;
        }
        return -1;
    }
    /// <summary>
    /// get number of IP address
    /// </summary>
    /// <param name="ip"></param>
    /// <returns></returns>
    public int GetCount(string ip)
    {
        foreach (ListIp item in _ListIp)
        {
            if (item.IP == ip)
            {
                return item.Count;
            }
        }
        return -1;
    }
}

वेब.कॉन्फ़िगरेशन

<appSettings>
<add key="HttpRowCount" value="100"/>
<add key="HttpTime" value="10"/>
</appSettings>

आपको केवल कक्षा पुस्तकालय बनाने की जरूरत है। फिर अपनी आवश्यकता को प्राप्त करने के लिए इन कोड को कॉपी और संशोधित करें। अंत में, आपको रिलीज डीएल को बिन फ़ोल्डर में कॉपी करना होगा और इसे आईआईएस मैनेजर-> साइट नोड-> मॉड्यूल-> प्रबंधित मॉड्यूल जोड़ें के माध्यम से आयात करना होगा।

https://www.cnblogs.com/Fooo/archive/2013/01/27/2878820.html

4
Jokies Ding 19 मार्च 2020, 05:32