Проблема с отключением OpenVpn от приложения - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь подключить удаленный сервер через openvpn, используя C #.Я могу подключить его успешно.но разъединение, кажется, не работает должным образом.Когда я закрываю свое приложение, я не могу получить доступ к Интернету.Мне нужно вручную отключить адаптер 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 используем управление.Но я не могу понять, как запустить код управления.При запуске я добавил: openvpn --config ca.ovpn --ca cert.cer --management 127.0.0.1 12345 Затем, как подать сигнал SIGTERM, чтобы закрыть openvpn.В новом cmd я попытался: openvpn --management-signal SIGTERM, но все не работает.

OpenVpn не будет установлен в качестве службы, поэтому я не могу использовать атрибут --service.

Может кто-нибудь направить меня, где я иду не так при отключении.Как обрабатывать управляющий-сигнальный код.Какой лучший способ отключиться от сервера openvpn.Могу ли я также выйти из самого openvpn?

Пожалуйста, помогите мне.Много искал в интернете и нашел какую-то помощь, но пока безуспешно.Застрял в этом вопросе.

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2011

Спасибо всем,

Я нашел решение, и вот как я преуспел:

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

Вместо того, чтобы работать с его потоком и всем, вышеприведенный код помог решить проблему.

Надеюсь, это поможет и другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...