C#实现ADSL断开链接或者拨号

原创 2017年08月24日 21:14:35

同理,需要换IP,如果是直接拨号上网的话,可以考虑使用这个方法来更换IP,不过效果不是特别好,网络运营商好多都是就给你分配那几个IP地址,用过了就没用了。。


将就用一下吧



首先需要引用 

using DotRas;
可以在NuGet里找到,根据系统版本来引用
我是Win10系统,用的Win8版本的 可用


ADSL类


代码:


using DotRas;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;

namespace Base
{

    /// <summary>
    /// 断开
    /// </summary>
    public static class Adsl
    {
        /// <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();
                //                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);
            }
        }

        /// <summary>
        /// 断开 宽带连接
        /// </summary>
        public static void Disconnect()
        {
            ReadOnlyCollection<RasConnection> conList = RasConnection.GetActiveConnections();
            foreach (RasConnection con in conList)
            {
                con.HangUp();
            }
        }

        /// <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)
        {
            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;
            }
        }
    }
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013542549/article/details/77542189

使用C#实现ADSL自动拨号

在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法. 1、最简单的方法:使用RasDial命令 RasDial是Win...
  • PanVSoft
  • PanVSoft
  • 2015-03-29 22:41:21
  • 409

C++ RasDial之调用RasEnumEntries遍历系统中存在的宽带连接名称

#include #include #include "ras.h" #include "raserror.h" #pragma comment(lib, "rasapi32.lib") usi...
  • Semaphores
  • Semaphores
  • 2014-11-13 03:42:38
  • 1544

C# ADSL重新连接、拨号

using System; using System.Collections.Generic; using System.Text; using System.Timers; using System...
  • zuoyefeng1990
  • zuoyefeng1990
  • 2017-05-02 09:25:18
  • 447

Qt实现Rasdial宽带拨号

最近,由于项目需求,需要通过不断拨号来实现切换ip。 当然,最简单的方法就是使用Rasdial来进行拨号。 一开始是采用双管道方法来做,但是会出现黑框框。然后我就想用 ShellExecuteA 函数...
  • WU5151
  • WU5151
  • 2015-07-31 20:43:04
  • 1341

编程控制Modem/PPPoE拨号连接

在Windows中拨号上网(包括MODEM和PPPoe),一般都是用Windows平台提供的的Remote Access Service(RAS,远程访问服务):http://msdn.microso...
  • jiangsheng
  • jiangsheng
  • 2005-01-23 01:41:00
  • 3036

整理一下用得着的链接

http://www.embedworld.com/http://c-faq.com/Cross-Referencing Linux(基于lxr的linux源码阅读,emacs的etags不好使的时候...
  • dozec
  • dozec
  • 2006-07-20 17:17:00
  • 17825

利用DotRas实现ADSL断线并自动拨号

C#自动换IP,很多都是要弹拨号窗口的,利用dotras可以实现不弹窗 using DotRas;        private bool changeip()         {     ...
  • rztyfx
  • rztyfx
  • 2011-10-26 14:56:59
  • 4641

adsl批处理 自动断开拨号 换IP

adsl批处理 自动断开拨号 换IP@echo offrem 设置名称,帐号,密码set adslmingzi=输入你的宽带连接名字(右键网络邻居, 属性, 就可以看到, 例如adsl 宽带连接)se...
  • her0z
  • her0z
  • 2010-04-16 21:20:00
  • 2474

宽带上网中,radius登录的端口绑定的意义

宽带上网的端口绑定是指用户从某一个DSLAM的某个端口上线,DSLAM需要启用PPPoE+功能,启用后,DSLAM侦听到PPPoE协议流量,自动会将用户上到DSLAM的端口信息通过PPPoE+协议通告...
  • wushi0101
  • wushi0101
  • 2017-05-04 14:23:41
  • 225

C/C++面试题(二)

1、写一个“ 标准” 宏 MIN #define MIN(a,b) ((a) 注意:在调用时一定要注意这个宏定义的副作用,如下调用: ((++*p) p 指针就自加了两次,违背了 MIN 的本意。 ...
  • u012942555
  • u012942555
  • 2015-08-26 16:58:22
  • 505
收藏助手
不良信息举报
您举报文章:C#实现ADSL断开链接或者拨号
举报原因:
原因补充:

(最多只允许输入30个字)