2 at0s DNS в ядре чаще всего приходилось реализовывать на основе собственного построения запроса и отсылке по UPD и то приходилось брать IP DNS серваков из реестра. Или таскать простенькую базу своих. Да и то гемора было просто ужас сколько с этим делам. пару сотен строк для норм работы - это минимум что надо написать. А вообще когдато эта тема обсуждалась на форуме rootkits.su в раздела Kernel Programming Но это было гдето полтора года назад
прочитал,...стало страшно )), действительно геморой. Кроме RFC 1035 на какую-нибудь документацию можешь ткнуть ?
2 at0s если тебе нужен резолв только A записей, то в принципе там не составит труда это сделать, темболее A запрос строится легко. Самый простой вариант построить запрос. Код (Text): USHORT SEQ = 1; int NameToQName(char* buf, char* domain) { int start; int len; int pos = 0; while (domain[pos]) { start = pos; len = 0; while (domain[pos] && domain[pos] != '.') { buf[pos + 1] = domain[pos++]; len++; } pos++; buf[start] = len; } buf[pos++] = 0x00; return pos; } int BuildDNSQuery(char* buf, char* domain) { int pos; *(USHORT*)buf = SEQ++; *(ULONG*)(buf+2) = 0x01000001; *(ULONG*)(buf+6) = 0x00000000; *(USHORT*)(buf+10) = 0x0000; pos = NameToQName(buf + 12, domain); *(ULONG*)(buf + pos + 12) = 0x01000100; return 16 + pos; } BuildDNSQuery даешь адрес буфера для пакета и доменное имя, на выходе - размер пакета в байтах. И потом уже отсылаешь в ручную. Отпарсить ответ тоже не сложно.