怎样改变程序的访问IP地址

怎样改变程序的访问IP地址,第1张

unit UpdateIP;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, NB30, StdCtrls, DB, ADODB;

type

TfrmUpdateIPAddress = class(TForm)

adoCntAccess: TADOConnection;

adoDacAddress: TADODataSet;

procedure adoCntAccessBeforeConnect(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmUpdateIPAddress: TfrmUpdateIPAddress;

implementation

{$R dfm}

//============================================================

// 设置数据库路径

//============================================================

procedure TfrmUpdateIPAddressadoCntAccessBeforeConnect(Sender: TObject);

begin

adoCntAccessConnectionString := 'Provider=MicrosoftJetOLEDB40;Password="";' +

'User ID=Admin;Data Source=' + ExtractFilePath(ApplicationExeName) +

'\MacDatamdb;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));

NCncb_command := Chr(NCBENUM);

cR := NetBios(@NC);

//Reissue enum command

NCncb_buffer := @LANAENU;

NCncb_length := SizeOf(LANAENU);

cR := NetBios(@NC);

if Ord(cR) <> 0 then

exit;

ZeroMemory(@NC, SizeOf(NC));

NCncb_command := Chr(NCBRESET);

NCncb_lana_num := LANAENUlana[a];

cR := NetBios(@NC);

if Ord(cR) <> 0 then

exit;

ZeroMemory(@NC, SizeOf(NC));

NCncb_command := Chr(NCBASTAT);

NCncb_lana_num := LANAENUlana[a];

StrPCopy(NCncb_callname, '');

NCncb_buffer := @ADAPTE;

NCncb_length := SizeOf(ADAPTE);

cR := NetBios(@NC);

strTem := '';

for intId := 0 To 5 do

strTem := strTem+ InttoHex(Integer(ADAPTEadapter_address[intId]), 2);

Result := strTem;

finally

end;

end;

//============================================================

// 设置计算机名

//============================================================

function SetComputerName(AComputerName: string): Boolean;

var

ComputerName: array[0MAX_COMPUTERNAME_LENGTH + 1] of Char;

begin

StrPCopy(ComputerName, AComputerName);

Result := WindowsSetComputerName(ComputerName);

end;

//============================================================

// 启动时自动修改IP地址以及计算机名

//============================================================

procedure TfrmUpdateIPAddressFormShow(Sender: TObject);

var

sMac, sNum, sComputerName, BatchFileName: string;

ProcessInfo: TProcessInformation;

StartUpInfo: TStartupInfo;

begin

sMac := NBGetAdapterAddress(0);

AdoCntAccessConnected := True;

adoDacAddressClose;

adoDacAddressParametersParamByName('mac')Value := sMac;

adoDacAddressOpen;

if adoDacAddressRecordCount = 0 then

ApplicationTerminate;

sNum := Trim(adoDacAddressFieldByName('ComputerID')Value);

//设置计算机名

sComputerName := 'Stu_' + sNum;

if not SetComputerName(sComputerName) then

begin

ShowMessage('计算机名没有设置成功!');

ApplicationTerminate;

end;

//设置IP地址、DNS等

BatchFileName := ExtractFilePath(ParamStr(0)) + 'AutoUpdatebat ' + sNum;

StartUpInfodwFlags := STARTF_USESHOWWINDOW;

StartUpInfowShowWindow := SW_Hide;

if CreateProcess(nil, PChar(BatchFileName), nil, nil,

False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then

begin

CloseHandle(ProcessInfohThread);

CloseHandle(ProcessInfohProcess);

end;

ApplicationTerminate;

end;

end

程序首先获取当前机器的MAC地址,然后从Access表中检索机器号,并根据机器号生成机器名“Stu_+机器号”。在修改完机器名后,自动启动一个外部批处理(在这里是一个BAT文件),进行挂参数的批处理调用,实现修改IP地址工作。如果有人问为什么要调用批处理的话,实际上我想将系统做成自删除的系统,程序执行完就将自己删除的干干静静,不留任何痕迹,这在后面再讨论。

批处理文件的内容如下:

@ECHO OFF

rem 修改IP地址、子网掩码、网关

cmd /c netsh interface ip set address name="本地连接" source=static addr=101619%1 mask=2552552550 gateway=101619254 gwmetric=1

rem 修改DNS

cmd /c netsh interface ip set dns name="本地连接" source=static addr=2103119865

rem 删除放在启动组中的快捷方式

del /q "C:\Documents and Settings\All Users\「开始」菜单\程序\启动\AutoUpdate"

rem 调用重启机的批处理文件

Restartbat

从文件中可以看出,为了让系统在第一次运行时自动修改IP地址,在开始菜单的启动中创建了一个快捷方式,自动调用我的程序,程序执行完后,将启动菜单中快捷方式删除,然后重新启动。至于自删除的功能,这里我没有放上来,感兴趣的话,可以在Google中检索“Delphi 自己 删除”,能找到很多资料。

下面说说重新启动,Windows 98、Windows Me重新启动很简单,只要一条命令就可以了:

rundll32exe shell32dll,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

有些乱,但很管用。

以上就是关于怎样改变程序的访问IP地址全部的内容,包括:怎样改变程序的访问IP地址、如何修改IP、IP怎么重新设置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10164598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存