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