Documentation et exemple de NKE

Vinche

Membre actif
20 Avril 2002
127
0
Bonjour,
J'ai des petits problème de documentation. Je programmes actuellements en Cocoa et je souhaite faire un sniffer qui m'averti à chaque fois qu'une application se connecte sur le net. Après avis divers, il apparait que le seul moyen de le faire est de créer une NKE (Network Kernel Extension) et de la faire parler avec mon app Cocoa. J'ai bien jetter un oeil sur le site de la pomme (ADC) mais à part quelque allusion ici et là, je n'ai pas trouver de documentation sur le moyen de faire cette extension (idem sur google).
Est-ce que quelqu'un saurais ou trouver de la doc? Un exemple serait le pied intégrale merci.
Vinche
 
Tous les NKE utilisés par MacOS X sont en open source dans Darwin. Il faut donc que tu télécharges les bons packages sur le site d'Apple. Il y a donc baucoup d'exemples. Par contre, écrire un NKE, c'est complexe et il va falloir que tu travailles dans le noyau, ce qui est encore plus dur. Il faudra que tu fasses aussi un user client pour que ton soft en Cocoa puisse se connecter à ton extension.

Mais il existe une autre solution pour sniffer les datagrammes IP. Il s'agit d'utiliser le firewall ipfw et plus précisemment d'utiliser la fonction divert, qui permet de renvoyer les datagrammes vers un port.
Après, tu fais un socket BSD classique pour réceptionner les datagrammes.

Il y a un très bon exemple qui est en open source et qui s'appelle Throttled, ça fait du contrôle de flux à la base. Tu peux t'en inspirer pour faire ton sniffer.
 
S'il s'agit juste d'un sniffer tu peux utiliser la librairie libpcap, qui est très facile à utiliser (Eterhreal s'en sert), pour récupérer les donnés au sein de paquets IP.

Tu peux aussi regarder le source de TCPFlow.

thierry
iconless.com
 
SuperCed :
Après un rapide coup d'euil, utiliser divert dans ipfw va me poser quelque problème en effet je veux sniffer chaque port et non uniquement un port, il doit être possible d'utiliser une régle du style:
divert XXXX tcp from "myIP" to any out via en0
Mais j'aurais alors le probléme de savoir d'ou viennent les données, pas moyen de divert les ports un à un j'atteindrais la limite de régle de ipfw, à moins qu'une téchnique m'ai échappé, cette méthode va être difficile à mettre en œuvre.
Reste alors la téchnique d'une NKE, je veux en effet seulement sniffer les données pour savoir si une application essaye d'ouvrir une nouvelle connexion et le cas échéant, savoir quelle application et à quelle adresse.

Sinon: la library libpcap doit me permettre de faire ça, j'ai trouver un tutorial dessus ici .
Merci