Я пытаюсь узнать IP-адрес устройства UPnP, подключенного к моей сети. В Windows я могу получить эту информацию, обратившись к следующему вопросу в StackOverflow:
Как вы хотите реализовать решение (скрипт оболочки, C++, Java)?
- persontrojanfoe  schedule02.07.2013
comment
Что вы знаете об этом устройстве? Вы можете получить доступ к маршрутизатору? Установлен ли IP-адрес динамически (с использованием DHCP) или фиксирован? Ожидаете ли вы, что будете находиться в одной подсети с вашим Linux-компьютером?
- personFloris  schedule02.07.2013
comment
Извините, я хочу реализовать это в сценарии оболочки. Устройство получает свой IP от DHCP.
- personChristianR  schedule02.07.2013
comment
Предполагая, что в вашей подсети много устройств, как распознать нужное? Отвечает ли он на определенные команды? Отправлять пакеты данных? ....
- personFloris  schedule02.07.2013
comment
В ответ на запрос m-search указанной ссылки я получаю тег ST с определенным форматом ST:urn:schemas-....
- personChristianR  schedule02.07.2013
comment
Ваша ссылка на программу С#, использующую связь через сокет. Я не думаю, что вы можете разумно ожидать того же, что и от сценария оболочки. Вам нужно портировать программу на linux (возможно, вы можете использовать Mono, чтобы запустить ее без изменений; я не уверен).
- persondavmac  schedule02.07.2013
comment
@davmac прав, но см. это руководство, чтобы узнать, как выполнять базовое программирование сокетов из оболочка. Не для слабонервных, но можно. Обратите внимание, что в примере показаны как сервер, так и клиент — вам нужна только клиентская часть связи, предполагая, что uPnP-устройство является сервером. Поскольку у меня нет ничего похожего на вашу настройку, было бы очень сложно показать вам, как это сделать. Однако, если вы будете следовать руководству и почти доберетесь до цели, опубликуйте свои результаты, и мы постараемся помочь в отладке.
- personFloris  schedule02.07.2013
В зависимости от того, как вы определите правильное устройство, вы можете взглянуть на 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
$