public static void ConnectThread()
 {
     try
     {
         ms_rasdialer           = new RasDialer();
         ms_rasdialer.EntryName = ms_entryname;
         //判断是否带用户名连接
         if (ms_nc == null)
         {
             ms_rasdialer.Dial();
         }
         else
         {
             ms_rasdialer.Dial(ms_nc);
         }
     }
     catch (Exception rde)
     {
         log.Error("ADSLManger: ConnectionThread", rde);
     }
     finally
     {
         lock (connectionlocker)
         {
             Monitor.Pulse(connectionlocker);
         }
     }
 }
Example #2
0
 public void Diale(string username, string key, string connectName)
 {
     try
     {
         RasDialer dialer = new RasDialer();
         dialer.EntryName   = connectName;
         dialer.PhoneNumber = " ";
         dialer.AllowUseStoredCredentials = true;
         dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
         dialer.Credentials = new System.Net.NetworkCredential(username, key);
         dialer.Timeout     = 500;
         RasHandle myras = dialer.Dial();
         while (myras.IsInvalid)
         {
             //lb_status.Content = "拨号失败";
             OnDialeFailure?.Invoke();
         }
         if (!myras.IsInvalid)
         {
             //lb_status.Content = "拨号成功! ";
             RasConnection conn   = RasConnection.GetActiveConnectionByHandle(myras);
             RasIPInfo     ipaddr = (RasIPInfo)conn.GetProjectionInfo(RasProjectionType.IP);
             //lb_message.Content = "获得IP: " + ipaddr.IPAddress.ToString();
             OnDialeSuccess?.Invoke("获得IP: " + ipaddr.IPAddress.ToString());
             //dial.IsEnabled = false;
             //hangup.IsEnabled = true;
         }
     }
     catch (Exception e)
     {
         //lb_status.Content = "拨号出现异常";
         OnDialeExcep?.Invoke();
     }
 }
Example #3
0
        /// <summary>
        /// 初始化PPPoE拨号器
        /// </summary>
        /// <param name="connectName">连接名称</param>
        public static void Init(string connectName)
        {
            try
            {
                RasDialer    dialer    = new RasDialer();
                RasPhoneBook phoneBook = new RasPhoneBook();
                string       path      = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
                phoneBook.Open(path);

                if (phoneBook.Entries.Contains(connectName))
                {
                    phoneBook.Entries[connectName].PhoneNumber = " ";
                    phoneBook.Entries[connectName].Update();
                }
                else
                {
                    string adds = string.Empty;
                    System.Collections.ObjectModel.ReadOnlyCollection <RasDevice> readOnlyCollection = RasDevice.GetDevices();
                    RasDevice device = RasDevice.GetDevices().First(o => o.DeviceType == RasDeviceType.PPPoE);
                    RasEntry  entry  = RasEntry.CreateBroadbandEntry(connectName, device);
                    entry.PhoneNumber = " ";
                    phoneBook.Entries.Add(entry);
                }
            }
            catch (Exception e)
            {
                Utils.Log4Net.WriteLog(e.Message, e);
            }
        }
Example #4
0
        /// <summary>
        /// ADSL链接
        /// </summary>
        /// <param name="strConnName">连接名称</param>
        public bool Connect()
        {
            try
            {
                // CreateOrUpdatePPPOE(strConnName);
                RasDialer dialer = new RasDialer();
                dialer.EntryName   = ConstParameter.EntryName;
                dialer.PhoneNumber = " ";
                dialer.AllowUseStoredCredentials = true;
                dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
                dialer.Credentials = new NetworkCredential(
                    CommonParameter.ConfigParam.adsl_info.username,
                    CommonParameter.ConfigParam.adsl_info.password);
                dialer.Timeout = 1000;
                RasHandle myras = dialer.Dial();
                if (!myras.IsInvalid)
                {
                    CommonFunction.WriteLogInFile("RasDialer Success! ", LogType.RunLog);
                    return(true);
                }
            }
            catch (Exception ex)
            {
                CommonFunction.WriteLogInFile("RasDialer error!  error is :" + ex.ToString(), LogType.RunLog);
            }

            return(false);
        }
 public static void Disconnect()
 {
     try
     {
         if (ms_rasdialer != null)
         {
             ms_rasdialer.Dispose();
         }
         ms_rasdialer = new RasDialer();
         ReadOnlyCollection <RasConnection> connections = ms_rasdialer.GetActiveConnections();
         if (connections != null && connections.Count > 0)
         {
             foreach (RasConnection connection in connections)
             {
                 if (ms_entryname == connection.EntryName)
                 {
                     connection.HangUp();
                 }
             }
         }
         ms_rasdialer.Dispose();
     }
     catch (RasException re)
     {
         log.Error("ADSLManger: Disconnect", re);
     }
 }
