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

问题描述:

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

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

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

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

谢谢你的信息是非常有帮助的。我遇到的问题是我想用一个变量的结果提供socket.inet_ntoa,因为base64地址会有所不同。例如:socket.inet_ntoa('peerRemoteAddr'.decode('base64')。其中peerRemoteAddr是我分配的变量的结果(base64地址)。谢谢 – 2011-05-26 16:12:54

+0

那么解码那个变量,然后呢。 – 2011-05-26 17:28:24

+0

当我插入变量插入插座我收到一个不正确的填充错误 – 2011-05-26 19:03:29

>>> address=[ord(c) for c in base64.b64decode('zAvIAQ==')] 
>>> address 
[204, 11, 200, 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

+0

我打算在自己的回答中这样说,但没有时间 - 感谢您填写。 – 2011-05-25 17:10:22