2012-09-25 15 views
5

मैं अपना आईपी पता प्रोग्रामेटिक रूप से कैसे सेट कर सकता हूं?प्रोग्रामिंग के रूप में अपना आईपी पता कैसे सेट करें?

मेरा आवेदन यह जाँच कर रहा है, (हालांकि मुझे यकीन है कि अगर About.com से कोड बेहतर नहीं हो सकता है नहीं कर रहा हूँ) DelphiTricks से कोड का उपयोग कर

मैं परीक्षण प्रयोजनों के लिए प्रोग्राम के रूप में पता सेट करने में सक्षम होना चाहता हूँ। और (मुझे नहीं पता कि यह महत्वपूर्ण है), मैं ऐसा करने में सक्षम होना चाहता हूं, यहां तक ​​कि मैं किसी भी नेटवर्क (लैपटॉप पर, एक ट्रेन पर) से जुड़ा नहीं हूं।

+1

संक्षिप्त उत्तर: जब तक आप एक ज्ञात वातावरण में सिस्टम स्तर का काम नहीं कर रहे हैं, आमतौर पर आप ** ** नहीं कर सकते हैं। सिस्टम के विशाल बहुमत को एक [डीएचसीपी] (http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) सर्वर के माध्यम से पता मिलता है और यादृच्छिक रूप से किसी के आईपी पते के साथ मिलकर कनेक्शन खो जाने का कारण बन सकता है। यदि आप उस माहौल को जानते हैं जिसमें आप हैं और आप सुरक्षित रूप से ऐसा कर सकते हैं, तो आपको हमें उसके साथ काम करने के लिए कुछ देना होगा - आपको पता है, उन छोटे विवरणों जैसे ऑपरेटिंग सिस्टम - और इसका संस्करण क्या है। क्या आपके पास रूट/एडमिन एक्सेस है? मूल सामान –

+1

क्या आपका मतलब है कि आपका ऐप देखता है? एक साधारण सशर्त संकलन करना चाहिए। बस एक कोड प्राप्त करने के लिए आईपी प्राप्त करने वाला कोड बदलें। –

उत्तर

9

अपने नेटवर्क एडाप्टर के आईपी पते को बदलने के लिए आप Win32_NetworkAdapterConfiguration WMI कक्षा या AddIPAddress WinApi विधि का उपयोग कर सकते हैं।

डब्ल्यूएमआई का उपयोग करने वाले इस नमूने को आजमाएं।

{$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

संबंधित मुद्दे