Aqui está uma solução parcial, fiquei frustrado ao fazer a entrada do script netcat acontecer.
- Como pesquiso especificamente a sequência hexadecimal?
Aqui está uma maneira simples:
$ nc -d cs2107.spro.ink 9000 > file
Welcome to the Proof of Work Challenge.
Rules: I will provide hex encoded byte strings to you.
Your task is to decode it and calculate the md5 hash.
Return the md5 hash in hex encoded format back to me.
You will need to do this 500 times.
Ready? Go!
eeb105fb2f5e24216bd2
MD5:
Aqui eu originalmente tinha um comando sed
que selecionou a linha específica # 7, mas depois de resolver a primeira cadeia de bytes codificados hexadecimais, a próxima saída é fornecida imediatamente. Então, mudei isso para uma expressão regular que corresponde a caracteres hexadecimais:
$ cat file.txt | grep '^[a-f0-9]'
eeb105fb2f5e24216bd2
- Como decodifico a string hexadecimal?
$ cat file.txt | grep '^[a-f0-9]' | xxd -r -p | md5
92b34e4055a92b9ec32b15f89cc22389
Então, verifiquei que isso funciona manualmente:
Welcome to the Proof of Work Challenge.
Rules: I will provide hex encoded byte strings to you.
Your task is to decode it and calculate the md5 hash.
Return the md5 hash in hex encoded format back to me.
You will need to do this 500 times.
Ready? Go!
eeb105fb2f5e24216bd2
MD5: 92b34e4055a92b9ec32b15f89cc22389
Correct.
9ecbc2b8d14ae903dce5
- E finalmente como devolver o resultado ao terminal?
Esta última pergunta é realmente o maior problema. Eu não fui capaz de fazê-lo funcionar. Eu escrevi vários scripts e nenhum deles resolveu o problema. O problema como Gilles mencionado, é que você precisa manter a conexão aberta o tempo suficiente para ler os dados, e alimentar de volta para o programa ainda aberto. Isso interfere na abordagem normal de usar os comandos canalizados no shell, como os que eu postei acima.
Este é o pseudocódigo que não consigo implementar corretamente em um script de shell:
- para loop, iterar 500 vezes. OBRAS.
- mantenha a conexão aberta para: cs2107.spro.ink 9000. EM PROGRESSO.
- bits de leitura enviados pelo servidor. OBRAS.
- decodifica string hexadecimal. OBRAS.
- calcula o hash md5. OBRAS.
- envia entrada para abrir a conexão. EM PROGRESSO.
- repita os passos 3-6.
- final.
Aqui estão alguns recursos que eu tentei
Eu ficaria curioso em saber a solução se você descobrir. Talvez eu tente novamente mais tarde.