Выбор формата в pack () с использованием модуля структуры в python

Я пытаюсь преобразовать код PHP в Python.

Все значения отправляются в сетевом порядке байтов (с прямым порядком байтов).

По сути, ЗАПРОС в спецификации протокола -

enter image description here

, а ответ -

enter image description here

. Соответствующий код PHP ( соответствующий DOC ):

$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);

Я пытаюсь найти соответствующий код ( для документа ) в 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))

В ответ я должен получить тот же идентификатор транзакции, который я отправил в запросе, которого я не получаю.Итак, я предполагаю, что я упаковываю не в правильном формате.

Кроме того, документация Python не так ясна, как документация PHP. Протокол определяет использование формата Big-Endian, а в документации PHP четко указано, какие именно форматы для Big-Endian.

К сожалению, я не мог понять, какой формат использовать в Python. Пожалуйста, помогите мне выбрать формат коррента.

РЕДАКТИРОВАТЬ: Не получаю никаких ответов, поэтому я хотел бы сказать больше.

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])

Согласно спецификации протокола, мне должен быть возвращен такой же INTEGER.

5
задан Abhijeet Rastogi 13 October 2011 в 18:50
поделиться