Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   работа с сокетом через прокси в С/С++ (https://forum.antichat.xyz/showthread.php?t=65387)

KSoniX 25.03.2008 15:44

работа с сокетом через прокси в С/С++
 
вот мой код мне надо чтобы он работал через прокси и чтобы задавалось имя пользователя и его пасс и он делал коннект через прокси
Код:

///.........................................................
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

krypt3r 25.03.2008 16:01

Программа-то что делает? Запрашивает некий Url? Если так, то коннект делай к проксе, а в гет/пост укажи урл к запрашиваемому сайту.

KSoniX 25.03.2008 16:15

krypt3r клиент подключается к серверу через прокси и он должн зарегится в прокси сервере

krypt3r 25.03.2008 16:28

Авторизация на прокси происходит внутри GET/POST-запроса в поле
Код:

Proxy-Authorization: Basic bG9naW46cGFzcw==\r\n
где bG9naW46cGFzcw== - это логин и пасс, разделенные двоеточием и закодированные в Base64

KSoniX 25.03.2008 16:37

krypt3r куда я его поставлю в моем случае
у меня ест имя пользователя и его пасс но как его задавать с помошью winsock ?
:confused:

KSoniX 25.03.2008 18:56

помогите Pls или что ни кто не знает! :)

x0man 26.03.2008 00:54

Думаю стоит почтитать Rfc по Http аунтефикации...

sn0w 26.03.2008 15:17

используй WinInet API, с сокетами геморно и бессмысленно

zythar 26.03.2008 15:25

вот что впринципе мона сделать. сначала приконектиться к проксе через браузер и просмотреть хидеры. потом скопипастить хидеры которые ты посылаешь в твою программу. тобишь написать что то типа этого
Код:

char headers[] = "хидеры которые посылаешь";
write(s, headers, sizeof headers);


KSoniX 26.03.2008 17:13

всем спасибо всё получилось

KSoniX 27.03.2008 17:15

я никак не магу 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);
//...............................

krypt3r 27.03.2008 17:37

Обработку ошибок сделай и вызови GetLastError(), посмотри, что пишет

zythar 27.03.2008 18:00

а откуда ты знаешь что ты не можешь делать send?
ты сравни ret с нулем. если больше то все ок. ошибка в хидере. если меньше тогда действительно проблемы с sendом

KSoniX 27.03.2008 18:00

у меня ret=-1 GetLastError() не работает
я поставил вот так но ничо не выдает
ret = send(sClient, szMessage, strlen(szMessage), 0);
GetLastError();

zythar 27.03.2008 18:04

попробуй write-ом. покури маны GetLastError-а.

KSoniX 27.03.2008 18:21

все нашел коннект не делает оказывается спасибо всем держите +

krypt3r 28.03.2008 11:45

Цитата:

ret = send(sClient, szMessage, strlen(szMessage), 0);
GetLastError();
Ну не так же делают обработку ошибок ))
Код:

if ((ret = send(sClient, szMessage, strlen(szMessage), 0)) < 0)
{
  ...
  printf ("Error: %d\n", GetLastError());
  // закрытие всего открытого - файлов, сокетов, и остановка программы
  ...
}


KSoniX 03.04.2008 16:55

помогите 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
что делать ? :(

KSoniX 03.04.2008 17:30

я думаю что у меня с http запросом что-то ни то или в User-Agent я должен указать другой браузер?????:)

zythar 03.04.2008 17:47

дело не в браузере. просто тот реквест который ты посылаешь сервак не понимает.
попробуй отправлять хидер без написания всего этого в буффер. а откуда у тебя запрос? сам сочинял или скпипастил из браузера?

KSoniX 03.04.2008 18:12

вот если хост не указываю то все нормально вот почему ?
может потому что я уже за коннектился на прокси ?:(

Algol 11.04.2008 11:10

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

KSoniX 11.04.2008 17:25

Algol что это означает я же хттп запрос так и прописывал но щас у меня хттп запрос
Цитата:

GET http://database.clamav.net/daily.cvd HTTP/1.0
Proxy-Authorization: Basic eG1hYmJvczpAbGVsdXlBMTk4ODE5NjEAAA==


в конце CRLF вот так работает а если повашему запросу то не работает вот почему ?
я еше непонял :(

KSoniX 11.04.2008 18:32

а я все понял гог да хост указывается надо писать без хттп://
спасибо Algol балшая а я мучался мозг порыл вот жал чтоя не магу + поставит вам

KSoniX 17.04.2008 13:12

подскажите как сделать до качку чрез http запрос?


Время: 05:10