PDA

Ver la Versión Completa : Cambiar la dirección IP y/o servidor dns de un adaptador (lo mismo wifi que ethernet)


Jcg-Guirola
21-06-2018, 15:58:45
Hola, es estado buscando en el foro y he visto preguntas parecidas sin respuestas así que lo más seguro es que no se pueda hacer, aún así son del año 2005 o 2006 y tal vez ya saben como hacerlo, lo que necesito es cambiar la dirección IP y/o servidor dns de un adaptador (lo mismo wifi que ethernet). Gracias
Disculpen si subo el mismo hilo dos veces pero es que la conexión está lenta y creo que se cayó cuando le di enviar tema en el hilo anterior

duilioisola
21-06-2018, 18:20:21
Puedes probar esto. Utiliza la clase WMI (Windows Management Instrumentation), que te da información del sistema y además puedes cambiarla.

En la web de Neftali hay información: https://neftali.clubdelphi.com/wmi-%e2%80%93-introduccion/
Creo que tiene una librería por allí, que quizas te sirva de algo.

Código de StackOverflow:
https://stackoverflow.com/questions/12574843/how-to-set-my-ip-address-programmatically

{$APPTYPE CONSOLE}

{$R *.res}

uses
SysUtils,
ActiveX,
Variants,
ComObj;

procedure SetStaticIpAddress(const NetworkCard, IPAddress, Mask :string);
const
WbemUser ='';
WbemPassword='';
WbemComputer='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet : OLEVariant;
FWbemObject : OLEVariant;
FOutParams : OLEVariant;
vIpAddress : OLEVariant;
vMask : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);

FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_NetworkAdapterConfiguration Where Description="%s"',[NetworkCard]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
vIpAddress := VarArrayCreate([0, 0], varVariant);
vIpAddress[0]:= IPAddress;
vMask := VarArrayCreate([0, 0], varVariant);
vMask[0]:= Mask;
FOutParams:=FWbemObject.EnableStatic(vIpAddress, vMask);
// 0 - Successful completion, no reboot required
// 1 - Successful completion, reboot required
Writeln(Format('ReturnValue %s',[FOutParams]));
end
else
Writeln('Network card not found');
end;

begin
try
CoInitialize(nil);
try
SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.

Jcg-Guirola
21-06-2018, 20:25:50
Voy a probar eso y te digo, muchas gracias, en otro hilo había preguntado como cambiar proxy del sistema pero dice que lo han movido y me redirecciona aquí así que aquí pongo como lo solucioné:
Lo que hice fue cambiar el proxy directamente desde el regedit de esta forma


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,registry, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
reg:= TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings', True);
reg.WriteString('ProxyServer','proxy.unica.cu:3128');
reg.CloseKey;

end;

end.



voy a buscar quizás pueda hacer lo mismo con el ip

Jcg-Guirola
21-06-2018, 23:59:19
encontré justo lo que estoy buscando en http://delphiaccess.com/foros/index.php/topic/1961-configurando-ip-gateway-sub-mascara-dns-primario-y-dns-alterno-desde-delphi/ el problema es que necesito poder decir a cual adaptador quiero cambiarle el ip aver si algunos de ustedes puede, yo no se mucho de programación todavía y no pude comprender completamente el código

Jcg-Guirola
22-06-2018, 15:49:20
Ya probé el de duilioisola solo hecho en falta lo de configurar el gateway per está ok muchas gracias, me demoré un poco porque me daba error y era que no me había fijado que estaba en consola, es que aún no se mucho, cuando me di cuenta lo adapté y perfecto

Jcg-Guirola
22-06-2018, 16:23:14
Bueno me he pues a revisar el de duilioisola y este (http://delphiaccess.com/foros/index.php/topic/1961-configurando-ip-gateway-sub-mascara-dns-primario-y-dns-alterno-desde-delphi/) y al final agregué el gateway me quedó así

uses
ActiveX,
ComObj;

procedure SetStaticIpAddress(const NetworkCard, IPAddress,Mask,gateway:string);

const
WbemUser ='';
WbemPassword='';
WbemComputer='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet : OLEVariant;
FWbemObject : OLEVariant;
FOutParams : OLEVariant;
vIpAddress : OLEVariant;
vMask : OLEVariant;
vgateway : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
begin
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);

FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_NetworkAdapterConfiguration Where Description="%s"',[NetworkCard]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
vIpAddress := VarArrayCreate([0, 0], varVariant);
vIpAddress[0]:= IPAddress;
vMask := VarArrayCreate([0, 0], varVariant);
vMask[0]:= Mask;
vgateway := VarArrayCreate([0, 0], varVariant);
vgateway[0]:= gateway;
FOutParams:=FWbemObject.EnableStatic(vIpAddress, vMask);
FOutParams:=FWbemObject.setgateways(vgateway);
// 0 - Successful completion, no reboot required
// 1 - Successful completion, reboot required
showmessage(Format('ReturnValue %s',[FOutParams]));
end
else
showmessage('Network card not found');
end;


end;


procedure TForm1.Button1Click(Sender: TObject);
begin
SetStaticIpAddress('Atheros AR8131 PCI-E Gigabit Ethernet Controller (NDIS 6.20)','10.2.4.3','255.255.255.0','10.1.1.1');
end;

end.