LINUX.ORG.RU

Отслеживание последовательности пакетов

 


0

1

Добрый день, форумчане. Однажды мне помогли здесь, хочу ещё раз вернуться к мудрости все вышних специалистов. Может дадите мануал, или статейки какие-нибудь по решение моей проблемы. Суть: Есть ли возможность сравнивать текущий пакет с предыдущим? Пакет в поле данных «data» нумеруется. Протокол UDP. Например: Пришёл первый пакет - его номер в поле данных будет 1 и служебная информация для приложения.. Второй пакет - номер в поле данных 2 и служебная информация для приложения. Помогите разобраться в решении такой проблемы. Спасибо за отзывы. Желательно показать пример или ссылочку на статейку по этому поводу. Заранее спасибо) Желательно это сделать средствами IPTables...



Последнее исправление: WeSTMan (всего исправлений: 2)

Ответ на: комментарий от Vsevolod-linuxoid

Я думал это тонкий троллинг такой. Хотел уже написать про многозначность термина «пакет». Автору нужно осознать разницу между TCP и UDP. Потом прочитать про TCP Sequence Number. После этого станет понятно почему номеров пакетов в UDP нет (но они могут быть в инкапсулированных протоколах более высокого уровня, например SIP).

Mike_RM
()
Ответ на: комментарий от Mike_RM

Ув. Mike_RM. Я знаю разницу между TCP и UDP. Я написал, что пакет нумеруется в поле данных 'data'. На самом высоком уровне. В данный момент сетевой уровень вообще не причем.

WeSTMan
() автор топика

Ты темнишь с описанием того, что конкретно тебе нужно, но возможно это divert sockets. Если ты майор, то скажи сразу, чтобы тебя публично забанили. Ты майор? Говори.

anonymous
()
Ответ на: комментарий от Mike_RM

Поделитесь, пожалуйста, возможностью сравнивать пакеты. Буду очень благодарен! Много сайтов перелазил, пока ничего не нашёл.

WeSTMan
() автор топика

Суть: Есть ли возможность сравнивать текущий пакет с предыдущим?

Есть

Harald ★★★★★
()
Ответ на: комментарий от goingUp

Не подскажите такую возможность? Желательно, чтобы пакеты проверялись до того, как дойдут до приложения. Спасибо.

WeSTMan
() автор топика
Ответ на: комментарий от WeSTMan

Желательно, чтобы пакеты проверялись до того, как дойдут до приложения. Спасибо.

в исходном посте этого не было

Harald ★★★★★
()
Ответ на: комментарий от WeSTMan

чтобы пакеты проверялись до того, как дойдут до приложения.

Перехватывать другим приложением, переотправлять нужному

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Например: Поступил пакет, его направить в приложение проверки, а то приложение уже переотправит этот пакет нужному?

WeSTMan
() автор топика
Ответ на: комментарий от WeSTMan

Если есть возможность поменять порт, который слушает «нужное» приложение, то все просто, если нет, то нужно сделать правило в iptables, которое будет перенаправлять пакет на приложение проверки. Вы задаете вопрос странным образом, минимум информации, попросили пример, но не указали язык программирования.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Исправил. Меня более интересует реализация этого через IPTables. С перенаправлением пакета понятно, но вот реализация проверки в IPTables - нет. И ещё, если можете помочь, то как проверить длину самого поле данных? не всего пакета, а именно «data». Спасибо за ваши ответы!

WeSTMan
() автор топика
Ответ на: комментарий от WeSTMan

Если знаком с программированием на С, то самое простое решение - иcпользование «iptables -j NFQUEUE» ( в userspace делай что хочешь с ним ).

В самом iptables можно сравнивать только со статическими данными. Сравнение со значением из предыдущих пакетов - это совсем не просто.

vel ★★★★★
()
Ответ на: комментарий от vel

Понимаю... Можете помочь со следующим вопросом.. Интересует проверка первых 16 бит пакета в поле данных «data». Например 14 первых битов могут изменятся, а два последних нет...

WeSTMan
() автор топика
Ответ на: комментарий от WeSTMan

Структура пакета udp/ipv4 описана в любом учебнике.

Просто проверка первых 16 бит данных udp пакета легко делается в iptables при помощи u32 либо при помощи bpf

Подробности и примеры в man iptables-extensions :)

vel ★★★★★
()
Ответ на: комментарий от vel

К сожалению.. не могу освоить u32, нигде не нашёл понятной для себя литературы про этот классификатор. Может дадите статейку или учебник какой, я бы с радостью освоил!

WeSTMan
() автор топика
Ответ на: комментарий от WeSTMan

man iptables-extensions про u32 ты не прочитал. Лентяй!

Да, u32 не простой в понимании, но статей на эту тему достаточно.

Не осилил u32, тогда используй bpf.

В мане есть пример, да и на ЛОРе про iptables bpf есть упоминания.

vel ★★★★★
()
Ответ на: комментарий от vel

Весь пакет:

0000 00 00 02 00 00 00 00 00 02 00 00 00 00 00 08 00

0010 45 70 00 3d 70 49 00 00 77 11 9b 05 5d b7 db d9

0020 b0 d6 4d 8a 69 7d 69 87 00 29 09 1e f2 22 00 00

0030 3d 23 00 00 00 6e 29 74 07 10 5e 04 00 e0 7b 38

0040 00 80 b6 c0 00 00 00 00 18 f1 e1 00 00

Попробовал я ещё раз осилить u32. Протокол UDP. Что у меня получилось: Данные пакета в поле 'data': f22200003d230000006e297407105e0400e07b380080b6c00000000018f1e10000

«виртуально» Вырезал данные:

f2220000

3d230000

Проверить эти вырезанные куски на последние 00. Что я делаю в iptables:

1) iptables -m u32 --u32 «26&0xFF=0x00» -j ACCEPT

2) iptables -m u32 --u32 «30&0xFF=0x00» -j ACCEPT

То есть, мне нужно проверить последние два нуля в том, что они присутствуют в пакете на этих местах. Верно ли я составил правило? и можно ли их как-то объединить в одно правило?

WeSTMan
() автор топика
Ответ на: комментарий от vel

Спасибо Вам большое! Все работает. Вы мне очень помогли!!!!!!!!!!!

WeSTMan
() автор топика
Ответ на: комментарий от vel

Хм.. если два правило, то получается первое будет пропускать, а второе бездействовать... Есть варианты их объединения? Только не переадресация пакета в другую цепочку

WeSTMan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.