Подключение к серверу многоадресной рассылки с использованием фактического IP-адреса и порта сервера - PullRequest
1 голос
/ 07 июня 2011

У меня есть многоадресный сервер, который многоадресно на IP 233.1.2.8 на некоторых портах
Мне нужно подключиться к этому серверу напрямую, используя его фактический IP, не хочу использовать трансляцию. Я хочу получить фактические данные, которые он отправляет на определенный порт, скажем,

Multicast Ip  233.1.2.8 port 32334 and 35245
Actual IP 198.122.55.191 port 35366

, поэтому я хочу прочитать данные 35366

Я вижу эти данные в CommView.exe, но не могу их прочитать, если я пытаюсь подключиться, подключается, но нет данных Спасибо

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Вы можете переосмыслить свой вопрос.IP-пакеты имеют адрес и порт источника и назначения, поэтому давайте подведем итоги:

  1. Вы ищете многоадресные пакеты с исходным портом 35366.
  2. Адрес многоадресной рассылки 233.1.2.8.
  3. Порт назначения 32334 или 32335.

Вам придется открыть два сокета, один для прослушивания порта 32334 и один для 32335, для каждого сокета, который вам потребуется для адреса многоадресной рассылки 233.1.2.8.Это дает вам поток пакетов с любого хоста, теперь у вас есть выбор:

  1. Используйте connect(), чтобы ограничиться пакетами с 198.122.55.191.
  2. Используйте recvmsg() илиrecvfrom() для чтения каждого пакета с IP-адресом источника и фильтрации потока в вашем приложении.
  3. Использование многоадресной рассылки по источнику (SSM) и подписка на адрес многоадресной рассылки 233.1.2.8 из 198.122.55.191.

Последний вариант обычно требует сети с поддержкой IGMPv3 и ограничен 232.0.0.0/8 адресами.

0 голосов
/ 13 декабря 2011

Вы можете посмотреть на этом сайте.У него есть пример также http://tack.ch/multicast/

0 голосов
/ 07 июня 2011

Многоадресная рассылка по определению является улицей с односторонним движением: сервер отправляет данные группе, и вы подписываетесь на нее.

Соединение с сервером не может быть выполнено через UDP, для этого требуется, чтобы на самом деле был TCP-сервер и прослушивал входящие соединения через этот конкретный порт. Тот факт, что этот порт используется для отправки многоадресных пакетов, не говорит о том, что его тоже кто-то слушает.

Если вы хотите прочитать данные, отправленные с определенного порта - тогда вам нужно подписаться на все группы и проанализировать пакеты UDP (и кадр IP, если у вас есть несколько серверов, передающих, чтобы знать IP-адрес источника), чтобы увидеть, откуда они берутся, и отфильтровать те, которые приходят из интересующего вас источника.

...