چند کلمه در شرح محتوای وب‌سایت...

سرتیتر صفحه جدید

آشنايي با کتابخانه Windows Packet Capture - بخش 1,2,3,4

مقدمه :

برای آشنايي با مبانی شبکه های TCP/IP به بحث
مروری بر TCP/IP مراجعه کنيد .

معرفی :

کتابخانه WinPcap يک معماری برای استخراج Packet های TCP/IP و آناليز شبکه در محيطهای ۳۲ بيتی ويندوز می باشد . اين کتابخانه شامل سه بخش است :

۱ - يک فيلتر Packet در سطح هسته سيستم عامل ( Kernel )

۲ - يک کتابخانه dll سطح پايين ( low-level ) با نام packet.dll

۳ - يک کتابخانه مستقل از سيستم عامل و سطح بالا ( high-level ) با نام wpcap.dll

فيلتر packet يک درايور دستگاه ( device driver ) است که به ويندوزهای ۹۵ ، ۹۸ ، ME ، NT و ۲۰۰۰ قابليت استخراج و capture کردن و نيز ارسال داده خام ( raw data ) از يک کارت شبکه را می دهد . همچنين اين امکان را دارد که packet های capture شده را در يک بافر ذخيره کند و يا آنها را فيلتر نمايد .
packet.dll يک API است که بمنظور دسترسی مستقيم به عملکرد درايور packet استفاده می شود . بنابراين packet.dll يک واسط برنامه نويسی مستقل از سیستم عامل های مايکروسافت را مهيا می کند .
Wpcap.dll مجموعه ای از ابزارهای سطح بالای اصلی برای capture را مهيا می کند که اين توابع با کتابخانه libpcap ( کتابخانه capture در سيستم عامل UNIX ) سازگار می باشند . اين توابع اجازه capture کردن packet ها را با روشی مستقل از سخت افزار شبکه و مستقل از سيستم عامل مهيا می کنند .

دريافت کتابخانه WinPcap :

نسخه WinPcap 2.2 :
برای دريافت برنامه auto-installer ( شامل درايور و DLL های مربوطه ) برای سيستم هایWindows 95/98/ME/NT/2000 به آدرس زير مراجعه کنيد :
WinPcap auto-installer (driver +DLLs)
برای دريافت بسته توسعه دهنده اين کتابخانه که شامل برنامه های نمونه ايجاد شده توسط packet capture driver و packet.dll و libpcap است ، به آدرس زير مراجعه کنيد :
Developer's pack
برای دريافت source code کتابخانه WinPcap به آدرس زير مراجعه کنيد :
WinPcap source code

=================

پاسخ به سوالاتی در مورد کتابخانه WinPcap :

۱ - WinPcap چگونه روی سيستم نصب می شود ؟
در صورت اجرای فايل نصب ، فايل درايور و Dll های مربوطه در دايرکتوری سيستم شما کپی می شوند . همچنين در Control Panel بخش Add/Remove Program می توانيد عبارت WinPcap را مشاهده کنيد .

۲ - آيا WinPcap 2.2 آخرين نسخه WinPcap است ؟
خير . آخرين نسخه WinPcap نسخه ۲.۳ می باشد که از آدرس زير قابل دريافت است :
Support Windows 95/98/ME/NT/2000/XP
WinPcap auto-installer:driver +DLLs
Developer's pack
WinPcap source code
همچنين WinPcap 3.0 Alpha 4 را می توانيد از آدرس زير دريافت کنيد :
WinPcap auto-installer:driver +DLLs

۳ - چگونه می توان فهميد که WinPcap در حال اجرا روی يک کامپيوتر Win2k/XP است ؟
در بخش Run دستور msinfo32 را وارد کنيد . سپس در بخش Software Environment و سپس بخش System Drivers بايستی عبارت NPF را ببينيد .

