CLIENTのIPアドレスはこの$ VARにあります。
VAR=$(nc -v -l 80 2>&1)
もっとトリミングできます。
他のnetcatコマンドを実行せずにこの$ VARをクライアントに送り返すにはどうすればよいですか
?
他のプログラミング言語を使用すると、..
応答を送信する前にIPを取得できます。
したがって、応答に含めることができます。
netcatでは不可能ですか?
答え1
もちろん可能です。ちょうどnc
共同プロセスとして設定してください。
#!/bin/bash -x
# Greets the client with their hostname.
coproc ( nc -l -v localhost 3000 2>&1 )
{
declare "$( sed -e 's/^Connection from \([^ ]*\).*$/client="\1"/' -e 'q' )"
printf 'Hello there, user on %s\n' "$client"
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
HTTPリクエスト処理などの高度な機能の場合:
#!/bin/bash
# Handles one request, then kills nc and restarts
while true; do
coproc ( nc -l localhost 3000 2>&1 )
{
get_http_request_header
process_request
send_http_reply
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
done
get_http_request_header
、
process_request
およびコマンドはsend_http_reply
シェル関数でも、ユーザーが作成する別のスクリプトでもかまいません。
このget_http_request_header
ルーチンは、接続されたクライアントの標準入力を取得し、要求を解析し、nc
それを一時ファイルに保存したり、いくつかのグローバル変数を設定したり、必要な情報をprocess_request
。
process_request
コンパイル結果は必要な方法で処理できます。
send_http_reply
クライアントに印刷するには、標準出力に書き込むだけです。
別の可能な設定は、サーバー側の情報が内部ステップに沿ってパイプされることです。
#!/bin/bash
# Handles one request, then kills nc and restarts
while true; do
coproc ( nc -l localhost 3000 2>&1 )
{
get_http_request_header |
process_request |
send_http_reply
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
done
答え2
この質問はすでに回答されているか、次のステップにあります。Netcat は、接続が成功するとウェルカムメッセージを表示します。
しかし、本質的にリスナーと一緒に次のことを行います。
(echo "$VAR"; cat) |nc -nvlp 4444
クライアントが接続されると、リスナーはこの変数をクライアントの標準出力に反映します。