Просмотр полной версии : работа с сокетом через прокси в С/С++
вот мой код мне надо чтобы он работал через прокси и чтобы задавалось имя пользователя и его пасс и он делал коннект через прокси
///.................................................. .......
int main()
{
///.................................................. .......
WSADATA wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData);
SOCKET sClient;
char szBuffer[1024];
int ret;
struct sockaddr_in server;
struct hostent *host = NULL;
char szServerName[1024];
strcpy(szServerName, "192.168.0.1");
// Создание сокета
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
return 1;
}
// Заполнение структуры с адресом сервера и номером порта
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr = inet_addr(szServerName);
// Если указано имя, то перевод символьного адреса сервера в IP
if (server.sin_addr.s_addr == INADDR_NONE)
{
host = gethostbyname(szServerName);
if (host == NULL)
{
return 1;
}
CopyMemory(&server.sin_addr, host->h_addr_list[0],
host->h_length);
}
// Соединение с сервером
if (connect(sClient, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
{
return 1;
}
//.................................................. ..............
}
//.................................................. ..............
если можна по быстрей PLS
Программа-то что делает? Запрашивает некий Url? Если так, то коннект делай к проксе, а в гет/пост укажи урл к запрашиваемому сайту.
krypt3r клиент подключается к серверу через прокси и он должн зарегится в прокси сервере
Авторизация на прокси происходит внутри GET/POST-запроса в поле
Proxy-Authorization: Basic bG9naW46cGFzcw==\r\n
где bG9naW46cGFzcw== - это логин и пасс, разделенные двоеточием и закодированные в Base64
krypt3r куда я его поставлю в моем случае
у меня ест имя пользователя и его пасс но как его задавать с помошью winsock ?
:confused:
помогите Pls или что ни кто не знает! :)
Думаю стоит почтитать Rfc по Http аунтефикации...
используй WinInet API, с сокетами геморно и бессмысленно
вот что впринципе мона сделать. сначала приконектиться к проксе через браузер и просмотреть хидеры. потом скопипастить хидеры которые ты посылаешь в твою программу. тобишь написать что то типа этого
char headers[] = "хидеры которые посылаешь";
write(s, headers, sizeof headers);
всем спасибо всё получилось
я никак не магу send сделать connect нормально проходит может я HTTP запрос не правильно дал или что делаю не так?
вот код
//.................................................. ..
strcpy(szMessage, "GET HTTP://www.google.ru HTTP/1.1 \r\n Accept: */* \r\n Host: www. google.ru \r\n\r\n");
strcpy(szServerName, "192.168.0.3");
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
//......
}
server.sin_family = AF_INET;
server.sin_port = htons(8080);
server.sin_addr.s_addr = inet_addr(szServerName);
connect(sClient, (struct sockaddr *)&server, sizeof(server))
ret = send(sClient, szMessage, strlen(szMessage), 0);
//...............................
Обработку ошибок сделай и вызови GetLastError(), посмотри, что пишет
а откуда ты знаешь что ты не можешь делать send?
ты сравни ret с нулем. если больше то все ок. ошибка в хидере. если меньше тогда действительно проблемы с sendом
у меня ret=-1 GetLastError() не работает
я поставил вот так но ничо не выдает
ret = send(sClient, szMessage, strlen(szMessage), 0);
GetLastError();
попробуй write-ом. покури маны GetLastError-а.
все нашел коннект не делает оказывается спасибо всем держите +
ret = send(sClient, szMessage, strlen(szMessage), 0);
GetLastError();
Ну не так же делают обработку ошибок ))
if ((ret = send(sClient, szMessage, strlen(szMessage), 0)) < 0)
{
...
printf ("Error: %d\n", GetLastError());
// закрытие всего открытого - файлов, сокетов, и остановка программы
...
}
помогите PLS вот код с запросим HTTP конек к прокси нормально делает но
sprintf(buffer,"GET %s HTTP/1.0 \r\nHost: %s\r\nProxy-Authorization: Basic %s\r\nUser-Agent: MSIE 5.0 (compatible; MSIE 5.0; Windows 98; DigExt)\r\nConnection: close\r\n\r\n",http://database.clamav.net/daily.cvd,"http://database.clamav.net",userpass);
retval=send(sock,buffer,strlen(buffer),0);
if ( PrintLog == true ) { printf(buffer); }
retval = recv(sock,buffer,1024,0);buffer[retval]=0;
вы даёт ошибку кагда делаю recv в buffer приходит сопшения
HTTP/1.1 400 Bad Request
Via: 1.1 GATESERVER
Connection: close
Proxy-Connection: close
Content-Length: 302
Date: Thu, 03 Apr 2008 12:42:40 GMT
Content-Type: text/html; charset=iso-8859-1
Server: Apache
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache Server at http://database.clamav.net Port 80</address>
</body></html>
вот http запрос GET http://database.clamav.net/daily.cvd HTTP/1.0 Host: http://database.clamav.net
Proxy-Authorization: Basic eG1hYmJvczpAbGVsdXlBMTk4ODE5NjEAAA==
User-Agent: MSIE 5.0 (compatible; MSIE 5.0; Windows 98;DigExt)
Connection: close
что делать ? :(
я думаю что у меня с http запросом что-то ни то или в User-Agent я должен указать другой браузер?????:)
дело не в браузере. просто тот реквест который ты посылаешь сервак не понимает.
попробуй отправлять хидер без написания всего этого в буффер. а откуда у тебя запрос? сам сочинял или скпипастил из браузера?
вот если хост не указываю то все нормально вот почему ?
может потому что я уже за коннектился на прокси ?:(
GET http://database.clamav.net/daily.cvd HTTP/1.0
Host: database.clamav.net
Proxy-Authorization: Basic eG1hYmJvczpAbGVsdXlBMTk4ODE5NjEAAA==
User-Agent: MSIE 5.0 (compatible; MSIE 5.0; Windows 98;DigExt)
Connection: close
Algol что это означает я же хттп запрос так и прописывал но щас у меня хттп запрос
GET http://database.clamav.net/daily.cvd HTTP/1.0
Proxy-Authorization: Basic eG1hYmJvczpAbGVsdXlBMTk4ODE5NjEAAA==
в конце CRLF вот так работает а если повашему запросу то не работает вот почему ?
я еше непонял :(
а я все понял гог да хост указывается надо писать без хттп://
спасибо Algol балшая а я мучался мозг порыл вот жал чтоя не магу + поставит вам
подскажите как сделать до качку чрез http запрос?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot