Мой маршрутизатор WRT54G сообщает мне об этом через функцию доступа к локальному маршрутизатору (интерфейс администрирования http (s)), и я предполагаю, что нечто подобное можно было бы сделать со многими другими устройствами. В этом случае страница ввода дает октеты IPv4-адреса в четырех строках, содержащих эту фразу:
class = num maxLength = 3 size = 3 value = ' i ' name = 'wan_ipaddr_ N ' id = 'wan_ipaddr_ N '
Где i - значение октета, а N - номер октета. Этот кусок собачки извлекает и анализирует его, любезно предоставленный Cygwin:
#! /usr/bin/env perl
use strict;
use warnings 'all';
my( $account, $password ) = @ARGV;
open QUERY,
"curl --sslv3 --user '$account:$password' https://Linksys/ --silent |"
or die "Failed to connect to router";
my @ipaddr = ('x','x','x','x');
while( <QUERY> ) {
$ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/;
}
close QUERY;
print join('.', @ipaddr);
Нет гарантии, что это будет работать со всеми версиями прошивки маршрутизатора.
Если ваш маршрутизатор настроен на использование http для этого интерфейса, удалите опцию --sslv3 curl, и вы можете использовать десятичную запись с точками для адресации маршрутизатора. Чтобы использовать https с указанными выше параметрами curl, я также сделал это:
Использовал браузер для получения самозаверяющего сертификата маршрутизатора (сохраненного как Linksys.crt).
Добавил его в свой CA-пакет:
openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
- Добавлен 'Linksys' в мой файл hosts (C: \ Windows \ System32 \ Drivers \ etc \ HOSTS на моем компьютере с Win8) в качестве псевдонима для адреса маршрутизатора. Если вместо этого псевдонима дается десятичная запись с точками, а не этот псевдоним, соединение отклоняется из-за несоответствия имени субъекта сертификата.
В качестве альтернативы, вы можете просто использовать опцию --insecure, чтобы обойти проверку сертификата, что, вероятно, имеет больше смысла в данных обстоятельствах.