1、Windows上使用rasdial.exe实现
连接或断开拨号或虚拟专用网络(VPN)连接。当运行不带参数的命令时,将显示当前网络连接的状态。
rasdial entryname [username [password|*]] [/domain:<domain>] [/phone:<phonenumber>] [/callback:<callbacknumber>] [/phonebook:<phonebookfile>] [/PrefixSuffix]
1)连接到电话簿(.pbk
)条目时必需。指定当前.pbk
文件中位于systemroot\System32\Ras
文件夹中的条目。如果ConnectionName
包含空格或特殊字符,请在文本周围使用引号(即“Connection Name”
)。
除非选择了“个人电话簿”
选项,否则将使用Rasphone.pbk
文件。如果选择了“个人电话簿”
选项,则使用文件UserName .pbk
。选择个人电话簿/p
时,该名称显示在Rasphone
标题栏上。如果发生名称冲突,则会附加数字。
2)[username [password|*]]
指定用于连接的用户名和密码。如果使用星号,则会提示用户输入密码,但不会显示键入的字符。
3) /domain: 域
指定用户帐户所在的域。如果未指定,则使用“连接到”
对话框中“域”
字段的最后一个值。
4) /phone: PhoneNumber
用指定的电话号码替换Rasphone.pbk中条目的电话号码。
5) /callback: CallbackNumber
用指定的回叫号码代替Rasphone.pbk中条目的回叫号码。
6) /phonebook:PhonebookPath
指定电话簿文件的路径。默认值为systemroot \ System32 \ Ras \ UserName .pbk。您可以指定文件的完整路径。
7) /prefixsuffix
将当前的TAPI位置拨号设置应用于电话号码。这些设置在“控制面板”中的“电话”中配置。默认情况下,此选项是关闭的。
8) /disconnect断开连接时
需要断开指定的条目。还可以通过键入/d
断开连接。
2、Linux上使用ifdown和ifup实现
实时地手动修改一些网络接口参数,可以利用 ifconfig
来实现,如果是要直接以配置文件,亦即是在 /etc/sysconfig/network-scripts
里面的 ifcfg-ethx
等文件的设置参数来启动的话,那就得要通过 ifdown
或 ifup
来实现了。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora
。
命令格式如下:
ifup {interface}
ifdown {interface}
例如:
ifup eth0 #激活网卡eth0 ifdown eth0 #关闭eth0
注意:ifup
与 ifdown
两个程序其实是 script
而已,它会直接到 /etc/ sysconfig/network-scripts
目录下搜索对应的配置文件,例如, ifup eth0
,它会找出ifcfg-eth0
这个文件的内容,然后加以设置。
不过,由于这两个程序主要是搜索设置文件(ifcfg-ethx
)来进行启动与关闭的,所以在使用前请确定 ifcfg-ethx
是否真的存在于正确的目录内,否则会启动失败。另外,如果以 ifconfig eth0
来设置或者是修改了网络接口后,就无法再以 ifdown eth0
的方式来关闭。因为 ifdown
会分析比较目前的网络参数与 ifcfg-eth0
是否相符,不符的话,就会放弃这次操作。因此,使用 ifconfig
修改完毕后,应该要以ifconfig eth0 down
才能够关闭该接口。
3、.NET Core(C#)中调用rasdial、ifdown和ifup实现代码
//实现Windows和Linux重新连接宽带(PPPoE) private void Redial() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { KillPPPoEProcesses(); var process = Process.Start("/sbin/ifdown", "ppp0"); if (process == null) { return; } process.WaitForExit(); process = Process.Start("/sbin/ifup", "ppp0"); if (process == null) { return; } process.WaitForExit(); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { RedialOnWindows("adsl帐号","adsl密码"); return; } throw new PlatformNotSupportedException($"{Environment.OSVersion.Platform}"); } private void RedialOnWindows(string ADSLAccount,string ADSLPassword,string ADSLInterface="") { var process = new Process { StartInfo = { FileName = "rasdial.exe", UseShellExecute = false, CreateNoWindow = false, WorkingDirectory = @"C:\Windows\System32", Arguments = ADSLInterface + @" /DISCONNECT" } }; process.Start(); process.WaitForExit(10000); process = new Process { StartInfo = { FileName = "rasdial.exe", UseShellExecute = false, CreateNoWindow = false, WorkingDirectory = @"C:\Windows\System32", Arguments = ADSLInterface + " " + ADSLAccount + " " + ADSLPassword } }; process.Start(); process.WaitForExit(10000); } private void KillPPPoEProcesses() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { var processes = Process.GetProcessesByName("pppd").ToList(); processes.AddRange(Process.GetProcessesByName("pppoe")); foreach (var process in processes) { try { process.Kill(); } catch { // ignore } } } }