Форум АНТИЧАТ (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

Кста вот еще -- я закидывал на хост скрипт на пыхе
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
, который выдавал ип клиента, и сокетом отправлял гет запрос на хост и все пучком и без лишнего головняка ^^
//// Мож пригодится кому.


Московское время: 23:18.

Powered by: vBulletin Version 3.0.x
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.