Example #6
0
 /// <summary>
 /// Connect
 /// </summary>
 /// <param name="connection"></param>
 private void Connect(string connection)
 {
     try
     {
         CreatePPPOE(connection);
         var dialer = new RasDialer
         {
             EntryName   = connection,
             PhoneNumber = " ",
             AllowUseStoredCredentials = true,
             PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers),
             Credentials = new NetworkCredential("057111414695", "336875"),
             Timeout     = 1000
         };
         var myras = dialer.Dial();
         while (myras.IsInvalid)
         {
             Thread.Sleep(5000);
             myras = dialer.Dial();
         }
         if (!myras.IsInvalid)
         {
             Console.WriteLine($"RasDialer Success! {DateTime.Now}");
         }
     }
     catch (Exception ex)
     {
         throw new Exception($"RasDialer error! {DateTime.Now} connection error is :: {ex.ToString()}");
         //Console.WriteLine($"RasDialer error! {DateTime.Now} connection error is :: {ex.ToString()}");
     }
 }
Example #7
0
        public void CreateConnect(string ConnectName)
        {
            RasDialer    dialer = new RasDialer();
            RasPhoneBook book   = new RasPhoneBook();

            try
            {
                book.Open(RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
                if (book.Entries.Contains(ConnectName))
                {
                    book.Entries[ConnectName].PhoneNumber = " ";
                    book.Entries[ConnectName].Update();
                }
                else
                {
                    System.Collections.ObjectModel.ReadOnlyCollection <RasDevice> readOnlyCollection = RasDevice.GetDevices();
                    RasDevice device = RasDevice.GetDevices().Where(o => o.DeviceType == RasDeviceType.PPPoE).First();
                    RasEntry  entry  = RasEntry.CreateBroadbandEntry(ConnectName, device);
                    entry.PhoneNumber = " ";
                    book.Entries.Add(entry);
                }
            }
            catch (Exception)
            {
                lb_status.Content = "创建PPPoE连接失败";
            }
        }
Example #8
0
 Boolean DialUp()
 {
     try {
         using (var phoneBook = new RasPhoneBook()) {
             var name   = VpnConfig.GetConfig().ConnectionName;
             var user   = VpnConfig.GetConfig().Username;
             var pass   = VpnConfig.GetConfig().Password;
             var pbPath = VpnConfig.GetConfig().PhoneBookPath;
             phoneBook.Open(pbPath);
             var entry = phoneBook.Entries.FirstOrDefault(e => e.Name.Equals(name));
             if (entry != null)
             {
                 using (var dialer = new RasDialer()) {
                     dialer.EntryName     = name;
                     dialer.Credentials   = new NetworkCredential(user, pass);
                     dialer.PhoneBookPath = pbPath;
                     dialer.Dial();
                 }
             }
             else
             {
                 throw new ArgumentException(
                           message: "entry wasn't found: " + name,
                           paramName: "entry"
                           );
             }
         }
         return(true);
     }
     catch {
         // log the exception
         return(false);
     }
 }
Example #9
0
        private void DialButton_Click(object sender, RoutedEventArgs e)
        {
            this.StatusTextBox.Clear();

            this.dialer = new RasDialer();
            this.dialer.DialCompleted += new EventHandler <DialCompletedEventArgs>(dialer_DialCompleted);
            this.dialer.StateChanged  += new EventHandler <StateChangedEventArgs>(dialer_StateChanged);

            this.dialer.EntryName     = (string)this.ConnectionComboBox.SelectedValue;
            this.dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);

            // This allows the multi-threaded dialer to update information on the user interface without causing any threading problems.
            this.dialer.SynchronizingObject = new DispatcherSynchronizingObject(App.Current.Dispatcher);

            try
            {
                // Set the credentials the dialer should use.
                this.dialer.Credentials = new System.Net.NetworkCredential("Test", "User");

                this.handle = this.dialer.DialAsync();

                // Disable the button used to initiate dialing while the operation is in progress.
                this.DialButton.IsEnabled       = false;
                this.DisconnectButton.IsEnabled = true;
            }
            catch (Exception ex)
            {
                this.StatusTextBox.AppendText(ex.ToString());
                this.StatusTextBox.ScrollToEnd();
            }
        }
