یک برنامه نویس مبتدی

یادداشت های بک برنامه نویس

یک برنامه نویس مبتدی

یادداشت های بک برنامه نویس

آشنایی با کتابخانه قدرتمند PCap.Net - بخش هفتم

ذخیره پاکت ها درون فایل رونوشت

پیش از هرکاری بیایید ببینیم چگونه می توان پاکت ها را در فرمت 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);

                }

            }

        }

    }

}



ادامه مطلب ...

آشنایی با کتابخانه قدرتمند PCap.Net - بخش ششم

تفسیر پاکت ها

حال که قادر به ضبط و فیلتر کردن ترافیک هستیم ، می خواهیم دانش خود را برای کار بر روی یک برنامه دنیای واقعی به کار ببندیم.

در این بخش از بخشی از کد های درس های قبل برای ساخت برنامه بسیار کاربردی تر بهره خواهیم گرفت ، هدف اصلی برنامه جاری نشان دادن تجزیه سرآیند پاکت دریافت شده و تفسیر آن است. برنامه خروجی UDPDump نامیده می شود و خلاصه ترافیک UDP شبکه را چاپ می کند.

ادامه مطلب ...

آشنایی با کتابخانه قدرتمند PCap.Net - بخش پنجم

فیلتر کردن ترافیک

یکی از ویژگی های بسیار قدرتمندی که توسط Pcap.Net (و نیز توسط Winpcap و همچنین libpcap) ارائه می شود ، موتور فیلترینگ است.این یک روش بسیار کارآمدی است که امکان دریافت زیر مجموعه ای از ترافیک شبکه را فراهم می کند و به طور معمول با مکانیسم ضبط Pcap.Net ادغام می شود. توابعی که برای فیلتر کردن پاکت ها به کار می روند CreateFilter() و SetFilter() می باشند.


ادامه مطلب ...

آشنایی با کتابخانه قدرتمند PCap.Net - بخش چهارم

دریافت پاکت ها بدون استفاده از CallBack

مثال این درس عملکردی بسیار شبیه به مثال درس قبلی دارد.(آداپتور را باز کرده و پاکت ها را ضبط می کند). با این تفاوت که به جای RecivePackets()  از RecivePacket() استفاده می کند.

مکانیزم مبتنی بر CallBack برای ضبط پاکت ها ساده و روان است و برای برخی از حالات کاملاٌ مناسب است. به هر حال، فراخوانی CallBack روش کارآمدی نیست زیرا برنامه را در حالت هایی که از چند رشته ای استفاده می کند بسیار پیچیده می کند.


ادامه مطلب ...

آشنایی با کتابخانه قدرتمند PCap.Net - بخش سوم

باز کردن کارت شبکه و دریافت پاکت ها

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

تابعی که درستگاه دریافت کننده پاکت ها (کارت شبکه) را باز می کند تابع Open() است. پارامتر های این تابع مانند، اندازه تصویر، مشخصه ها و حداکثر زمان خواندن ،  نیازمند کمی توضیح است.

ادامه مطلب ...