۴ - برنامه های بر مبنای WinPcap ( مثل Windump که بعداً در مورد آن صحبت خواهم کرد ) بدرستی اجرا نمی شوند . آيا اشکال از WinPcap است ؟
برنامه Windump را نصب کنيد . دستور windump -D ليست آداپتورهای مجاز را گزارش می دهد و همچنين نشان می دهد که آيا WinPcap قادر به شناسايی درست سخت افزار شما بوده است يا نه . اگر Windump درست کار کند ، اشکال از برنامه شماست نه از WinPcap .

۵ - آيا می توان از WinPcap در اتصالات PPP (‌ اتصالات مودمی ) استفاده کرد ؟
در ويندوز ۹۵ بخاطر باگی که در NDIS است WinPcap گاهی اوقات اتصال PPP را reset می کند . در ويندوزهای ۹۸ و ME اين مشکل وجود ندارد اما گاهی اوقات قادر به ارسال packet نيست . در ويندوزهای NT/2k/XP نيز برخی مشکلات در فرايند binding وجود دارد که مانع از درست کار کردن درايور پروتکل روی آداپتور WAN می شود . اين مشکل بخاطر درايور PPP با نام ndiswan است که يک واسط استاندارد را برای capture کردن مهيا نمی کند .

۶ - Security در WinPcap چگونه است ؟
مدل Security اين برنامه ضعيف است و نويسندگان اين برنامه درحال کار روی آن هستند .

۷ - آيا از WinPcap می توان در محيطهای برنامه نويسی Borland استفاده کرد ؟
برای اينکه بتوان از امکانات WinPcap در C++ Builder استفاده کرد بايستی توسط برنامه COFF2OMF.EXE که در دايرکتوری Borland وجود دارد ، کتابخانه های Packet.lib و wpcap.lib که بر اساس استانداردهای مايکروسافت ( استاندارد COFF ) هستند را به استاندارد OMF تبديل کنيد مثال : COFF2OMF input.lib output.lib

۸ - آيا می توان از WinPcap در ويژوال بيسيک استفاده کرد ؟
بطور مستقيم نمی توان از اين کتابخانه در VB استفاده کرد . شرکت BeeSync يک کنترل ActiveX با نام PacketX ايجاد کرده که بوسيله آن می توان از تواناييهای WinPcap در ويژوال بيسک يا هر محيط ديگری که Microsoft ActiveX technology را پشتيبانی کند استفاده کرد .

بحث در مورد اين ActiveX موضوع بخش بعدی اين سلسه مقالات می باشد .

۹ - آيا WinPcap می تواند با فايروال کار می کند ؟
ممکنست گاهی اوقات کار نکند .

۱۰ - آيا می توان از WinPcap در جاوا استفاده کرد ؟
WinPcap بطور مستقيم از جاوا پشتيبانی نمی کند اما در
اين آدرس می توانيد يک Java wrapper را برای اينکار دريافت کنيد .

۱۱ - آيا WinPcap از device های loopback پشتيبانی می کند ؟
خير و علت آن بخاطر محدوديتهای ويندوز است .

۱۲ - WinPcap از چه سخت افزارهايي پشتيبانی می کند ؟
NPF device driver طوری توسعه يافته که بتواند با آداپتورهای اترنت درست کار کند اما نمی تواند بدرستی با آداپتورهای PPP WAN ( مودمها ) کار کند . همچنين نبايستی با کارتهای FDDI, ARCNET, ATM و Token Ring مشکلی داشته باشد اما اين امر بطور قطعی تائيد شده نيست . با آداپتورهای Wireless نيز نمی تواند درست کار کند و در بهترين حالت قادرست يک Ethernet emulation را ببيند .

۱۳ - آيا می توان توسط WinPcap ، بسته های اطلاعاتی ورودی را Drop کرد ؟
خير فقط می توان بسته ها را capture کرد .

۱۴ - آيا می توان توسط امکانات WinPcap يک Firewall ساخت ؟
همانطور که در بالا گقته شد WinPcap قابليت Drop کردن بسته ها را ندارد و تواناييهای Filtering در WinPcap تنها روی بسته های sniff شده است . برای جلوگيری کردن از ورود يک بسته به پشته TCP/IP بايستی خودتان يک درايور ميانی ايجاد کنيد .

