admin 管理员组文章数量: 1086019
2024年4月20日发(作者:127的原码怎么来的)
……
NETWORK&C0啊啊UNi哪ION…………………………………………………………………………………
基于 xML和 l(擀
≯|≯。
港鼙理 峨 |j I ii l
. .
Ij |
羹 誊 胡晓】炙|毒
摘 要:设计了一款基于XML和C≠≠的网络配置管理软件,把用到的网络配置用一个唯一的名称
保存在XML文件中。修改网络配置时,只要选择相应网络配置名称,单击一次按钮就可以实现
IP地址、网关、DNS等所有网络配置的自动修改。
关键词:XML;C#;网络配置;IP地址
1 引言
由于网络配置不同,移动办公人员经常修改网络配置,给
工作带来不便。如果把常用的网络配置存储起来,用一个唯一
<lpEntity name=“办公室”>
<lD>27.1 26.1 69.71</Ip>
<SubNet>255.255.255.1 28</SubNet>
、
<NetGate>27.12&169.1</NetGate>
<FirstDns>27.1 26.160 252</FirstDns>
<SecondDns>27.1 26.1 69.1</SecondDns>
的名称命名,修改时只要点击相应的网络配置名称,就把IP
地址、子网掩码、网关等所有的网络配置修改为新环境下的配
置,能给工作提供很多方便。
</IpEntity>
其中,<IpEntity></IpEntity>节存储一个网络配置信息,
name属性保存网络配置名称。<lp></Ip>等子节点用来存储IP
2 系统功能
本程序实现的功能有网络配置的存储、获取当前网络配置
和修改网络配置3个功能。
地址等信息。
为提高程序的可读性,定义IpEntity类存储网络配置信
息,每个属性对应一个网络配置项。
public class IpEntity
2.1 网络配置存储
采用XML文件格式存储IP地址、子网掩码、网关、首选
{
f)n。vate string strDIpEntityName;
f3rivate string strDIp;
f)r‘ivate string strDSubNet;
DNS服务器、备用DNS服务器信息。
2.2读取当前网络配置
读取当前连接网络的网络适配器IP地址、子网掩码、网
f)rivate string strDNetGate;
f)r lvate string strDFirstDns;
关、首选DNS服务器、备用DNS服务器信息,显示在用户界
面上。用户修改网络配置前可以看到当前的网络配置。
f3rivate string strDSecOndDns
///<summaryr>
2.3修改网络配置
用户选择新的网络配置名称后,单击“确定”按钮。把网
络配置修改为选择的配置。
,,/网络配置名称
‘/summary>
public string strlpEntityName
{
3 系统实现
程序实现的功能有网络配置的存储、获取当前网络配置和
)
get{return strDlPEntityName;)
set{strDIpEntityName=value;)
///<summary>
修改网络配置,这3个功能从技术角度分析,核心技术是3项:
(1)网络配置存储,选择合理的结构把用户录入的网络配置写
到文件中加以保存; (2)获取网络配置,用户可以看到当前操
作系统的网络配置信息; (3)修改网络配置,选择新的网络配
,//lP地址
///<Isummary>
public string strip
置后,能够把操作系统的网络配置修改为用户选择的配置。
{
get{return strDIp;)
set{strDIp=value:)
}
///<summary>
3.1 网络配置存储
网络配置采用XML文件格式保存,文件名为:[pSet.xml,
结构如下所示。
j彗宓隹 西I讪7K
实用第 一 诬
///子网掩码
fi/</summary>
public string strSubNet
{
get{return strDSubNet;}
set f strDSubNet=value;}
)
///<summary>
lll 关
///</summary>
public string strNetGate
(
get{return strDNetGate;)
set{strDNetGate=value;}
}
///<summary>
ffi首逸DNS
lfl</summary>
public string strFirstDns
{
get{return strDFirstDns;)
set{strDFirstDns=value;}
)
///<summary>
IlI爸 DNS
///</summary>
public string strSecondDns
{
get{return strDSecondDns:)
set{strDSecondDns=value;)
添加网络配置信息的界面如图1所示。
用户录入网络配置各项信息后,AS-“确定”按钮,信息
写入IpSet.xml文件中。 “确定”按钮的单击事件代码为:
///<summary>
,//把录入的网络配置写人XML文件中
///</summary>
///<param name=…ip。>网络配置具体参数</param>
private void Wnte×m pEr、t i p)
{
XmlDocument xmllpDocument=new XmlDocument0
if{File.Exists( IpSet.xml ))
xmllpDocument Load(”IpSet.xml“):
else
xmtlpDocument.LoadXml(“<?xml version= 1.O ”4-”<
IpSet author= huxiaoqing0007 version= 1.0 >”4-“</IpSet>“):
XmlElement xmlRootElement=xmllpDocument.Docu
mentElement;
XmlElement xmiNewlp=xmllpDocument.CreateElement
(“IpEntity”)
xmtNewlp.SetAttribute(“name“,ip.strlpEntity Name);
XmlElement xmllp=xmllpDocument.CreateElement(“Ip“)
xmllP.InnerText=ip.strip;
XmtElement xmlNewSubNet=xmllpDocument.Create
Element(”SubNet“):
xmlNewSubNet.InnerText=ip.strSubNet;
XmlElement xmlNewNetGate=xmllpDocument.Create
Element(“NetGate“):
xmlNewNetGate.InnerText=ip strNetGate;
XmlElement xmlNewFirstDns=xmllpDocument.Create
Element(”FirstDns“):
xmlNewFirstDns.[nnerText:lp.strFirstDns;
XmlElement xmINewSecondDns=xmllpDocument.Create
Element(“SecondDns ):
xmlNewSecondDns.InnerText=ip.strSecOndDns:
xmINewlp.AppendChild(xmllp);
xmlNewlp.AppendChild(xmlNewSubNet);
xmlNewlp.AppendChild(xmlNewNetGate);
xmINewlp.AppendChild(xmlNewFirstDns);
xmINewlp.AppendChild(xmINewSecondDns);
xmIRootElement.AppendChild(xmlNewlp);
xmllpDocument.Save(”IpSet.xml“):
)
3_2获取网络配置
获取当前操作系统的网络配置可以通过读取注册表或WMI
(Wind0 s管理规范)提供的类实现,这两种方法也是目前公开资
料中介绍最多的方法,具体代码不再赘述,有兴趣的读者可查阅
相关资料。除前两种方法外,通过研究MSDN,作者发现,.NET
命名空间SysteI11.Net中的类也可以获取网络配置信息。首先在代
码顶部添加对System.Net命名空间引用,实现代码如下:
///<summary>
///.NET类库法获取网络配置信息
///</summary>
///'<param name=“NetAdapterDescription“>网卡 ̄_</param>
publicvoid GetNetAdapterUbrary ̄string NetAdapterDescription)
(
,/获取本地连接信息
Networklnterface[J Networklnterfaces=Networklnterface.
GetAIINetworklnterfaces0;
foreach(Networklnterface Networklntf in Networklnterfaces)
{
if(Networklntf.NetworklnterfaceType==Networklnterface
匾 隧
…一
NETWORK&COMMUNIC盯ION一…… ………… … ……………一…-“ …一… … …………一 -… …一
Type.Ethernet&&Networklntf.Description==NetAdapter
Description)
{
JPlnterfacePrOperties IPInterfacePrOperties=Networklntf.
GetlPPrOpe es():
∥获取本机IP地址信息,子网掩码信息
UnicastlPAddresslnformationCollection UnicastlPAddressln
formation
Collection=IPInterfacePrODerties.UnicastAddresses:
if(UnicastlPAddresslnformationCollection.Count>0)
{
label1.Text=UnicastlPAddresslnformationCollection【O1.
Address.ToString0;
label2.Text=UnicastlPAddresslnformationCollection
【01.I Pv4Mask.ToString0;
)
else
{
label1.Text=”0.0.0.0”:
label2.Text=”0.0.0.0 :
)
f 关
GatewaylPAddresslnformationCollection GWAddress =
IPInterfacePrO0erties.GatewayAddresses;
.f(GWAddress.Count>0)
label3.Text=GWAddress[0].Address.ToString0;
else
label3.Text:“0.0.0.0”:
//获取当前DNS设置
IPAddressCollection DNSAddress=IPInterface
Properties.DnsAddresses:
switch(DNSAddress.Count)
{
case 1:
label4.Text=DNSAddress【0】.ToString0;
label5.Text=“0.0.0.0’‘:
break;
case 2:
label4.Text=DNSAddress【O】 ToString0;
label5.Text=DNSAddress[1】.ToString0;
break;
default:
label4.Text=”0.0.0.0“:
label5.Text ”0.0.0.0”:
break;
)
)
)
)
3.3修改网络配置
研究.NET类库,没有发现修改网络配置的方法。因此修
改网络配置只好通过WMI提供的类或者修改注册表实现。
WMI类提供的方法可以很容易修改网络配置。该方法需要引
用System.Management命名空间,实现代码如下:
///<summary >
,//WMI法修改网络配置信息
///</summary>
///<param name=”NetAdapterDescription”>网卡描述</param>
///<returns>修改成功返回true,修改失败返回faIse</retums>
private bool VerifyrNetWorkConfigWM l(string NetAdapterDes
cription)
{
bool blFlag=true;
trv
(
ManagementBaseObject inPar=null:
ManagementBaseObject outPar:null;
ManagementClass mc=new ManagementClass(”
Win32
一
NetworkAdapterConfiguration“);
ManagementObjectCollection moc=mc.GetInstances():
foreach(ManagementObject mo in moc)
{
if((boo1)mo【llIPEnabled”1&&mo【”Description“】.
ToString()==NetAdapterDesc riptiOn)
{
∥设置网络配置为指定IP地址和指定DNS服务器
.f(radioButton1.Checked)
{
//网关、IP地址、子网掩码的参数。
string[]strlpAddress=new string[1 l{textBox1.Text}:
string[】strSubnetMask=new string[1】(textBox2.Text}:
string[】strGateWay=new string[1 l{textBox3.Text):
∥设置WMI法的DNS参数,一个参数为一个数组元素。
string[】strNameServerWM l:
l{(textBox5.Text!=””)
strNameServerWM I=new string【2】{
textBox4.Text,textBox5.Text)
else
strNameServerWMI=new string[1】{textBox4.Text}:
设置ip地址和子网掩码
inPar:mo.GetMethodParameters(”EnableStatic“):
inPar[“IPAddress”】=strlpAddress;
inPar[“SubnetMask”】=strSubnetMask;
outPar=mo.InvokeMethod(“EnableStatic“,inPar,nul1);
//i殳置网关地址
inPar=mo.GetMethodParameters(”SetGateways“):
inPar[”DefaultlPGateway”l=strGateWay;
outPar=mo.InvokeMethod(”SetGateways“,inPar,nul1);
||设置DNS
inPar=mo.GetMethodParameters
( SetDNSServerSearchOrder“):
inPar[”DNSServerSearchOrder“】=strNameServerWM}:
outPar=mo.InvokeMethod(“
辩 12 .
…………………………………………………… ……
实用第一 智慧密集
SetDNSServerSearch0rder”。inPar,nul1);
)
∥设置网络配置为自动获取
else if(radioButton2.Checked)
{
mo.InvokeMethod( EnableDHCP ,nul1):
mo.tnvokeMethod("SetGateways“,nul1);
mo.InvokeMethod( SetDNSServerSearchOrder ,nul1);
}
break;
}
)
)
catch{ManagementException){
blFlag=false;
)
return blFlag;
)
利用WMI类修改网络配置代码简单,容易理解,但是作
者在实验中发现.该方法在某些电脑上会抛出
ManagementException的异常,导致修改不成功,因此该方法
的可靠性还存在不足。相比较而言,修改注册表的方法可靠性
更高。Windows系统的网络配置信息记录在注册表中的
SYS I'EM\、CuⅡ_entC0ntmlSet、\SeⅣices\、1Icpip 'ammeters nte血ces
项中,只要修改相关值即可达到修改网络配置目的,但该方法
需要重启电脑或者把本地链接先禁用再启用才能生效。有资料
介绍通过调用DhcpNotifyConfigChange函数实现不重启生效,
但作者实验中未获得成功。重启电脑使修改生效也不方便。故
通过C#先禁用然后再启用本地链接使修改生效是比较合理的
方法。该方法需要引用NETCONLib、NATUPNPIJib、
NetFwTypeLib 3个命名空间。实现代码如下:
///<summary>
///注册表法修改网络配置
///</summary>
///<param name= NetAdapterDescription">网卡描述<,
///param>
///<returns>修改成功返回true,失败返回false<,retums>
private void VerifyNetConfigRegister(string NetAdapterDescrip
tion)
{
Networklnterface[】Networktnterfaces=Networklnterface.
GetAIINetworklnterfaces():
foreach(Networklnterface Networklntf in Networklnterfaces)
{
if fNetworklntf.NetworklnterfaceTy’pe ==
NetworklnterfaceType.Ethernet&&Networklntf.Description
==NetAdapterDescription)
{
RegistryKey rk=Registry.LocaIMachine.OpenSubKey(
2012.09
电奠缡穗技巧与
SYSTEM\\CurrentControlSet\kServices\\TcpipkkParameters\kln—
teffaces”):
string[】strSubKeys=rk.GetSubKeyNamesO;
foreach{string strSubKey in strSubKeys)
{
if(Networklntf.Id=:strSubKey)
{
RegistryKey rkNetWork=rk.OpenSubKey
(Networklntf.Id,true);
,/设置网络配置为指定IP地址和指定DNS服务器
If《radioButton1.Checked)
{
∥网关、lP地址、子网掩码的参数用数组表示
string[】strlpAddress:new string[1】{textBox1.Text):
string[1 strSubnetMask:new string[1 l{textBox2.Text}:
string[]strGateWay=new string[1】{textBox3.Text):
//设置注册表法的DNS参数,如果有多个,相
//邻之间用逗号相连
string strNameServer=null;
if(textBox5.Text!= )
strNameServer:textBox4.Text+ .”+textBox5 Text;
else
strNameServer:textBox4.Text;
rkNetWork.SetValue (”EnableDHCP ,0,
RegistryValueKind.DWord);
r{kNetWork.SetValue( DefaultGateway“,strGateWay,
RegistryValueKind.MultiString);
rkNetWork.SetValue(”IPAddress“,strlpAddress.
RegistryValueKind.MultiString);
rkNetWork.SetValue(“SubnetMask“,strSubnetMask,
RegistryValueKind.MultiString);
rkNetWork.SetValue{ NameServer“.strNameServer,
RegistryValueKind.String);
)
殳置网络配置为自动获取
else if(radioButton2.Checked)
{
rkNetWork.SetValue(”EnableDHCP“,1,
RegistryValueKind DWord);
rkNetWork.SetValue(”DefaultGateway”,new string[】{
),RegistryValueKind.MultiString):
JrkNetWork.SetValue('NameServer", RegistryValueKind.String);
)
∥先禁用网络连接然后再启用网络连接
NetSharingManagerClass netSharingMgr=
new NetSharingManagerClass();
I1NetSharingEveryConnectionCollection connections=
netSharingMgr.EnumEveryConnection;
foreach(INetCOnnectiOn connection in connections)
{
INetConnectionProps connProps:netSharingMgr.
(下转第79页)
……
B胁PHICS AND I眦BE PROCESSING……………… …………………………………………………………
i 1) 动完成所有宗地标注,如图1所示。
(while(setq cur(nth i offplvers))
(setq dist(distance pre cur)
ang(/《 (angle pre cur)1 8O.O)pi))
)
(if(>dist 1 00)
(progn
(setq cen《list(/{+(car pre)(car cur))2)(/(+(cadr
pre)(cadr cur))2)))
//边长标注
):
):lf
(setq pre cur
i(+i 1))
);while
4.2边长的标注
(cond
图1 宗地标注成果图
《(or《and【>:ang 0)(<=ang 90))
(and(>:ang 270)(<=ang 360))
)
6结语
利用此方法标注界址点编号和坐标一体化。自动标注坐
标、边长、面积,这样不仅能保证标注内容准确无误,还可以
节约时间提高效率。
{command“text…S“等线体“”jlIIIMC“cen 1 ang(strcat
(rtos dist 2 2) m ))
):
((and(>ang 90)(<ang 270))
《setq ang(+180 ang))
参考文献
[1】别建晓.Auto CAD中坐标标注的改进.城市勘测,2008,
(1):120—121.
(command text~S~等线体~j—MC“cen 1 ang(strcat(rtos
dist 2 2)“m“))
)
);cond
[2】冯瑞莲,毛卫民,等.城镇勘测定界中运用Visual LISP语
言快速制作宗地图[J].城市勘测,2008,(1):104—105.
5程序运行
程序加载之后,在命令行输入bzxy就可以启动程序,全自
[3】高艳,顾有兵.AutoCAD中多义线的坐标标注【J].工程
与建设,20o7,(06):875—876.
(收稿日期:2011-12—09)
(上接第74页)
get NetCOnnectiOnPrOps(cOnnection):
if(connProps.MediaType =tagNETCON—MEDI △ PE
NCM
LAN&&connProps.Name=:Networklntf.Name)
—
4结语
通过程序修改网络配置,只需点击一次鼠标就能修改IP
地址、网关等全部网络配置,相对于手工修改,操作简洁、效
率更高.而且不需要记忆网络配置的具体内容,给移动办公的
人员带来了方便。作者通过查阅资料和相关帮助,对C#存储、
{
connection.Disconnect();∥禁用网络
connection.Connect0; //启用网络
break;
获取和修改网络配置的方法进行了总结和实验,设计和开发了
可靠的网络配置修改程序。文中代码在VS 2008和Windows
Server 2003中编译通过,编译程序在多台电脑的Windows XP、
Windows Server 2003和Windows Server 2008中测试通过
)
)
break;
)
)
break;
参考文献
【1】易向东,陈蓓,万英.C#程序员开发指南【M】.北京:中
国林业出版社,2006.
(收稿日期:2012—01—28)
)
)
)
琏螭 ’
版权声明:本文标题:基于XML和C#的网络配置管理软件 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713597271a642589.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论