从openWRT路由器发现飞利浦色调的upnp
upnp discovery of Philips hue from openWRT router
当我从电脑发送以下数据包时,我收到了来自hue的响应。
sprintf(wrbuf,"%s","M-SEARCH* HTTP/1.0rn HOST: 239.255.255.250:1900rn MAN: "ssdp:discover"rn MX: 4rn ST: libhue:idlrnrn");
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.10109&我的路由器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));
相关文章:
- 用A4色调扩展.WAV文件
- 平均循环值(特别是 HSL 配色方案中的色调)
- 如何访问UPnP设备的服务
- HSV 中的高效范围,具有循环色调范围
- 如何发现图像或多或少是均匀的w.r.t颜色(色调)
- 使用 OpenGL/GLSL 1.2 更改纹理色调
- 如何注册UPnP服务
- 色调曲线及其计算
- 在 C/C++ 中为 UPnP 编程
- Q HSL 色调精度
- QoS 通过 UPnP 提高无线局域网上的 VoIP 质量
- 从openWRT路由器发现飞利浦色调的upnp
- C++如何使用setpixel函数绘制色调曲线(gamma)到图形
- 在Windows中使用C++进行UPnP端口转发
- 从输入图像中提取色调范围
- 编译适用于Windows Phone 8.1或10的便携式UPnP库