注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

调用netsh命令動態修改IP地址(轉)  

2013-03-14 08:31:42|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Netsh命令的使用方法:

1.Show IP
1.1Cmd Mode
直接在cmd下面输入
netsh interface ip show address
亦可简写为
netsh int ip sh ad

1.2Netsh Mode
您也可以进入netsh的命令模式下
netsh                          //
进入到 netsh mode
netsh>int                    //
进入到 interface 子选项。
interface>ip                //
進入到 ip 子选项。
interface ip>show
show address -
显示 IP 位址。
show config -
显示 IP 位址及其他资料。
show dns -
显示 DNS 服务器位址。
show icmp -
显示 ICMP 统计
show interface - 显示 IP 介面统计
show ipaddress - 显示 IP 位址
show ipnet -
显示 IP net-to-media 对应
show ipstats - 显示 IP 统计
show joins -
显示加入的多点传送群组
show offload - 显示 offload 内容
show tcpconn -
显示 TCP 连线
show tcpstats - 显示 TCP 统计
show udpconn -
显示 UDP 连线
show udpstats -
显示 UDP 统计
show wins -
显示 WINS 服务器位址。

2.Set IP
下列是所有可用的指令:
set address -
在指定的介面设定 IP 位址或预设网关。
set dns -
设定 DNS 服务器模式及位址。
set wins -
设定 WINS 服务器模式及位址。

2.1.
设定IP位址
2.1.1.DHCP
设定
若您希望由DHCP取得IP位址可输入
interface ip>set ad "
区域连接" DHCP
或简写成
interface ip>set ad "
区域连接" D

2.1.2.
静态IP设定
2.1.2.1.
设定IP位址与子网关
netsh -
进入到 netsh mode
netsh>int -
进入到 interface 子选项。
interface>ip -
进入到 ip 子选项。
interface ip>set address name = "
区域连接" source = static addr = 10.2.2.100 mask = 255.255.255.0
可简写成
interface ip>set ad "
区域连接" s 10.2.2.100 255.255.255.0

2.1.2.2.
设定IP路由
interface ip>set address name = "
区域连接" gateway = 10.2.2.254 gwmetric = 1
可简写成
interface ip>set ad "
区域连接" ga=10.2.2.254 gw = 1

2.1.2.3
同时设定IP位址和路由
interface ip>set address name = "
区域连接" source = static addr = 10.2.2.100 mask = 255.255.255.0 gateway = 10.2.2.254 gwmetric = 1
可简写成
interface ip>set ad "
区域连接" s 10.2.2.100 255.255.255.0 10.2.2.254 1
设定完後,记得用sh ad去看一下设定的對不對。

2.3
设定DNS来源
若是由DHCP取得,请输入
interface ip>set dns "
区域连接" source=dhcp
若是使用静态设定,请输入
interface ip>set dns name = "
区域连接" source = static addr = 10.2.5.2
新增第二組DNS,请输入
interface ip>add dns name = "
区域连接" addr = 10.2.5.3

2.4
设定WINS来源
若是由DHCP取得,请输入
interface ip>set wins "
区域连接" source=dhcp
若是使用静态设定,请输入
interface ip>set wins name = "
区域连接" source = static addr = 10.2.5.10
新增第二組WINS,请输入
interface ip>add wins name = "
区域连接" addr = 10.2.5.17

3.
将网路状态设定导出/导入
3.1
导出
netsh -c interface dump >c:/netset.txt
当然,interface可以简写成intdump更可简化成d,所以就变成了
netsh -c int d >c:/netset.txt
3.2
导入
netsh -f c:/netset.txt
既可 

在Delphi中调用过程:
//设置成自动获取IP:
NetShTxt := 'netsh interface ip set address ' + '"' + NetWork + '"' + ' source=dhcp';
winexec(pchar(NetShTxt), sw_hide);

//以下代码设置IP地址和网关:
NetShTxt := 'netsh interface ip set address name=' + '"' + NetWork + '"' + ' source=static addr=' +   IPAddress.IPString + ' mask=' + submask.IPString;
winexec(pchar(NetShTxt), sw_hide);

//网关
NetshTxt := 'netsh interface ip set address name=' + '"' + NetWork + '"' + ' gateway=' + DefaultGateway.IPString + '  gwmetric=0';
winexec(pchar(NetShTxt), sw_hide);
其中使用了IPEdit,这个组件,经过修改,已经基本能用于IP地址的输入和获取.本来从网上下载的以为能用,可实际用的过程中会发现不少问题.

设置DNS:
NetshTxt := 'netsh interface ip  set dns name=' + '"' + NetWork + '"' + ' source=static addr=' + FirstDns.IPString + ' register=PRIMARY';
winexec(pchar(NetShTxt), SW_Hide);
//netsh interface ip add dns name="本地连接" addr=你的DNS的IP地址 index=2
NetshTxt := 'netsh interface ip  add dns name=' + '"' + NetWork + '"' + ' addr=' + SecondDNS.IPString + ' index=2';
注意以上第二个DNS,添加用的命令:
//netsh interface ip add dns name="本地连接" addr=你的DNS的IP地址 index=2
第三个DNS:
//netsh interface ip add dns name="本地连接" addr=你的DNS的IP地址 index=3

后期调用winExec执行,注意生成后使用GetAdaptersInfo函数进行检查一下IP地址是否设置正确.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, shellapi, wininet, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1:      TTimer;
    Button1:     TButton;
    StaticText1: TStaticText;
    Edit1:       TEdit;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    StaticText4: TStaticText;
    Edit2:       TEdit;
    StaticText5: TStaticText;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  end;

implementation

procedure Delay(MSecs: DWORD);
FirstTickCount,Now:Longint; 
begin 
  FirstTickCount := GetTickCount; 
  repeat 
    Application.ProcessMessages; 
    Now := GetTickCount; 
  until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); 
end; 

procedure TForm1.Button1Click(Sender: TObject);
var
  a: string;
  b: string;
  c: integer;
  d: string;
  e: string;
  rec: dword;
  ask: boolean;
  ProcessHandle, CMD1: THandle;
  ProcessID: DWORD;
begin
  e := ' ';
  a := '/k ';
  for c := StrToInt(edit2.Text) to 255 do
  begin
    cmd1 := GetWindowThreadProcessId(FindWindow('consolewindowclass', nil), ProcessID);
    if cmd1 <> 0 then
    begin
      ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
      TerminateProcess(ProcessHandle, 4);
    end
    else
      b := '192.168.13.' + IntToStr(c);
    statictext2.Caption := b;
    d := a + ' netsh interface ip set address' + e + '"' + edit1.Text + '"' + e + 'static' + e + b + e + '255.255.255.0' + e + '192.168.13.1' + ' 1';
    begin
      ShellExecute(handle, 'open', PChar('cmd.exe'), PChar(d), nil, SW_show);
    end;
    ask := InternetGetConnectedState(@rec, 0);
    if ask then
    begin
      break;
    end
    else
    begin
      Delay(25000);
      cmd1 := GetWindowThreadProcessId(FindWindow('consolewindowclass', nil), ProcessID);
      if cmd1 <> 0 then
      begin
        ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
        TerminateProcess(ProcessHandle, 4);
      end;
    end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  rec: dword;
  ask: boolean;
begin
  ask := InternetGetConnectedState(@rec, 0);
  if ask then
  begin
    StaticText1.Caption := '网络连接成功';
    button1.Enabled := False;
  end
  else
  begin
    StaticText1.Caption := '网络连接失败';
    button1.Enabled := True;
  end;
end;

end.
  评论这张
 
阅读(1204)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017