在Python中将IP地址转换为字节

4

假设我有一个 Python 中的 IP 地址

addr = '164.107.113.18'

我怎样将IP地址转换为4个字节?


1
你的期望结果是什么?你的IP地址中多了一个句号。 - Andy
那是我自己的语法错误。 - user3261349
2个回答

11

使用socket.inet_aton函数:

>>> import socket
>>> socket.inet_aton('164.107.113.18')
'\xa4kq\x12'
>>> socket.inet_aton('127.0.0.1')
'\x7f\x00\x00\x01'

这将返回一个字节串(在Python 3.x上为bytes对象),您可以从中获取字节。或者,您可以使用struct来获取每个字节的整数值:

>>> import socket
>>> import struct
>>> struct.unpack('BBBB', socket.inet_aton('164.107.113.18'))
(164, 107, 113, 18)

socket.inet_aton(addr) 返回一个由4个字符组成的字符串吗? - user3261349
对于 Python 2.x,str 对象只是一个字节串,因此这 4 个字符代表 4 个字节。而对于 3.x,则返回一个 bytes 对象。 - Maciej Gol

3

可以采用Maciej Gol的回答,但这里还有另一种方式:

ip = '192.168.1.1'
ip_as_bytes = bytes(map(int, ip.split('.')))

编辑: 哎呀,这只适用于Python 3.X。对于Python 2.X

ip = '192.168.1.1'
ip_as_bytes = ''.join(map(chr,map(int,ip.split('.'))))

考虑到其效率,最好使用socket模块

>>> timeit.timeit("socket.inet_aton('164.107.113.18')",setup='import socket')
0.22455310821533203
>>> timeit.timeit("''.join(map(chr,map(int,'164.107.113.18'.split('.'))))")
3.8679449558258057

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接