using System; using System.Collections.Generic; using System.IO; using System.Net; namespace Example { public class MainClass { public static void Main () { string fileName = "/etc/resolv.conf"; foreach (IPAddress address in ParseResolvConf (fileName)) { Console.WriteLine ("> {0}", address.ToString ()); } } /** * ParseResolvConf: * @fileName: a path to a file containing the dns configuration. * * This method will parse the resolver information from what is * typically the resolv.conf on Unix platforms. This is one of * the few things that is pretty well standard across all Unix * implementations. * * We only care about the nameserver lines which are allowed * one host per line with an optional port. However, the framework * does not support DNS on ports other than the standard (53), so * lines with non-standard ports will be ignored. * * Example: * 192.168.0.1 # Standard Port * 192.168.0.1.55 # Use port 55 * * The later will be ignored since we must return IPAddress * structs only. * * Returns: An array of IPAddress structs containing the * successfully parsed nameservers. */ static IPAddress[] ParseResolvConf (string fileName) { List dnsServers = new List (); using (StreamReader reader = new StreamReader (fileName)) { while (!reader.EndOfStream) { string line = reader.ReadLine (); if (line.StartsWith ("nameserver ")) { string[] parts = line.Split (' '); if (parts.Length < 2) continue; parts = parts[1].Split ('.'); if (parts.Length == 4) { dnsServers.Add (IPAddress.Parse (String.Join (".", parts))); } else if (parts.Length == 5 && String.Equals (parts[4], "53")) { dnsServers.Add (IPAddress.Parse (String.Join (".", parts, 0, 4))); } } } } return dnsServers.ToArray (); } } }