2014-09-15 3 views
1

내 PC에서 다음 패킷을 보낼 때 색조의 응답을 얻고 있습니다.openWRT 라우터에서 필립스 색조의 upnp 검색

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 라우터에서 동일한 패킷을 보내면 색조의 응답이 없습니다.

내 PC IP는 10.10.10.130이며 색조 IP는 10.10.10.109 &입니다. 라우터 br-lan IP는 10.10.10.254입니다. 라우터에서 응답을 시작하면 라우터에서 miniupnpd를 실행해야한다고 생각하지 않습니다. 색상 상자에서 실행중인 upnp 서버의 응답이 필요합니다.

openwrt 툴 체인 donot은 M-SEARCH 패킷이 wan 포트에 도달하도록 허용하지 않습니다. 그냥 패킷을 무시하십시오. 커널 로그에 표시됩니다. IGMP 메시지는 나 자신으로부터 온 것입니다. 묵살. Feb 4 06:18:55 user.info sysinit : 그룹 239.255.255.250의 소스 주소 172.22.xx.xx가 업스트림 VIF의 유효한 네트워크에 없습니다. -

+0

장치가 실제로 패킷을 보내나요? 전송 된 패킷이 없으면 색조가 응답하지 않는다는 것은 논리적이며, 지금 보게되는 동작을 얻게됩니다. – MSalters

+0

예 장치가 실제로 패킷을 보내고 있습니다. sendto가 성공을 반환합니다. @ MSalters –

+0

네트워크에서 확인 했습니까? 일이 정상적으로 행동하지 않으면 평상시보다 의심이 커야합니다. 또한 네트워크상의 패킷이 OpenWRT에 의해 전송 될 때 어떤 식 으로든 다르게 보입니까? – MSalters

답변

0

패킷이 로컬 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));