۱۵ - چگونه می توان کاری کرد که WinPcap بطور اتوماتيک در زمان بوت سيستم فعال گردد ؟
مقدار کليد زير را در رجيستری از 0x3 به 0x2 تغيير دهيد . اين کار فقط در ويندوزهای NTx جواب می دهد :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NPF\Start

۱۶ - آيا با کامپايل مجدد سورس WinPcap نتيجه درستی حاصل می شود ؟
بله اما ابتدا بايستی Service Pack 5 برنامه Microsoft Visual Studio را از سايت مايکروسافت دريافت و آنرا نصب کنيد .

۱۷ - آيا درايورهای ديگری بجز WinPcap برای کار با packet های TCP/IPوجود دارد ؟
بله . برای مثال برنامه Zx Sniffer يک کتابخانه capture کردن packet دارد که مشابه WinPcap است .

۱۸ - آيا Document ها و Tutorial های کاملی برای کار با Packet Driver API و Packet.dll و wpcap.dll در ويژوال سی وجود دارد ؟
بله . برای اينکار می توانيد از مطالب زير استفاده کنيد :
How to use wpcap.dll
wpcap specific extensions
Packet Driver API. How to use the low level capture library
Instructions and examples of how to write and compile a capture application using libpcap calls or packet driver's (PACKET.DLL) calls
Compiling WinPcap
========================

بررسی يکی از برنامه هاي نوشته شده با WinPcap : معرفی WinDump

مقدمه :


برنامه WinDump نسخه تحت ويندوز برنامه مشهور TcpDump می باشد که در سيستم عامل UNIX وجود دارد . اين برنامه يکی از بهترين ابزارهای Network Sniffer/Analyzer می باشد .
WinDump کاملاً با TcpDump سازگار می باشد و می توان از آن برای مانيتور کردن ترافيک شبکه بر اساس قوانين مختلف و پيچيده ای که قابل تنظيم هستند ، استفاده کرد .
WinDump روی سيستم عاملهای 95/98/ME و نيز NT/2000/XP قابل استفاده می باشد .
WinDump از کتابخانه libpcap موجود در WinPcap استفاده می کند .

دريافت برنامه :

برای دريافت نسخه 3.6.2 به آدرس زير مراجعه کنيد :
WinDump.exe
WinDump source code
نکته : قبل از اجرای اين برنامه بايستی برنامه 2.3 WinPcap را روی سيستم خود نصب کنيد .
برای دريافت نسخه 3.8 alpha به آدرس زير مراجعه کنيد :
WinDump.exe
WinDump source code
نکته : قبل از اجرای اين برنامه بايستی برنامه 3.0 WinPcap را روی سيستم خود نصب کنيد .

پاسخ به سوالاتی در مورد برنامه WinDump :

۱ - چگونه می توان با استفاده از WinDump ليست آداپتورهای شبکه را بدست آورد ؟
با اجرای دستور WinDump –D
توسط دستور WinDump –i adaptername می توان WinDump را روی آداپتور خاصی اجرا کرد .

۲ - آيا می توان از WinDump روی اتصالات PPP ( اتصالات مودمی ) استفاده کرد ؟
WinDump از همان device هايي پشتيبانی می کند که WinPcap می کند . به
بخش قبل مراجعه کنيد .

۳ - چگونه می توان اطلاعاتی در مورد TcpDump بدست آورد ؟
به آدرس زير مراجعه کنيد :
www.tcpdump.org

۴ - با وجود نصب آخرين نسخه برنامه WinDump ، چرا اين برنامه قادر به capture کردن همه packet ها نيست ؟
توسط سوئيچ B می توانيد سايز بافر درايور را افزايش دهيد برای مثال دستور Windump –B 5000 سايز بافر را ۵ مگابايت می کند . سايز بافر برنامه در حالت عادی 1 مگابايت است .

