[C/C++] pcap_sendpacket

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Chillikid, 23. Juni 2009 .

  1. 23. Juni 2009
    pcap_sendpacket

    Hey,

    der ein oder anderen kennt bestimmt pcap, also die Bibliothek für Netzwerksniffing etc. Damit kann man ja nicht nur sniffen sondern auch "selbstgebastelte" Pakete verschicken. Doch damit komme ich noch nicht so ganz klar und wollte mal wissen ob mir das entweder jmd. erklären kann oder ein gutes Tutorial kennt.

    Hier noch mal was ich bisher gemacht habe (will ein ARP verschicken), vllt. kann mir sogar so jemand helfen:

    Auszug aus meinen Definitionen:
    Code:
    #define ETHERNET_HEADER_SIZE 14
    #define ETHERNET_ADDR_LEN 6;
    
    struct ethernet_header
    {
     u_char ether_dhost[ETHERNET_ADDR_LEN]; /* destination host mac-address (LSB)*/
     u_char ether_shost[ETHERNET_ADDR_LEN]; /* source host mac-address (LSB)*/
     u_short ether_type; /* protocol type, e.g. IP/ARP/RARP/... (MSB)*/
    };
    
    struct arp_header {
     u_short ah_hw_type; /* hardware address type*/
     u_short ah_p_type; /* protocoll address type */
     u_char ah_hw_addr_size; /* hardware address size */
     u_char ah_p_addr_size; /* protocol address size */
     u_short ah_operation; /* arp operation */
     u_char ah_src_ether[ETHERNET_ADDR_LEN];/* source hw address */
     in_addr ah_src_ip; /* source protocol address */
     u_char ah_dst_ether[ETHERNET_ADDR_LEN];/* destination hw address */
     in_addr ah_dst_ip; /* destination protocol address */
    };
    
    Dann habe ich die Strukturen ausgefüllt und damit man das Paket auch verschicken kann, muss man es noch "zusammenbauen" bzw. eigentlich nur hintereinanderreihen. Ich gebe zu meine Funktion dazu ist äußerst schrecklich (so extrem mit Pointern hab ich noch nicht gearbeitet), aber ich denke sie sollte Funktionieren, wobei so ganz sicher bin ich mir auch nicht^^
    Also bitte mal drübergucken, ob das so stimmen kann:
    Code:
    network_protocols::ethernet_header *e, network_protocols::arp_header *a
    .....
    int size = ETHERNET_HEADER_SIZE+46;
     u_char *p = new u_char[size];
    
     u_char *ptr = reinterpret_cast<u_char*>(memcpy(p, e->ether_dhost, network_protocols::ETHERNET_ADDR_LEN));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+network_protocols::ETHERNET_ADDR_LEN, e->ether_shost, network_protocols::ETHERNET_ADDR_LEN));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+network_protocols::ETHERNET_ADDR_LEN, &(e->ether_type), sizeof(e->ether_type)));
    
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(e->ether_type), &(a->ah_hw_type), sizeof(a->ah_hw_type)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_hw_type), &(a->ah_p_type), sizeof(a->ah_p_type)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_p_type), &(a->ah_hw_addr_size), sizeof(a->ah_hw_addr_size)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_hw_addr_size), &(a->ah_p_addr_size), sizeof(a->ah_p_addr_size)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_p_addr_size), &(a->ah_operation), sizeof(a->ah_operation)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_operation), a->ah_src_ether, network_protocols::ETHERNET_ADDR_LEN));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+network_protocols::ETHERNET_ADDR_LEN, &(a->ah_src_ip), sizeof(a->ah_src_ip)));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+sizeof(a->ah_src_ip), a->ah_dst_ether, network_protocols::ETHERNET_ADDR_LEN));
     ptr = reinterpret_cast<u_char*>(memcpy(ptr+network_protocols::ETHERNET_ADDR_LEN, &(a->ah_dst_ip), sizeof(a->ah_dst_ip)));
    Noch eine kleine Erläuterung zur Funktion: Ich verschiebe die Daten aus der Struktur in den Pointer. Der Rückgabewert ist die Anfangsposition. Diese wird beim nächsten mal um die Größe des voherigen Elements erhöht.


    Und wenn ich diesen u_char dann verschicken will gibt's immer nen Segemntation fault.

    Also:
    Gesucht ist Tutorial/Erklärung zum verschicken von eigenen Packets und/oder ob meine Funktion richtig ist.

    MfG

    Chillikid
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.