A friend of mine asked me : “How to get the default mail server of a company (with C#)”. He tried with nslookup but without any success. So I decided to try.
Some google searchs gives me the excellent tool called dig.
$ dig he-arc.ch MX [...] ;; ANSWER SECTION: he-arc.ch. 180 IN MX 10 smtpgw1.he-arc.ch. [...]
Using dig from C# isn’t really nice. It’s a big and ugly hack.
Another try with dnsJava. First step, convert the
.jar
into a library or executable for Mono
via IKVM. It doesn’t work because of GNU Classpath isn’t fully
complete and, probably, dnsJava uses too specific classes from the JRE/JDK of Sun.
Keep googling... And this article, the paradize on earth : C# .NET DNS query component. I downloaded the sources, removed the key.snk file, compiled the library and try this sample code :
using System; using System.Net; using Bdev.Net.Dns; public class DnsTest { public static void Main(string[] argv) { // Shameful hardcoding of my DNS server (CableCom DNS server) IPAddress dnsServerAddress = IPAddress.Parse("62.2.17.60"); // Retrieve the MX records for the domain dosimple.ch MXRecord[] records = Resolver.MXLookup("dosimple.ch", dnsServerAddress); // iterate through all the records and display the output foreach (MXRecord record in records) { Console.WriteLine("{0}, preference {1}", record.DomainName, record.Preference); } } }
It works. System.Net.Dns
doesn’t need to specify the DNS server
so, it’s a weird behaviour. There is a bug with these classes when a
domain name contains a dash '-'.
Un collègue, camarade, poteau m’a interrogé concernant la possibilité de connaître le serveur de mails d’une entreprise via C# (.Net). Il avait apparemment essayé avec nslookup, l’outil fournit par Microsoft, mais bon ce n’était pas concluant. Voici les détails de mes recherches (avec ci-dessus un développement plus fin).
L’objet intégré dans le framework System.Net.Dns
ne permet pas de faire
une requête avec le type de serveur.
Un autre outil, nommé dig
est bien plus sympa que nslookup
,
mais appelé un exécutable depuis C# me semble être un gros hack.
Un nouvel essai avec le prometteur dnsJava qui une fois converti en bibliothèque pour le CLR devrait aller nickel. Le problème est qu’IKVM (ou plutôt GNU.ClassPath) n’a pas tous les outils pour faire ça. Sun is evil !.
Et pour terminé, un code déniché dans cet article : C# .NET DNS query component qui offre les outils adéquats pour obtenir le nom du serveur mail d’un domaine, avec quelques bogues toutefois.