Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как проверить наличие SQL-сервера Firebird ? [D7, IB6.x]


Страницы:   1 2

b/@. ©   (2009-06-22 10:23:00) 

Наверняка такой вопрос уже был, но на нашел здесь простого решения.

Вопрос вот в чём - при использовании Firebird как проверить наличие самого SQL-сервера на удаленной машине, не подключаясь к ней при этом ?

Наверное нужно послать какую-то последовательность на порт 3050 и как-то трактовать ответ - но вот какую и как ?


makz   (2009-06-24 17:08:00) [1]


> Это своеобразный агент для автонастройки клиента. Сам клиент
> тяжелый, да и ждать пока истечет таймаут у IBDatabase.Open();
>  тоже не хочеться.

Незафигом ждать истечения таймаута, вместо того чтоб послать запрос на следующий адрес.


Сергей М.   (2009-06-22 14:25:00) [2]


> от торомозов резолва


Ну это отдельная песня, никак не связанная с изнач.вопросом


Медвежонок Пятачок   (2009-06-22 14:02:00) [3]

от торомозов резолва, если виноват он, это не поможет.


Сергей М.   (2009-06-22 13:02:00) [4]


> b/@. ©   (22.06.09 12:51) [22]


Тогда вполне достаточной будет попытка коннекта к 3050-му порту без акта прикл.обмена.

Если на этом порту хоть кто-то слушает, т.е попытка коннекта по трансп.протоколу была успешной, следом можно пытаться выполнить IBDatabase.Open, т.е. попытку коннекта по прикл.протоколу.

Если там слушает кто угодно, но не FB-сервер, IBDatabase.Open тут же возбудит соотв.исключение.


Медвежонок Пятачок   (2009-06-22 12:58:00) [5]

то есть твоя мудрая проверка самописным классом даст точно такой же таймаут.


Медвежонок Пятачок   (2009-06-22 12:56:00) [6]

таймаут-то большой не от того, что сервер долго думает, а от того, что в строке подключения имя хоста а не адрес, а хост выключен.


b/@.   (2009-06-22 12:51:00) [7]


> PEAKTOP ©   (22.06.09 12:36) [19]

У нас нет таких сложных случаев.
Если Firebird-сервер работает, то он работает на порту по-умолчанию, без файрволлов, проксей и т.п.


> Сергей М. ©   (22.06.09 12:39) [20]

Это своеобразный агент для автонастройки клиента. Сам клиент тяжелый, да и ждать пока истечет таймаут у IBDatabase.Open();тоже не хочеться.
Но серверов может быть несколько, и т.к. клиент работает только на чтение из БД, то к какому из серверов подключаться без разницы. Нужно определить первый в списке из ответивших, и уже для него запускать клиента.


Медвежонок Пятачок   (2009-06-22 12:48:00) [8]

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

а других путей конечно же нет.

ну или он хочет собрать статистику доступности в сети серверов за год.
и продать ее исследователям.


Сергей М.   (2009-06-22 12:39:00) [9]

И все-таки вопрос : нафига стучать в дверь ?)

Ну ответил тебе сосед из-за двери "Кто там ?", и что ?

Ответить "Сто грамм", чтобы тебе открыли дверь, прямо сейчас ты не сможешь, тебе ж еще в ларек нужно сбегать за пузырьком - не с пустыми же руками в гости ходить)

А прибежав из ларька с пузырьком ты обнаружишь, что на тот же стук никакого "ктотама" из-за двери не слышно - соседа срочно приспичило уйти по своим делам)


PEAKTOP   (2009-06-22 12:36:00) [10]

> можно ожидать и более содержательный ответ

Локально - нет проблем. Ни для Windows, ни для LINUX, ни для FreeBSD. В том числе и полный список серверов, работающих на разных портах. Способов - уйма, начиная от скана служб (демонов), скана семафоров, и заканчивая тупым поиском по жесткому диску.

А теперь представьте себе удаленную машину, на которой "где-то висит сетевая служба (демон)". У меня, как у админа по совместительству моих клиентов сразу ряд вопросов:
1) Какой порт она слушает ?  - какой захотелось левой пятке админа при установке Firebird.
А как узнать ? - ну, можно перебирать сниффером порты, например.
Ладно, уговорили, допустим слушает стандартный 3050.

