A modificação de Resolv.conf quebra o DNS [fechado]

2

Isto é estranho, mas parece que não consigo resolvê-lo.

Estou criando uma interface de usuário visual para modificar as configurações de internet no Debian Wheezy (e outras versões / derivações da Debian que sejam compatíveis a propósito).

Eu quero poder modificar o DNS com base no que o usuário insere.

Depoisque"Salvar" é pressionado, este código é executado:

void SaveDNSButton_event(object obj, ButtonPressEventArgs args)
    {
        //save dns settings
        string s1 = "";
        string s2 = "";

        string toWrite = s1 + s2;
        Console.WriteLine ("=============");
        Console.WriteLine ("Reading from resolv.conf before writing...");
        using (StreamReader confReader = File.OpenText ("/etc/resolv.conf")) {
            StringReader sr = new StringReader (confReader.ReadToEnd ());
            string line;
            toWrite = "";
            while (null != (line = sr.ReadLine ())) {
                if (line.Contains ("nameserver")) {
                    Console.WriteLine (line);
                } else {
                    toWrite += line + Environment.NewLine;
                }
            }
            confReader.Dispose ();
            confReader.Close ();
        }

        s1 = "nameserver " + DNSentry1.Text + ";" + Environment.NewLine;
        s2 = "nameserver " + DNSentry2.Text + ";" +  Environment.NewLine;


        Console.WriteLine ("=============");
        Console.WriteLine ("Writing to resolv.conf");
        Console.WriteLine ("To write: " + toWrite + s1 + s2);

        using (StreamWriter confWriter = new StreamWriter ("/etc/resolv.conf", false)) {
            Console.WriteLine ("Writing...");
            confWriter.Write (toWrite + s1 + s2);
            Console.WriteLine ("Closing file stream...");
            confWriter.Dispose ();
            confWriter.Close ();
        }


        Console.WriteLine ("=============");

        Console.WriteLine ("Opening conf to confirm if it worked");
        if (IsLinux) {
            Console.WriteLine ("Trying to open conf");
            StreamReader file = File.OpenText ("/etc/resolv.conf");
            string s = file.ReadToEnd ();
            Console.WriteLine(s);

            file.Dispose ();
            file.Close ();
        }
    }

A parte relevante é

using (StreamWriter confWriter = new StreamWriter ("/etc/resolv.conf", false)) {
            Console.WriteLine ("Writing...");
            confWriter.Write (toWrite + s1 + s2);
            Console.WriteLine ("Closing file stream...");
            confWriter.Dispose ();
            confWriter.Close ();
        }

Em que eu sobrescrevo resolv.conf com as informações de DNS preenchidas. Um exemplo de entrada para isso seria algo como "8.8.8.8" na primeira caixa de diálogo e "8.8.4.4" na segunda. A saída seria ...

=============
Reading from resolv.conf before writing...
nameserver 192.168.2.101
nameserver 8.8.8.8
=============
Writing to resolv.conf
To write: # Generated by NetworkManager
domain trin-it.local
search trin-it.local
nameserver 8.8.8.8;
nameserver 8.8.4.4;

Writing...
Closing file stream...
=============
Opening conf to confirm if it worked
4
Trying to open conf
# Generated by NetworkManager
domain trin-it.local
search trin-it.local
nameserver 8.8.8.8;
nameserver 8.8.4.4;

Se eu pingar no google depois disso, ele diz apenas: "host desconhecido do google"

NO ENTANTO, se eu for manualmente para resolv.conf e alterar os servidores de nomes lá, eles serão resolvidos corretamente. O que há com isso? A única mudança é que eu faço isso através de código em vez de apenas nano /etc/resolv.conf , tanto quanto eu posso dizer. Alguém pode lançar alguma luz sobre isso?

TL; DR

Por que editar o resolv.conf com o código NÃO funciona ao contrário de editá-lo manualmente? Não seria a mesma coisa?

    
por HeatPhoenix 10.06.2015 / 14:47

1 resposta

2

Parece-me que o seu código está adicionando um ponto e vírgula ao final da linha do servidor de nomes; não faça isso.

    
por 10.06.2015 / 15:30