/// <summary> /// 是否连接上VPN服务器 /// </summary> /// <param name="vpnAccount">VPN服务器供应账号信息</param> /// <param name="vpnServer">VPN服务器信息</param> /// <returns>返回连接结果</returns> public bool IslinkVpnServer(MVPNAccount vpnAccount, MVPNServer vpnServer) { bool linkResult = false; VpnHelper = new VPNHelper(vpnServer.Address, vpnServer.Area + vpnServer.Line, VpnAccount.Account, VpnAccount.Password); bool createOrUpdateResult = VpnHelper.CreateOrUpdateVPN(); if (createOrUpdateResult) { ////连接VPN linkResult = VpnHelper.TryConnectVPN(); if (linkResult) { DateTime startTime = DateTime.Now; string testLinkInfo = new TestLink().GetPingStr("www.baidu.com", 32, 200, 3); if (testLinkInfo.Contains("100% 丢失")) { ////访问超时,也认为IP不可用 ////记录交互日志 string request = "VPN通道名称:" + vpnServer.Area + vpnServer.Line + ";VPN账号:" + vpnAccount.Account; RecordLog.RecordInteractionLog(vpnAccount.Account, "连接VPN成功后,测试请求外网", request, testLinkInfo, DateTime.Now.Subtract(startTime), vpnServer.Address); linkResult = false; } MessagePipe.ExcuteWriteMessageEvent(testLinkInfo, Color.Green, false); } } return(linkResult); }
/// <summary> /// 获取账号 /// </summary> /// <param name="isneedLock">是否需要锁</param> private void GetVpnAccount(ref bool isneedLock) { ////程序允许就马上去锁定一个账号 VpnInfo vpnInfo = new VpnInfo(); ////随机取账号之前,把原来的账号状态还原 if (VpnAccount != null) { vpnInfo.ReleaseVpnAccountState(VpnAccount); } ////先用本机IP取获取一个账号,因为有可能前面本机锁定了一个账号 ////后来本机出了异常,程序启动需要重新去取一次这个账号 MVPNAccount temp = vpnInfo.GetVpnAccountByIP(); if (temp != null && !string.IsNullOrEmpty(temp.KeyID)) { isneedLock = false; } else { ////通过IP没有拿到账号,那就随机取一个账号 temp = vpnInfo.GetVpnAccount(); } if (temp != null && VpnAccount != null && VpnAccount.KeyID == temp.KeyID) { ////说明又拿到同一个账号了,看能否重新获取一个 VpnAccount = vpnInfo.GetNewVpnAccount(temp.Provider); } else { VpnAccount = temp; } }
/// <summary> /// 释放VPN账号 /// </summary> /// <param name="vpnAccount">vpn账号对象信息</param> /// <returns>返回释放结果</returns> public bool ReleaseVpnAccountState(MVPNAccount vpnAccount) { IVPNAccount ivpnAccount = Better517Na.VPNDataService.Factory.DALFactory.GetVpnAccountDal(Better517Na.VPNDataService.Factory.DBOperType.write); MModelBase mmb = new MModelBase(); mmb.AddConditionFields("KeyID", vpnAccount.KeyID); mmb.AddUpdateFields("IsUsing", 0); mmb.AddUpdateFields("IsUsingDesc", "未使用"); mmb.AddUpdateFields("UsingServer", string.Empty); return(ivpnAccount.Update <MVPNAccount>(vpnAccount, mmb) > 0); }
/// <summary> /// 更新VPN账号状态 /// </summary> /// <param name="vpnAccount">vpn账号对象信息</param> /// <returns>返回更新结果</returns> public bool UpdateVpnAccountState(MVPNAccount vpnAccount) { IVPNAccount ivpnAccount = Better517Na.VPNDataService.Factory.DALFactory.GetVpnAccountDal(Better517Na.VPNDataService.Factory.DBOperType.write); MModelBase mmb = new MModelBase(); mmb.AddConditionFields("KeyID", vpnAccount.KeyID); mmb.AddUpdateFields("IsUsing", 1); mmb.AddUpdateFields("IsUsingDesc", "使用中"); mmb.AddUpdateFields("UsingServer", new GetIP().GetLocalIp("本地连接")); return(ivpnAccount.Update <MVPNAccount>(vpnAccount, mmb) > 0); }
/// <summary> /// 获取一个VPN账号 /// </summary> /// <returns>返回账号</returns> public MVPNAccount GetVpnAccount() { MVPNAccount vpnAccount = null; IVPNAccount ivpnAccount = Better517Na.VPNDataService.Factory.DALFactory.GetVpnAccountDal(Better517Na.VPNDataService.Factory.DBOperType.read); MModelBase mmb = new MModelBase(); mmb.AddConditionFields("IsValid", 1); mmb.AddConditionFields("IsDelete", 0); mmb.AddConditionFields("IsUsing", 0); mmb.AddUpdateFields("KeyID", null); mmb.AddUpdateFields("Account", null); mmb.AddUpdateFields("Password", null); mmb.AddUpdateFields("Provider", null); vpnAccount = ivpnAccount.GetModel <MVPNAccount>(mmb); return(vpnAccount); }
/// <summary> /// 是否连接上VPN服务器 /// </summary> /// <param name="vpnAccount">VPN服务器供应账号信息</param> /// <param name="vpnServer">VPN服务器信息</param> /// <returns>返回连接结果</returns> public bool IslinkVpnServer(MVPNAccount vpnAccount, MVPNServer vpnServer) { bool linkResult = false; VpnHelper = new VPNHelper(vpnServer.Address, vpnServer.Area + vpnServer.Line, VpnAccount.Account, VpnAccount.Password); bool createOrUpdateResult = VpnHelper.CreateOrUpdateVPN(); if (createOrUpdateResult) { ////连接VPN linkResult = VpnHelper.TryConnectVPN(); if (linkResult) { DateTime startTime = DateTime.Now; string testLinkInfo = new TestLink().GetPingStr("www.baidu.com", 32, 200, 3); if (testLinkInfo.Contains("100% 丢失")) { ////访问超时,也认为IP不可用 ////记录交互日志 string request = "VPN通道名称:" + vpnServer.Area + vpnServer.Line + ";VPN账号:" + vpnAccount.Account; RecordLog.RecordInteractionLog(vpnAccount.Account, "连接VPN成功后,测试请求外网", request, testLinkInfo, DateTime.Now.Subtract(startTime), vpnServer.Address); linkResult = false; } MessagePipe.ExcuteWriteMessageEvent(testLinkInfo, Color.Green, false); } } return linkResult; }
/// <summary> /// 更新VPN账号状态 /// </summary> /// <param name="vpnAccount">vpn账号对象信息</param> /// <returns>返回更新结果</returns> public bool UpdateVpnAccountState(MVPNAccount vpnAccount) { IVPNAccount ivpnAccount = Better517Na.VPNDataService.Factory.DALFactory.GetVpnAccountDal(Better517Na.VPNDataService.Factory.DBOperType.write); MModelBase mmb = new MModelBase(); mmb.AddConditionFields("KeyID", vpnAccount.KeyID); mmb.AddUpdateFields("IsUsing", 1); mmb.AddUpdateFields("IsUsingDesc", "使用中"); mmb.AddUpdateFields("UsingServer", new GetIP().GetLocalIp("本地连接")); return ivpnAccount.Update<MVPNAccount>(vpnAccount, mmb) > 0; }
/// <summary> /// 释放VPN账号 /// </summary> /// <param name="vpnAccount">vpn账号对象信息</param> /// <returns>返回释放结果</returns> public bool ReleaseVpnAccountState(MVPNAccount vpnAccount) { IVPNAccount ivpnAccount = Better517Na.VPNDataService.Factory.DALFactory.GetVpnAccountDal(Better517Na.VPNDataService.Factory.DBOperType.write); MModelBase mmb = new MModelBase(); mmb.AddConditionFields("KeyID", vpnAccount.KeyID); mmb.AddUpdateFields("IsUsing", 0); mmb.AddUpdateFields("IsUsingDesc", "未使用"); mmb.AddUpdateFields("UsingServer", string.Empty); return ivpnAccount.Update<MVPNAccount>(vpnAccount, mmb) > 0; }