Python Преобразование IP-адреса, закодированного в Base64, в десятичный IP-адрес - PullRequest
2 голосов
/ 25 мая 2011

Я очень новичок в программировании и Python, поэтому, пожалуйста, потерпите меня. У меня есть строка Base64, и я хочу преобразовать ее в десятичную. Строка может входить в скрипт как любое значение, например, zAvIAQ. Это значение представляет собой IP-адрес, который при преобразовании в десятичную представляет собой 204.11.200.1. Я хочу преобразовать строку Base64 в десятичную и присвоить ее переменной, чтобы я мог использовать ее в другом месте скрипта.

Я пытался использовать функцию base64.decode, но это просто очень странный вывод текста. Я пытался использовать функцию Decimal (), но это дает мне ошибку. После поисков в течение нескольких дней я не нашел способ сделать это, по крайней мере, тот, который я могу понять. Буду признателен за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

6 голосов
/ 25 мая 2011

Сначала декодируйте строку в кодировке base64, используя decode('base64'), а затем декодируйте полученный номер в квартет IP, используя socket.inet_ntoa. Как это:

>>> socket.inet_ntoa('zAvIAQ=='.decode('base64'))
'204.11.200.1'
3 голосов
/ 25 мая 2011
>>> address=[ord(c) for c in base64.b64decode('zAvIAQ==')]
>>> address
[204, 11, 200, 1]
1 голос
/ 25 мая 2011

Я обычно использую base64.b64decode().После этого вы получите:

In [18]: base64.b64decode('zAvIAQ==')
Out[18]: '\xcc\x0b\xc8\x01'

Это, вероятно, странный вывод, на который вы ссылались.Дело в том, что вы возвращаете байтовую строку, где каждый байт представляет значение от 0 до 255. Эти значения могут быть недоступны для печати, следовательно, представление \ x.

Но, как вы знаете, это сегментыадреса IPv4, вы проходите через них, преобразовывая их в десятичные числа, например, с помощью выражения генератора:

[ord(c) for c in ...]

, и вы получаете более знакомое представление 204, 11, 200, 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...