Мне нужно получить внешний (общедоступный) IP-адрес от Delphi.
Тот же IP-адрес, который отображается www.whatismyip.com, например.
Как я могу это сделать? Winsock этого не допускает.
Мне нужно получить внешний (общедоступный) IP-адрес от Delphi.
Тот же IP-адрес, который отображается www.whatismyip.com, например.
Как я могу это сделать? Winsock этого не допускает.
Я не думаю, что ты можешь. Ну, вы могли бы вызвать некоторую услугу, которая сообщит вам, каким должен быть ваш IP-адрес (например: http://www.whatismyip.com/) и выяснить это из ответ. Но я не думаю, что что-либо на вашем ПК сможет рассказать вам, как выглядит ваш IP-адрес, внешнему миру.
Неподтвержденный, но я думаю, вы можете сделать это с помощью Indy:
MyPublicIP := IdHTTP1.Get('http://automation.whatismyip.com/n09230945.asp');
Прежде чем использовать это, просмотрите правила/политику по адресу http://www.whatismyip.com/faq/automation.asp.
Вы можете использовать этот сайт: http://ipinfo.io/json. Он возвращает информацию о вашем текущем интернет-соединении в формате JSON
.
В 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;
Я надеюсь помочь вам.
Из памяти непроверено:
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;
это работает для меня:
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;
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;