用Delphi编写IP地址转换器2007-11-16张志远现在学校和公司的朋友们大都遇到过这种情况吧:计算机需要经常在互联网和局域网之间转换,每次转换除了换网线外,还需要修改配置(IP地址、网关、DNS等等),相当麻烦。如何能在一个窗口中一步实现呢?有些公司提供了软件如:IPChanger、EasyProxy等等,但是很遗憾这些软件都不是免费软件,只能试用一段时间。因此,笔者经过尝试,调试出一个非常简单、易行的方法,供大家参考使用。首先看一下原理:Window的netsh命令通过创建和调用记录网络配置的文本文件即可修改网络配置。主要包括一下两个命令:Netsh interface dump > 相对路径 netcfg1.txt这条命令可以将计算机现有的网络配置保存在netcfg1.txt文件中。Netsh -f netcfg1.txt这条命令即可将netcfg1.txt文件中保存的网络配置应用到计算机中。基于以上的两条命令,笔者利用Delphi6.0编制小程序,将它进一步完善。运行结果如下图所示:

如上图所示,小软件主要功能分成两部分:网络设置和网络替换。因为一个计算机绝大多数是在两个网络中互换,所以本程序只实现了两个网络的互换,更多的网络间互换道理是相同的。网络设置"互联网"和"局域网"两个Button的单击事件是将左侧网络设置区的IP地址、网关、DNS等信息记录到文本中。其中遇到的两个主要困难是IP地址的录入时的出错情况处理和保存文本文件。代码如下:
procedure TForm1.BitBtn2Click(Sender: TObject); //"局域网"按钮的单击事件
begin
FileAppendProc1();
RadioButton2.Checked:=true;
end;
procedure TForm1.FileAppendProc1(); //保存文件的函数
var NetFile : TextFile;
NetFilename : string;
FileAppend,tempStr : string;
begin
NetFilename :="netcfg2.txt";
FileAppend :=S5+MaskEdit1.Text+S1+MaskEdit2.Text+S2+MaskEdit3.Text+S3+S4;
//MessageDlg("This is commend"+FileAppend,mtInformation,[mbOK],0);
AssignFile(Netfile,"net.txt"); //net.txt文件要放在应用程序的同一目录中
Reset(NetFile);
begin
try
Memo1.Lines.Text:="";
while not Eof(NetFile) do
begin
Readln(NetFile,tempStr);
Memo1.Lines.Add(tempStr) ;
end;
finally
begin
CloseFile(NetFile);
end;
end;
AssignFile(Netfile,NetFilename);
Rewrite(NetFile);
try
Writeln(NetFile,"");
finally
CloseFile(NetFile);
end;
Memo1.Lines.Add(FileAppend);
Memo1.Lines.SaveToFile(NetFilename);
end;
end;
procedure TForm1.MaskEdit1Exit(Sender: TObject); //IP地址输入出错处理
var ip1,ip2,ip3,ip4: Integer;
begin
if (copy(MaskEdit1.Text,1,3)=" ") or (copy(MaskEdit1.Text,5,3)=" ") or (copy(MaskEdit1.Text,9,3)=" ") or (copy(MaskEdit1.Text,13,3)=" ") then
begin
showmessage("请注意,不能有空域值") ;
MaskEdit1.SetFocus;
end;
if (copy(MaskEdit1.Text,1,3)<>" ") and (copy(MaskEdit1.Text,5,3)<>" ") and (copy(MaskEdit1.Text,9,3)<>" ") and (copy(MaskEdit1.Text,13,3)<>" ") then
begin
ip1:=strtoint(trim(copy(MaskEdit1.Text,1,3)));
ip2:=strtoint(trim(copy(MaskEdit1.Text,5,3)));
ip3:=strtoint(trim(copy(MaskEdit1.Text,9,3)));
ip4:=strtoint(trim(copy(MaskEdit1.Text,13,3)));
if (ip1<0) or (ip1>254) or (ip2<0) or (ip2>254) or(ip3<0) or (ip3>254) or (ip4<0) or (ip4>254) then
begin
showmessage("您的输入不正确,请重新输入!");
MaskEdit1.SetFocus;
end;
end;
end;
右侧网络替换功能的编制相对简单些,通过两个radiobutton控件选择要使用哪个网络,然后点击"确定"按钮即可。
procedure TForm1.Button1Click(Sender: TObject); //"确定"按钮的单击事件
begin
if RadioButton1.Checked then winexec("netsh -f netcfg1.txt",sw_normal) ;
if RadioButton2.Checked then winexec("netsh -f netcfg2.txt",sw_normal) ;
end;
这样,功能就实现了,这个小软件简单易用,在我周围的同学中已经广为流传,希望大家能够从中学习到简单易行的网络配置方法。