Python将Base64中编码的IP地址转换为十进制IP地址

时间:2011-05-25 16:24:34

标签: python decimal base64

我是编程和Python的新手,所以请耐心等待。我有一个字符串是Base64,我想将其转换为十进制。字符串可以作为任何值进入脚本,例如zAvIAQ。此值表示转换为十进制时的IP地址204.11.200.1。我想要做的是将Base64字符串转换为十进制并将其分配给一个变量,以便我可以在脚本的其他地方使用它。

我曾尝试使用base64.decode函数,但这只是给我一个非常奇怪的文本输出。我试过使用Decimal()函数,但这给了我一个错误。经过几天的搜索,我找不到办法,至少没有一个我能理解的方法。您可以提供任何帮助。

3 个答案:

答案 0 :(得分:6)

首先使用decode('base64')解码base64编码的字符串,然后使用socket.inet_ntoa将生成的数字解码为IP四重奏。像这样:

>>> socket.inet_ntoa('zAvIAQ=='.decode('base64'))
'204.11.200.1'

答案 1 :(得分:3)

>>> address=[ord(c) for c in base64.b64decode('zAvIAQ==')]
>>> address
[204, 11, 200, 1]

答案 2 :(得分:1)

我通常使用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。