在 WSL 上使用 BASH 侦听来自 DLNA 渲染器的 UDP 响应

Listening for UDP response from DLNA renderer with BASH on WSL

我正在尝试编写一个脚本来连接到 DLNA 音频渲染器。

网络上有几篇文章提供了有关如何使用 UDPcurl 执行此操作的信息,但是在我的特定情况下,我遇到了一些困难。

第一步是通过网络发送 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 行结尾,并且根据此 article[=33 最后一行应有一个额外的 crlf =]

一切似乎都很好。如果上面的消息在文件 devicediscovery.txt 中,则可以使用 netcat 发送此消息:

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

239.255.255.250:1900DLNA 设备通信的多播地址和端口。

这一切似乎也很好,但是,正如链接文章中所指出的那样 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 连接可以自动化。

虽然您提到了 DLNA 的问题,但您似乎真的在询问如何最好地解决此问题。

网卡不允许访问传入流量,除非设置为混杂模式。因此,Netcat 将无法执行您需要的操作。但是,您可以使用 Wireshark 读取接口上的流量。 TCPdump 和 Wireshark 关系密切,几乎可以互换。

https://www.wireshark.org/

我建议使用它来进一步排除故障。发布捕获(不仅仅是图片)并显示失败的地方。