информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле ЛевинаSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 С наступающим 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
У меня не используется RRAS. Используется опция «Enable IP forwarding» + соотв. команды route 05.08.04 14:17  Число просмотров: 1671
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
<programming>
Вопрос про сокеты и UDP Multicast. 05.08.04 12:12  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 05.08.04 12:14  Количество правок: 1
<"чистая" ссылка>
Итак, ситуация... Есть программа (VyPress Chat), используемая в конторе по своему прямому назначению. Она не использует для своей работы выделенного сервера сообщений, а использует UDP Multicast. Как известно, виндовозный роутер не может форвардить мультикаст-траффик на другие интерфейсы. А это надо, дабы чат работал в обоих офисах. Итак, пишу программу-повторитель, которая слушает UDP, с приходом нужного пакета инкапсулирует его и передаёт по TCP в другой такой-же повторитель в другом офисе, тот его принимает и делает Multicast. Вопрос: после мультикаста свой же пакет попадёт в "слушающую" часть повторителя. Как этого избежать? Есть ли "грамотные" методы, или выставлять глобальный флаг типа DropNextPacket ? А как узнать, тот ли это пакет, сеть ведь штука непредсказуемая... В общем, надо как-то помечать "свои" пакеты.

Заранее всем большое спасибо за советы.
Re: Вопрос про сокеты и UDP Multicast. 05.08.04 17:27  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
Во-первых это всё неправильно, и конфликтует с RFC.

Ну а если хочеться сделать можно так:
вариант 1 - при передаче UDP от повторителя использовать source_address = 127.0.0.1 или просто левый адрес, соответственно в слушающей части игнорировать пакеты такие пакеты;
вариант 2 - использовать другой UDP-source-port...;
вариант 3 - при передаче UDP от повторителя делать broadcast в пределах сети, но увидят эти пакеты клиенты или нет зависит от chat-клиента;
Как это конфликтует? ;-) 06.08.04 10:40  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 06.08.04 10:43  Количество правок: 1
<"чистая" ссылка>
> Во-первых это всё неправильно, и конфликтует с RFC.

Мне, честно говоря, вообще на IP и его RFC плевать, с самого начала надо было искать решение типа Ethernet-репитера. Гемор с разными подсетями раздражает давно и сильно.

А раз я не нашёл такого решения под NT4 (а надо было именно под него), то теперь увы, приходится внедрять решение через то самое место, через которое у нас обычно всё внедряется ;-)

PS: с каким RFC что у меня конфликтует?
Если мне не изменяет память, то изначально для multicast в... 13.08.04 19:35  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
Если мне не изменяет память, то изначально для multicast в RFC (конечно не помню в каком) предусмотрен только как-бы "half-duplex" routing. Т.е. нельзя роутить одинаковый multicast из одной сети в другую и обратно, а только в одну сторону. Или другими словами, multicast-маршрут имеет явно заданное одностроннее направление.

С другой стороны уже есть RFC2715 (http://www.ietf.org/rfc/rfc2715.txt) и может быть есть софт который это делает...
дык recvfrom возвращает адрес отправителя пакета... 05.08.04 13:31  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Прикол в том, что роутер «рабочая лошадка», и на нём тоже работает человек, и, соответственно, будет запущен VyPress Chat, и адрес отправителя пакетов будет тот же, что и у повторителя. 05.08.04 14:19  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
А UDP номер порта отправителя уже отменили? Он не может быть... 05.08.04 15:20  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
А UDP номер порта отправителя уже отменили? Он не может быть одинаковым у вайпресса и повторителя.
Это TCP не может... А UDP — может! 05.08.04 16:26  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Ну да.. Если захочет Ж) 05.08.04 16:46  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Тода наверно придется сделать с хэшами. А для надежности - очередь на 100 пакетов, отсортированная по хэшам для быстрого поиска.
Еще вариант - IPPROTO_RAW и самому собирать и слать пакеты в интерфейс...
А ipproto_raw поддерживается на nt4? 05.08.04 16:54  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Не-а.. Тока 2000 и выше и тока под админом 05.08.04 17:55  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Если продолжить заниматься мозгое... мозговым штурмом то можно еще сделать API hooking для твоего чата, который перехватывая socket, bind, send, recv или что там он юзает перенаправлял бы их серверу по TCP, который в свою очередь рассылал бы всем остальным клиентам, а они бы думали что это UDP броадкаст.. Изврат конечно зато может получится довольно универсальная штука. Особенно если делать это не через API hooking а через LSP... Хотя очередь последних пакетов намного проще Ж)
ЗЫ заюзали бы серверный TCP чат. Тот же ирк...
Я чего то не понял 05.08.04 12:41  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Если пакет пришел с одного интерфейса - броадкастить его в другой. И наоборот. Каким образом пакет может повторяться?
Объясняю. 05.08.04 14:39  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Если пакет пришел с одного интерфейса - броадкастить его в
> другой. И наоборот. Каким образом пакет может повторяться?
Повторитель содержит несколько частей. Первая часть по TCP связывается с другим таким же повторителем, дабы передавать инкапсулированные UDP-пакеты другому, но который в другой подсети. Т.е. по одному интерфейсу ходят только TCP-пакеты, и с ними проблем нет.
Нас интересует приёмо-передающая часть UDP, которая на другом интерфейсе. Приёмная часть слушает UDP на порту. Итак, пришёл пакет. Передаёт его по TCP другому повторителю. Тот делает ему Multicast в "родную" подсеть. Но там ведь и слушающая часть! И она примет этот пакет.

Повторяю вопрос: как метить "свои" пакеты? Может, CRC данным считать, и, если совпадает с только что переданным, то можно дропать его с большой вероятностью?
CRC плохо - большая вероятность коллизии. Лучше хранить md5... 05.08.04 17:40  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
CRC плохо - большая вероятность коллизии. Лучше хранить md5 хэши. Причем последних 10 пакетов. Этого должно быть достаточно.
Да ну их совсем, эти хэши... Для 10 пакетов я лучше просто данные сохраню, быстрее будет. 06.08.04 12:10  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Win может роутить multicast 05.08.04 12:39  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
> роутер не может форвардить мультикаст-траффик на другие

Может, смотри доки по RRAS.
У меня не используется RRAS. Используется опция «Enable IP forwarding» + соотв. команды route 05.08.04 14:17  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
А разве Multicast UPD пакет не содержит адрес отправителя? 13.08.04 18:58  
Автор: DiVider Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach