Есть ли универсальный документированный способ получить ip-адрес для DNS сервера? Знаю, есть функция GetNetworkParams в IPHLPAPI.DLL, но к примеру в Windows 95 ее (dll) не было. Еще есть WsControl (WSOCK32.DLL или MSWSOCK.DLL), но она недокументирована в MSDN. Утилита winipcfg похоже ее-то и использует.
При чем тут DHCP? Код (Text): gethostbyname gethostbyaddr и те, что пришли им на смену. Или я не понял вопроса? Или ты не знаешь ни имени, ни IP DNS-сервера?
Dynamic Host Configuration Protocol отвечает за автоматическое назначение ip адресов. cmd -> ipconfig: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 10.176.123.161 Subnet Mask . . . . . . . . . . . : 255.255.255.255 Default Gateway . . . . . . . . . : 10.176.123.161 Если товарища интересует последнее то пусть пишет более ясно. Какой вопрос такой ответ.
Ни ip, ни имени DNS я не знаю. Так что gethostbyname и gethostbyaddr не подойдут. Вот мне и нужно узнать значение ip DNS сервера. То есть как это узнать программно? Речь про DHCP не идет.
У меня недавно возникла такая необходимость. Я брал из реестра. Вроде просто и безотказно. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters \Interfaces\{BF042BB7-5204-451E-9273-E2A99DA3F66F}] "NameServer"="212.45.0.3"
Ладно, я тут из WINIPCFG вытащил кое-какую информацию. Пробовал пока только на Windows 95. Так что протестируйте на досуге на других Win9x системах. Ну а для NT это конечно не подойдет, т.к. как работает с VXD. ;-------------------------------------------------------- .586 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\ws2_32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\ws2_32.lib .data? wsadata WSADATA <> .data szDevice DB '\\.\VDHCP',0 hDevice DD 0 dwBytesReturned DD 0 p DD 0 szMyIP DB 16 dup (0) szDNS_1 DB 16 dup (0) szDNS_2 DB 16 dup (0) szMbCap DB 'Get DNS',0 ;message box caption szMbText DB 1024 dup (0) ;message box text szFmt DB 'My IP: %s',10,10,'DNS 1: %s',10,'DNS 2: %s',0 dwTmp DD 0 dwTmp2 DD 0 .code start: invoke WSAStartup, 202h, addr wsadata cmp eax, 0 jne lab_4 invoke CreateFile, ADDR szDevice, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0 cmp eax, INVALID_HANDLE_VALUE je lab_2 mov hDevice, eax ;Похоже что при таком вызове в dwTmp функция вернет сколько байтов требуется реально invoke DeviceIoControl, hDevice, 1, ADDR dwTmp, 4, 0, 0, ADDR dwBytesReturned, 0 ;Выделим необходимый блок памяти invoke LocalAlloc, LPTR, dwTmp cmp eax, 0 je lab_1 mov p, eax ;Получим данные invoke DeviceIoControl, hDevice, 1, p, dwTmp, 0, 0, ADDR dwBytesReturned, 0 mov esi, p invoke inet_ntoa, DWORD ptr [ESI+0Ch] invoke lstrcpy, ADDR szMyIP, eax mov esi, p mov eax, DWORD ptr [esi+24h] add esi, eax cmp BYTE ptr [esi], 0 je lab_3 invoke inet_ntoa, DWORD ptr [ESI] invoke lstrcpy, ADDR szDNS_1, eax add esi, 4 invoke inet_ntoa, DWORD ptr [ESI] invoke lstrcpy, ADDR szDNS_2, eax invoke wsprintf, ADDR szMbText, ADDR szFmt, ADDR szMyIP, ADDR szDNS_1, ADDR szDNS_2 add esp, 14h invoke MessageBox, 0, ADDR szMbText, ADDR szMbCap, 0 lab_3: invoke LocalFree, p lab_1: invoke CloseHandle, hDevice lab_2: invoke WSACleanup lab_4: invoke ExitProcess, 0 end start
Хм, понаблюдал тут за вами. Все-таки на этом форуме полно мазахистов. С нуля в локальной сети DNS не вычислить. Он может быть только на каком либо сервере той же сети. Поэтому я и писал про маршрутизатор, который вполне можеть быть программным и стоять на том же сервере что Domain Name System. PS. У Windows есть специализированный API для работы с dns.
вполне корректный вопрос. думаю, человек спросил, как получить IP адрес DNS сервера используемого системой. мой ответ- проще всего взять в реесте. NoName, не нужно тупить про API - человек изначально знал, что API есть, он не знал где их искать. A_Must_Loll, у некоторых хватает ума дойти до этого самим )