Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как программно установить IP-адрес


Автор: AndreySoft 21.10.2003, 20:09
ну т.е. не в ручную, в настройках, а чтобы прога присвоила компу IP-адрес, маску, шлюз, днс-сервер... ну допустим из Label.Caption
Если можно помогите кодом... или хотя бы где это можно найти.
Заранее, огромное спасибо!

Автор: dvs 22.10.2003, 00:04
Ну лучше, наверное, из Edit.Text.

Автор: AndreySoft 22.10.2003, 18:14
Да хоть из Edit, принцип не в этом заключается.
Я про то, как запихнуть этот IP программно.

Автор: Pakshin A. S. 22.10.2003, 18:51
Есть функция получения IP-адреса, может поможет...

Код


function my_ip_adress: longint;
const
 bufsize = 255;
var
 buf: pointer;
 RemoteHost: PHostEnt;
begin
 buf:=nil
 try
   GetMem(buf, bufsize);
   RemoteHost:=WinSock.HetHostName(buf, bufsize);
   if RemoteHost = nil then
     Result:=WinSock.htonl($07000001)
   else
     Result:=longint(pointer(RemoteHost^.h_addr_list^)^);
 finally
   if buf <> nil then
     FreeMem(buf, bufsize);
 end;
 Result:=WinSock.nyohl(Result);
end;



P. S. Как я понял, IP узнаётся по адресу. Значит на этот адрес можно послать новый IP! Но я могу ошибаться...

Автор: p0s0l 22.10.2003, 20:41
Цитата
Change IP address and HostName of NT machine

This article was contributed by Massimo Negroni .

Environment: NT4 SP5

How to set local machine IP addresses from your program ?

Follow this steps :

1. Open registry on the HKEY_LOCAL_MACHINE

2. Find the subKey = SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\"netcard# "

"netcard# " usually is "1" but you can control any subkey and find specific netwrok Adapters

Refer to "MSDN Registry Entries for Network Adapter Cards"

3. Get data for the value "ServiceName"

4. Find the subKey = SYSTEM\CurrentControlSet\Services\"ServiceName"\Parameters\TcpIp"

5. Set data for the value "IpAddress" to change IP address

6. Set data for the value "SubnetMask" to change subnet mask

7. Set data for the value "DefaultGateway" to change default gateway

8. Reboot your PC.


How to set local machine HostName from your program ?

Follow this steps :

1. Open registry on the HKEY_LOCAL_MACHINE

2. Find the subKey = SYSTEM\CurrentControlSet\Services\TcpIp\Parameters

3. Set data for the value "HostName"

4. Find the subKey = SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

5. Set data for the value "ComputerName"

6. Reboot your PC and HostName will be set.


WARNING: Modify registry incorrect can cause serious, system-wide problems . Use this at your own risk

Где-то была тема в разделе C про это. Там вроде Baa хотел написать для этого DLL, которая делает выше перечисленное.
А в принципе можешь и сам сделать - не очень и сложно...

Автор: AndreySoft 22.10.2003, 21:42
Цитата(Pakshin @ 22.10.2003, 18:51)
Как я понял, IP узнаётся по адресу. Значит на этот адрес можно послать новый IP! Но я могу ошибаться...

т.е. ты не знаешь можно ли таким способом установить новый IP... Так?

Автор: AndreySoft 22.10.2003, 21:43
Цитата(p0s0l @ 22.10.2003, 20:41)
Где-то была тема в разделе C про это. Там вроде Baa хотел написать для этого DLL, которая делает выше перечисленное.
А в принципе можешь и сам сделать - не очень и сложно...

Значит надо использовать реестр?
И больше никак?

Автор: dvs 22.10.2003, 22:08
А есть еще извращенный способ сделать это:
Использовать Winexec или еще что-нибуть и утилиту ipconfig.
Но это только для извращенцев.

Автор: AndreySoft 22.10.2003, 22:40
Цитата(dvs15 @ 22.10.2003, 22:08)
А есть еще извращенный способ сделать это:
Использовать Winexec или еще что-нибуть и утилиту ipconfig.
Но это только для извращенцев.

Ну нет, это даже не грамотно получается. Плохой стиль программирования. т.е. Delphi запускает другую прогу - отстой полный.
Нет, мне надо чтобы это произошло чисто кодом, даже если этот код равносилен какой-нибудь из утилит (тот же, ipconfig).
Вобщем меня интересует как это осуществить программный путём...

