python unpack_ip地址处理每天10行python代码系列
生活随笔
收集整理的這篇文章主要介紹了
python unpack_ip地址处理每天10行python代码系列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????背景知識:ip地址(這里都是指的ipv4地址)是一個32位(4字節)的無符號整數。為方便記憶,把每個字節看做一個無符號數,并以.號隔開。比如常見的私有地址192.168.100.1,?dns?114.114.114.114。
????下面這段代碼,展示python如何處理ip地址的一些方法。
import?socket,?struct'''
inet_aton:字符串轉換成一個32位的網絡字節序二進制值
inet_addr:返回值為32位的網絡字節序二進制,
inet_ntoa:將一個32位的網絡字節序二進制IPv4地址轉換成相應的點分十進制數串
'''
ip='220.170.193.10'
def?iptonum():
????nums=ip.split('.')
????num=0
????for?i?in?nums:
????????#?num<<=8
????????#?num+=int(i)
????????num?=?(num<<8)?+?int(i)
????#ip數值
????print(f"{ip}:{num}")
????print(f"十六進制:{hex(num)}")
????print(f"轉為網絡順序:socket.htonl(num)")
????print(f"網絡順序十六進制:hex(socket.htonl(num))")
if?__name__=='__main__':
????bytIp=socket.inet_aton(ip)
????print(f"字符串地址轉二進制字節數組:{bytIp}")
????#此時是網絡存儲順序?大端模式?
????ip_num=?struct.unpack("i",bytIp)[0]
????print(f"二進制字節數組轉數字:{ip_num}")
????#ntohl?網絡存儲順序轉主機存儲順序?x64為小端模式,即數據的高位存在高字節
????ip_num_little=socket.ntohl(ip_num)
????print(f"主機存儲順序:{ip_num_little}")
????iptonum()
總結
以上是生活随笔為你收集整理的python unpack_ip地址处理每天10行python代码系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遇到电脑阅卷也不怕遇到电脑阅卷也不怕怎么
- 下一篇: 给你的电脑私装蓝牙WIFI给笔记本装蓝牙