NetCat:IPでクライアントに応答しますか?

NetCat:IPでクライアントに応答しますか?

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_headerprocess_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

クライアントが接続されると、リスナーはこの変数をクライアントの標準出力に反映します。

関連情報