تبليغاتX
هک

هک

درباره وبلاگ

فهرست اصلی
صفحه نخست
پست الكترونيك
آرشيو مطالب
پیوندهای روزانه
هکک
تمام پیوندها
نوشته های پیشین
شهریور 1387
مرداد 1387
تیر 1387
خرداد 1387
اردیبهشت 1387
پیوندها
Hack
hack1
hack3
hack4
hack5
hack6
قالب وبلاگ

طراحی اختصاصی توسط:
طراحی وب سایت تجاری و قالب وبلاگ
Powered By
BLOGFA.COM
FallT Example Page onLoad and onUnload Example

آموزش وبلاگ نويسي

آموزش جاوااسكريپت

كدهاي جاوااسكريپت

ترفندهاي ويندوز

لينك

لينك

لينك

لينك

لينك

لينك

لينك

 

مروری بر زبانهای برنامهنويسی محيط لينوكس

 

 

مقدمه
سيستم عامل لينوكس را میتوان از جنبه برنامهنويسی يك سيستم عامل منحصربهفرد دانست چون به تمام كاربران خود اين امكان را میدهد كه در توسعه سيستم عامل سهيم و دخيل شوند. البته تنوع زبانهای برنامهنويسی موجود در اين سيستم عامل میتواند برای كسانی كه میخواهند برنامهنويسی در اين محيط را آغاز كنند، عامل سردرگمی شود. در اين مقاله به معرفی اجمالی برخی زبانهای برنامهنويسی پركاربردتر در اين محيط میپردازيم و آنها را از بعضی جنبههای كليدی با يكديگر مقايسه میكنيم.

   تمركز اين مطلب بر مرور اين زبانهای برنامهنويسی است و تلاشی برای تعيين اينكه كداميك بهترين گزينه برای برنامهنويسان هستند، صورت نخواهد گرفت. در واقع هركدام از اين زبانها میتوانند نيازها و سليقههای خاص كاربران خود را برآورده كنند و هيچيك را نمیتوان به طور مطلق برتر از سايرين دانست. به همين دليل مطالعه بيشتر در مورد هركدام از اين زبانها را میتوان مفيد دانست.

   تعداد زيادی زبان و كتابخانه برنامهنويسی در لينوكس وجود دارد. در نتيجه در اينجا تنها به بررسی آنهايی خواهيم پرداخت كه طبق آمار و ارقام از سايرين پراستفادهتر هستند. منبع مورد استفاده برای اين مطلب، كاری است كه در LDP (پروژه مستندسازی لينوكس يا Linux Documentation Project) انجام شده است كه نشاندهنده اعتبار آن در نزد متوليان لينوكس است.

زبانهايی كه در اينجا مورد بررسی قرار خواهند گرفت عبارتند از:

  1. زبانهای C، Perl، و Lisp به عنوان زبانهايی كه از روزهای اول پيدايش لينوكس در آن قرار گرفته بودند
  2. زبانهای Python، PHP، Java و C++ به عنوان زبانهايی كه نسبت به گروه اول جديدتر هستند

معيارهای مقايسه

در بخش مقايسه، خصوصيات زير برای هريك از زبانها بيان خواهد شد.

نام زبان

عنوانی كه عموما زبان مورد بررسی به وسيله آن شناخته میشود.

مبتدی

   معياری است كه نشان میدهد كار با زبان مورد بررسی چقدر برای افرادی كه دارای تجربه كمی در زمينه برنامهنويسی هستند راحت است. زبانهايی كه اين معيار برای آنها «بله» تعيين شده باشد را میتوان مناسب حال برنامهنويسان مبتدی دانست.

