Conversion from IP string to integer, and backward in Python

ip-address, networking, python

Solution

#!/usr/bin/env python
import socket
import struct


def ip2int(addr):
    return struct.unpack("!I", socket.inet_aton(addr))[0]


def int2ip(addr):
    return socket.inet_ntoa(struct.pack("!I", addr))


print(int2ip(0xc0a80164)) # 192.168.1.100
print(ip2int('10.0.0.1')) # 167772161

Problem

i have a little problem with my script, where i need to convert ip in form 'xxx.xxx.xxx.xxx' to integer representation and go back from this form. ``` def iptoint(ip): return int(socket.inet_aton(ip).encode('hex'),16) def inttoip(ip): return socket.inet_ntoa(hex(ip)[2:].decode('hex')) In [65]: inttoip(iptoint('192.168.1.1')) Out[65]: '192.168.1.1' In [66]: inttoip(iptoint('4.1.75.131')) --------------------------------------------------------------------------- error Traceback (most recent call last) /home/thc/<ipython console> in <module>() /home/thc/<ipython console> in inttoip(ip) error: packed IP wrong length for inet_ntoa` ``` Anybody knows how to fix that?

Original source

Related problems