فیلتر کردن ترافیک
یکی از ویژگی های بسیار قدرتمندی که توسط Pcap.Net (و نیز توسط Winpcap و همچنین libpcap) ارائه می شود ، موتور فیلترینگ است.این یک روش بسیار کارآمدی است که امکان دریافت زیر مجموعه ای از ترافیک شبکه را فراهم می کند و به طور معمول با مکانیسم ضبط Pcap.Net ادغام می شود. توابعی که برای فیلتر کردن پاکت ها به کار می روند CreateFilter() و SetFilter() می باشند.
CreateFilter() یک رشته شامل یک عبارت بولی[1] سطح بالا (فیلتر) را گرفته و و بایت کد[2] سطح پایینی تولید می کند که می تواند توسط درایور پاکت (بخش موتور فیلتر) تفسیر شود.گرامر عبارت بولی را می توان در بخش عبارات فیلترینگ Wincap پیدا کرد.
SetFilter() یک فیلتر را برای بخش ضبط در بخش هسته درایور پاکت تعریف می کند.یکبار که SetFilter()فراخوانی می شود، فیلتر تعریف شده به تمامی پاکت های دریافتی از شبکه اعمال می شود و تمامی پاکت های مطابق (یعنی پاکت هایی که در مقایسه با عبارت بولی نتیجه true دارند) به صورت واقعی به برنامه کپی می شوند.
کد بعدی نحوه اعمال فیلتر را نشان می دهد.
توجه : ماسک شبکه آداپتور نیز استفاده شده است ، زیرا برخی از فیلتر هایی که توسط CreateFilter() ایجاد می شوند به آن نیازمند اند.
فیلتری که در کد زیر به تابع CreateFilter() فرستاده شده است “ip and tcp” است ، که بدین معناست که تنها بسته های IPv4 و TCP را نگه دار و به برنامه تحویل بده.
// Compile the filter
using (BerkeleyPacketFilter filter = communicator.CreateFilter("ip and tcp"))
{
// Set the filter
communicator.SetFilter(filter);
}
کد قلبی می تواند با کد ساده تر زیر، با استفاده از SetFilter() جایگزین شود.
// Compile and set the filter
communicator.SetFilter("ip and tcp");