在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → VPN项目源码下载

VPN项目源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:1.35M
  • 下载次数:110
  • 浏览次数:1203
  • 发布时间:2015-08-05
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: VPN

实例介绍

【实例简介】

【实例截图】

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Ro4ters;
using System.Net;
using System.IO;
using System.Threading;
using DotRas;
using VpnSec.Ro4ters;
namespace VpnSec
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// 更新状态栏委托
        /// </summary>
        /// <param name="tsl">某个标签</param>
        /// <param name="Msg">更新的信息</param>
        public delegate void UpdateTsl(ToolStripStatusLabel tsl, string Msg);
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }
        /// <summary>
        /// 更新ToolStripStatusLabel委托变量
        /// </summary>
        UpdateTsl uptls;
        VpnClient vclient = new VpnClient();
        List<MyUser> ulist = new List<MyUser>();
        List<vpnServer> vpnlist = new List<vpnServer>();
        public string vpnoneclickurl = "http://www.vpnoneclick.com";
        public string kryptotelurl = "http://ssl.kryptotel.net";
        public string kryptotelurlbackup = "http://ssl7.kryptotel.net";
        /// <summary>
        /// 更新状态栏方法
        /// </summary>
        /// <param name="tsl">某个标签</param>
        /// <param name="Msg">更新的信息</param>
        private void updateTsl(ToolStripStatusLabel tsl, string Msg)
        {
            tsl.Text = Msg;
            tsl.ForeColor = Color.Red;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            vclient.ClientException  = client_ClientException;
            vclient.ClientMassage  = client_ClientMassage;
            vclient.ConnectionStatusChanged  = client_ConnectionStatusChanged;
            vclient.ClientDialCompleted  = new VpnClient.ClientDialCompletedHandler(client_ClientDialCompleted);
            initData();
            uptls = new UpdateTsl(updateTsl);
            GetIp();
            StartTime();
        }
        /// <summary>
        /// 获取当前IP
        /// </summary>
        private void GetIp()
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                if (vclient.updateIpaddress())
                {
                    uptls(this.tlsMyIpaddress, vclient.publicIpAddress);
                }
            });
        }
        void AppendText(string message)
        {
            if (lvi != null)
            {
                lvi.SubItems[8].Text = message;
            }
        }
        void client_ClientDialCompleted(object sender, DialCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                SetNi("操作已取消");
                AppendText("操作已取消");
            }
            else if (e.TimedOut)
            {
                SetNi("操作超时");
                StopTime();
                AppendText("操作超时");
            }
            else if (e.Error != null)
            {
                AppendText("操作时遇到错误:"   e.Error.Message);
                SetNi("操作时遇到错误:"   e.Error.Message);
            }
            else if (e.Connected)
            {
                SetNi("["   DateTime.Now.ToShortTimeString()   "] "   "VPN已连接");
                StartTime();
                AppendText("VPN已连接");
                GetIp();

            }
            if (!e.Connected)
            {
                SetNi("["   DateTime.Now.ToShortTimeString()   "] "   "VPN已断开");
                AppendText("VPN已断开");
                StopTime();
            }

        }
        private void client_ConnectionStatusChanged(DotRas.RasConnectionState connectionState)
        {
            SetNi(connectionState.ToString());
            AppendText(connectionState.ToString());
        }

        private void client_ClientException(Exception ex)
        {
            SetNi(ex.ToString());
            AppendText(ex.ToString());

        }
        private void client_ClientMassage(string message)
        {
            SetNi(message);
            AppendText(message);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

            //直接释放托管资源
            this.notifyIcon1.Visible = false;
            base.Dispose(true);
        }

        private void 关于软件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("\r I Hope Free.!\n"   "\r By : Ro4ters \n\r Mail:Ro4ters@foxmail.com", "And Your ?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

        }

        private void 退出程序ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.notifyIcon1.Visible = false;
            base.Dispose(true);
        }
        //最小化事件
        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide();
                this.notifyIcon1.Visible = true;
                SetNi("Hi~ 我在这里...");
            }

        }
        /// <summary>
        /// 设置气泡
        /// </summary>
        /// <param name="msg"></param>
        private void SetNi(string msg)
        {
            notifyIcon1.ShowBalloonTip(1000, "Info", msg, ToolTipIcon.Info);
        }
        //单击显示软件事件
        private void 显示软件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Visible = true;
            this.notifyIcon1.Visible = false;
            this.WindowState = FormWindowState.Normal;

        }
        //双单击任务栏图标事件
        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
            this.notifyIcon1.Visible = false;
        }


        /// <summary>
        /// 初始化数据
        /// </summary>
        private void initData()
        {

            vpnlist.Add(new vpnServer("澳大利亚", "VPN-Australian", "ip-au.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("加拿大", "VPN-CA", "ip-ca.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("埃及", "VPN-EG", "ip-eg.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("法国", "VPN-FR", "ip-fr.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("德国", "VPN-DE", "ip-de.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("香港", "VPN-HK", "ip-hk.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("印度", "VPN-IN", "ip-in.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("意大利", "VPN-IT", "ip-it.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("荷兰", "VPN-NL", "ip-nl.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("俄罗斯", "VPN-RU", "ip-ru.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("新加坡", "VPN-SG", "ip-sg.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("西班牙", "VPN-SP", "ip-sp.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("瑞典", "VPN-SE", "ip-se.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("瑞士", "VPN-CH", "ip-ch.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("土耳其", "VPN-TK", "ip-tk.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("英国", "VPN-UK", "ip-uk.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("美国", "VPN-US", "ip-us.vpnoneclick.com", vpnServer.VpnServerType.OneClick));
            vpnlist.Add(new vpnServer("日本1", "VPN-Jp1", "106.186.30.51", vpnServer.VpnServerType.Japan));
            vpnlist.Add(new vpnServer("日本2", "VPN-Jp2", "106.187.97.112", vpnServer.VpnServerType.Japan));
            for (int i = 0; i < vpnlist.Count; i  )
            {
                ListViewItem lvi = new ListViewItem();
                lvi.Text = i.ToString();
                vpnServer vs = vpnlist[i];
                lvi.SubItems.Add(vs.VpnCreateName   "[ "   vs.VpnCountryName   " ]");
                lvi.SubItems.Add("未获取");
                lvi.SubItems.Add("未获取");
                lvi.SubItems.Add("NA");
                lvi.SubItems.Add("未接入");
                lvi.SubItems.Add("0.0 byte");
                lvi.SubItems.Add("0.0 byte");
                lvi.SubItems.Add("未连接");
                VpnLineList.Items.Add(lvi);
            }

        }

        private void 申请账号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //MessageBox.Show("鉴于OneClick账户观看视频比较卡所以暂时关闭此接口如要使用请使用1.0版本.");
            //return;
            uptls(this.tlsStatus, 申请账号ToolStripMenuItem.Text   "中...");
            ThreadPool.QueueUserWorkItem(o =>
            {
                //VpnClient.IsJapan = true;
                MyUser user = vclient.Initialize();
                if (!string.IsNullOrEmpty(user.UserName))
                {
                    uptls(this.tslUser, user.UserName);
                    MessageBox.Show("账号"   "[ "   user.UserName   " ]"   "申请成功.~", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            });

        }
        MyUser mu = new MyUser();
        private void 申请Japan账号ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            uptls(this.tlsStatus, 申请Japan账号ToolStripMenuItem.Text   "中...");
            ThreadPool.QueueUserWorkItem(o =>
            {
                string name = StringUtility.GetRandomUserName();
                HttpResult hr = GetJapanUser(name);
                if (hr.Html.Contains("您的账户已经创建"))
                {
                    uptls(this.tslUser, name);
                    MessageBox.Show("账号"   "[ "   name   " ]"   "申请成功.~", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //ulist.Add(new MyUser(name,"ro4ters", vpnServer.VpnServerType.Japan));
                    mu.UserName = name;
                    mu.UserType = vpnServer.VpnServerType.Japan;
                }
                else
                {
                    申请Japan账号ToolStripMenuItem_Click(sender, e); //申请失败一直申请.
                }
            });
        }
        /// <summary>
        /// 获取日本线路账号
        /// </summary>
        /// <returns></returns>
        private HttpResult GetJapanUser(string name)
        {
            string PostUrl = "http://user.tover.net/reg.php?cont=store_user";
            string PostData = "lang=Chinese&username="   name.Trim()   "&password1=ro4ters&password2=ro4ters&mobile=&email=&srvid=1&textarea=%E6%8F%90%E7%A4%BA%EF%BC%9A%E8%AF%B7%E4%BB%94%E7%BB%86%E9%98%85%E8%AF%BB%E4%BB%A5%E4%B8%8B%E6%9D%A1%E6%AC%BE%EF%BC%8C%E5%86%8D%E6%B3%A8%E5%86%8C%E5%B8%90%E5%8F%B7%E3%80%82%E4%BD%BF%E7%94%A8%E6%9C%AC%E7%BD%91%E7%AB%99%E8%A1%A8%E7%A4%BA%E6%82%A8%E5%90%8C%E6%84%8F%E9%81%B5%E5%AE%88%E8%BF%99%E4%BA%9B%E6%9D%A1%E6%AC%BE%E5%92%8C%E6%9D%A1%E4%BB%B6%E3%80%82%E5%A6%82%E6%9E%9C%E6%82%A8%E4%B8%8D%E6%8E%A5%E5%8F%97%E8%BF%99%E4%BA%9B%E6%9D%A1%E6%AC%BE%EF%BC%88%E2%80%9C%E6%9D%A1%E6%AC%BE%E2%80%9D%EF%BC%89%EF%BC%8C%E8%AF%B7%E5%8B%BF%E6%B3%A8%E5%86%8C%E3%80%82&acceptterms=1&adduser=%E5%88%9B%E5%BB%BA%E8%B4%A6%E6%88%B7";
            string Referer = "http://user.tover.net/reg.php";
            return StringUtility.PostHtml(PostUrl, Referer, PostData, false);
        }
        ListViewItem lvi;
        private void 连接选中L2TPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                VpnClient.ConnType = 0;
                StartVpn();
                GetIp();
                uptls(this.tlsStatus, "Succeed");

            });


        }

        /// <summary>
        /// 开启vpn
        /// </summary>
        /// <param name="VpnName">显示名</param>
        /// <param name="VpnIp">连接地址</param>
        private void StartVpn()
        {
            try
            {
                lvi = VpnLineList.SelectedItems[0];
                string name = lvi.SubItems[1].Text.Split('[')[0];
                if (name.Contains("Jp"))
                {
                    VpnClient.IsJapan = true;
                }
                else
                {
                    VpnClient.IsJapan = false;
                }
                lvi.SubItems[2].Text = mu.UserName;
                lvi.SubItems[3].Text = "ro4ters";
                lvi.SubItems[5].Text = DateTime.Now.ToShortTimeString();
                string nType = string.Empty;
                nType = VpnClient.ConnType == 0 ? "L2TP" : "PPTP";
                SetNi(nType   " 连接:"   name);
                vpnServer vs = vpnlist.Find(delegate(vpnServer v) { return v.VpnCreateName == name; });
                vclient.Init();
                if (string.IsNullOrEmpty(mu.UserName))
                {
                    MessageBox.Show("请先申请账户.!");
                    return;
                }
                vclient.userName = mu.UserName;
                vclient.passWord = mu.PassWord;
                AppendText("连接"   lvi.SubItems[1].Text   "中...");
                uptls(this.tlsStatus, "连接"   lvi.SubItems[1].Text   "中...");
                vclient.StartVpn(lvi, "Ro4ters"   vs.VpnCreateName, vs.VpnIpAddress);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void 连接选中PPTPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                VpnClient.ConnType = 1;
                StartVpn();

            });


        }
        /// <summary>
        /// 关闭时钟
        /// </summary>
        private void StopTime()
        {
            if (timer1.Enabled == true)
            {

                timer1.Enabled = false;
                timer1.Stop();
            }
        }
        /// <summary>
        /// 启动时钟
        /// </summary>
        private void StartTime()
        {
            if (timer1.Enabled == false)
            {
                timer1.Tick  = new EventHandler(timer1_Tick);
                timer1.Interval = 1000;
                timer1.Enabled = true;//启动流量时钟
                timer1.Start();
            }
        }
        /// <summary>
        /// 断开
        /// </summary>
        private void DisVpn()
        {
            if (lvi != null)
            {
                lvi = VpnLineList.SelectedItems[0];
                string name = lvi.SubItems[1].Text.Split('[')[0];
                if (string.IsNullOrEmpty(mu.UserName))
                {
                    MessageBox.Show("暂无连接.!");
                    return;
                }
                SetNi("断开中,请稍后..");
                vclient.DisconnectVpn(name);
            }
            else
            {
                MessageBox.Show("暂无连接..");
                return;
            }
        }

        private void 断开选中ToolStripMenuItem_Click(object sender, EventArgs e)
        {

            DisVpn();
        }

        private void 测试选中速度ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SetNi("开始测试速度...");
            Ping();

        }
        /// <summary>
        /// 测试所有
        /// </summary>
        /// <param name="lvitem"></param>
        private void Ping(ListView lv)
        {
            Pings p = new Pings();
            for (int i = 0; i < lv.Items.Count; i  )
            {
                SetNi(string.Format("测试第{0}个..", i.ToString()));
                ListViewItem litem = lv.Items[i];
                ThreadPool.QueueUserWorkItem(o =>
                {
                    string name = litem.SubItems[1].Text.Split('[')[0];
                    vpnServer vs = vpnlist.Find(delegate(vpnServer v) { return v.VpnCreateName == name; });
                    string Speed = string.Empty;
                    if (!name.Contains("Jp"))
                    {
                        try
                        {
                            Speed = p.PingHost(vclient.getipaddressbyname(vs.VpnIpAddress));
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }
                    }
                    else
                    {
                        Speed = p.PingHost(vs.VpnIpAddress);
                    }
                    litem.SubItems[4].Text = Speed   "ms";
                });
            }

        }
        private void Ping()
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                if (lvi != null)
                {
                    lvi = VpnLineList.SelectedItems[0];
                    Pings p = new Pings();
                    string name = lvi.SubItems[1].Text.Split('[')[0];
                    vpnServer vs = vpnlist.Find(delegate(vpnServer v) { return v.VpnCreateName == name; });
                    string Speed = string.Empty;
                    if (!name.Contains("Jp"))
                    {
                        try
                        {
                            Speed = p.PingHost(vclient.getipaddressbyname(vs.VpnIpAddress));
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }
                    }
                    else
                    {
                        Speed = p.PingHost(vs.VpnIpAddress);
                    }
                    lvi.SubItems[4].Text = Speed   "ms";
                }

            });


        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            RASDisplay display = new RASDisplay();
            if (lvi != null)
            {
                string str = display.ConnectionName;
                lvi.SubItems[8].Text = display.Duration;
                lvi.SubItems[7].Text = display.BytesReceived.ToString();//接收
                lvi.SubItems[6].Text = display.BytesTransmitted.ToString();//发送
            }
        }

        private void VpnLineList_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {


        }

        private void VpnLineList_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void 查看选中信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListViewItem item = VpnLineList.SelectedItems[0];
            if (item != null)
            {
                string name = item.SubItems[1].Text.Split('[')[0];
                vpnServer vs = vpnlist.Find(delegate(vpnServer v) { return v.VpnCreateName == name; });
                if (vs.VpnType == vpnServer.VpnServerType.OneClick)
                {
                    uptls(this.tslSelectedIp, vclient.getipaddressbyname(vs.VpnIpAddress));
                }
                else
                {
                    uptls(this.tslSelectedIp, vs.VpnIpAddress);
                }
            }
        }

        private void 测试所有速度ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SetNi("开始测试速度...");
            Ping(VpnLineList);
        }

        private void tslUser_MouseHover(object sender, EventArgs e)
        {
            Clipboard.SetDataObject(tslUser.Text);
            MessageBox.Show("已复制.");
        }



    }
}

标签: VPN

实例下载地址

VPN项目源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警