Как получить IP-адрес DNS-сервера?

Тема в разделе "WASM.NETWORKS", создана пользователем weiv, 7 апр 2005.

  1. weiv

    weiv New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    25
    Адрес:
    Новосибирск
    Есть ли универсальный документированный способ получить ip-адрес для DNS сервера?

    Знаю, есть функция GetNetworkParams в IPHLPAPI.DLL,

    но к примеру в Windows 95 ее (dll) не было.



    Еще есть WsControl (WSOCK32.DLL или MSWSOCK.DLL), но она недокументирована в MSDN. Утилита winipcfg похоже ее-то и использует.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    DHCP. Если есть доступ в инет можно выставить фиксированный адрес.
     
  3. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    При чем тут DHCP?


    Код (Text):
    1. gethostbyname
    2. gethostbyaddr




    и те, что пришли им на смену.

    Или я не понял вопроса? Или ты не знаешь ни имени, ни IP DNS-сервера?
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    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



    Если товарища интересует последнее то пусть пишет более ясно. Какой вопрос такой ответ.
     
  5. weiv

    weiv New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    25
    Адрес:
    Новосибирск
    Ни ip, ни имени DNS я не знаю.

    Так что gethostbyname и gethostbyaddr не подойдут.



    Вот мне и нужно узнать значение ip DNS сервера. То есть как это узнать программно?



    Речь про DHCP не идет.
     
  6. SammIk

    SammIk Member

    Публикаций:
    0
    Регистрация:
    11 янв 2004
    Сообщения:
    90
    Адрес:
    Russia
    Кинуть широковещательный UDP на какой-то там порт.

    И вообще это в гугле есть
     
  7. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    A_Must_Loll

    а какая строчка после всех этих манипуляций подается на вход gethostbyname?
     
  8. drone

    drone New Member

    Публикаций:
    0
    Регистрация:
    14 июл 2004
    Сообщения:
    37
    Адрес:
    Moscow
    У меня недавно возникла такая необходимость.

    Я брал из реестра. Вроде просто и безотказно.



    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters \Interfaces\{BF042BB7-5204-451E-9273-E2A99DA3F66F}]

    "NameServer"="212.45.0.3"
     
  9. drone

    drone New Member

    Публикаций:
    0
    Регистрация:
    14 июл 2004
    Сообщения:
    37
    Адрес:
    Moscow
    А перечислить не судьба?

    К тому же там может быть PPP соединение.

    Конкретнее, пожалуйста.
     
  10. weiv

    weiv New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    25
    Адрес:
    Новосибирск
    Ладно, я тут из 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
     
  11. weiv

    weiv New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2003
    Сообщения:
    25
    Адрес:
    Новосибирск
    Только уберите add esp, 14h

    после wsprintf, а то оказалось что такая инструкция

    итак вставляется.
     
  12. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Хм, понаблюдал тут за вами. Все-таки на этом форуме полно мазахистов.

    С нуля в локальной сети DNS не вычислить. Он может быть только на каком либо сервере той же сети. Поэтому я и писал про маршрутизатор, который вполне можеть быть программным и стоять на том же сервере что Domain Name System.

    PS. У Windows есть специализированный API для работы с dns.
     
  13. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    вполне корректный вопрос. думаю, человек спросил, как получить IP адрес DNS сервера используемого системой.

    мой ответ- проще всего взять в реесте.



    NoName, не нужно тупить про API - человек изначально знал, что API есть, он не знал где их искать.

    A_Must_Loll, у некоторых хватает ума дойти до этого самим )
     
  14. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229


    С чего ты решил что он знал что есть API но не знал где их искать? :)