Friday, May 11, 2007

Bash tips: /dev/tcp/*

Oggi ho trovato una funzione di bash davvero interessante che mi avrebbe risolto molti problemi in passato.

Con bash è possibile accedere ad un device (che in realtà non esiste) della forma:

/dev/tcp/hostname/port


In parole povere quando viene lanciato un comando che ha come argomento la stringa sopra viene aperta una socket e collegato lo stdin e lo stdout con quest'ultima.

Dal momento che un esempio vale più di mille parole, passiamo a qualcosa di concreto:

exec 5<> /dev/tcp/www.google.com/80
printf "GET / HTTP/1.0\n\n" >&5
cat <&5


Dalla man page di bash:

/dev/tcp/host/port


If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts
to open a TCP connection to the corresponding socket.



/dev/udp/host/port


If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts
to open a UDP connection to the corresponding socket.

3 comments:

  1. Molto interessante... questa feature non la avevo mai neanche sentita!

    ReplyDelete
  2. Risultava nuova anche a me.

    Non ho ben capito se è una prerogativa di Linux o è possibile usarla anche nelle versioni di bash per Solaris.

    La prossima settimana controllo meglio.

    ReplyDelete
  3. Ho fatto qualche prova anche su Solaris. Questa feature funziona anche su Solaris ma in pratica non con tutte le versioni di Bash.

    Non ho trovato alcuna informazione a riguardo ma credo che sia una feature presente in bash 3.XX

    ReplyDelete