| 
    
        
     
     | 
    
    
  | 
Узнать внешний IP на веб-клиенте | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        constantinevio    
     21.01.16 
            ✎
    09:53 
 | 
         
        Доброго времени суток! 
 
        Пытаюсь заставить веб-клиент узнать внешний IP и сообщить его. По интернету ходят 2 способа это сделать: http://www.develplatform.com/2013/08/ip-1.html В первом случае не получается, т.к. web-клиент не работает с временными файлами, а во втором случае возникают проблемы передачи данных с сервера на клиент.. Идеальнее всего было бы заставить работать первый вариант, но не знаю, как заменить временные файлы.... ПЛИЗ ХЭЛП  | 
|||
| 
    1
    
        Cyberhawk    
     21.01.16 
            ✎
    10:00 
 | 
         
        Не той дорогой ты собрался доступ к базе ограничивать...     
         | 
|||
| 
    2
    
        arsik    
     гуру 
    21.01.16 
            ✎
    10:01 
 | 
         
        HTTPСоединение (HTTPConnection)
 
        Получить (Get) Синтаксис: Получить(<HTTPЗапрос>, <ИмяВыходногоФайла>) Параметры: <HTTPЗапрос> (обязательный) Тип: HTTPЗапрос. HTTP-запрос. <ИмяВыходногоФайла> (необязательный) Тип: Строка. Имя файла, в который помещаются данные полученного ресурса. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет. Возвращаемое значение: Тип: HTTPОтвет. Описание: Получает данные с HTTP-сервера, используя GET-запрос. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).  | 
|||
| 
    3
    
        arsik    
     гуру 
    21.01.16 
            ✎
    10:02 
 | 
         
        HTTPОтвет (HTTPResponse)
 
        ПолучитьТелоКакСтроку (GetBodyAsString) Синтаксис: ПолучитьТелоКакСтроку(<Кодировка>) Параметры: <Кодировка> (необязательный) Тип: КодировкаТекста; Строка. Указывает кодировку, в которой должно интерпретироваться тело ответа. Если не задан, то кодировка определяется из HTTP-заголовка Content-Type. Если сервер не указал кодировку в заголовке, то используется UTF8. Кодировка может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки. Возвращаемое значение: Тип: Строка; Неопределено. Неопределено - если при вызове методов ОтправитьДляОбработки или Получить был установлен параметр <ИмяВыходногоФайла>. Описание: Получает тело объекта как строку. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).  | 
