为什么我发送的 Curl 请求是正确的,但 UPNP 却给出错误 501?

为什么我发送的 Curl 请求是正确的,但 UPNP 却给出错误 501?

我正在尝试在路由器上使用 UPNP,但一直出现 501 错误

我正在使用的命令

curl "192.168.1.1:52869/control/igd/devinfo" --header "SOAPAction: urn:dslforum-org:service:DeviceInfo:1#GetInfo" -vv -d @1.xml -H "Content-Type: text/xml;charset=utf-8"

设备信息文件我从...处获得的信息IGD文件我从...获得了 SOAPAction,正是这一部分

<serviceList>
<service>
<serviceType>urn:dslforum-org:service:DeviceInfo:1</serviceType>
<serviceId>DeviceInfo</serviceId>
<controlURL>/control/igd/devinfo</controlURL>
<eventSubURL>/event/igd/devinfo</eventSubURL>
<SCPDURL>/DeviceInfo.xml</SCPDURL>

由于某些未知原因,唯一有效的请求也是来自此工具的这些

在此处输入图片描述

尽管 IGD.xml 提供了大量的选项,但该工具中只有端口转发和一些 WAN 选项可用

有效的命令

curl "192.168.1.1:52869/upnp/control/WANIPConn1"  --header "SOAPAction: urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -vv -d @1.xml -H "Content-Type: text/xml;charset=utf-8"

1.xml 文件看起来主要是 soap 操作和常规 xml soap 请求的混合。

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u=”urn:schemas-upnp-org:service:WANIPConnection:1″></u:GetExternalIPAddress></s:Body></s:Envelope>

我甚至不知道该工具从哪里获得了与 igd.xml 文件中完全不同的 URL,所以我在设备的固件文件中搜索了字符串,并找到了一个名为gatedesc.skl只有图像中的两个选项...这是怎么回事?问题出在哪里?

答案1

您在 中的模式周围有智能引号1.xml,请先纠正它们(除非只是从这里粘贴)。

答案2

除了@gaddman(谢谢伙计)所说的之外......这里还有一些信息肯定会对遇到此问题的任何人有所帮助。

如果你手动执行此操作,那么大多数请求都是以这种方式发出的(我正在使用 curl 来完成这项工作)

卷曲 “(在这里输入设备 ip 和 upnp 端口 + 你想要配置的控制 url,你肯定会使用类似工具找到它们miniupnpc-2.1)”然后是这个标题--header "SOAPAction:(您将在操作 URL 顶部找到很长的部分,就像此图一样)+#(您想要的操作)然后-vv -d@您将所需操作的信息放入其中的文件.xml 然后是这个静态标头 -H“Content-Type:text / xml; charset = utf-8”

所以基本上命令看起来像这样

curl "192.168.1.1:52869/control/igd/wlanc_1_1" --header "SOAPAction: urn:dslforum-org:service:WLANConfiguration:1#GetInfo" -vv -d @2.xml -H "Content-Type: text/xml;charset=utf-8"

在此处输入图片描述

您可以通过在 miniupnpc-2.1 文件夹中的命令行中输入 listdevices.exe 来获取 URL。xml 文件大部分是静态的,动态部分由 soap 操作标头组成,如下所示

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetInfo xmlns:u="urn:dslforum-org:service:WLANConfiguration:1"></u:GetInfo></s:Body></s:Envelope>

如果你对此一无所知,我强烈建议你使用 GUI 工具 UPnP 测试器对于 Windows 或UPnP 工具我真的更喜欢这个,因为它可以得到更新并且功能更好。

抱歉,解释得不清楚,我对此还不熟悉。

相关内容