连接到VPN后获取结果

时间:2014-11-05 07:31:32

标签: c# .net vpn

我可以连接到使用以下代码创建的现有VPN。

string args = string.Format("{0} {1} {2}", connVpnName, connUserName, connPassWord);
var proc = new System.Diagnostics.Process
{
    StartInfo = new System.Diagnostics.ProcessStartInfo
    {
        FileName = "C:\\WINDOWS\\system32\\rasdial.exe",
        Arguments = args,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};
proc.Start();
string output = "";
while (!proc.StandardOutput.EndOfStream)
{
    output += proc.StandardOutput.ReadLine();
    txtOutput.Text += proc.StandardOutput.ReadLine();
}

我需要知道连接是否成功,使用了错误的凭据,VPN是否不存在,或者ip是否未联机。

我的第一个想法是从命令提示中获取输出并搜索“已连接”等关键字。这种方法的问题是我的用户使用多种语言,关键字也不同。

我可以使用其他方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

使用DotRAS这个库是windows api的包装器。几乎所有功能都记录在MSDN中。

答案 1 :(得分:0)

我找到了答案:

            proc.Start();

            //het resultaat bekijken
            proc.WaitForExit();
            switch (proc.ExitCode)
            {
                case 0: //connection succeeded
                    MessageBox.Show("Je bent geconnecteerd met de VPN");
                    isConnectedVPN = true;
                    btnConnectToVPN.Text = "Stop VPN";
                    break;
                case 691: //wrong credentials
                    MessageBox.Show("De username en/of het wachtwoord kloppen niet.");
                    break;
                case 623: // The VPN doesn't excist
                    MessageBox.Show("Deze VPN staat niet tussen de bestaande VPN's.");
                    break;
                case 868: //the IP or domainname can't be found
                    MessageBox.Show("Het ip-adres of de domeinnaam kan niet gevonden worden");
                    break;
                default: //other faults
                    MessageBox.Show("fout " + proc.ExitCode.ToString());
                    break;
            }