powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / IP problem
41 сообщений из 41, показаны все 2 страниц
IP problem
    #33768422
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция, возвращает IP удаленного компа по его имени в домене. Ведет себя крайне странно: для одних компов возвращает нормальный IP (в не зависимости от того динамический он или нет), а для других возвращает несуществующие IP, при чем чаще те, которые статические.

CString GetIPAddress(CString pcName)
{
//----------------------------------------получить IP адрес компьютера
CString str;
HOSTENT* pHost;
pHost = gethostbyname(pcName);
if(pHost == NULL)
return "";
else
{
char szBuff[80];
if(pHost->h_addr_list[0] != NULL)
{
sprintf(szBuff, "%u.%u.%u.%u", (unsigned char) pHost->h_addr_list[0][0],
(unsigned char) pHost->h_addr_list[0][1],
(unsigned char) pHost->h_addr_list[0][2],
(unsigned char) pHost->h_addr_list[0][3]);
str = szBuff;
return str;
}
else
return "";
}
return "";
}

Что не так?

--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33768425
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь - был напуган

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CString GetIPAddress(CString pcName)
{
//----------------------------------------получить IP адрес компьютера
	CString  str;
	HOSTENT* pHost;
pHost = gethostbyname(pcName);
	if(pHost == NULL)
		return "";
	else
	{
		char szBuff[ 80 ];
		if(pHost->h_addr_list[ 0 ] != NULL)
		{
			sprintf(szBuff, "%u.%u.%u.%u", (unsigned char) pHost->h_addr_list[ 0 ][ 0 ],
										   (unsigned char) pHost->h_addr_list[ 0 ][ 1 ],
										   (unsigned char) pHost->h_addr_list[ 0 ][ 2 ],
										   (unsigned char) pHost->h_addr_list[ 0 ][ 3 ]);
			str = szBuff;
			return str;
		}
		else
			return "";
	}
	return "";
}
...
Рейтинг: 0 / 0
IP problem
    #33768499
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первая мысль, которая приходит в голову - это проверить для неправельных адресов, сколько их вообще в списке и какие.

А также снять дамп пакетов и посмотреть, кто врет - сеть или С
...
Рейтинг: 0 / 0
IP problem
    #33768517
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы для начала написал
Код: plaintext
1.
szBuff[ 0 ] =  0 ;
...
Рейтинг: 0 / 0
IP problem
    #33768528
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Плизззз, не понял.
...
Рейтинг: 0 / 0
IP problem
    #33768602
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что удалось нарыть

автор
SYMPTOMS
On a Microsoft Windows Server 2003-based computer that has multiple IP addresses, the GetHostByName function does not return IP addresses in the correct order. The first IP address that is returned is the one with the lowest number instead of the primary IP address. Because the ping command uses GetHostByName to resolve a name, you will also see this behavior if you use this command.
CAUSE
This problem is caused by a code defect in the Iphlpapi.dll file.
RESOLUTION
Service pack information
To resolve this problem, obtain the latest service pack for Windows Server 2003. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
889100 How to obtain the latest service pack for Windows Server 2003

однако, залез на контроллер домена и в DHCP и в DNS неправильный адрес принадлежит другому компьютеру!
Однако винда нормально обрабатывает копирование и т.д. с этим компом.
???
--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33768615
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а еще лучше memset(szBuff,0,sizeof(szBuff))
...
Рейтинг: 0 / 0
IP problem
    #33768619
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а точно, там же список адресов, в HOSTENT-е-то
...
Рейтинг: 0 / 0
IP problem
    #33768640
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--а точно, там же список адресов, в HOSTENT-е-то
как узнать сколько их, чтобы проверить (еще вопрос: а как их проверять)
...
Рейтинг: 0 / 0
IP problem
    #33769133
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У кого-нибудь есть пример использования GetAddressByName, че-то в MSDN нихрена не нашел? Какие параметры нужно для сети с DNS и TCP-протокола?

--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33769148
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возвращается Zero-terminated список
вот как вытаскивать все адреса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
	 char szBuff[ 80 ];
	 memset(szBuff, 0 ,sizeof(szBuff));


int i= 0 ;
while(pHost->h_addr_list[i])
{
sprintf(szBuff, "%u.%u.%u.%u", (unsigned char) pHost->h_addr_list[i][ 0 ],
							   (unsigned char) pHost->h_addr_list[i][ 1 ],
										   (unsigned char) pHost->h_addr_list[i][ 2 ],
										   (unsigned char) pHost->h_addr_list[i][ 3 ]);

i++;
puts(szBuff);
}
...
Рейтинг: 0 / 0
IP problem
    #33769159
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--возвращается Zero-terminated список
вот как вытаскивать все адреса
}[/src]
понятно, спасибо, но как я понял меня это не спасет. Пробовал ставить не 0, другие индексы, так он вообще не возвращает ни какого адреса!
...
Рейтинг: 0 / 0
IP problem
    #33769183
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте скажем для www.microsoft.com или www.msdn.com
он вернет как раз список адресов.
Правда они все коректные - так прописано в DNS специально

