Benutzer mit den meisten Antworten
Wie kann ich MX-Server Name und IP-Adresse eines beliebigen Remote EMail-Servers herausbekommen?

Frage
-
Guten Tag,
Folgendes Problem:Der Name eines EMail-Servers sei z. B: "securesmtp.t-online.de" wie kann ich dessen Daten mittels eines C++ Programms herausbekommen? Über ein DNS Lookup Programm im Internet habe ich folgende Einträge herausbekommen:
10 sfwdallmx.t-online.de. \
sfwdallmx.t-online.de. > für smtp und pop3 Server gleich!
[194.25.134.46] /
Damit habe ich zwar alles was im Einzelfall benötige, aber wie frage ich einen DNS-Server eines Internet/EMail Anbieters mittels C++ Programm dynamisch ab?
Bei weiterem Suchen stieß ich auf die Windows API Funktion DnsQuery() und baute mir folgendes Win32 Consol-Testprogramm:
#include "Winsock2.h"
#include <Windns.h>
#include <iostream>
...
...PDNS_RECORD pdr = NULL;
PCSTR pOwnerDomain = "t-online.de";
DNS_STATUS result = DnsQuery(pOwnerDomain,
DNS_TYPE_MX,
DNS_QUERY_STANDARD,
NULL,
&pdr,
NULL);
if(result)
{
cout << "DNS Fehler." << std::endl;
}
else
{
cout << "EMail Server von t-online.de is: "
<< pdr->Data.MX.pNameExchange << std::endl;
}
DnsRecordListFree(pdr, DnsFreeRecordList);...
Leider ließ sich das nicht compilieren:
error LNK2019: _DnsFree und _DnsQuery_A
Beide Funktionen sind aber in Windns.h deklariert!
Daraufhin habe mir https://support.microsoft.com/en-us/kb/831226 angesehen und das dort angegebene kleine Testprogramm exakt nachgebaut. Leider ließ auch das sich nicht compilieren und brachte die gleichen Fehler!Weiß jemand, was da falsch ist oder fehlt? Muß da noch mittels #pragma irgendeine Bibliothek mit eingebunden werden? In den Dokumentationen habe ich nichts gefunden -- oder übersehen??!
Klaus.
M. Thaddaeus
Antworten
-
Hallo
Also, da so ein MX-Eintrag auf eine ganz andere Domäne zeigen kann (Bsp: für die Domäne "dm1.de" könnte der MX "irgendwas.nichts.su" lauten), kann der DNS Server nicht gleich noch die IP dazu zurückgeben. Um vom Namen später die IP zu bekommen, musst du daher eine weitere Anfrage machen (A-Record oder AAAA). Entweder wieder mit der gleichen Funktion oder per getaddrinfo.
Gruss,
Rudolf
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 14. Juni 2016 14:05
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 23. Juni 2016 14:05
-
Hallo Rudolf,
Dank für den Hinweis. Ich habe das mittels getaddrinfo() erledigt.
Gruß
Klaus.M. Thaddaeus
- Als Antwort markiert m-thaddaeus Freitag, 24. Juni 2016 13:36
Alle Antworten
-
Guten Tag Rudolf,
herzlichen Dank für Deinen Hinweis. Es hat sofort nach dem Einbinden der Bibliothek geklappt! Den Servernamen in den zurückgegebenen Daten mit pdr->Data.MX.pNameExchange zu finden war nun kein Problem, aber die IP-Adresse dieses Mail-Servers kann ich in dem Datengewirr nicht finden. Hast Du dafür auch einen Tip?
Klaus.
M. Thaddaeus
-
Hallo
Also, da so ein MX-Eintrag auf eine ganz andere Domäne zeigen kann (Bsp: für die Domäne "dm1.de" könnte der MX "irgendwas.nichts.su" lauten), kann der DNS Server nicht gleich noch die IP dazu zurückgeben. Um vom Namen später die IP zu bekommen, musst du daher eine weitere Anfrage machen (A-Record oder AAAA). Entweder wieder mit der gleichen Funktion oder per getaddrinfo.
Gruss,
Rudolf
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 14. Juni 2016 14:05
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 23. Juni 2016 14:05
-
Hallo Rudolf,
Dank für den Hinweis. Ich habe das mittels getaddrinfo() erledigt.
Gruß
Klaus.M. Thaddaeus
- Als Antwort markiert m-thaddaeus Freitag, 24. Juni 2016 13:36