//每次都去Dns服务器上获取外网IP防止Dns缓存 string cmdResult = RunCmd("nslookup " + server); string[] cmdResults = cmdResult.Split(':'); string tempIp; if (cmdResults.Length > 0) { tempIp = cmdResults[cmdResults.Length - 1].Trim(); } else { return false; }
//先清除DNS缓存 RunCmd("ipconfig /flushdns"); ips = Dns.GetHostAddresses(server); string ipCollection = string.Empty; foreach (IPAddress address in ips) { ipCollection += address.ToString(); ipCollection += ";"; } LogHelper.WriteOperationLog("解析出来的IP为:" + ipCollection); foreach (IPAddress address in ips) { try { client = new TcpClient(address.ToString(), port); if (client != null) { client.Close(); ip = address.ToString(); LogHelper.WriteOperationLog("同步IP为:" + address); break; } } catch { continue; } }
/// <summary> /// 执行命令行命令 /// </summary> /// <param name="command">命令</param> /// <returns>返回执行结果</returns> static string RunCmd(string command) { //实例一个Process类,启动一个独立进程 Process p = new Process(); //Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,下面我们用到了他的几个属性: p.StartInfo.FileName = "cmd.exe"; //设定程序名 p.StartInfo.Arguments = "/c " + command; //设定程式执行参数 p.StartInfo.UseShellExecute = false; //关闭Shell的使用 p.StartInfo.RedirectStandardInput = true; //重定向标准输入 p.StartInfo.RedirectStandardOutput = true; //重定向标准输出 p.StartInfo.RedirectStandardError = true; //重定向错误输出 p.StartInfo.CreateNoWindow = true; //设置不显示窗口 p.Start(); //启动 p.StandardInput.WriteLine("exit"); //不过要记得加上Exit要不然下一行程式执行的时候会当机 return p.StandardOutput.ReadToEnd(); //从输出流取得命令执行结果 }