( تعداد نمایش : 1870 )

آشنایی با کتابخانه Windows Packet Capture

معرفی :

کتابخانه 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 بطور اتوماتیک در زمان بوت سیستم فعال گردد ؟
مقدار کلید زیر را در رجیستری از ۰×۳ به ۰×۲ تغییر دهید . این کار فقط در ویندوزهای 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 روی سیستم عاملهای ۹۵/۹۸/ME و نیز NT/2000/XP قابل استفاده می باشد .
WinDump از کتابخانه libpcap موجود در WinPcap استفاده می کند .

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

برای دریافت نسخه ۳٫۶٫۲ به آدرس زیر مراجعه کنید :
WinDump.exe
WinDump source code
نکته : قبل از اجرای این برنامه بایستی برنامه ۲٫۳ WinPcap را روی سیستم خود نصب کنید .
برای دریافت نسخه ۳٫۸ alpha به آدرس زیر مراجعه کنید :
WinDump.exe
WinDump source code
نکته : قبل از اجرای این برنامه بایستی برنامه ۳٫۰ 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 سایز بافر را ۵ مگابایت می کند . سایز بافر برنامه در حالت عادی ۱ مگابایت است .

۵ – آیا می توان چندین 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

برای دریافت نسخه ۱٫۳ این کتابخانه به آدرس زیر مراجعه کنید :
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 های پورت ۸۰ را 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 اطلاعات مربوطه را استخراج کنید .

اطلاعات بیشتر

برای مشاهده اطلاعات کامل در مورد ساختار PacketX و ماژولهای آن به آدرس زیر مراجعه کنید :
PacketX Documentation

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن