Обнаружение upnp оттенка Philips от маршрутизатора openWRT

Я получаю ответ от hue, когда отправляю следующий пакет со своего ПК.

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.

IP-адрес моего ПК — 10.10.10.130, IP-адрес hue — 10.10.10.109, а IP-адрес моего маршрутизатора br-lan — 10.10.10.254. Я не думаю, что мне нужно запускать miniupnpd с моего маршрутизатора, потому что, если я запущу его, он начнет отвечать с маршрутизатора, мне просто нужен ответ от сервера upnp, который работает на концентраторе hue, которого я не получаю.

Цепочка инструментов openwrt не позволяет пакету M-SEARCH достигать wan-порта. Он просто игнорирует журнал пакета .kernel, в котором говорится, что сообщение IGMP было от меня. Игнорирование. 4 февраля 06:18:55 user.info sysinit: Исходный адрес 172.22.xx.xx для группы 239.255.255.250 не находится ни в одной допустимой сети для восходящего VIF. –


person prallav sharma    schedule 15.09.2014    source источник
comment
Действительно ли устройство отправляет пакет? Если пакет не отправлен, вполне логично, что Hue не отвечает, и вы получите поведение, которое видите сейчас.   -  person MSalters    schedule 15.09.2014
comment
да, устройство фактически отправляет пакет, sendto возвращает успех. @MSalters   -  person prallav sharma    schedule 16.09.2014
comment
вы проверили это в сети? Когда вещи ведут себя не так, как должны, вы должны быть более подозрительными, чем обычно. Кроме того, пакет в сети выглядит иначе, когда он отправляется OpenWRT?   -  person MSalters    schedule 16.09.2014
comment
@MSalters прав: запустите wireshark и убедитесь, что то, что вы думаете, происходит на самом деле. Кроме того, M-SEARCH мне кажется некорректным: между M-SEARCH и * должен быть пробел, а в начале строки не должно быть пробела. Цель поиска, которую вы используете, недействительна для UPnP.   -  person Jussi Kukkonen    schedule 16.09.2014
comment
Я не нахожу пакет, содержащий команду M-search на Wireshark, и предложенные вами изменения реализованы. @jku   -  person prallav sharma    schedule 17.09.2014
comment
Цепочка инструментов openwrt не позволяет пакету M-SEARCH достигать wan-порта. Он просто игнорирует журнал пакета .kernel, в котором говорится, что сообщение IGMP было от меня. Игнорирование. 4 февраля 06:18:55 user.info sysinit: Исходный адрес 172.22.xx.xx для группы 239.255.255.250 не находится ни в одной допустимой сети для восходящего VIF.   -  person prallav sharma    schedule 04.02.2015


Ответы (1)


Мне кажется, что пакет передается через Интернет, а не по локальной сети. Я думаю, вам нужно специально привязаться к IP-адресу BR-LAN перед вызовом sendto(). Например:

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));
person falk0069    schedule 06.09.2015