python - 用Python获取连接接口的网络地址
问题描述
如何获取特定接口的当前网络地址(不是 IP 地址,而是网络地址)?
例如,如果我在终端上运行以下命令,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'
推荐阅读
- html - 过渡持续时间在特定 div 中不起作用
- haskell - 使用列表理解我如何计算字符列表中有多少位
- laravel - 使用 Laravel Echo 加入频道时,如何判断身份验证失败?
- html - 在不同的屏幕尺寸上重用导航栏中的代码有哪些选项?
- git - 错误:将 git-lfs 推送到 GitLab 时无法推送一些参考
- python - 添加简单约束时,为什么 CVXPy 或 DMCP 返回“NoneType”?
- javascript - 比较两个嵌套数组和对象以查找差异
- arrays - MongoDB $and 仅当 $and 在文档的同一数组索引中为真时才查询 - 特别是对于双重嵌套数组
- git - Git:克隆具有父层次结构的存储库
- flutter - android studio 中未显示 dart 分析器工具窗口