Estoy tratando de convertir un código PHP a python.Elegir el formato en el paquete() usando el módulo struct en python
Todos los valores se envían en orden de bytes de red (big endian).
Básicamente, la petición en la especificación de protocolo es
y la respuesta es
Correspondiente Código PHP (corresponding DOC) es:
$transaction_id = mt_rand(0,65535);
$current_connid = "\x00\x00\x04\x17\x27\x10\x19\x80";
$fp = fsockopen($tracker, $port, $errno, $errstr);
$packet = $current_connid . pack("N", 0) . pack("N", $transaction_id);
fwrite($fp,$packet);
estoy tratando de encontrar el código correspondiente (for doc) en Python:
transaction_id = random.randrange(1,65535)
packet = "\x00\x00\x04\x17\x27\x10\x19\x80"
packet = packet + struct.pack("i", 0) + struct.pack("i", transaction_id)
clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
clisocket.sendto(packet, ("tracker.istole.it", 80))
En la respuesta, que debería obtener el mismo transaction_id envié en la solicitud que no estoy recibiendo. Entonces, mi suposición es que no estoy empacando usando el formato correcto.
Además, la documentación de Python no es tan clara como la de PHP. El protocolo especifica usar el formato Big Endian & El doc de PHP indica claramente cuáles son los de Big-Endian.
Lamentablemente, no pude comprender qué formato usar en python. Por favor, ayúdenme a elegir el formato corrent.
EDITAR: No recibo ninguna respuesta, por lo que diría más.
import struct
import socket
import random
clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
packet = "\x00\x00\x04\x17\x27\x10\x19\x80"
transaction_id = random.randrange(1,65535)
print transaction_id
packet = packet+struct.pack(">i", 0)
packet = packet+struct.pack(">i", transaction_id)
clisocket.sendto(packet, ("tracker.istole.it", 80))
res = clisocket.recv(16)
print struct.unpack(">i", res[12:16])
Según la especificación del protocolo, debería devolverse el mismo INTEGER.
documento completo para el protocolo está en http://bittorrent.org/beps/bep_0015.html#udp-tracker-protocol –
Un ejemplo que muestra sobre cómo recuperar los datos utilizando el protocolo está en http://linux-junky.blogspot.com/2011/10/get-seeds-peers-completed-info-from.html –