Два способа получить внешний IP-адрес из 1С:Предприятия

12 августа 2013

Внешний IP-адрес

Для решения некоторых задач может понадобиться получить информацию о внешнем IP-адресе клиентской машины, на которой запущено приложение 1С:Предприятие 8. 

Узнать этот адрес можно только с внешней стороны.

Сегодня в статье рассмотрим два способа получения внешнего IP-адреса средствами платформы.

Способ №1: Парсинг веб-страницы

На просторах интернета достаточно много веб-страниц, позволяющих узнать внешний IP-адрес Вашего компьютера:

  1. ip-whois.net
  2. ru.smart-ip.net
  3. ip-ping.ru
  4. 2ip.ru

Можно воспользоваться этими ресурсами и получать значение внешнего IP-адреса с этих страниц. Вот так, например, выглядит часть текста веб-страницы 2ip.ru, содержащая значение IP-адреса зашедшего на нее клиента:

Фрагмент кода разметки страницы 2ip.ru с отображаемым IP-адресом клиента

Для получения внешнего IP-адреса компьютера с помощью подобных страниц необходимо сначала получить текст веб-страницы, а затем найти необходимое значение (отпарсить). Вот так будет выглядеть код на языке платформы для выполнения подобной задачи:

// Создаем HTTP-подключение
ЗапросHTTP = Новый HTTPСоединение("2ip.ru");
// Создаем временный файл для записи HTML-текста веб-страницы
ВременныйФайл = ПолучитьИмяВременногоФайла();
// Выполняем запрос и записываем текст страницы во временный файл
ЗапросHTTP.Получить("/", ВременныйФайл);
// Считываем содержимое временного файла
ТекДок = Новый ТекстовыйДокумент;
ТекДок.Прочитать(ВременныйФайл);
// Находим строку с IP-адресом
Для Сч=1 По ТекДок.КоличествоСтрок() Цикл
 Стр=ТекДок.ПолучитьСтроку(Сч);
 Если Найти(ВРег(Стр),"CLIP.SETTEXT") > 0 Тогда
  // Ищем значение IP-адреса в тексте
  СтрПодготовленная = СокрЛП(Стр);
  СимволНачало = Найти(СтрПодготовленная, "'");
         СтрокаБуффер = Сред(СтрПодготовленная, 
                                           СимволНачало+1,
                                           СтрДлина(СтрПодготовленная)
                                    ); 
  СимволКонец = Найти(СтрокаБуффер, "'");
  СтрокаIP = Сред(СтрокаБуффер, 0, СимволКонец-1);
  // Выводим результат
  Предупреждение("Ваш IP: " + СтрокаIP);
 КонецЕсли;
КонецЦикла;
// Удаляем временный файл
УдалитьФайлы(ВременныйФайл);

Приведенный пример выведет внешний IP-адрес машины в качестве предупреждения.

Способ №2: Использование веб-сервиса

Есть другой способ - это использование стороннего веб-сервиса, обратившись к которому Вы получите внешний IP-адрес машины, с которой к нему обратились. В качестве примера рассмотрим получение внешнего IP с помощью веб-сервиса'DevelPlatform.NET'.

Процедура КнопкаВыполнитьНажатие(Кнопка)
     
    // Получаем WSDL-описание веб-сервиса
    ОписаниеСервиса = Новый WSОпределения("http://www.develplatform.ru/Special/net.asmx?wsdl");
    // Создаем прокси для дальнейшей работы с веб-сервисом
    Прокси = Новый WSПрокси(ОписаниеСервиса, "http://www.develplatform.ru/Special/", "Net", "NetSoap");
    // Получаем XDTO-объект описание метода "GetClientIP"   
    Тип = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.develplatform.ru/Special/").Получить("GetClientIP");
    // Создаем XDTO-объект метода веб-сервиса
    ФабрикаВебСервис = Прокси.ФабрикаXDTO.Создать(Тип);
    // Выполням метод "GetClientIP" веб-сервиса и помещаем результат и выводим результат
	Предупреждение("Ваш IP: " +      
                Прокси.GetClientIP(ФабрикаВебСервис).GetClientIPResult
               ); 
     
КонецПроцедуры

Каждое действие закомментировано, подробнее о работе с веб-сервисами в 1С:Предприятии 8 с помощью WS-ссылок Вы можете прочитать здесь.

Плюсы и минусы

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

Таким образом, главное преимущество использования веб-сервиса, по сравнению с парсингом страницы - это надежность.


comments powered by Disqus