Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Probléme avec les adresses IP de l'en-tête ARP avec Winpcap

Bonjour a tous,

Voila, j'essaie de faire un programme qui envoie des paquet ARP grâce a Winpcap.
Ce programme est fais en C++ avec Qt.
Voici la fonction que j'ai codé qui n'a pas l'aire de fonctionner.



[code:1:1d64ab8a2d]void envoie_ARP(pcap_t *pointeur_interface, QTextEdit *event, unsigned char mac_source_ether[6], unsigned char mac_destination_ether[6], unsigned long ip_source_arp, unsigned long ip_destination_arp, unsigned char mac_source_arp[6], unsigned char mac_destination_arp[6], short op_arp)
{

struct ETHERNET couche_ethernet;
struct ARP couche_arp;
unsigned char trame[65535];
unsigned short taille=0;


qDebug() << mac_source_ether[0] << mac_destination_arp[0];

//Couche ETHERNET
couche_ethernet.destination[0] = mac_destination_ether[0];
couche_ethernet.destination[1] = mac_destination_ether[1];
couche_ethernet.destination[2] = mac_destination_ether[2];
couche_ethernet.destination[3] = mac_destination_ether[3];
couche_ethernet.destination[4] = mac_destination_ether[4];
couche_ethernet.destination[5] = mac_destination_ether[5];

couche_ethernet.source[0] = mac_source_ether[0];
couche_ethernet.source[1] = mac_source_ether[1];
couche_ethernet.source[2] = mac_source_ether[2];
couche_ethernet.source[3] = mac_source_ether[3];
couche_ethernet.source[4] = mac_source_ether[4];
couche_ethernet.source[5] = mac_source_ether[5];

couche_ethernet.type = htons(2054);

//Couche ARP
couche_arp.mac_type = htons(1);
couche_arp.protocol_type = htons(2048);
couche_arp.mac_taille = 6;
couche_arp.protocol_taille = 4;
couche_arp.ip_destination = ip_destination_arp;
couche_arp.ip_source = ip_source_arp;

couche_arp.mac_destination[0] = mac_destination_arp[0];
couche_arp.mac_destination[1] = mac_destination_arp[1];
couche_arp.mac_destination[2] = mac_destination_arp[2];
couche_arp.mac_destination[3] = mac_destination_arp[3];
couche_arp.mac_destination[4] = mac_destination_arp[4];
couche_arp.mac_destination[5] = mac_destination_arp[5];

couche_arp.mac_source[0] = mac_source_arp[0];
couche_arp.mac_source[1] = mac_source_arp[1];
couche_arp.mac_source[2] = mac_source_arp[2];
couche_arp.mac_source[3] = mac_source_arp[3];
couche_arp.mac_source[4] = mac_source_arp[4];
couche_arp.mac_source[5] = mac_source_arp[5];

couche_arp.opocode = op_arp;

//Construction de la trame
memcpy(trame,(unsigned short *)&couche_ethernet,sizeof(struct ETHERNET));
memcpy(trame+sizeof(struct ETHERNET),(unsigned short *)&couche_arp,sizeof(struct ARP));

taille = sizeof(struct ETHERNET)+sizeof(struct ARP);

if(pcap_sendpacket(pointeur_interface, trame, taille) != 0)
{
afficher_message(event, 1, "Erreur lors de l'envoie de la requête ARP");
}

else
{
afficher_message(event, 2, "Requête ARP envoyée");
}

}[/code:1:1d64ab8a2d]

Voila, je récupère le tout en paramètre de la fonction et ensuite je construit et j'envoie la trame.

Le problème surviens avec les adresse IP source et destinataire de mon paquet.
Voici l’appelle de la fonction :

[code:1:1d64ab8a2d] unsigned char broadcast[6];
broadcast[0] = 255;
broadcast[1] = 255;
broadcast[2] = 255;
broadcast[3] = 255;
broadcast[4] = 255;
broadcast[5] = 255;
unsigned char local[6];
local[0] = 0;
local[1] = 0;
local[2] = 0;
local[3] = 0;
local[4] = 0;
local[5] = 0;
envoie_ARP(pointeur_interface, accesseur, local, broadcast, (unsigned long)inet_addr("192.168.0.1"), (unsigned long)inet_addr("192.168.0.182"), local, broadcast, htons(1));
[/code:1:1d64ab8a2d]

On voit bien que je fais un inet_addr des adresses IP 192.168.0.1 et 192.168.0.182

Pourtant le résultat obtenus avec Wireshark est :

[img:1d64ab8a2d]http://img15.hostingpics.net/pics/630723trame.png

Je ne comprends pourquoi j'obtiens ces adresses IP... :/

Pour info le QTextEdit passé en paramètre de ma fonction c'est juste un pointeur sur une zone de texte qui me permets d'afficher les évènements effectué par mon programme.
Ce n'est pas cette partie qui pose problème...

Merci d'avance pour votre aide,