Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Неверно определяется IP адрес подключения  [new]
AlexShiryaev
Member

Откуда:
Сообщений: 66
2) Начиная с Cache 2010.1 в имя пользователя лицензионной единицы принудительно дописывается IP-адрес

Добрый день!

А есть ли описание механизма определения IP-адреса клиента?
Столкнулись с проблемой, что для некоторых компьютеров (клиентов) Caché неправильно определяет IP. Вместо реального подставляется 127.0.0.1.
Не смогли определить от чего это зависит...
Может нужно какие-то порты открыть? Или еще что-то предпринять?
w $ZV
Cache for Windows (x86-64) 2010.2.7 (Build 1004_0_11142U) Wed Dec 21 2011 15:29:56 EST
Модератор: выделил в отдельную тему
2 сен 15, 14:36    [18100071]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
vassil
Member

Откуда: Хабаровск
Сообщений: 91
AlexShiryaev,

Если используете CSP или ZEN, то можно %request.CgiEnvs("REMOTE_ADDR")
2 сен 15, 15:24    [18100311]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2537
AlexShiryaev,

Точно сказать думаю смогут только в InterSystems
а вообще можно посмотреть
%request.GetCgiEnv("REMOTE_ADDR")
%request.GetCgiEnv("HTTP_X_FORWARDED_FOR") - обычно есть в случае когда запросы проксируются
по идее это все должно приходить от веб-сервера
дальше еще зависит от того какой вебсервер
2 сен 15, 15:31    [18100353]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
AlexShiryaev
Member

Откуда:
Сообщений: 66
Почему так может происходить?
select ClientIPAddressLicenseUserId,StartupClientIPAddress from %sys.processquery where id=79132
При соединении с "проблемной" машиной:
# ClientIPAddress LicenseUserId StartupClientIPAddress 
1 127.0.0.1 127.0.0.1 192.168.85.77
При соединении с "нормальной" машины:
# ClientIPAddress LicenseUserId StartupClientIPAddress 
1 192.168.85.67 192.168.85.67 192.168.85.67
Я подозреваю, что где-то какие-то сетевые настройки разные... Но не могу точно определить. Обе машины находятся в одной подсети, подключены к одному свитчу, одна ОС и т.д. Почему одну машину Caché определяет правильно, а другую неправильно?
3 сен 15, 13:01    [18103893]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2537
Можете еще добавить, как подключаютяс пользователи ?
Правильно я понимаю, что у вас Веб-приложение ? тогда напишите какой веб-сервер, и как он настроен
если это apache успользуется сервис CSPnsd или нет ?
какая OS на сервере
3 сен 15, 13:15    [18104005]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
AlexShiryaev
Member

Откуда:
Сообщений: 66
DAiMor,

Я точно не могу сказать. Приложение разработано не нами. Но вроде подключение прямое на порт 1972.
На сервере Server 2008 R2 Enterprise.
3 сен 15, 13:29    [18104129]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1512
Если прямое соединение на 1972/tcp, то скорее всего используется один из протоколов Caché: CacheDirect (VisM), CacheActiveX, или CacheODBC/JDBC. Это не CSP.

StartupClientIPAddress берётся из параметров tcp-соединения.

ClientIPAddress вычисляется протоколом Caché. Сервер опрашивает клиента, клиент возвращает IP сетевой карточки, по которой он связался с сервером. Таким образом, например, Caché узнаёт IP-адреса клиентов, которые входят через сервер терминалов.
Вот, например, подключился я к Caché, предварительно зайдя на сервер в режиме удалённого рабочего стола. Запрос возвращает результат:

ClientIPAddressLicenseUserIdStartupClientIPAddress
192.168.11.87192.168.11.87127.0.0.1

LicenseUserId вычисляется хитрее, при некоторых условиях к IP-адресу добавляется имя юзера. Например, alex@192.168.11.87.

Описанное поведение зависит от версии Caché, используемого протокола, и ещё ряда лицензионных факторов.

В вашем случае можно предположить, что соединение с Caché осуществляется через какое-то прокси, в результате чего протокол Caché получает от клиента неверный IP-адрес.
3 сен 15, 14:19    [18104451]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
AlexShiryaev
Member

