91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在python項目中如何將 IP地址的格式轉為整數

發布時間:2020-11-20 14:43:25 來源:億速云 閱讀:331 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關在python項目中如何將 IP地址的格式轉為整數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

轉換的原理

一個 IPv4 類的地址共分為四個部分 0.0.0.0 然而每一個部分的取值范圍都在 0 ~ 255;也就是說每一個部分都可以用一個字節來保存,總共寫個字節就夠了,4 個字節不就是 int 嗎?

第一步 把 IP 地址的各個部分轉換為一個字節,并拼接它們,那么會得到一個 4 字節的串。

import struct

def aton(ip_address: str) -> bytes:
  result = []
  for i in ip_address.split('.'):
    result.append(struct.pack("!B", int(i)))
  return b''.join(result)

第二步 把字節串轉換成整數。

In [2]: aton("127.0.0.1")                                                   
Out[2]: b'\x7f\x00\x00\x01'

In [3]: int.from_bytes(b'\x7f\x00\x00\x01','big')                                       
Out[3]: 2130706433

這樣我們就把 IPv4 地址轉換成了一個整數,完整的代碼如下。

import struct


def aton(ip_address: str) -> bytes:
  result = []
  for i in ip_address.split('.'):
    result.append(struct.pack("!B", int(i)))
  return b''.join(result)


if __name__ == "__main__":
  bts = aton("127.0.0.1")
  print(int.from_bytes(bts, 'big'))

運行效果如下。

python3 main.py 
2130706433

轉換的收益與限制

如果不做轉換可以使用 varchar 來保存 IPv4 地址,這樣的話需要 15 (3*4 + 3) 個字節才行;如果轉換一下只需要 4 個字節就行了,節約了磁盤空間,可能會多用點 cpu 時間。

今天來說 IPv6 已經是主流,它的長度直接從之前的 4 字節直接漲到了 16 字節;int 不再能滿足需求,為了可以統一處理這兩種類型的 IP 現在推薦使用 varchar 來保存。

inet_aton 與 inet_ntoa

這一對 IP 是 IPv4 時代的轉換函數,目前來看已經過時。

1、inet_aton IP 轉數字。

In [4]: socket.inet_aton("127.0.0.1")                                             
Out[4]: b'\x7f\x00\x00\x01'

2、inet_ntoa 數字轉 IP。

In [5]: socket.inet_ntoa(b'\x7f\x00\x00\x01')                                         
Out[5]: '127.0.0.1'

inet_pton 與 inet_ntop

這是一對新的 API ,這對 API 兼容了 IPv4 和 IPv6 。

In [6]: socket.inet_pton(socket.AF_INET6,"5aef:2b::8")                                     
Out[6]: b'Z\xef\x00+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08'

In [7]: socket.inet_ntop(socket.AF_INET6,b'Z\xef\x00+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08')            
Out[7]: '5aef:2b::8'

In [8]: socket.inet_pton(socket.AF_INET,"127.0.0.1")                                      
Out[8]: b'\x7f\x00\x00\x01'

In [9]: socket.inet_ntop(socket.AF_INET,b'\x7f\x00\x00\x01')                                 
Out[9]: '127.0.0.1'

以上就是在python項目中如何將 IP地址的格式轉為整數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临武县| 堆龙德庆县| 井冈山市| 万州区| 荆州市| 广丰县| 高平市| 新乐市| 绿春县| 长治县| 儋州市| 通榆县| 密山市| 沾化县| 大方县| 彩票| 万年县| 永州市| 凤冈县| 台北县| 和平区| 佛教| 黄大仙区| 肃宁县| 尼勒克县| 饶阳县| 汉中市| 陕西省| 大悟县| 余江县| 专栏| 西充县| 福建省| 慈溪市| 巩留县| 彩票| 舞钢市| 昌平区| 伊川县| 定结县| 宝清县|