欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python IP地址轉(zhuǎn)整數(shù)

 更新時(shí)間:2020年11月20日 10:00:32   作者:蔣樂興  
這篇文章主要介紹了python 如何將IP 地址轉(zhuǎn)整數(shù),幫助大家了解轉(zhuǎn)換的原理與收益,更好的理解python,感興趣的朋友可以了解下

背景

今天有人問我 “為什么數(shù)據(jù)庫中有人推薦使用 int 類型來保存 IP 地址?”?,F(xiàn)在(2020年)來看這個(gè)東西已經(jīng)有點(diǎn)過時(shí)了,一方面是磁盤空間不在那么貴,另一方面是 IPv6 與這條法則不兼容。

下面我們就來看一下把 IPv4 地址轉(zhuǎn)換成整數(shù)的原理和收益各是什么。

轉(zhuǎn)換的原理

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

第一步 把 IP 地址的各個(gè)部分轉(zhuǎn)換為一個(gè)字節(jié),并拼接它們,那么會(huì)得到一個(gè) 4 字節(jié)的串。

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)

第二步 把字節(jié)串轉(zhuǎn)換成整數(shù)。

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 地址轉(zhuǎn)換成了一個(gè)整數(shù),完整的代碼如下。

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'))

運(yùn)行效果如下。

python3 main.py 
2130706433

轉(zhuǎn)換的收益與限制

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

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

inet_aton 與 inet_ntoa

這一對(duì) IP 是 IPv4 時(shí)代的轉(zhuǎn)換函數(shù),目前來看已經(jīng)過時(shí)。

1、inet_aton IP 轉(zhuǎn)數(shù)字。

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

2、inet_ntoa 數(shù)字轉(zhuǎn) IP。

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

inet_pton 與 inet_ntop

這是一對(duì)新的 API ,這對(duì) 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 地址轉(zhuǎn)整數(shù)的詳細(xì)內(nèi)容,更多關(guān)于python ip地址轉(zhuǎn)整數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python的matplotlib繪圖如何修改背景顏色的實(shí)現(xiàn)

    Python的matplotlib繪圖如何修改背景顏色的實(shí)現(xiàn)

    這篇文章主要介紹了Python的matplotlib繪圖如何修改背景顏色的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python3+Appium實(shí)現(xiàn)多臺(tái)移動(dòng)設(shè)備操作的方法

    Python3+Appium實(shí)現(xiàn)多臺(tái)移動(dòng)設(shè)備操作的方法

    這篇文章主要介紹了Python3+Appium實(shí)現(xiàn)多臺(tái)移動(dòng)設(shè)備操作的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤

    python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤

    這篇文章主要介紹了python使用pynput庫操作、監(jiān)控你的鼠標(biāo)和鍵盤,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python利用PyPDF2庫獲取PDF文件總頁碼實(shí)例

    Python利用PyPDF2庫獲取PDF文件總頁碼實(shí)例

    這篇文章主要介紹了Python利用PyPDF2庫獲取PDF文件總頁碼實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 如何使用flask將模型部署為服務(wù)

    如何使用flask將模型部署為服務(wù)

    在某些場景下,我們需要將機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)模型部署為服務(wù)給其它地方調(diào)用,本文接下來就講解使用python的flask部署服務(wù)的基本過程。
    2021-05-05
  • 基于Python實(shí)現(xiàn)自制拼圖小游戲

    基于Python實(shí)現(xiàn)自制拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹得了如何利用Python中pygame的這個(gè)非標(biāo)準(zhǔn)庫來做個(gè)小游戲-拼圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-11-11
  • 大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    這篇文章主要為大家介紹了大語言模型的開發(fā)利器langchain安裝使用快速入門學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫存

    Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫存

    餅狀圖(pie chart)一般用于描述分類型數(shù)據(jù)的相對(duì)頻數(shù)或百分?jǐn)?shù)頻數(shù)分布,呈現(xiàn)部分與總體的關(guān)系,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)戰(zhàn)基礎(chǔ)之繪制餅狀圖分析商品庫存的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • python實(shí)現(xiàn)讀取并顯示圖片的兩種方法

    python實(shí)現(xiàn)讀取并顯示圖片的兩種方法

    本篇文章主要介紹python實(shí)現(xiàn)讀取并顯示圖片的兩種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python爬蟲爬取有道實(shí)現(xiàn)翻譯功能

    Python爬蟲爬取有道實(shí)現(xiàn)翻譯功能

    這篇文章主要介紹了Python爬蟲爬取有道實(shí)現(xiàn)翻譯功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論