これは奇妙な問題ですが解決できないようです。
私はDebian Wheezy(時々互換性のある他のDebianバージョン/派生品)のインターネット設定を変更するための視覚的なユーザーインターフェースを作成しています。
ユーザーが挿入した内容に応じて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」、2番目のダイアログボックスの「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
あなたのコードがネームサーバーの行の末尾にセミコロンを追加するようです。