Skip to content Skip to sidebar Skip to footer

Python Increment Ipaddress

I would like to increment an ip address by a fixed value. Precisely this is what I am trying to achieve, I have an ip address say, 192.168.0.3 and I want to increment it by 1 which

Solution 1:

In 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')

In reverse:

>>> 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')

Python 2/3

You could use struct module to unpack the result of inet_aton() e.g.,

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

In reverse:

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

Solution 2:

From python 3.4 onwards:

>>> 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')
>>>

Solution 3:

There's a module that makes this and other tasks very easy: 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'

Solution 4:

Convert the last part of your IP address into a number, add 1 to it, and call ifconfig.

I think the approach of incrementing the last bit will not scale well as we span across networks. –OP

I thought of mentioning that in my original answer, but didn't, for various reasons. These reasons are as follows:

  • I thought it is unlikely you would need to do this, and could not guess why you'd want to.
  • Even if you did need to do this, you could just parse the second-to-last number.
  • This is only valid for those bits where the netmask is 0.
  • You also have to worry about "special" reserved IP ranges, such as 192.168.etc.etc. Also hex doublets with 0 and possibly ff/255 have special meaning. There are different rules in IPv6.

Solution 5:

It might be quicker to just use simple addition and iteration, something like:

ip = [192,168,0,0]
ip_dict = {}
ip_list = []

for i in range(100):
    new_ip = ip[3]+=1
    ip_dict[i]=new_ip
    ip_list.append(new_ip)

Post a Comment for "Python Increment Ipaddress"