Posso canalizar / redirecionar um aplicativo de console através do netcat para que possa ser usado remotamente?

10

É possível 'canalizar' uma instância de um aplicativo de console através do netcat, para que o netcat esteja ouvindo uma nova conexão e redirecione a stdine stdoutpela conexão de rede.

jammmie999
fonte
sim, mas pode ter que ser um liner, o que é bom, tubos são assim. Eu não sei se você pode dizer nc e pipe para uma instância já em execução por pid. você pode nc para um ip e canalizá-lo para um nc que está ouvindo e canalizá-lo para um nc que está ouvindo etc. e canalizá-lo para nc para um ip.
barlop
Mudei o título porque o que você menciona parece mais um redirecionamento de E / S do que o uso de um canal (que trata apenas de mover a saída de um processo para a entrada de outro).
precisa
@ Breakthrough: como isso difere dos tubos? como ele está falando sobre o redirecionamento de entrada / saída e não sobre arquivos, como isso difere da tubulação?
Barlop
O redirecionamento de E / S do @barlop ( <ou >) é significativamente diferente do piping ( |), embora às vezes você possa conseguir uma operação equivalente com uma combinação de ambos. Novamente, porém, com o redirecionamento de E / S, você pode alterar o local dos dois fluxos; a tubulação apenas redireciona a saída padrão de um processo para a entrada padrão de outro.
precisa
@ Breakthrough ver o que eu te pedi embora. > e <é obviamente diferente da tubulação porque <e> usam arquivos. Mas ele não está falando de arquivos. Perguntei-lhe "como é que isso [redirecionamento IO] diferem dos tubos como ele está falando IO redirecionamento e não falando de arquivos, então como é que diferem de tubulação?"
barlop

Respostas:

16

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.
Scott
fonte