|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получение ip - внешний
Помогите получать 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; взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя Последний раз редактировалось Assistant, 13.04.2011 в 18:11. |
#3
|
|||
|
|||
Может исходник этой темы тебе поможет
http://www.delphisources.ru/forum/sh...ad.php?t=15932 |
#4
|
|||
|
|||
Цитата:
|
#5
|
|||
|
|||
что есть "сетевой ник"?
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#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
|
|||
|
|||
Цитата:
Какие модули нужно подключать, что бы компилятор не выдавал ошибки? |
#9
|
|||
|
|||
смотря какие ошибки он выдает
P.S: вообще-то для сокетов нужно Winsock взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#10
|
|||
|
|||
Первый код он определяет ip сетевухи. А второй ip сетевухи и как я понял он dnc ещё определяет. А мне нужно если есть доступ в интернет узнать ip внешний, если подключения к интернету нет то определить адрес сетевухи.
|
#11
|
||||
|
||||
-=Virus=-, как получить внешний ip тебе уже выдали. могу лишь подкинуть адрес еще одного xml-сервиса http://www.domaintools.com/research/my-ip/myip.xml
Код:
<?xml version="1.0" encoding="utf-8" ?> <dnstools> <service_provider>DomainTools</service_provider> <provider_url>http://www.domaintools.com/</provider_url> <date>Fri, 15 Apr 2011 04:54:13 GMT</date> <unix_time>1302843253</unix_time> <ip_address>92.101.72.142</ip_address> <hostname>ip-142-072-101-092.pools.atnet.ru</hostname> <blacklist_status>Clear</blacklist_status> <remote_port>42037</remote_port> <protocol>HTTP/1.1</protocol> <connection>TE, keep-alive</connection> <keep_alive></keep_alive> <country>Russian Federation(RU)</country> <country_flag>http://img.domaintools.com/flags/ru.gif</country_flag> <city>St. Petersburg</city> <region>St. Petersburg City</region> <isp>Jsc North-west Telecom Arkhangelsk Branch</isp> <proxy>1.1 v1-akamaitech.net(ghost) (AkamaiGHost), 1.1 v1-akamaitech.net(ghost) (AkamaiGHost), 1.1 akamai.net(ghost) (AkamaiGHost)</proxy> <proxy_type>Transparent</proxy_type> <proxy_ip>192.80.13.52</proxy_ip> <proxy_blacklist_status>Clear</proxy_blacklist_status> <proxy_country>United States(US)</proxy_country> <proxy_country_flag>http://img.domaintools.com/flags/us.gif</proxy_country_flag> <proxy_city>Englewood</proxy_city> <proxy_region>Colorado</proxy_region> <proxy_isp>Ntt America Inc</proxy_isp> <user_agent>Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10</user_agent> <language>ru,en;q=0.9,ru-RU;q=0.8</language> <accepted_types>text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1</accepted_types> <accepted_encodings>gzip</accepted_encodings> <accepted_charsets></accepted_charsets> <referer></referer> </dnstools> плюс я написал как можно получить локальные ip. первый способ выдает ip сетевушки, второй ip адреса всех сетевых соединений, разделенных ";". поэтому: Цитата:
программа получения информации о внешнем ip: http://narod.ru/disk/10203748001/IPinfo.exe.html Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 15.04.2011 в 08:55. |
#12
|
|||
|
|||
Простой способ: кидаешь на форму компонент idHTTP, а дальше так:
Edit1:=idHTTP1.Get('http://www.whatismyip.com/automation/n09230945.asp'); |
#13
|
||||
|
||||
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 случайно Все просто. 00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110 |
#14
|
||||
|
||||
вот всего 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. |
#15
|
|||
|
|||
Добрый день !
StarFox Прохожий Регистрация: 18.02.2009 Сообщения: 10 Репутация: 10 Простой способ: кидаешь на форму компонент idHTTP, а дальше так: Edit1:=idHTTP1.Get('http://www.whatismyip.com/automation/n09230945.asp'); __________________ А как записать полученные значения с ип адресом с сайта в тхт файл ?? За ранние спасибо |