如何在Delphi中获取外部(公共)IP

chu*_*byk 11 delphi ip external

我需要从Delphi获取我的外部(公共)IP地址.

例如,www.whatismyip.com显示的相同IP .

我怎样才能做到这一点 ?Winsock不允许这样做.

Chr*_*ton 7

我认为你不能.好吧,你可以拨打一些服务,告诉你你的IP地址是什么,(例如:http://www.whatismyip.com/)并从响应中找出来.但我不认为你的电脑上的任何东西都能告诉你你的IP地址对外界的影响.

未经测试,但我认为你可以用Indy做到这一点:

MyPublicIP := IdHTTP1.Get('http://automation.whatismyip.com/n09230945.asp');
Run Code Online (Sandbox Code Playgroud)

在使用此之前,请查看规则/政策:http://www.whatismyip.com/faq/automation.asp.

  • ...原因是您的公共地址不一定附在您的计算机上.通常,它被分配给外部路由器,这是一个完全不同于所有效果的计算机. (12认同)

ped*_*pio 7

您可以使用以下网站:http://ipinfo.io/json.它以JSON格式返回有关您当前Internet连接的信息.

在delphi中,您需要使用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;
Run Code Online (Sandbox Code Playgroud)

我希望能帮助你.

  • 如果你使用`http:// ipinfo.io/ip`,它只会以纯文本形式返回IP,而不会将其包装在必须解析的JSON中. (4认同)
  • OP没有要求检索有关IP的所有细节,只是为了检索IP本身.所以`/ json`在`/ ip`就足够了就是矫枉过正.如果您阅读网站的文档,可以自行检索各个字段. (2认同)

Sal*_*haf 6

这对我有用:

  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;
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢使用将 IP 本身报告为纯文本的服务,而无需任何额外的元数据格式。例如:`function GetIP: String; 从 TIdHTTP.Create 开始尝试 Result := http.Get('http://ipinfo.io/ip'); 终于自由了;结尾; 结束;` (4认同)