python增量ipaddress

sab*_*488 9 python networking

我想用固定值增加一个ip地址.

确切地说,这正是我想要实现的,我有一个ip地址说,192.168.0.3我想增加它1会导致192.168.0.4甚至固定值,x以便它将增加我的IP地址的数字.所以,我可以像主持人一样192.168.0.3+x.

我只是想知道这个转换是否已存在任何模块.

我试过socket.inet_aton,然后socket.inet_ntoa,但我不知道如何正常工作.需要一些帮助或建议.

jfs*_*jfs 11

在Python 3中:

>>> import ipaddress
>>> ipaddress.ip_address('192.168.0.4')  # accept both IPv4 and IPv6 addresses
IPv4Address('192.168.0.4')
>>> int(_)
3232235524

>>> ipaddress.ip_address('192.168.0.4') + 256
IPv4Address('192.168.1.4')
Run Code Online (Sandbox Code Playgroud)

相反:

>>> ipaddress.ip_address(3232235524)
IPv4Address('192.168.0.4')
>>> str(_)
'192.168.0.4'

>>> ipaddress.ip_address('192.168.0.4') -1
IPv4Address('192.168.0.3')
Run Code Online (Sandbox Code Playgroud)

Python 2/3

您可以使用struct模块解压缩结果,inet_aton()例如,

import struct, socket

# x.x.x.x string -> integer
ip2int = lambda ipstr: struct.unpack('!I', socket.inet_aton(ipstr))[0]
print(ip2int("192.168.0.4"))
# -> 3232235524
Run Code Online (Sandbox Code Playgroud)

相反:

int2ip = lambda n: socket.inet_ntoa(struct.pack('!I', n))
print(int2ip(3232235525))
# -> 192.168.0.5
Run Code Online (Sandbox Code Playgroud)


Edu*_*nec 5

一个模块可以让这个任务和其他任务变得非常简单:pip install iptools.

In [1]: import iptools

In [3]: iptools.ip2long('127.0.0.1')
Out[3]: 2130706433

In [4]: p = iptools.ip2long('127.0.0.1') + 1
In [6]: iptools.long2ip(p)
Out[6]: '127.0.0.2'
Run Code Online (Sandbox Code Playgroud)


sha*_*noo 5

从python 3.4开始:

>>> import ipaddress
>>> a = ipaddress.IPv4Address('192.168.0.1')
>>> a+500
IPv4Address('192.168.1.245')
>>> a = ipaddress.IPv6Address('2001:1900:2254:206a::50:0')
>>> a+200
IPv6Address('2001:1900:2254:206a::50:c8')
>>>
Run Code Online (Sandbox Code Playgroud)