From: http://hacktux.com/bash/socket
You can connect to a socket using Bash by using exec and redirecting to and from the pseudo-path /dev/tcp/<hostname>/<port> or /dev/udp/<hostname>/<port>. For instance, to connect to your localhost SSH port using TCP:
exec 3<>/dev/tcp/localhost/22
Then, use cat and echo to read or write to the socket. Here is an example read:
cat <&3 SSH-2.0-OpenSSH_5.6
Notice that there is no such file as /dev/tcp or /dev/udp. Bash interprets the pseudo-path.
ls -l /dev/tcp ls: cannot access /dev/tcp: No such file or directory ls -l /dev/udp ls: cannot access /dev/udp: No such file or directory
As another example, maybe you want to download a webpage:
exec 3<>/dev/tcp/www.fedora.org/80 echo -e "GET /\n" >&3 cat <&3
Finally, let’s say you wanted to connect to an IRC server. Here is an example:
#!/bin/bash ########################################################## # Config NICK="mynick" SERVER="irc.freenode.net" PORT=6667 CHANNEL="#bashirc" ########################################################## # Main exec 3<>/dev/tcp/${SERVER}/${PORT} echo "NICK ${NICK}" >&3 echo "USER ${NICK} 8 * : ${NICK}" >&3 echo "JOIN ${CHANNEL}" >&3 cat <&3 exit $?
Sources
tldp.org: Advanced Bash-Scripting Guide – Chapter 29
thesmithfam.org: Bash socket programming with /dev/tcp
1,599 total views