想要於 Bash shell 連接 Socket (tcp、udp), 要如何寫?
語法:
- tcp: /dev/tcp/<hostname>/<port>
- udp: /dev/udp/<hostname>/<port>
- 註1: /dev/tcp, /dev/udp 都是不存在的檔案, 需要 Bash 透過 exec 才可執行, 若於其他程式執行, 需要確定他是跑在 Bash shell 才可以用.
- 註2: PHP 可以參考此篇: PHP shell_exec() 使用 Bash shell 執行
Bash shell 連接 Socket 範例實作
註: 下述 3, &3 這數字都是可以換的, 只要是同一個數字即可(背景執行的編號)
exec 3<>/dev/tcp/www.google.com/80 echo -e "GET / HTTP/1.1\n\n" >&3 cat <&3
關閉 Socket 語法
exec 3<&- exec 3>&-
下述摘錄自此篇: Bash Socket Programming - 此程式可以連上 irc, 並把訊息呈現出來.
#!/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 $?