2012-09-25 6 views
5

프로그래밍 방식으로 IP 주소를 설정하려면 어떻게해야합니까?프로그래밍 방식으로 IP 주소를 설정하는 방법은 무엇입니까?

내 응용 프로그램 (나는 About.com의 코드가 잘되지 않을 수 있습니다 경우 확실하지 오전하지만) 내가 테스트 목적으로 프로그래밍 주소를 설정할 수 있도록하려면

DelphiTricks에서 코드를 사용하여, 그것을 확인하고 있습니다. 그리고 (이것이 중요한지는 모르겠다.) 나는 랩톱에서 열차를 타고 어떤 네트워크에도 연결되어 있지 않아도 그렇게 할 수 있기를 바란다.

+1

짧은 대답 : 알려진 환경에서 시스템 수준의 작업을 수행하지 않는 한 대개 ** ** 작업을 수행 할 수 없습니다. 대다수의 시스템은 [DHCP] (http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) 서버를 통해 주소를 수신하며 임의로 IP 주소를 묻어 버리면 연결이 끊어 질 수 있습니다. 자신이 속한 환경을 알고 있고 안전하게이 작업을 수행 할 수 있다면 운영 체제와 같은 사소한 세부 사항과 그 버전을 알고 있어야합니다. 루트/관리자 액세스 권한이 있습니까? 기본적인 것들. –

+1

앱에 표시되는 것을 변경한다는 의미입니까? 간단한 조건부 컴파일이이를 수행해야합니다. ip를 설정 한 코드를 변경하십시오. –

답변

9

네트워크 어댑터의 IP 주소를 변경하려면 Win32_NetworkAdapterConfiguration WMI 클래스 또는 AddIPAddress WinApi 메서드의 EnableStatic 메서드를 사용할 수 있습니다.

WMI를 사용하는이 샘플을 사용해보십시오.

{$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. 
+3

+1, ['ShellExecute'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153 (v = vs.85) .aspx)는 ['this'와 ] (http://serverfault.com/a/39670/98231)? – TLama

+1

예, 유효한 세 번째 옵션입니다. – RRUZ

+0

+1에 모두. @ 루디, 나는 지금 코드를 시도하고있다. 어리석은 질문, - 어떻게 할 가치가있는 네트워크 카드를 줄까? – Mawg

관련 문제