[开发手记] 使用.NET实现你的IP切换器

发布日期:2007.4.17 作者:Anytao

©2007 Anytao.com 转贴请注明出处,留此信息。

 下载:[Anytao.IPHelper][代码下载,近期上传]  

本文将介绍以下内容:
• 批处理文件应用
• 调用外部应用
• 文件处理

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命令处理器:

  1. 打开记事本,输入以下信息: 
    @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 dot.gifwww.anytao.comdot.gif
    Echo Congratulations, done.
    pause

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

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

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

2.2. Process方法简介

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

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

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

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

121.JPG 

3. 实现方法:

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

122.JPG 

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带来的便捷吧。

123.JPG 

4. 系统展望

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

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

  • 设计Ip、IpConfig类,来以面向对象方式完善系统架构;
  • 增加Ip录入功能,实现动态增加Ip选项的能力,而不需要手工实现;
  • 更多桌面网络管理平台融合。

5. 结语后下载

本文的主要目的是,以一个示例为切入点,讲明白如何在托管环境中以Process方法来加载外部应用,使用Process可以方便的在你的应用中打开网站、邮件、外部程序、脚本等,因此是值得学习的东西。
因为,以开发为基础的文章是第一次尝试,不知请大家见笑,小小工具希望给您的生活带来方便。
代码部分还要部分完善,今日先提供程序部分,代码部分我将于近日尽快上传,请大家见谅,希望这个小工具能给你带来方便。

下载:[Anytao.IPHelper][代码下载,近期上传]

 

©2007 Anytao.com 转贴请注明出处,留此信息。

本贴子以现状提供且没有任何担保,同时也没有授予任何权利。
This posting is provided "AS IS" with no warranties, and confers no rights.

转载于:https://www.cnblogs.com/anytao/archive/2007/04/17/anytao_dev_01.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件读写改权限详解

Linux文件读写改权限详解文件的rwx权限 [ r ][ w ][ x ]该文件可读(read)该文件可修改(write)该文件可执行(execute) 注意:只有当该文件所在目录有写权限,并且该文件有[w]权限,才可以进行删除操作 目录的rwx权限 [ r ][ w ][ x ]可查看目录…

EF 从sqlserver2008 迁移到 2005出现的BUG

在VS10Server08中使用EF4.4,发布数据库为SQL05,发生错误的问题 问题描述环境描述:工具为VS2010SQL08 R2,EntityFramework版本为4.4(在Framework4.5中为5.0),在本机完全测试完成后,发…

转盘不转动的问题

2019独角兽企业重金招聘Python工程师标准>>> Stack Overflow is a question and answer site for professional and enthusiast programmers. Its 100% free, no registration required. jQuery Rotate - IE7 & IE8 Issues up vote 11 down vote favorite 3 I a…

重构机房收费系统(二)

接上篇《机房收费系统重构(一)》 二、概要设计 完成了用例图,并用结合用例图完善了一下需求分析说明书,忘记是第几次修订需求分析说明书。有了用例图,很自然就进入了概要设计阶段。我认为这一阶段就是结合包图解决系统…

《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限...

win7或者vista默认运行程序是在受限制的环境下运行的,以减轻病毒对于系统的破坏。那么我们怎样才能提升一个进程的权限以至让它在 管理员模式下运行。当然CreateProcess函数没有提供这个功能。相反我们需要调用的是ShellExecuteEx函数: BOOL ShellExecu…

2015第29周二AOP

1、问题:想要添加日志记录、性能监控、安全监测 2、最初解决方案2.1、最初解决方案:在每个需要的类函数中重复写上面处理代。 缺点:太多重复代码,且紧耦合2.2、抽象类进行共性设计,子类进行个性设计,此处不…

Docker-compose配置Mysql,Redis,MongoDB

Docker-compose下配置Mysql,Redis,MongoDB详解一、docker-compose简介二、构建一个实例项目1.前后端实现2.Dockerfile及docker-compose.yml3. 生成镜像三、实例程序源码一、docker-compose简介 Compose是用于定义和运行多容器Docker应用程序的工具。通过…

使用WebDeployment Project改善VS2005发布网站问题

