|
|
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Есть функция, возвращает 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 12:39 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Извиняюсь - был напуган Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 12:40 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Первая мысль, которая приходит в голову - это проверить для неправельных адресов, сколько их вообще в списке и какие. А также снять дамп пакетов и посмотреть, кто врет - сеть или С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 12:58 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Я бы для начала написал Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 13:03 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Вот что удалось нарыть автор 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 13:23 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
а еще лучше memset(szBuff,0,sizeof(szBuff)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 13:26 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
а точно, там же список адресов, в HOSTENT-е-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 13:28 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
--null--а точно, там же список адресов, в HOSTENT-е-то как узнать сколько их, чтобы проверить (еще вопрос: а как их проверять) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 13:32 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
У кого-нибудь есть пример использования GetAddressByName, че-то в MSDN нихрена не нашел? Какие параметры нужно для сети с DNS и TCP-протокола? -------------------------------------------------------------- Don't worry - wear Huggies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 15:42 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
возвращается Zero-terminated список вот как вытаскивать все адреса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 15:45 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
--null--возвращается Zero-terminated список вот как вытаскивать все адреса }[/src] понятно, спасибо, но как я понял меня это не спасет. Пробовал ставить не 0, другие индексы, так он вообще не возвращает ни какого адреса! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 15:47 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
попробуйте скажем для www.microsoft.com или www.msdn.com он вернет как раз список адресов. Правда они все коректные - так прописано в DNS специально Как раз этот код поможет узнать, больше ли одного адреса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 15:51 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
попробовал твой вариант, везде в моей сети одинарные IP. Как же интересно винда видит тот комп по сети и другие проги тоже, RAdmin, если задать ему по имени компа, тоже не найдет, а NetOp в легкую. Подозреваю, что используют функции более высокого уровня. -------------------------------------------------------------- Don't worry - wear Huggies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 16:08 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
я предполагаю, что gethostbyname использует традиционный резолвинг (файл hosts, DNS), а винда - все в комплексе, то есть плюс свои фичи - броадкастинг, WINS, lmhosts и что там она еще умеет. Наверное, из-за этого. Поэтому возможно GetAddressByName действительно более интересный путь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 16:23 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
--null-- Поэтому возможно GetAddressByName действительно более интересный путь Блин, найти бы еще нормальное описание с примером... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 16:31 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:22 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
--null--хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету. а файл hosts (если не попутал) пустой в системе ? а то может такого наковырять...древнего :) с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:42 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
В линуксе есть еще такая функция, но найти опсания не могу Код: plaintext 1. 2. 3. Может ли она броадкасты кидать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:51 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Пример можно найти на rsdn Например вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 17:51 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
kolobok0 --null--хотя нет, я ошибся - похоже, gethostbyname в виндах умеет и броадкастом резолвить. Обычные netbios имена можно скармливать, которых в DNS точно нету. а файл hosts (если не попутал) пустой в системе ? а то может такого наковырять...древнего :) с уважением (круглый) kolobok0, нет, этот вариант я сразу проверил :-) Видимо в винде оно обращается к системному виндовому резолверу, а он как известно умеет броадкастами. AkhМожет ли она броадкасты кидать? нет, думаю , все зависит от реализации резолвера - linux не кидает броадкасты, как виндовые сервисы. Если на ней нет smb клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:14 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
--null-- AkhМожет ли она броадкасты кидать? нет, думаю , все зависит от реализации резолвера - linux не кидает броадкасты, как виндовые сервисы. Если на ней нет smb клиента. Раньше меня этот вопрос тоже интересовал, но так до сути не успел докопаться. В системе определяется в какой последовательности разрешаются имена /etc/host.conf. Нашел, что еще может быть параметр nis. Что это такое не понял, но разрешать имена он не захотел. Так каким алгоритмом пользуется функция gethostbyname? Ядра, какими-то системными возможностями или сама его реализует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:21 |
|
||
|
IP problem
|
|||
|---|---|---|---|
|
#18+
Akh да, помню Ваш топик в линуховой ветке. nis - это Yellow Pages, Network Information System сановская, по ней тоже можно резолвить если она в сети настроена да, во фре/линухе /etc/host.conf. В соляре другой файлик. В винде последовательность для netbios тоже поеделяется, есть узлы вида B,P, M, H - по приоритету использовавния wins или броадкастов. В доках написано, как именно винда резолвит (последовательность), используя файлы, dns и netbios gethostbyname - я так понимаю, резолвер встроен я ядро у юниксов как и сокеты. а в винде - в winsock, но он еще и пользуется netbios-ом. Ибо работает приведенный код по netbios имени, а так же всякие утилиты типа ping и прочих. Они должны юзать обычный gethostbyname ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2006, 18:37 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=350&tid=2031085]: |
0ms |
get settings: |
11ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 377ms |

| 0 / 0 |