|||
| 
    4
    
        constantinevio    
     21.01.16 
            ✎
    10:12 
 | 
         
        (1) Это не для ограничения доступа а для авто-определения параметров. (2) Я пытался так:
 
        HTTPОтвет = ЗапросHTTP.Получить("/"); однако ругается на неправильное имя файла (((  | 
|||
| 
    5
    
        arsik    
     гуру 
    21.01.16 
            ✎
    10:14 
 | 
         
        (4) Платформа какая?     
         | 
|||
| 
    6
    
        constantinevio    
     21.01.16 
            ✎
    10:15 
 | 
         
        (5) 8.3.6.2071     
         | 
|||
| 
    7
    
        Jump    
     21.01.16 
            ✎
    10:16 
 | 
         
        (1) Каким таким образом знание своего IP  адреса поможет ограничить доступ к базе?     
         | 
|||
| 
    8
    
        Jump    
     21.01.16 
            ✎
    10:21 
 | 
         
        (0) Первый способ не самый лучший.
 
        Нафига парсить страницу внешнего сервиса, если можно парсить страницу своего роутера? Или постучаться на роутер по телнету или ssh и распарсить вывод ipconfig. По поводу временных файлов - запусти внешнюю утилиту, например wget, чтобы скачала страницу в нужное место, а уж с диска читай и разбирай.  | 
|||
| 
    9
    
        asady    
     21.01.16 
            ✎
    10:22 
 | 
         
        (0) ИМХО самое простое написать скрипт на vbs/js который получит искомую страницу на клиенте и сохранит  в файл - 
 
        из 1С запустить приложение с этим скриптом и ловить файл  | 
|||
| 
    10
    
        arsik    
     гуру 
    21.01.16 
            ✎
    10:23 
 | 
         
        (8) Вебклиент не даст таких прав.     
         | 
|||
| 
    11
    
        constantinevio    
     21.01.16 
            ✎
    10:28 
 | 
         
        (8) ipconfig разве может показать корректный внешний IP во всех случаях?     
         | 
|||
| 
    12
    
        Cyberhawk    
     21.01.16 
            ✎
    10:28 
 | 
         
        (4) А где эти автоопределяемые параметры (внешний ИП-адрес, в частности) потом используются? Расскажи, интересно.
 
        (7) Если НЕ ВнешнийИП такой-то Тогда Борода КонецЕсли  | 
|||
| 
    13
    
        ЧеловекДуши    
     21.01.16 
            ✎
    10:32 
 | 
         
        (4) Это же Веб, ИП может быть любой. Зачем? :)     
         | 
|||
| 
    14
    
        constantinevio    
     21.01.16 
            ✎
    10:32 
 | 
         
        (12) Это сделано для внешних пользователей, чтобы определить к какому участку они пренадлежат, и в зависимости от участка заполнить форму.     
         | 
|||
| 
    15
    
        arsik    
     гуру 
    21.01.16 
            ✎
    11:16 
 | 
         
        (6) покажи весь код     
         | 
|||
| 
    16
    
        constantinevio    
     21.01.16 
            ✎
    11:43 
 | 
         
        (15) Я ничего не менял, т.е. процедура выглядит так: 
 
        // Создаем HTTP-подключение ЗапросHTTP = Новый HTTPСоединение("2ip.ru"); // Создаем временный файл для записи HTML-текста веб-страницы ВременныйФайл = ПолучитьИмяВременногоФайла(); // Выполняем запрос и записываем текст страницы во временный файл ЗапросHTTP.Получить("/", ВременныйФайл); // Считываем содержимое временного файла ТекДок = Новый ТекстовыйДокумент; ТекДок.Прочитать(ВременныйФайл); // Находим строку с IP-адресом Для Сч=1 По ТекДок.КоличествоСтрок() Цикл Стр=ТекДок.ПолучитьСтроку(Сч); Если Найти(ВРег(Стр),"CLIP.SETTEXT")>0 Тогда // Ищем значение IP-адреса в тексте СтрПодготовленная = СокрЛП(Стр); СимволНачало = Найти(СтрПодготовленная, "'"); СтрокаБуффер = Сред(СтрПодготовленная, СимволНачало+1, СтрДлина(СтрПодготовленная) ); СимволКонец = Найти(СтрокаБуффер, "'"); СтрокаIP = Сред(СтрокаБуффер, 0, СимволКонец-1); // Выводим результат Предупреждение("Ваш IP: " + СтрокаIP); КонецЕсли; КонецЦикла; // Удаляем временный файл УдалитьФайлы(ВременныйФайл); Все работало, пока не попробовали веб-клиент... Жалуется на отсутствие процедуры ПолучитьИмяВременногоФайла()  | 
|||
| 
    17
    
        Jump    
     21.01.16 
            ✎
    11:55 
 | 
         
        (11) Разумеется просто делать его надо на роутере.
 
        Какой адрес роутер получил от провайдера, тот и покажет.  | 
|||
| 
    18
    
        arsik    
     гуру 
    21.01.16 
            ✎
    11:56 
 | 
         
        (17) Проще использовать вот этот сервис
 
        http://myip.dnsomatic.com/  | 
|||
| 
    19
    
        Jump    
     21.01.16 
            ✎
    11:58 
 | 
         
        Так, если это веб клиент, то зачем на клиенте узнавать свой адрес? Может проще это сделать на сервере?
 
        Там то видно откуда пришел клиент.  | 
|||
| 
    20
    
        arsik    
     гуру 
    21.01.16 
            ✎
    12:00 
 | 
         
        (19) :) Покажи.     
         | 
|||
| 
    21
    
        constantinevio    
     21.01.16 
            ✎
    12:00 
 | 
         
        (19) КАК? :)     
         | 
|||
| 
    22
    
        arsik    
     гуру 
    21.01.16 
            ✎
    12:10 
 | 
         
        (16) Читать мануалы нужно. Вот правильный вариант
 
        хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпHTTPЗапрос); Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку());  | 
