Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 17.01.17 23:05
Оценка:
Задача следующая:
Есть некоторое устройство подключаемое "кабелем к сетевой карте". Для работы нужно знать IP устройства (ну и порт, но он не меняется).
Появилась хотелка узнать IP устройства автоматом, как сделано в проге загрузки фирмваре.
Там идея простая — специальный UDP пакет рассылается всем и устройство отсылает в Mutlicast группу свой ответ в котором и есть IP.

Основная идея взята отсюда с заменой на IP4
https://msdn.microsoft.com/en-us/library/ekd1t784(v=vs.110).aspx

также важно использовать несколько другой вызов.
JoinMulticastGroup(groupAddress, networkCardAddress);

Проблема:
Wireshark показывает и присоединение к группе и отсылаемый пакет и принимаемый пакет. Пакет принимается по адресу "groupAddress".
Только вот прога никак не хочет принимать этот пакет из Mutlicast группы. Хотя отсылаемый пакет принять можно.
https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.enablebroadcast(v=vs.110).aspx
Различных сетевых адаптеров на машинке много, выбран был тот к которому подключён кабель от устройства.

Перепробывал вроде уже все рекомендации "из гугла" — результат стабильно отрицательный.
Хотя правда, еще не пробовал отсылать пакет всем адаптерам — есть и такая рекомендация. Но что то не вижу смысла отсылать пакеты адаптерам виртуальных машин.

Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.
Re: Приём UDP пакета из Mutlicast группы
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 18.01.17 07:54
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.

Посмотри в сторону zeroconf или ssdp библиотек.
Sic luceat lux!
Re: Приём UDP пакета из Mutlicast группы
От: Mr Bombastic Австралия жж
Дата: 18.01.17 08:04
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.


Попробуй слушать по всем сетевым интерфейсам, т.е. не указывать карту. Попробуй внутри этой машины разослать на эту группу пакет- вот эта штука мне помогла https://github.com/marascio/mnc (первоисточник не нашёл).
Re: Приём UDP пакета из Mutlicast группы
От: andrey.desman  
Дата: 18.01.17 16:21
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.


Твое дело, возможно, пошло бы быстрее, если бы ты свой пример выложил сюда.
Re: Приём UDP пакета из Mutlicast группы
От: kov_serg Россия  
Дата: 18.01.17 21:24
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Перепробывал вроде уже все рекомендации "из гугла" — результат стабильно отрицательный.

AN>Хотя правда, еще не пробовал отсылать пакет всем адаптерам — есть и такая рекомендация. Но что то не вижу смысла отсылать пакеты адаптерам виртуальных машин.

AN>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.


Тут пример клиента и сервера для мультикаста, работает под виндами и линухом даже. Когда-то делал для отладки.
https://cloud.mail.ru/public/ADfL/6UnYWdXmh
Re[2]: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 18.01.17 22:36
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Тут пример клиента и сервера для мультикаста, работает под виндами и линухом даже. Когда-то делал для отладки.

_>https://cloud.mail.ru/public/ADfL/6UnYWdXmh
Спасибо, можно будет на прием поставить и глянуть принимает что от устройства или нет.
Но скорее всего проблема комплексная, так как в других постах встречал подобное "А ваш код у меня работает без проблем".
Хотя у меня и сервер и клиент должны быть в одной проге.

А что подразумевается под параметром "multicast interface"?
И какой локальный адаптер используется? Или это и есть "multicast interface" судя по коду.
Re[3]: Приём UDP пакета из Mutlicast группы
От: kov_serg Россия  
Дата: 18.01.17 22:46
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Здравствуйте, kov_serg, Вы писали:


_>>Тут пример клиента и сервера для мультикаста, работает под виндами и линухом даже. Когда-то делал для отладки.

_>>https://cloud.mail.ru/public/ADfL/6UnYWdXmh
AN>Спасибо, можно будет на прием поставить и глянуть принимает что от устройства или нет.
AN>Но скорее всего проблема комплексная, так как в других постах встречал подобное "А ваш код у меня работает без проблем".
AN>Хотя у меня и сервер и клиент должны быть в одной проге.

AN>А что подразумевается под параметром "multicast interface"?

AN>И какой локальный адаптер используется? Или это и есть "multicast interface" судя по коду.
Да это в какой адаптор вещать. Когда их много без этого вещает в произвольный обычно не в тот.
Re[2]: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 18.01.17 22:49
Оценка:
Здравствуйте, Mr Bombastic, Вы писали:

MB>Здравствуйте, AlexNek, Вы писали:


AN>>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.


