
次のコマンドを実行しようとすると:
echo -e "GET / HTTP/1.1\n\n" | /dev/tcp/74.125.225.19/80
次のエラーメッセージが表示されます:
bash: /dev/tcp/74.125.225.19/80: No such file or directory
次のコマンドは完璧に動作するので、問題は私がどのように使用しているかに関係しています/dev/tcp
:
echo -e "GET / HTTP/1.1\n\n" | nc 74.125.225.19 80
私はUbuntu 13.04を使用しているので、すべき私のシステムには存在しません。何が間違っているのでしょうか? 正しく使用するためのルールは何ですか/dev/tcp
?
答え1
それを使わなければならないリダイレクト:
Bash は、次の表に示すように、リダイレクトで使用されるいくつかのファイル名を特別に処理します。
...
/dev/tcp/ホスト/ポート
host が有効なホスト名またはインターネット アドレスであり、port が整数のポート番号またはサービス名である場合、Bash は対応する TCP ソケットを開こうとします。
それで:
printf "GET / HTTP/1.1\n\n" > /dev/tcp/74.125.225.19/80
正しい使い方です。
/dev/tcp/74.125.225.19/80
パイプで を使用したときに、bash
という名前のコマンドを実行しようとしました/dev/tcp/74.125.225.19/80
が、そのファイルが存在しないためエラーが報告されました。
リダイレクトを処理する機能はバージョン 2.04 で追加され/dev/tcp/host/port
ました。/dev/udp/host/port
bash
bash
オプションを付けてコンパイルする必要があります--enable-net-redirections
。