|||
| 
    23
    
        arsik    
     гуру 
    21.01.16 
            ✎
    12:11 
 | 
         
        Сори ошибка. Вот так правильно
 
        хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпЗапрос); Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку());  | 
|||
| 
    24
    
        arsik    
     гуру 
    21.01.16 
            ✎
    12:14 
 | 
         
        Вот так еще правильнее :)
 
        хттпСоединение = Новый HTTPСоединение("myip.dnsomatic.com"); хттпЗапрос = Новый HTTPЗапрос(); хттпОтвет = хттпСоединение.Получить(хттпЗапрос); Если хттпОтвет.КодСостояния = 200 Тогда Сообщить("Мой IP = "+хттпОтвет.ПолучитьТелоКакСтроку()); иначе Сообщить("Обломс. По причине HTTP ("+хттпОтвет.КодСостояния+")"); КонецЕсли;  | 
|||
| 
    25
    
        constantinevio    
     21.01.16 
            ✎
    13:12 
 | 
         
        (24) Спасибо огромное!!! Работает!))) Я уже надежду начал терять.     
         | 
|||
| 
    26
    
        Юрий Лазаренко    
     21.01.16 
            ✎
    13:15 
 | 
         
        (23) Отлично, тоже искал решение данного вопроса.     
         | 
|||
| 
    27
    
        constantinevio    
     21.01.16 
            ✎
    13:24 
 | 
         
        Что-то я рано порадовался((( HTTPСоединение на веб клиенте не работает((     
         | 
|||
| 
    28
    
        constantinevio    
     21.01.16 
            ✎
    13:58 
 | 
         
        ошибка отображения типов отсутствует отображение для типа HTTPСоединение     
         | 
|||
| 
    29
    
        arsik    
     гуру 
    21.01.16 
            ✎
    14:04 
 | 
         
        (27) Тогда только HTMLДокумент со скриптом. Как мне кажется. Или тонкий клиент.     
         | 
|||
| 
    30
    
        arsik    
     гуру 
    21.01.16 
            ✎
    14:08 
 | 
         
        (29) + Хотя тоже нет. HTML документа нет в веб клиенте     
         | 
|||
| 
    31
    
        mistеr    
     21.01.16 
            ✎
    14:14 
 | 
         
        (14) А посложнее способа не нашлось?     
         | 
|||
| 
    32
    
        ЧеловекДуши    
     21.01.16 
            ✎
    14:17 
 | 
         
        (14) Вот оно как Михалыч. Прежде чем загружать Отдел персонала, вы решили загрузиться сами :)
 
        В след. раз ваш филиал может работать через сотовые компании, там ИП будет вообще московский :) ... Задача бред... и по ИП не даст полной гарантии :)  | 
|||
| 
    33
    
        constantinevio    
     21.01.16 
            ✎
    14:46 
 | 
         
        (32) Мне и не нужна полная гарантия. Если удалось определить айпишник и идентифицировать контрагента - поля заполняются, и функция становится доступна. Если айпишник "московский", тогда функция - не доступна, поля не заполняются. 
 
        Есть что по делу предложить?  | 
|||
| 
    34
    
        constantinevio    
     21.01.16 
            ✎
    14:47 
 | 
         
        (30) Убиться веником     
         | 
|||
| 
    35
    
        constantinevio    
     21.01.16 
            ✎
    15:54 
 | 
         
        Заставил эту хрень работать следующим образом:
 
        ВинХТТП = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); ВинХТТП.Option(2,"Windows-1251"); ВинХТТП.Open("GET", "http://myip.dnsomatic.com.", 0); ВинХТТП.Send(); Ответ = ВинХТТП.ResponseText; Однако пришлось изменить настройки безопасности браузера. Работает только в IE, через раз.... FUCK 1c  | 
|||
| 
    36
    
        PR третий    
     21.01.16 
            ✎
    15:59 
 | 
         
        (35) Нечего на зеркало пенять, если рожа крива     
         | 
|||
| 
    37
    
        constantinevio    
     21.01.16 
            ✎
    21:36 
 | 
         
        (36) По делу можешь что-то сказать?     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |