![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Помогите получать ip внешний. Дело в том что я сколько искал так и не мог найти рабочий код. Особенности пишу программу которая проверяет сколько средств на счету, нужна возможность получать внешний ip. С локальным ip нет проблем, но не получается получить внешний.
|
|
#2
|
|||
|
|||
|
реализация от одного из участника форума, смысл думаю понятен будет:
Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
site: string;
n1,n2: integer;
begin
site:=IdHTTP1.Get('http://www.myip.ru/get_ip.php?loc=');
n1:=pos('<TD bgcolor=white align=center valign=middle>',site);
n2:=pos('</TABLE></TD></TR>',site);
Edit1.text:=copy(site,n1+45,n2-n1-56);
end;Последний раз редактировалось Assistant, 13.04.2011 в 18:11. |
|
#3
|
|||
|
|||
|
Может исходник этой темы тебе поможет
http://www.delphisources.ru/forum/sh...ad.php?t=15932 |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
|||
|
|||
|
что есть "сетевой ник"?
|
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
1:
Код:
function ip: String;
var
WSAData: TWSAData;
name: array [0..$ff] of Char;
HostEnt: PHostEnt;
begin
Result:='';
if WSAStartup(MakeWord(2, 2), WSAData)<>0 then Exit;
if gethostname(name, Length(name))=0 then
begin
HostEnt:=gethostbyname(name);
if HostEnt<>nil then Result:=inet_ntoa(PInAddr(HostEnt^.h_addr_list^)^);
end;
WSACleanup;
end;Код:
function ips: String;
type
TArrPInAddr = array [0..7] of PInAddr;
PArrPInAddr = ^TArrPInAddr;
var
WSAData: TWSAData;
name: array [0..$ff] of Char;
HostEnt: PHostEnt;
ArrPInAddr: PArrPInAddr;
i: Integer;
begin
Result:='';
if WSAStartup(MakeWord(1, 1), WSAData)<>0 then Exit;
if gethostname(name, Length(name))=0 then
begin
HostEnt:=gethostbyname(name);
if HostEnt<>nil then
begin
ArrPInAddr:=PArrPInAddr(HostEnt^.h_addr_list);
i:=0;
while ArrPInAddr^[i]<>nil do
begin
Result:=Result+StrPas(inet_ntoa(ArrPInAddr^[i]^))+';';
Inc(i);
end;
end;
end;
WSACleanup;
end;Последний раз редактировалось NumLock, 14.04.2011 в 09:18. |
|
#8
|
|||
|
|||
|
Простой способ: кидаешь на форму компонент idHTTP, а дальше так:
Edit1:=idHTTP1.Get('http://www.whatismyip.com/automation/n09230945.asp'); |
|
#9
|
||||
|
||||
|
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 случайно Все просто. |
|
#10
|
||||
|
||||
|
вот всего 66,5 Кб (с upx 31,5 Кб) exe - никаких VCL и вообще uses отсутствуют
:Код:
program XMLHttpRequest;
{$APPTYPE CONSOLE}
type
IXMLHttpRequest = interface(IDispatch)
['{ED8C108D-4349-11D2-91A4-00C04F7969E8}']
procedure open(const bstrMethod: WideString; const bstrUrl: WideString; varAsync: OleVariant;
bstrUser: OleVariant; bstrPassword: OleVariant); safecall;
procedure setRequestHeader(const bstrHeader: WideString; const bstrValue: WideString); safecall;
function getResponseHeader(const bstrHeader: WideString): WideString; safecall;
function getAllResponseHeaders: WideString; safecall;
procedure send(varBody: OleVariant); safecall;
procedure abort; safecall;
function Get_status: Integer; safecall;
function Get_statusText: WideString; safecall;
function Get_responseXML: IDispatch; safecall;
function Get_responseText: WideString; safecall;
function Get_responseBody: OleVariant; safecall;
function Get_responseStream: OleVariant; safecall;
function Get_readyState: Integer; safecall;
procedure Set_onreadystatechange(const Param1: IDispatch); safecall;
property status: Integer read Get_status;
property statusText: WideString read Get_statusText;
property responseXML: IDispatch read Get_responseXML;
property responseText: WideString read Get_responseText;
property responseBody: OleVariant read Get_responseBody;
property responseStream: OleVariant read Get_responseStream;
property readyState: Integer read Get_readyState;
property onreadystatechange: IDispatch write Set_onreadystatechange;
end;
const
CLASS_XMLHTTPRequest: TGUID = '{ED8C108E-4349-11D2-91A4-00C04F7969E8}';
CLSCTX_INPROC_SERVER = 1;
CLSCTX_LOCAL_SERVER = 4;
function CoInitialize(pvReserved: Pointer): HResult; stdcall; external 'ole32.dll';
function CoCreateInstance(const clsid: TGUID; unkOuter: IUnknown;
dwClsContext: Longint; const iid: TGUID; out pv): HResult; stdcall; external 'ole32.dll';
procedure CoUninitialize; stdcall; external 'ole32.dll';
function GetIP: String;
var
xml: IXMLHttpRequest;
begin
CoCreateInstance(CLASS_XMLHTTPRequest, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, xml);
xml.open('GET', 'http://www.whatismyip.com/automation/n09230945.asp', False, '', '');
xml.send('');
if xml.status=200 then Result:=xml.responseText else Result:='';
end;
begin
CoInitialize(nil);
Writeln(GetIP);
Readln;
CoUninitialize;
end.Последний раз редактировалось NumLock, 04.05.2011 в 14:45. |
|
#11
|
|||
|
|||
|
Добрый день !
StarFox Прохожий Регистрация: 18.02.2009 Сообщения: 10 Репутация: 10 Простой способ: кидаешь на форму компонент idHTTP, а дальше так: Edit1:=idHTTP1.Get('http://www.whatismyip.com/automation/n09230945.asp'); __________________ А как записать полученные значения с ип адресом с сайта в тхт файл ?? За ранние спасибо |