Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 26.05.2012, 16:58   #1
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Сниффер своими руками, за 15 минут

Вступление
Надеюсь мне не придется объяснять, что такое сниффер и каково его предназначение по этому перейду сразу к сути. В данном руководстве я расскажу вам, как можно сделать простой сниффер без особых усилий всего за 15 минут(особо ленивые сделают за 15 секунд обычным копипастом).
Сразу отмечу, что я чисто из принципов не буду отвечать на вопросы типа "У МИНЯ АШИБКА ЧТО ДЕЛАТЬ!!??!" и "У МЕНЯ %SUBJECT% ПОМОГИТЕ".

Часть I. Формострой.
Для начала нам понадобится:
Label - x1
ComboBox - x1
TextBox/RichTextBox - x1
Button - x1
CheckBox с свойством Appearance в положении Button - x1

Накидаем это все на форму, я сделал так:
[Ссылки могут видеть только зарегистрированные пользователи. ]
В правом нижнем углу формы находится не кнопка, а CheckBox

Часть II. Капля теории.
Если не сильно вдаваться в подробности то мы пишем клиент-серверное приложение предварительно покурив мануалов по Raw Socket'ам.
На самом деле сложного тут ничего нет, мы просто "слушаем" весь трафик проходящий через определенное устройство.

Часть III. Вперед под танки!
Если вы выдержали две предыдущих части значит вы еще(а может даже "уже") не совсем потеряны, давайте я отведу вас к вашему "танку".
В первой части вы создали приложение, разместили все элементы, значит настал час, нажимаем ПКМ по нашей форму и кликаем Перейти к коду или просто нажимаете клавишу F7. И так что же мы видим? А видим мы конструктор(не путать с лего) класса и имя ему Легион Form1 если вы конечно ничего не меняли.
Давайте добавим в него следующие строки
Код:
IPHostEntry HosyEntry = Dns.GetHostEntry((Dns.GetHostName()));
if (HosyEntry.AddressList.Length > 0)
{
   foreach (IPAddress ip in HosyEntry.AddressList)
      comboBox1.Items.Add(ip.ToString());
}
Вышеприведенное "чудо" при создании формы добавит в ComboBox все возможные устройства для прослушивания. Можете запустить приложение и посмотреть на результат.

Следующим шагом будет добавление 2-х полей в наш класс, перед конструктором класса, я назвал их socket и buffer, но вы можете назвать их по-другому.
Код:
private Socket socket; //собственно это и есть наше прослушивающее устройство
private byte[] buffer; //а сюда мы будем записывать полученные пакеты
Давайте теперь перейдем к конструктору формы(не путать с конструктором класса) и два раза кликнем по нашему CheckBox'у тем самым подписав его на событие CheckedChanged которое вызывается всякий раз когда свойство Checked меняет свое значение.
Давайте вставим туда следующий код
Код:
            if((sender as CheckBox).Checked)
            {
                (sender as CheckBox).Text = "&Stop me";
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                socket.Bind(new IPEndPoint(IPAddress.Parse(comboBox1.SelectedItem.ToString()), 0));
                socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);

                byte[] byInc = new byte[] { 1, 0, 0, 0 };
                byte[] byOut = new byte[4];
                buffer = new byte[4096];
                socket.IOControl(IOControlCode.ReceiveAll, byInc, byOut);
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, OnReceive, null);
            }
            else
            {
                socket.Close();
                (sender as CheckBox).Text = "&Start me";
            }
Здесь мы начинаем прослушку, но делегат OnReceive подчеркивает красным, это потому что мы его еще не добавили, сам Адмирал Ясен...ну вы поняли, намекает.
Ну так давайте добавим этот делегат, чего мелочится то.
Код:
        private void OnReceive(IAsyncResult ar)
        {
            try
            {
                int nReceived = socket.EndReceive(ar);
                Print(buffer, nReceived);
                buffer = new byte[4096];
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
                    OnReceive, null);
            }
            catch { }
        }
Вот собственно и он, давайте я вам вкратце объясню, что же это такое. Метод socket.BeginReceive асинхронно вызывает делегат AsyncCallback при каждом получении данных, а в самом методе мы уже выполняем все необходимые преобразования.

