#1: CIDR Aggregate, triez et aggrégez des listes d'adresses IP
On commence fort avec une splendide trouvaille que j'ai dénichée sur un forum il y a quelques temps, et qui va s'avérer salvatrice si vous devez manipuler régulièrement des fichiers contenant des adresses IPv4. Il s'agit d'un script shell vous permettant d'aggréger des adresses IP et sous-réseaux, de manière à obtenir une liste sans doublons ni redondance.
Par exemple si votre liste contient192.168.11.50
,192.168.11.0/25
,192.168.10.0/24
,192.168.11.128/25
et192.168.10.0/24
, ces quatre lignes seront remplacées par l'unique ligne :192.168.10.0/23
, laquelle regroupe les subnets consécutifs et élimine les recouvrements. Pas mal non ?
Bien que je vous le mette à disposition en téléchargement, je ne résiste pas à vous partager le code du script directement sur cette page :
#!/bin/bash -i alias d=done e=unset f=printf\ -v g=local h=else i=then j=for k=while C=do E=fi n(){ g s e i;j i in ${!u[@]};C [ $1 -ge $[i+1] ]&&[ $1 -le $[u[i]+1] ]&&s=$i [ $2 -ge $[i-1] ]&&[ $2 -le $[u[i]-1] ]&&e=$i;d;if [ "$s" ];i if [ "$e" ];i \ [ $s -ne $e ]&&{ u[s]=${u[e]};e u[e];};h [ $1 -lt $s ]&&{ u[$1]=${u[s]};e u[s ];s=$1;};[ $2 -gt ${u[s]} ]&&u[s]=$2;E;h if [ "$e" ];i [ $1 -lt $e ]&&{ u[$1 ]=${u[e]};e u[e];e=$1;};[ $2 -gt ${u[e]} ]&&u[e]=$2;h u[$1]=$2;E;E;};q(){ g s=${1#*/} m=${1%/*} z;[ -z "${s//*.*}" ]&&s=32;y $s z;set -- ${m//./ } m=$[$1<<24|$2<<16|$3<<8|$4];n $[m&z] $[m|((2**32-1)^z)];};y(){ f $2 "%u" $[ ( 2**32-1)^(~0^~0<<(32-$1))];};r(){ f $2 "%s" $[$1>>24].$[$1>>16&255].$[$1>>8& 255].$[$1&255];};t(){ g s z;k [ "$1" ];C s=32;k y $[s-1] z&&[ $1 = $[($1>>(33 -s))<<(33-s)] ]&&[ $2 -ge $[$1|((2**32-1)^z)] ];C ((s--));d;r $1 x;echo $x/$s y $s z;if [ $2 -gt $[$1|((2**32-1)^z)] ];i set -- $[1+($1|((2**32-1)^z))] $2 h shift 2;E;d;};k read w;C q $w;d;p=-1;j o in ${!u[@]};C [ $o -gt $p ]&&p=${u[ o]}&&t $o ${u[o]};d
Ah oui je vous avais prévenu, c'est une petite merveille ! Là vous vous demandez « mais wtf ?! OMFGBBQ !!?! Ca fonctionne ce truc ?? » Et bien étonnamment, oui ! Cela fonctionne même très bien, je vais vous en faire une petite démonstration.
Pour cela j'ai préparé une petite liste de test que je vais soumettre au script. Celle-ci comprend des adresses et des sous-réseaux qui se recouvrent, et j'ai également tendu quelques pièges au programme, notamment en lui donnant des sous-réseaux non identifiés par leur adresse de début (par exemple192.168.1.250/16
au lieu de192.168.0.0/16
), le tout dans le désordre.
10.2.5.0/24 192.168.16.0/24 10.2.5.108 192.168.17.0/24 192.168.18.0/24 172.26.120.78 10.4.253.0/24 192.168.19.0/24 192.168.254.254 172.20.80.0/24 10.255.4.8 172.19.64.0/14 10.4.252.0/24 192.168.20.0/24 192.168.254.253 172.26.120.85/28 10.255.255.0/16
Le script attend un sous-réseau par ligne, il lit l'entrée standard, et écrit sur la sortie standard. Ceci le rend donc parfaitement apte à être utilisé dans une ligne de commande unique, ou bien dans un script plus gros.
![]()
Résultat produit par le script sur la liste ci-avant
Juste magnifique. Et en plus ça sort tout bien trié, et comme il faut pour des adresses IP (une utilisation desort
sur une liste d'adresses IP placerait111.x.x.x
avant2.x.x.x
notamment, cépataupe).
Vous noterez que le script ajoute le préfixe/32
aux adresses isolées. Cela n'a normalement aucune incidence pour la plupart des utilisations. Mais au cas où cela devrait poser problème avec le logiciel auquel vous destinez la liste traitée par le script, vous pouvez facilement éliminer ce/32
en rajoutant un petit passage parsed
comme ceci :Le script à télécharger : cidr-aggregate.sh.gz - en archive gzip, ce qui vous évitera d'éventuelles déconvenues si vous le récupérez d'abord sur une machine Windows avant de l'envoyer vers votre serveur UNIX.cidr-aggregate.sh < origin-list | sed "s/\/32$//" > destination-list
Important : ce script utilise bash et non le/bin/sh
minimaliste présent sur tous les UNIX. Il vous faudra donc d'abord l'installer, notamment sur les systèmes *BSD. Dans la même idée, vous devrez peut-être modifier la 1ère ligne du script en#!/usr/local/bin/bash -i
, ou bien créer un lien symbolique dans/bin
vers l'emplacement du binaire de bash (ce que je vous recommande, car cela pourra s'avérer utile si vous téléchargez d'autres scripts sur Internet). N'oubliez pas non plus de copier le script dans un répertoire figurant dans votre variablePATH
et de lui attribuer les droits d'exécution (0755).
#2: btop, le dashboard système en mode texte
Je cherchais un programme capable de m'afficher le trafic réseau en temps réel sur mes serveurs, car les WebUI des équipements réseau ne me satisfaisaient pas. Lors de cette recherche j'ai trouvé bien plus.
Je vous présente donc btop un dashboard complet vous permettant non seulement d'observer le trafic réseau, mais aussi le reste de votre système : charge CPU, processus, I/O disques et mémoire. Tout en un, personnalisable (vous pouvez choisir les éléments à afficher) et entièrement en mode texte.
![]()
![]()
btop avec deux exemples de thèmes (couleurs) et deux dispositions de panneaux
Vous pouvez cliquer sur les miniatures pour ouvrir une nouvelle fenêtre et voir en taille réelle
Bien qu'il fonctionne dans n'importe quel terminal, tout le dashboard est manipulable à la souris en cliquant sur les labels, et vous pouvez faire défiler le volet des processus à l'aide de la molette. Vous pouvez aussi utilser les raccoucis clavier correspondant aux lettres en couleur de chaque label.
Il y a des packages de ce programme pour Linux, FreeBSD, NetBSD et même macOS, avec homebrew. Ces packages sont founis avec des thèmes pré-installés (une quinzaine), que vous pouvez modifier assez facilement (ce sont des fichiers texte).
La page officielle du projet est disponible ici.
#3: grc, color my shell!
Ahhh le bon vieux terminal de papa, le vrai VT-100 au clavier minimaliste, qui fait du bruit (quelqu'un ici a quelque chose contre les claviers qui font du bruit ?) et tout plein de bips, avec une rémanence qui rend un défilement bien illisible. :) Ouais OK c'est marrant, c'est très root, mais en vrai la couleur sur les terminaux, ça existe depuis le VT-201... Alors pourquoi devrait-on se contenter de ne colorer que les prompts ?
Heureusement vous allez pouvoir mettre de la couleur dans votre terminal grâce à un petit outil qui mettra en valeur la sortie de la plupart des commandes UNIX standard.
Oui alors je vous vois venir, je sais ce que vous pensez. Vous vous dites « c'est quoi ces histoires de couleurs de PD ? Moi mon terminal il est blanc sur noir, viril, et il a des pwals. A quel moment je le transforme en arc-en-ciel LGBT de mes burnes obliques ? » Bon comme une seule image vaut mille mots (c'est bô ce que j'écris), je vais vous illustrer tout cela (et vous convaincre) avec un petit exemple.
Voici donc ce que vous obtenez avec la commandemount
sur un système récent :
![]()
Ah oui ça fait un joli pâté n'est-ce pas ? Et encore, j'utilise un prompt coloré. Si vous n'aimez pas ça (ce que je peux comprendre tout à fait, à l'inverse de ne pas aimer les claviers qui font du bruit), vous allez carrément ne plus savoir où est la première ligne.
Voici maintenant le résultat demount
, colorisé par grc :
![]()
Ah ah ! Je ne vous avais pas menti. Avouez que ça n'a rien à voir, et que vous êtes épaté. Non seulement les différents types de partitions sont parfaitement distinguables, mais qui plus est, la différence entre un élément qui se poursuit par un retour à la ligne, et l'élément suivant, est nettement plus visible.
Hum, on m'indique que pour illustrer mon propos, j'ai utilisé deux images et non une comme je l'avais écrit avec ma phrase philosophique de coin de comptoir. Oui en effet. Mais j'ai aussi probalement écrit plus de mille mots sur cette page, donc stop râler ça passe, épicétou.
Vous avez le support d'un grand nombre de commandes colorisables avec grc, telles queps
,ping
,ifconfig
,traceroute
,netstat
, ... Vous pouvez même coloriser les logs de votre serveur, par exemple en lançant dans un terminal :Le programme dispose de packages pour Linux et FreeBSD mais il s'agit d'un script python que vous pouvez assez facilement installer sur n'importe quel système. Pour cela, rendez-vous sur la page officielle du projet sur GitHub, ou bien vous pouvez aussi récupérer l'archive que je vous ai moi-même préparée. Elle comprend la documentation pour l'installation.grc tail -n 100 -f /var/log/syslog
Je l'ai installé comme cela sur NetBSD, GNU Hurd et Solaris. J'ai même pu l'installer sur des équipements embarqués utilisant un shell UNIX, pour peu que python y soit disponible - ce qui est presque tout le temps le cas des équipements qui disposent d'une WebUI.
#4: cmatrix et asciiquarium, inutiles donc indispensables !
Le travail c'est bien, et même si la rigôlad ce n'est pas mieux (restons sérieux), un petit programme pour agrémenter son terminal, c'est comme lire des bêtises sur Internet venues de sites douteux : ça fait parfois du bien !
Voici donc cmatrix qui reproduira les fameux écrans d'analyse de la Matrice des opérateurs dans les vaisseaux du monde réel. Le programme est aussi vieux que les films, mais probablement oublié depuis car à l'époque, il consommait beaucoup de ressources CPU (c'est d'ailleurs toujours écrit dans la manpage). Ce n'est bien sûr plus un souci avec une machine moderne, si bien que vous pouvez le faire tourner non-stop sans problèmes aujourd'hui.
![]()
![]()
cmatrix avec différents paramètres
Cliquez sur les miniatures pour voir en pleine fenêtre
Si vous utilisez tmux (ce que je vous recommande), vous pouvez faire quelques setups rigolos. Dans les trois terminaux de la seconde capture, les commandes lancées sont, de gauche à droite :Le logiciel est surtout disponible pour Linux. Je n'ai malheureusement pas vu de package pour les systèmes *BSD.
cmatrix -a -b -C cyan cmatrix -a -b -C magenta cmatrix -a -b -C yellow
Mais pour les utilisateurs de ces systèmes, ne vous inquiétez pas, j'ai pour vous de quoi faire rager ceux qui ne jurent que par Linux : asciiquarium !
Cet outil simule un économiseur d'écran d'un des thèmes les plus célèbres, celui de l'aquarium virtuel. Entièrement en mode texte, à lancer directement dans un terminal par la commande :asciiquarium
![]()
asciiquarium dans un terminal
Cliquez sur les miniatures pour voir en pleine fenêtre
Le programme est très léger, et consomme encore moins de CPU que cmatrix.
Si vous le laissez tourner sur un écran secondaire au bureau, nul doute que cela va attirer des collègues curieux. Ce peut être une excellente occasion d'engager une conversation avec la développeuse pulpeuse de type bonnasse de l'open-space voisin. A tous les coups, elle va trouver ça « trop pipou. » Bon espérez juste que le requin qui passe de temps en temps dans l'aquarium virtuel ne décide pas de se pointer à ce moment-là, car il dévore les poissons et laisse une traînée de sang derrière lui. Ha ha ha !
Il y a un package pour FreeBSD et NetBSD du programme, mais étrangement pas sous Debian Linux. Bon vu qu'il est écrit en perl, je pense que ce n'est pas extrêmement difficile à porter.
Renouons avec une vieille tradition de mon site : la liste de liens ! Vous trouverez ici quelques pointeurs vers quelques webtools bien pratiques.
- Color Converter - Un outil vous permettant de générer une couleur 24 bits sous différents formats suivant le logiciel à laquelle vous la destinez. Vous pouvez ainsi faire correspondre un triplet
(r, g, b)
en base 10 à son équivalent#rrggbb
en base 16, tel qu'utilisé en HTML, mais pas que.- Bash prompt generator - Parfait pour les déglingués du bulbe de mon espèce en matière de prompt colorés. Choisissez simplement vos couleurs sur la palette puis copiez-collez la variable d'environnement
PS1
générée par le site. Dites-vous bien que pour faire ceux de mes machines, j'avais dû tâtonner en essayant un peu toutes les valeurs, faute d'avoir un tel outil à l'époque. On me fait d'ailleurs signe que c'est sûrement pour ça que j'ai les mêmes depuis 28 ans, et que je n'ai rien changé. Oui il faudrait que j'y pense... Peut-être... Ou pas. Existe aussi pour zsh !- 256 Colours of XTerm - On reste dans le domaine des couleurs avec une page listant les 256 couleurs disponibles sur les terminaux de type
xterm-256color
. Ces codes couleur vous permettront notamment de personnaliser votre configuration tmux qui emploie les mêmes. Sur ce même site vous trouverez également une liste de commandes, bien utile si vous débutez avec les systèmes UNIX.