Bem, conforme documentado na Wikipedia e na netcatdocumentação, há uma -eopçã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 -pport_number -eprogram_name
Exemplos comumente mostrar /bin/shou basha 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 netcatsentiram 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 netcatdocumentaçã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 -eopção (ou seja, em uma versão netcatcom a -eopção desativada):
No servidor:
mkfifopipe_name
nc -l -pport_number <pipe_name | program_name >pipe_name
No cliente:
nc server_machine_name port_number
Algumas notas:
- Em algumas versões de
netcat, -limplica -p, então você deve dizer just -le então o número da porta.
- Você pode querer agrupar sua solução em um
while trueloop.