Example #10
0
        /// <summary>
        /// 测试拨号连接
        /// </summary>
        public void Connect(string RasName)
        {
            try
            {
                if (OnHandle != null)
                {
                    OnHandle(string.Format("正在拨号 {0}...", RasName));
                }

                RasDialer dialer = new RasDialer();
                dialer.EntryName   = RasName;
                dialer.PhoneNumber = " ";
                dialer.AllowUseStoredCredentials = true;
                dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
                dialer.Timeout = 1000;
                dialer.Dial();

                Thread.Sleep(100);

                if (OnHandle != null)
                {
                    OnHandle(string.Format("拨号完成"));
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(LogLevel.LOG_LEVEL_CRIT, ex, typeof(ADSLDialerUtil));
                throw;
            }
        }
Example #11
0
        /// <summary>
        /// 创建或更新一个VPN连接(指定VPN名称,及IP)
        /// </summary>
        public void CreateOrUpdateVPN(string updateVPNname, string updateVPNip)
        {
            Log.debug(TAG, "CreateOrUpdateVPN");
            RasDialer    dialer            = new RasDialer();
            RasPhoneBook allUsersPhoneBook = new RasPhoneBook();

            allUsersPhoneBook.Open();

            RasEntry entry = null;

            if (allUsersPhoneBook.Entries.Contains(updateVPNname))
            {
                entry = allUsersPhoneBook.Entries[updateVPNname];
                entry.EncryptionType = RasEncryptionType.Optional;
                entry.PhoneNumber    = updateVPNip;
                IPAddress _ip;
                IPAddress.TryParse(updateVPNip, out _ip);
                entry.IPAddress = _ip;
                entry.Options.UsePreSharedKey = true;
                entry.UpdateCredentials(RasPreSharedKey.Client, "123456");
                entry.Update();
            }
            else
            {
                entry = RasEntry.CreateVpnEntry(updateVPNname, updateVPNip, RasVpnStrategy.L2tpOnly, RasDevice.GetDeviceByName("(L2TP)", RasDeviceType.Vpn));
                entry.EncryptionType          = RasEncryptionType.Optional;
                entry.Options.UsePreSharedKey = true;
                allUsersPhoneBook.Entries.Add(entry);
                entry.UpdateCredentials(RasPreSharedKey.Client, "123456");
            }
        }
Example #12
0
        public async Task ThrowsAnExceptionWhenTheEventArgsIsNull()
        {
            var executed = false;
            var result   = new Mock <RasConnection>();

            var api = new Mock <IRasDial>();

            api.Setup(o => o.DialAsync(It.IsAny <RasDialContext>())).Returns <RasDialContext>(c =>
            {
                Assert.IsNotNull(c.OnStateChangedCallback);
                Assert.Throws <ArgumentNullException>(() => c.OnStateChangedCallback(null));

                executed = true;
                return(Task.FromResult(result.Object));
            });

            var target = new RasDialer(api.Object)
            {
                EntryName     = EntryName,
                PhoneBookPath = PhoneBookPath
            };

            await target.ConnectAsync();

            Assert.True(executed);
        }
 /// <summary>
 /// 宽带连接,成功返回true,失败返回 false
 /// </summary>
 /// <param name="PPPOEname">宽带连接名称</param>
 /// <param name="username">宽带账号</param>
 /// <param name="password">宽带密码</param>
 /// <returns></returns>
 public bool Connect(string PPPOEname, string username, string password)
 {
     log.writeLog("正在进行本地拨号", log.msgType.info);
     try
     {
         CreateOrUpdatePPPOE(PPPOEname);
         log.writeLog("创建PPPOE接口完成", log.msgType.info);
         using (RasDialer dialer = new RasDialer())
         {
             dialer.EntryName = PPPOEname;
             dialer.AllowUseStoredCredentials = true;
             dialer.Timeout       = 1000;
             dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
             dialer.Credentials   = new NetworkCredential(username, password);
             dialer.Dial();
             log.writeLog($"本地拨号成功,账号:{username}\n密码:{password}", log.msgType.error);
             return(true);
         }
     }
     catch (RasException re)
     {
         log.writeLog("本地拨号捕获到未知异常,拨号失败!", log.msgType.error);
         return(false);
     }
 }
Example #14
0
 /// <summary>
 /// 宽带连接,成功返回true,失败返回 false
 /// </summary>
 /// <param name="PPPOEname">宽带连接名称</param>
 /// <param name="username">宽带账号</param>
 /// <param name="password">宽带密码</param>
 /// <returns></returns>
 public static bool Connect(string PPPOEname, string username, string password, ref string msg, int delay = 10000)
 {
     try
     {
         CreateOrUpdatePPPOE(PPPOEname);
         using (RasDialer dialer = new RasDialer())
         {
             dialer.EntryName = PPPOEname;
             dialer.AllowUseStoredCredentials = true;
             dialer.Timeout       = 1000;
             dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
             dialer.Credentials   = new NetworkCredential(username, password);
             dialer.Dial();
             return(true);
         }
     }
     catch (RasException re)
     {
         msg = re.ErrorCode + " " + re.Message;
         return(false);
     }
     finally
     {
         Thread.Sleep(delay);
     }
 }
Example #15
0
        public Program()
        {
            dialer = new RasDialer();

            watcher = new RasConnectionWatcher();
            watcher.Disconnected += OnConnectionDisconnected;
        }
Example #16
0
        /// <summary>
        /// 创建或更新一个PPPOE连接(指定PPPOE名称)
        /// </summary>
        static void CreateOrUpdatePPPOE(string updatePPPOEname)
        {
            RasDialer    dialer            = new RasDialer();
            RasPhoneBook allUsersPhoneBook = new RasPhoneBook();
            string       path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);

            allUsersPhoneBook.Open(path);
            // 如果已经该名称的PPPOE已经存在,则更新这个PPPOE服务器地址
            if (allUsersPhoneBook.Entries.Contains(updatePPPOEname))
            {
                allUsersPhoneBook.Entries[updatePPPOEname].PhoneNumber = " ";
                // 不管当前PPPOE是否连接,服务器地址的更新总能成功,如果正在连接,则需要PPPOE重启后才能起作用
                allUsersPhoneBook.Entries[updatePPPOEname].Update();
            }
            // 创建一个新PPPOE
            else
            {
                string adds = string.Empty;
                ReadOnlyCollection <RasDevice> readOnlyCollection = RasDevice.GetDevices();
                RasDevice device = RasDevice.GetDevices().Where(o => o.DeviceType == RasDeviceType.PPPoE).First();
                RasEntry  entry  = RasEntry.CreateBroadbandEntry(updatePPPOEname, device);  //建立宽带连接Entry
                entry.PhoneNumber = " ";
                allUsersPhoneBook.Entries.Add(entry);
            }
        }
        // Token: 0x06000096 RID: 150 RVA: 0x000060EC File Offset: 0x000042EC
        public RasHandle ConnectVPNbyPriority(RasDialer myDialer, RasPhoneBook myPB, string server, string sVPNPrefix, string sLogin, string sPass, string sPath)
        {
            int       windowsVersion = this.GetWindowsVersion();
            RasHandle result         = null;

            if (windowsVersion == this.VER_XP || windowsVersion == this.VER_VISTA)
            {
                myPB = this.SetPhoneBookPPTP(server, myPB, sVPNPrefix);
            }
            else if (windowsVersion == this.VER_W7 || windowsVersion == this.VER_W8)
            {
                myPB = this.SetPhoneBookPPTP(server, myPB, sVPNPrefix);
            }
            myDialer.EntryName                 = sVPNPrefix;
            myDialer.PhoneBookPath             = sPath;
            myDialer.AllowUseStoredCredentials = true;
            try
            {
                myDialer.Credentials = new NetworkCredential(sLogin, sPass);
                result = myDialer.DialAsync();
            }
            catch (Exception ex)
            {
            }
            return(result);
        }
