Outil FrameIP générateur de trame et datagramme

Outil FrameIP générateur de trame et datagramme

1 – Définition de l’exécutable

L’utilitaire FrameIP est un générateur de trame IP. Vous avez enfin la possibilité de créer une trame IP manuellement en choisissant tous les champs des entêtes IPICMPIGMPTCPUDP et autres. Cela peut vous permettre de tester une nouvelle attaque, une maquette ou tous besoins personnalisés.

L’utilitaire est basé sur un seul EXE et ne s’installe pas. Il fonctionne sous deux modes possibles :

Le premier est Winsock où il s’appui entièrement sur la pile IP de votre Système. Dans ce cas, vous n’aurez pas besoin de Dll spécifique en plus, ni d’autres fichiers et ni de driver du type Winpcap. L’autonomie sera très intéressante.

Le second mode est Libpcap où il s’appui sur Winpcap qui doit être préalablement installé. Cela vous apportera la possibilité de générer en plus l’entête Ethernet ce qui permet de ne plus être dépendant de son OS (plus de soucis avec les SP d’XP dans ce cas).

2 – Screen shot

frameip screen shot

3 – Download

Nom : FrameIp.exe
Mode : Console
Version : 5.10
Librairie : 3.13
Taille : 112 Ko
Auteur : _SebF
Date de création : 21 Décembre 2002
Dernière compilation : 02 Juin 2009

Un version graphique existe, mais elle n’est plus maintenue.

4 – Suivi du développement de la version console

4.1 – Problème restant

Compilation en mode release

4.2 – RoadMap

  • Créer une interface graphique (si quelqu’un veut m’aider …)
  • Écrire un fichier d’aide (si quelqu’un veut m’aider …)
  • Gérer les options des entêtes IP, TCP.
  • Gestion d’IPV6.
  • Version Linux
  • Permettre l’ouverture de session TCP (demandé par leyou)
  • Permettre la résolution ARP de l’IP demandé.
  • Gestion des arguments plus simple (plus court, contrôlé, …)

