ذخیره پاکت ها درون فایل رونوشت
پیش از هرکاری بیایید ببینیم چگونه می توان پاکت ها را در فرمت Libcap نوشت.مثال بعدی پاکت ها را از واسط تعیین شده می خواند و آنها را درون یک فایل می نویسد، نام فایل را کاربر تعیین می کند.
using System;
using System.Collections.Generic;
using PcapDotNet.Core;
namespace SavingPacketsToADumpFile
{
class Program
{
static void Main(string[] args)
{
// Check command line
if (args.Length != 1)
{
Console.WriteLine("usage: " + Environment.GetCommandLineArgs()[0] + " <filename>");
return;
}
// Retrieve the device list on the local machine
IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;
if (allDevices.Count == 0)
{
Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
return;
}
// Print the list
for (int i = 0; i != allDevices.Count; ++i)
{
LivePacketDevice device = allDevices[i];
Console.Write((i + 1) + ". " + device.Name);
if (device.Description != null)
Console.WriteLine(" (" + device.Description + ")");
else
Console.WriteLine(" (No description available)");
}
int deviceIndex = 0;
do
{
Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
string deviceIndexString = Console.ReadLine();
if (!int.TryParse(deviceIndexString, out deviceIndex) ||
deviceIndex < 1 || deviceIndex > allDevices.Count)
{
deviceIndex = 0;
}
} while (deviceIndex == 0);
// Take the selected adapter
PacketDevice selectedDevice = allDevices[deviceIndex - 1];
// Open the device
using (PacketCommunicator communicator =
selectedDevice.Open(65536, // portion of the packet to capture
// 65536 guarantees that the whole packet will be captured on all the link layers
PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
1000)) // read timeout
{
// Open the dump file
using (PacketDumpFile dumpFile = communicator.OpenDump(args[0]))
{
Console.WriteLine("Listening on " + selectedDevice.Description + "... Press Ctrl+C to stop...");
// start the capture
communicator.ReceivePackets(0, dumpFile.Dump);
}
}
}
}
}
تفسیر پاکت ها
حال که قادر به ضبط و فیلتر کردن ترافیک هستیم ، می خواهیم دانش خود را برای کار بر روی یک برنامه دنیای واقعی به کار ببندیم.
در این بخش از بخشی از کد های درس های قبل برای ساخت برنامه بسیار کاربردی تر بهره خواهیم گرفت ، هدف اصلی برنامه جاری نشان دادن تجزیه سرآیند پاکت دریافت شده و تفسیر آن است. برنامه خروجی UDPDump نامیده می شود و خلاصه ترافیک UDP شبکه را چاپ می کند.
ادامه مطلب ...فیلتر کردن ترافیک
یکی از ویژگی های بسیار قدرتمندی که توسط Pcap.Net (و نیز توسط Winpcap و همچنین libpcap) ارائه می شود ، موتور فیلترینگ است.این یک روش بسیار کارآمدی است که امکان دریافت زیر مجموعه ای از ترافیک شبکه را فراهم می کند و به طور معمول با مکانیسم ضبط Pcap.Net ادغام می شود. توابعی که برای فیلتر کردن پاکت ها به کار می روند CreateFilter() و SetFilter() می باشند.
دریافت پاکت ها بدون استفاده از CallBack
مثال این درس عملکردی بسیار شبیه به مثال درس قبلی دارد.(آداپتور را باز کرده و پاکت ها را ضبط می کند). با این تفاوت که به جای RecivePackets() از RecivePacket() استفاده می کند.
مکانیزم مبتنی بر CallBack برای ضبط پاکت ها ساده و روان است و برای برخی از حالات کاملاٌ مناسب است. به هر حال، فراخوانی CallBack روش کارآمدی نیست زیرا برنامه را در حالت هایی که از چند رشته ای استفاده می کند بسیار پیچیده می کند.
باز کردن کارت شبکه و دریافت پاکت ها
اکنون که دیدیم چگونه می توانی کارت شبکه ای را که می خواهیم با آن کار کنیم را بدست آوریم ، بیاید کار اصلی را شروع کنیم، باز کردن کارت شبکه و دریافت بخشی از ترافیک شبکه. در این درس ما برنامه ای خواهیم نوشت که برخی از اطلاعات موجود در باره پاکت هایی که از کارت شبکه عبور می کنند را چاپ کند.
تابعی که درستگاه دریافت کننده پاکت ها (کارت شبکه) را باز می کند تابع Open() است. پارامتر های این تابع مانند، اندازه تصویر، مشخصه ها و حداکثر زمان خواندن ، نیازمند کمی توضیح است.