次のコマンドを実行しようとすると、
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を使用しているため、機能shouldをシステムに追加する必要があります。何が悪いのですか? /dev/tcp
を適切に使用するためのルールは何ですか?
redirections で使用する必要があります:
Bashは、次の表に示すように、いくつかのファイル名をリダイレクトで使用するときに特別に処理します。
...
/ dev/tcp/Host/port
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
という名前のコマンドを実行しようとし、そのファイルが存在しないためエラーを報告しました。
リダイレクトで/dev/tcp/Host/port
および/dev/udp/Host/port
を処理する機能は、バージョン2.04のbash
に追加されました。
--enable-net-redirections
オプションを使用してbash
をコンパイルする必要があります。