# IP address manipulation functions def dottedQuadToNum(ip): "convert decimal dotted quad string to long integer" hexn = ''.join(["%02X" % long(i) for i in ip.split('.')]) return long(hexn, 16) def numToDottedQuad(n): "convert long int to dotted quad string" d = 256 * 256 * 256 q = [] while d > 0: m,n = divmod(n,d) q.append(str(m)) d = d/256 return '.'.join(q) def makeMask(n): "return a mask of n bits as a long integer" return (long(2)**n)-1 def ipToNetAndHost(ip, maskbits): "returns tuple (network, host) dotted-quad addresses given IP and mask size" n = dottedQuadToNum(ip) m = makeMask(maskbits) host = n & m net = n - host return (numToDottedQuad(net), numToDottedQuad(host))