2012-05-11 35 views
5

Tôi đang sử dụng inet_aton để chuyển đổi IPv4 IP (216.12.207.142) thành một chuỗi 3624718222. Tôi sử dụng đoạn mã sau cho rằng:chức năng inet_aton tương tự cho IPv6

ip_dec = unpack('>L', inet_aton(ip))[0] 

Bây giờ tôi cần phải chuyển đổi IPv6 ip 2001: 23 :: 207: 142 đến một chuỗi tương tự. Nó cho tôi lỗi vì nó không phải là địa chỉ IPv4. Tôi có thể làm cái này như thế nào?

Trả lời

6

Đây là mã tôi đã sử dụng cho mục đích trước đây. Lưu ý rằng nó trả về một số nguyên 128 bit chứ không phải là một chuỗi (một số nguyên là hữu ích hơn nói chung)

from socket import inet_pton, AF_INET6 
from struct import unpack 

def ip6_to_integer(ip6): 
    ip6 = inet_pton(AF_INET6, ip6) 
    a, b = unpack(">QQ", ip6) 
    return (a << 64) | b 

Và thử nghiệm nó

>>> ip6_to_integer("2001:23::207:142") 
42540490934961530759802172199372521794L 

Hoặc như là một chuỗi nếu bạn phải!

>>> str(ip6_to_integer("2001:23::207:142")) 
'42540490934961530759802172199372521794' 
Các vấn đề liên quan