1) Получаешь список локальных адресов:
uses IdStack;
Код:
procedure ... (var IPList: TStringList);
begin
TIdStack.IncUsage;
try
GStack.AddLocalAddressesToList(IPList);
finally
TIdStack.DecUsage;
end;
end;
2) Узнаешь внешний IP по способу который посоветовал, товарищь
Assistant
3) Если получаемая строка по способу предложенному
Assistant'ом непохожа на IP адрес, то одно из 2-х:
а) предложить пользователю выбрать IP из IPList
б) выбрать IP из IPList случайно
Все просто.