Давайте добавим два последних метода первый это Print, выводящий в текстбокс полученный пакет и Parse, парсящий из полученного пакета IP Header'ы
Код:
        private void Print(byte[] buf, int len)
        {
            string temp = string.Empty;
            for (int i = 0; i < len; i++)
            {
                temp += buf[i].ToString("X2");
                if((i + 1) % 16 == 0)
                {
                    string txt = Encoding.ASCII.GetString(buf, i, 16);
                    temp += string.Format(" | {0}\n", txt);
                }
                else
                    temp += " ";
            }
            richTextBox1.BeginInvoke(new Action(() => richTextBox1.AppendText(Parse(buf, len) + temp)));
        }

        private string Parse(byte[] buf, int len)
        {
            IPHeader ipHeader = new IPHeader(buf, len);
            return string.Format("\n\n+---------------------------------------------+\n" +
                                 "|From: {0}\tTo: {1}\n" +
                                 "|Protocol: {3}\tLength: {2}\n" +
                                 "+---------------------------------------------+\n", 
                                 ipHeader.SourceAddress,
                                 ipHeader.DestinationAddress,
                                 ipHeader.TotalLength,
                                 ipHeader.ProtocolType.ToString());
        }
Вроде бы мы все сделали, но что-то здесь не так. А ведь точно, C# не имеет в своих библиотеках класса IPHeader, я в этом случае поступил очень лениво, зашел в гугл и взял первый попавшийся мне класс описывающий структуру хедера, вот он, под спойлером, просто добавьте его в свой проект и дело в шляпе.

Чуть не забыл, у нас же осталась последняя "безпризорная" кнопка, давайте добавим ей следующий код
Код:
richTextBox1.Clear();
Эта кнопка будет очищать наш текстбокс.

Полный код (только форма)
Так выглядит полностью рабочий вариант
[Ссылки могут видеть только зарегистрированные пользователи. ]

На этот туториал я потратил ни много, ни мало но окло часа, надеюсь вам понравилось.
Статью подготовил Yukikaze, специально для Zhyk.ru
________________
Talk is cheap. Show me the code
— Linus Torvalds

Последний раз редактировалось Yukikaze; 26.05.2012 в 20:09. Причина: Добавил картинку
  Ответить с цитированием
11 пользователя(ей) сказали cпасибо:
крайслер (26.05.2012), iamzero (02.04.2013), ivan_k97/RiZZoF (28.05.2012), JKHKJgj (09.05.2015), Oleg908 (20.10.2013), Skrillex3 (17.06.2012), the-boxi (12.12.2012), V11RUS (28.05.2012), warl0ck (24.06.2012), †Hyde† (30.06.2012), —DessaR— (11.12.2012)
Старый 19.06.2012, 21:26   #2
 Разведчик
Аватар для Mr_Гончар
 
Mr_Гончар на правильном пути
Регистрация: 18.06.2012
Сообщений: 2
Популярность: 55
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 9 сообщениях
Отправить сообщение для Mr_Гончар с помощью ICQ Отправить сообщение для Mr_Гончар с помощью Skype™
 
По умолчанию Re: Сниффер своими руками, за 15 минут

не проще пользоватся Обычным интернет сниффером
________________
Генератор комиксов и мэмов
Ася 611994767
  Ответить с цитированием
Пользователь сказал cпасибо:
ExxHardkor (20.06.2012)
Старый 19.06.2012, 22:13   #3
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Mr_Гончар, таких не берут в космонавты программисты
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Пользователь сказал cпасибо:
the-boxi (12.12.2012)
Старый 23.06.2012, 10:29   #4
 Разведчик
Аватар для Zizipuza
 
Zizipuza на правильном путиZizipuza на правильном пути
Регистрация: 26.11.2011
Сообщений: 2
Популярность: 182
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 3 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Спс за статью - познавательная. Особенно для такого нуба в сокетах, как я.

Yukikaze, несмотря на Ваше предупреждение, прошу послать меня в нужном направлении:
Вопрос 1: Пакеты не кратные 16 не полностью представляются в ASCII, либо-же пакеты обрезаются по длине - решил самостоятельно.
Вопрос 2: Если сравнивать полученные данные с другим сниффером
Код:
0000  f4 6d 04 8c ea bc 00 1b  9e 6a e0 db 08 00 45 00
0010  00 28 79 55 40 00 80 06  6e 21 c0 a8 01 03 c1 6a
0020  90 43 c7 64 0e 8c 82 6f  52 4f 63 29 79 e3 50 10
0030  01 d2 12 ed 00 00
выделенный фрагмент в Вашем не отлавливается - в общем не принципиально (поковырялся и понял, что мне он не нужен).
Вопрос 3: Наиболее критичен
Ваш Сниффер не видит входящие пакеты от игрового сервера.
Сторонний сниффер эти-же пакеты видит и определяет как Tcp...
Подскажите, пожалуйста, как лечить или где копать?

Последний раз редактировалось Zizipuza; 23.06.2012 в 11:09.
  Ответить с цитированием
Старый 24.06.2012, 01:28   #5
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Zizipuza, это пример самого простого сниффера, более сложные реализации делаются на основе WinPcap, под .NET есть неплохие обертки, например SharpPcap.
[Ссылки могут видеть только зарегистрированные пользователи. ] наваял простенький TCP сниффер, только для него нужен установленный WinPcap драйвер, я положил его в архив.

ЗЫ
Цитата:
Yukikaze, несмотря на Ваше предупреждение, прошу послать меня в нужном направлении:

Это относиться только к школьникам которые копипастят и при этом даже не пытаются понять написанное, а иногда даже не знают как создать метод и что его надо размещать в теле класса, а не в обработчик события button_Click
ЗЫЫ То что выделено красным это Ethernet хедер, первые 14 байт, затем следующие 20 это IP header
________________
Talk is cheap. Show me the code
— Linus Torvalds

Последний раз редактировалось Yukikaze; 24.06.2012 в 06:07.
  Ответить с цитированием
Старый 17.11.2012, 19:42   #6
 Пехотинец
Аватар для ultraz
 
ultraz вызывает надежду
Регистрация: 23.03.2011
Сообщений: 70
Популярность: -14
Сказал(а) спасибо: 23
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Не понял я одно как добавлять класс IPHeader подскажите куда его
________________
Помог нажми Спасибо
  Ответить с цитированием
Старый 11.12.2012, 15:55   #7
 Разведчик
Аватар для shadowrosomaha
 
shadowrosomaha никому не известный тип
Регистрация: 05.12.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Yukikaze

Если можешь, помоги разобраться с несколькими проблемами которые возникли во время запуска программы по твоему исходнику.
Смог добиться того что бы запускалась без ошибок, но после выбора доступных для прослушивания устройств я выбираю к примеру:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Возникает ошибка:
[Ссылки могут видеть только зарегистрированные пользователи. ]
У меня нет опыта программирования в С# и в создании различных сетевых приложений, просто поставлена такая задача для расчетной работы по не профильному предмету.
  Ответить с цитированием
Старый 11.12.2012, 18:01   #8
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

а когда выбираешь ип 172.16.1.45 ошибки нету?
  Ответить с цитированием
Старый 11.12.2012, 18:05   #9
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Выбирай тот IP через который ты в сеть выходишь, в твоем случае это последний
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 12.12.2012, 10:34   #10
 Разведчик
Аватар для shadowrosomaha
 
shadowrosomaha никому не известный тип
Регистрация: 05.12.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Вот что выдает при выборе моего IP:

[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 12.12.2012, 11:58   #11
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

скорей всего переменная buffer не инициализирована

Да и давно пора научиться пользоваться дебагером
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 12.12.2012, 12:45   #12
 Разведчик
Аватар для shadowrosomaha
 
shadowrosomaha никому не известный тип
Регистрация: 05.12.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Спасибо, за помощь. Нашел свой косяк исправил.
Огромное спасибо за саму программу и хорошее отношение к нубу в таком типе программирования)
  Ответить с цитированием
Старый 15.12.2012, 14:34   #13
 Разведчик
Аватар для TuPaK(0_o)
 
TuPaK(0_o) никому не известный тип
Регистрация: 08.12.2012
Сообщений: 18
Популярность: 12
Сказал(а) спасибо: 8
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для TuPaK(0_o) с помощью ICQ Отправить сообщение для TuPaK(0_o) с помощью Skype™
 
Exclamation Re: Сниффер своими руками, за 15 минут

Цитата:
Сообщение от shadowrosomahaПосмотреть сообщение
Спасибо, за помощь. Нашел свой косяк исправил.
Огромное спасибо за саму программу и хорошее отношение к нубу в таком типе программирования)

На ошиКах Учатся!
  Ответить с цитированием
Старый 15.12.2012, 18:29   #14
 Разведчик
Аватар для Sleepy_Master
 
Sleepy_Master никому не известный тип
Регистрация: 14.12.2010
Сообщений: 44
Популярность: 17
Сказал(а) спасибо: 17
Поблагодарили 73 раз(а) в 70 сообщениях
Отправить сообщение для Sleepy_Master с помощью ICQ
 
По умолчанию Re: Сниффер своими руками, за 15 минут

Цитата:
Сообщение от YukikazeПосмотреть сообщение
Не люблю спорить с менее компетентными людьми - нового ничего не узнаю, а времени потрачу уйму

Выходит более компетентные тоже не будут спорить с тобой и ты так же не узнаешь ничего нового ?
А по теме, спасибо, классный гайд.
________________
Программист - это человек превращающий кофе в программный код.(с)
  Ответить с цитированием
Старый 28.05.2013, 11:00   #15
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Сниффер своими руками, за 15 минут

konstahntin, можно конечно, почему нет. Нужно распарсить TCP заголовки, т.к. именно в них отмечен порт, ну а дальше ловим пакеты с 110 порта
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 07:37.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net