Форум АНТИЧАТ (http://forum.antichat.ru/index.php) - С/С++, C#, Delphi, .NET, Asm (http://forum.antichat.ru/forumdisplay.php?f=24) - - myip.ru и winapi(с++) (http://forum.antichat.ru/showthread.php?t=300785) maked0n 30.10.2011 15:55 __________________________________________________________________ myip.ru и winapi(с++) Здравствуйте, уважаемые форумчане! Вопрос собственно вот в чем: я имею программу, написанную на чистом winapi (с++). мне необходимо получить внешний ip адрес компьютера. в гугле нашел что это можно сделать сокетами. перепробовал кучу примеров - выдает только внутренний ип. тогда я подумал что можно просто обращаться к сайту (к примеру myip.ru) и брать с него внешний ип. это конечно корявенько, но за не имением лучшего и так пойдет. как мне можно взять с него ип? в какую сторону хоть рыть? ибо с сайтами через winapi никогда не работал( ЗЫ: если есть другие идеи как получить внешний ип посредством winapi, буду очень благодарен! DooD 30.10.2011 16:01 __________________________________________________________________ Цитата: Сообщение от maked0n Здравствуйте, уважаемые форумчане! Вопрос собственно вот в чем: я имею программу, написанную на чистом winapi (с++). мне необходимо получить внешний ip адрес компьютера. в гугле нашел что это можно сделать сокетами. перепробовал кучу примеров - выдает только внутренний ип. тогда я подумал что можно просто обращаться к сайту (к примеру myip.ru) и брать с него внешний ип. это конечно корявенько, но за не имением лучшего и так пойдет. как мне можно взять с него ип? в какую сторону хоть рыть? ибо с сайтами через winapi никогда не работал( ЗЫ: если есть другие идеи как получить внешний ип посредством winapi, буду очень благодарен! вот к примеру чисто одну строку дает http://www.whatismyip.org/ дальше регулярками выдираешь айпи. sailor_truse 30.10.2011 16:02 __________________________________________________________________ Dood тру сервис сказал. А так гугли winsock2 и http maked0n 30.10.2011 16:08 __________________________________________________________________ DooD, напиши те подробнее пожалуйста как я могу регулярки использовать тут. а за сервис спасибо! sailor_truse, я гуглил про сокеты, говорю же - выдает внутренний, а не внешний( sailor_truse 30.10.2011 16:09 __________________________________________________________________ Цитата: Сообщение от maked0n DooD, напиши те подробнее пожалуйста как я могу регулярки использовать тут. а за сервис спасибо! sailor_truse, я гуглил про сокеты, говорю же - выдает внутренний, а не внешний( Нет я имею отправить http запрост к тому сервису, и тут даж регулярок не над, прост indexof и тд юзать Ptr 30.10.2011 16:29 __________________________________________________________________ Используй WinInet. Цитата: написанную на чистом winapi (с++) Ящитаю нет такого понятия, как "программа на WinAPI". Она может быть написана с использованием WinAPI, но никак не на самом API :o maked0n 30.10.2011 16:35 __________________________________________________________________ я кое-что нашел в гугле и вот что написал: Код: char* ip() { cout << "ip() begin" << endl; char url[] = "http://www.whatismyip.org/"; cout << "url = " << url << endl; HINTERNET hSession = InternetOpen("Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); HINTERNET hUrl; const int bufferSize = 80000; char buffer[bufferSize]; DWORD bufferLen; for(int i = 0; i < bufferSize; i++) { buffer[i] = '\0'; } cout << "buffer = " << buffer << endl; hUrl = InternetOpenUrlA(hSession, url, 0, 0, INTERNET_FLAG_NO_COOKIES, 0); InternetReadFile(url, buffer, sizeof(buffer), &bufferLen); return buffer; } но проблема в том, что в buffer ничего не пишется. почему? Цитата: Сообщение от Ptr Используй WinInet. Ящитаю нет такого понятия, как "программа на WinAPI". Она может быть написана с использованием WinAPI, но никак не на самом API :o извините, учту Ваши возражения. fd00ch 30.10.2011 17:06 __________________________________________________________________ Цитата: Сообщение от maked0n это конечно корявенько, но за не имением лучшего и так пойдет ничего корявого в этом нет. в общем случае - это единственный рабочий способ узнать внешний IP DooD 30.10.2011 18:00 __________________________________________________________________ вот тебе на wininet на масме накатал. Код: .386 .model flat,stdcall option casemap:none include include\windows.inc include include\user32.inc include include\kernel32.inc include include\wininet.inc includelib lib\user32.lib includelib lib\kernel32.lib includelib lib\wininet.lib .data host db 'http://whatismyip.org',0 hInstance dd 0 AgentUser db 'hacked',0 hInternet dd 0 hOpenUrl dd 0 hConnect dd 0 .data? ByteWRite dd ? Buffer dw 4096 dup (?) .code start: invoke InternetOpen,addr AgentUser,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0 mov hInternet,eax invoke InternetConnect,hInternet,addr host,INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET _SERVICE_HTTP,0,1 mov hConnect,eax invoke InternetOpenUrl,hInternet,addr host,0, 0,INTERNET_FLAG_RELOAD,0 mov hOpenUrl,eax invoke InternetReadFile,hOpenUrl,addr Buffer,addr Buffer,addr ByteWRite invoke MessageBox,0,addr Buffer,0,0 invoke InternetCloseHandle,hOpenUrl invoke InternetCloseHandle,hConnect invoke InternetCloseHandle,hInternet invoke ExitProcess,0 end start ~Shapaev~ 30.10.2011 18:25 __________________________________________________________________ Цитата: Сообщение от maked0n я кое-что нашел в гугле и вот что написал: Код: hUrl = InternetOpenUrlA(hSession, url, 0, 0, INTERNET_FLAG_NO_COOKIES, 0); InternetReadFile(url, buffer, sizeof(buffer), &bufferLen); return buffer; } Код: BOOL InternetReadFile( __in HINTERNET hFile, __out LPVOID lpBuffer, __in DWORD dwNumberOfBytesToRead, __out LPDWORD lpdwNumberOfBytesRead ); Код: InternetReadFile(hUrl, buffer, sizeof(buffer), &bufferLen); maked0n 30.10.2011 18:52 __________________________________________________________________ всем спасибо! r3l0c 02.11.2011 10:25 __________________________________________________________________ Кста вот еще -- я закидывал на хост скрипт на пыхе , который выдавал ип клиента, и сокетом отправлял гет запрос на хост и все пучком и без лишнего головняка ^^ //// Мож пригодится кому. Московское время: 12:01. Powered by: vBulletin Version 3.0.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.