Как раз этот код поможет узнать, больше ли одного адреса
...
Рейтинг: 0 / 0
IP problem
    #33769290
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал твой вариант, везде в моей сети одинарные IP.
Как же интересно винда видит тот комп по сети и другие проги тоже, RAdmin, если задать ему по имени компа, тоже не найдет, а NetOp в легкую. Подозреваю, что используют функции более высокого уровня.

--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33769379
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я предполагаю, что gethostbyname использует традиционный резолвинг (файл hosts, DNS), а винда - все в комплексе, то есть плюс свои фичи - броадкастинг, WINS, lmhosts и что там она еще умеет. Наверное, из-за этого.

Поэтому возможно GetAddressByName действительно более интересный путь
...
Рейтинг: 0 / 0
IP problem
    #33769430
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--
Поэтому возможно GetAddressByName действительно более интересный путь
Блин, найти бы еще нормальное описание с примером...
...
Рейтинг: 0 / 0
IP problem
    #33769662
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету.
...
Рейтинг: 0 / 0
IP problem
    #33769734
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету.

а файл hosts (если не попутал) пустой в системе ? а то может такого наковырять...древнего :)


с уважением
(круглый)
...
Рейтинг: 0 / 0
IP problem
    #33769766
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В линуксе есть еще такая функция, но найти опсания не могу

Код: plaintext
1.
2.
3.
struct hostent *gethostbyname2(const char *name, int af);

В glibc2 имеется также функция gethostbyname2() работающая как gethostbyname(), но позволяющая обозначать семейство, к которому должен принадлежать адрес.

Может ли она броадкасты кидать?
...
Рейтинг: 0 / 0
IP problem
    #33769767
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример можно найти на rsdn
Например вот
...
Рейтинг: 0 / 0
IP problem
    #33769848
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0 --null--хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету.

а файл hosts (если не попутал) пустой в системе ? а то может такого наковырять...древнего :)


с уважением
(круглый)

kolobok0, нет, этот вариант я сразу проверил :-)
Видимо в винде оно обращается к системному виндовому резолверу, а он как известно умеет броадкастами.


AkhМожет ли она броадкасты кидать?
нет, думаю , все зависит от реализации резолвера - linux не кидает броадкасты, как виндовые сервисы. Если на ней нет smb клиента.
...
Рейтинг: 0 / 0
IP problem
    #33769868
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null-- AkhМожет ли она броадкасты кидать?
нет, думаю , все зависит от реализации резолвера - linux не кидает броадкасты, как виндовые сервисы. Если на ней нет smb клиента.

Раньше меня этот вопрос тоже интересовал, но так до сути не успел докопаться.

В системе определяется в какой последовательности разрешаются имена /etc/host.conf. Нашел, что еще может быть параметр nis. Что это такое не понял, но разрешать имена он не захотел.

Так каким алгоритмом пользуется функция gethostbyname? Ядра, какими-то системными возможностями или сама его реализует?
...
Рейтинг: 0 / 0
IP problem
    #33769911
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh да, помню Ваш топик в линуховой ветке.


nis - это Yellow Pages, Network Information System сановская, по ней тоже можно резолвить
если она в сети настроена

да, во фре/линухе /etc/host.conf. В соляре другой файлик.
В винде последовательность для netbios тоже поеделяется, есть узлы вида B,P, M, H - по приоритету использовавния wins или броадкастов.

В доках написано, как именно винда резолвит (последовательность), используя
файлы, dns и netbios

gethostbyname - я так понимаю, резолвер встроен я ядро у юниксов как и сокеты. а в винде - в winsock, но он еще и пользуется netbios-ом.

Ибо работает приведенный код по netbios имени, а так же всякие утилиты типа ping и прочих. Они должны юзать обычный gethostbyname
...
Рейтинг: 0 / 0
IP problem
    #33770036
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksim UMПример можно найти на rsdn
Например вот
это не та
...
Рейтинг: 0 / 0
IP problem
    #33771540
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up


--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33771704
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--gethostbyname - я так понимаю, резолвер встроен я ядро у юниксов как и сокеты. а в винде - в winsock, но он еще и пользуется netbios-ом.


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

Пока прийдется юзать сторонее ПО (sambaclient, ...).
...
Рейтинг: 0 / 0
IP problem
    #33771723
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТаким образом, прийдется ждать, когда в ядро линукса включат поддержку нетбиоса?

