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, логирует их и все такое).
А вопрос заключается вот в чем: как сдампленные пакеты(либо сформированные) отправить обратно по назначению?