03-11-2014, 08:42 PM 
		
	
	
		Приветствую!
Ради интереса решил написать собственный сниффер на C#(с сокетами очень мало опыта).
Нашел несколько рабочих вариантов, из них собрал что-то более-менее рабочее.
Принцип действия следующий: сокет привязывается к существующему интерфейсу, через который идет траффик, по событию BeginReceive передает принятый пакет на обработчик, внутри которого уже фильтруются и выводятся нужные мне пакеты(к примеру, по IP).
Выглядит это как-то так:
где Print - функция-обработчик(на данный момент выводит пакеты между нужными IP, логирует их и все такое).
А вопрос заключается вот в чем: как сдампленные пакеты(либо сформированные) отправить обратно по назначению?
	
	
	
	
Ради интереса решил написать собственный сниффер на C#(с сокетами очень мало опыта).
Нашел несколько рабочих вариантов, из них собрал что-то более-менее рабочее.
Принцип действия следующий: сокет привязывается к существующему интерфейсу, через который идет траффик, по событию BeginReceive передает принятый пакет на обработчик, внутри которого уже фильтруются и выводятся нужные мне пакеты(к примеру, по IP).
Выглядит это как-то так:
Код:
Action<IAsyncResult> OnReceive = null;
                buffer_list = new byte[4096];
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
                socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.100"), 0));
                byte[] byInc1 = new byte[] { 1, 0, 0, 0 };
                byte[] byOut1 = new byte[4];
                socket.IOControl(IOControlCode.ReceiveAll, byInc1, byOut1);
                OnReceive = (ar) =>
                {
                    int nReceived = 0;
                    try
                    {
                        nReceived = socket.EndReceive(ar);
                        Print(buffer_list, nReceived);
                        buffer_list = new byte[4096];
                        socket.BeginReceive(buffer_list, 0, buffer_list.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
                    }
                    catch (Exception)
                    {
                        return;
                    }
                };
                socket.BeginReceive(buffer_list, 0, buffer_list.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);где Print - функция-обработчик(на данный момент выводит пакеты между нужными IP, логирует их и все такое).
А вопрос заключается вот в чем: как сдампленные пакеты(либо сформированные) отправить обратно по назначению?

 
 

 





![[Изображение: dxqV.gif]](http://image.zone-game.info/images/2014/06/04/dxqV.gif)