VS2005发布网站时不会像VS2003一样生成规则的DLL文件、而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件、让人有一些遗憾、为了做到像vs2003一样,微软发布了WebDeployment Project插件可解决此问题:下载地址1、下载后安装、右键选择vs2005中的…

Linux、Windows、Mac下Docker的安装与使用

Linux、Windows、Mac下Docker的安装与使用一、Linux下的安装二、Windows与Mac下的安装三、Docker的使用一、Linux下的安装 这里以Centos 7为例,首先,确保系统已经正确运行了Centos 7并已经联网。yum安装gcc环境 yum -y install gcc yum -y install gcc…

[智能架构系列]什么是Buddy智能开发框架

buddy框架,秉承国内优秀框架THINKPHP的优点并增加了很多的商业特性和集成了全版本的商业项目模块,提供给创业者一个最好的选择 组建图: 转载于:https://www.cnblogs.com/scotoma/archive/2011/10/17/2215553.html

Docker Swarm建立服务器集群

Docker Swarm建立服务器集群一、Docker Swarm简介1. 集群模式2. 管理节点--Manager二、Docker Swarm的配置及使用三、Docker Service向集群中添加服务四、Docker Stack部署集群一、Docker Swarm简介 1. 集群模式 这是Docker官网给出的一张swarm原理图,即swarm就是…

python常用魔法函数

1、__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化&#xff…

苹果MAC系统的安装

搞Iphone开发,没有苹果系统是不行的。由于我已经装好了苹果的雪豹系统,所以在此我只是简单在说一下大休怎么装! 苹果系统,现下在非苹果机上的安装分两种:1、虚拟机安装;2、物理机安装。 现在先说延续一种&a…

sphinx和coreseek

sphinx是国外的一款搜索软件。 coreseek是在sphinx的基础上,增加了中文分词功能,换句话说,就是支持了中文。 Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本是2010年发布的,它是基于Sphinx0.9.9搜索引擎的。而4.…

Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>

Spring security ---登陆成功后返回登陆前界面<页面重定向>问题&#xff1a;在登陆/退出成功后&#xff0c;我们往往通过http.formLogin().successForwardUrl()和http.logout().logoutSuccessUrl()设定操作成功后的回跳页面。我们现在希望在任意界面跳转到登陆界面后&…

针对plsql developer使用做的三个小设置

来自&#xff1a;http://www.cnblogs.com/william-lee/archive/2010/12/08/1900176.html 1、原来大家在sql窗口写多条sql语句&#xff0c;如果点击“执行”&#xff0c;那么会执行窗口下的所有语句&#xff0c;如果向执行所要的语句&#xff0c;必须选定它。 那么&#xff0c;有…

今天将Notebook还原了, 第一次外加了外围电路

因为天气太热了, 我的Aspire 5502出了问题, 用Ghost还原中途死机, 找了问题原来是太热了....又在宿舍, 没有空调, 又不想去图书馆, 最后就问奶仔借了部风扇, 总算搞掂了...相机太快了....看上去风扇好像停了....不仅有风扇, 它还要裸跑才能胜利还原....温度一高就自动关机了...…

VMware开启NAT模式/仅主机模式后主机ping不通虚拟机的问题

VMware开启NAT模式/仅主机模式后主机ping不通虚拟机的问题问题&#xff1a;VMware设置网络模式为NAT模式后&#xff0c;我们使用主机ping虚拟机无法联通&#xff0c;用虚拟机ping主机可以联通。 原因&#xff1a;这是由于虚拟机的IP网段与主机的VMnet8网段不一致所造成的。 解…

OO设计原则总结

什么是设计原则&#xff1f; 设计原则是基本的工具&#xff0c;应用这些规则可以使你的代码更加灵活、更容易维护&#xff0c;更容易扩展。 基本原则封装变化Encapsulate what varies. 面向接口编程而非实现 Code to an interface rather than to an implementation.优先使用组…

kubectl get node运行时出现:Unable to connect to the server: x509: certificate signed by unknown authority

kubectl get nodes运行时出现&#xff1a;Unable to connect to the server: x509: certificate signed by unknown authority原因&#xff1a;我们在运行kubeadm reset时&#xff0c;没有删除原先的$HOME/.kube文件导致新建的kubelet报错。实际上在kubeadm reset执行后&#x…