Здравствуйте, уважаемые форумчане! Вопрос собственно вот в чем: я имею программу, написанную на чистом winapi (с++). мне необходимо получить внешний ip адрес компьютера. в гугле нашел что это можно сделать сокетами. перепробовал кучу примеров - выдает только внутренний ип. тогда я подумал что можно просто обращаться к сайту (к примеру myip.ru) и брать с него внешний ип. это конечно корявенько, но за не имением лучшего и так пойдет. как мне можно взять с него ип? в какую сторону хоть рыть? ибо с сайтами через winapi никогда не работал( ЗЫ: если есть другие идеи как получить внешний ип посредством winapi, буду очень благодарен!
DooD, напиши те подробнее пожалуйста как я могу регулярки использовать тут. а за сервис спасибо! sailor_truse, я гуглил про сокеты, говорю же - выдает внутренний, а не внешний(
Нет я имею отправить http запрост к тому сервису, и тут даж регулярок не над, прост indexof и тд юзать
Используй WinInet. Ящитаю нет такого понятия, как "программа на WinAPI". Она может быть написана с использованием WinAPI, но никак не на самом API
я кое-что нашел в гугле и вот что написал: Code: 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 ничего не пишется. почему? извините, учту Ваши возражения.
вот тебе на wininet на масме накатал. Code: .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
Code: BOOL InternetReadFile( __in HINTERNET hFile, __out LPVOID lpBuffer, __in DWORD dwNumberOfBytesToRead, __out LPDWORD lpdwNumberOfBytesRead ); Code: InternetReadFile(hUrl, buffer, sizeof(buffer), &bufferLen);
Кста вот еще -- я закидывал на хост скрипт на пыхе <?php echo $_SERVER['REMOTE_ADDR']; ?> , который выдавал ип клиента, и сокетом отправлял гет запрос на хост и все пучком и без лишнего головняка ^^ //// Мож пригодится кому.