導航:首頁 > 編程語言 > python判斷ip段

python判斷ip段

發布時間:2023-04-30 21:39:18

python 判斷是ipv6還是ipv4 inet

ipv4與ipv6地址如何轉換的python解決辦法

ipv4與ipv6地址如何轉換的python解決辦法。要想知道ipv4與ipv6地址轉換的問題,首先要了解它的概念。

ipv4與ipv6地址是什麼簡單的來說一下:
IPv4:是互聯網協議的第四版,同時也是第一個被廣泛使用,構成現今互聯網技術的基石的協議;
IPv6:是互聯網工程任務組設計的用於替代現行版本IPv4的下一代IP協議;
目前IP協議的版本號是IPv4,它的下一個版本就是IPv6。

ipv4與ipv6地址如何轉換的python解決辦法,源碼如下:(需要用到twisted.python.compat及struct和python socket方法)

import struct,socket
#import twisted.python.compat #導入twisted.python.compat 更方便

# ipv4數字地址
def ipv4_to_string(ipv4):
ipv4_n = socket.htonl(ipv4)
data = struct.pack('I', ipv4_n)
ipv4_string = socket.inet_ntop(socket.AF_INET, data)
return ipv4_string

def ipv4_from_string(ipv4_string):
data = socket.inet_pton(socket.AF_INET, ipv4_string)
ipv4_n = struct.unpack('I', data)
ipv4 = socket.ntohl(ipv4_n[0])
return ipv4

def ipv4_readable2int(ipv4):
return int(ipv4)

def ipv4_int2readable(ipv4):
return str(ipv4)

# ipv6用四個整數(tuple或用,分開的字元串)表示
def ipv6_to_string(ipv6):
ipv6_n = (socket.htonl(ipv6[0]),
socket.htonl(ipv6[1]),
socket.htonl(ipv6[2]),
socket.htonl(ipv6[3]))
data = struct.pack('IIII', ipv6_n[0], ipv6_n[1], ipv6_n[2], ipv6_n[3])
ipv6_string = socket.inet_ntop(socket.AF_INET6, data)

return ipv6_string

def ipv6_from_string(ipv6_string):
data = socket.inet_pton(socket.AF_INET6, ipv6_string)
ipv6_n = struct.unpack('IIII', data)
ipv6 = (socket.ntohl(ipv6_n[0]),
socket.ntohl(ipv6_n[1]),
socket.ntohl(ipv6_n[2]),
socket.ntohl(ipv6_n[3]))

return ipv6

def ipv6_tuple2readable(ipv6):
return str(ipv6[0]) + ',' + str(ipv6[1]) + ',' + str(ipv6[2]) + ',' + str(ipv6[3])

def ipv6_readable2tuple(ipv6):
return tuple(ipv6.split(','))

#win32 下實現 inet_pton 和 inet_ntop
def inet_ntop(family, ipstr):
if family== socket.AF_INET:
return socket.inet_ntoa(ipstr)
elif family== socket.AF_INET6:
v6addr = ':'.join(('%02X%02X' % (ord(i), ord(j)))
for i,j in zip(ipstr[::2], ipstr[1::2]))
return v6addr

#www.iplaypy.com

def inet_pton(family, addr):
if family== socket.AF_INET:
return socket.inet_aton(addr)

elif family== socket.AF_INET6:
if '.' in addr: # a v4 addr
v4addr = addr[addr.rindex(':')+1:]
v4addr = socket.inet_aton(v4addr)
v4addr = map(lambda x: ('%02X' % ord(x)), v4addr)
v4addr.insert(2, ':')
newaddr = addr[:addr.rindex(':')+1] + ''.join(v4addr)
return inet_pton(family, newaddr)
dbyts = [0]* 8 # 8 groups
grps = addr.split(':')

for i,v in enumerate(grps):
if v:
dbyts[i] = int(v, 16)
else:
for j, w in enumerate(grps[::-1]):
if w:
dbyts[7-j] = int(w, 16)
else:
break
break
return ''.join( (chr(i//256) + chr(i%256)) for i in dbyts)

else:
raise RuntimeError("What family?")

⑵ python判斷IP地址合法性程序題有個小問題求助!!

if count == 4:
print('yes')

else: #這里需要對應一個else
print('no')

閱讀全文

與python判斷ip段相關的資料

熱點內容
android計算屏幕高度 瀏覽:649
自己做紅包解壓球 瀏覽:470
pdf很貴嗎 瀏覽:490
如何搶購騰訊雲伺服器 瀏覽:384
電子書app源碼 瀏覽:865
程序員在上班的時候 瀏覽:403
游戲壓縮文件夾怎麼刪除 瀏覽:415
百度新聞app是什麼 瀏覽:885
自動化對初級編程的影響 瀏覽:103
單片機綜合課程設計 瀏覽:598
程序員小嚴 瀏覽:811
如何下載歡樂走app 瀏覽:436
程序員節公司請美女 瀏覽:14
三本程序員好嗎 瀏覽:21
la78040場幅壓縮 瀏覽:898
MFC經典游戲編程 瀏覽:787
在線申請小額貸款源碼 瀏覽:333
多個文件夾如何批量刪除內容 瀏覽:251
電力載波單片機 瀏覽:596
單片機串列通訊 瀏覽:520