/// <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;
            }
        }
Exemple #3
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);
        }
Exemple #4
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);
        }
Exemple #5
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;
        }
Exemple #7
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;
        }
Exemple #8
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;
        }