所以我有一个按钮和两个文本框。 我想单击一个按钮,它将执行nslookup,然后我要:
-write the resolved hostname into one text box
-write the resolved ip adress into next text box
到目前为止,我已经拥有
System.Diagnostics.Process p = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
psi.FileName = "nslookup.exe";
psi.Arguments = "google.com";
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = false;
p.StartInfo = psi;
p.Start();
p.WaitForExit();
System.IO.StreamReader output = p.StandardOutput;
textbox1.Text = output.ReadToEnd().ToString();
现在,它执行解析并将所有内容写入一个字符串。 如何过滤输出字符串并将字符串的特定部分写入单独的框中?
示例输出字符串将为:(这是一个单行字符串,但为了便于理解,我将其写在表中)
Server: EXAMPLE //this i dont need
Address: EXAMPLE //this i dont need
Name: google.com //i need this to be written to TextBox1
Address: 172.217.21.206 //i need this to be written to TextBox2
所以最后:
Textbox.Text = "google.com"
Textbox2.Text = "172.217.21.206"
稍后我想对textbox2中的ip进行ping操作,并在文本框可访问的情况下使文本框更改颜色,并在其可访问的情况下将rdp的按钮连接到该ip,因此我需要它没有任何空格并且只是一个字符串
我当时正在考虑将每个由空格分隔的单词写成一个数组,然后读取该数组并将匹配的内容写到类似这样的框中:
string[] words = outputstring.Split(' ');
foreach (var word in words)
{
System.Console.WriteLine($"<{word}>");
}
但是在我继续之前,我想问一问是否有更简便,更快捷的方法来实现这一目标,而我却一起走错了方向?也许有一种方法可以从nslookup命令中返回特定的参数?
答案 0 :(得分:2)
您可以使用Dns.GetHostEntry来代替手动调用外部进程:
IPHostEntry hostInfo = Dns.GetHostEntry("example.com");
textbox1.Text = hostInfo.HostName;
textbox2.Text = hostInfo.AddressList[yourIndex].ToString();
答案 1 :(得分:0)
正则表达式可以在这里为您提供帮助。检索名称的方法如下,因为该地址将是类似的:
Regex.Match(text, @"Name: *(?<name>[^ ]+)").Groups["name"].Value