Bashネットワークリダイレクトを使用すると、単純なgetメッセージを次のようにすべてのサーバーに送信できます。
:> /dev/tcp/localhost/3306
しかし、私はパスを含むURLにリクエストを送信するより複雑な作業をしたいと思います。私は以下を試しました:
:> /dev/tcp/url/50070/webhdfs/v1/user/user_name/new_file?user.name=user_name&op=READ
投げたもの:
[1] 69
root@9ec4a825d97d:/# *bash: 50070/webhdfs/v1/user/user_name/new_file?user.name=user_name: Servname not supported for ai_socktype
bash: /dev/tcp/url/50070/webhdfs/v1/user/user_name/new_file?user.name=user_name: Invalid argument
URL(インクルード&
)が引用されている場合も同様です。
可能であれば、bash net Redirectを使用してルート付きURLにリクエストを送信するにはどうすればよいですか?
答え1
bash
(この機能が元のkshのように)で/dev/tcp/host/port
TCPソケットの作成と接続を開きます。
これに加えて、HTTP要求を送信できますが、HTTPプロトコルに手動で作成する必要があります。たとえば、次のようになります。
exec 3<> /dev/tcp/host/port # connected TCP socket on fd 3
printf >&3 '%s\r\n' 'GET /some/path?query HTTP/1.0' \
'Host: host' \
'Connection: close' \
''
cat <&3 # read the response
exec 3<&- # close the connection
またはzsh
均等に:
zmodload zsh/net/tcp
ztcp -d3 host port
printf >&3 '%s\r\n' 'GET /some/path?query HTTP/1.0' \
'Host: host' \
'Connection: close' \
''
cat <&3 # read the response
ztcp -c 3 # close the connection
これは暗号化されていないHTTPなので、比較的簡単なテキストです。 HTTPSを実行するには、TLSプロトコルにバイナリデータを作成する必要があります。これは、より良い方法(たとえば、socat
または)でTCP接続自体を作成するための特別なツールを使用しないとほとんど不可能です。openssl s_client
特別な道具を使わなくても大丈夫です。 、、、、、...などのHTTP(S)要求を実行するように設計されていますcurl
。wget
perl
LWP
elinks
w3m
lynx