Código: Seleccionar todo
#include <windows.h>
#include <windns.h>
// we need this API
typedef int (WINAPI *DNSQUERYA)(PCSTR, WORD, DWORD, PIP4_ARRAY, PDNS_RECORD *, PVOID *);
DNSQUERYA _DnsQueryA;
// our procedures
BOOL init_dns(void);
BOOL MXLookup(char *, char *);
int main(void){
if(init_dns() == FALSE){
printf("exiting: could not locate APIs...");
return 0;
}
char szDomain[] = "kefivx.info";
char *szSMTP;
szSMTP = (char *) malloc(64); // malloc some space
memset(szSMTP, 0, 64);
if(MXLookup(szDomain, szSMTP) == TRUE){ // perform lookup
printf("prefered SMTP server for '%s' is '%s'", szDomain, szSMTP);
return 1;
}
return 0;
}
BOOL init_dns(void){
HINSTANCE hDNS;
// find dnsapi in memory
hDNS = GetModuleHandle("dnsapi");
if(hDNS == 0){
hDNS = LoadLibrary("dnsapi");
if(hDNS == 0)
return FALSE
}
// find DnsQuery_A in memory
_DnsQueryA = (DNSQUERYA) GetProcAddress(hDNS, "DnsQuery_A");
if(_DnsQueryA == 0)
return FALSE;
return TRUE;
}
BOOL MXLookup(char *szDomain, char *buffer){
int preference = 9001; // OVER 9000
int ret = 0;
/*
* normally i would type this structure out myself... but i'm lazy and
* it's huge: http://msdn.microsoft.com/en-us/library/aa450351.aspx
*/
DNS_RECORD *pQueryResults;
DNS_RECORD *pQueryRec;
// make query
ret = _DnsQueryA(szDomain, DNS_TYPE_MX, DNS_QUERY_STANDARD, 0, &pQueryResults, 0);
if(ret != ERROR_SUCCESS)
return FALSE;
// sort through results to find lowest preference
for(pQueryRec = pQueryResults; pQueryRec; pQueryRec = pQueryRec->pNext){
if(pQueryRec->wType != DNS_TYPE_MX)
continue;
if(pQueryRec->Data.MX.wPreference < preference){
preference = pQueryRec->Data.MX.wPreference;
strcpy(buffer, pQueryRec->Data.MX.pNameExchange);
}
}
if(!buffer)
return FALSE;
return TRUE;
}
Autor : Kefi
Espero que les sirva...
Saludos !