Выполнение сканирования UPNP не возвращает мост Philips Hue Bridge
Я пытаюсь реализовать собственное сканирование UpNP, оно в основном работает и доказывает, что это не я. У меня есть программа Windows, которая позволяет отправлять пакеты и видеть, какой ответ возвращается.
Я отправляю пакет в 239.255.255.250
на порт 1900
, и я отправляю следующие данные:
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
Man: "ssdp:discover"
MX: 10
ST: ssdp:all
Просто для получения дополнительной информации, в моем Java-коде (Android) у меня есть следующее, но я получаю тот же ответ, что и приложение тестера пакетов:
try
{
byte[] sendData = new byte[1024];
//byte[] receiveData = new byte[1024];
byte[] receiveData;
String mSearch = "M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n\r\n";
sendData = mSearch.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900);
DatagramSocket clientSocket = new DatagramSocket();
clientSocket.send(sendPacket);
while (keepGoing)
{
receiveData = new byte[1024];
receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String response = new String(receivePacket.getData());
if (response == null || response.length() == 0)
{
keepGoing = false;
}
else
{
iupnpScan.updateText(response);
}
}
iupnpScan.complete(true);
return true;
}
catch (UnknownHostException ex)
{
Log.e("MainActivity", "Unknown Host Exception: " + ex.toString());
}
catch (SocketException ex)
{
Log.e("MainActivity", "Socket Exception: " + ex.toString());
}
catch (IOException ex)
{
Log.e("MainActivity", "IO Exception: " + ex.toString());
}
iupnpScan.complete(false);
return false;
Я возвращаюсь к некоторым устройствам, например, моему интеллектуальному телевизору, маршрутизатору и NAS, но мост Hue Bridge не возвращается в ответ.
Разве мост Philips Hue Bridge реализует UpNP по-разному, и все, что я вижу, - это ответ, который они отправляют обратно сейчас о том, что нужно для его поиска.
Спасибо
Ответы
Ответ 1
Хотя сайт Philips отмечает, что он поддерживает UPnP, я не знаю, верно это или нет.
Я бы попробовал сканировать всю сеть и тестировать IP по IP. Да, я знаю, это не то, что говорится в стандарте, но реальность иногда бывает безумной.
Это открытие уже реализовано таким образом.
Я запрограммировал сетевой поиск в прошлом (ища малиновый PI), и лучшим методом, который я могу использовать, был сопоставление MAC-адресов с моим известным началом адреса. К счастью, Philips опубликует диапазон своих MAC-адресов.
Ответ 2
Я тоже боролся с этим поведением. После некоторых проб и ошибок я понял, что Hue Bridge, похоже, не понимает "
вокруг значения ssdp: discover. Эти кавычки также отсутствуют в проекте IETF: https://tools.ietf.org/html/draft-cai-ssdp-v1-03
Следующее выражение было успешным для меня:
M-SEARCH * HTTP/1.1
ST: ssdp:all
MX: 3
MAN: ssdp:discover
HOST: 239.255.255.250:1900
Это ответ, который я получил:
HTTP/1.1 200 OK
HOST: 239.255.255.250:1900
EXT:CACHE-CONTROL: max-age=100
LOCATION: http://192.168.xxx.xxx:80/description.xml
SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.16.0
hue-bridgeid: 001788FFFE29D301
ST: urn:schemas-upnp-org:device:basic:1
USN: uuid:2f402f80-da50-11e1-9b23-00178829d301