C#-完美實(shí)現(xiàn)VPN控制_第1頁(yè)
C#-完美實(shí)現(xiàn)VPN控制_第2頁(yè)
C#-完美實(shí)現(xiàn)VPN控制_第3頁(yè)
C#-完美實(shí)現(xiàn)VPN控制_第4頁(yè)
C#-完美實(shí)現(xiàn)VPN控制_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C#

完美實(shí)現(xiàn)VPN控制

因?yàn)楣ぷ餍枰?,需要用程序?lái)控制VPN代理,在google搜了搜,還有不少朋友有同樣的需求,但是目前在網(wǎng)上搜索到的解決方案,都還遺留了一些問題。只好自己手動(dòng)把方案補(bǔ)齊了一下,談不上原創(chuàng),大牛們飄過就行。

先談?wù)勛约旱男枨蟀?,就是針?duì)如圖示中的VPN連接,咱們至少需要以下四個(gè)基本功能

1.新建一個(gè)VPN

2.修改指定名字VPN的主機(jī)IP地址

3.監(jiān)視當(dāng)前連接狀態(tài)

4.刪除指定名稱的VPN直接上代碼吧,這里面引用了【DotRas.dll】大家可以到官網(wǎng)/

下載usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Diagnostics;usingDotRas;usingSystem.Text.RegularExpressions;namespaceAutoPersonalSubmit{publicclassVPNHelper{//系統(tǒng)路徑C:\windows\system32\privatestaticstringWinDir=Environment.GetFolderPath(Environment.SpecialFolder.System)+@"\";//rasdial.exeprivatestaticstringRasDialFileName="rasdial.exe";//VPN路徑C:\windows\system32\rasdial.exeprivatestaticstringVPNPROCESS=WinDir+RasDialFileName;//VPN地址publicstringIPToPing{get;set;}//VPN名稱publicstringVPNName{get;set;}//VPN用戶名publicstringUserName{get;set;}//VPN密碼publicstringPassWord{get;set;}publicVPNHelper(){}///<summary>///帶參構(gòu)造函數(shù)///</summary>///<paramname="_vpnIP"></param>///<paramname="_vpnName"></param>///<paramname="_userName"></param>///<paramname="_passWord"></param>publicVPNHelper(string_vpnIP,string_vpnName,string_userName,string_passWord){this.IPToPing=_vpnIP;this.VPNName=_vpnName;this.UserName=_userName;this.PassWord=_passWord;}///<summary>///嘗試連接VPN(默認(rèn)VPN)///</summary>///<returns></returns>publicvoidTryConnectVPN(){this.TryConnectVPN(this.VPNName,this.UserName,this.PassWord);}///<summary>///嘗試斷開連接(默認(rèn)VPN)///</summary>///<returns></returns>publicvoidTryDisConnectVPN(){this.TryDisConnectVPN(this.VPNName);}///<summary>///創(chuàng)建或更新一個(gè)默認(rèn)的VPN連接///</summary>publicvoidCreateOrUpdateVPN(){this.CreateOrUpdateVPN(this.VPNName,this.IPToPing);}///<summary>///嘗試刪除連接(默認(rèn)VPN)///</summary>///<returns></returns>publicvoidTryDeleteVPN(){this.TryDeleteVPN(this.VPNName);}///<summary>///嘗試連接VPN(指定VPN名稱,用戶名,密碼)///</summary>///<returns></returns>publicvoidTryConnectVPN(stringconnVpnName,stringconnUserName,stringconnPassWord){try{stringargs=string.Format("{0}{1}{2}",connVpnName,connUserName,connUserName);ProcessStartInfomyProcess=newProcessStartInfo(VPNPROCESS,args);myProcess.CreateNoWindow=true;myProcess.UseShellExecute=false;Process.Start(myProcess);}catch(ExceptionEx){Debug.Assert(false,Ex.ToString());}}///<summary>///嘗試斷開VPN(指定VPN名稱)///</summary>///<returns></returns>publicvoidTryDisConnectVPN(stringdisConnVpnName){try{stringargs=string.Format(@"{0}/d",disConnVpnName);ProcessStartInfomyProcess=newProcessStartInfo(VPNPROCESS,args);myProcess.CreateNoWindow=true;myProcess.UseShellExecute=false;Process.Start(myProcess);}catch(ExceptionEx){Debug.Assert(false,Ex.ToString());}}///<summary>///創(chuàng)建或更新一個(gè)VPN連接(指定VPN名稱,及IP)///</summary>publicvoidCreateOrUpdateVPN(stringupdateVPNname,stringupdateVPNip){RasDialerdialer=newRasDialer();RasPhoneBookallUsersPhoneBook=newRasPhoneBook();allUsersPhoneBook.Open();//如果已經(jīng)該名稱的VPN已經(jīng)存在,則更新這個(gè)VPN服務(wù)器地址if(allUsersPhoneBook.Entries.Contains(updateVPNname)){allUsersPhoneBook.Entries[updateVPNname].PhoneNumber=updateVPNip;//不管當(dāng)前VPN是否連接,服務(wù)器地址的更新總能成功,如果正在連接,則需要VPN重啟后才能起作用allUsersPhoneBook.Entries[updateVPNname].Update();}//創(chuàng)建一個(gè)新VPNelse{RasEntryentry=RasEntry.CreateVpnEntry(updateVPNname,updateVPNip,RasVpnStrategy.PptpFirst,RasDevice.GetDeviceByName("(PPTP)",RasDeviceType.Vpn));allUsersPhoneBook.Entries.Add(entry);dialer.EntryName=updateVPNname;dialer.PhoneBookPath=RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);}}///<summary>///刪除指定名稱的VPN///如果VPN正在運(yùn)行,一樣會(huì)在電話本里刪除,但是不會(huì)斷開連接,所以,最好是先斷開連接,再進(jìn)行刪除操作///</summary>///<paramname="delVpnName"></param>publicvoidTryDeleteVPN(stringdelVpnName){RasDialerdialer=newRasDialer();RasPhoneBookallUsersPhoneBook=newRasPhoneBook();allUsersPhoneBook.Open();if(allUsersPhoneBook.Entries.Contains(delVpnName)){allUsersPhoneBook.Entries.Remove(delVpnName);}}///<summary>///獲取當(dāng)前正在連接中的VPN名稱///</summary>publicList<string>GetCurrentConnectingVPNNames(){List<string>ConnectingVPNList=newList<string>();ProcessproIP=newProcess();proIP.StartInfo.FileName="cmd.exe";proIP.StartInfo.UseShellExecute=false;proIP.StartInfo.RedirectStandardInput=true;proIP.StartInfo.RedirectStandardOutput=true;proIP.StartInfo.RedirectStandardError=true;proIP.StartInfo.CreateNoWindow=true;//不顯示cmd窗口proIP.Start();proIP.StandardInput.WriteLine(RasDialFileName);proIP.StandardInput.WriteLine("exit");//命令行運(yùn)行結(jié)果stringstrResult=proIP.StandardOutput.ReadToEnd();proIP.Close();Regexregger=newRegex("(?<=已連接\r\n)(.*\n)*(?=命令已完成)",RegexOptions.Multiline);//如果匹配,則說(shuō)有正在連接的VPNif(regger.Is

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論