最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

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

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

轉(zhuǎn)換的原理

一個(gè) IPv4 類的地址共分為四個(gè)部分 0.0.0.0 然而每一個(gè)部分的取值范圍都在 0 ~ 255;也就是說(shuō)每一個(gè)部分都可以用一個(gè)字節(jié)來(lái)保存,總共寫個(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 來(lái)保存 IPv4 地址,這樣的話需要 15 (3*4 + 3) 個(gè)字節(jié)才行;如果轉(zhuǎn)換一下只需要 4 個(gè)字節(jié)就行了,節(jié)約了磁盤空間,可能會(huì)多用點(diǎn) cpu 時(shí)間。

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

inet_aton 與 inet_ntoa

這一對(duì) IP 是 IPv4 時(shí)代的轉(zhuǎn)換函數(shù),目前來(lái)看已經(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)文章

  • Selenium及python實(shí)現(xiàn)滾動(dòng)操作多種方法

    Selenium及python實(shí)現(xiàn)滾動(dòng)操作多種方法

    這篇文章主要介紹了Selenium及python實(shí)現(xiàn)滾動(dòng)操作多種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用Python的pygame庫(kù)繪制圖形示例詳解

    使用Python的pygame庫(kù)繪制圖形示例詳解

    這篇文章主要介紹了使用Python的Pygame庫(kù)繪制圖形的方法,Pygame是被設(shè)計(jì)用來(lái)寫游戲的python模塊集合,Pygame是在優(yōu)秀的SDL庫(kù)之上開發(fā)的功能性包,通常使用Pygame來(lái)開發(fā)具有全部特性的游戲和多媒體軟件,感興趣的朋友可以參考下
    2024-02-02
  • scrapy-redis的安裝部署步驟講解

    scrapy-redis的安裝部署步驟講解

    今天小編就為大家分享一篇關(guān)于scrapy-redis的安裝部署步驟講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 簡(jiǎn)單的Python抓taobao圖片爬蟲

    簡(jiǎn)單的Python抓taobao圖片爬蟲

    這篇文章主要介紹了簡(jiǎn)單的Python抓taobao圖片爬蟲,需要的朋友可以參考下
    2014-10-10
  • python基礎(chǔ)教程之常用運(yùn)算符

    python基礎(chǔ)教程之常用運(yùn)算符

    這篇文章主要介紹了python基礎(chǔ)教程之常用運(yùn)算符,包含數(shù)學(xué)運(yùn)算符、用于判斷的運(yùn)算符、邏輯運(yùn)算符等,需要的朋友可以參考下
    2014-08-08
  • 在Pandas中處理NaN值的方法

    在Pandas中處理NaN值的方法

    這篇文章主要介紹了在Pandas中處理NaN值的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python光學(xué)仿真wxpython之DC繪圖

    Python光學(xué)仿真wxpython之DC繪圖

    這篇文章主要為大家介紹了Python光學(xué)仿真wxpython之DC繪圖的基本概念及用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 基于Python的自媒體小助手---登錄頁(yè)面的實(shí)現(xiàn)代碼

    基于Python的自媒體小助手---登錄頁(yè)面的實(shí)現(xiàn)代碼

    這篇文章主要介紹了基于Python的自媒體小助手---登錄頁(yè)面的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python修改DBF文件指定列

    Python修改DBF文件指定列

    這篇文章主要介紹了Python修改DBF文件指定列的實(shí)現(xiàn),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

    用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

    這篇文章主要介紹了用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

当涂县| 平邑县| 镇远县| 台中县| 东莞市| 南城县| 梅州市| 辉县市| 康保县| 富平县| 宜君县| 信阳市| 吴桥县| 江口县| 遂川县| 镶黄旗| 泸西县| 涟源市| 宜春市| 神木县| 衡阳市| 探索| 湖南省| 江陵县| 镇巴县| 永吉县| 丹棱县| 阜新| 西林县| 湟中县| 商水县| 城口县| 嫩江县| 云安县| 泸西县| 甘谷县| 集贤县| 广饶县| 布尔津县| 濉溪县| 婺源县|