Bem, conforme documentado na Wikipedia e na netcat
documentação, há uma -e
opção que faz com que ele gere ( e xecute) um programa após o recebimento de uma conexão, anexando o soquete ao stdin, stdout e stderr do processo. Exemplo de uso:
nc -l -p
port_number -e
program_name
Exemplos comumente mostrar /bin/sh
ou bash
a ser utilizado como o program_name . O uso desta opção é desencorajado, pois basicamente abre um portal de acesso anônimo e sem senha na sua máquina. Obviamente, isso é atenuado pelo uso de um programa com menos energia que o shell (um que não tem a capacidade de escapar para um shell), minimizando seu uso e mantendo em segredo. No entanto, os desenvolvedores originais netcat
sentiram fortemente o suficiente para que essa opção fosse uma péssima idéia de desativá-la por padrão e a condicionaram sob a opção de compilação "GAPING_SECURITY_HOLE". Isso é mencionado brevemente neste Tutorial do NetCat e em outra netcat
documentação.
Uma pesquisa no Google me levou a discussões sobre esse problema em outros sites do Stack Exchange: estouro de pilha e falha no servidor . Vários colaboradores ofereceram a seguinte técnica para fazer a mesma coisa sem usar a -e
opção (ou seja, em uma versão netcat
com a -e
opção desativada):
No servidor:
mkfifo
pipe_name
nc -l -p
port_number <
pipe_name |
program_name >
pipe_name
No cliente:
nc
server_machine_name
port_number
Algumas notas:
- Em algumas versões de
netcat
, -l
implica -p
, então você deve dizer just -l
e então o número da porta.
- Você pode querer agrupar sua solução em um
while true
loop.