كارايی

   نشان میدهد كه برنامههايی كه با اين زبان نوشته شده باشند، در هنگام استفاده چقدر سريع خواهند بود. البته كارايی بيشتر به الگوريتمهای مورد استفاده در برنامه بستگی دارد تا به زبان برنامهنويسی. ولی يك قانون نانوشته میگويد كه C، C++ و Fortran معمولا برنامههايی با كارايی بالاتر توليد میكنند. به طور مثال میتوان به يك آزمايش اتكا كرد كه البته خيلی هم علمی نيست. در اين آزمايش يك برنامه مرتبسازی اعداد با يك الگوريتم ثابت در زبانهای مورد مقايسه پيادهسازی میشود و سرعت اجرای آنها با يكديگر مقايسه میشود و مبنای تعيين كارايی زبان برنامهنويسی قرار میگيرد.

OOP: برنامهنويسی شیءگرا در مقابل ساير روشهای برنامهنويسی

   برنامهنويسی شیءگرا يا Object Oriented Programming (OOP) يكی از مهمترين روشهای برنامهنويسی است كه روز به روز بر محبوبيت آن افزوده میشود. در اين روش، ساختار دادهها و الگوريتمها در واحدهايی كه معمولا به نام كلاس (Class) شناخته میشوند، قرار میگيرند. OOP معمولا با روش برنامهنويسی رويهای (procedural) كه در آن دادهها و الگوريتمها از يكديگر جدا هستند مورد مقايسه قرار میگيرد. البته امكان برنامهنويسی شیءگرا را نمیتوان كاملا وابسته به زبان برنامهنويسی دانست. مثلا با وجود اين كه زبان C يك زبان شیءگرا محسوب نمیشود میتوان در آن برنامههای شیءگرا نوشت و به همين ترتيب در زبانهايی كه مشخصه اصلی آنها شیءگرايی است میتوان برنامههای رويهای توليد كرد.

   در اينجا زبانهايی كه مشخصه OOP برای آنها ذكر شده است، قابليتهای خاصی را برای تسهيل برنامهنويسی شیءگرا ارائه میكنند. زبانهای تابعی (functional) نظير Lisp گونه متفاوتی از زبانها هستند. برنامهنويسی شیءگرا را میتوان شاخهای از برنامهنويسی تابعی دانست. برنامهنويسی منطقی (logical) كه به نام برنامهنويسی تعريفی (declarative) نيز شناخته میشود و زبان prolog شاخصترين نمونه آن است، گونه كاملا متفاوتی از برنامهنويسی است كه شباهت زيادی با ساير روشها ندارد.

RAD: توليد سريع برنامهها (Rapid Application Development)

   اين معيار بيشتر از آن كه به زبان مورد استفاده بستگی داشته باشد، وابسته به ابزارهايی است كه در توليد برنامه مورد استفاده قرار میگيرند. RAD در اثر استفاده مجدد از كدهای پيشنوشته (code reuse) نيز بسيار افزايش میيابد.

مثالها

   اين معيار حوزههايی را مشخص میكند كه زبان مورد بحث در آنها بيشتر استفاده میشود. البته كاربردهای خوب و بد ديگری هم علاوه بر موارد ذكر شده وجود دارد اما به علت عام نبودن آنها ذكر نشدهاند.

توضيحات

اطلاعات بيشتری در مورد زبان مورد بحث در اين بخش ارائه خواهد شد.

مقايسه زبانها

   در اين بخش همان طور كه گفته شد، معيارهای معرفی شده در بالا را برای برخی زبانهای اصلی محيط لينوكس مورد بحث قرار میدهيم.

زبان Perl

مبتدی: بله
OOP: بله
مثال
ها: نبشتهنويسی (scripting)، ابزاری برای مديران سيستم، برنامهنويسی وب
توضيحات: ابزاری قدرتمند برای كار با متن و رشته
های حرفی (string)

زبان Python

مبتدی: بله
OOP: بله
مثال
ها: نبشتهنويسی، برنامهنويسی وب
 

زبان TCL

مبتدی: بله
OOP: خير
مثال
ها: نبشتهنويسی، ابزاری برای مديران سيستم، برنامههای كاربردی

زبان PHP

مبتدی: بله
OOP: بله
مثال
ها: برنامهنويسی وب
توضيحات: استفاده زيادی در كاربردهای پايگاه
داده در وب دارد

زبان Java

