Я хочу преобразовать байты в IP и PORT

Я хочу преобразовать шестнадцатеричную байтовую переменную, поступающую по сети, в 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 и порт. Любая помощь будет оценена по достоинству.

Знаете ли вы сейчас реальную ценность вашего примера?

aaossa 16.03.2022 15:56

Кроме того, вы знаете кодировку?

aaossa 16.03.2022 15:59

Любая документация, как именно ip и порт кодируются в байтах?

Michael Butscher 16.03.2022 15:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме