Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват данных по локальной сети ? Как прочитать содержимое пакета ? 
:(
    Опции темы
Guest_shedon
  Дата 6.5.2003, 07:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть небольшой код который ловит IP пакеты и читает их заголовки:
Код

typedef struct IPHeader {
 UCHAR   iph_verlen;   // версия и длина заголовка
 UCHAR   iph_tos;      // тип сервиса
 USHORT  iph_length;   // длина всего пакета
 USHORT  iph_id;       // Идентификация
 USHORT  iph_offset;   // флаги и смещения
 UCHAR   iph_ttl;      // время жизни пакета
 UCHAR   iph_protocol; // протокол
 USHORT  iph_xsum;     // контрольная сумма
 ULONG   iph_src;      // IP-адрес отправителя
 ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;

recv( s, Buffer, sizeof(Buffer), 0 );

IPHeader* hdr = (IPHeader *)Buffer;


Как прочитать сам пакет ? И узнать порт по которому он шел ?
(Используется winsock2)
  Вверх
DarkDS
Дата 6.5.2003, 12:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У тебя есть длинна и смещение... вот и считываешь по этим данным пакет после заголовка...
Почитай доки по протоколам на досуге...
  Вверх
Step
Дата 6.5.2003, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



ответ как всегда прост.
другими словами прочитай заголовок, определи длину, и прочитай еще в буффер пакет длиной которую определил


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DarkDS
Дата 6.5.2003, 14:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кстати... Флаги и смешения (iph_offset) там не просто так:
Поле Флаги указывает на факт фрагментации пакета, а также на наличие или отсутствие последующих пакетов при фрагментации.
Поле Смещение фрагмента используется для указания в байтах смещения поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке/разборке фрагментов пакетов при передачах их между сетями с различными величинами максимальной длины пакета.

Получить порт можно разшифровав тело пакета:
Надеюсь ты знаешь технологию передачи пакетов? но на всякий случай скажу, что в пакете протокола IP будет лежать еще один пакет - протокола ТCP, а в нем лежт пакет высокого уровня... кстати тип последнего пакета указывается полем протокол (iph_protocol)...
Так вот порт указывается как раз в пакете ТСП или выше, зависит от ситуации...

  Вверх
DarkDS
Дата 6.5.2003, 14:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Сорри Запамятовал... в пакете ИП может лежать либо ТСП, ЛИБО UDP протоколы... Порт чаще всего пишется в них...
Вот такая вот загагулина!

В общем почитай книжки по протоколам... помогает smile.gif
  Вверх
Guest_Shedon
Дата 7.5.2003, 08:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можно както конкретно определить где лежит порт, зная протокол ?
  Вверх
AntonSaburov
Дата 7.5.2003, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
А можно както конкретно определить где лежит порт, зная протокол ?


Что значит "конкретно" - заголовок TCP является стандартным и у него на определенном месте стоит номер порта. Точное местоположение я не вспомню - надо смотреть документацию. Те же RFC.
PM MAIL WWW ICQ   Вверх
Guest_Shedon
Дата 7.5.2003, 09:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У меня почемуто неправильновычисляется размер заголовка, почти всегда кажет "69". Возможно с "iph_verlen", надо провести какието преобразования ?
  Вверх
DarkDS
Дата 7.5.2003, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Все поясняется очень просто - старшие пол байта (4 бита) есть длинна заголовка... Младшие 4 - это версия протокола...
То есть чтобы получить истинную длинну протокола тебе нужно взять старшие 4 бита... самый просто способ - сдвиг в право на 4 бита smile.gif

Это сообщение отредактировал(а) DarkDS - 7.5.2003, 11:19
PM MAIL   Вверх
Guest_Shedon
Дата 7.5.2003, 15:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Он всегда показывает 4 байта
  Вверх
DarkDS
Дата 7.5.2003, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Цитата(Guest_Shedon @ 7.5.2003, 15:32)
Он всегда показывает 4 байта

Какие 4 байтаconfused.gif
UCHAR iph_verlen;
если мне еще не изменяет память (а она мне врядли изменяет) UCHAR - это беззнакомый чар размер - 1 байт.
Из этого байта 4 бита - версия, 4 бита - длинаа.
Вот к примру чило 69. если брать по битам то это 01000101 соответсвенно разобьются на 0100 и 0101.
Старшие биты (7-4) = 0100 есть длинна загововка... младшие(3-0) 0101 - версия...
PM MAIL   Вверх
DarkDS
Дата 7.5.2003, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Или ты имеешь ввиду что всегда приходит 0100?

ЗЫ. Забыл сказать - длина заголовка измеряется в 4-х байтных словах smile.gif

Это сообщение отредактировал(а) DarkDS - 7.5.2003, 15:56
PM MAIL   Вверх
Guest_Shedon
Дата 8.5.2003, 07:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всё понётно я просто не вту сторону смещал, и получается 5, тоесть 20 байт.
  Вверх
DarkDS
Дата 8.5.2003, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



ЗЫ... Кстати... Длинна пакета исчесляется с учетом заголовка.
Смещение используется только тогда, когда происходит фрагментация пакета. Смешение указывает на позицию данных, относительно начала (данных). Так же смещение всегда (кроме последнего пакета) должно быть кратно 8... Правда чаще всего смещение не используется, так как протокол ТСП при отсылке пакетов посылает их нужного размера... smile.gif то есть ИП не нада разбивать... Проверить на фрагментацию данных можно так: (0x2000&iph_offset) != 0 ( 0x2000 - флаг фрагментации, 0x4000 - флаг нефрагментированности, 0x8000 - зарезервирован, всегда должен быть 0 (иначе - ошибка заголовка) )
О iph_xsum объяснения нужны? smile.gif
PM MAIL   Вверх
Step
Дата 14.5.2003, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



а как указать сокет, что бы перехватывало все пакеты


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1099 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.