在管理个人内网站点时,希望能够验证域名是否正确地委托给了指定的服务器。这个站点是用ASP.NET4.5RC框架编写的。任务是验证域名是否正确地委托给了具有有效A记录的服务器,这些服务器可能是服务器,也可能是外部托管的服务器。
使用system.net程序集来查询域名记录相对简单,但是使用它来查询外部名称服务器的委托就有些麻烦了。因此,决定简单地使用Windows内置的nslookup工具,这个工具自Windows 2000以来就可用(也许更早)。
在IIS线程中调用可执行文件总是有风险的,但由于只有使用它,所以一个快速的hack是足够的。
因此,编写了一个函数(或者扩展了一个相当流行的代码片段),它简单地调用nslookup并返回结果的完整文本。然后可以解析这个文本以检索名称服务器和其他详细信息,这取决于需求。
Function RunCmd(
ParamArray
commands
As
String()
) As
String
Dim
returnvalue
As
String
= String.Empty
Dim
info
As
New
ProcessStartInfo(
"cmd"
)
info.UseShellExecute =
False
info.RedirectStandardInput =
True
info.RedirectStandardOutput =
True
info.CreateNoWindow =
True
Using
process__1
As
Process = Process.Start(info)
Dim
sw
As
StreamWriter = process__1.StandardInput
Dim
sr
As
StreamReader = process__1.StandardOutput
For
Each
command
As
String
In
commands
sw.WriteLine(command)
Next
sw.Close()
returnvalue = sr.ReadToEnd()
End Using
Return
returnvalue
End Function
public
string
RunCmd(
params
string[] commands) {
string
returnvalue =
string
.Empty;
ProcessStartInfo info =
new
ProcessStartInfo(
"cmd"
);
info.UseShellExecute =
false;
info.RedirectStandardInput =
true;
info.RedirectStandardOutput =
true;
info.CreateNoWindow =
true;
using
(Process process__1 = Process.Start(info)) {
StreamWriter sw = process__1.StandardInput;
StreamReader sr = process__1.StandardOutput;
foreach
(
string
command
in
commands) {
sw.WriteLine(command);
}
sw.Close();
returnvalue = sr.ReadToEnd();
}
return
returnvalue;
}
调用这个函数非常简单:
VB -
Dim results As String = RunCmd(“google.com.au 8.8.8.8”)
C#
-
string results = RunCmd(“google.com.au 8.8.8.8”);
第一个组件是域名,第二个是想要查询的名称服务器。