Usando a seta para cima para obter o comando anterior no netcat

2

Estou trabalhando muito com o netcat recentemente para testar um servidor, e usar a seta para cima para repetir os comandos anteriores seria extremamente útil. No entanto, agora apenas insere ^[[A . Existe alguma maneira de eu mudar esse comportamento?

    
por bendl 23.08.2017 / 16:28

1 resposta

5

Existem 2 possibilidades. A primeira é usar o rlwrap para agrupar uma biblioteca de históricos readline em torno do seu netcat programa. Outra é usar socat que tem readline integrada como uma opção.

Por exemplo, se você estivesse fazendo um telnet com o netcat, poderia simplesmente dizer

rlwrap nc -t remotehost 23

e, em seguida, cada linha inserida é mantida no arquivo ~/.nc_history e pode ser navegada com as teclas normais de linha de leitura. A execução do mesmo comando preserva o histórico existente.

Com socat , não há opção de telnet, mas para outros tipos de conexão, por exemplo,

socat readline,history=$HOME/.socat.hist TCP4:remotehost:port

Se você não tem rlwrap , você pode usar o socat para executar o seu netcat:

socat readline,history=$HOME/.socat.hist exec:'nc -t remotehost 23'

Uma terceira possibilidade, se você não tiver nenhum desses programas, mas tiver um shell bash com readline embutido, é obter o bash para ler os comandos do terminal e enviá-los para o stdin do netcat. A seguir, um exemplo bastante simplista de um script para fazer isso, usando o mesmo comando nc e salvando e restaurando o histórico no arquivo /tmp/myhistory .

#!/bin/bash
# emulate rlwrap nc -t localhost 23
HISTFILE=/tmp/myhistory
history -r              # read old history
while IFS= read -p 'netcat> ' -e    # sets REPLY, -e enables readline
do  history -s "$REPLY" # add to history
    history -w          # save to file
    echo "$REPLY"       # write to netcat
done |
nc -t remotehost 23
    
por 23.08.2017 / 18:28

Tags