使用.NET实现你的IP切换器

2010-08-28 10:52:10来源:西部e网作者:

  1. 引言

  经常在公司、客户和家里奔波,切换IP是天天要做的事情,所以有心开发一个小的应用程序,来实现IP地址的快捷切换。既然有了思路就着手来做,我首先想到的是应用netsh.exe工具来实现,所以配置一个批处理文件来实现netsh.exe命令的执行,然后使用.NET框架来调用bat文件即可大功告成。话已至此,马上行动。

  2. 基本原理

  根据上述解决思路,我的小系统,定名为《Anytao.IpHelper》的解决方案如下:

  以批处理文件加载netsh.exe命令,实现IP加载;

  以.NET的Process方法,实现对外部应用的调用;

  附带进度控制和文件检索功能。

  因此,有必要对系统运行的原理进行简单的梳理,来龙去脉,揭开本质。

  2.1. netsh工具简介

  长篇大论的netsh命令介绍,在此就不特别介绍了,百度上随便就可以找到更加详细的netsh命令手册,可以耗你一天的功夫来研究,本文既然着眼于应用,就从实际的招式来阐述,详细的武功秘籍留待看官量身定做,此处只提供参考:netsh命令详解、netsh命令使用。

  在本文中,请参考以下步骤来实现你的netsh命令处理器:

  打开记事本,输入以下信息:

@echo Anytao is switching your ip now.
@echo off
netsh 
interface ip set address 本地连接 static 172.1.1.226 255.0.0.0 172.30.7.254 1 
netsh 
interface ip set dns 本地连接 static 200.121.5.1 

echo www.anytao.com
Echo Congratulations, done.
pause

  注意:按照以上格式输入您的IP、子网掩码、默认网关和DNS服务器地址;如果是英文版操作系统,将“本地连接”改为“local Area Connection ”。

  另存该文本为批处理文件,在此另存为:home.bat。

  点击该批处理文件,即可将您的IP更新为上述值。

  2.2. Process方法简介

  Process方法,位于System.Diagnostics命名空间。MSDN的定义为:Process 组件提供对正在计算机上运行的进程的访问。对于启动、停止、控制和监视应用程序等任务,Process 组件是很有用的工具。使用 Process 组件,可以获取正在运行的进程的列表,或者可以启动新的进程。Process 组件用于访问系统进程。初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。因此,以Process方法来打开外部批处理文件是托管环境下值得推荐的方法。

  当然,以Process方法来打开外部程序,并不是唯一的办法,最简单的莫过于调用WinAPI程序来实现,当然这又牵扯到非托管代码的范畴,我们就不再多罗嗦了。

  我的另一篇拙作《在WinForm应用程序中打开Url》中,也有相关的论述,具体的实现见代码部分的分析。

  2.3. 基本的系统结构如下:

  \

  3. 实现方法:

  3.1 创建Windows Form 应用程序,设置程序名称为Anytao.IPHelper,并向窗体文件中拖入一个ComboBox和一个按钮控件,分别命名为:cbbIP和btnIPConfig,如下图所示:

  \

  3.2 双击btnIpConfig按钮,实现其Click事件,如下,具体代码见注释:

        private void btnIpconfig_Click(object sender, EventArgs e)
        {
            
try
            {
                
//使用Process方法加载外部应用
                Process myProcess = new Process();
                myProcess.StartInfo.FileName 
= Application.StartupPath + @"\config\" + cbbIP.SelectedItem.ToString() + ".bat";
                MessageBox.Show(myProcess.StartInfo.FileName);
                myProcess.StartInfo.UseShellExecute 
= false;
                myProcess.StartInfo.RedirectStandardOutput 
= true;
                myProcess.Start();
                myProcess.WaitForExit();
            }
            
catch (FileNotFoundException ex)
            {
                MessageBox.Show(ex.Message);
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

  3.3 当然我们还要实现程序加载时的获取文件目录的操作,如下:

        private void frmMain_Load(object sender, EventArgs e)
        {
            
//将配置文件加载到下拉框中
            string path = Application.StartupPath + @"\config\";
            
if (Directory.Exists(path))
            {
                DirectoryInfo dirinfo 
= new DirectoryInfo(path);
                
foreach (FileInfo fi in dirinfo.GetFiles())
                {
                    cbbIP.Items.Add(Path.GetFileNameWithoutExtension(fi.FullName));
                }
            }                     
        }

  3.4 当然,按照上述方法,将配置好的netsh.exe批处理文件,放在目标位置后,你就可以实现自己的IpHelper了。

  3.5 恭喜你,简单的IPHelper已经实现,运行你的程序,享受快速配置IP带来的便捷吧。

  \

  4. 系统展望

  Anytao.IpHelper,只是点燃了一个快速应用的火苗,我在平时的工作中也享受了这种方便的痛快,我的Emma的机子里也必备了IpHelper,就好像是我每天带给她的爱护和关心。嘿嘿,写代码的也可以用这种方式,哄哄家里的娘子军嘛,让我们的程序人生更加和谐。

  言归正传,IpHelper只是个代步的工具,还有更多的思想和设计可以融会到里面做为充实,我将会再以后的时间逐渐完善以下几个方面:

  设计Ip、IpConfig类,来以面向对象方式完善系统架构;

  增加Ip录入功能,实现动态增加Ip选项的能力,而不需要手工实现;

  更多桌面网络管理平台融合。

  5. 结束语

  本文的主要目的是,以一个示例为切入点,讲明白如何在托管环境中以Process方法来加载外部应用,使用Process可以方便的在你的应用中打开网站、邮件、外部程序、脚本等,因此是值得学习的东西。

  因为,以开发为基础的文章是第一次尝试,不知请大家见笑,小小工具希望给您的生活带来方便。

关键词:VS.NET

赞助商链接:

忐忑
浮夸
说谎
倾世
王妃
煎熬
武装
小三
曾经
素颜
惊叹号
爱很美
春天里
老男孩
皮影戏
走天涯
羽绒服
甩葱歌
套马杆
伤不起
有没有
苦咖啡
追梦人
那些年
大声唱
爱的供养
三寸天堂
荷塘月色
喜欢寂寞
爱情买卖
爱是你我
见或不见
火力全开
一念执着
想你的夜
依然爱你
幸福额度
红尘情歌
明天你好
狼的诱惑
你是我的眼
没那么简单
客官不可以
等你的季节
等不到的爱
美丽与勇敢
我的好兄弟
我们的歌谣
如果爱忘了
梦中的额吉
男人帮片尾曲
最重要的决定
不分手的恋爱
魔鬼中的天使
裸婚时代插曲
当我唱起这首歌
全世界宣布爱你
请安静的忘记我
亲爱的你在哪里
天龙八部之宿敌
爱情睡醒了主题曲
漂亮的姑娘就要嫁人啦
最接近天堂的地方
我爱你胜过你爱我
下辈子做你的女人