مبتدی: بله
OOP: بله
مثال
ها: برنامههای چندمحيطی (cross-platform)، برنامهنويسی وب
توضيحات: به مرور به حوزه
های جديدی مانند تجارت الكترونيك و بسياری كاربردهای ديگر وارد میشود.

زبان Lisp

مبتدی: بله
OOP: اين زبان تابعی است
مثال
ها: برنامهنويسی هوش مصنوعي
توضيحات: نسخه
های متعددی از آن وجود دارد مانند Elisp، Clisp، و Scheme

زبان Fortran

مبتدی: خير
OOP: خير
مثال
ها: كاربردهای محاسباتی و علمي

زبان C

مبتدی: خير
OOP: خير
مثال
ها: برنامهنويسی سيستم، برنامههای كاربردي

زبان C++

مبتدی: خير
OOP: بله
مثال
ها: برنامههای كاربردی

Shell Programming

   Shellها محيط برنامهنويسی بسيار مهمی در لينوكس محسوب میشوند. اگر شما میخواهيد يك كاربر حرفهای لينوكس باشيد، حتما بايد با اين نوع برنامهنويسی نيز آشنا باشيد. شباهتهايی بين برنامهنويسی Shell و ساير زبانهای نبشتهنويسی (scripting) وجود دارد. در واقع اغلب از هردوی آنها برای رسيدن به اهداف مشابهی استفاده میشود. از پركاربردترين Shellهای محيط لينوكس میتوان bash، tcsh، csh، ksh، و zsh را نام برد.

برخی زبانهای ديگر

   علاوه بر زبانهايی كه در اينجا مورد بررسی قرار گرفتند، زبانهای ديگری نيز در لينوكس وجود دارند كه تنها به نام بردن آنها اكتفا میكنيم. در صورت علاقه، منابع بسيار زيادی در مورد اين زبانها چه در خود محيط لينوكس (با استفاده از دستور man) و چه روی اينترنت میتوان يافت. اين زبانها عبارتند از: AWK، SED، Smalltalk، Eiffel، Ada، Prolog، assembler، Objective C، Logo، و Pascal (با استفاده از مبدل p2c). همچنين http://www.tunes.org/Review/Languages.html اطلاعات بيشتری را در مورد زبانهای برنامهنويسی ارائه میكند..

 

نوشته شده توسط رضا در ساعت | لینک ثابت |


مقدمه ای بر تشخیص نفوذ (Intrusion Detection)

تشخیص نفوذ عبارت است از پردازه تشخیص تلاشهایی که جهت دسترسی غیرمجاز به یک شبکه یا کاهش کارایی آن انجام می شوند.در تشخیص نفوذ باید ابتدا درک صحیحی از چگونگی انجام حملات پیدا کرد. سپس بنابر درک بدست آمده، روشی دو مرحله ای را برای متوقف کردن حملات برگزید. اول این که مطمئن شوید که الگوی عمومی فعالیتهای خطرناک تشخیص داده شده است. دوم این که اطمینان حاصل کنید که با حوادث مشخصی که در طبقه بندی مشترک حملات نمی گنجند، به سرعت رفتار می شود.

به همین دلیل است که بیشتر سیستم های تشخیص نفوذ (IDS) بر مکانیزمهایی جهت بروزرسانی نرم افزارشان متکی هستند که جهت جلوگیری از تهدیدات شبکه به اندازه کافی سریع هستند.

البته تشخیص نفوذ به تنهایی کافی نیست و باید مسیر حمله را تا هکر دنبال کرد تا بتوان به شیوه مناسبی با وی نیز برخورد کرد. انواع حملات شبکه ای با توجه به طریقه حمله یک نفوذ به شبکه معمولا یک حمله قلمداد می شود.

