Bonjour a tous,
Voila j'aimerais apprendre a utiliser libnet 1.1, le probléme et que je ne trouve pas trop de documentation sur le net. (J'ai trouvé une documentation en anglais mais elle est sur une ancienne version).
J'aimerais bien avoir des liens sur une bonne documentation si vous avez...
Voici un code que j'ai modifié des exemples fournis avec libnet, permettant d'envoyer des requêtes ARP :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#if (HAVE_CONFIG_H)
#if ((_WIN32) && !(__CYGWIN__)) 
#include "../include/win32/config.h"
#else
#include "../include/config.h"
#endif
#endif
#include "./libnet_test.h"
 
int c;
u_int32_t i;
libnet_t *l;
libnet_ptag_t t;
char *device = NULL;
u_int8_t *packet;
u_int32_t packet_s;
char errbuf[LIBNET_ERRBUF_SIZE];
 
void arp();
 
int main(int argc, char *argv[])
{
 
 
    printf("libnet 1.1 packet shaping: ARP[link -- autobuilding ethernet]\n"); 
 
    if (argc > 1)
    {
         device = argv[1];
    }
 
    l = libnet_init(
            LIBNET_LINK_ADV,                        /* injection type */
            device,                                 /* network interface */
            errbuf);                                /* errbuf */
 
    if (l == NULL)
    {
        fprintf(stderr, "%s", errbuf);
        exit(EXIT_FAILURE);
    }
	else
    { 
    i = libnet_get_ipaddr4(l);
 
    arp();
    arp();
 
    }  
    libnet_destroy(l);
    return (EXIT_SUCCESS);
bad:
    libnet_destroy(l);
    return (EXIT_FAILURE);
}
 
void arp()
{
 
    t = libnet_build_arp(
            ARPHRD_ETHER,                           /* hardware addr */
            ETHERTYPE_IP,                           /* protocol addr */
            6,                                      /* hardware addr size */
            4,                                      /* protocol addr size */
            ARPOP_REPLY,                            /* operation type */
            enet_src,                               /* sender hardware addr */
            (u_int8_t *)&i,                         /* sender protocol addr */
            enet_dst,                               /* target hardware addr */
            (u_int8_t *)&i,                         /* 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));
    }
 
    t = libnet_autobuild_ethernet(
            enet_dst,                               /* ethernet destination */
            ETHERTYPE_ARP,                          /* protocol type */
            l);                                     /* libnet handle */
    if (t == -1)
    {
        fprintf(stderr, "Can't build ethernet header: %s\n",
                libnet_geterror(l));
    }
 
 
    if (libnet_adv_cull_packet(l, &packet, &packet_s) == -1)
    {
        fprintf(stderr, "%s", libnet_geterror(l));
    }
    else
    {
        fprintf(stderr, "packet size: %d\n", packet_s);
        libnet_adv_free_packet(l, packet);
    }
 
    c = libnet_write(l);
 
    if (c == -1)
    {
        fprintf(stderr, "Write error: %s\n", libnet_geterror(l));
    }
    else
    {
        fprintf(stderr, "Wrote %d byte ARP packet from context \"%s\"; "
                "check the wire.\n", c, libnet_cq_getlabel(l));
    }
 
}
 
/* EOF */
J'envois donc 2 requête ARP, la première fais 42 bytes et la seconde 84 bytes. Je ne comprend pas pourquoi la taille augmente de 42 bytes a chaque nouvelle requêtes. Et comment faire en sorte que sa reste a 42 bytes.