MX-Record auslesen
-
Hoi
wie kann ich den MX-Record, sprich den oder die mailserver, einer domain auslesen? Gibt es da spezielle winapi funktionen oder muss ich mir da mein eigenes udp packet schnühren, senden, usw...?
-
Würdest du dich bitte klarer ausdrücken? Du hast web.de und möchtest smtp.web.de haben, oder was?
-
almi schrieb:
Hoi
wie kann ich den MX-Record, sprich den oder die mailserver, einer domain auslesen? Gibt es da spezielle winapi funktionen oder muss ich mir da mein eigenes udp packet schnühren, senden, usw...?
Hi,
wenns um die IP-Adresse geht, nimm getaddrinfo(....) und den Namen
des Mailservers den Du auflösen möchtest.
(Vorausgesetzt, es stehen keine Einträge zu diesem Server in irgendwelchen hosts-Dateien und Du hast einen entsprechenden DNS-Server in Deiner IP-Konfiguration eingetragen)Wenn Du komplette Zonendatei der entsprechenden Domain auslesen willst, braucht Du direkten Zugriff auf den DNS-Server, aber das geht aus Deiner Fragestellung nicht klar hervor. In diesem Fall wären u.a. die Funktionen
DnsQuery, DnsExtractRecordsFromMessage u.s.w für Dich interessant.
Such mal in der MSDN nach o.g. Funktionen, da kann man dann auch MX-Records extrahieren.Gruß,
Colonius
-
So ich hab das ganze mal ausprobiert, falls es jemanden interessiert...
#pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "dnsapi.lib") #include <stdio.h> #include <windows.h> #include <windns.h> int main() { PDNS_RECORD result; DnsQuery("web.de", DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &result, NULL ); for(PDNS_RECORD i = result; i != NULL; i = i->pNext) printf("%s, %i\n", i->Data.MX.pNameExchange, i->Data.MX.wPreference); return 0; }
-
Hi,
und, ist es das, was Du erwartet hast?Gruß,
Colonius
-
jo Danke! Wollte es nur nochmal posten, damit falls jemand das gleiche problem hat, er nicht extra nen neuen thread aufmachen muss.
-
almi schrieb:
jo Danke! Wollte es nur nochmal posten, damit falls jemand das gleiche problem hat, er nicht extra nen neuen thread aufmachen muss.
Kein Problem, bin auch immer froh, wenn ich ne´ Antwort bekomme.
Allerdings solltest Du den Code so nicht stehen lassen!Ein Fehlerabfrage wäre nicht schlecht, denn wenn Du keinen DNS-Server zum Abfragen erreichst oder einfach kein MX für den Server existiert fällt Dein Codeschnipsel tierisch auf die Sch....
Gruß,
Colonius
-
zufrieden? :p
#pragma comment(lib, "dnsapi.lib") #include <stdio.h> #include <windows.h> #include <windns.h> struct IpAddr{ unsigned char a,b,c,d; }; int main() { char domain[128]; printf("Enter Domain: "); gets(domain); PDNS_RECORD result; if(DnsQuery(domain, DNS_TYPE_MX, DNS_QUERY_WIRE_ONLY | DNS_QUERY_BYPASS_CACHE, NULL, &result, NULL)) { printf("Error: Domain unavailable.\n"); return -1; } printf("Mail Server, Preferences, IP Address\n"); for(; result != NULL; result = result->pNext) { printf("%s, %i, ", result->Data.MX.pNameExchange, result->Data.MX.wPreference); IpAddr IP; PDNS_RECORD result2; if(DnsQuery(result->Data.MX.pNameExchange, DNS_TYPE_A, DNS_QUERY_WIRE_ONLY | DNS_QUERY_BYPASS_CACHE, NULL, &result2, NULL)) { printf("Error\n"); continue; } memcpy(&IP, &result2->Data.A.IpAddress, 4); printf("%i.%i.%i.%i\n", IP.a, IP.b, IP.c, IP.d); DnsRecordListFree(result2, DnsFreeFlat); } DnsRecordListFree(result, DnsFreeFlat); system("PAUSE"); return 0; }
-
Jo! :p
-
Hallo
ich habe leider keine WinDns.h und Dnsapi.lib.
ab welchem SDK ist die denn vorhanden ?
MfG
RB
-
Im Platform SDK