Python将Base64中编码的IP地址转换为十进制IP地址
我对编程和Python非常陌生,所以请耐心听我说。我有一个Base64的字符串,我想把它转换成十进制。字符串可以作为任何值进入脚本,例如zAvIAQ。该值表示转换为十进制时为204.11.200.1的IP地址。我要做的是将Base64字符串转换为decimal并将其分配给变量,以便在脚本中的其他地方使用它Python将Base64中编码的IP地址转换为十进制IP地址,python,decimal,base64,Python,Decimal,Base64,我对编程和Python非常陌生,所以请耐心听我说。我有一个Base64的字符串,我想把它转换成十进制。字符串可以作为任何值进入脚本,例如zAvIAQ。该值表示转换为十进制时为204.11.200.1的IP地址。我要做的是将Base64字符串转换为decimal并将其分配给变量,以便在脚本中的其他地方使用它 我曾尝试使用base64.decode函数,但这只会给我一个非常奇怪的文本输出。我试图使用Decimal()函数,但这给了我一个错误。在搜索了几天之后,我还没有找到一种方法来做这件事,至少我不
我曾尝试使用base64.decode函数,但这只会给我一个非常奇怪的文本输出。我试图使用Decimal()函数,但这给了我一个错误。在搜索了几天之后,我还没有找到一种方法来做这件事,至少我不明白。如果您能提供任何帮助,我们将不胜感激。首先使用
decode('base64')
解码base64编码字符串,然后使用socket.inet\u ntoa
将得到的数字解码为IP四重奏。像这样:
>>> socket.inet_ntoa('zAvIAQ=='.decode('base64'))
'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、11200、1。我本来打算在自己的回答中这样说,但没有时间-谢谢您的填写。谢谢您提供的信息,这非常有帮助。我遇到的问题是,我想向socket.inet_ntoa提供一个变量的结果,因为base64地址会发生变化。示例:socket.inet_ntoa('peerRemoteAddr')。decode('base64')。其中peerRemoteAddr是一个结果(base64地址)谢谢当我将变量插入套接字时,我收到一个不正确的填充错误,这是因为您决定在发送之前将值切碎。等号很重要。peerRemoteAddr=re.findall(“BASE64:(*?”),Y)-这就是我如何让findall从单词base64后面的字符串中提取b64地址的方法。等号很重要。
[ord(c) for c in ...]