Example #18
0
        public void ConnectSynchronouslyWithoutACancellationToken()
        {
            var connection = new Mock <RasConnection>();

            var api = new Mock <IRasDial>();

            api.Setup(o => o.DialAsync(It.IsAny <RasDialContext>())).Returns <RasDialContext>(c =>
            {
                Assert.AreEqual(CancellationToken.None, c.CancellationToken);

                return(Task.FromResult(connection.Object));
            }).Verifiable();

            var target = new RasDialer(api.Object)
            {
                EntryName     = EntryName,
                PhoneBookPath = PhoneBookPath,
                Credentials   = new NetworkCredential("TEST", "USER")
            };

            var result = target.Connect();

            Assert.IsNotNull(result);
            api.Verify();
        }
Example #19
0
        public async Task RaisesTheEventFromTheOnStateChangedCallback()
        {
            var e      = new StateChangedEventArgs(RasConnectionState.OpenPort);
            var result = new Mock <RasConnection>();

            var api = new Mock <IRasDial>();

            api.Setup(o => o.DialAsync(It.IsAny <RasDialContext>())).Returns <RasDialContext>(c =>
            {
                Assert.IsNotNull(c.OnStateChangedCallback);
                c.OnStateChangedCallback(e);

                return(Task.FromResult(result.Object));
            });

            var raised = false;

            var target = new RasDialer(api.Object)
            {
                EntryName     = EntryName,
                PhoneBookPath = PhoneBookPath
            };

            target.StateChanged += (sender, args) =>
            {
                Assert.AreEqual(e, args);
                raised = true;
            };

            await target.ConnectAsync();

            Assert.True(raised);
        }
