Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > libnet отправка пакета ?


Автор: bodigard 23.5.2013, 09:12
доброго времени сток

пробую сформировать и отправить с помощью  libnet-1.1.2.1-2.2.el6.rf.i686 пакет, но tcpdump его не видит ...
ошибок при этом не выдаёт

структура data в коде ниже уже заполнена.
Код

    int  packet_size;
    libnet_t *lnet;
    char errbuf[LIBNET_ERRBUF_SIZE];
    libnet_ptag_t ip = 0, tcp = 0;

    lnet = libnet_init(LIBNET_RAW4, "eth0", errbuf);

    if (lnet == NULL){
        fprintf (stderr, "Error opening context: %s", errbuf);
        return -1;
    }
    packet_size = LIBNET_IPV4_H + LIBNET_TCP_H;

//выводит читабельные IP 
    printf("saddr = %s\ndaddr = %s\n",libnet_addr2name4(data->saddr,LIBNET_DONT_RESOLVE),libnet_addr2name4(data->daddr,LIBNET_DONT_RESOLVE));

    tcp = libnet_build_tcp(data->dport,         //src port
        data->sport,           //dst port
        0,                            //seq
        0,                            //ack
        TH_SYN,                  //flag
        65534,                    //window
        0,                            //csum
        0,                            //urg
        LIBNET_TCP_H,       //header len
        NULL,                       //payload
        0,                             //payload len
        lnet,                         //libnet context
        tcp);                         //ptag
    if(tcp == -1){
        fprintf(stderr, "Error building TCP header: %s\n", libnet_geterror(lnet));
        return -1;
    }

    ip = libnet_build_ipv4(packet_size,         //size
        0,                        //tos
        id,                       //id IP packet
        0,                        //do not fragment
        IPPROTO_TCP,    //protocol
        64,                      //ttl
        0,                        //csum
        data->daddr,      //src addr
        data->saddr,      //dst addr
        NULL,                  //payload
        0,                        //payload len
        lnet,                    //libnet context
        ip);                      //ptag
    if(ip == -1){
        fprintf(stderr, "Error building IP header: %s\n", libnet_geterror(lnet));
        return -1;
    }

    if ((libnet_write (lnet)) == -1){
        fprintf (stderr, "Unable to send packet: %s\n", libnet_geterror (lnet));
        return -1;
    }


подскажите, если не трудно, что не так делаю ?

заранее благодарен за помощь !

Автор: feodorv 12.9.2013, 04:22
Не может быть проблема с контрольными суммами?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)