Выполнение сканирования 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