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.