Caractere de escape de terminal para entrada hexadecimal

7

No meu habitual terminal gnome eu faço um

netcat -u somewhere 1234

para começar a enviar pacotes UDP para algum lugar. Eu preciso transmitir os seguintes 5 bytes, escritos em hexadecimal: "01 00 af 0f e1". Agora, como eu digito uma seqüência de escape no meu terminal que faz com que ele envie exatamente 5 bytes para o stdin do netcat?

Atualização: Só para esclarecer. Eu sei várias maneiras de realmente inserir os bytes que eu quero para o programa. Essa não é a questão. A questão é qual sequência de pressionamentos de teclas eu digito no meu terminal, depois que o programa é iniciado, para inserir um caractere hexadecimal que não seja representado de outra forma no meu teclado. (Como 0x00, 0x01 ou 0x0f.)

Estou começando a pensar que isso simplesmente não é possível, mas ficaria um pouco surpreso se essa fosse a conclusão.

    
por Bjarke Freund-Hansen 06.08.2009 / 15:26

4 respostas

8

Você pode usar echo -e (que é o que eu acho que o richardhoskins queria dizer.) Assim:

/bin/echo -n -e "\x01\x00\xaf\x0f\xe1" | netcat -u somewhere 1234
# -n: no newline at end, -e: interpret escapes

Se a sua implementação de eco é antiga, (ou simplesmente não incrustada no GNU), a forma tradicional é usar octal:

/bin/echo -n -e "
/bin/echo -n -e "\x01\x00\xaf\x0f\xe1" | netcat -u somewhere 1234
# -n: no newline at end, -e: interpret escapes
1
/bin/echo -n -e "%pre%1%pre%0771" | netcat -u somewhere 1234
0771" | netcat -u somewhere 1234

Sim, o octal é muito antigo. Veja ibase e obase no homem por bc . Verifique se echo faz a coisa certa com od ("octal dump") "od-tx1" para hexadecimal, "od-to1" para octal.

    
por 07.08.2009 / 03:03
3

Uma abordagem simples, embora não seja exatamente o que você está procurando ...

Use um editor hexadecimal para criar um arquivo com os bytes que você deseja enviar (você menciona o gnome, assim você pode já ter o ghex, mas qualquer editor hexadecimal deve estar bem). Para seqüências hexadecimais curtas eu geralmente incluo o hex como parte do nome (por exemplo test0x0100af0fe1).

Em seguida, basta redirecionar o conteúdo para netcat , por exemplo:

mas@voco:~$ nc -o testout 127.0.1.1 80 < test0x0100af0fe1
^C
mas@voco:~$ cat testout
> 00000000 01 00 af 0e 10                                  # .....
mas@voco:~$ 

Isso tem a desvantagem de ter que preparar um arquivo separado, mas facilita a replicação e a documentação dos testes.

    
por 06.08.2009 / 20:13
1

você tem que usar o perl no terminal exemplo:

./ program perl -e' print "\x41\x60\x34\x45"'

ele enviará esse endereço hexadecimal para o programa. É usado frequentemente em buffer overrun como entrada de endereço hexa. A página não mostra tudo o que eu digitei. Procure no google por estouro de buffer. Essas páginas mostram tudo. Aqui estão faltando aspas simples na frente de um perl e segundo no final de uma entrada inteira.

    
por 04.09.2009 / 06:02
0

Anexe \ x ao início do byte. por exemplo. "\ x01 \ x00 \ xaf \ x0f \ xe1".

    
por 06.08.2009 / 16:40