![为什么我发送的 Curl 请求是正确的,但 UPNP 却给出错误 501?](https://linux22.com/image/1628877/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%8F%91%E9%80%81%E7%9A%84%20Curl%20%E8%AF%B7%E6%B1%82%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84%EF%BC%8C%E4%BD%86%20UPNP%20%E5%8D%B4%E7%BB%99%E5%87%BA%E9%94%99%E8%AF%AF%20501%EF%BC%9F.png)
我正在尝试在路由器上使用 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 工具我真的更喜欢这个,因为它可以得到更新并且功能更好。
抱歉,解释得不清楚,我对此还不熟悉。