Le Net est comme un hybride entre un éléphant et une vente de charité (en anglais white elephant sale) : il n'oublie jamais rien, et on n'y trouve que des cochonneries.
--Nemo
Sur un système Linux, on trouve un certain nombre d'outils permettant l'accession aux connexions réseau, la manipulation et le dépannage. Ces outils peuvent être incorporés dans des scripts -- dans le but de mieux connaître le réseau ou d'en faciliter l'administration.
Voici un script CGI très simple qui donne à voir la connexion à un serveur distant.
Exemple 30.1. Affiche l'environnement serveur
#!/bin/bash # May have to change the location for your site. # (At the ISP's servers, Bash may not be in the usual place.) # Other places: /usr/bin or /usr/local/bin # Might even try it without any path in sha-bang. # test-cgi.sh # by Michael Zick # Used with permission # Disable filename globbing. set -f # Header tells browser what to expect. echo Content-type: text/plain echo echo CGI/1.0 test script report: echo echo environment settings: set echo echo whereis bash? whereis bash echo echo who are we? echo ${BASH_VERSINFO[*]} echo echo argc is $#. argv is "$*". echo # CGI/1.0 expected environment variables. echo SERVER_SOFTWARE = $SERVER_SOFTWARE echo SERVER_NAME = $SERVER_NAME echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE echo SERVER_PROTOCOL = $SERVER_PROTOCOL echo SERVER_PORT = $SERVER_PORT echo REQUEST_METHOD = $REQUEST_METHOD echo HTTP_ACCEPT = "$HTTP_ACCEPT" echo PATH_INFO = "$PATH_INFO" echo PATH_TRANSLATED = "$PATH_TRANSLATED" echo SCRIPT_NAME = "$SCRIPT_NAME" echo QUERY_STRING = "$QUERY_STRING" echo REMOTE_HOST = $REMOTE_HOST echo REMOTE_ADDR = $REMOTE_ADDR echo REMOTE_USER = $REMOTE_USER echo AUTH_TYPE = $AUTH_TYPE echo CONTENT_TYPE = $CONTENT_TYPE echo CONTENT_LENGTH = $CONTENT_LENGTH exit 0 # Here document to give short instructions. :<<-'_test_CGI_' 1) Drop this in your http://domain.name/cgi-bin directory. 2) Then, open http://domain.name/cgi-bin/test-cgi.sh. _test_CGI_
Pour des raisons de sécurité, il peut être utile d'identifier les adresses IP auxquelles un ordinateur se connecte.
Exemple 30.2. Adresses IP
#!/bin/bash # ip-addresses.sh # Affiche les adresses IP auxquelles votre ordinateur est connecté. # Inspiré par le script ddos.sh de Greg Bledsoe, # Linux Journal, 09 mars 2011. # URL : # http://www.linuxjournal.com/content/back-dead-simple-bash-complex-ddos # Greg a placé son script sous la licence GPL2. #+ Ce script en étant dérivé, il est également sous GPL2. # Traduction : Jean-Philippe Guérard type_de_connection=TCP # Essayez également UDP. champ=2 # Quel est le champ qui nous intéresse. ignores=LISTEN # On ignore les enregistrements contenant # LISTEN. Pourquoi ? lsof_args=-ni # -i affiche les connecteurs Internet. # -n affiche les adresses sous forme numérique. # Que se passerait-il sans -n ? Essayez. port_local="[0-9][0-9][0-9][0-9][0-9]->" # Supprime le port local. lsof "$lsof_args" | grep $type_de_connection | grep -v "$ignores" | awk '{print $9}' | cut -d : -f $champ | sort | uniq | sed s/"^$port_local"// # Le script de Bledsoe place la sortie d'une liste d'adresse IP # filtrée (de la même façon que les lignes 22 à 24 ci-dessus) # dans une variable. # Il recherche des connexions multiples vers une adresse IP unique # puis utilise : # # iptables -I INPUT -s $ip -p tcp -j REJECT --reject-with tcp-reset # # ... avec une boucle toutes les 60 secondes pour renvoyer les # paquets des attaques de déni de service. # Exercice : # ---------- # # Utiliser « iptables » pour améliorer ce script, en rejetant #+ les tentatives de connexion des domaines des gros émetteurs #+ de pourriels.
Autres exemples de programmation réseau :
Voir aussi les commandes réseau dans le chapitre Système et commandes administratives et les commandes de communication dans le chapitre Filtres externes, programmes et commandes.