حملات شبکه ای را می توان بسته به چگونگی انجام آن به دو گروه اصلی تقسیم کرد. یک حمله شبکه ای را می توان با هدف نفوذگر از حمله توصیف و مشخص کرد. این اهداف معمولا از کار انداختن سرویس (DOS یا Denial of Service) یا دسترسی غیرمجاز به منابع شبکه است.

 

 1- حملات از کار انداختن سرویس در این نوع حملات ، هکر استفاده از سرویس ارائه شده توسط ارائه کننده خدمات برای کاربرانش را مختل می کند. در این حملات حجم بالایی از درخواست ارائه خدمات به سرور فرستاده می شود تا امکان خدمات رسانی را از آن بگیرد. در واقع سرور به پاسخگویی به درخواستهای بی شمار هکر مشغول می شود و از پاسخگویی به کاربران واقعی باز می ماند. 2

 

- حملات دسترسی به شبکه در این نوع از حملات، نفوذگر امکان دسترسی غیرمجاز به منابع شبکه را پیدا می کند و از این امکان برای انجام فعالیتهای غیرمجاز و حتی غیرقانونی استفاده می کند. برای مثال از شبکه به عنوان مبدا حملات DOS خود استفاده می کند تا درصورت شناسایی مبدا، خود گرفتار نشود. دسترسی به شبکه را می توان به دو گروه تقسیم کرد.

 الف– دسترسی به داده : در این نوع دسترسی ، نفوذگر به داده موجود بر روی اجزاء شبکه دسترسی غیرمجاز پیدا می کند. حمله کننده می تواند یک کاربر داخلی یا یک فرد خارج از مجموعه باشد. داده های ممتاز و مهم معمولا تنها در اختیار بعضی کاربران شبکه قرار می گیرد و سایرین حق دسترسی به آنها را ندارند. در واقع سایرین امتیاز کافی را جهت دسترسی به اطلاعات محرمانه ندارند، اما می توان با افزایش امتیاز به شکل غیر مجاز به اطلاعات محرمانه دسترسی پیدا کرد. این روش به تعدیل امتیاز یا Privilege Escalation مشهور است.

ب- دسترسی به سیستم : این نوع حمله خطرناکتر و بدتر است و طی آن حمله کننده به منابع سیستم و دستگاهها دسترسی پیدا می کند. این دسترسی می تواند شامل اجرای برنامه ها بر روی سیستم و به کار گیری منابع آن در جهت اجرای دستورات حمله کننده باشد. همچنین حمله کننده می تواند به تجهیزات شبکه مانند دوربینها ، پرینترها و وسایل ذخیره سازی دسترسی پیدا کند. حملات اسب ترواها ، Brute Force و یا استفاده از ابزارهایی جهت تشخیص نقاط ضعف یک نرم افزار نصب شده بر روی سیستم از جمله نمونه های قابل ذکر از این نوع حملات هستند.

فعالیت مهمی که معمولا پیش از حملات DoS و دسترسی به شبکه انجام می شود، شناسایی یا reconnaissance است. یک حمله کننده از این فاز جهتی افتن حفره های امنیتی و نقاط ضعف شبکه استفاده می کند. این کار می تواند به کمک بعضی ابزارها آماده انجام پذیرد که به بررسی پورتهای رایانه های موجود بر روی شبکه می پردازند و آمادگی آنها را جهت انجام حملات مختلف بر روی آنها بررسی می کنند. انواع حملات شبکه ای با توجه به حمله کننده حملات شبکه ای را می توان با توجه به حمله کننده به چهار گروه تقسیم کرد :

 1- حملات انجام شده توسط کاربر مورد اعتماد (داخلی) : این حمله یکی از مهمترین و خطرناکترین نوع حملات است، چون از یک طرف کاربر به منابع مختلف شبکه دسترسی دارد و از طرف دیگر سیاستهای امنیتی معمولا محدودیتهای کافی درباره این کاربران اعمال نمی کنند.

2- حملات انجام شده توسط افراد غیر معتمد (خارجی) : این معمولترین نوع حمله است که یک کاربر خارجی که مورد اعتماد نیست شبکه را مورد حمله قرار می دهد. این افراد معمولا سخت ترین راه را پیش رو دارند زیرا بیشتر سیاستهای امنیتی درباره این افراد تنظیم شده اند