[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
  2. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    2awdrg
    http://www.linuxhowtos.org/C_C++/socket.htm и еще посмотри в сторону cURL
     
    1 person likes this.
  3. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Думаю, что для начала тебе нужно будет разобраться с HTTP-протоколом. Научиться Netcat'ом посылать запросы и получать ответы...
     
  4. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Здраствуйте.
    Вот тут решил с WinSock попробовать. В Си я не силен.

    Вышел вот такой код :

    ...
    char buff[1000];
    printf("Program start.\n");
    WSADATA WsaData;
    WSAStartup (MAKEWORD(2,2), &WsaData);

    SOCKET s;
    s = socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN dest_addr;
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);
    dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);

    int r = connect(s,(SOCKADDR_IN *) &dest_addr,sizeof(dest_addr));
    if(r < 0)
    printf("Failed.\n");
    ....

    При компилировании выдает:
    [Warning] passing arg 2 of `connect' from incompatible pointer type (указывает на int r = connect(..);)

    Пробовал struct sockaddr_in dest_addr; connect(.., (sockaddr_in *)..., ..); , но всяко эта ошибка вылазит :{

    использую Dev-Cpp под WinXp
     
  5. arser

    arser New Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Дайте заготовки кейгенов
     
  6. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    кейген пишеться под определенную софтину какбе...
    Могу дать заготовки генератора аккаунтов icq :D :D :D
     
    #2226 awdrg, 3 Feb 2009
    Last edited: 3 Feb 2009
  7. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    или

    SOCKADDR_IN != SOCKADDR
     
  8. arser

    arser New Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    давай,а заготовки нужны были под BS player и adobe acrobat
     
  9. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Вот самый простой генератор, проще некуда (почти =) )

    //icq generator by awdrg
    Code:
    #include <iostream>
    const int maximum = 9; //max icq pass + '\0'
    using namespace std;
    
    void generate(unsigned int start, unsigned int end, char pass[]);
    
    main()
    {
       char pass[maximum] = "\0";
       unsigned int x=0,y=0;
       cout << "Enter start range: ";
       cin >> x;
       cout << "Enter final number: ";
       cin >> y;
       cout << "Enter pass: ";
       cin >> pass;
       if ((x>y or x==y))
          {
             cout << "Error ";
             return 0;
          }
       generate(x,y,pass);
       cout << "Created " << (x-y) << " numbers\n";
       return 0;
    }
    
    void generate(unsigned int start, unsigned int end, char pass[])
    {
       for (;start < end;start++)
          cout << start-1 << ";" << pass << "\n";
    }
    если будет сильно нужно, вывод в txt доделай сам
     
  10. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    таак , попробовал пустую структуру sockaddr передать в коннект , скомпилилось и написало Done , тока вот как правильно заполнить структуру не нашел :\ не подскажите как? и на sockaddr получаются те же программы , что и на sockaddr_in или же в первом соккаддр нет того , что позволит полноценно работать с сетью?
     
  11. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    В структуре sockaddr только две переменные,sa_family и sa_data.Конечно можешь с этой структурой работать но с ней намного тяжелее чем со структурой sockaddr_in именно поэтому последняя из них и была создана.

    Так что работать ты можешь нормально с sockaddr_in но когда будешь передавать функциям нужно "конвертировать" на sockaddr.

    Например : (struct sockaddr*)&addr;
     
  12. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    А может я чего не подключил? из за этого и пишет типо неизвестный тип данных

    #include <stdio.h>
    #include <string.h>
    #include <winsock2.h>
    #include <windows.h>
     
  13. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5
    все что касаеться сокетов находиться в winsock2.h.
    Ты лучше целый код покажи.
     
  14. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    ээ , это так :
    struct sockaddr_in addr;
    ...
    ..
    (struct sockaddr*)&addr ?

    поробовал так - все компилится , запускаю программу - проходит вроде без ошибок. Смотрю лог подключений Apach'а , там нету записи о том , что я подлкючался.
    Или чтоб была запись нужно хоть что-то отправить? я тока подключаюсь и все.
     
    #2234 Glazz, 4 Feb 2009
    Last edited: 4 Feb 2009
  15. xismyname

    xismyname Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    77
    Likes Received:
    7
    Reputations:
    -5

    Ты на виндовс как я думаю ?
    Так вот TCP клиент :

    Code:
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    #define REMOTE_ADDR  "127.0.0.1"
    #define DEF_HTTP_PORT 80
    
    int main(void)
    {
            WSADATA wsd;
            struct sockaddr_in addr;
            
            if( WSAStartup( MAKEWORD(2,2),&wsd ) == 0)
            {
                    puts("WIndows socket interface is loaded");
    
                    addr.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
                    addr.sin_family      = AF_INET;
                    addr.sin_port        = htons(DEF_HTTP_PORT);
                    SOCKET lsocket       = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
                  
                    if( lsocket != -1 )
                    {
                             unsigned int addrLen = sizeof(addr);
                             if( connect(lsocket,(SOCKADDR*)addr,addrLen ) == 0 )
                             {
                                       puts("Connected to server\n");
                             }
                             else
                             {
                                       printf("Error : %d\n", WSAGetLastError());
                             }
                    }
                    else
                    {
                             puts("Could not create socket");
                    }
           }
           else
           {
                    puts("Could not load windows socket interface");
           }
    }
                  
    
    Если что не тестировал,сразу написал в редакторе сообщении на этом форуме :)
     
    #2235 xismyname, 4 Feb 2009
    Last edited: 4 Feb 2009
  16. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    connect();

    в проверке не так проверял на подключилось/не подключилось. Оказалось , что connect(...) == -1

    Вот код , можете сказать ошибки? :
    #include <stdio.h>
    #include <string.h>
    #include <winsock2.h>
    #include <windows.h>

    #define PORT 80
    #define SERVERADDR "127.0.0.1"

    int main()
    {
    const char* buff_send = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
    WSADATA WsaData;
    WSAStartup (MAKEWORD(2,2), &WsaData);

    SOCKET s;
    s = socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN dest_addr;
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);
    dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    printf("socket - %i",s);
    int r = connect(s,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
    if(r < 0)
    printf("Connect FAILED\n");
    int send_byte = send(s, (char* ) & buff_send, sizeof(buff_send), 0 );
    printf("%i\n",send_byte);

    closesocket(s);
    WSACleanup();


    return 0;
    }
     
    #2236 Glazz, 4 Feb 2009
    Last edited: 4 Feb 2009
  17. zindi

    zindi Elder - Старейшина

    Joined:
    11 Apr 2007
    Messages:
    74
    Likes Received:
    17
    Reputations:
    0
    когда то писал,пример на сокетах мини чата.
     
  18. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    WSAStartup(..); вообще не включается.
    if(WSAStartup(MAKEWORD(2,2), &WsaData))
    printf("WSAStartup ok\n");

    а как провильно проверить норм выполнилась WSAStartup() или нет?
    if(WSAStartup())
    успешно

    или

    if(WSAStartup() < 0)
    не успшено

    Может кто дать описание четвертого аргумента для
    send(); ?

    Вроде как все подлкючается , отправляю заголовки на апач , и r = send() , и r = 4 , хотя хаголовки больше 4 символов должны отправиться.
    В логах апача снова нету соеденений :\
     
    #2238 Glazz, 5 Feb 2009
    Last edited: 5 Feb 2009
  19. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Поробовал отправить на фтп сервер такой запрос:
    const char* buff_send = "USER 1\r\nPASS 123456\r\n";

    Снова получилось , что отправилось 4байта.
    В ответ пришел ОТВЕТ!!!
    421 вы не заллгинились и т.д. и Read byte= 34.
    Сейчас проблема - почему передает 4 байта???
     
  20. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Когда ты делаешь так:
    Code:
    const  char* buff_send = "USER 1\r\nPASS 123456\r\n"; 
    ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть)
    Чтобы передавало целую строку, нужно создать массив:
    Code:
    const char buff_send[64] = "USER 1\r\nPASS 123456\r\n";
    и все отлично передается
     
    #2240 awdrg, 5 Feb 2009
    Last edited: 5 Feb 2009
Thread Status:
Not open for further replies.