Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

Как по IP-адресу получить имя компьютера в локальной сети?   Найти похожие ветки 

 
Sour Smile   (2005-05-23 11:07) [0]

Как по IP-адресу получить имя компьютера в локальной сети?
До недавного времени, для этих целей я использовал функцию IPToHost из http://delphibase.spb.ru/?action=viewfunc&topic=vclservice&id=10277 , но у неё неожиданно оказался один недостаток: если у пользователя интернет в дауне, то эта функция замирает секунд на 10-15. Я так понимаю, что эта функция сначала пытается выяснить имя хоста в интернете, а потом уже в локальной сети. Для моих целей это слишком большая пауза... Может есть какой нибудь другой способ?

ps. Само собой вариант, когда у пользователя нужно изменять какие либо настройки не подходит.


 
Digitman ©   (2005-05-23 11:22) [1]

имя компьютера и имя хоста - разные вещи


 
Sour Smile   (2005-05-23 11:37) [2]


> Digitman ©   (23.05.05 11:22) [1]
> имя компьютера и имя хоста - разные вещи

Пусть будет так, но как же мне по IP-адресу получить имя компьютера в локальной сети?


 
Digitman ©   (2005-05-23 11:39) [3]

именно имя компьютера ? или имя хоста, так как оно было зарегистрировано DNS-сервером в ЛВС ?


 
Sour Smile   (2005-05-23 11:48) [4]


> Digitman ©   (23.05.05 11:39) [3]
> именно имя компьютера ? или имя хоста, так как оно было
> зарегистрировано DNS-сервером в ЛВС ?

Нет, нет. Именно имя компьютера.


 
Digitman ©   (2005-05-23 12:02) [5]

а как идентифицирован этот компьютер в ЛВС ?
как член рабочей группы ? как член домена ?


 
Sour Smile   (2005-05-23 12:11) [6]


> Digitman ©   (23.05.05 12:02) [5]
> а как идентифицирован этот компьютер в ЛВС ?
> как член рабочей группы ? как член домена ?

Как член домена.


 
Digitman ©   (2005-05-23 12:48) [7]

в этом случае "именем компьютера" будет имя хоста в домене
имя хоста резольвится обычным образом - [WSAAsync]GetHostName
порядок просмотра DNS-серверов будет таким каким он указан в DNS-настройках ТСР-протокола, привязанному к соотв.интерфейсу


 
Sour Smile   (2005-05-23 14:31) [8]


> Digitman ©   (23.05.05 12:48) [7]
> в этом случае "именем компьютера" будет имя хоста в домене
> имя хоста резольвится обычным образом - [WSAAsync]GetHostName

Прости, что-то несовсем понятно:
GetHostName (из модуля WinSock.pas) возвращает имя локального компьютера (хоста?)
WSAAsyncGetHostName такой функции не нашёл... (даже в http://google.com  :))


 
False_Delirium ©   (2005-05-23 14:47) [9]

Опечатался человек, мог бы и сам найти.

WSAAsyncGetHostByAddr


 
Sour Smile   (2005-05-23 15:28) [10]


> False_Delirium ©   (23.05.05 14:47) [9]
> Опечатался человек, мог бы и сам найти.
> WSAAsyncGetHostByAddr

Мдааа... Нет, эту функцию я и сам нашёл, только чем же эта функция быстрее, чем IPToHost из http://delphibase.spb.ru/?action=viewfunc&topic=vclservice&id=10277 ?

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


 
Eraser ©   (2005-05-23 15:31) [11]

Sour Smile
Проблема же не в том, что приложение зависает, а в том что результатов функции приходится долго ждать, если интернет в дауне...


Тут нужно отконфигуировать последовательность опроса DNS сереров.


 
Sour Smile   (2005-05-23 15:53) [12]


> Eraser ©   (23.05.05 15:31) [11]
> Тут нужно отконфигуировать последовательность опроса DNS
> сереров.

:)))
А вот здесь вступает в силу постскриптум из моего вопроса. :)

Не могу же я от всех требовать, что-бы у них было "всё настроено так, а не иначе, в противном случае моё приложение будет работать не подобающим образом"


 
False_Delirium ©   (2005-05-23 15:57) [13]

Sour Smile   (23.05.05 15:28) [10]

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

В отдельный поток.

Если интернет в дауне, если ... если ... если ...
Этих "если" очень много, из ты можешь предусмотреть у себя.
Можешь пытаться проверить на доступность основной ДНС сервер, после чего посылать запрос.

И ничего тебе не мешает организовать свой таймаут.

+

If the operation was successfully initiated, WSAAsyncGetHostByAddr returns a nonzero value of type HANDLE which is the asynchronous task handle (not to be confused with a Windows HTASK) for the request. This value can be used in two ways. It can be used to cancel the operation using WSACancelAsyncRequest. It can also be used to match up asynchronous operations and completion messages, by examining the wParam message argument.


 
Digitman ©   (2005-05-23 16:00) [14]


> Не могу же я от всех требовать


не только можешь, но и должен !
и не от всех, а от сисадмина, в задачи которого по идее должна входить настройка/конфигурирование раб.станций для успешного выполнения тех или иных задач, в т.ч. твоей

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


 
Digitman ©   (2005-05-23 16:02) [15]


> WSAAsyncGetHostName такой функции не нашёл


она в составе Winsock2

все подробности есть как минимум в первоисточнике - msdn

асинхронные запросы (WSAAsyncХХХХХХХХХ) всегда можно отменить


 
Sour Smile   (2005-05-23 16:10) [16]


