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 !)