2011-08-10 33 views
10

私の外部(公開)IPアドレスをDelphiから取得する必要があります。Delphiで外部(公開)IPを取得する方法

例えば、www.whatismyip.comで示される同じIP。

どうすればいいですか? Winsockはこれを許可しません。

+0

、あなたがあなたのインターネットアクセス可能なIPアドレスを意味していますか?または127.0.0.1ではないローカルネットワークアドレスを意味しますか? – Tremmors

+0

インターネットアクセス可能なアドレス、www.whatismyip.comで示されているアドレス – chubbyk

+0

この質問は、コンピュータの実際のIPアドレスを示しています。 http://stackoverflow.com/questions/576538/delphi-how-to-get-all-local-ips –

答えて

7

私はできないと思います。さて、あなたのIPアドレスが何であるかを示すサービス(例:http://www.whatismyip.com/)を呼び出して、それを応答から見つけることができます。しかし、私はあなたのPC上の何かがあなたのIPアドレスがどのように見えるかを外界に伝えることはできないと思います。

テストされていないが、私はあなたがインディでこれを行うことができると思います。これを使用する前http://www.whatismyip.com/faq/automation.asp

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

でのルール/ポリシーをご覧ください。メモリから

+12

...あなたのパブリックアドレスが必ずしもコンピュータに接続されているわけではありません。ほとんどの場合、すべてのエフェクトとはまったく異なるコンピュータである外部ルータに割り当てられます。 –

+0

はい。パブリックIPとデフォルトゲートウェイを持つアダプタは、2つの異なるものです。 –

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形式で返します。 Delphiで

あなたはIdHTTPをこの方法を使用する必要があります:IdHTTP1.Get('http://ipinfo.io/json') 、それはすべてのデータと文字列を返します。あなたが好きか、次の例としてlkJSONを使用することができますJSONインタプリタを使用することができます。

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

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

私はあなたを助け願っています。

+4

代わりに 'http:// ipinfo.io/ip'を使用すると、IPを単なるテキストとして返します。JSONでパースしなければなりません。 –

+0

この回答のコードでは、このIPに関するすべての情報を取得するために 'http:// ipinfo.io/json'を使用する必要があります。 –

+2

OPはIPに関するすべての詳細を取得するよう要求しませんでした。 。したがって、 '/ json'は'/ip'で十分です。ウェブサイトのドキュメントを読むと、個々のフィールドは単独で取得できます。 –

1

これは私の作品:

外部IPアドレスで
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自体をプレーンテキストとして報告するサービスを使用することを好みます。次に例を示します。 'function GetIP:String; 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; 
関連する問題