Вариант 1. Если указан "domain name". Код (Text): mov eax,offset ServerName push eax call gethostbyname cmp eax,0 je NotFoundInDNS mov eax,(_hostent ptr [eax]).h_addr_list mov eax,[eax] push dword ptr [eax] call inet_ntoa После этого в eax регистре имеем стандартный десятично-точечный вид IP адреса. Вариант 2. Указан IP. Код (Text): push offset ServerIP call inet_addr ;try to convert IPv4 -> NetByteType cmp eax,-1 je NOTIP ;domain name -> IP mov iad.S_un.S_addr,eax invoke gethostbyaddr,offset iad, sizeof iad, AF_INET cmp eax,0 je NotFoundInDNS_G invoke wsprintf,addr SD,addr StrFormat,(_hostent ptr [eax]).h_name push offset dword ptr [SD] "call something" Получили соответственно домен интересующего нас сервера. Я хотел бы получить: 1. "альтернативные имена узла (массив строк)" (Касперский (С)). Поле h_aliases. 2. список альтернативных IP. Поле h_addr_list. Пытаюсь по всякому писать [...+sizeof(DWORD)] Но фигушки! Неполучается.
NoName Примерно так Код (Text): ... ; получить указатель на hostent invoke gethostbyaddr, ... ; или invoke gethostbyname, .... test eax,eax jz short gethostby_error push eax mov eax,(_hostent ptr [eax]).h_aliases test eax,eax jz short h_aliases_done h_aliases_get: mov ecx,[eax] test ecx,ecx jz short h_aliases_done push eax ; ; здесь ECX содержит адрес очередного псевдонима ; например, его можно вывести на консоль при помощи ; push eax ; буфер для NumberOfCharsWritten push 0 ; lpReserved lea eax,[esp+4] push eax ; lpNumberOfCharsWritten push ecx ; сохранить адрес строки с псевдонимом push ecx call lstrlenA ; определить длину строки с псевдонимом pop ecx ; восстановить адрес строки с псевдонимом push eax ; nNumberOfCharsToWrite push ecx ; pBuffer push STD_OUTPUT_HANDLE call GetStdHandle push eax ; hConsoleOutput call WriteConsoleA pop eax ; восстановить стек от NumberOfCharsWritten pop eax add eax,sizeof dword jmp short h_aliases_get h_aliases_done: pop eax mov eax,(_hostent ptr [eax]).h_addr_list test eax,eax jz short h_addr_list_done h_addr_list_get: mov ecx,[eax] test ecx,ecx jz short h_addr_list_done push eax ; ; здесь ECX содержит адрес очередного ip-адреса ; например, его можно перевести в строку при помощи ; push dword ptr [ecx] call inet_ntoa pop eax add eax,sizeof dword jmp short h_addr_list_get h_addr_list_done: ... PS imho знания в сетях здесь ни при чем.