我想编一个自动改IP的程序,用什么方法?
我上网要经常改IP切换接线,也就是有是用校园网,有时上网通,校园网是固定IP,网通自己分配,改来改去太麻烦,请问用什么方法啊?...
我上网要经常改IP切换接线,也就是有是用校园网,有时上网通,校园网是固定IP,网通自己分配,改来改去太麻烦,请问用什么方法啊?
展开
7个回答
展开全部
unit UpdateIP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, NB30, StdCtrls, DB, ADODB;
type
TfrmUpdateIPAddress = class(TForm)
adoCntAccess: TADOConnection;
adoD***acAddress: TADODataSet;
procedure adoCntAccessBeforeConnect(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmUpdateIPAddress: TfrmUpdateIPAddress;
implementation
{$R *.dfm}
//============================================================
// 设置数据库路径
//============================================================
procedure TfrmUpdateIPAddress.adoCntAccessBeforeConnect(Sender: TObject);
begin
adoCntAccess.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";' +
'User ID=Admin;Data Source=' + ExtractFilePath(Application.ExeName) +
'\MacData.mdb;Mode=Share Deny None;Extended Properties=""';
end;
//============================================================
// 获取计算机的 MAC 地址
//============================================================
function NBGetAdapterAddress(a :Integer) : string;
var
NC : TNCB;
ADAPTE : TADAPTERSTATUS;
LANAENU : TLANAENUM;
intId : Integer;
cR : Char;
strTem : string;
begin
Result := '';
try
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBENUM);
cR := NetBios(@NC);
//Reissue enum command
NC.ncb_buffer := @LANAENU;
NC.ncb_length := SizeOf(LANAENU);
cR := NetBios(@NC);
if Ord(cR) <> 0 then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBRESET);
NC.ncb_lana_num := LANAENU.lana[a];
cR := NetBios(@NC);
if Ord(cR) <> 0 then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBASTAT);
NC.ncb_lana_num := LANAENU.lana[a];
StrPCopy(NC.ncb_callname, '*');
NC.ncb_buffer := @ADAPTE;
NC.ncb_length := SizeOf(ADAPTE);
cR := NetBios(@NC);
strTem := '';
for intId := 0 To 5 do
strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]), 2);
Result := strTem;
finally
end;
end;
//============================================================
// 设置计算机名
//============================================================
function SetComputerName(AComputerName: string): Boolean;
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
begin
StrPCopy(ComputerName, AComputerName);
Result := Windows.SetComputerName(ComputerName);
end;
//============================================================
// 启动时自动修改IP地址以及计算机名
//============================================================
procedure TfrmUpdateIPAddress.FormShow(Sender: TObject);
var
sMac, sNum, sComputerName, BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
sMac := NBGetAdapterAddress(0);
AdoCntAccess.Connected := True;
adoD***acAddress.Close;
adoD***acAddress.Parameters.ParamByName('mac').Value := sMac;
adoD***acAddress.Open;
if adoD***acAddress.RecordCount = 0 then
Application.Terminate;
sNum := Trim(adoD***acAddress.FieldByName('ComputerID').Value);
//设置计算机名
sComputerName := 'Stu_' + sNum;
if not SetComputerName(sComputerName) then
begin
ShowMessage('计算机名没有设置成功!');
Application.Terminate;
end;
//设置IP地址、DNS等
BatchFileName := ExtractFilePath(ParamStr(0)) + 'AutoUpdate.bat ' + sNum;
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_Hide;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
Application.Terminate;
end;
end.
该程序首先获取当前机器的MAC地址,然后从Access表中检索机器号,并根据机器号生成机器名“Stu_+机器号”。在修改完机器名后,自动启动一个外部批处理(在这里是一个BAT文件),进行挂参数的批处理调用,实现修改IP地址工作。如果有人问为什么要调用批处理的话,实际上我想将系统做成自删除的系统,程序执行完就将自己删除的干干静静,不留任何痕迹,这在后面再讨论。
批处理文件的内容如下:
@ECHO OFF
rem 修改IP地址、子网掩码、网关
cmd /c netsh interface ip set address name="本地连接" source=static addr=10.16.19.%1 mask=255.255.255.0 gateway=10.16.19.254 gwmetric=1
rem 修改DNS
cmd /c netsh interface ip set dns name="本地连接" source=static addr=210.31.198.65
rem 删除放在启动组中的快捷方式
del /q "C:\Documents and Settings\All Users\「开始」菜单\程序\启动\AutoUpdate.*"
rem 调用重启机的批处理文件
Restart.bat
从文件中可以看出,为了让系统在第一次运行时自动修改IP地址,在开始菜单的启动中创建了一个快捷方式,自动调用我的程序,程序执行完后,将启动菜单中快捷方式删除,然后重新启动。至于自删除的功能,这里我没有放上来,感兴趣的话,可以在Google中检索“Delphi 自己 删除”,能找到很多资料。
下面说说重新启动,Windows 98、Windows Me重新启动很简单,只要一条命令就可以了:
rundll32.exe shell32.dll,SHExitWindowsEx n
其中最后面的n表示:
0 - LOGOFF
1 - SHUTDOWN
2 - REBOOT
4 - FORCE
8 - POWEROFF
Window XP的重启不同于98,需要使用 shutdown 命令,具体可以参考手册。
最困难的是NT 2000的重启,使用上面的方法都不起作用。必须通过多条命令实现。下面看看NT 2000重启的批处理文件:
@ECHO OFF & cd/d %temp% & echo [version] > {out}.inf
(set inf=InstallHinfSection DefaultInstall)
echo signature=$chicago$ >> {out}.inf
echo [defaultinstall] >> {out}.inf
rundll32 setupapi,%inf% 1 %temp%\{out}.inf
del {out}.inf
有些乱,但很管用。
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, NB30, StdCtrls, DB, ADODB;
type
TfrmUpdateIPAddress = class(TForm)
adoCntAccess: TADOConnection;
adoD***acAddress: TADODataSet;
procedure adoCntAccessBeforeConnect(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmUpdateIPAddress: TfrmUpdateIPAddress;
implementation
{$R *.dfm}
//============================================================
// 设置数据库路径
//============================================================
procedure TfrmUpdateIPAddress.adoCntAccessBeforeConnect(Sender: TObject);
begin
adoCntAccess.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";' +
'User ID=Admin;Data Source=' + ExtractFilePath(Application.ExeName) +
'\MacData.mdb;Mode=Share Deny None;Extended Properties=""';
end;
//============================================================
// 获取计算机的 MAC 地址
//============================================================
function NBGetAdapterAddress(a :Integer) : string;
var
NC : TNCB;
ADAPTE : TADAPTERSTATUS;
LANAENU : TLANAENUM;
intId : Integer;
cR : Char;
strTem : string;
begin
Result := '';
try
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBENUM);
cR := NetBios(@NC);
//Reissue enum command
NC.ncb_buffer := @LANAENU;
NC.ncb_length := SizeOf(LANAENU);
cR := NetBios(@NC);
if Ord(cR) <> 0 then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBRESET);
NC.ncb_lana_num := LANAENU.lana[a];
cR := NetBios(@NC);
if Ord(cR) <> 0 then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBASTAT);
NC.ncb_lana_num := LANAENU.lana[a];
StrPCopy(NC.ncb_callname, '*');
NC.ncb_buffer := @ADAPTE;
NC.ncb_length := SizeOf(ADAPTE);
cR := NetBios(@NC);
strTem := '';
for intId := 0 To 5 do
strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]), 2);
Result := strTem;
finally
end;
end;
//============================================================
// 设置计算机名
//============================================================
function SetComputerName(AComputerName: string): Boolean;
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
begin
StrPCopy(ComputerName, AComputerName);
Result := Windows.SetComputerName(ComputerName);
end;
//============================================================
// 启动时自动修改IP地址以及计算机名
//============================================================
procedure TfrmUpdateIPAddress.FormShow(Sender: TObject);
var
sMac, sNum, sComputerName, BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
sMac := NBGetAdapterAddress(0);
AdoCntAccess.Connected := True;
adoD***acAddress.Close;
adoD***acAddress.Parameters.ParamByName('mac').Value := sMac;
adoD***acAddress.Open;
if adoD***acAddress.RecordCount = 0 then
Application.Terminate;
sNum := Trim(adoD***acAddress.FieldByName('ComputerID').Value);
//设置计算机名
sComputerName := 'Stu_' + sNum;
if not SetComputerName(sComputerName) then
begin
ShowMessage('计算机名没有设置成功!');
Application.Terminate;
end;
//设置IP地址、DNS等
BatchFileName := ExtractFilePath(ParamStr(0)) + 'AutoUpdate.bat ' + sNum;
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_Hide;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
Application.Terminate;
end;
end.
该程序首先获取当前机器的MAC地址,然后从Access表中检索机器号,并根据机器号生成机器名“Stu_+机器号”。在修改完机器名后,自动启动一个外部批处理(在这里是一个BAT文件),进行挂参数的批处理调用,实现修改IP地址工作。如果有人问为什么要调用批处理的话,实际上我想将系统做成自删除的系统,程序执行完就将自己删除的干干静静,不留任何痕迹,这在后面再讨论。
批处理文件的内容如下:
@ECHO OFF
rem 修改IP地址、子网掩码、网关
cmd /c netsh interface ip set address name="本地连接" source=static addr=10.16.19.%1 mask=255.255.255.0 gateway=10.16.19.254 gwmetric=1
rem 修改DNS
cmd /c netsh interface ip set dns name="本地连接" source=static addr=210.31.198.65
rem 删除放在启动组中的快捷方式
del /q "C:\Documents and Settings\All Users\「开始」菜单\程序\启动\AutoUpdate.*"
rem 调用重启机的批处理文件
Restart.bat
从文件中可以看出,为了让系统在第一次运行时自动修改IP地址,在开始菜单的启动中创建了一个快捷方式,自动调用我的程序,程序执行完后,将启动菜单中快捷方式删除,然后重新启动。至于自删除的功能,这里我没有放上来,感兴趣的话,可以在Google中检索“Delphi 自己 删除”,能找到很多资料。
下面说说重新启动,Windows 98、Windows Me重新启动很简单,只要一条命令就可以了:
rundll32.exe shell32.dll,SHExitWindowsEx n
其中最后面的n表示:
0 - LOGOFF
1 - SHUTDOWN
2 - REBOOT
4 - FORCE
8 - POWEROFF
Window XP的重启不同于98,需要使用 shutdown 命令,具体可以参考手册。
最困难的是NT 2000的重启,使用上面的方法都不起作用。必须通过多条命令实现。下面看看NT 2000重启的批处理文件:
@ECHO OFF & cd/d %temp% & echo [version] > {out}.inf
(set inf=InstallHinfSection DefaultInstall)
echo signature=$chicago$ >> {out}.inf
echo [defaultinstall] >> {out}.inf
rundll32 setupapi,%inf% 1 %temp%\{out}.inf
del {out}.inf
有些乱,但很管用。
参考资料: http://cc.hbu.cn/lab/blog/more.asp?name=nzh&id=10
深圳市睿讯世纪科技有限公司
2023-08-24 广告
2023-08-24 广告
作为深圳市睿讯世纪科技有限公司的工作人员,我可以推荐一些在IP远程KVM切换器方面表现较好的企业。首先,请大家关注行业中领先的供应商,例如深圳市宏为视界有限公司、北京金万众、上海环宇、深圳迪威视讯等。这些公司提供了高质量、可靠的IP远程KV...
点击进入详情页
本回答由深圳市睿讯世纪科技有限公司提供
展开全部
写一个批处理文件,我们寝室每人有一个
打开记事本
写入
ipconfig /release
ipconfig /renew
pause
另存为ip.bat,放到桌面上,改IP双击它即可
直到可以^-^
打开记事本
写入
ipconfig /release
ipconfig /renew
pause
另存为ip.bat,放到桌面上,改IP双击它即可
直到可以^-^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
教大家如何把自动获取的ip地址转换成固定ip地址,方法分享给大家
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2020-04-30
展开全部
兔~~子IP ,连上就可以改代理了,然后点自己网站,
浏览五个页面以上,每个页面停留一分钟左右。
你如果需要改不同的IP地址,刷网站点击量,这个对你有很大帮助
浏览五个页面以上,每个页面停留一分钟左右。
你如果需要改不同的IP地址,刷网站点击量,这个对你有很大帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在百度搜 网卡ip切换 下载
好多了
好多了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询