Получить IP-адрес устройства UPnP

Я пытаюсь узнать IP-адрес устройства UPnP, подключенного к моей сети. В Windows я могу получить эту информацию, обратившись к следующему вопросу в StackOverflow:

Многоадресная рассылка UPnP: отсутствующие ответы от M-SEARCH (Discovery)

Однако, как я могу это сделать в Linux?


person ChristianR    schedule 02.07.2013    source источник
comment
Как вы хотите реализовать решение (скрипт оболочки, C++, Java)?   -  person trojanfoe    schedule 02.07.2013
comment
Что вы знаете об этом устройстве? Вы можете получить доступ к маршрутизатору? Установлен ли IP-адрес динамически (с использованием DHCP) или фиксирован? Ожидаете ли вы, что будете находиться в одной подсети с вашим Linux-компьютером?   -  person Floris    schedule 02.07.2013
comment
Извините, я хочу реализовать это в сценарии оболочки. Устройство получает свой IP от DHCP.   -  person ChristianR    schedule 02.07.2013
comment
Предполагая, что в вашей подсети много устройств, как распознать нужное? Отвечает ли он на определенные команды? Отправлять пакеты данных? ....   -  person Floris    schedule 02.07.2013
comment
В ответ на запрос m-search указанной ссылки я получаю тег ST с определенным форматом ST:urn:schemas-....   -  person ChristianR    schedule 02.07.2013
comment
Ваша ссылка на программу С#, использующую связь через сокет. Я не думаю, что вы можете разумно ожидать того же, что и от сценария оболочки. Вам нужно портировать программу на linux (возможно, вы можете использовать Mono, чтобы запустить ее без изменений; я не уверен).   -  person davmac    schedule 02.07.2013
comment
@davmac прав, но см. это руководство, чтобы узнать, как выполнять базовое программирование сокетов из оболочка. Не для слабонервных, но можно. Обратите внимание, что в примере показаны как сервер, так и клиент — вам нужна только клиентская часть связи, предполагая, что uPnP-устройство является сервером. Поскольку у меня нет ничего похожего на вашу настройку, было бы очень сложно показать вам, как это сделать. Однако, если вы будете следовать руководству и почти доберетесь до цели, опубликуйте свои результаты, и мы постараемся помочь в отладке.   -  person Floris    schedule 02.07.2013


Ответы (1)


В зависимости от того, как вы определите правильное устройство, вы можете взглянуть на gssdp-discover в пакете gupnp-tools (который является частью проект ГУПнП). Если это не то, что вам нужно, но вы готовы немного написать код, взгляните на исходный код: gssdp-discover — это всего ~100 строк C, поэтому вы сможете сделать то, что хотите, в нескольких десятках строк. питон...

Пример:

$ gssdp-discover -t uuid:c013f58f-3072-4c3b-9df8-4f869c03edf2 -n 3
Using network interface wlan0
Scanning for resources matching uuid:c013f58f-3072-4c3b-9df8-4f869c03edf2
resource available
  USN:      uuid:c013f58f-3072-4c3b-9df8-4f869c03edf2
  Location: http://10.10.15.61:49152/description.xml
$ 
person Jussi Kukkonen    schedule 02.07.2013