Programme en C - C - Programmation
Marsh Posté le 12-01-2013 à 23:00:51
Ce sujet a été déplacé de la catégorie Discussions vers la categorie Programmation par Ernestor
Marsh Posté le 13-01-2013 à 00:25:31
Bonsoir !
Cela parait étrange d'utiliser un "sniffer" pour déterminer les ports ouverts ... En effet, le sniffer vous permet de voir toutes les trames échangées sur les sockets "Established", mais qui ne correspondent pas aux ports ouverts. Pour valider qu'un port est ouvert, il faut être présent au moment où va passer la séquence "SYN - SYN ACK - ACQ", donc au moment où un client va réussir à se connecter à une socket "Listening". Si aucune connexion n'a lieu pendant que vous observez le traffic, vous ne verrez rien du tout.
Sinon, pour réaliser ce sniffer, aucune difficulté particulière, il suffit de regarder :
* Création d'une socket "RAW",
* Entête "IP"
* Entête TCP
Et, bien sûr, se plonger dans le fonctionnement interne du protocole et les différentes séquences (connexion, échange de données et terminaison).
Note : J'ai dit qu'il n'y a aucune difficulté majeure, pas que cela se faisait en 5 minutes
Si j'ai raté quelque chose au niveau de la détermination des ports ouverts, je compte sur vous pour me corriger (on apprend à tout âge !)
Marsh Posté le 13-01-2013 à 00:34:25
En fait le travail demandé ,c'est écrire un programme qui va lire un fichier qui contient des trames Ethernet/TCP IP et les décode afin de savoir si c'est une trame indiquant une connexion acceptée sur le port spécifié. ( ce fichier est déjà donné )
Marsh Posté le 13-01-2013 à 00:41:05
j'arrive pas à écrire la partie pour découper la trame en octet et lire les informations essentielles ( taille de la trame, adresses MAC sources et destinations, protocole IP, taille de l’entête, etc ) et voir si le port est ouvert ou fermé
Marsh Posté le 13-01-2013 à 00:45:19
Ok ! Vu comme ça, cela prend plus de sens
Le travail à faire n'est pas énorme :
* être capable de lire toutes les trames : à partir de la spécification de l'entête IP, déterminer la longueur totale de la trame et lire le nombre d'octets correspondants, puis passer à la trame suivante
* Identifier une trame "SYN" sur le port spécifié -> récupérer le numéro de séquence et les IP/port du client
* Rechercher une trame "SYN - ACQ" pour le port spécifié adressé à l'IP/port récupéré au dessus => Vérification du numéro d'acquittement et récupération du numéro de séquence
* Rechercher la dernière trame "ACK" avec le bon numéro de séquence et le bon numéro d'acquittement
Si on arrive à récupérer les 3 trames, c'est bon, logiquement !
Marsh Posté le 13-01-2013 à 00:53:35
le fichier contient :
00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 8f 00 00 80 06 9b 2b 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 10 fa f0 f0 c8 00 00 00 00 00 00 00 00
00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 90 00 00 80 06 9b 2a 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 10 fa f0 f0 c8 00 00 00 00 00 00 00 00
00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 91 00 00 80 06 9b 29 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 14 fa f0 f0 c4 00 00 00 00 00 00 00 00
Marsh Posté le 13-01-2013 à 01:04:06
C'est étrange, cela ne ressemble pas à des trames IP.
De plus, les adresses MAC ne sont pas dans la trame IP (puisqu'elle ne s'intéresse qu'aux adresses IP, justement), mais dans la trame Ethernet.
Si on part du principe que l'on a déjà des trames TCP dans le fichier, la grille de lecture peut être trouvée ici : http://fr.wikipedia.org/wiki/Trans [...] l_Protocol
Attention, toutes les trames concernant IP et ses sous-protocoles sont en "big endian"
Marsh Posté le 13-01-2013 à 01:22:40
Après avoir regardé, il est nécessaire d'avoir les données IP pour traiter les données TCP.
Le contenu du fichier que vous indiquez ne correspond pas à des trames IP, mais plutôt à des trames Ethernet II, cf http://fr.wikipedia.org/wiki/Ether [...] thernet_II, avec des trames IP V4 ( octets 12/13 valant 08 00 ), que l'on vérifie avec les 4 bits de poids fort de l'octet numéro 14 à 4. Cf. http://fr.wikipedia.org/wiki/IPv4 pour les trames IP V4
Je vous laisse le soin de décoder le reste !
Marsh Posté le 12-01-2013 à 22:30:23
Bonsoir tout le monde , j'ai besoin d'aide pour mon mini projet en informatique. Je dois écrire un programme en langage C permettant de traiter des trames générées par un sniffer de trames Ethernet dans lesquelles sont
encapsulées des paquets TCP/IP. Ces trames brutes doivent permettre d'identifier les ports ouverts (trous de sécurité) d'une machine distante.