2011-08-10 28 views
10

Delphi'den harici (genel) IP adresimi almam gerekir.Delphi'de harici (genel) IP nasıl edinilir

Örneğin, www.whatismyip.com ile gösterilen aynı IP.

Bunu nasıl yapabilirim? Winsock buna izin vermiyor.

+0

, sizin internet erişilebilen IP adresini demek? Yoksa 127.0.0.1 olmayan bir yerel ağ adresini mi kastediyorsunuz? – Tremmors

+0

internet erişilebilir adres, www.whatismyip.com ile gösterilir. – chubbyk

+0

Bu soru, bilgisayarınızın gerçek IP adreslerini gösterir; http://stackoverflow.com/questions/576538/delphi-how-to-get-all-local-ips –

cevap

7

Yapabileceğinizi sanmıyorum. Peki, IP adresinizin neye benzediğini, (örn .: http://www.whatismyip.com/) size yanıtı söyleyen bir servis arayabilir ve yanıtı hesaplayabilirsiniz. Ama PC'nizde hiçbir şeyin IP adresinizin neye benzediğini, dış dünyaya anlatabileceğini düşünmüyorum.

Untested, ama Indy ile yapabilirsiniz düşünüyorum: Bu kullanmadan önce http://www.whatismyip.com/faq/automation.asp:

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

de kuralları/politikasını inceleyin. hafızasından

+12

... ve bunun nedeni, genel adresinizin mutlaka bilgisayarınıza bağlı olmamasıdır. Oldukça sık, tüm efektler için tamamen farklı bir bilgisayar olan bir dış yönlendiriciye atanır. –

+0

Evet. Genel IP ve varsayılan ağ geçidi olan bağdaştırıcı iki farklı şeydir. –

1

, denenmemiş: http://ipinfo.io/json: Bu web sitesini kullanabilirsiniz

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

. Geçerli internet bağlantınız hakkındaki bilgileri JSON biçiminde döndürür.

Delphi'de IdHTTP'u şu şekilde kullanmanız gerekir: IdHTTP1.Get('http://ipinfo.io/json') ve tüm verilerle birlikte bir dize döndürür. İstediğiniz bir JSON tercüman kullanabilir veya aşağıdaki örnekte olduğu gibi lkJSON kullanabilirsiniz:

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

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

yardıma umut.

+4

Bunun yerine 'http: // ipinfo.io/ip' komutunu kullanırsanız, ayrıştırılması gereken JSON'a sarmadan yalnızca IP adresini düz metin olarak döndürür. –

+0

Bu cevabın kodu olarak kullanmanız gerekir: 'http: // ipinfo.io/json' bu IP hakkında tüm bilgileri almak için –

+2

OP, IP ile ilgili tüm ayrıntıları almak istemedi, sadece IP kendisini almak için . Bu yüzden/json '/ ip' yeterli olduğunda aşırıya kaçıyor. Web sitesinin belgelerini okursanız, bireysel alanlar kendileri tarafından alınabilir. –

1

bu benim için çalışıyor:

dış IP adresi tarafından
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

IP'yi kendi başına fazladan meta veri formatı olmadan düz metin olarak raporlayan servisleri kullanmayı tercih ediyorum. Örneğin: 'işlevi GetIP: String; TIdHTTP.Create ile başlayın Sonuç: = http deneyin.Get ('http://ipinfo.io/ip'); sonunda özgür; son; son bulur; ' –

-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; 
İlgili konular