iftop, IPv6 et FreeBSD (et Linux aussi, d'ailleurs)

iftop(8) est un très bon outil pour mesurer l'activité réseau d'une machine. La dernière version stable (0.17), qui est dans tous les bons OS, remonte à février 2006. Récemment, Paul Warren a ajouté le support d'IPv6 (auparavant, seuls les flux en IPv4 étaient pris en compte). Il y a quelques difficultés pour compiler ceci sous FreeBSD ; j'ai une série de patches pour corriger cela, en attendant son intégration par Paul Warren. J'ai aussi un port pour FreeBSD.

Les deux premières choses à corriger sont deux Linuxeries, ajouter un #include oublié ainsi qu'un #define manquant.

La correction suivante est moins triviale. Pour faire la résolution inverse des adresses vues, iftop(8) utilise plusieurs threads, et plusieurs méthodes sont implémentées. Seule la méthode utilisant getnameinfo(3) fait de la résolution inverse en ip6. Cependant, le configure.in fournit refuse d'utiliser getnameinfo(3), avec une note disant que sur certains OS, cette fonction n'est pas thread-safe (NetBSD est donné en exemple).

On peut donc se plonger dans les macros d'autoconf pour utiliser getnameinfo(3) (vous avez le cœur bien accroché ?). Ou alors, on peut patcher resolver.c, au moins c'est du C, on sait où l'on s'aventure. Et oui, vous avez bien lu le code, le code initial essaie de deviner le type de l'adresse en lisant les premiers octets d'un struct in{4,5}_addr.

Pour les FreeBSD'iens, j'ai mis tout cela dans un port. Pour les autres, récupérez les patches liés plus haut (les GNU/Linuxiens se contenteront probablement de celui contre resolver.c). Attention, il y a un bug dans le Makefile fournit, il faut faire make iftop et non make all pour compiler.

Auteur : Frédéric Perrin

Date : lundi 21 février 2011

Sauf mention contraire, les textes de ce site sont sous licence Creative Common BY-SA.

Ce site est produit avec des logiciels libres 100% élevés au grain et en plein air.