Example #20
0
        /// <summary>
        /// 创建或更新一个PPPOE连接(指定PPPOE名称)
        /// </summary>
        public void CreateOrUpdatePPPOE(string updatePPPOEname)
        {
            RasDialer    dialer            = new RasDialer();
            RasPhoneBook allUsersPhoneBook = new RasPhoneBook();
            string       path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);

            allUsersPhoneBook.Open(path);
            // 如果已经该名称的PPPOE已经存在,则更新这个PPPOE服务器地址
            if (allUsersPhoneBook.Entries.Contains(updatePPPOEname))
            {
                allUsersPhoneBook.Entries[updatePPPOEname].PhoneNumber = " ";
                // 不管当前PPPOE是否连接,服务器地址的更新总能成功,如果正在连接,则需要PPPOE重启后才能起作用
                allUsersPhoneBook.Entries[updatePPPOEname].Update();
            }
            // 创建一个新PPPOE
            else
            {
                string adds = string.Empty;
                ReadOnlyCollection <RasDevice> readOnlyCollection = RasDevice.GetDevices();
                //                foreach (var col in readOnlyCollection)
                //                {
                //                    adds += col.Name + ":" + col.DeviceType.ToString() + "|||";
                //                }
                //                _log.Info("Devices are : " + adds);
                // Find the device that will be used to dial the connection.
                RasDevice device = RasDevice.GetDevices().Where(o => o.DeviceType == RasDeviceType.PPPoE).First();
                RasEntry  entry  = RasEntry.CreateBroadbandEntry(updatePPPOEname, device);  //建立宽带连接Entry
                entry.PhoneNumber = " ";
                allUsersPhoneBook.Entries.Add(entry);
            }
        }
Example #21
0
        public async Task BuildsTheContextCorrectly()
        {
            var cancellationToken = CancellationToken.None;
            var credentials       = new NetworkCredential("USERNAME", "PASSWORD", "DOMAIN");
            var result            = new Mock <RasConnection>();

            var api = new Mock <IRasDial>();

            api.Setup(o => o.DialAsync(It.IsAny <RasDialContext>())).Returns <RasDialContext>(c =>
            {
                Assert.AreEqual(cancellationToken, c.CancellationToken);
                Assert.AreEqual(credentials, c.Credentials);
                Assert.AreEqual(EntryName, c.EntryName);
                Assert.AreEqual(PhoneBookPath, c.PhoneBookPath);

                return(Task.FromResult(result.Object));
            });

            var target = new RasDialer(api.Object)
            {
                Credentials   = credentials,
                EntryName     = EntryName,
                PhoneBookPath = PhoneBookPath
            };

            var connection = await target.ConnectAsync(cancellationToken);

            Assert.AreSame(result.Object, connection);
        }