> False_Delirium ©   (23.05.05 15:57) [13]
> Sour Smile   (23.05.05 15:28) [10]
> Проблема же не в том, что приложение зависает, а в том что
> результатов функции приходится долго ждать, если интернет
> в дауне...
> В отдельный поток.
Отдельный поток ни коим образом не ускорит получение результата. Кроме того для WSAAsyncGetHostByAddr никаких потоков ненадо, она уже асинхронная.

> Можешь пытаться проверить на доступность основной ДНС сервер,
> после чего посылать запрос.
Здесь пожалуйста подробнее - каким образом ускорится результат от того, что я проверю на доступность основной ДНС сервер?


 
Digitman ©   (2005-05-23 16:18) [17]


> каким образом ускорится результат от того, что я проверю
> на доступность основной ДНС сервер?


для начала нужно знать адрес хоста, где потенциально активен осн. dns-сервер домена .. ты его заранее знаешь ? нет, не знаешь... а уж юзер и словов таких не слышал "основной dns-сервер")

а "ускорение результата" объясняется достаточно просто - запросы клиента на резрешение адреса в имя хоста обрабатываются сервером в той же ЛВС, и этот сервер обязан знать имена хостов, зарегистированных в домене


 
Sour Smile   (2005-05-23 16:19) [18]


> Digitman ©   (23.05.05 16:02) [15]
> > WSAAsyncGetHostName такой функции не нашёл
> она в составе Winsock2
> все подробности есть как минимум в первоисточнике - msdn
msdn это которая http://msdn.microsoft.com/ ? Там тоже такая функция не описана:
Results for: WSAAsyncGetHostName
Sorry, no results were found.


 
Digitman ©   (2005-05-23 16:26) [19]

пардон, имелась ввиду wsaasyncgethostbyaddr

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaasyncgethostbyaddr_2.asp


 
False_Dleirium   (2005-05-23 16:28) [20]

Sour Smile   (23.05.05 16:10) [16]
Проблема же не в том, что приложение зависает

Отдельный поток ни коим образом не ускорит получение результата. Кроме того для WSAAsyncGetHostByAddr никаких потоков не надо, она уже асинхронная.

Для WSAAsyncGetHostByAddr не нужен, если по каким-то причинам приложение зависает, то в отдельный поток, к тому и написано.
Ты написал, что приложение зависает: может быть ты собственноручно дожидаешься ответа.

> Можешь пытаться проверить на доступность основной ДНС сервер,
> после чего посылать запрос.
Здесь пожалуйста подробнее - каким образом ускорится результат от того, что я проверю на доступность основной ДНС сервер?


Это написано не к увеличению скорости, а к "а в том что результатов функции приходится долго ждать, если Интернет  в дауне" или это под твои ником запостил кто-то ?

Скорость будет ограничена скоростью ответа от сервера, у себя ты можешь только "сгладить" или предусмотреть в случае недоступности ДНС сервера.

Digitman ©   (23.05.05 16:18) [17]

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

для начала нужно знать адрес хоста, где потенциально активен осн. dns-сервер домена .. ты его заранее знаешь ? нет, не знаешь... а уж юзер и словов таких не слышал "основной dns-сервер")

Проблема советов несовместимость )


 
Digitman ©   (2005-05-23 16:30) [21]


> Проблема советов несовместимость


несовместимость чего с чем ?


 
False_Delirium ©   (2005-05-23 16:36) [22]

Друг с другом

"в кр.случае реконфигурация сет.настроек в тех или иных пределах м.б. выполнена и тобой самим, т.е. программно .. в т.ч. - установка списка адресов dns-серверов и их приоритетов"

"...для начала нужно знать адрес хоста, где потенциально активен осн. dns-сервер домена .. ты его заранее знаешь ? нет, не знаешь..."


Или он знает список dns-серверов или нет. Второй пост нивелирует первый.


 
Digitman ©   (2005-05-23 16:44) [23]


> False_Delirium ©   (23.05.05 16:36) [22]


ну, предположим, автор таки знает наперед (устроил сисадмину пытку апельсинами и паяльником) адреса dns-серверов в ЛВС ..

тогда задача программной модификации списка вполне осуществима ..


 
False_Delirium,   (2005-05-23 16:56) [24]

Digitman ©   (23.05.05 16:44) [23]
Согласен.

Он так же програмно может посмотреть в настройках потокола ОС первичный и вторичный DNS.


 
Sour Smile   (2005-05-23 17:49) [25]

Ладно, не морочьте себе голову. Я пошёл другим путём:
Сначала функцией NetServerEnum получаю список доменов в сети (у нас их три), потом для каждого домена, опять же функцией NetServerEnum получаю список компьютеров в каждом домене (который сохраняю в массив), после этого для каждого компьтера получаю его IP-адрес функцией HostToIP из http://delphibase.spb.ru/?action=viewfunc&topic=netaddress&id=10119 и сохраняю в тот же массив рядом с именем компьютера. В последствии, когда нужно будет узнать имя компа по IP быстренько прохожусь по списку и готово.

ps. Правда всё равно осталось несколько проблемочек (у компьютера изменился IP-адрес, в массиве не оказалось требуемого IP и т.д.), но их уже относительно просто обойти (чаще обновлять массив, при отсутствии IP в массиве - насильно обновить список (это правда займёт некоторое время, но всего один раз, а не каждый раз(!) как в случае с IPToHost))



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.012 c
3-1122486388
Djek
2005-07-27 21:46
2005.09.11
Добавление значений в список Items в ComboBox


6-1116844341
Alen
2005-05-23 14:32
2005.09.11
передача звука по сети


3-1122469503
Yana
2005-07-27 17:05
2005.09.11
Получить список таблиц User-а


14-1124434567
Ксардас
2005-08-19 10:56
2005.09.11
Ктонить знает какой файл нужно удалить,чтоб...


4-1121919319
Pearled
2005-07-21 08:15
2005.09.11
Количество напечатанных страниц





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский