Форум: "Сети";
Текущий архив: 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.53 MB
Время: 0.011 c