LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   send a frame to the router. libnet. (http://www.linuxquestions.org/questions/programming-9/send-a-frame-to-the-router-libnet-4175441110/)

franmf 12-12-2012 06:40 AM

send a frame to the router. libnet.
 
hi. I'd like to know how to send a frame once I've created it.

I've got the next:

Code:

int
arp_send(libnet_t *l, int op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa)
{       
        libnet_ptag_t t;       
       
        if (sha == NULL &&
            (sha = (u_char *)libnet_get_hwaddr(l)) == NULL) {
                return (-1);
        }
        if (spa == 0) {
                if ((spa = libnet_get_ipaddr4(l)) == -1)
                        return (-1);               
        }
        if (tha == NULL)
                tha = (u_char *)"\xff\xff\xff\xff\xff\xff";
       
    libnet_clear_packet(l);

        /*
    *  Build the packet, remmebering that order IS important.  We must
    *  build the packet from lowest protocol type on up as it would
    *  appear on the wire.  So for our ARP packet:
    *
    *  -------------------------------------------
    *  |  Ethernet  |          ARP            |
    *  -------------------------------------------
    *        ^                    ^
    *        |------------------  |
    *  libnet_build_ethernet()--|  |
    *                              |
    *  libnet_build_arp()-----------|
    */

        t = libnet_build_arp(
            ARPHRD_ETHER,                          /* hardware addr */
            ETHERTYPE_IP,                          /* protocol addr */
            6,                                      /* hardware addr size */
            4,                                      /* protocol addr size */
            op,                                    /* operation type */
            sha,                                    /* sender hardware addr */
            (u_int8_t *)&spa,                      /* sender protocol addr */
            tha,                                    /* target hardware addr */
            (u_int8_t *)&tpa,                      /* target protocol addr */
            NULL,                                  /* payload */
            0,                                      /* payload size */
            l,                                      /* libnet context */
            0);                                    /* libnet id */

        if (t == -1)
    {
        fprintf(stderr, "Can't build ARP header: %s\n", libnet_geterror(l));
        return -1;
    }

        t = libnet_autobuild_ethernet(
            tha,                                    /* ethernet destination */
            ETHERTYPE_ARP,                          /* protocol type */
            l);                                    /* libnet handle */

    if (t == -1)
    {
        fprintf(stderr, "Can't build ethernet header: %s\n",
                libnet_geterror(l));
        return -1;
    }   
    return libnet_write(l);                   
}

I found that code on the net, which creates from nothing an arp packet. I do understand everything but the return, because I don't find the "send" command.

thank you.


All times are GMT -5. The time now is 05:54 AM.