質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

1回答

7262閲覧

BashでTCP/UDP通信を行う の解説をお願いします

otaks

総合スコア223

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

1グッド

4クリップ

投稿2016/05/31 21:41

BashでTCP/UDP通信を行う
http://orebibou.com/2016/05/bash%E3%81%A7tcpudp%E9%80%9A%E4%BF%A1%E3%82%92%E8%A1%8C%E3%81%86/

このページでしていることを解説してください。
telnetと同じことをしているのでしょうか?

exec
&3
nc
などがよく分かりません。

mpyw👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

たぶん、一番重要なのは、3が何を意味するかです。それがわかると、見えてくると思います。

3ファイルディスクリプタの番号です。UNIX/Linuxではあらゆるプログラムにおいてファイル(標準入出力やネットワーク通信含む)の読み書きをするときはファイルディスクリプタというただの番号でやり取りしています。2>&1とかの21も同じくファイルディスクリプタの番号です。

ファイルには読み(r)と書き(w)があるため、各ファイルディスクリプタの番号に対してrかwかrwが設定されて、何かしらのデバイス(ファイル)に割り当てることができます。bashでは通常起動した直後は次のようになっています。

番号デバイスモード
0stdinr
1stdoutw
2stderrw
3(無し)-

最初は012だけで、3以降は割り当てがありません。なお、3だけでなくそれよりも大きい数字が使えます(どこまで使えるかはulimitの制限等による)。そこで、exec 3<> /dev/tcp/相手先ホスト名/ポート番号としたときにどうなるかです。

execは「指定された新しいコマンドを実行して今のプロセスと置き換える」というコマンドです。Cのsystemと同じです。ただ、今回、execにはコマンドにあたる部分はありません。この場合は、3<> /dev/tcp/相手先ホスト名/ポート番号のファイルのリダイレクト処理だけして、置き換わるという動作をします。そう、この3<>...の部分はファイルのリダイレクトです。> hoge.txt< hoge.txtと書くのと同じで、3にtcpの接続先を割り当てるという意味になります。よって、このあとは、先ほどの表が下記のように変わります。

番号デバイスモード
0stdinr
1stdoutw
2stderrw
3/dev/tcp/相手先ホスト名/ポート番号rw

こうしてTCP通信を普通のファイルや標準入出力のように扱えるようになったと言うことです。

忘れてました、どうやってアクセスするかですが、それが&3です。2>&1とかで使うのと一緒です。>&3なら3に出力、<&3なら3から入力となります。

最後に、ncですが、これはネットワーク通信をするためのコマンドのようです。上の動作は、クライアントの動作しかできませんが、ncはポートをリッスンできるため、サーバの動作を行うこともできます。man ncとしてmanページを参照すると良いと思います。

投稿2016/05/31 22:23

編集2016/06/01 09:32
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngyuki

2016/06/01 00:50

一点だけ補足させていただくと、stdin は 0 だと思います (`ll /dev/std*`)
raccy

2016/06/01 09:31 編集

> nygyukiさん ご指摘ありがとうございます。 標準入力について勘違いしていたみたいです。回答を修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問