Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение локального ip / 9 сообщений из 9, страница 1 из 1
09.12.2003, 10:02
    #32347385
_Sania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
Собственно весь вопрос в теме - как определить ip машины, на которой запускается программа. Пробовал через gethostbyname, но работает медленно (видать все равно лезет к DNS и т.д.) и не всегда отрабатывает, в тоже время ipconfig адреса показывает быстро и работает всегда (даже если машина не в сети) - хотелось бы так же.
...
Рейтинг: 0 / 0
09.12.2003, 10:08
    #32347397
Определение локального ip
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 phe = gethostbyname(NULL);
 if (phe != NULL) {
     in_addr	addr;
     for (i =  0 ; ; i++) {
          if (phe->h_addr_list[i] == NULL) break;
          memcpy(&addr, phe->h_addr_list[i], phe->h_length);
          ...
     } // for
 } // if
...
Рейтинг: 0 / 0
09.12.2003, 10:20
    #32347412
_Sania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
Спасибо, конечно - но ведь написал, что gethostbyname уже пробовал на некотрых машинах она и возвращает NULL и вообще притормаживает. Вот кусок моего кода, может действительно ошибся, интересует меня только один ip адрес, поэтому перебор не нужен.

struct sockaddr_in dest;
struct hostent *h = NULL;
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(str);
try
{
if(dest.sin_addr.s_addr == INADDR_NONE)
{
h = gethostbyname(str);
if(h != NULL)
{
memcpy(&(dest.sin_addr), h->h_addr_list[0],h->h_length);
out = inet_ntoa(dest.sin_addr);
}
}
else
{
h = gethostbyaddr((char *)&dest.sin_addr.S_un.S_addr,sizeof(dest.sin_addr.S_un.S_addr), AF_INET);
if(h != NULL) out = h->h_name;
}
...
Рейтинг: 0 / 0
09.12.2003, 10:38
    #32347446
Определение локального ip
Из приведенного куска кода не ясно, что такое str (параметр gethostbyname).
Думаю, что все негативные явления из-за него. Т.к. gethostbyname призван по доменному имени определять прочие параметры, то при наличии параметра он тянется до ближайшего DNS и не всегда там находит. При параметре NULL, он никуда не лезет, а дает локальные установки.

интересует меня только один ip адрес
А Вы точно знаете который?
...
Рейтинг: 0 / 0
09.12.2003, 10:55
    #32347475
_Sania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
Понятно, а str - это char[512], заполняется через GetComputerName.
Насчет передачи NULL в gethostbyname - это работает (сразу не заметил), буду пробовать на проблемных машинах - спасибо за совет.
...
Рейтинг: 0 / 0
09.12.2003, 17:22
    #32348248
Qwerы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
Cлучайный прохожий

А что означает в Вашем коде:
...
} // for
} // if

- что тут нужно?
...
Рейтинг: 0 / 0
09.12.2003, 17:25
    #32348255
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
да нет это у него просто коментарии ,
для наглядности :)
_____________
...
Рейтинг: 0 / 0
09.12.2003, 20:04
    #32348420
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение локального ip
www.lepsik.com/src/ip.zip

здесь для Borland Builder компонент он в исходниках -
делает то что тебе надо
...
Рейтинг: 0 / 0
10.12.2003, 11:10
    #32348807
Определение локального ip
2 Lepsik
Компонент безусловно интересный, однако он определяет IP адрес методом:

GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);

Чего и хотел избежать автор топика.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение локального ip / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]