版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C#
完美實現(xiàn)VPN控制
因為工作需要,需要用程序來控制VPN代理,在google搜了搜,還有不少朋友有同樣的需求,但是目前在網(wǎng)上搜索到的解決方案,都還遺留了一些問題。只好自己手動把方案補齊了一下,談不上原創(chuàng),大牛們飄過就行。
先談?wù)勛约旱男枨蟀?,就是針對如圖示中的VPN連接,咱們至少需要以下四個基本功能
1.新建一個VPN
2.修改指定名字VPN的主機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)建或更新一個默認(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)建或更新一個VPN連接(指定VPN名稱,及IP)///</summary>publicvoidCreateOrUpdateVPN(stringupdateVPNname,stringupdateVPNip){RasDialerdialer=newRasDialer();RasPhoneBookallUsersPhoneBook=newRasPhoneBook();allUsersPhoneBook.Open();//如果已經(jīng)該名稱的VPN已經(jīng)存在,則更新這個VPN服務(wù)器地址if(allUsersPhoneBook.Entries.Contains(updateVPNname)){allUsersPhoneBook.Entries[updateVPNname].PhoneNumber=updateVPNip;//不管當(dāng)前VPN是否連接,服務(wù)器地址的更新總能成功,如果正在連接,則需要VPN重啟后才能起作用allUsersPhoneBook.Entries[updateVPNname].Update();}//創(chuàng)建一個新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正在運行,一樣會在電話本里刪除,但是不會斷開連接,所以,最好是先斷開連接,再進行刪除操作///</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");//命令行運行結(jié)果stringstrResult=proIP.StandardOutput.ReadToEnd();proIP.Close();Regexregger=newRegex("(?<=已連接\r\n)(.*\n)*(?=命令已完成)",RegexOptions.Multiline);//如果匹配,則說有正在連接的VPNif(regger.Is
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抗疫的廣播稿
- 年會發(fā)言稿合集15篇
- 收銀員崗前培訓(xùn)
- 二零二五年度保姆聘請與雇主權(quán)益維護合同2篇
- 預(yù)血管化多孔β-磷酸三鈣組織工程骨的構(gòu)建及其生物學(xué)效應(yīng)評價
- 塔式太陽能定日鏡場糾偏方法研究
- 2025版特殊教育學(xué)校樂器采購及輔助教學(xué)合同2篇
- 應(yīng)急預(yù)案協(xié)同作戰(zhàn)
- 部編版一年級語文下冊第1課《吃水不忘挖井人》精美課件
- 二零二五年度高品質(zhì)住宅小區(qū)廣告宣傳及效果監(jiān)測合同2篇
- 成品移動公廁施工方案
- 2025年度部隊食堂食材采購與質(zhì)量追溯服務(wù)合同3篇
- 新人教版一年級下冊數(shù)學(xué)教案集體備課
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復(fù)習(xí)
- 繪本 課件教學(xué)課件
- 光伏項目風(fēng)險控制與安全方案
- GB 32311-2015水電解制氫系統(tǒng)能效限定值及能效等級
- 國家重點支持高新技術(shù)領(lǐng)域(三級目錄)08
- 理論力學(xué)-運動學(xué)課件
- 上海三林濱江南片區(qū)域城市設(shè)計最終版文本(包含PPT+94)
評論
0/150
提交評論