4.3 – Suivi du projet

  • V5.10.3.13
    Ajout de l’entête RIP
  • V5.10.3.13
    Ajout de l’entête RIP
  • V5.9.3.12
    Ajout des valeurs « r » et « a » pour les adresses MAC source et MAC destination
  • V5.8.3.12
    Remplacement des valeurs 0 par « r » ou « a » afin de spécifier random et auto
    Ajout du tirage aléatoire des arguments -arp_ip_source et -arp_ip_destination
  • V5.7.3.12
    Correction orthographique de Opocode en opcode
    Possibilité de forcer les checksum UDP et TCP à 0 en spécifaint la valeure 100000 (par exemple : -udp_checksum 100000)
  • V5.6.3.11
    Ajout de la gestion des argument ARP
  • V5.5.3.10
    Ajout de l’argument -view permettant de supprimer l’affichage des résultats
    Correction du bug de l’argument -wait qui ne convertissait la valeur saisie en unsigned char. Problème remonté par stephr84
  • V5.4.3.10
    Correction du bug d’affichage dans le cadre des IP_type différent d’IPv4 (Problème remonté par stephr84)
    Plus besoin de spécifier -mac_auto à 0 pour indiquer une mac source
  • V5.3.3.10
    Suppression de la possibilité de tirer aléatoirement l’argument -icmp_type. Ainsi, on peux stipuler 0 comme valeur. Modification demandé par stephr84
  • V5.2.3.10
    Prise en compte du cas où Mac_type est différent de 2048. Ceci permettant d’envoyer principalement des requêtes ARP (autres qu’IP). Problème remonté par Rod
    Prise en compte de / en plus de – dans les arguments passés
    Passage de la variable loops en unsigned long
    Changement de l’ip_destination par défaut à 192.168.101.254
    Passage de la longueur des tableau à 16 pour les variables dchar ip_source[15]; char ip_destination[15]; char ip_destination_igmp[15];
  • V5.1.3.10
    Ajout des arguments suivant permettant de spécifier l’interface et les options de l’entête ethernet :                    -send_mode                    -interface                    -mac_source                    -mac_source_auto                    -mac_destination                    -mac_destination_auto                    -mac_type
    Ajout de la fonction envoi_de_la_trame_pcap() permettant d’envoyer le paquet via Libpcap.
  • V4.7.3.9
    Remplacement des Strcp par Memcpy en insérant une variable géant la taille des chaînes de caractères. Ceci gère donc maintenant les 00 dans les chaînes hexa.
  • V4.6.3.8
    Ajout de l’argument -data_hexa permettant de spécifier une chaine Hexa
    Passage de la valeur par defaut TCP_syn au lieu de TCP_ack
  • V4.5.3.7
    Suppression de la double initialisation de la socket.
    Gestion de l’erreur 10013 indiquant qu’il faut être administrateur de la machine pour utiliser les socket en mode raw.
    Calcul de la valeur ip_length afin de permettre le calcul du checksum IP.
    Passage de ip_id d’automatique à random afin de permettre le calcul du checksum IP.
    Résolution du problème de calcul du checksum IP dans la librairie en supprimant la prise en compte des data.
  • V4.4.3.6
    Vérification de tous les besoins en htons et htonl afin d’inverser la lecture. Merci à Eric Lalitte.
    Ne rien faire pour les variables de type unsigned char (8 bits).
    Htons sur toutes les variables de type unsigned short (16 bits).
    Htonl sur toutes les variables de type unsigned long (32 bits).
    Affichage dans l’aide de la nouvel limitation à 15 de l’argument -tcp_offset et à 63 pour -tcp_reserved.
    Résolution du problème lors de l’utilisation des arguments -data et -size simultanément. Le problème était présent si l’utilisation était dans l’ordre -size x -data y.
    Résolution du champ -tcp_reserved à cheval sur deux unsigned char. Séparation dans l’entête TCP par reserved et reserved2.
    Résolution du champ -ip_offset à cheval sur deux unsigned char. Séparation dans l’entête IP par offset et offset2.
  • V4.3.3.5
    Correction du -loops 0 qui ne fonctionnait pas.
  • V4.2.3.5
    Résolution du problème de TCP non reconnu par Netmon. L’ip_offset était mal réglé et l’interprétation de la longueur d’IP n’était pas correcte et le départ de l’entête TCP n’était donc pas le bon.
    Traduction de l’argument -tcp_accuse par -tcp_acknowledge.
    Intégration des nouveaux arguments : -tcp_reserved -tcp_flag_urg -tcp_flag_ack -tcp_flag_psh -tcp_flag_rst -tcp_flag_syn -tcp_flag_fin.
  • V4.2.3.5
    Mise en forme de l’affichage du résultat.
    Le port 0 source UDP et TCP ne sont pas calculé automatiquement. Donc je les aient migrés en _random..2004.01.27 V4.2.3.5
    Migration des else if en switch case.
    Intégration de l’argument -size.
    Intégrer de l’argument -data.
  • V4.2.3.5
    Ajout du calcul de checksum icmp, igmp, tcp et udp.
    Séparation de la fonction initiation des variables aléatoires et des checksum.
    Suppression de l’argument -timeout.
  • V4.2.3.5
    Tirage aléatoire des variables à valeurs 0.
    Rajout de la gestion aléatoire pour l’argument -ip_type. – Gestion de tous les ip_type comme le 255 (sauf Tcp, Udp, Icmp et Igmp).
  • V4.2.3.5
    Traduction des derniers termes fr en us.
    Nouvelle écriture de la variable -data afin d’utiliser la librairie commune.
  • V4.23.5
    Passage des arguments -tcp_port_source et -udp_port_source à 0.
    Intégration de la gestion d’erreur sur l’initialisation.
  • V4.2.3.5
    Suppression de l’argument -t et remplacement par la valeur 0 de loops.
    Relecture du code en se basant sur le modèle Synflood.
  • V4.0
    La compilation ne fonctionnait plus depuis le passage à Microsoft .net. Résolution en compilant la Lib en Multiprocess.
  • V3.6
    Comparaison des arguments indépendamment des minuscules et majuscules grâce à la fonction strlwr.
    Suppression de l’argument -reception et remplacement par -timeout=0.
  • V3.5
    Correction du calcul du champ ipv4.length afin d’insérer la taille de l’entête TCP ou UDP ou ICMP.
    Changement de l’utilisation de sprintf par la fonction memcpy permettant la gestion de code 0.
  • V3.5
    Résolution du problème des champ offset, réserve et flag de l’entête TCP.
    Inversion du champ ihl et version dans IP.
    Inversion du champ type et version dans IGMP.
  • V3.5
    Calcul des checksum IGMP, TCP et UDP.
  • V3.4
    Gestion des modules IGMP, TCP et UDP.
    Gestion des arguments IGMP, TCP et UDP.
  • V3.2
    Migration du projet en intégrant le FramIp.H comme fichier de liaison.
    Ajout de la définition de la structure IGMP dans le .H.
    Suppression du module caché hacking.
  • V3.1
    Ecritue de la documentation IP des modules TCP, UDP et IGMP.
  • V3.1
    Ajout de l’argument Timeout dans la structure d’échange.
    Ajout de la boucle et de la pause entre chaque envoi dans le mode Cmd.
  • V3.0
    Fin du développement de PingIcmp.exe et donc reprise de ce programme au 12 avril.
    Utilisation de VC++ 6.0.
    Transformation des code C en CPP
    Séparation des codes sources en Cmd
    Librairie – Mfc – Passage en Level 4 pour la compilation
  • V2.5
    Refonte de la procédure resolution_de_nom et intègre le code retour du nom d’hote introuvable.
    Suppression de la partie TCP avec session.
    Ping sur www.yahoo.fr par défaut.
    Résolution de problème de réception ICMP en mettant IPPROTO_IP dans la fonction Socket, au lieu de IPPROTO_RAW.
    Affichage brut de la trame réceptionnée, manque la gestion TCP et UDP. Figure un problème Hexa sur les champs supérieur à 255 bits.
  • V2.5
    Migration de la lecture des arguments en +1 au lieu de plus +2.
    Si aucun argument n’est spécifié alors donner l’aide.
    Suppression des printf est des codes retours
    Création de la variable validation_d_envoi afin d’afficher si la trame à été envoyé ou pas.
    Suppression de la mesure du temps de réponse.
    Récupération automatique de l’IP source et intégration du return char * dans la fonction.
    Passage du buffer de reception à 65535. – Affichage de l’IP_source local dans l’aide.
    Refonte totale de l’affichage des options.
    Suppression des variables et saisies direct des arguments dans les structures.
  • V2.3
    Intégration de la procédure dimensionnement_de_data_a_envoyer permettant le choix de la taille des données.
  • V2.2
    Refonte complète du code en passant à la gestion des entêtes (offrant une option pour le TCP session).
    Ajout de « Host:www.yahoo.fr\n\ » dans la data get (il ne faut laisser qu’un seul \n juste avant Host).
  • V2.1
    Le clrsrc ne fonctionnait plus. J’ai inclus en dur la librairie tcconio.lib.
  • V2.1
    Formatage à zéro de l’entête ip et icmp.
    Calcul du checksum (adaptation).
  • V2.0
    J’ai enfin réussit à émettre une trame à entête IP modifié, il faut prendre manuellement ws2_32.lib au lieu de wsock32.lib (bridé par MS).
    Renommage de l’exe en socket.exe.
    Travail sur la collecte des RFC IP et ICMP et du calcul des checksum ICMP
  • V1.4
    Migration des *string en array.
    Résolution du problème d’affichage du retour du ping en migrant les string en array
  • V1.3
    Affichage en Hexa de l’entête IP réceptionné.
  • V1.3
    Recherche Internet sur l’envoi d’une trame en modifiant l’entête IP entièrement.2003.01.10 V1.3
    Ajout d’un nouveau module : Le hacking.
    3 attaques. pm3 chaine et break. Accès aux attaques : Private.
    Solution en partie du problème ou le shutdown=-1. Supprimer les SetSockOpt, trouver une solution pour faire cohabiter les deux.
  • V1.2
    Ajout du choix du TTL grâce à la primitive SetSockOpt(), Ca fonctionne pour la trame sortante, mais pas pour celle de retour.
    Ajout de l’argument -data afin de pouvoir spécifier la data qui se retrouvera envoyé.
    Résolution du problème : Pourquoi l’entête ICMP est à 12 au lieu de 8? C’était du à l’écriture du timestmp dans la trame, je l’ai migré en variable temps_de_reponse.
    Problème de ping limité à 2000 résolut en passant par un array au lieu d’un string. Nouvel limite à 65515.
    Possibilité de choisir le port source sans spécifier l’ip source. Grâce à la commande .sin_port=htons(numero_du_port_source) qui choisit dynamiquement l’ip source.
    Ajout d’un string dans l’envoi du ping.
    Ajout du paramètre choix de la taille du paquet ICMP.
    Utilisation de la commande strnicmp au lieu de strcmp pour comparer sans distinction des majuscules et minuscules.
    Implantation de la data echo dans le module icmp.
  • V1.1
    Mise en service de la fonction Bind permettant de choisir le port source et l’adresse ip source.
    L’ip source doit être présente dans l’OS. – Ajout d’un numéro de version.
    Essai d’envoi d’une trame TCP sans sa session via socket(AF_INET,SOCK_RAW,IPPROTO_TCP) => Echec.
  • V1.0
    Choix du type de trame UDP ou ICMP.2002.12.29
    Emission et réception d’un get Http
    Ajout des arguments
    Résolution de nom fonctionne.
    Ouverture d’une Socket via WSAData
    Début du dev afin de tester les sockets.
    Mon arrière idée est de refaire le ping sans le nouveau bridage Microsoft -w 1.
    Mon choix du compilateur s’est porté sur LCC 3.3 du au faite qu’il soit Light à installer.

5 – Discussion autour de l’outil FrameIP générateur de trame et datagramme

Vous pouvez poser toutes vos questions, faire part de vos remarques et partager vos expériences à propos de l’outil FrameIP générateur de trame et datagramme. Pour cela, n’hésitez pas à laisser un commentaire ci-dessous :

Commentaire et discussion

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *