Category: linux

Calcolare il pigreco. (?)

Questo è uno script non mio, ma siccome non mi ricordo la fonte, lo copio-incollo senza pudore tanto non è un segreto industriale. Salvate in pi.sh (o col nome che volete) questo scriptino.

#!/bin/bash

time bc -q -l << EOF
scale=$1
4*a(1)
quit
EOF

Rendetelo eseguibile (chmod a+x ./pi.sh) e ora lanciatelo seguito dal numero di cifre dopo la virgola che volete calcolare.

$ pi.sh 10
3.1415926532

real    0m0.009s
user    0m0.000s
sys     0m0.004s

Tenete conto che è un’approssimazione quindi l’ultima o le ultime due cifre non sono molto affidabili. E’ comunque un test carino (visto il “time”) per fare dei piccoli benchmark. Ma soprattutto la vostra curiosità dovrebbe spingeri fino a questa manpage:

NAME
bc – An arbitrary precision calculator language

Contenti?

Tags: ,

categories linux

Creare un ramdisk

Ogni tanto si vorrebbe una partizione “virtuale” su cui provare i propri smanettamenti. Script potenzialmente dannosi da debuggare, insomma, qualsiasi cosa, e la soluzione è: creare un ramdisk di piccole dimensioni e lavorarci sopra. Un’altro motivo per volerlo creare potrebbe essere per tenerci tutto il sistema, o parte, e mettere a riposo i dischi. Insomma, potenzialmente ha mille utilizzi.

I modi di crearlo sono due, uno è scrivere/usare uno dei device /dev/ram[0-15] (voi potreste averne di più, o di meno) che però hanno una dimensione prefissata, stabilita nel kernel (e modificabile con un parametro all’avvio, googlate). L’altro modo è più pregiato, e si tratta di

mount -t tmpfs none /var/ramdisk -o size=32m

Ovviamente invece di 32m userete la dimensione che vi interessa, e al posto di /var/ramdisk, il mountpoint che volete. Siccome mi sento generoso vi faccio dono anche dell’incipit di un’altra manpage che è in topic

losetup – set up and control loop devices

Buon lavoro.

Telegramma.

Immaginate di essere alla fiera dell’elettronica e di vedere un fantastico tasto telegrafico cecoslovacco in una bancherella di surplus militare, cosa fate? Io lo compro.

Telegrafia, io ti amo poi ti odio poi ti stimo.

Telegrafia, io ti amo poi ti odio poi ti stimo.

E una volta a casa? Si prende una vecchia tastiera, si cannibalizza il controller (USB) si collega il tasto morse ai capi dov’era collegato l’invio (o qualsiasi altro tasto esclusa la ‘q’), si infila il controller nella nostra linux box, si scarica morse-x e si inizia a tasteggiare. Io ho cablato l’invio così posso usarlo anche per l’im, ovviamente solo per inviare il messaggio. Chicca finale, una delle prime volte che provavo a digitare il mio nominativo (seguito da un punto) in morse.

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Yeah!

Esperimenti con Netcat

La man page ($ man nc) lo definisce “TCP/IP swiss army knife”, e ha ragione. L’ho usato per fare di tutto. Trasferire file, controllare le impostazioni del browser, e anche per puro e semplice divertimento. In questo articolo vediamo come usarlo per giocare con i browser e i server web, anzi, vediamo come usarlo in un modo assolutamente poco utile. Ma per imparare va bene così.

Prima cosa, vediamo come intercettare la richiesta che un nokia N78 manda ad un server web quando richiede la homepage, per farlo apriamo un terminale e diamo il comando:

$ nc -l -p 8080

Dove nc è appunto netcat, -l dice di stare in ascolto, precisamente sulla porta 8080 (-p 8080), fatto questo apriamo il browser sul telefono, connettiamoci alla Wifi domestica, e digitiamo http://ip_del_pc:8080 come destinazione, nel mio caso l’ip è 192.168.1.10

Browser dell'N78

Browser dell'N78

Confermiamo, e poco dopo il terminale ci darà in output la richiesta inviata dal telefono, ecco come si presenta il terminale.

$ nc -l -p 8080
GET / HTTP/1.1
Host: 192.168.1.10:8080
Accept: text/html,text/css,multipart/mixed,application/java-archive, application/java, application/x-java-archive, text/vnd.sun.j2me.app-descriptor, application/vnd.oma.drm.message, application/vnd.oma.drm.content, application/vnd.oma.dd+xml, application/vnd.oma.drm.rights+xml, application/vnd.oma.drm.rights+wbxml, application/x-nokia-widget, */*
Accept-Charset: iso-8859-1, utf-8; q=0.7, *; q=0.7
Accept-Encoding: gzip, deflate, x-gzip, identity; q=0.9
Accept-Language: it;q=1.0,en;q=0.5,fr;q=0.5,de;q=0.5,es;q=0.5,pt;q=0.5
User-Agent: Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaN78-1/20.149; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
X-Nokia-MusicShop-Version: 09.0820.9
X-Nokia-MusicShop-Bearer: WLAN
x-wap-profile: “http://nds1.nds.nokia.com/uaprof/NN78-1r100.xml”

Con CTRL+C chiudiamo netcat, e vediamo cosa fare. Innanzitutto noto con piacere i richiami a KHTML e WebKit, roba molto seria. Vedo che nell’User-Agent si può vedere addirittura quale versione del firmware sto utilizzando (20.149) e poi ci sono riferimenti al Nokia MusicShop, vabbè. Prendiamo questa richiesta, da GET fino in fondo e salviamola in un file, facciamo attenzione a come finisce il file, dopo xml” devono esserci SOLO due “a capo”, ovvero premete invio due volte. Prima di salvarlo modificate la linea Host, cambiate :8080 in :80, o con la porta con cui è configurato il vostro apache (default :80), io l’ho salvato come ~/N78.get . Ora lanciamo Apache, sulla mia linux box si fa con (da root)

# apachectl start

Sulla vostra potrebbe essere diverso (ad esempio /etc/rc.d/httpd start) documentatevi. Ora che abbiamo un webserver in esecuzione, procuriamoci una risposta valida alla richiesta che ci siamo salvati.

$ nc 192.168.1.10 80 < ~/N78.get
HTTP/1.1 200 OK
Date: Sun, 19 Apr 2009 11:24:13 GMT
Server: Apache/2.2.10 (Unix) DAV/2
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: “404df-2c-3e9564c23b600″
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

Ovviamente in questo caso il server è in esecuzione sulla macchina all’ip 192.168.1.10 porta 80 (notare che per la connessione in uscita non si usa -p, ma si scrive solo la porta separata ocn uno spazio dall’ip), se non volete avviare apache, o non l’avete installato, cambiate Host in N78.get con, ad esempio www.un_sito_a_vostra_scelta.com e lanciate

$ nc www.un_sito_a_vostra_scelta.com 80 < ~/N78.get > ~/N78.page

Notare che ho aggiunto un piccolo dettaglio, la redirezione dell’output nel file ~/N78.page, per comodità. Sappiate che ‘nc’ resterà in esecuzione finchè il server non deciderà di interrompere la connessione, se volete interrompere prima, usate CTRL+C. Bene, ora abbiamo una risposta HTTP completa e valida da poter rimandare indietro al telefono.

$ nc -l -p 8080 < ~/N78.page

Quando riceve una connessione netcat invia i contenuti del file ~/N78.page , ora puntiamo il telefono di nuovo all’indirizzo di prima e vediamo se funziona.

Pagina di benvenuto di Apache 2

L'esperimento funziona!

Bene, fine dell’esperimento. Un ultima cosa, vi lascio i comandi, che dovreste aver già capito come funzionano, per trasferire un file. Sul pc ricevente (che supponiamo abbia ip 10.0.0.1)

$ nc -l -p 8080 > ~/file.ricevuto

Sul pc mittente (il cui ip non ci interessa)

$ nc 10.0.0.1 8080 -q0 < ~/file.da.inviare

Il parametro -q0 dice di interrompere subito la connessione dopo aver ricevuto un EOF (End of file). In questo caso è obbligatorio a fine trasmissione un controllo con ‘md5sum’ per accertare che i due file siano uguali.

Tags: ,

categories linux

Debuggare una connessione, con tcpdump

Ogni tanto capita di essere curiosi, quando un sito nasconde da dove prende le proprie immagini, i media inseriti, e varie altre cose. Siccome il browser le visualizza, vuol dire che qualche server gliele invia, molto probabilmente l’immagine che cercate di salvare è solo sotto ad un immagine trasparente, per quello con click-destro -> salva immagine continuate a salvare GIF trasparenti di 1 pixel.

Vediamo come fare per vedere TUTTE le richieste HTTP che vengono inviate dal nostro PC. Questo può essere fatto per mille motivi, io ad esempio lo faccio per vedere quante GET servono per servire le pagine del mio sito. Ok, sono proprio un nerd. Il comando che uso io è semplice, e “raw” come piace a me. Il che vuol dire che è inelegante, brutto, ma funziona quel tanto che mi basta per usarlo.

tcpdump src port 80 or dst port 80 -s 0 -w – | grep -ao ‘GET.*[\ ]HTTP.*\|POST.*[\ ]HTTP.*’

Tcpdump intercetta (in modalità promiscua, quindi usate lo switch -p per evitare di intercettare robaccia non vostra, io non lo uso perchè tanto nella LAN ci sono solo io) tutti i pacchetti che rispondono al criterio ” src port 80 or dst port 80″ (quindi niente HTTPS), gli altri switch dicono di stampare l’intero pacchetto allo standard output. Se non mettete il grep vedrete tutte le pagine, le immagini, i dati, che passano fra voi e un server http, molto interessante per vedere quanti dati sulla vostra piattaforma invia il vostro browser.

In questo caso il grep (switch -o per stampare solo la parte di stringa che combacia) ricerca stringhe che iniziano per GET o POST (attenzione, esistono altri metodi HTTP meno utilizzati) e finiscono per HTTP*, in pratica le comuni richieste di pagine, immagini, script, dati (ajax?).

Altri “grep” interessanti potrebbero essere “User-Agent”, “Referer” e tutto quello che riuscite a pensare.

Fidocad per Linux? Esiste.

Un tempo non esisteva, o forse non c’era una versione uguale a quella originale, oggi esiste FidoCadJ, scritto in Java, linguaggio che non amo particolarmente, ma che permette un’ottima portabilità multipiattaforma.

Screenshot di FidoCadJ su KDE 3.5

Screenshot di FidoCadJ su KDE 3.5

L’idea di fidocad, di un formato libero, diciamo anche “umano” siccome è su per giù intelligibile, mi è sempre piaciuta, per schemi non troppo complessi la dimensione del file è ottima per essere allegata su un forum, o in un newsgroup, magari per schemi grandi prevedere un zip + base64 non sarebbe male, ma non credo ce ne sia bisogno.

Shell scripting: expect.

Ok, ogni tanto pubblicherò dei micro articoli per farvi conoscere i programmi che più uso quando faccio uno shell scriptino. Non ce ne sono tanti, e quindi me li terrò per quando non avrò idee migliori, o non avrò tempo (tipo oggi) per l’articolo che vorrei, in realtà, pubblicare.

NAME
expect – programmed dialogue with interactive programs, Version 5

SYNOPSIS
expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]

INTRODUCTION
Expect is a program that “talks” to other interactive programs according to a script.  Following the script, Expect knows what can be expected from a program and what the correct  response  should  be. An interpreted language provides branching and high-level control structures to direct the dialogue. In addition, the user can take control and interact directly when desired, afterward returning  control to the script.

Questo programma è molto utile per alcuni shell script che devono, per esempio, interagire con altri programmi pensati per essere usati da un utente, o anche con alcuni server (telnet, pop, stmp, …). La sintassi è abbastanza semplice ed è descritta molto bene nella man page quindi è inutile dilungarsi nel decriverla, anche perchè diventerebbe un copy-paste del manuale. Io vi dico solo che è molto potente, e io lo usavo col vecchio router per loggarmici via telnet e controllare alcuni file salvando i dati che mi interessavano in locale.

Konqueror e Flash

A me il Flash Player su Konqueror non ha mai funzionato benissimo al 100%, e infatti ho sempre preferito usare Mozilla quando dovevo, ad esempio, vedere youtube. In realtà anche perchè alcune web application vengono pensate per il quadrittico IE/FF/Opera/Safari e quindi Konqueror viene tagliato fuori. Navigando la rete l’altro giorno ho trovato un modo, per chi usa KMplayer, di migliorare l’uso di Flash su Konqueror. Innanzitutto bisogna vedere dov’è il file ‘libflashplayer.so’, con il comando

locate libflashplayer.so

Tenete da qualche parte (copia-incolla?) questo path e date questi due comandi, sostituendo nel secondo il *vostro* percorso

kwriteconfig –file kmplayerrc –group “application/x-shockwave-flash” –key player npp
kwriteconfig –file kmplayerrc –group “application/x-shockwave-flash” –key plugin /usr/lib/flash-plugin/libflashplayer.so

Sono due righe, sebbene la seconda la vedrete probabilmente andare a capo. Ora dovete solo aprire Konqueror e andare nel seguenze menù:

Settings -> Configure Konqueror -> File Associations -> Application -> x-shockwave-flash
Tab Embeddin -> Add -> Embedded MPlayer for KDE (kmplayer_part)

Dalla prossima istanza di Konqueror che avviate dovrebbe funzionare, i filmati flash si apriranno sempre attraverso il plugin originario, ma mediati da KMplayer, che sembra funzionare bene. Secondo alcuni è necessario un logout-login in KDE, secondo altri un kbuildsycoca. Io non mi ricordo se ha funzionato subito o se è servito uno di questi paliativi.

Bloccare il PC quando sei lontano

Oggi ero in vena di smanettamenti e ho creato questo scriptino da lanciare all’avvio di KDE4 (ma in teoria anche GNOME, e altri, ma di certo non mi metterò a provarlo) per fare in modo che la sessione venga “lockata” quando siete lontani. Dovete avere il bluetooth sul PC e pure sul cellulare che tenete in tasca. Quando il cellulare non sarà più nel range del computer, partirà lo screensaver con blocco della sessione.

Innanzitutto attivate il bluetooth sul cellulare (o qualsiasi altra periferica) e rendetelo visibile a tutti, ora date il comando

$ hcitool scan
Scanning …
00:13:57:9B:DF:24       Qualsiasi

Segnatevi il MAC address, nel mio caso (è finto) “00:13:57:9B:DF:24″, questa è la periferica che controllerà la sessione. Ora potete mettere il telefono in modalità “invisibile”, ma non spegnere il bluetooth.

Nella vostra home, andata in .kde4/Autostart

cd ~/.kde4/Autostart/

create un file contenente questo script (ad esempio lock.sh) sostituendo alla linea KEY_MAC quello che vi eravate segnati pocanzi:

#!/bin/bash

ENABLED=$(kdialog –yesno “Bluetooth Key?”;echo $?)

if [ "$ENABLED" != "0" ]; then
exit 0
fi

KEY_MAC=”00:13:57:9B:DF:24″;

while [ "1" ]; do
DEVNAME=`hcitool name $KEY_MAC`;

if [ -z "$DEVNAME" ]; then
qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock
fi

sleep 60

done;

Rendete il file eseguibile, così

chmod a+x lock.sh

dal prossimo avvio di KDE4 una finestrella vi chiederà se in quella sessione volete usare questa possibilità, così potrete lavorare tranquilli anche quando dimenticherete il cellulare a casa, o quando è scarico.

Il controllo della presenza del telefono viene fatto ogni 60 secondi.

KDE4 in Slackware?

Dal changelog di questa notte, si direbbe che kde4 sia diventato il Window Manager di default della Slackware, infatti vedo un sacco di linee di questo tipo

kde/kde*-4.2.1-i486-1.tgz

il che può voler dire una sola cosa, KDE4 è finalmente ritenuto stabile da Volkerding, a sostegno di questa tesi il fatto che nel changelog compaia la cartella

extra/kde3-compat/

Sento puzza di major version, si può pensare ad una Slackware 13 nel futuro imminente, appena esce, parte il formattone.