Porcherie informatiche per risolvere in modo artistico i piu` disparati e disperati problemi.


Verifica se un file e` una mailbox

Teapop tende a danneggiare i file di mailbox lasciandoci della roba spuria in cima. Per convertire le mailbox in maildir, uso un tool che si incazza se la mailbox non e` a posto. Un rapido check di consistenza (verifica che il file non sia lungo 0 e che inizi con "From ") si puo` fare con questo script:

if [ -s $1 ] ;
then

        if [ "`cat $1 | awk  ' { if (FNR == 1) print substr($0,1,5) } '`" != "From " ] ; then
                echo $1 "Non e valido"
        fi
fi

Il quale puo` essere invocato in una directory per provare tutti i files cosi`:

 find . -type f -exec ./checkmail.sh {} \;

Mi e` capitato di avere un print server con tre parallele, con aperte una quantita` di porte tcp dalla 9100 in poi, per la stampa via protocollo "jetdirect", delle quali non era affatto chiaro quale porta tcp stampasse su quale porta parallela. Come se non bastasse, facendo nmap risultavano aperte decine di porte nel range 9000-10000, diverse ogni volta che lanciavo nmap. (questo perche` il print server veniva saturato dalle connessioni di nmap e non rispondeva piu` ai SYN in modo pseudorandom)

La soluzione per scoprire quale porta tcp stampa su quale porta parallela, la soluzione e` stata questa: attaccare una stampante ad aghi ad una delle porte, poi eseguire su una macchina Linux questo script:

for (( a=9000 ; a<9300 ; a=a+1)) ;
do
  echo $a | netcat -vv -w 1 192.168.0.251 $a
  sleep 1s
done

Questo script in pratica scrive il numero della porta sulla porta numero X (da 9000 a 9003). Il risultato e` che su ogni stampante collegata al print server verranno stampati i numeri di porta che pilotano la stampante stessa.

Inviare allegati via email automaticamente

Per inviare automaticamente dei files per e-mail, ad esempio dei log, si puo` fare cosi`.

for LOG in `ls /var/log/argus/*.[0-9]*[0-9] /var/log/nsa/*.[0-9]*[0-9]`
do
   gzip $LOG -c > /tmp/`echo $LOG | sed 's/.*\///'`.gz
   metasend -f /tmp/`echo $LOG | sed 's/.*\///'`.gz -s $LOG -t utente@domain.tld -b -e base64 \
            -m "application/x-gzip; name=\"`echo $LOG | sed 's/.*\///'`.gz\"" -S 100000000
   sleep 5s
   rm /tmp/`echo $LOG | sed 's/.*\///'`.gz
done

Per estrarli dalla mail dall'altra parte, e salvarli dove si vuole, mantenendo il filename originale (path escluso), si puo` mettere nel .forward dell'utente una cosa tipo:

| /usr/bin/munpack -C <path di destinazione>

Per fare questo occorre avere installati i programmi che fanno parte del pacchetto metamail. Il nome del file che verra` visto dal ricevente e` generato dal sender, nella parte name=xxxx. Attenzione che occorre mettere fra virgolette (") il nome del file se contiene caratteri che non siano alfanumerici.