Прослушивание UDP-ответа от DLNA-рендера с BASH на WSL - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь написать скрипт для подключения к аудио-рендереру DLNA.

В Интернете есть несколько статей, в которых содержится информация о том, как это сделать, используя UDP и curl, однаков моем конкретном сценарии у меня возникают некоторые трудности.

Первый шаг - отправить UDP многоадресное объявление по сети для обнаружения устройств DLNA в сети.

Сообщение, отправленное на адресобнаружение устройств:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MX: 5
Man: "ssdp:discover"
ST: urn:schemas-upnp-org:device:MediaRenderer:1

Все строки в этом сообщении, отправленные через UDP, должны иметь crlf окончания строк, а последняя строка должна иметь дополнительный crlf в соответствии с этой статьей

Все вроде бы хорошо.И если приведенное выше сообщение находится в файле devicediscovery.txt, возможно, можно использовать netcat для отправки этого сообщения:

cat devicediscovery.txt | nc -u -4 239.255.255.250 1900

239.255.255.250:1900 - это адрес и порт многоадресной рассылки, через которые DLNA устройстваобщаться.

Однако все это тоже нормально, как указано в связанной статье netcat игнорирует ответ от средства визуализации dlna, поскольку существует несоответствие IP-адресов, по которым сообщение отправляется черезадрес многоадресной передачи dlna, хотя ответ приходит от маршрутизатора.В статье предлагается использовать tcpdump для захвата ответа, однако я нахожусь в Windows и использую Bash on Windows WSL, поэтому tcpdump недоступен, и такая методика может оказаться сложной при разработке сценария для автоматизации соединения dlna.

Можно ли использовать два отдельных экземпляра netcat?Один экземпляр отправлял сообщение по многоадресному адресу dlna, а другой прослушивал ответ от маршрутизатора?

Я пытался заставить это работать, однако я не уверен, какой порт netcat должен прослушиватьуслышать входящий ответ.Есть ли стандартный порт, который netcat должен прослушивать?

Я пробовал такие команды, как: nc -luv 192.168.0.1, однако я получаю ошибку Servname not supported for ai_socktype.Я попытался исправить это, поиграв с /etc/services, но безуспешно.

Какую команду я могу использовать и как мне настроить систему на прослушивание ответа от поиска устройств dlna?Я хотел бы проанализировать ответ в сценарии, чтобы подключение dlna можно было автоматизировать.

1 Ответ

0 голосов
/ 26 сентября 2019

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

Сетевые карты не разрешают доступ к входящему трафику, если не установлены в случайном режиме.Из-за этого Netcat не сможет делать то, что вам нужно.Но вы можете использовать Wireshark для чтения трафика на интерфейсе.TCPdump и Wireshark имеют тесные связи и почти взаимозаменяемы.

https://www.wireshark.org/

Я бы порекомендовал использовать его для дальнейшего устранения неполадок.Ppost захват (не просто изображение) и показать, где это не удалось.

...