Example #22
0
        /// <summary>
        /// 测试拨号连接
        /// </summary>
        private string  getNewPPPoe(string name = null)
        {
            try
            {
                if (name == null)
                {
                    name = txtBox_pppoeName.Text.Trim();
                    name = string.IsNullOrEmpty(name) ? dic_pppoeName.First().Key : name;
                }


                RasDialer dialer = new RasDialer();
                dialer.EntryName   = name;
                dialer.PhoneNumber = " ";
                dialer.AllowUseStoredCredentials = true;
                dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
                dialer.Timeout = 1000;
                dialer.Dial();

                Thread.Sleep(100);
                return(LoadConnections());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return("");
        }        /// <summary>
Example #23
0
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                    if (this._rasConnectionWatcher != null)
                    {
                        this._rasConnectionWatcher.Dispose();
                        this._rasConnectionWatcher = null;
                    }

                    if (this._rasPhoneBook != null)
                    {
                        this._rasPhoneBook.Dispose();
                        this._rasPhoneBook = null;
                    }

                    if (this._rasDialer != null)
                    {
                        this._rasDialer.Dispose();
                        this._rasDialer = null;
                    }
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }
Example #24
0
 void Btn_DialupClick(object sender, EventArgs e)
 {
     try {
         string    username = Username.Text.Replace("\\r", "\r").Replace("\\n", "\n");
         string    password = Password.Text.ToString();
         RasDialer dialer   = new RasDialer();
         dialer.EntryName   = "PPPoEDial";
         dialer.PhoneNumber = " ";
         dialer.AllowUseStoredCredentials = true;
         dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
         dialer.Credentials = new NetworkCredential(username, password);
         dialer.Timeout     = 1000;
         RasHandle myras = dialer.Dial();
         while (myras.IsInvalid)
         {
             lb_Status.Text = "拨号失败";
         }
         if (!myras.IsInvalid)
         {
             lb_Status.Text = "拨号成功! ";
             RasConnection conn   = RasConnection.GetActiveConnectionByHandle(myras);
             RasIPInfo     ipaddr = (RasIPInfo)conn.GetProjectionInfo(RasProjectionType.IP);
             lb_IPAddr.Text     = "获得IP: " + ipaddr.IPAddress.ToString();
             btn_Dialup.Enabled = false;
             btn_Hungup.Enabled = true;
         }
     } catch (Exception) {
         lb_Status.Text = "拨号出现异常";
     }
 }
Example #25
0
        /// <summary>
        /// 创建或更新一个VPN连接(指定VPN名称,及IP)
        /// </summary>
        public void CreateOrUpdateVPN(string updateVPNname, string updateVPNip)
        {
            RasDialer    dialer            = new RasDialer();
            RasPhoneBook allUsersPhoneBook = new RasPhoneBook();

            allUsersPhoneBook.Open();
            // 如果已经该名称的VPN已经存在,则更新这个VPN服务器地址
            if (allUsersPhoneBook.Entries.Contains(updateVPNname))
            {
                allUsersPhoneBook.Entries[updateVPNname].PhoneNumber = updateVPNip;
                // 不管当前VPN是否连接,服务器地址的更新总能成功,如果正在连接,则需要VPN重启后才能起作用
                allUsersPhoneBook.Entries[updateVPNname].Update();
            }
            // 创建一个新VPN
            else
            {
                //RasEntry entry = RasEntry.CreateVpnEntry(updateVPNname, updateVPNip, RasVpnStrategy.PptpFirst, RasDevice.GetDeviceByName("(PPTP)", RasDeviceType.Vpn));
                //allUsersPhoneBook.Entries.Add(entry);
                RasEntry entryL2TP = RasEntry.CreateVpnEntry(updateVPNname, updateVPNip, RasVpnStrategy.L2tpOnly, RasDevice.GetDeviceByName("(L2TP)", RasDeviceType.Vpn));

                allUsersPhoneBook.Entries.Add(entryL2TP);
                dialer.EntryName     = updateVPNname;
                dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
            }
        }
Example #26
0
 private void dial_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         string    username = tb_username.Text.Replace("\\r", "\r").Replace("\\n", "\n");
         string    password = pb_password.Password.ToString();
         RasDialer dialer   = new RasDialer();
         dialer.EntryName   = "PPPoEDialer";
         dialer.PhoneNumber = " ";
         dialer.AllowUseStoredCredentials = true;
         dialer.PhoneBookPath             = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
         dialer.Credentials = new System.Net.NetworkCredential(username, password);
         dialer.Timeout     = 500;
         RasHandle myras = dialer.Dial();
         while (myras.IsInvalid)
         {
             lb_status.Content = "拨号失败";
         }
         if (!myras.IsInvalid)
         {
             lb_status.Content = "拨号成功! ";
             RasConnection conn   = RasConnection.GetActiveConnectionByHandle(myras);
             RasIPInfo     ipaddr = (RasIPInfo)conn.GetProjectionInfo(RasProjectionType.IP);
             lb_message.Content = "获得IP: " + ipaddr.IPAddress.ToString();
             dial.IsEnabled     = false;
             hangup.IsEnabled   = true;
         }
     }
     catch (Exception)
     {
         lb_status.Content = "拨号出现异常";
     }
 }
 /// <summary>
 /// Utility class for managing windows connections e.g. VPN or dial up connections.
 /// </summary>
 /// <param name="tag">Any object to be used as a state bag.</param>
 public RasConnectionManagerWindows(object tag)
 {
     _tag       = tag;
     _rasDialer = new RasDialer();
     _rasDialer.StateChanged  += _rasDialer_StateChanged;
     _rasDialer.DialCompleted += _rasDialer_DialCompleted;
     _rasPhoneBook             = new RasPhoneBook();
 }
Example #28
0
        public void Open()
        {
            if (String.IsNullOrEmpty(connectionName))
            {
                return;
            }

            lock (sync) {
                //если две нитки используют один RasHelper и одна уже получила ссылку
                if (connectionRef != Disposable.Empty)
                {
                    return;
                }
                //если соединение есть и его открыли мы тогда берем ссылку
                if (connection != null && !connection.IsDisposed)
                {
                    connectionRef = connection.GetDisposable();
                    return;
                }

                //если соединение открыли не мы, тогда выходим
                if (RasConnection.GetActiveConnections().Any(c => c.EntryName == connectionName))
                {
                    return;
                }

                string phonebookPath = null;
                foreach (var path in GetPhoneBooks())
                {
                    using (var book = new RasPhoneBook()) {
                        book.Open(path);
                        if (book.Entries.Any(e => e.Name.Match(connectionName)))
                        {
                            phonebookPath = book.Path;
                        }
                    }
                }

                if (phonebookPath == null)
                {
                    log.Warn($"Не удалось найти соединение {connectionName}, удаленное соединение устанавливаться не будет");
                    return;
                }

                using (var dialer = new RasDialer()) {
                    dialer.PhoneBookPath = phonebookPath;
                    dialer.EntryName     = connectionName;
                    var handle = dialer.Dial();

                    var rasConnection = RasConnection.GetActiveConnections().FirstOrDefault(c => c.Handle == handle);
                    connection    = new RefCountDisposable(Disposable.Create(() => rasConnection?.HangUp()));
                    connectionRef = connection.GetDisposable();
                    connection.Dispose();
                }
            }
        }
Example #29
0
        public void DisposesTheApiAsExpected()
        {
            var api = new Mock <IRasDial>();

            var target = new RasDialer(api.Object);

            target.Dispose();

            api.Verify(o => o.Dispose(), Times.Once);
        }
Example #30
0
        public void IndicatesTheObjectIsNotBusyAsExpected()
        {
            var api = new Mock <IRasDial>();

            api.Setup(o => o.IsBusy).Returns(false);

            var target = new RasDialer(api.Object);

            Assert.False(target.IsBusy);
        }
Example #31
0
        public static void ClassInitialize(TestContext context)
        {
            entryName = Guid.NewGuid().ToString();
            phonebookPath = Path.GetTempFileName();

            RasPhoneBook pbk = new RasPhoneBook();
            pbk.Open(phonebookPath);

            entryId = TestUtilities.CreateValidVpnEntry(pbk, entryName);

            using (RasDialer dialer = new RasDialer())
            {
                dialer.EntryName = entryName;
                dialer.PhoneBookPath = phonebookPath;
                dialer.Credentials = TestUtilities.GetValidCredentials();

                handle = dialer.Dial();
            }

            target = RasConnection.GetActiveConnectionById(entryId);
        }