在Python中使用inet_ntoa函数

时间:2011-03-07 09:05:18

标签: python

我最近开始在python中编程,我在理解inet_notainet_aton在Python中的工作方式时遇到了一些麻烦。来自php / mysql我总是将数据库中的ip地址存储为长变量。此外,mysql中的inet_ntoa方法接收一个长变量作为参数并返回IP的虚线格式,因此我假设Python版本以类似的方式工作。但是,似乎Python的inet_ntoa需要一个32位的二进制格式。因此,将IP地址存储为167772160值,如何将其转换为\x7f\x00\x00\x01方法所需的32位压缩二进制值(如inet_ntoa)?

非常感谢

3 个答案:

答案 0 :(得分:13)

在Python 3.3+中(或者对于2.6和2.7使用this backport),您只需使用ipaddress

import ipaddress
addr = str(ipaddress.ip_address(167772160))
assert addr == '10.0.0.0'

或者,您可以手动打包值

import socket,struct
packed_value = struct.pack('!I', 167772160)
addr = socket.inet_ntoa(packed_value)
assert addr == '10.0.0.0'

您可能也对inet_pton感兴趣。

答案 1 :(得分:2)

from struct import pack

n = pack("!I", 167772160)

答案 2 :(得分:0)

作为此主题的后期补充:如果您使用的是Python 3.3或更高版本,请查看ipaddress模块:它比socket等效功能更强大。