问题标签 [ssdp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1297 浏览

udp - netcat 端口 1900 没有返回响应

所以我试图从打开 udp 端口​​ 1900 的服务器获得响应。

这是我输入的命令和我发送的数据:

但是我没有得到服务器的任何响应,至少没有输出到屏幕上。我确定这个 IP 上的 udp 端口​​ 1900 是打开的。如果有人可以提供任何帮助以从打开 udp 端口​​ 1900 的服务器获得响应,那将不胜感激。谢谢

0 投票
1 回答
133 浏览

udp - SSDP 协议最简单的 Reactor / Netty 实现是什么?

我用 UdpClient、UdpServer、Spring Integration Ip 模块尝试了很多东西,包装了 DatagramSocket 接收方法以返回 Flux,但我根本无法从标准 SSDP 239.255.255.250:1900 收到任何响应。

还将数据包发送到 SSDP 的奖励积分。

0 投票
2 回答
896 浏览

ios - NWConnection SSDP 发现未接收数据

我正在尝试进行 SSDP 发现广播,但无法从 NWConnection.receive 获取回复数据。

Network.framework 相对较新,并且没有很多信息。我在这里缺少什么?

SSDP 发现广播已发送,并且 UPnP 设备进行了回复。(下面的Wireshark截图) 在此处输入图像描述

0 投票
0 回答
523 浏览

python - 使用 IPv6 的 uPNP / ssdp 发现

我尝试让 uPNP / ssdp Discovery 在 IPv6 上工作

IPv4 发现工作正常:

但我的 IPv6 版本不起作用

帮助将不胜感激!

0 投票
1 回答
271 浏览

udp - 连接到 IOT 设备(UDP 或 ICMP)的正确方法

将应用程序连接到设备的正确方法是什么?目前,我有一个控制电力的树莓派 3 和一个我创建的 iPhone 应用程序。每次应用程序进入前台时,它都会发送一条 UDP 广播消息,当应用程序收到来自树莓派的响应时,它会使用该 IP 地址(在 IP 标头中)来使用我在集线器中创建的 Web 服务。此 UDP 进程在您运行应用程序时一直执行。这是物联网设备通常做的吗?我认为树莓派 IP 迟早会改变。

我的一个同事告诉我另一种方式:在我第一次获得IP地址后,不是每次应用程序运行时都使用UDP广播消息,而是使用ICMP ping之前保存的IP地址,看看它是否有响应。在这种情况下,我使用具有该 IP 地址的 Web 服务,否则,再次使用 UPD 广播消息。

我不明白这一点。基本上是因为系统使用ICMP速度并不快。(UDP 请求或多或少与 ICMP 请求一样快)。此外,也许,另一台设备现在开始使用该 IP 地址(如智能电视或智能插头),因此,它不会回复应用程序发送的网络请求。在这种情况下,应用程序无法恢复,因为它认为它已经连接到正确的设备。据我了解,ICMP 是一种用于诊断的协议,而不是用于设备发现的协议。

你怎么看?Alexa、Philips Hue、Smart plugs 等设备使用什么过程来解决应用程序发现设备的问题?似乎飞利浦 HUE 正在使用 SSDP,它在后台使用 UDP 广播消息。每次运行应用程序时都会使用它来发现 IP 地址吗?(我稍后会用wireshark检查这个)

感谢您的建议。

0 投票
0 回答
113 浏览

networking - MutlicastSocket 接收并不总是

我想实现一个“简单”的 SSDP 发现客户端。意味着客户端应该发送一个

然后收听“网络”(?)以获取 IP 地址列表。

为了测试实现,我编写了一个单元测试,它创建了一个“假” MulticastServer,它只是听到 SSDP IP&Port,当收到一些东西时,发回相同的消息。

问题是这段代码大部分时间都在我的机器(macOS)上工作,但在我们的 CI 服务器(Linux)上却从来没有。我(macOS)有时会收到与 CI 相同的断言失败错误。但正如我所说 - 只是有时!不总是。我不知道为什么。

这是客户端的实现:

而这个测试(包括MulticastServer):

当测试失败时,它在该行失败:

list是空的。

经过一些调试,我发现MulticastServer没有收到消息。因此客户端没有收到响应并将 IP 地址添加到list.

我希望在没有那种“片状”的情况下,MulticastServer它将始终有效。我的实施有问题吗?

0 投票
1 回答
800 浏览

c++ - 响应未到达 Windows 中的多播套接字

我正在尝试启动并运行一个小的 SSDP 客户端/服务器。到目前为止,服务器运行良好,响应了我的 M-SEARCH(根据 wireshark)。客户端代码是使用 Winsock2 在 Visual Studio 中编写的(请参见下面的代码)。问题是当我将搜索发送到多播地址时,响应永远不会到达我的 recv 调用。

我已经尝试直接向服务器 IP 地址发送和接收,这将生成正确到达我的 recv 调用的响应。但是,当我将 ip 更改为多播地址时,它不起作用(即使我可以在 Wireshark 上看到响应!)。因此,出于某种原因,套接字(在操作系统级别?)拒绝将其传递给应用程序。

我应该注意,响应始终是单播的。

这是我的代码:

我尝试了一件有趣的事情(无需重新启动应用程序!):

1)先发送到直接ip地址(192.168.3.90)