А такие планы вообще-то есть? Я так думаю, не станут такое делать.
Сам MS рекомендовал броадкаст только для маленьких сетей, что понятно.
А с выходом Windows 2000 вообще на DNS перешли.
...
Рейтинг: 0 / 0
IP problem
    #33771765
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum, вот какие-то фошизды с этой функцией извращаются

правда там они нетваревские сервисы ищут, но можно переделать.
...
Рейтинг: 0 / 0
IP problem
    #33771781
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--Cerebrum, вот какие-то фошизды с этой функцией извращаются

правда там они нетваревские сервисы ищут, но можно переделать.
Спасибо, я вот что надыбал, теперь думаю как вернуть IP из буфера
...
Рейтинг: 0 / 0
IP problem
    #33771790
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--А такие планы вообще-то есть? Я так думаю, не станут такое делать.
Сам MS рекомендовал броадкаст только для маленьких сетей, что понятно.
А с выходом Windows 2000 вообще на DNS перешли.

Покавырялся в ядре, нашел какой-то ARP daemon support (EXPERIMENTAL). Это оно?
...
Рейтинг: 0 / 0
IP problem
    #33771798
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, это для работы с демоном arpd, он может вести arp таблицы в больших сетях. А резолвинг тут совсем не при чем.
...
Рейтинг: 0 / 0
IP problem
    #33771814
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--нет, это для работы с демоном arpd, он может вести arp таблицы в больших сетях. А резолвинг тут совсем не при чем.

Больше, я ничего такого подозрительного не нашел. Все-таки не понятна политика линукса по отношению к одноранговым сетям. Учитывая мобильность линукса, отсутствие такой возможности мне не понятна.
...
Рейтинг: 0 / 0
IP problem
    #33771844
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чем тут одноранговые сети?
Централизованный резолвинг имеет право место быть в любой сети.
А броадкасты снижают производительность сети, не проходят через роутеры и т.п. геморрой. Это скорее "Legacy" возможность, которая притащила с собой MS из мира LanMan и сетей на Netbeui.
Единственный плюс - что ничего не надо адмнинить и настраивать специально. Остальное все сплошные минусы.
...
Рейтинг: 0 / 0
IP problem
    #33771995
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить IP в CString'е из LPSOCKADDR?


--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33772056
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sockaddr_in.sin_addr.S_un.S_un_b.s_b1

и так далее (b2,b3,b4)
...
Рейтинг: 0 / 0
IP problem
    #33772375
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая функция WSPAddressToString , она прописана в Ws2spi.h (MSDN), но если подключить этот хедер, то все равно функция не видится.

--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
IP problem
    #33772616
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CerebrumЕсть такая функция WSPAddressToString , она прописана в Ws2spi.h (MSDN), но если подключить этот хедер, то все равно функция не видится.

--------------------------------------------------------------
Don't worry - wear HuggiesЭто тебя не туда понесло :). Эту ф-цию (и еще кучу других) ты должен сам реализовать в отдельной dll если хочешь написать собственного провайдера. А тебе, как я понял, нужна ф-ция WS A AddressToString.
...
Рейтинг: 0 / 0
IP problem
    #33772665
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тебя не туда понесло :). Эту ф-цию (и еще кучу других) ты должен сам реализовать в отдельной dll если хочешь написать собственного провайдера. А тебе, как я понял, нужна ф-ция WS A AddressToString.
ясно. попробовал с А вместо P, но как я понял результата = 0;
дело в том, что у меня есть sockadd, а для получения IP желательно sockadd_in возможно ли преобразовать одно в другое (по мсдн их размер одинаков??)
все башка уже не варит
...
Рейтинг: 0 / 0
IP problem
    #33772688
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так пробовал:
Код: plaintext
1.
2.
3.
sockaddr sa;
//..................................................................................
WSAAddressToString((sockaddr_in)&sa, sizeof(sockaddr),...
С другими ф-циями это вроде катит.
...
Рейтинг: 0 / 0
IP problem
    #33772698
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаА так пробовал:
Код: plaintext
1.
2.
3.
sockaddr sa;
//..................................................................................
WSAAddressToString((sockaddr_in)&sa, sizeof(sockaddr),...
С другими ф-циями это вроде катит.
да. все. получилось. IP правильные выдает, ура товарищи,
ВСЕМ УЧАВСТВОВАВШИМ НЕОБЪЯТНОЕ СПАСИБО!
...
Рейтинг: 0 / 0
IP problem
    #33772706
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е наоборот
Код: plaintext
1.
2.
3.
sockaddr_in sa;
//..................................................................................
WSAAddressToString((sockaddr*)&sa, sizeof(sockaddr_in),...
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / IP problem
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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