![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
konshyn |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Ребят, нужна помощь.
В общем, перехватываю IP пакеты. Полностью с IP заголовком и инкапсулированными данными. Но этот же пакет мне нужно самому и отправить. Т.е. я перехватил, а потом его же отправляю OC настроена на маршрутизацию. Но проходящие пакеты я блокирую. т.е. IPTABLES (FORWARD = DROP) Создаю сокет для отправки перехваченного пакета так:
потом использую опцию IP_HDRINCL
Затем происходит это:
в итоге rezult возвращает сколько байт он отправил, но! wireshark не показывает, что пакет был отправлен, он просто не видит этого пакета Выручайте, литература не помогла мне разобраться с сырыми сокетами и отправкой собственных пакетов. Уже больше двух месяцев переодически пытался разобраться, но все тщетно... Раньше не горело, сейчас горит. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||||
|
|||||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Думаете, кто-нибудь опять приведёт Вашы наброски к компилируемому виду, чтобы вяснить какую-то банальную ошыбку у Вас?
Добавлено через 4 минуты и 48 секунд Ну и да, банально-системное: в iptables за самосгенерённые пакеты отвечает OUTPUT. Проверьте, что там тожэ не DROP. |
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Вы не поверите, но сюда я обратился за помощью. Может кому-то и не будет лень привести все к компилируемому виду. А может кто-то уже сталкивался с такой проблемой и сразу даст понять, в чем ошибка или что нужно проверить в первую очередь. Политика для INPUT и OUTPUT - ACCEPT. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 1 Всего: 45 |
Снимите запрет на FORWARD; посмотрите, будет ли дублироваться пакет.
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
konshyn |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Не дублируется. ![]() Сделал компилируемый код в минимальном стиле:
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||
|
|||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
UPD: Хотя может и дублируются... как это определить? так выходят иногда одинаковые пакеты (мимо проходящие)
вот скрин wireshark'a во время работы вышепредставленного кода ubuntu настроена на маршрутизацию, а политика FORWARD = DROP мой ip заканчивается xxx.xxx.xxx.137 (т.е. он здесь не фигурирует, т.к. фильтр стоит на xxx.xxx.xxx.198). xxx.xxx.xxx.198 - это тот, который отправляет все пакеты через меня. Добавлено @ 09:28 UPD2: И самое интересное наблюдение: Когда ставлю политику для FORWARD = ACCEPT, то пакеты дублируются! Мне начинает казаться, что все дело в ОС и в ее политике. feodorv, извините за ложную информацию
Недосып - страшная вещь:( Это сообщение отредактировал(а) konshyn - 25.11.2013, 09:30 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Не отправляются пакеты, даже если не настроена ОС на маршрутизацию.
Т.е. как бы "отправляются". Возвращает сколько было отправлено.. и все. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Сорри, я разобрался в своей криворукости:(
P.S. Эта тема похожа на блог программиста-неудачника Это сообщение отредактировал(а) konshyn - 26.11.2013, 12:06 -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
||||
|
||||
konshyn |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
IP пакеты(чистые, т.е. заголовок IP и инкапсулированные данные) перехватывать в linux нельзя. По крайне мере я не нашел как это делается. Я создавал ПАКЕТНЫЙ сокет:
т.е. в моем сообщении был полностю eth-кадр: [ethernet заголовок[ip заголовок[..дальнейший стек и данные]]]; для отправки IP пакета сырой сокет использовал с опцией IP_HDRINCL; ну, и в коде, который написал выше, и в своей программе я делал одно и то же. копировал IP заголовок, чтобы определить структуру sockaddr_in для функции sendto, т.к. семейство и адрес получателя указывать обязательно т.е. функция sendto отправляет пакет на тот адрес, который указан в структуре sockaddr_in, и соответственно, ядро само заменит это поле в ip-пакете на адрес, который указан в структуре, а все остальное, кроме, вроде как чек-суммы - останется в том виде, как был заполнен пакет.
В моем recv_msg хранится eth-кадр, а нужно было отправлять IP-пакет, т.е. заголов ethernet нужно было убрать(первые 14 байт в пакете все портили)
то, что нужно было исправить, а точнее просто добавить, я взял в тройные круглые скобки. P.S. Как редактировать в теге [code] не знаю:( P.P.S. будьте внимательнее, господа ![]() -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |