Estoy tratando de encontrar el hash de información codificada en la URL correcta para enviar al rastreador y obtener la lista de pares.Analizando un archivo torrent - información hash. (Erlang)
Para probar, intenté analizar el torrente en this url.
vez abierto el archivo, cortar manualmente el diccionario información pieza y SHA1 hash su valor consigo este valor binario:
< < 84,124,15,255,155,171,156,168,91,46,204,24,249,116,110, 139,202,167,163,54 >>
La cadena ASCII recuperada de este último valor binario es 788f590f28a799cc1009a9b780b649fd6f0a2e91, y es el mismo valor mencionado en el sitio.
Asumamos que todo está correcto hasta ahora (¿no?).
Después de codificar el valor binario utilizando la función de codificación URL a continuación consigo T% 7c% 0f% ff% 9b% ab% 9c% a8% 5b.% Cc% 18% f9tn% 8b% ca% a7% a36, que ni siquiera está cerca del valor de urlencoded correcto que debo enviar al rastreador. (Recibo un mensaje de error no encontrado cuando envío esto al rastreador, además, no coincide con el valor que veo utilizando wireshark que es x% 8fY% 0f% 28% a7% 99% cc% 10% 09% a9 % b7% 80% b6I% fdo% 0a.% 91).
La función de codificación URL que estoy usando:
encode(<<Bin:20/binary-unit:8>>)->
%io:format("~p~n", [binary_to_list(Bin)]),
encode(binary_to_list(Bin));
encode(List) -> do_encode(List).
do_encode([])-> [];
do_encode([H|T]) when H>=$a, H=<$z ->
[H| encode(T)];
do_encode([H|T]) when H>=$A, H=<$Z ->
[H| encode(T)];
do_encode([H|T]) when H>=$0, H=<$9 ->
[H| encode(T)];
do_encode([H|T]) when H==$- ->
[H| encode(T)];
do_encode([H|T]) when H==$. ->
[H|do_encode(T)];
do_encode([H|T]) when H==$* ->
[H|do_encode(T)];
do_encode([H|T]) ->
to_hex(H) ++ encode(T).
hex(N) when N < 10 ->
$0+N;
hex(N) when N >= 10, N < 16 ->
$a+(N-10).
to_hex(N) when N < 256 ->
[$%, hex(N div 16), hex(N rem 16)].
es la función por encima de mal? Soy una especie de novato en lo que respecta al manejo de datos brutos. así que ayuda/ideas son muy apreciadas! ¡Gracias!
He intentado usar escape_uri() que dio un resultado diferente al que "uTorrent" envía al rastreador, así que traté de implementar el mío para ver si podía obtener el valor correcto. si esta es la codificación correcta del binario dado, ¿cómo es que el valor que se envía al rastreador es diferente? – Smokie