Автор: <Spawn> 22.10.2003, 23:19
Смотри интерфейс IClusCfgIPAddressInfo и его метод SetIPAddress. Вот небольшое описалово из MSDN:

Platform SDK: Windows Clustering
IClusCfgIPAddressInfo::SetIPAddress
[This is preliminary documentation and subject to change.]

The SetIPAddress method sets an IP address of the network interface, to take affect when the cluster configuration is committed.

HRESULT SetIPAddress(
ULONG ulDottedQuadIn
);
Parameters
ulDottedQuadIn
[in] The IP address of the interface to be stored in dotted quad format.
Return Values
If the SetIPAddress method successfully sets the IP address, it returns S_OK.

Any other HRESULT value indicates that the call failed.

Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl.

See Also
IClusCfgIPAddressInfo

Platform SDK Release: November 2001 What did you think of this topic?
Let us know. Order a Platform SDK CD Online
(U.S/Canada) (International)



Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl.
See Also
IClusCfgIPAddressInfo

Вот описалово самого интерфейса:

Platform SDK: Windows Clustering
IClusCfgIPAddressInfo
[This is preliminary documentation and subject to change.]

The IClusCfgIPAddressInfo interface sets and retrieves information about an IP address.

Methods in Vtable Order
The IClusCfgIPAddressInfo interface inherits the methods of the standard COM interface IUnknown.

In addition, IClusCfgIPAddressInfo exposes the following unique methods.

IClusCfgIPAddressInfo Method Description
GetUID Retrieves the unique identifier for an IP address.
GetIPAddress Retrieves an IP Address for the network interface.
SetIPAddress Stores an IP Address of the network interface, to take effect when the cluster configuration is committed.
GetSubnetMask Retrieves a subnet mask for the network interface.
SetSubnetMask Stores a subnet mask for the network interface, to take effect when the cluster configuration is committed.


Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl.

Platform SDK Release: November 2001 What did you think of this topic?
Let us know. Order a Platform SDK CD Online
(U.S/Canada) (International)



Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl.

Автор: Baa 23.10.2003, 00:44
Гы smile.gif Spawn, во ты посоветовал... это назвывается выставить IP через попу smile.gif может еще через RPC выставим? wink.gif
У функции название конечно заманчивое, но ты знаешь, что значит это: IClusCfgIPAddressInfo::SetIPAddress
Енто ж метод COM Interface'а...
более того
Цитата
Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl


Прально Posol грит smile.gif надо через реестр... самое логичное этому объяснение:
Ента инфа нужна драйверу, а откуда ему еще брать параметры, как не из реестра? wink.gif
Чтобы проще было енто се юзать, все засовывается в длл... могу поделиться онной...впрочем, как уже говорилось, создать подобную труда не составит.

Автор: Dmitry V.Abramov 23.10.2003, 05:34
Цитата(Baa @ 23.10.2003, 00:44)
Прально Posol грит smile.gif надо через реестр... самое логичное этому объяснение:
Ента инфа нужна драйверу, а откуда ему еще брать параметры, как не из реестра? wink.gif

Есть еще одно объяснение - в машине может стоять N сетевых карт. Каждой из которых может быть прописано M адресов. Который из них отправится менять IClusCfgIPAddressInfo::SetIPAddress - не очень понятно...

Автор: AndreySoft 23.10.2003, 15:47
Цитата(Baa @ 23.10.2003, 00:44)
Гы smile.gif Spawn, во ты посоветовал... это назвывается выставить IP через попу smile.gif может еще через RPC выставим? wink.gif
У функции название конечно заманчивое, но ты знаешь, что значит это: IClusCfgIPAddressInfo::SetIPAddress
Енто ж метод COM Interface'а...
более того
Цитата
Requirements
Windows NT/2000/XP: Included in Windows .NET Server.
Header: ClusCfgServer.idl


Прально Posol грит smile.gif надо через реестр... самое логичное этому объяснение:
Ента инфа нужна драйверу, а откуда ему еще брать параметры, как не из реестра? wink.gif
Чтобы проще было енто се юзать, все засовывается в длл... могу поделиться онной...впрочем, как уже говорилось, создать подобную труда не составит.

Я тоже считаю что через реестр будет более правильно и полегче.

Ну а пример свой можешь дать?

Автор: AndreySoft 24.10.2003, 18:33
Алё! Примерчик выложишь, или как?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)