Форум сайта python.su
0
Здравствуйте. Совершенно вылетело из головы, как называется форма записи IP адреса в виде числа. А поскольку названия этой формы записи я не помню, путь в гугл для меня закрыт. По этой же причине заголовок темы такой…странный. Прошу помощи.
О чём речь:
В mysql IP адреса пишутся с помощью функции inet_aton(), например IP 10.170.112.12 превращается в 178941964. По странным запросам в гугле (вроде “Inet_aton python”) мне удалось отыскать вот такой способ:
struct.unpack('!L', socket.inet_aton('10.170.112.12'))[0]
Отредактировано UsCr (Май 14, 2012 11:33:21)
Офлайн
52
Это нормальный вариант.
Можно так:
>>> def ip_to_number(ip): ... ip = map(int, ip.split('.'))[::-1] ... ip_num = 0 ... while ip: ... ip_num = ( ip_num << 8 ) + ip.pop() ... ... return ip_num ... >>> ip_to_number('10.170.112.12') 178941964 >>> >>> def number_to_ip(number): ... ip = '' ... for _ in xrange(4): ... number, r = divmod(number, 256) ... ip = '.'.join([str(r), ip]) ... ... return ip[:-1] ... >>> number_to_ip(178941964) '10.170.112.12'
def IntToDottedIP( intip ): octet = '' for exp in [3,2,1,0]: octet = octet + str(intip / ( 256 ** exp )) + "." intip = intip % ( 256 ** exp ) return(octet.rstrip('.')) def DottedIPToInt( dotted_ip ): exp = 3 intip = 0 for quad in dotted_ip.split('.'): intip = intip + (int(quad) * (256 ** exp)) exp = exp - 1 return(intip)
Отредактировано fata1ex (Май 14, 2012 12:42:10)
Офлайн
0
UsCrАльтернативный способ записи IP-адресов
Здравствуйте. Совершенно вылетело из головы, как называется форма записи IP адреса в виде числа.
Офлайн
-2
UsCrЭто самый нормальный способ. По крайней мере из тех, что я знаю.
но это ведь ад, не?
Отредактировано asilyator (Май 21, 2012 18:14:30)
Офлайн
857
def f(ip): s = '{:02x}{:02x}{:02x}{:02x}'.format(*map(int, ip.split('.'))) return int(s, 16) def g(n): lst = [str((n >> (i * 8)) % 0x100) for i in range(4)] return '.'.join(lst[::-1])
>>> f('10.170.112.12') 178941964 >>> g(178941964) '10.170.112.12' >>>
Отредактировано py.user.next (Май 22, 2012 03:47:08)
Офлайн