Bash shell 連接 Socket 寫法

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

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料