Я пытаюсь написать скрипт для подключения к аудио-рендереру 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 можно было автоматизировать.