2) А прописаны ли в Firewall права для этой службы (демона) принимать подключения от сетевого адреса, не входящего в контрольный список ? Сниффер из п. №1 идет лесом. Даже если Вы знаете полный путь к БД, все равно при подключении вы идете туда же.
Значит, сервера для Вас нет.

3) А не является ли Firebird на этой машине всего-лишь проксирующим демоном для редиректа на настоящий сервер ? Конечно, мы можем узнать об этом из строки подключения к БД... хотя стоп. Какая строка подключения к БД, ведь мы пока лишь проверяем наличие сервера. Который может быть всего лишь проксей для балансировки нагрузки на настоящий сервер.

Это мы еще до варианта самостоятельной сборки Firebird из сырцов не дошли. :)


b/@.   (2009-06-22 12:29:00) [11]


> Сергей М. ©   (22.06.09 12:25) [16]
> Ну возьми сниффер да посмотри как там выглядит рукопожатие


Спасибо.

Такая идея была изначально - просто надеялся, что может кто-либо это уже делал до нас.
Вот только взять могу только издому. На работе запрещена скачка *.exe и архивов :(


Сергей М.   (2009-06-22 12:27:00) [12]


> b/@. ©   (22.06.09 12:20) [14]


То что в ответ на твой стук в дверь соседа за дверью тишина, еще не говорит от том что дома нет никто


Медвежонок Пятачок   (2009-06-22 12:25:00) [13]

а что, ибдатабэйс после коннекта обязательно обязан вытянуть на клиента все данные всех баз которые на нем есть?


Сергей М.   (2009-06-22 12:25:00) [14]


> b/@. ©   (22.06.09 12:09) [12]


Ну возьми сниффер да посмотри как там выглядит рукопожатие


b/@.   (2009-06-22 12:20:00) [15]


> Сергей М. ©   (22.06.09 11:57) [11]

Вот такая аналогия родилась...

Припустим нам нужно обойти кваритиры в подъезде по определённому списку и узнать, есть ли кто дома.

Для этого нам не нужно заходить в каждую квартиру, представлятся и т.п.
Достаточно будет позвонить/постучать в дверь, и если спросят "Кто там" пойти дальше...

PS: Если вдруг там залает собака - значит это другой SQL-сервер :)


Медвежонок Пятачок   (2009-06-22 12:12:00) [16]

IBServerProperties знает все ответы на все твои вопросы


b/@.   (2009-06-22 12:09:00) [17]


> Сергей М. ©   (22.06.09 11:57) [11]
> Этим как раз и занимается IBDatabase.Open.
> Какой еще велосипед ты собрался изобретать - не понятно.

Да не нужно мне открывать базу данных, понимаете.
И логиниться не нужно и данных оттудова не нужно накаких получать, этим если и будет заниматься - то совсем другое приложение.

Единственное что нужно, так это выяснить - отвечает ли по порту 3050 firebird нужной нам версии или вообще хоть какой-нибудь - или не отвечает.

Уточню вопрос: вопрос звучит - как, а не зачем:)


Сергей М.   (2009-06-22 11:57:00) [18]


> меня интересует именно этот акт обмена


> который бы свидетельствовал о самом наличии на указанном
> хосте нужного нам SQL-сервера Firebird


Этим как раз и занимается IBDatabase.Open.
Какой еще велосипед ты собрался изобретать - не понятно..


Медвежонок Пятачок   (2009-06-22 11:33:00) [19]

try
idTCPClient1.Open;
except
ShowMessage('упс....')
end;

try
IBDatabase.Open();
except
ShowMessage('тоже упс...')
end;

Вопрос: зачем тебе первый "упс" ?


b/@.   (2009-06-22 11:20:00) [20]


> PEAKTOP ©   (22.06.09 10:59) [3]
> А если серьезно, то у мну крутиться три сервера FB2.1 Stable, снапшот FB2.5 и еще вражеский InterBase2009 для изучения.  И все на разных портах, и ни один при этом на стандартном 3050.

Ведь сами признали что порт 3050 = стандартный.
При таких познаниях, да еще от учасника Firebird Foundation наверняка можно ожидать и более содержательный ответ :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо