【问题标题】:UPnP envelopes from scratch not really working从头开始的 UPnP 信封并没有真正起作用
【发布时间】:2013-11-29 16:27:55
【问题描述】:

UPnP 一直是我想测试的东西之一,所以我决定用一种没有模糊的语言来测试它。 现在我的问题似乎是,我在互联网上找不到任何关于 UPnP 的信息,我发现它通过 UDP 运行并且它使用 SOAP 信封进行通信,但这就是我能找到的所有信息。 现在我的目标是我希望能够进行动态端口转发,并可能稍后从我的路由器收集一些信息。 以下是我目前一直在测试的代码:

;;This is the UDP Server
;;Start this first

; Start The UDP Services
;==============================================
UDPStartup()

; Register the cleanup function.
OnAutoItExitRegister("Cleanup")

; Bind to a SOCKET
;==============================================
Local $socket = UDPBind("239.255.255.250", 1900)
If @error <> 0 Then
   MsgBox(0, "UDP Fail", @error, 1)
   Exit;
EndIf;

While 1
    Local $data = UDPRecv($socket, 1024)
    If $data <> "" Then
        MsgBox(0, "UDP DATA", $data, 1)
    EndIf
    Sleep(100)
WEnd

Func Cleanup()
    UDPCloseSocket($socket)
    UDPShutdown()
EndFunc   ;==>Cleanup

为了记录,这只是尝试监听 UPnP 通信。 这只会导致我收到错误代码 10049,也称为地址不可用。 所以我问你们亲爱的堆垛机,我到底做错了什么?

【问题讨论】:

  • 那是你机器的IP地址吗?或者您正在运行 udp 服务器的某台机器?
  • @MarcB 这是一个多播IP地址。
  • 不熟悉autoit,但据我记忆一般的多播代码,一般都是先绑定本地IP地址,然后再添加多播地址。
  • 我现在正在尝试监听其他执行 UPnP 的设备,一旦绑定,我就无法真正更改地址。如果我需要监听多播地址还是只监听计算机自己的地址,我有点困惑?

标签: autoit upnp


【解决方案1】:

所以我自己为任何想玩弄这个问题的人找到了这个问题的解决方案。 UPnP 协议的设置显然非常挑剔,因此需要密切注意其设置方式:

这是发现消息,它需要看起来完全像这样,即使最后有双线移位。但是 ST 消息可以更改,即“ST:ssdp:all”将使它找到所有设备的所有服务,当前的确保只获取 rootdevice 数据。发现消息通过 UDP 发送到端口 1900 上的多播地址 239.255.255.250。

$strUpnpDiscover = 'M-SEARCH * HTTP/1.1' & @CRLF & 'HOST: 239.255.255.250:1900' & @CRLF & 'ST:upnp:rootdevice' & @CRLF & 'MAN:"ssdp:discover"' & @CRLF & 'MX:10' & @CRLF & @CRLF

现在,为了接收来自您的 rootdevice 的回复,您需要为用于发送命令的源端口设置一个侦听器,因为这会有所不同,您要么必须从端口对象获取它,要么使用获取数据的 shell 命令,如下所示(@autoitpid 获取程序的父 id):

$netstat = _getDOSOutput("netstat -aonp udp")
$sourceport = StringReplace(StringMid($netstat, StringInStr($netstat, '*:*' & @AutoItPID)-5, 5), ':' , '')

但是一旦你得到这个端口,你所要做的就是为你的网络接口上找到的端口设置一个 UDP 监听器,你会收到来自你的 UPnP 单元的响应。

现在,一旦您收到响应,有关如何与设备通信和更改设置的所有数据都将在您收到的数据中,查找

LOCATION: http://192.168.1.1:49152/wps_device.xml

此 URL 将包含您设备的数据表。从这里开始,只需制定一个适当的 SOAP 信封,以使设备按您的要求行事。 :P

有关如何构建 SOAP 信封的更多信息,您可以查看此处:http://www.upnp-hacks.org/upnp.html

我希望这些东西真的可以帮助任何想要构建轻量级 UPnP 端口转发接口的人。 :)

【讨论】:

  • 如果事情仍然令人困惑,请随时询问,我会尽力更详细地解释。 :)
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2012-01-13
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多