Получение IP-адреса входящего HTTP-запроса

1. frkbvfnjh 787 13.11.17 11:13 Сейчас в теме
Доброго времени суток. Сделал свой HTTP-сервис на 1С. Вопрос (возможно "тупой"): можно ли как-то получить IP-адрес устройства с которого был сделан запрос? Все запросы выполняются в локальной сети. Заранее спасибо.
masterprint; cwant; adhocprog; +3 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. 🅵🅾️🆇 523 13.11.17 11:59 Сейчас в теме
(1) Никогда не поднимал свои http сервисы, тем более средствами 1с, мб сейчас попробую.
На вскидку предлагаю посмотреть в заголовки запроса (HTTPСервисЗапрос.Заголовки)
12. vvalexeev 09.11.20 20:18 Сейчас в теме
А на HTTP сервере
# если нет заголовка X-Forwarded-For (без proxy), то создать заголовок Ext-Remote-Addr
# со значением %{REMOTE_ADDR}, т.е. IP клиента
Options FollowSymLinks
RewriteEngine On
RewriteRule .* - [E=RA]
RewriteCond %{HTTP:X-Forwarded-For} =""
RewriteRule .* - [E=RA:%{REMOTE_ADDR}]
#RequestHeader set Ext-Remote-Addr: "%{RA}e" env=RA
#RequestHeader set Med-Remote-Addr: "%{RA}e" env=RA

# если есть заголовок X-Forwarded-For, то создать заголовок Ext-Remote-Addr
# со значением 1-го IP адреса, т.е. самого первого клиента в цепочке proxy
#RewriteRule .* - [E=RAb]
RewriteCond %{HTTP:X-Forwarded-For} !=""
RewriteCond %{HTTP:X-Forwarded-For} "(([0-9]{1,3}\.){3}[0-9]{1,3})"
RewriteRule .* - [E=RA:%1]
#RequestHeader set Ext-Remote-Addr: "%{RAb}e" env=RAc
#RequestHeader set Med-Remote-Addr1: "%{RAb}e" env=RA
RequestHeader set Med-Remote-Addr: "%{RA}e"

А в 1с из заголовков брать значение Ext-Remote-Addr
2. Aitbay 13.11.17 11:47 Сейчас в теме
попробовал свой сервис погонять ничего не нашел похожего на ip адрес с которого идет отправка думаю что нет.
в журнале регистрации тоже пусто только имя пользователя от которого подключился.

правда можно попробовать через ПолучитьСоединенияИнформационнойБазы() но там необходимо делать фильтр по пользователю
5. 🅵🅾️🆇 523 13.11.17 13:00 Сейчас в теме
(2)
правда можно попробовать через ПолучитьСоединенияИнформационнойБазы()

Не, там ничего интересного. Считай тоже самое, что и ПолучитьТекущийСеансИнформационнойБазы(), только в последнем отбор не нужен.

Довольно сложно будет получить ip адрес.
Если он необходим может пусть лучше клиент сам его сообщает одним из параметров?
adhocprog; frkbvfnjh; +2 Ответить
6. Aitbay 13.11.17 15:24 Сейчас в теме
(5)
Не, там ничего интересного. Считай тоже самое, что и ПолучитьТекущийСеансИнформационнойБазы(), только в последнем отбор не нужен


Только если какой-то костыль городить



там есть имя компьютера: пингом отправить в файл ping Имя_компа > комп.txt далее парсить получившийся файлик
7. 🅵🅾️🆇 523 13.11.17 15:30 Сейчас в теме
(6) Это все хорошо когда http get приходит с соседней машины, по wins её найти - полбеды. Но http сервис, наверное, поднимается не для тех кто сидит под бочком, а для тех, кто как смерть кощея: за 100500 натами, без дмз, с фаерволами и вот этим всем :3
Алсо, если не изменяет память, по дефолту на винде включен фаервол, который не пускает пинг.
4. comptr 31 13.11.17 12:18 Сейчас в теме
Скорее всего напрямую из 1С такую информацию не получить, так как запрос 1С получает от веб-сервера. Только если какой-то костыль городить, чтобы веб-сервер где-то сохранял инфу по подключившимся, и 1С её потом разбирала (если это вообще возможно).
8. frkbvfnjh 787 13.11.17 15:55 Сейчас в теме
Всем спасибо! Получить видимо не получится. Попросил передавать IP в Get-запросе, отдельным параметром.
adhocprog; +1 Ответить
9. anton.fly7 173 18.10.18 17:42 Сейчас в теме
получилось? очень надо блин ((
10. vic777tor 06.11.18 12:45 Сейчас в теме
Решал подобную задачу.
Похоже, что на стороне сервера, где выполняется обработка HTTP запроса получить айпишник, с которого этот запрос пришёл никак не получится.
Предлагают лезть в журнал регистрации IIS и там пытаться парсить айпишник.
Но от такое решение заведомо кривое, на мой взгляд.
Я не нашёл ничего лучшего, чем получать IP на клиенте и передавать его в параметрах HTTP запроса.
Но здесь тоже не всё гладко.
Не говоря уже о том, что настройки, которые выдаёт IPCONFIG из 1С также не получишь.
А главное, эти настройки выдают настройки локальных сетевых интерфейсов, а учитывая что в большинстве случаев для доступа к интернет используется роутер, внешний IP получить таким образом не удастся.
В итоге, решено было для получения внешнего IP использовать API сторонних сервисов.
Нашёл только один такой сервис
Среди сервисов выбрал "Провайдер-IP API".
Привожу код реализации:
Функция ПолучитьПараметрыСоединения()

	Попытка
		
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("html");
		HTTPЗапрос = Новый HTTPЗапрос("api.2ip.ua/provider.json?ip=");
		HTTPСервис = Новый HTTPСоединение("api.2ip.ua",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
		HTTPСервис.Получить(HTTPЗапрос, ИмяВременногоФайла);
		Файл = Новый Файл(ИмяВременногоФайла);
		Если Файл.Существует() Тогда
			
			ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла);
			ТекстСтраницы = ЧтениеТекста.Прочитать();
			ЧтениеТекста.Закрыть();
			УдалитьФайлы(ИмяВременногоФайла);
			ИсходныйТекст = ТекстСтраницы;
			ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "{", "");
			ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "}", "");
			ИсходныйТекст = СтрЗаменить(ИсходныйТекст, """", "");
			СписокПараметров = СтрРазделить(ИсходныйТекст, ",");
			СоответствиеПараметров = Новый Соответствие;
			Для каждого КлючИЗначение Из СписокПараметров Цикл
				
				ТекПараметр = СтрРазделить(СокрЛП(КлючИЗначение.Значение), ":");
				Если ТекПараметр.Количество() = 2 Тогда
					
					СоответствиеПараметров.Вставить(СокрЛП(ТекПараметр[0].Значение), СокрЛП(ТекПараметр[1].Значение));	
					
				КонецЕсли; 
				
			КонецЦикла;
			
			Если СоответствиеПараметров.Получить("ip") <> Неопределено Тогда
				
				СоответствиеПараметров.Вставить("connection_string", ТекстСтраницы);
				Возврат СоответствиеПараметров;
				
			КонецЕсли; 
			
		КонецЕсли; 
	Исключение
		
	КонецПопытки;
		

КонецФункции // ПолучитьПараметрыСоединения()

Показать
11. maxopik2 69 29.03.19 09:42 Сейчас в теме
(10)
api.2ip.ua

Может по такому адресу будет проще?
https://www.trackip.net/ip?json
simuljakr; vic777tor; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот