基本信息
源码名称:VPN拨号 示例源码(诺宾VPN)
源码大小:0.43M
文件格式:.rar
开发语言:C#
更新时间:2018-11-17
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
通过dotras.dll拨号

private static RasVpnStrategy rasstart = RasVpnStrategy.Default;
        private static RasPhoneBook pb = new RasPhoneBook();
        private static readonly string VPNNAME = "nuobin"; 
        private static RasDialer dialer = new RasDialer();
        public delegate void DialStateChangeHandler(RasDialer dialer, StateChangedEventArgs e);
        public delegate void DialAsyncCompleteHandler(RasDialer dialer, DialCompletedEventArgs e);
        public static event DialAsyncCompleteHandler DialAsyncComplete;

        static VPNConnectHelper()
        {
            pb.Open();
            dialer.EntryName = VPNNAME;
            dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
            dialer.DialCompleted = new EventHandler<DialCompletedEventArgs>(dialer_DialCompleted);
        }

        private static void CreateOrUpdateVPNEntry(string ip, string user, string pwd, string vpntype)
        {
            RasEntry entry;
            if (!pb.Entries.Contains(VPNNAME))
            {
                if (vpntype == "PPTP")
                {
                    rasstart = RasVpnStrategy.PptpOnly;
                    entry = RasEntry.CreateVpnEntry(VPNNAME, ip, rasstart, RasDevice.GetDeviceByName("(PPTP)", RasDeviceType.Vpn));
                }
                else if (vpntype == "L2TP")
                {
                    rasstart = RasVpnStrategy.L2tpOnly;
                    entry = RasEntry.CreateVpnEntry(VPNNAME, ip, rasstart, RasDevice.GetDeviceByName("(L2TP)", RasDeviceType.Vpn));
                }
                else
                {
                    rasstart = RasVpnStrategy.Default;
                    entry = RasEntry.CreateVpnEntry(VPNNAME, ip, rasstart, RasDevice.GetDeviceByName("(PPTP)", RasDeviceType.Vpn));
                }
                pb.Entries.Add(entry);
            }
            else
            {
                entry = pb.Entries[VPNNAME];
                entry.PhoneNumber = ip;
                IPAddress _ip;
                IPAddress.TryParse(ip, out _ip);
                entry.IPAddress = _ip;
            }
            NetworkCredential nc = new NetworkCredential(user, pwd);
            entry.UpdateCredentials(nc);
            entry.Update();
        }

        public static void DialAsync(string ip, string user, string pwd, string vpntype)
        {
            CreateOrUpdateVPNEntry(ip, user, pwd, vpntype);
            Disconnect();
            dialer.DialAsync();
        }

        public static void Dial(string ip, string user, string pwd, string vpntype)
        {
            CreateOrUpdateVPNEntry(ip, user, pwd, vpntype);
            Disconnect();
            dialer.Dial();
        }

        public static void CancelDialAsync()
        {
            dialer.DialAsyncCancel();
        }

        public static void Disconnect()
        {
            dialer.DialAsyncCancel();
            foreach (RasConnection conn in dialer.GetActiveConnections())
            {
                if (conn.EntryName == VPNNAME)
                {
                    conn.HangUp();
                    return;
                }
            }
        }

        private static void dialer_DialCompleted(object sender, DialCompletedEventArgs e)
        {
            DialAsyncComplete((RasDialer)sender, e);
        }
    }