想要於 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 $?