Показать сообщение отдельно
Непрочитано 11.03.2014, 20:42   #1
Новичок

Автор темы (Топик Стартер) Отправка пакетов(C#)

Приветствую!
Ради интереса решил написать собственный сниффер на 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, логирует их и все такое).



А вопрос заключается вот в чем: как сдампленные пакеты(либо сформированные) отправить обратно по назначению?
Tezarius вне форума Ответить с цитированием