۵ - آيا می توان چندين WinDump را روی يک ماشين اجرا کرد ؟
بله

۶ - چرا WinDump در زمان capture کردن برای مدتی hang می کند ؟
علت آن فراخوانی تابع gethostbyaddr در برنامه می باشد که برای استخراج host name ها بکار می رود . می توان توسط سوئيچ n- از name resolution جلوگيری کرد .

۷ - آيا اطلاعات کاملی در مورد برنامه WinDump وجود دارد ؟
به آدرس زير مراجعه کنيد :
WinDump Manual

==========================

مقدمه

PacketX مجموعه ای از کلاسهای اکتيو ايکس است که امکانات WinPcap را در ويژوال بيسيک و هر زبان برنامه نويسی ديگری که از تکنولوژی Microsoft ActiveX پشتيبانی کند مهيا می کند .
بطور خلاصه PacketX از WinPcap برای capture کردن و فيلتر کردن packet های شبکه استفاده می کند . علاوه بر capture استاندارد ، شما می توانيد از PacketX برای گردآوری اطلاعات ترافيک شبکه و ارسال raw packet استفاده کنيد .

دريافت PacketX

برای دريافت نسخه 1.3 اين کتابخانه به آدرس زير مراجعه کنيد :
PacketX 1.3 Download
قبل از استفاده از PacketX بايستی WinPcap 2.3 را که آدرس آن در بخش قبل گفته شد دريافت و نصب نمائيد .

استفاده از PacketX

با يک مثال ساده سعی می کنم روش استفاده از اين کتابخانه را به شما آموزش دهم .
پس از نصب PacketX وارد محيط ويژوال بيسيک شده و از منوی Project مورد Components را انتخاب کنيد .
سپس مورد PacketX Type Library را انتخاب کنيد تا به ToolBar اضافه شود .

اين ActiveX را در فرمتان قرار دهيد و سپس در قسمت properties آن روی Custom کليک نموده و نوع آداپتور را مشخص نمائيد .
پس از انتخاب آداپتور با کليک روی دکمه Edit می توانيد اطلاعاتی از قبيل مد کاری و ساير بافر و نوع فيلترينگ را مشخص نمائيد .
نام اين شی را نيز PacketX1 می گذاريم .
در فرمتان دو دکمه به نامهای Start و Stop قرار دهيد . همچنين يک listBox با نام IPList در فرمتان قرار دهيد .
در کد مربوط به Form_load عبارت زير را بنويسيد :

PacketX1.Adapter.BPFilter = "port 80"x


عبارت فوق مشخص می کند که می خواهيم packet های پورت 80 را capture کنيم .
کد زير را برای event مربوط به کليک شدن دکمه Start بنويسيد :

PacketX1.start


کد زير را برای متد OnPacket مربوط به PacketX1 بنويسيد :

Private Sub PacketX1_OnPacket(ByVal pPacket As PACKETXLibCtl.IPktXPacket)x
IPList.AddItem (pPacket.DestIpAddress)x
End Sub


کد فوق آدرس IP مقصد packet ها را به يک ليست اضافه می کند . شما می توانيد اطلاعات ديگری از قبيل داده موجود در packet ، سايز داده ، آدرس مبدا ، تاريخ ارسال داده و غيره را استخراج کنيد .
کد زير را برای event مربوط به کليک شدن دکمه Stop بنويسيد :

PacketX1.stop



برای اينکه بتوانيد در يک مدت خاص وضعيت دريافت و ارسال packet را بدست آوريد بايد ابتدا توسط دستور زير مد آداپتور را در حالت Statistic قرار دهيد :

PacketX1.Adapter.Mode=PktXModeStatistics
PacketX1.Adapter.ReadTimeout=2000 '// 2 sec


سپس PacketX1 را start نموده و توسط متد OnStatistics اطلاعات مربوطه را استخراج کنيد .

گزارش تخلف
بعدی