NetCat: responder ao cliente com seu ip?

0

O endereço IP do CLIENTE está neste $ VAR:

VAR=$(nc -v -l 80 2>&1)

Eu posso refiná-lo ainda mais.

Como enviar esse $ VAR de volta ao cliente
sem executar outro comando netcat?

Com outras linguagens de programação ..
IP pode ser obtido antes de enviar uma resposta.
e, portanto, pode ser incluído na resposta.

Não é possível com o netcat?

    
por Joey 16.02.2017 / 08:48

2 respostas

4

Claro que é possível. Basta configurar nc como co-processo:

#!/bin/bash -x

# Greets the client with their hostname.

coproc ( nc -l -v localhost 3000 2>&1 )

{
    declare "$( sed -e 's/^Connection from \([^ ]*\).*$/client=""/' -e 'q' )"
    printf 'Hello there, user on %s\n' "$client"
} <&${COPROC[0]} >&${COPROC[1]}

kill "$COPROC_PID"

Para algo mais avançado, como lidar com solicitações 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  

Os comandos get_http_request_header ,          process_request e          send_http_reply pode ser funções do shell ou scripts separados que você escreve.

A rotina get_http_request_header obteria sua entrada padrão do cliente conectado a nc e analisaria a solicitação, possivelmente armazenando-a em um arquivo temporário ou configurando algumas variáveis globais ou, de alguma outra forma, transmitindo as informações necessárias para process_request .

process_request pode manipular a compilação do resultado da maneira que for necessária.

send_http_reply imprimiria no cliente simplesmente gravando na saída padrão.

Outra configuração possível em que as informações no lado do servidor são simplesmente passadas pelas etapas internas por meio de pipes:

#!/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  
    
por 16.02.2017 / 09:12
0

Esta pergunta já foi respondida ou o paradeiro está em display-welcome-message-upon -successful-netcat-connection

Mas, basicamente, você fará o seguinte com seu ouvinte:

(echo "$VAR"; cat) |nc -nvlp 4444

Quando o seu cliente se conecta, o ouvinte ecoa essa variável no stdout do cliente.

    
por 16.02.2017 / 09:16

Tags