MB>Попробуй слушать по всем сетевым интерфейсам, т.е. не указывать карту. Попробуй внутри этой машины разослать на эту группу пакет- вот эта штука мне помогла https://github.com/marascio/mnc (первоисточник не нашёл).

...Пробовал добавлять в группу все адаптеры

А это не подойдет, а то копилировать С-шный код пятигодичной давности может быть проблемой, да и солюшин нужно самому делать...
https://nmap.org/ncat/
Re[3]: Приём UDP пакета из Mutlicast группы
От: kov_serg Россия  
Дата: 18.01.17 22:53
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Спасибо, можно будет на прием поставить и глянуть принимает что от устройства или нет.

AN>Но скорее всего проблема комплексная, так как в других постах встречал подобное "А ваш код у меня работает без проблем".
Вспомнил мультикаст заработал сразу только в линухе, а винде был подвох.
Если подключить windows.h то констаны будут объявлены не правильно для multicast
может из-за этого у вас не пашет.

эта засада объяевлена в winsock.h (вместе с windows.h цепляется)
#define IP_MULTICAST_IF 2 /* set/get IP multicast interface */

вот что должно быть. объявлено в ws2tcpip.h
#define IP_MULTICAST_IF 9 /* set/get IP multicast i/f */
Отредактировано 18.01.2017 22:56 kov_serg . Предыдущая версия . Еще …
Отредактировано 18.01.2017 22:55 kov_serg . Предыдущая версия .
Re[2]: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 18.01.17 23:08
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Здравствуйте, AlexNek, Вы писали:


AN>>Главная непонятка, что приходящий пакет виден в Wireshark, а принять не получается.


AD>Твое дело, возможно, пошло бы быстрее, если бы ты свой пример выложил сюда.

На один экран всё не поместится, а больше никто и смотреть не будет думаю. Да и скорее всего проблема именно в конкретной конфигурации. Всё равно сейчас на этом компе ничего нет.

Вот этот проект тоже пробовал:
https://www.codeproject.com/Articles/1705/IP-Multicasting-in-C
Re[4]: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 18.01.17 23:09
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, AlexNek, Вы писали:


AN>>Спасибо, можно будет на прием поставить и глянуть принимает что от устройства или нет.

AN>>Но скорее всего проблема комплексная, так как в других постах встречал подобное "А ваш код у меня работает без проблем".
_>Вспомнил мультикаст заработал сразу только в линухе, а винде был подвох.
_>Если подключить windows.h то констаны будут объявлены не правильно для multicast
_>может из-за этого у вас не пашет.

_>эта засада объяевлена в winsock.h (вместе с windows.h цепляется)

_>#define IP_MULTICAST_IF 2 /* set/get IP multicast interface */

_>вот что должно быть. объявлено в ws2tcpip.h

_>#define IP_MULTICAST_IF 9 /* set/get IP multicast i/f */
так я пользую c#
Re: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 19.01.17 21:42
Оценка:
Сегодня достаточно времени не было, но обнаружил, что всё заработало как только одну прогу разнес на сервер и клиент и запустил отдельно прием и отдельно передачу.
Пока есть предположение, что для UDP нельзя пользовать один и тот же сокет и для приема и для передачи.

Так что спасибо всем за идеи
Re[2]: Приём UDP пакета из Mutlicast группы
От: kov_serg Россия  
Дата: 19.01.17 22:13
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Пока есть предположение, что для UDP нельзя пользовать один и тот же сокет и для приема и для передачи.

SO_REUSEADDR — надо выставить и пользуйся на здоровье.
Re[3]: Приём UDP пакета из Mutlicast группы
От: AlexNek  
Дата: 19.01.17 22:25
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, AlexNek, Вы писали:


AN>>Пока есть предположение, что для UDP нельзя пользовать один и тот же сокет и для приема и для передачи.

_>SO_REUSEADDR — надо выставить и пользуйся на здоровье.

у "нас" похоже немного по другому, но я этого не делал пока.
http://stackoverflow.com/questions/9120050/connecting-two-udp-clients-to-one-port-send-and-receive
Re[2]: Приём UDP пакета из Mutlicast группы
От: Mr.Delphist  
Дата: 20.01.17 08:36
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Сегодня достаточно времени не было, но обнаружил, что всё заработало как только одну прогу разнес на сервер и клиент и запустил отдельно прием и отдельно передачу.

AN>Пока есть предположение, что для UDP нельзя пользовать один и тот же сокет и для приема и для передачи.

Напоролся на такое, когда разбирался с UPnP. Всё верно, мультикаст-сокет должен заниматься только мультикастом. Если хочется что-то ответить на свой же мультикаст — создайте новый сокет на другой порт и вещайте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.