繁体   English   中英

通过openWRT路由器upnp发现飞利浦色相

[英]upnp discovery of Philips hue from openWRT router

当我从PC发送以下数据包时,我得到了色相的响应。

sprintf(wrbuf,"%s","M-SEARCH* HTTP/1.0\r\n HOST: 239.255.255.250:1900\r\n MAN: \"ssdp:discover\"\r\n MX: 4\r\n ST: libhue:idl\r\n\r\n");

sendto(sd,&wrbuf,sizeof(wrbuf),0,(struct sockaddr *)&serv,(socklen_t)len);

响应如下。

recived: HTTP/1.1 200 OK
CACHE-CONTROL: max-age=100
EXT:
LOCATION: "ipofhue:80/description.xml"
SERVER: FreeRTOS/6.0.5, UPnP/1.0, IpBridge/0.1
ST: upnp:rootdevice
USN: uuid:2f402f80-da50-11e1-9b23-0017880a6643::upnp:rootdevice

虽然如果从我的openWRT路由器发送相同的数据包,我不会从hue得到任何响应。

我的PC IP是10.10.10.130,色相IP是10.10.10.109&我的路由器br-lan IP是10.10.10.254。 我不认为我需要从路由器运行miniupnpd,因为如果我运行它,它会从路由器开始响应,那么我只需要运行在hue hub上的upnp服务器的答复,而我没有得到。

openwrt工具链不允许M-SEARCH数据包到达wan端口。它只是忽略该数据包。内核日志说IGMP消息来自我本人。 忽略。 2月4日06:18:55 user.info sysinit:组239.255.255.250的源地址172.22.xx.xx不在上游VIF的任何有效网络中。 -

在我看来,数据包是通过Internet而不是本地LAN传输的。 我认为您需要在调用sendto()之前专门绑定到BR-LAN IP。 例如:

int sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in sin = {};
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr("10.10.10.254");
sin.sin_port = 0;
bind(sd, (struct sockaddr *)&sin, sizeof(sin));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM