-
Наверняка такой вопрос уже был, но на нашел здесь простого решения.
Вопрос вот в чём - при использовании Firebird как проверить наличие самого SQL-сервера на удаленной машине, не подключаясь к ней при этом ?
Наверное нужно послать какую-то последовательность на порт 3050 и как-то трактовать ответ - но вот какую и как ?
-
послать не подключаясь можно только мыслепередачей.
только боюсь и в этом случае все равно подключаться придется.
-
> не подключаясь к ней при этом
противоречит
> послать какую-то последовательность на порт 3050 и
> как-то трактовать ответ
-
> Вопрос вот в чём - при использовании Firebird как проверить
> наличие самого SQL-сервера на удаленной машине, не подключаясь
> к ней при этом ?
Спросить у админа.
А если серьезно, то у мну крутиться три сервера FB2.1 Stable, снапшот FB2.5 и еще вражеский InterBase2009 для изучения. И все на разных портах, и ни один при этом на стандартном 3050.
-
> Сергей М. © (22.06.09 10:51) [2]
> противоречит
> > послать какую-то последовательность на порт 3050 и
> > как-то трактовать ответ
Нисколечки.
А если так - не подключаясь к ней стандартными компонентами, а именно:
IBDatabase.Open();
Иди же посылание любой последовательности в порт обязательно приводит к подключению ? Даже телнетом ?
-
ты сам-то как думаешь?
что телнет телепатическим каналом пользуется?
-
> Нисколечки
Оч даже "сколечки".
Подключение есть ничто иное как акт инф.обмена.
Акт инф.обмена есть ничто иное как последовательность действий "отправка запроса - прием ответа на запрос"
-
> Сергей М. © (22.06.09 11:08) [6]
> Акт инф.обмена есть ничто иное как последовательность действий "отправка запроса - прием ответа на запрос"
Так меня интересует именно этот акт обмена :)
Только не тот акт в котором нужно указывать, что нужно подключиться к базе данных, лежащей по определённому пути - а тот акт, который бы свидетельствовал о самом наличии на указанном хосте нужного нам SQL-сервера Firebird...
-
еще одна сказка про белого бычка.
постов на сотню
-
> PEAKTOP © (22.06.09 10:59) [3]
> А если серьезно, то у мну крутиться три сервера FB2.1 Stable, снапшот FB2.5 и еще вражеский InterBase2009 для изучения. И все на разных портах, и ни один при этом на стандартном 3050.
Ведь сами признали что порт 3050 = стандартный.
При таких познаниях, да еще от учасника Firebird Foundation наверняка можно ожидать и более содержательный ответ :)
-
try
idTCPClient1.Open;
except
ShowMessage('упс....')
end;
try
IBDatabase.Open();
except
ShowMessage('тоже упс...')
end;
Вопрос: зачем тебе первый "упс" ?
-
> меня интересует именно этот акт обмена
> который бы свидетельствовал о самом наличии на указанном
> хосте нужного нам SQL-сервера Firebird
Этим как раз и занимается IBDatabase.Open.
Какой еще велосипед ты собрался изобретать - не понятно..
-
> Сергей М. © (22.06.09 11:57) [11]
> Этим как раз и занимается IBDatabase.Open.
> Какой еще велосипед ты собрался изобретать - не понятно.
Да не нужно мне открывать базу данных, понимаете.
И логиниться не нужно и данных оттудова не нужно накаких получать, этим если и будет заниматься - то совсем другое приложение.
Единственное что нужно, так это выяснить - отвечает ли по порту 3050 firebird нужной нам версии или вообще хоть какой-нибудь - или не отвечает.
Уточню вопрос: вопрос звучит - как, а не зачем :)
-
IBServerProperties знает все ответы на все твои вопросы
-
> Сергей М. © (22.06.09 11:57) [11]
Вот такая аналогия родилась...
Припустим нам нужно обойти кваритиры в подъезде по определённому списку и узнать, есть ли кто дома.
Для этого нам не нужно заходить в каждую квартиру, представлятся и т.п.
Достаточно будет позвонить/постучать в дверь, и если спросят "Кто там" пойти дальше...
PS: Если вдруг там залает собака - значит это другой SQL-сервер :)
-
а что, ибдатабэйс после коннекта обязательно обязан вытянуть на клиента все данные всех баз которые на нем есть?
-
> b/@. © (22.06.09 12:09) [12]
Ну возьми сниффер да посмотри как там выглядит рукопожатие
-
> b/@. © (22.06.09 12:20) [14]
То что в ответ на твой стук в дверь соседа за дверью тишина, еще не говорит от том что дома нет никто
-
> Сергей М. © (22.06.09 12:25) [16]
> Ну возьми сниффер да посмотри как там выглядит рукопожатие
Спасибо.
Такая идея была изначально - просто надеялся, что может кто-либо это уже делал до нас.
Вот только взять могу только издому. На работе запрещена скачка *.exe и архивов :(
-
> можно ожидать и более содержательный ответ
Локально - нет проблем. Ни для Windows, ни для LINUX, ни для FreeBSD. В том числе и полный список серверов, работающих на разных портах. Способов - уйма, начиная от скана служб (демонов), скана семафоров, и заканчивая тупым поиском по жесткому диску.
А теперь представьте себе удаленную машину, на которой "где-то висит сетевая служба (демон)". У меня, как у админа по совместительству моих клиентов сразу ряд вопросов:
1) Какой порт она слушает ? - какой захотелось левой пятке админа при установке Firebird.
А как узнать ? - ну, можно перебирать сниффером порты, например.
Ладно, уговорили, допустим слушает стандартный 3050.
2) А прописаны ли в Firewall права для этой службы (демона) принимать подключения от сетевого адреса, не входящего в контрольный список ? Сниффер из п. №1 идет лесом. Даже если Вы знаете полный путь к БД, все равно при подключении вы идете туда же.
Значит, сервера для Вас нет.
3) А не является ли Firebird на этой машине всего-лишь проксирующим демоном для редиректа на настоящий сервер ? Конечно, мы можем узнать об этом из строки подключения к БД... хотя стоп. Какая строка подключения к БД, ведь мы пока лишь проверяем наличие сервера. Который может быть всего лишь проксей для балансировки нагрузки на настоящий сервер.
Это мы еще до варианта самостоятельной сборки Firebird из сырцов не дошли. :)