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