我想使用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信号代码。 哪个是从openvpn服务器断开连接的最佳方式。我还可以退出openvpn吗?
请帮助我。在互联网上搜索了很多,发现了一些帮助,但尚未成功。坚持这个问题。
由于
答案 0 :(得分:0)
感谢所有人,
我找到了解决方案,这就是我的成功:
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.StartsWith("openvpn"))
{
p.Kill();
Console.WriteLine("Killed Process");
break;
}
}
上述代码没有使用其主题和所有代码,而是帮助解决了这个问题。
我希望这也有助于其他人。