PDA

View Full Version : آموزش: IP Block Module



fakhravari
پنج شنبه 26 بهمن 1391, 02:09 صبح
using System;
using System.Web;

namespace Fakhravary.Security
{
public class IPBlockModule : IHttpModule
{
public void Dispose() { }

public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Application_BeginRequest);
}

private void Application_BeginRequest(object source, EventArgs e)
{
HttpContext context = ((HttpApplication)source).Context;
string ipAddress = context.Request.UserHostAddress;
if (IsBlockedIpAddress(ipAddress))
{
context.Response.StatusCode = 403;
context.Response.Write("IPBlock");
}
}

private bool IsBlockedIpAddress(string ipAddress)
{

string sss = HttpContext.Current.Request.UserHostAddress;


string[] IPs = { "127.0.0.1",
"::1"
};

foreach (string IP in IPs)
{
if (IP == ipAddress)
return true;
}
return false;
}

}
}
<httpModules>
<add name="IPBlockModule" type="Fakhravary.Security.IPBlockModule"/>
</httpModules>

bitcob589
پنج شنبه 26 بهمن 1391, 12:10 عصر
اگر امکان دارد درباره کارکرد کد بالا توضیح دهید

behzada1
پنج شنبه 26 بهمن 1391, 13:20 عصر
میشه یه توضیحی در موردش بدید ؟؟؟

fakhravari
پنج شنبه 26 بهمن 1391, 13:52 عصر
با سلام
این آموزش ببینید http://barnamenevis.org/showthread.php?384177
در مورد موارد بالا بگم که دستوراتی که به سرور میرن قبل از رسیدن به هر صفحه توسط این IHttpModule برسی میشوند.
به صورت ساده if های ساده ای هستند که اتوماتیک قبل از هر درخواست برسی میشوند.

bitcob589
پنج شنبه 26 بهمن 1391, 23:57 عصر
آیا کدی که در پست یک نوشته شده است این امکان دارد ip خاصی را قفل نمایید

ahmad156
جمعه 27 بهمن 1391, 09:55 صبح
البته در مواردی که از ف... ش.. استفاده بشه به خاطر تغییر IP فکر کنم که جواب نده(یعنی دفعه بعد با یه IP جدید وارد میشه که دوباره باید Block بشه و دفعه بعد...)؟درسته؟

fakhravari
جمعه 27 بهمن 1391, 12:05 عصر
اره. دیگه نمیشناسه.
این توی شبکه های lan کاربرد داره که ip تغیر نمیکنن.
روی اینترنت هم باید خیلی بروزش کنید مثلا یه برنامه بنویسید که خودش زمانبندی کنه لیست سایتها را دربیاره به ip تبدیل کنه.

dorparasti
جمعه 27 بهمن 1391, 15:56 عصر
این روش بیشتر برای بلاک کردن کلاینت هایی است که تعداد درخواست هایی بیش از یک حد مجاز رو به سرور ارسال می کنند . برای مثال وقتی از سمت یک کلاینت در عرض یک دقیقه بیش از 1000 درخواست ارسال بشه ، مشخصه که این کلاینت عادی نیست و سعی بر ایجاد مشکل برای وب سایت داره پس با استفاده از این روش اون کلاینت رو برای مدت معینی بلاک می کنند .

dorparasti
جمعه 27 بهمن 1391, 16:01 عصر
اون متغیر sss که در تابع IsBlockedIpAddress تعریف کردید به نظر میرسه که اضافه باشه .

fakhravari
جمعه 27 بهمن 1391, 17:47 عصر
اون متغیر sss که در تابع IsBlockedIpAddress تعریف کردید به نظر میرسه که اضافه باشه .
هر کاری میکردم ip سیستم در نمیومد اون دستور نوشتم Ip به صورت ::1 داد