Я хочу преобразовать шестнадцатеричную байтовую переменную, поступающую по сети, в IP и порт.
Например, формат:
value = (b'\xd3[\xdf\x94:\x98\xd5\xe6J\x9f\xb2\xfb\xd8\x18\xbdDsa')
# Size is random but multiples of 6 all.
type(value) # bytes
Я хочу напечатать указанное выше значение переменной следующим образом.
>>> func(value)
"211.91.223.148:15000"
"213.230.74.159:45819"
Даже если я искал, я не мог найти модуль, который меняет байты на IP и порт. Любая помощь будет оценена по достоинству.
Кроме того, вы знаете кодировку?
Любая документация, как именно ip и порт кодируются в байтах?
test.py:
import ipaddress
import struct
from itertools import islice
N = 6
def func(value):
it = iter(value)
while chunk := bytes(islice(it, N)):
ip, port = struct.unpack("!IH", chunk)
ip = ipaddress.ip_address(ip)
print(f"{ip}:{port}")
def main():
value = b"\xd3[\xdf\x94:\x98\xd5\xe6J\x9f\xb2\xfb\xd8\x18\xbdDsa"
func(value)
if __name__ == "__main__":
main()
Контрольная работа:
$ python test.py
211.91.223.148:15000
213.230.74.159:45819
216.24.189.68:29537
Знаете ли вы сейчас реальную ценность вашего примера?