Resolv.conf 수정으로 인해 DNS가 중단됨

Resolv.conf 수정으로 인해 DNS가 중단됨

이것은 이상한 문제이지만 해결할 수 없는 것 같습니다.

나는 Debian Wheezy(때때로 호환되는 다른 데비안 버전/파생품)의 인터넷 설정을 수정하기 위한 시각적 사용자 인터페이스를 만들고 있습니다.

사용자가 삽입한 내용에 따라 DNS를 수정할 수 있기를 원합니다.

   사용자 인터페이스

"저장"을 누른 후 다음 코드를 실행하세요.

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 ();
        }
    }

관련 부분은

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 ();
        }

resolv.conf채워진 DNS 정보로 덮어씁니다 . 입력의 예는 첫 번째 대화 상자의 "8.8.8.8", 두 번째 대화 상자의 "8.8.4.4"와 같습니다. 출력은 다음과 같습니다...

=============
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;

이 후 Google에 ping을 실행하면 "알 수 없는 호스트 google"이라고만 표시됩니다.

그러나 수동으로 가서 resolv.conf네임서버를 변경하면 실제로 문제가 해결됩니다. 어떻게 되어가나요? /etc/resolv.conf내가 알 수 있는 한, 유일한 변화는 나노 대신 코드를 통해 이 작업을 수행한다는 것입니다. 누구든지 이것을 설명할 수 있나요?

긴 이야기 짧게

수동으로 편집하는 것과 비교하여 코드 작업을 사용하여 resolv.conf를 편집하지 않는 이유는 무엇입니까? 같은 것이 아닌가?

답변1

귀하의 코드가 네임 서버 줄 끝에 세미콜론을 추가하는 것 같습니다.

관련 정보