Cisco VPN客户端版本4.8

时间:2009-02-17 02:39:30

标签: c# vpn cisco

有没有办法使用C#创建服务来检查此客户端是否打开?

我需要设法自动化检查。

2 个答案:

答案 0 :(得分:3)

此客户端的问题是其GUI组件“vpngui.exe”可以终止(未列在进程列表中),但它已建立的网络接口将保持打开状态。

因此,您的服务无法简单地检查名为vpngui.exe的进程是否处于活动状态并且正在启动,首先您必须检测网络接口是否已启动。您可以通过检查显示隧道是否处于活动状态的注册表项(有关详细信息,请参阅我的其他帖子之一)或检查是否存在所述接口(再次查看我的其他帖子)来实现此目的。 p>

所以,你需要做的是 1)检查隧道是否有效 2)(可选)检查GUI是否处于活动状态

然后您可以决定下一步该做什么,例如您可以使用cisco VPN客户端CLI界面(或任何其他基于Windows的选项)禁用网络界面,然后终止gui。之后,您可以使用CLI界面启动VPN客户端的新实例,该实例将自动连接到您提供的帐户/ l​​ogin / pcf作为CLI命令的参数。

下面是一些代码:这将检查故事的GUI部分是否存在:

 Process[] processlist = Process.GetProcesses();
 string theProcessThatISeekIs = "";
                foreach (Process theprocess in processlist)  
                {
                    if (theprocess.ProcessName.ToString().ToLower() == NameOfTheProcessYouSeek.ToLower())
                    {

                        theProcessThatISeekIs = theprocess.ProcessName.ToString();
                        break;
                    }
                }

以下代码将返回CISCO正在使用的网络接口的名称,如果它返回“NotFound”,则接口关闭。

string retVal = "";
        var nic = NetworkInterface
                  .GetAllNetworkInterfaces()
                  .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback && i.NetworkInterfaceType != NetworkInterfaceType.Tunnel && i.Description == "Cisco Systems VPN Adapter");
        var name = nic.FirstOrDefault();
        if (name != null)
        {
            retVal = name.Name.ToString();

        }
        else
        {
            retVal = "NotFound";
        }
        return retVal;

使用这两个片段,你应该能够很好地构建问题的解决方案。

答案 1 :(得分:2)

如果窗口打开(不需要对焦)您可以使用user32.dll中的FindWindow窗口调用来检查窗口。剪切下面的代码并放在正确的位置(使用,定义dllimport和实际代码)。这将告诉您窗口是否打开,您可以使用Windows调用进行更多操作。

using System.Runtime.InteropServices;

[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)] static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

IntPtr hWnd = FindWindowByCaption(IntPtr.Zero,"Cisco vpn title here");
if(hWnd.ToInt64() == 0){
    Console.WriteLine("ERROR Could not find cisco vpn.");
}else{
    Console.WriteLine("Handle found");
}