Ранее я уже рассказывал как с помощью пары отличных сервисов, жонглируя PowerShell, можно получить свой внешний ip-адрес и повыуживать про него всякие интересности.
Сейчас попробуем получить свой внешний IP в проекте IDE Lazarus. Для этого вооружимся API двух замечательных сервисов: ipify.org и seeip.org. Один сервис будет основным, а второй резервным.
Обращаться к API будем с помощью модулей fphttpclient и opensslsockets.
Перед тем, как начинать работу с любым внешним сервисом — следует проверить существует ли подключение к сети. Для этого воспользуемся WinInet и спросим каков статус подключения. Если вернулось True — обращаемся к сайту.
uses ..., sysutils, windows, wininet, fphttpclient, opensslsockets, ...;
function GetExtIP:string;
var
temp: string;
contypes: DWORD;
status: boolean;
const
ipify='https://api.ipify.org/';
seeip='https://api.seeip.org/';
begin
contypes:=INTERNET_CONNECTION_MODEM
+ INTERNET_CONNECTION_LAN
+ INTERNET_CONNECTION_PROXY;
status:=InternetGetConnectedState(@contypes, 0);
if status=True then
try
temp:=TFPHTTPClient.simpleGet(ipify);
if temp='' then temp:=TFPHTTPClient.simpleGet(seeip);
result:=temp;
except result:='Не удалось определить внешний IP адрес!';
end
else result:='Нет соединения с сетью Интернет!';
end;
Если всё пойдёт хорошо, GetExtIP вернёт строку с IP адресом. В дебрях кода функцию можно использовать, например, вот так:
... var myip: string; ... myip:=GetExtIP;
Разумеется, из-за использования WinInet можно забыть про кроссплатформенность.
Для полноценной работы потребуются библиотеки OpenSSL. Можете подключить к проекту этот модуль для автоматического развёртывания библиотек из файла ресурсов.