首页 > 解决方案 > 在 WSL 上使用 BASH 监听来自 DLNA 渲染器的 UDP 响应

问题描述

我正在尝试编写一个脚本来连接到 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: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 连接。

标签: bashnetworkingudpnetcatdlna

解决方案


尽管您提到了 DLNA 的问题,但看起来您确实在询问如何最好地解决此问题。

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

https://www.wireshark.org/

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


推荐阅读