Як перевірити наявність SQL-сервера Firebird?
Напевно таке питання вже був, але на знайшов тут простого рішення.
Питання ось у чому - при використанні Firebird як перевірити наявність самого SQL-сервера на віддаленій машині, не підключаючись до неї при цьому?
Напевно потрібно послати якусь послідовність на порт 3050 і якось трактувати відповідь - але ось яку і як?
послати не підключені можна тільки мислепередачей.
тільки боюся і в цьому випадку все одно підключатися доведеться.
»Не підключаючись до неї при цьому
> Послати якусь послідовність на порт 3050 і
> Якось трактувати відповідь
> Питання ось у чому - при використанні Firebird як перевірити
> Наявність самого SQL-сервера на віддаленій машині, не підключаючись
> До неї при цьому?
Запитати у адміністратора.
А якщо так - чи не підключаючись до неї стандартними компонентами, а саме:
IBDatabase.Open ();
Іди ж надсилання будь-якій послідовності в порт обов'язково призводить до підключення. Навіть телнетом?
ти сам-то як думаєш?
що телнет телепатичним каналом користується?
Оч навіть "сколечко".
Підключення є ніщо інше як акт інф.обмена.
Акт інф.обмена є ніщо інше як послідовність дій "Зробити запит - прийом відповіді на запит"
Тільки не той акт в якому потрібно вказувати, що потрібно підключитися до бази даних, що лежить за певним шляху - а той акт, який би свідчив про самому наявності на вказаному хості потрібного нам SQL-сервера Firebird.
ще одна казка про білого бичка.
постів на сотню
try
idTCPClient1.Open;
except
ShowMessage ( "упс.")
end;
try
IBDatabase.Open ();
except
ShowMessage ( "теж упс.")
end;
Питання: навіщо тобі перший "упс"?
> Мене цікавить саме цей акт обміну
> Який би свідчив про самому наявності на вказаному
> Хості потрібного нам SQL-сервера Firebird
Цим якраз і займається IBDatabase.Open.
Який ще велосипед ти зібрався винаходити - не зрозуміло ..
Єдине що потрібно, так це з'ясувати - чи відповідає по порту 3050 firebird потрібної нам версії або взагалі хоч який-небудь - або не відповідає.
Уточню питання: питання звучить - як. а не навіщо :)
IBServerProperties знає всі відповіді на всі твої питання
Припустимо нам потрібно обійти кваритири в під'їзді за певним списком і дізнатися, чи є хто вдома.
Для цього нам не потрібно заходити в кожну квартиру, представлені і т.п.
Досить буде зателефонувати / постукати в двері, і якщо запитають "Хто там" піти далі.
PS: Якщо раптом там гавкне собака - значить це інший SQL-сервер :)
а що, ібдатабейс після конекту обов'язково повинен витягнути на клієнта всі дані всіх баз які на ньому є?
Ну візьми сниффер та подивися як там виглядає рукостискання
Те що у відповідь на твій стук у двері сусіда за дверима тиша, ще не говорить від тому що вдома немає ніхто
Така ідея була спочатку - просто сподівався, що може будь-хто це вже робив до нас.
Ось тільки взяти можу тільки іздому. На роботі заборонена стрибка * .exe і архівів :(
> Можна очікувати і більш змістовну відповідь
Локально - немає проблем. Ні для Windows, ні для LINUX, ні для FreeBSD. У тому числі і повний список серверів, що працюють на різних портах. Способів - безліч, починаючи від ськана служб (демонів), скан семафорів, і закінчуючи тупим пошуком по жорсткому диску.
А тепер уявіть собі віддалену машину, на якій "десь висить мережева служба (демон)". У мене, як у адміністратора за сумісництвом моїх клієнтів відразу ряд питань:
1) Який порт вона слухає. # XA0; - який захотілося лівої п'яти адміна при установці Firebird.
А як дізнатися. - ну, можна перебирати сніффером порти, наприклад.
Гаразд, умовили, припустимо слухає стандартний 3050.
3) А чи не є Firebird на цій машині всього-лише проксірующім демоном для редиректу на справжній сервер. Звичайно, ми можемо дізнатися про це з рядка підключення до БД. хоча стоп. Яка рядок підключення до БД, адже ми поки лише перевіряємо наявність сервера. Який може бути всього лише проксі для балансування навантаження на справжній сервер.
Це ми ще до варіанту самостійної збірки Firebird з сирців не дійшли. )
І все-таки питання. нафіга стукати в двері?)
Ну відповів тобі сусід через двері "Хто там?", І що.
Відповісти "Сто грам", щоб тобі відкрили двері, прямо зараз ти не зможеш, тобі ж ще в ларьок потрібно збігати за бульбашкою - не з порожніми ж руками в гості ходити)
А прибігши з ларька з бульбашкою ти виявиш, що на той же стук ніякого "ктотама" через двері не чути - сусіда терміново закортіло піти у своїх справах)
щас за підсумком виявиться, що все це треба тільки для того, щоб в разі якщо туди нікого немає, але має бути, - отримати лист, підійти до машини і мишкою запустити впав сервіс.
а інших шляхів звичайно ж немає.
ну або він хоче зібрати статистику доступності в мережі серверів за рік.
і продати її дослідникам.
тобто твоя мудра перевірка самопісний класом дасть точно такий же таймаут.
Тоді цілком достатньою буде спроба конекту до 3050-му порту без акту прікл.обмена.
Якщо на цьому порту хоч хтось слухає, тобто спроба конекту по трансп.протоколу була успішною, слідом можна намагатися виконати IBDatabase.Open, тобто спробу конекту по прікл.протоколу.
Якщо там слухає хто завгодно, але не FB-сервер, IBDatabase.Open тут же порушить соотв.ісключеніе.
від торомоза ні перетворювати, якщо винен він, це не допоможе.
> Від торомоза ні перетворювати
Ну це окрема пісня, ніяк не пов'язана з ізнач.вопросом
Пам'ять: 0.79 MB
Час: 0.044 c