powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать IP адрес или имя текущего сервера
19 сообщений из 44, страница 2 из 2
Как узнать IP адрес или имя текущего сервера
    #38858686
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

господа. если Оракл выдает аналогичную информацию по одной штуке, не могли бы разработчики ФБ забить болт на "множество" внешних условий, и действительно выдавать имя сервера и его ip через get_context, например?

Скажем, если клиент подключился к vasya:c:\db.fdb, а сервер говорит, что его имя masha - это ведь не проблемы сервера, так? Другое дело - вопрос безопасности, но по указанной ссылке про Оракл я не вижу, чтобы он страдал какой-то паранойей.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858730
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

имя хоста - запросто. Теоретически, можно еще и IP-адрес, использованный сервером для текущего коннекта.

ЗЫ. CURRENT_PASSWORD добавить не надо? :-) Как они к выясненному серверному хосту без пароля подключаться собрались?
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858764
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

Совсем не обязательно подключатся. Возможно повторюсь, но: есть N автономных хостов, на которых крутятся разные приложения. В "час Ч" что-то "идет не так" - хост формирует информацию об ошибке и через ES пишет ее в базу логов на другом, известном ему хосте. Каким макаром сервер может записать свой же IP в эту базу логов - неясно. Информации о пути к БД/алиасу явно недостаточно, чтобы понять со стороны хоста логов, откуда прилетела ошибка. Примерно так.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858774
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterесть N автономных хостов, на которых крутятся разные приложения. В "час Ч" что-то "идет не так" - хост формирует информацию об ошибке и через ES пишет ее в базу логов на другом, известном ему хосте. Каким макаром сервер может записать свой же IP в эту базу логов - неясно.
в базе логов на таблице должен быть триггер, дергающий GET_CONTEXT('USER_SESSION', 'REMOTE_ADDRESS') и берущий оттуда IP-адрес пишущего ошибку сервера
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858785
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrDarkMasterКаким макаром сервер может записать свой же IP в эту базу логов - неясно.
в базе логов на таблице должен быть триггер, дергающий GET_CONTEXT('USER_SESSION', 'REMOTE_ADDRESS') и берущий оттуда IP-адрес пишущего ошибку сервера

Это в 3.0? Учтем-с...

Но все-таки, почему сам ФБ не может сказать - "я сижу на ИП таком-то", или "имя хоста, где я сижу - такое-то"?
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858805
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterНо все-таки, почему сам ФБ не может сказать - "я сижу на ИП таком-то", или "имя хоста, где я сижу - такое-то"?
У одного сервера может быть произвольное число IP-адресов. Как в одной подсети, так и в нескольких.
Одному IP-адресу может соответствовать произвольное число DNS-имен.
У одного сервера может быть произвольное число DNS-имен. Как в одной зоне, так и в нескольких.
Одному DNS-имени может соответствовать произвольное число IP-адресов.
На одном хосте может быть установлено несколько инстансов СУБД.
В общем случае один инстанс СУБД может работать на нескольких хостах.
И даже в одном конкретном инстансе СУБД одного конкретного хоста может быть много разного.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858815
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но gethostname() в любом случае вернёт ровно одно имя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858818
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не факт, что нужное.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858825
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Не факт, что нужное.
Для идентификации достаточное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858835
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо gethostname() в любом случае вернёт ровно одно имя.

Поэтому вариант отдавать его в качестве имени хоста, а destination из заголовка IP пакета - как адрес сервера, наверное, то единственное решение, которое сможет обрадовать страждущих и будет хоть в какой-то мере правильным.

Если, конечно, считать правильным то решение, когда сервер говорит, что его адресс 1.2.3.4, когда в действительности такого адреса у него нет и никогда не было (привет сообщению ІР о NAT, DMZ и утверджению что все лгут :) ).
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858837
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlibek B.Не факт, что нужное.
Для идентификации достаточное.

У меня несколько десятков server.local есть, если что. И если кто-то скажет, что это более неправильно, чем требовать у сервера то, чего он не может знать по определению, то я такому человеку посоветую чего-нить почитать :)
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38858843
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterЭто в 3.0? Учтем-с...
это во всех версиях 2.х
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859113
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе набросал примерчик, как можно провернуть сие действо (на примере нескольких хостов, пишуших логи в отдельную БД):

