亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:2日期:2022-07-04 17:32:48

背景

今天有人問(wèn)我 “為什么數(shù)據(jù)庫(kù)中有人推薦使用 int 類型來(lái)保存 IP 地址?”。現(xiàn)在(2020年)來(lái)看這個(gè)東西已經(jīng)有點(diǎn)過(guò)時(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 structdef 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’x7fx00x00x01’In [3]: int.from_bytes(b’x7fx00x00x01’,’big’) Out[3]: 2130706433

這樣我們就把 IPv4 地址轉(zhuǎn)換成了一個(gè)整數(shù),完整的代碼如下。

import structdef 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)過(guò)時(shí)。

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

In [4]: socket.inet_aton('127.0.0.1') Out[4]: b’x7fx00x00x01’

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

In [5]: socket.inet_ntoa(b’x7fx00x00x01’) 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’Zxefx00+x00x00x00x00x00x00x00x00x00x00x00x08’In [7]: socket.inet_ntop(socket.AF_INET6,b’Zxefx00+x00x00x00x00x00x00x00x00x00x00x00x08’) Out[7]: ’5aef:2b::8’In [8]: socket.inet_pton(socket.AF_INET,'127.0.0.1') Out[8]: b’x7fx00x00x01’In [9]: socket.inet_ntop(socket.AF_INET,b’x7fx00x00x01’) 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)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产最爽的乱淫视频国语对 | 美女黄页在线观看 | 又黄又爽又猛午夜性色播在线播放 | 一区视频免费观看 | 男女爱爱免费 | 免费性生活网站 | 污污网站大全 | 亚洲三级毛片 | 午夜精品在线观看 | 黑人好太好长爱不了 | 国产成人福利美女观看视频 | 国产精品日韩欧美亚洲另类 | 99人中文字幕亚洲区 | 国产精品黄 | 99成人国产精品视频 | 一级做α爱毛毛片 | 国产做受视频激情播放 | 亚洲经典在线 | 一区二区视频在线观看 | 亚洲国产一区二区三区 | 黄色在线观看www | 亚洲国产成人精品久久 | 国产乱码精品一区二区三区四川人 | 国产成人啪精品午夜在线观看 | 国产亚洲人成网站观看 | 网站在线看 | 亚洲精品久久成人福利 | 日韩特黄特色大片免费视频 | 日本一级毛片免费看 | 9久9久女女免费精品视频在线观看 | 免费啪视频一区二区三区 | 99久热在线精品视频播 | 国产精品美乳免费看 | 九一在线完整视频免费观看 | 国产呦| 日本大学生免费一级一片 | 亚洲一区播放 | wwwxxx亚洲| 免费福利片 | 在线免费观看色视频 | 亚洲成a人片毛片在线 |