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
클라이언트가 연결되면 리스너는 이 변수를 클라이언트의 표준 출력에 반영합니다.