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

클라이언트가 연결되면 리스너는 이 변수를 클라이언트의 표준 출력에 반영합니다.

관련 정보