نوشتن پ ر ا ک س ی ( ف ی ل ت ر ش ک ن )
قابلیت های این ابزار:
· امکان گشت و گذار در وب با هویتی نامشخص
· داشتن ابزار دانلود (Download) که اجازه میدهد همه چیز را بدون در نظر گرفتن نوع آن از اینترنت دریافت کنید.
· پشتیبانی ابزار Download از دریافت چند مرحله ای (download resumable) که این امکان را فراهم می کند با استفاده از ابزار های دانلود هر زمانی عمل دانلود را قطع کرده و در زمان دیگری ادامه دهید.
· قابلیت نمایش صفحات با کدینگ نامشخص و به هم ریخته و نمایش با کدینگ استاندارد UTF-8
· پشتیبانی از فرم های ثبت نام و ارسال اطلاعات حتی امکان آپلود فایل از طریق ASProxy به سایت مورد نظر
· پشتیبانی از کوکی ها
· پشتیبانی از فایل های JavaScript و فایل های استیل صفحه (Cascade style sheet)
· پشتیبانی از فریم ها و صفحات FrameSet
· امکان فشرده سازی صفحات جهت دریافت سریع تر
· فابلیت نمایش آدرس اصلی لینک ها و همچنین تصاویر در نوار وضعیت
نمایش عنوان صفحه در مرورگر
نحوه نصب و استفاده در سایت somee (برای کابران مبتدی)
اولین چیزی که احتیاج دارید یک سایت رایگان با پشتیبانی ASP.Net است. که من سایت Somee.com را پیشنهاد می کنم در این آدرس: www.somee.com/FreePackage.aspx
پس از ایجاد سایت خود به یک ابزار FTP جهت انتقال فایل ها نیاز خواهید داشت مانند FlashFXP یا CuteFTP.
برای شروع در نرم افزار Ftp خود روی دکمه یا گزینه connect کلیک کنید و در پنجره باز شده در مقابل قسمت Host آدرس سایت خود مثلا name.somee.com را وارد نمایید سپس به ترتیب قسمتهای UserName و Password را با نام کاربری و کلمه عبورتان پر نمایید و پنجره را تایید کنید.
پس از ورود به محیط سایت اگر شاخه ای با نام سایت شما وجود داشت وارد آن بشوید وگرنه مراحل بعدی را ادامه دهید.
نتظیم Somee برای کار با ASP.NET 2
برای کار به سایت somee.com بروید. پس از لاگین شدن به سایت در بخش Control panel بر روی گزینه Web کلیک کنید. در این صفحه که با عنوان General information مشخص شده اطلاعات مربوط به حساب کاربری شما نمایش داده میشود.
در بالای نوشته General information چهار عدد دکمه است که باید روی آخرین با نام IIS Setup کلیک کنید.
در پایین صفحه و بالای دکمه cancel یک لیست کشویی وجود دارد با عنوان ASP.NET Version که از این لیست گزینه 20.50727 رو انتخاب کنید و سپس بر روی دکمه Update کلیک کنید.
آپلود فایلهای مورد نیاز به وب سایت ایجاد شده:
فقط کافی است که تمامی فایل های موجود در شاخه PrecompiledWeb رو به سرور کپی کنید. توجه کنید که محتویات درون آن و نه خود آن شاخه.
اکنون پراکسی شما آماده است و می توانید از آن استفاده نمایید.
برای مشاهده یک نمونه پراکسی که به این طریق ایجاد شده به این آدرس مراجعه نمایید:
http://asproxy0.somee.com
نحوه عملکرد:
فیلتر کردن اطلاعات معمولا به چند روش انجام می شود.
روش اول که ساده ترین روش است کنترل آدرس های ورودی و خروجی است؛ بدین ترتیب که ابزارهای فیلتر دارای لیست از سایت های غیر مجاز هستند. در صورتی که هر یک از این آدرس ها در آدرس درخواستی و یا آدرس برگشتی مشاهده شود نرم افزار فیلتر ارتباط را قطع کرده و مانع از دریافت اطلاعات می شود.
روش دوم نیز مانند روش اول دارای لیستی از آدرس ها است ولی علاوه بر آن دارای لیستی از از کلمات غیر مجاز نیز می باشد. که به طور هوشمند وجود این کلمات را در آدرس تشخیص داده و مانع از ادامه فعالیت آن سایت می شود.
در روش سوم علاوه بر روش قبلی که اعمال می شود؛ جستجو در میان محتویات سایت برگشتی نیز انجام می شود. به این ترتیب که موتور فیلتر گر درمیان متون به دنبال لینک ها وآدرس ها و همچنین کلمات تعیین شده می گردد در صورتی که فروانی آنها به حدی که به عنوان درصد حساسیت تعیین شده برسد سایت فیلتر خواهد شد. این روش نسبت به دو روش قبلی از قابلیت اطمینان بیشتری برخوردار است ولی سربار زیادی به همراه خواهد داشت و سبب کند شدن ارتباط و سریس دهی خواهد شد. معمولا در مراکز غیر عمومی که نیاز به کنترل بیشتر بر فعالیت کاربران است از این روش استفاده میشود.
هر سه روش که مطرح گردید بر یک پایه استوار هستند؛ لیستی از سایت ها و لیستی از کلمات غیر مجاز.
حال اگر ما با توجه به قوانین 1و2 اقدام به تغییر آدرس سایت کنیم؛ عملا خواهیم توانست ردیاب فیلتر را دور بزنیم. این دقیقا همان روشی است که تقریبا همه ابزار های عبور از فلتر از آن استفاده می کنند. توجه کنید که در روش سوم با تغییر آدرس سایت تا حدودی امکان عبور از فیلتر افزایش پیدا میکند.
چگونه ASProxy کار میکند
در ASProxy مراحل بدین صورت خواهد بود که کاربر باید وارد سایتی بشود که موتور ASProxy در آن نصب شده است. این سایت ممکن است توسط خود کاربر یا توسط شخص دیگری ایجاد شده باشد. کاربر در قسمت مربوطه آدرس مورد نظر را وارد کرده و در خواست خود را ارسال میکند. درخواست کاربر به درستی به سایت محل نصب ASProxy ارسال خواهد شد؛ که البته این بستگی به این دارد که سایت حاوی ASProxy بیش از حد، عمومی نشده باشد تا باعث شناسایی آن توسط ابزار فیلتر کننده نشود. موتور ASProxy درخواست شما را دریافت و اجرا کرده و داده های سایت مورد نظر کاربر را دریافت می کند. سپس با انجام پردازش های گوناگون اقدام به تغییر آدرس تمامی محتویات که به این سایت مربوط است از محل اصلی به آدرس سایت محل نصب ASProxy می کند و سر انجام نتیجه را به مرورگر کاربر ارسال میکند. در این حالت چون تمامی در خواست ها به و از سایت محل نصب ASProxy ارسال و دریافت می شود و از نظر فیلترینگ این سایت در لیست سیاه قرار ندارد، هیچ مشکلی در ارتباط پیش نخواهد آمد.
در زیر نمودار این فرایند را مشاهده می کنید:
Background
ابزار ASProxy دارای چند موتور پردازشی و چند کلاس عملیاتی است که در زیر لیست آنها را مشا هده میکنید:
· ASProxyResults:
o مسئول دریافت درخواست کاربر و تشخیص نوع درخواست و انجام عملیات پردازشی در صورت نیاز.
· UrlData:
o مسئول دریافت اطلاعات و داده به صورت صحیح از محل مورد درخواست است.
· HtmlProcessor:
o مسئول پردازش و بازنویسی کد های Html با استفاده از کلاس ها HtmlParser و HtmlTagsProccessor است.
· CSSProcessor:
o مسئول پردازش و بازنویسی کد های فایل استیل است که از کلاسهای CSSParser و CSSClasses برای این منظور استفاده می کند.
· CookieManager:
o مسئول مدیریت و پردازش کوکی های ارسالی و دریافتی است.
· ResumableDownload:
o مسئول انجام عملیات دانلود با خاصیت دریافت چند مرحله ای(download resumable ) است.
· HttpCompressor:
o مسئول فشرده سازی صفحات جهت افزایش سرعت تبادل اطلاعات است.
· Performance:
o حاوی تعدادی توابع جایگزین برای توابع ساده .NET freamwork است که باعث افزایش سرعت این موتور تا حد قابل توجهی می شود.
· ASProxyConfig:
o مسئول ذخیره سازی تنظیمات کاربر و به اشتراک گذاری آنها در بین درخواستها است.
· UrlProvider و UrlBuilder:
o حاوی تعدای تابع جهت انجام پردازش ها مختلف بر روی آدرس ها است.
· HtmlTags:
o حاوی تعدادی توابع جهت کارکردن با کد ها html است.
· ASProxyFunctions:
o حاوی تعدادی توابع عمومی که در این موتور مورد استفاده قرار می گیرند.
توضیحی بر توابع اصلی و نحوه به کارگیری آنها:
در اولین گام که کاربر آدرس سایت را در کادر وارد کرده و بر روی دکمه کلیک میکند لازم است تا یک نمونه از کلاس اصلی برای پردازش در خواست او ایجاد کنیم(مروبط به gethtml.aspx):
results=new ASProxyResults(Request,true,true,false,PageContentType.text_html); |
در این کد تعیین میکنیم که هدف ما اطلاعاتی از نوع html است. و سپس تابع DoResponse را برای اعمال مستقیم به خروجی فرا می خوانیم.
نحوه پیاده سازی این تابع به صورت زیر است:
public void DoResponse(HttpResponse response) { MemoryStream resultStream = null; string resultString = null; bool useResultStr = fProcessResponseHtml || fProcessResponseAsCSS; try { if (useResultStr) resultString = GetResponseString(); else resultStream = GetResponseStream(); if (fLastStatus == ASProxyLastStatus.Error) return; string responseContentType = ""; responseContentType = ASProxyFunctions.ContentTypeToString(fPageContentType); response.ClearContent(); ASProxyFunctions.ClearASProxyRespnseHeader(response); response.ContentType = responseContentType; if (fUseFileNameInHeader) _AddFileNameToHeader(response, fRequestUrl); response.AddHeader("Content-Type", responseContentType); ///============Set response content type========== response.Charset = fResponseContentCharset; response.ContentEncoding = fResponseContentEncoding; ///============Write result======================= if (useResultStr) response.Write(resultString); else { resultStream.WriteTo(response.OutputStream); resultStream.Close(); } fLastStatus = ASProxyLastStatus.Normal; response.Flush(); response.End(); } catch (ThreadAbortException) { } finally { if (resultStream != null) resultStream.Close(); resultString = null; } } |
مراحل انجام گرفته در این تابع به این ترتیب است که ابتدا با استفاده از متغیر useResultStr معلوم می شود که آیا خروجی ما رشته خواهد بود یا نه. این نشان دهنده آن است که آیا باید بر روی داده پردازشی صورت گیرد که البته مستلزم آن داده های رشته است.
با توجه به این موضوع هر کدام از توابع GetResponseString برای داده رشته ای و GetResponseStream برای داده های باینری اجرا می شود. این دو تابع با استفاده از کلاس UrlData اقدام به خواندن داده می کنند ولی تابع GetResponseString علاوه بر آن با استفاده از کلاس HtmlProcessor و CSSProcessor اقدام به پردازش داده ها نیز میکند.
نتیجه این پردازش ها هر چه باشد به طور مستقیم در ابجکت Response ریخته شده و بسته خواهد شد. برای جلوگیری از خطای ThreadAbortException در نتیجه این عمل بلاک try..catch لازم است. لازم به ذکر است که قبل از بستن حتما باید نوع کدینگ برگشتی درخواست ها به عنوان پاسخ تنظیم شود.
در زیر نحوه پیاده سازی GetResponseString را مشاهده می کنید:
public string GetResponseString() { fLastStatus = ASProxyLastStatus.Normal; try { InitializeData(); if (data.Status == DataStatus.Error) { this.fLastErrorMessage = data.ErrorMessage; this.fLastStatus= ASProxyLastStatus.Error; return ""; } fResponseContentType = data.ResponseContentType; if (fProcessResponseHtml) { HtmlProcessor proc = new HtmlProcessor(data); proc.Options = Options; string executed = proc.Execute(); fResponseContentPageTitle = proc.PageTitle; fResponseContentEncoding = proc.PageEncoding; fResponseContentCharset = proc.PageEncoding.BodyName; fResponseIsFrameSet = proc.HtmlIsFrameSet; return executed; } else if(fProcessResponseAsCSS) { CSSProcessor proc = new CSSProcessor(data); proc.Options = Options; string executed = proc.Execute(); fResponseContentEncoding = proc.ResponsePageEncoding; fResponseContentCharset = proc.ResponsePageEncoding.BodyName; return executed; } else { return System.Text.Encoding.UTF8.GetString(data.Data.GetBuffer()); } } catch (ThreadAbortException) { } finally { } return ""; } |
وظیفه این تابع انجام درخواست با استفاده از کلاس UrlData و انجام پردازش بر روی خروجی با استفاده از کلاس های HtmlProcessor و CSSProcessor است. تشخیص اینکه کدام یک از پردازش ها مورد نیاز است هنگام ایجاد کلاس ASProxyResults تعیین می شود در این تابع نیز با استفاده از fProcessResponseHtml و fProcessResponseAsCSS بررسی می شود.
اما در مورد نحوه فراخوانی کلاس UrlData لازم است که حتما تنظیماتی جهت تعیین نحوه ارسال و دریافت داده ها اعمال شود. این تنظیمات در تابع InitializeData انجام می شود که پیاده سازی آن را در زیر مشاهده میکنید.
public void InitializeData() { if (data == null) { data = new UrlData(fRequestUrl); data.RequestMethod = fRequestMethod; data.RequestPostDataString = fPostedFormData; data.AcceptCookies = fOptions.AcceptCookies; data.RequestContentType = fRequestContentType; data.RequestInputStream = fRequestInputStream; data.Execute(); fResponsePageUrl = data.ResponsePageUrl; if (string.IsNullOrEmpty(fResponsePageUrl)) fResponsePageUrl=fRequestUrl; if (data.Status == DataStatus.Error) { this.fLastErrorMessage = data.ErrorMessage; this.fLastStatus = ASProxyLastStatus.Error; return ; } ReceiveFirstInfo(); } } |
منبع :
نویسنده مقاله : آقاي سالار خلیل زاده
سايت آقاي سالار خليل زاده : http://www.salarsoft.somee.com/index.htm