1

我正在尝试使用 C# 通过 openvpn 连接远程服务器。我能够成功连接它。但断开连接似乎无法正常工作。一旦我关闭我的应用程序,我就无法访问互联网。我必须手动禁用 TAP 适配器,然后启用以再次执行该应用程序。我检查了我的“路线打印”,是的,Tap 领先于互联网,因此无法访问网络。

我连接使用: openvpn --config client.ovpn --ca certificate.cer --auth-user-pass user.txt

我的断开代码是:

    public void DisconnectServer()
    {
        // Write the logs
        if (sb != null)
            IOUtility.WriteToFile(sb.ToString(), "ConnectionLogs.log");
        processInfo = null;
        if (process != null)
        {
            //process.Close();
            if (!process.HasExited)
            {
                process.CancelOutputRead();
                ProcessThreadCollection ptc = process.Threads;
                Console.WriteLine("////// PROCESSED THREAD = " + ptc.Count);
                for (int i = 0; i > ptc.Count; i++)
                {
                    ProcessThread pt = ptc[i];
                    pt.Dispose();
                    ptc.Remove(pt);
                    Console.WriteLine("REmoed Thread @ " + i);
                }
                process.CloseMainWindow();
                process.Kill();
            }
        }

        sb = null;
        connected = false;
    }

在网上搜索这个问题,我发现使用管理安全退出openvpn。但我无法确定如何运行 managemetn 代码。开始时我添加了: openvpn --config ca.ovpn --ca cert.cer --management 127.0.0.1 12345 然后如何给出SIGTERM信号来关闭openvpn。在新的 cmd 中,我尝试了: openvpn --management-signal SIGTERM 但事情不起作用。

OpenVpn 不会作为服务安装,所以我猜不能使用 --service 属性。

谁能指导我断开连接时哪​​里出错了。如何处理 managemetn-signal 代码。这是从 openvpn 服务器断开连接的最佳方法。我也可以退出 openvpn 本身吗?

请帮助我。在互联网上搜索了很多,找到了一些帮助,但还没有成功。卡在这个问题上。

谢谢

4

1 回答 1

1

谢谢大家,

我找到了解决方案,这就是我成功的方式:

            foreach (Process p in Process.GetProcesses())
        {
            if (p.ProcessName.StartsWith("openvpn"))
            {
                p.Kill();
                Console.WriteLine("Killed Process");
                break;
            }
        }

上面的代码没有使用它的线程和所有东西,而是帮助解决了这个问题。

我希望这对其他人也有帮助。

于 2011-02-17T13:11:53.000 回答