gpt4 book ai didi

bittorrent - 解析来自 Tracker 服务器的 Annouce 响应中的 Peers IP 地址(bitTorrent)

转载 作者:行者123 更新时间:2023-12-04 02:19:45 31 4
gpt4 key购买 nike

所以下面的请求:

torrent.ubuntu.com:6969/announce?info_hash=%02%21%CA%F9j%A3%CB%94%F0%F5%8DE%8Ex%B0%FC4J%D8%BF&peer_id=ABCDEFGHIJKLMNOPQRST&port=6881&uploaded=0&downloaded=0&left=3353370624&compact=0

导致提供一个 Announce 文件。对该文件进行编码后,您将获得:

{'peers': '\xb9\x15\xd9\x08\xd8\x05[\xbd_\x15\x1b!', 'interval': 1800, 'complete': 5, 'incomplete': 1}

我很纠结

'\xb9\x15\xd9\x08\xd8\x05[\xbd_\x15\x1b!'

使用 compact=1 你会得到:

'\xbd_\x15\x1b\n\xb9\x15\xd9\x08\xd8\x05'

如果这是网络顺序(小端)?

来自 here我阅读:

Note if you get the peers in the binary model that the last two bytes together encode the port number (i.e. ‘\x1a\xe1′ = 26 * 256 + 225 = 6881).

所以可能 '\xd8\x05' 构成端口:216 * 256 + 5 = 55301 也可能不是。

有人可以向我解释如何将这些十六进制数字解析为 ip:port 地址吗?

在谷歌上搜索了一段时间,没有找到太多,所以我们将不胜感激。

最佳答案

所以根据 specification

peers: (binary model) Instead of using the dictionary model described above, the peers value may be a string consisting of multiples of 6 bytes. First 4 bytes are the IP address and last 2 bytes are the port number. All in network (big endian) notation.

此时紧凑标志设置为 1(真),我只关心这个 atm,因为它看起来很标准。

解析 bencoded announce 文件后,提取 key “peers”将为您提供 6 字节字符串的倍数。

这个字符串是二进制数据并且是大端的,所以要解析我们可以(在 Python 中)的第一个地址:

decoded = bdecode(announce) # decode the bencoded announce
binary_ip = decoded['peers']
print len(binary_ip) # this will be a multiple of 6 (ie, 12 = 2 ip:port)
offset = 0
ip1 = struct.unpack_from("!i", binary_ip, offset)[0] # ! = network order(big endian); i = int
first_ip = socket.inet_ntoa(struct.pack("!i", ip1)
offset +=4 # save where the first ip ends and the port begins
port1 = struct.unpack_from("!H", binary_ip, offset)[0] # H = unsigned short
offset += 2

显然,如果有更多对等 ip 需要读取,您可以遍历它。

关于bittorrent - 解析来自 Tracker 服务器的 Annouce 响应中的 Peers IP 地址(bitTorrent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507487/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com