На хостах "крутим" что-то вроде такого:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
execute block
as
declare variable DB varchar(512);
declare variable EB varchar(2048);
begin
   DB='xx.xx.xx.xx:/dbpath/logdatabase.fdb';  
   EB='EXECUTE BLOCK AS
       BEGIN
         -- тут мы ессно можем получить адрес из таблицы настроек или прописать его вручную 
         rdb$set_context(''USER_SESSION'',''REMOTE_ADDR'',''MY_HOST_ADDR_OR_NAME'');
         INSERT INTO LOGTABLE(LOGINFO) VALUES(''ERROR INFO'');
         -- или просто его опустить за ненадобностью 
         rdb$set_context(''USER_SESSION'',''REMOTE_ADDR'',NULL);
         INSERT INTO LOGTABLE(LOGINFO) VALUES(''ERROR INFO'');
       END';
   EXECUTE STATEMENT :EB
   ON EXTERNAL :DB
   AS USER 'SYSDBA' PASSWORD 'masterkey' 
   WITH AUTONOMOUS TRANSACTION; 
end


На целевом хосте (который есть аккумлятор логов), создаем табличку
Код: plsql
1.
LOGTABLE (ID INTEGER, LOGINFO VARCHAR,HOST VARCHAR);


на которую вешаем триггер:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER trigger logtable_bi for logtable
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_logtable_id,1);

  new.host=rdb$get_context('USER_SESSION','REMOTE_ADDR'); -- v1 - нам отдали информацию о хосте через переменную контекста

  if (new.host is null) then  -- v2 - нам ничего не передали - посмотрим сами в MON$ таблицах
     begin
       select mon$attachments.mon$remote_address
       from mon$attachments
       where mon$attachments.mon$attachment_id=current_connection
       into new.host;
     end
end



P.S. 2dimitr : я-то чего-то подумал что в тройке будет REMOTE_ADDR в SYSTEM namespace для переменных контекста, потому и переспрашивал.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859213
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster2dimitr : я-то чего-то подумал что в тройке будет REMOTE_ADDR в SYSTEM namespace для переменных контекста, потому и переспрашивал.
я про него и говорил, только почему-то написал про USER_SESSION :-( Имелся ввиду GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS'), конечно же.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859344
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь 2-й сценарий - более "грустный".

Есть по прежнему N автономных хостов, к которым коннектится 1 приложение, которое (в примиве) просто следит за жизнедеятельностью хостов (например что-то вычитывает из MON$ таблиц). Приложение "знает" о хостах. И соответственно формирует свои выходные данные (логи, записи в БД, и т.п.)...

Что мешает клиенту, который УЖЕ соединился, спросить у сервера "ты ху?", если он из тех же контекстных переменных может узнать кучу информации (которые он и так уже знает ;) для формирования сообщения в примерно таком виде:

Код: plsql
1.
 HOST||RDB$GET_CONTEXT('SYSTEM','HOST_NAME_OR_IP')||' '||....RDB$GET_CONTEXT(......).



Я ессно пониманию, что можно сообщение формировать на клиенте, проталкивать имя хоста на сервер в контекстную переменную, хранить имя хоста в БД хоста и спрашивать его оттуда, но может лучше какой-то унифицированный метод?

Пусть там будет не имя хоста/ИП - пусть будет что-то другое - да хоть GUID,выдаваемый при создании и б/р (что лучше, т.к. на одном хосте может висеть несколько инстансов сервера, разнесенных по портам).
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859347
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я выше уже написал - добавить в системный контекст имя хоста сервера - нет проблем, пишите трекеру. С айпишником сложнее, но тоже выполнимо.
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859355
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

Ну дык CORE-4041 ...

P.S. Это только у меня трекер "503 - Service Temporarily Unavailable" отдает?
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859375
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterЭто только у меня трекер "503 - Service Temporarily Unavailable" отдает?
не только у тебя
...
Рейтинг: 0 / 0
Как узнать IP адрес или имя текущего сервера
    #38859561
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrDarkMasterЭто только у меня трекер "503 - Service Temporarily Unavailable" отдает?
не только у тебя
В данный момент робит.
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать IP адрес или имя текущего сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]