bash - 在 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: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 连接。
解决方案
尽管您提到了 DLNA 的问题,但看起来您确实在询问如何最好地解决此问题。
除非设置为混杂模式,否则网卡不允许访问传入流量。因此,Netcat 将无法执行您需要的操作。但是,您可以使用 Wireshark 读取接口上的流量。TCPdump 和 Wireshark 有着密切的联系,几乎可以互换。
我建议使用它来进一步排除故障。Ppost 捕获(不仅仅是图片)并显示失败的位置。
推荐阅读
- c - #ifdef 和使用 Makefile 进行条件编译
- matlab - 将 curl 翻译成 Matlab/Webwrite
- php - 在单循环数组中使用php获取json格式所有其他数组在父循环中设置
- elasticsearch - How to add timestamp & key for elasticsearch using fluent
- ehcache - springboot中的Ehcache RMI复制不能双向工作
- ios - 从 Table View 控制器到 Tab Bar 控制器的 Segue
- java - 测试 mockito junit 方法不起作用
- mongodb - 如何通过docker为mongodb创建新数据库和所需用户
- eclipse - 尝试在 codenameone 上启动模拟器时出错
- sql - Spark2.3 - SQL 获取字符串之前和之后的记录