如何判断不同主机是否在同一个网段?
温馨提醒
🚀 注意啦!这篇文章来自4 年 255 天 以前,可能已跟不上时代的步伐。阅读时请自备时光机,小心穿越哦!
场景
现在我们知道 A 主机和 B 主机的 IP 地址以及子网掩码
如何写一段python代码判断两台主机的网络是在同一个网段下呢?
解决方案
在已知主机的 IP 和 子网掩码的前提下,我们只需要做一个简单按位与运算即可。
首先我们心算一下二进制
① 将 IP 地址、子网掩码转换为二进制
② 两个主机分别将各自的 IP 与 自己的子网掩码进行按位与运算
请在心中将每一个0和1对齐,然后默念口诀"有零为零,全一为一"… …
根据我举的例子,A、B 主机的 IP 与子网掩码计算之后,得出的二进制值肯定是一样的(都是同一个网段下的设备)
如下所示:
11000000.10101000.00000001.00000000
按分割转换为十进制后就是
192.168.1.0
③ 最后一步,比较最后得到的值
如果得到的 IP 一致,则说明两台设备在同一个网段内,否则不在统一网段内
python 代码实现
今天的主角,是netaddr模块
- 导入
netaddr模块中的所有类(方便演示例子,实际工作中不建议,看场景而定) - 第4行代码,使用
IPNetwork类接收一个格式为"<ip>/<netmask>“字符串后,实例化为host_network - 最后一行代码,
get_network函数返回host_network实例的netwrok属性值(将IP与Netmask按位与后的十进制结果),并转换为字符串
结语
netaddr还有很多方便的功能,可以处理IPV4、6等网络编程中遇到的‘棘手’问题
这只是网络编程一个小的开胃菜,可以预感以后会越来越精彩dog。