Вы можете использовать Telnet , чтобы программно запросить у маршрутизатора IP WAN.
Часть Telnet
Часть Telnet может быть выполнена с использованием, например, этого минималистичного кода Telnet в качестве API для отправки команды Telnet вашему маршрутизатору и получения ответа маршрутизатора. В оставшейся части этого ответа предполагается, что вы так или иначе настроены на отправку команды Telnet и получение ответа в своем коде.
Ограничения подхода
Сразу скажу, что одним из недостатков запросов к маршрутизатору по сравнению с другими подходами является то, что код, который вы пишете, вероятно, будет довольно специфичным для вашей модели маршрутизатора. Тем не менее, это может быть полезным подходом, который не зависит от внешних серверов, и в любом случае вы можете захотеть получить доступ к вашему маршрутизатору из вашего собственного программного обеспечения для других целей, таких как его настройка и управление, что делает более целесообразным написание конкретного кода.
Пример команды и ответа маршрутизатора
Приведенный ниже пример подходит не для всех маршрутизаторов, но в принципе иллюстрирует подход. Вам нужно будет изменить данные в соответствии с вашими командами и ответами маршрутизатора.
Например, способ заставить ваш маршрутизатор показывать IP WAN может быть следующей командой Telnet:
connection list
Вывод может состоять из списка строк текста, по одной на соединение, с IP-адресом со смещением 39. Строка для соединения с WAN может быть идентифицирована по слову «Интернет» где-то в строке:
RESP: 3947 17.110.226. 13:443 146.200.253. 16:60642 [R..A] Internet 6 tcp 128
<------------------ 39 -------------><-- WAN IP -->
Вывод может дополнить каждый сегмент IP-адреса до трех символов пробелами, которые вам нужно будет удалить. (То есть в приведенном выше примере вам нужно будет превратить «146.200.253. 16» в «146.200.253.16».)
Экспериментируя или консультируясь со справочной документацией для вашего маршрутизатора, вы можете установить команду, которая будет использоваться для вашего конкретного маршрутизатора, и как интерпретировать ответ маршрутизатора.
Код для получения WAN IP
(Предполагается, что у вас есть метод sendRouterCommand
для части Telnet - см. Выше. )
Используя приведенный выше пример маршрутизатора, следующий код получает IP WAN:
private bool getWanIp(ref string wanIP)
{
string routerResponse = sendRouterCommand("connection list");
return (getWanIpFromRouterResponse(routerResponse, out wanIP));
}
private bool getWanIpFromRouterResponse(string routerResponse, out string ipResult)
{
ipResult = null;
string[] responseLines = routerResponse.Split(new char[] { '\n' });
// RESP: 3947 17.110.226. 13:443 146.200.253. 16:60642 [R..A] Internet 6 tcp 128
//<------------------ 39 -------------><--- 15 --->
const int offset = 39, length = 15;
foreach (string line in responseLines)
{
if (line.Length > (offset + length) && line.Contains("Internet"))
{
ipResult = line.Substring(39, 15).Replace(" ", "");
return true;
}
}
return false;
}