Откуда:
Сообщений: 66
Alexey Maslov
ClientIPAddress вычисляется протоколом Caché. Сервер опрашивает клиента, клиент возвращает IP сетевой карточки, по которой он связался с сервером. Таким образом, например, Caché узнаёт IP-адреса клиентов, которые входят через сервер терминалов.
А можно об этом поподробнее? Какие протоколы используются, какие порты и т.д.?
PS. Как раз таки c RDP тоже проблемы...
3 сен 15, 16:30    [18105137]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1512
Несколько неточно написал в прошлом посте, сервер конечно не опрашивает клиента, клиент сам отправляет ему тот IP-адрес, который, по его мнению, его идентифицирует. Это снимает вопрос о дополнительных портах.
Подробностей о работе протоколов ISC (1972/tcp), увы, известно не много. Даже тот факт, что клиент сам сообщает свой IP, получен скорее экспериментально: иначе сложно объяснить, откуда Caché узнаёт адрес RDP-терминала.

Вот 2 примера из жизни:

  • Захожу в Caché (1972/tcp, CacheActiveX.dll, в Cache %Service_Bindings) через открытый и-нет, находясь за NAT-ом.

    Вижу:

    StartupClientIPAddress=98.72.41.62 ; внешний IP, получен из tcp-соединения
    ClientIPAddress=192.168.11.87 ; мой IP в LAN, мог быть получен только от клиента
    LicenseUserId=192.168.11.87

  • Захожу в Caché, используя аналогичные клиент и сервис, через VPN (не буду указывать её тип), войдя в неё через локальный proxy-сервер.

    Вижу:

    StartupClientIPAddress=10.81.202.4 ; внешний IP в VPN, получен из tcp-соединения.
    ClientIPAddress=127.0.0.1
    LicenseUserId=10.81.202.4@127.0.0.1 ; очевидно, ради борьбы с халявой :)

Подобные метаморфозы наверняка возможны и при входе через RDP: VPN разных типов + RDP + Caché могут дать интересные результаты на выходе. Для себя из всего это я сделал один вывод: на способ назначения StartupClientIPAddress и тем более ClientIPAddress полагаться ни в коем случае нельзя.
4 сен 15, 11:01    [18107290]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
Petr0vi4444
Member

Откуда: Владивосток
Сообщений: 137
Немного копал в эту сторону одно время.
Адрес действительно приходит с клиента в момент подключения к БД.
Принадлежность к RDP сессии, имя и адрес определяются через WTSQuerySessionInformation (WTSClientName и WTSClientAddress) в cconnect.dll.
Разницу между результатами вызовов на двух машинах можно попробовать отследить через rohitab API Monitor.
4 сен 15, 12:05    [18107700]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
AlexShiryaev
Member

Откуда:
Сообщений: 66
Petr0vi4444,

Проблема решилась. Решение оказалось до банальности простым. Во всем был виноват DrWeb. Причем почему-то Spider Mail.
Почему и что он "резал" пока не выяснил. Просто пока отключил этот компонент. Буду писать в службу поддержки DrWeb.
Спасибо.
4 сен 15, 13:38    [18108454]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1512
Он скорее всего встраивается в tcp-сеанс как локальное прокси, вот Caché-клиент и думает, что подключился к 127.0.0.1 (см. мой случай с клиентом VPN).

tcpview (ex-SysInternals) наглядно показывает такие вещи.
4 сен 15, 14:50    [18108948]     Ответить | Цитировать Сообщить модератору
 Re: Неверно определяется IP адрес подключения  [new]
kalin
Member

Откуда:
Сообщений: 243
В Linux системах легко определить IP подключенного клиента
Достаточно прописать следующий код
start()
    
ip,dev,io
    
io=$IO,ip=""
    
s $ze="error"
    
dev="netstat -ntp | grep "_$j_"|  awk ' $5 ~ /^[0-9]/ {print $5}' | cut -d: -f1"
    
dev:"RQ" 
    
else  q ""
    
dev ip dev
error
    
io
    
ip
Данный код не зависит от версии Cache и работает при любом подключении удаленного клиента к Cache сервер
17 май 16, 15:57    [19184632]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить