python 判断两个IP同网段
2021/9/2 12:06:19
本文主要是介绍python 判断两个IP同网段,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、判断IP同网段方法,两个IP分别与子网掩码相与,所得结果相同即为同网段IP 2、子网掩码规则:转为二进制后前部分全1,后半部分全0,掩码不可全1或全0,不可有0位于1前 ##将IP地址转为二进制 def ipToBinary(ip): '''ip address transformat into binary Argv: ip: ip address Return: binary ''' ip_num = ip.split('.') x = 0 ##IP地址是点分十进制,例如:192.168.1.33,共32bit ##第1节(192)向前移24位,第2节(168)向前移16位 ##第3节(1)向迁移8位,第4节(33)不动 ##然后进行或运算,得出数据 for i in range(len(ip_num)): num = int(ip_num[i]) << (24 - i * 8) x = x | num brnary = str(bin(x).replace('0b', '')) return brnary ##将子网掩码转为二进制 def maskToBinary(mask): '''netmask change, example: 24 or 255.255.255.0 change binary Argv: mask: netmask, example:24 or 255.255.255.0 Return: binary ''' mask_list = str(mask).split('.') ##子网掩码有两种表现形式,例如:/24或255.255.255.0 if len(mask_list) == 1: ##生成一个32个元素均是0的列表 binary32 = [] for i in range(32): binary32.append('0') ##多少位子网掩码就是连续多少个1 for i in range(int(mask)): binary32[i] = '1' binary = ''.join(binary32) ##输入的子网掩码是255.255.255.0这种点分十进制格式 elif len(mask_list) == 4: binary = ipToBinary(mask) return binary ##判断IP地址是否属于这个网段 def ipInSubnet(ip, subnet): ''' Argv: ip: ip address,example:1.1.1.1 subnet: subnet,example:1.1.1.0/24,or 1.1.1.0/255.255.255.0 Return: False or True ''' subnet_list = subnet.split('/') networt_add = subnet_list[0] network_mask = subnet_list[1] ##原来的得出的二进制数据类型是str,转换数据类型 ip_num = int(ipToBinary(ip), 2) subnet_num = int(ipToBinary(networt_add), 2) mask_bin = int(maskToBinary(network_mask), 2) ##IP和掩码与运算后比较 if (ip_num & mask_bin) == (subnet_num & mask_bin): return True else: return False
这篇关于python 判断两个IP同网段的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南