Next: Gestion des Threads et
Up: Noyau
Previous: Affichage des paquets
  Contents
Lorsqu'un paquet arrive, nous structurons la donnée à l'aide de types
définissant les entêtes des paquets. Nous n'avions aucune idée precise
de la forme des paquets à leur arrivée, puisque c'est l'opérateur de
coercition (TypeCast) qui convertissait dans notre type structuré.
Aussi, pour renvoyer un paquet filtré, des modifications sont faites
dessus, sous sa forme structurée, puis il est déstructuré afin d'être
renvoyé. Mais sous quelle forme le déstructurer, puisqu'à l'origine
nous recevons seulement un pointeur non typé sur la donnée ?
Après de multiples recherches, nous avons découvert qu'il s'agissait
tout simplement d'une zone mémoire basique référencée par un pointeur
non typé. Les modifications sont faites sur cette zone mémoire à l'aide
de pointeurs typés retournés par l'opérateur de coercition.
Enfin, le paquet déstructuré est renvoyé sur la seconde interface.
Pour cela, nous avons créé une procedure utilisant les fonctions de
la librairie Packet.dll, permettant ainsi d'envoyer un paquet
facilement. Cette procédure n'a pas été facile à réaliser.
Les modifications faites sur chaque paquet concernent les adresses
Mac et IP (dans le sens de réception, il s'agit du destinataire,
et dans le sens de l'envoi de l'expéditeur), et le calcul des Checksum.
Après de nombreuses difficultés, notre algorithme sur le calcul du
Checksum IP a pu être réalisé, ceux des entêtes sousjascentes telles que
TCP, UDP, et ICMP nous elle aussi données du fil à retordre.
Remarque :
- De plus, le type Word nous pose de multiples problèmes puisqu'il
faut lui appliquer des fonctions appartenant à la librairie Winsock qui
en fait, inversent les deux octets.
- C'est bien d'avoir des supers structures de files qui contiennent
nos données avec l'utilisation de pointeurs pour optimiser, mais il
faut savoir conserver la donnée au bout du pointeur, donc nous la
recopions avant de l'enfiler.
Next: Gestion des Threads et
Up: Noyau
Previous: Affichage des paquets
  Contents
root
2002-06-23