2) 得到回应

3) 现在发送到多播地址

4)现在响应恢复得很好!

就好像套接字以某种方式从第一个发送/接收调用中“知道”了单播地址。

有谁知道该怎么做或如何调试?

0 投票
2 回答
673 浏览

python-3.x - SSDP M-search 不适用于单播 - 单个 IP

用于发现的 SSDP M-search 请求非常适用于多播地址 239.255.255.250。但是,我需要将此请求发送到特定 IP。这没用。根据UPnP 架构文档,支持单播发现消息,与多播消息略有不同

多播消息是 M-SEARCH * HTTP/1.1 HOST:239.255.255.250:1900 MAN:ssdp:discover ST:ssdp:all MX:1

单播消息类似 - 除了多播 IP 更改为特定 IP 并且 MX:1 被删除(根据规范 - 没有找到任何单播发现 m-search 的代码示例)

这很好用。但以下没有 - recv() 调用超时

我尝试了更多的“setsockopt”变体,但都不起作用。如果有任何可能的原因的线索,请分享 - 它可能是从设备端响应 1900 上的多播而不是单播消息吗?

提前致谢!

0 投票
0 回答
65 浏览

php - PHP 响应 SSDP

在 PHP 中,是否可以响应 SSDP 请求?

我需要一个客户端设备(也是用 PHP 编写的)来搜索主设备(也是用 PHP 编写的——位于同一个网络上)。

基本上,我需要一种检测主设备本地 IP 的方法,因为它并不总是知道设备分配了哪个 IP。

0 投票
0 回答
605 浏览

docker - 如何从 docker 容器将 SSDP 流量发送到网络?

我正在尝试使用 SSDP 在我的本地网络上发现 Onvif 摄像机。我的代码可以在我的工作站上运行,它也可以在使用主机网络的容器中运行。我不想使用主机网络(我需要与主机上的其他容器连接,这很好用)。我的选择也很有限,因为这是一个运行 BalenaOS 的小型设备,所以不是所有可以用 docker 完成的事情都是可能的。例如,我认为不可能使用管道系统。

这是我到目前为止所知道的:

  • 使用wireshark我可以看到多播数据包没有离开我的主机
  • 我已经增加了数据包的 TTL(我确定这是必要的,但它没有产生明显的差异)

似乎应该可以iptables在主机上使用将数据包从桥接网络转发到,eth0但实际上,我对多播/广播的理解不够好,无法知道这是否足够。

我看到有专门的工具来管理类似pimdmrouted案例。作者(?)在他的网站上有很多信息(例如https://troglobit.com/2016/03/07/testing-multicast-with-docker/)但我不完全理解如何翻译变成我可以尝试的东西。无论如何,正在讨论的情况与我的情况并不完全相同(他们希望在 docker 中接收多播消息而不是将它们发送出去)。

有一些 stackoverflow 问题看起来很相似,但实际上并非如此:

  • Docker 接收多播流量:这实际上是相反的情况,用户需要在他们的容器中接收多播消息,在我的情况下,回复是单播的,更容易路由(但无论如何我都没有走得足够远来回复完全发送)
  • 从 docker 容器发送 udp 广播:没有明确的解决方案,评论建议使用主机网络

理想情况下,我希望找到一种方法来使用 iptables 进行我需要的路由,但我不确定这是否可能。


更新:我不想发布答案,因为我永远无法让它按照我想要的方式工作。我最终在主机网络上的一个新容器中放置了一个小过程 - 足以进行发现。这能够进行发现并将结果发送回我最初想要进行发现的容器。这不是让我满意的妥协,但我无法找到另一种解决方法。我仍然认为这可能是可能的,所以我不回答这个问题,以防有一天有人偶然发现它有一个解决方案。