簡體   English   中英

用 Python 獲取連接接口的網絡地址

[英]Get network address of connected interface with Python

如何獲取特定接口的當前網絡地址(不是 ip 地址,而是網絡地址)?

例如,如果我在終端ip a show <interace> | grep inet ip a show <interace> | grep inet我得到類似於 this.n n的結果

    inet 192.168.43.157/24 brd 192.168.43.255 scope global dynamic noprefixroute wlo1
    inet6 fe80::6877:db06:4b23:7a7c/64 scope link noprefixroute 

在這個例子中,我當前的 IP 地址是192.168.45.157/24但網絡地址(我正在尋找)是192.168.43.0/24

我將如何獲得網絡地址?

最簡單的解決方案可能是使用netaddr模塊:

>>> x = netaddr.IPNetwork('192.168.45.157/24')
>>> x.cidr
IPNetwork('192.168.45.0/24')

或者您可以將地址轉換為 32 位數字,將前綴轉換為位掩碼,然后應用於掩碼:

>>> import socket
>>> addr = '192.168.45.157/24'
>>> ip, prefix = addr.split('/')
>>> mask = 0xFFFFFFFF << (32-int(prefix))
>>> bin(mask)
'0b1111111111111111111111111111111100000000'
>>> ip_bytes = socket.inet_aton(ip)
>>> '.'.join(str(int(x)) for x in struct.pack('>I', struct.unpack('>I', ip_bytes)[0] & mask))
'192.168.45.0'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM