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 $?
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。