2011-08-10 8 views
10

में बाहरी (सार्वजनिक) आईपी कैसे प्राप्त करें मुझे डेल्फी से अपना बाहरी (सार्वजनिक) आईपी पता प्राप्त करने की आवश्यकता है।डेल्फी

उदाहरण के लिए www.whatismyip.com द्वारा दिखाया गया एक ही आईपी।

मैं यह कैसे कर सकता हूं? विंसॉक इस अनुमति नहीं देता है।

+0

बाहरी IP पता करके, आप अपने इंटरनेट सुलभ आईपी पते मतलब है? या क्या आपका मतलब स्थानीय नेटवर्क पता है जो 127.0.0.1 नहीं है? – Tremmors

+0

इंटरनेट सुलभ पता, www.whatismyip.com – chubbyk

+0

द्वारा दिखाया गया यह प्रश्न आपके कंप्यूटर के वास्तविक आईपी पते दिखाता है; http://stackoverflow.com/questions/576538/delphi-how-to-get-all-local-ips –

उत्तर

7

मुझे नहीं लगता कि आप कर सकते हैं। खैर, आप कुछ सेवा कह सकते हैं जो आपको बताती है कि आपका आईपी पता क्या प्रतीत होता है, (उदा: http://www.whatismyip.com/) और प्रतिक्रिया से इसे समझें। लेकिन मुझे नहीं लगता कि आपके पीसी पर कुछ भी आपको बताएगा कि आपका आईपी पता बाहरी दुनिया में कैसा दिखता है।

untested है, लेकिन मुझे लगता है आप इंडी के साथ ऐसा कर सकते हैं: इस प्रयोग करने से पहले http://www.whatismyip.com/faq/automation.asp:

MyPublicIP := IdHTTP1.Get('http://automation.whatismyip.com/n09230945.asp'); 

पर नियमों/नीति की समीक्षा करें।

+12

... और कारण यह है कि आपका सार्वजनिक पता आपके कंप्यूटर से जरूरी नहीं है। अक्सर, यह एक बाहरी राउटर को सौंपा गया है, जो सभी प्रभावों के लिए एक पूरी तरह से अलग कंप्यूटर है। –

+0

हां। डिफ़ॉल्ट गेटवे के साथ सार्वजनिक आईपी और एडाप्टर दो अलग-अलग चीजें हैं। –

1
स्मृति से

, अपरीक्षित: http://ipinfo.io/json:

function GetMyHostAddress: string; 
var 
    http: IWinHttpRequest; 
begin 
    http := CreateOleObject('WinHttp.WinHttpRequest5.1') as IWinHttpRequest; 
    http.Open('GET', 'http://automation.whatismyip.com/n09230945.asp', False); 
    http.Send(EmptyParam); 

    if http.StatusCode = 200 then 
     Result := http.ResponseText 
    else 
     Result := ''; 
end; 
6

आप इस वेबसाइट का उपयोग कर सकते हैं। यह JSON प्रारूप में आपके वर्तमान इंटरनेट कनेक्शन के बारे में जानकारी देता है।

डेल्फी में आपको IdHTTP का उपयोग करने की आवश्यकता है: IdHTTP1.Get('http://ipinfo.io/json') और यह सभी डेटा के साथ एक स्ट्रिंग लौटाएगा। आप एक JSON दुभाषिया आप की तरह उपयोग कर सकते हैं या आप निम्नलिखित उदाहरण के रूप में उपयोग कर सकते हैं lkJSON:

json := TlkJSON.ParseText(MainEstrutura.IdHTTP1.Get('http://ipinfo.io/json')) as TlkJSONobject; 

str := json.Field['ip'].Value; 

मुझे आशा है कि आप मदद करते हैं।

+4

यदि आप इसके बजाय 'http: // ipinfo.io/ip' का उपयोग करते हैं, तो यह केवल जेएसओएन में लपेटे बिना सादे पाठ में आईपी देता है जिसे पार्स किया जाना चाहिए। –

+0

इस उत्तर में दिए गए कोड के रूप में आपको इस आईपी –

+2

के बारे में सभी जानकारी प्राप्त करने के लिए 'http: // ipinfo.io/json' उपयोग की आवश्यकता है। ओपी ने आईपी के बारे में सभी विवरण पुनर्प्राप्त करने के लिए नहीं कहा था, केवल आईपी को पुनः प्राप्त करने के लिए । इसलिए '/ json' अधिक होता है जब'/ip' पर्याप्त होगा। यदि आप वेबसाइट के दस्तावेज़ीकरण को पढ़ते हैं, तो अलग-अलग फ़ील्ड स्वयं द्वारा पुनर्प्राप्त किए जा सकते हैं। –

1

यह मेरे लिए काम करता है:

uses JSON,IdHTTP; 
    function GetIP():String; 
    var LJsonObj : TJSONObject; 
    str:string; 
    http : TIdHttp; 
    begin 
    str:=''; 
    http:=TIdHTTP.Create(nil); 
    try 
     str:=http.Get('http://ipinfo.io/json'); 
     LJsonObj:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(str),0)   as TJSONObject; 
     str := LJsonObj.Get('ip').JsonValue.Value; 
     LJsonObj.Free; 
     http.Free; 
    Except 
    end; 
    result:=str; 
end; 
+2

मैं ऐसी सेवाओं का उपयोग करना पसंद करता हूं जो किसी भी अतिरिक्त मेटाडेटा स्वरूपण के बिना आईपी को सादा पाठ के रूप में रिपोर्ट करते हैं। उदाहरण के लिए: 'कार्य गेटआईपी: स्ट्रिंग; TIdHTTP के साथ शुरू करें। परिणाम प्रयास करें: = http।जाओ ('http://ipinfo.io/ip'); आखिरकार मुक्त हुआ; समाप्त; अंत; ' –

-1
Function GetMyIP:string; 
var 
    xmlhttp:olevariant; 
    s,p:integer; 
    temp:string; 
begin 
    result:=emptystr; 
    xmlhttp:=CreateOleObject('Microsoft.XMLHTTP'); 
    try 
    xmlhttp.open('GET', 'http://www.findipinfo.com/', false); 
    xmlhttp.SetRequestHeader('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); 
    xmlhttp.send(null); 
    except 
    exit; 
    end; 
    if(xmlhttp.status = 200) then 
    temp:=trim(VarToStr(xmlhttp.responseText)); 
    xmlhttp:=Unassigned; 
    s:=pos('Address Is:',temp); 
    if s>0 then 
    inc(s,11) 
    else 
    exit; 
    temp:=copy(temp,s,30); 
    s:=pos('<',temp); 
    if s=0 then exit 
    else 
    dec(s); 
    result:=trim(copy(temp,1,s)); 
end;