python脚本用于检查一个ip是否属于此网段

class IP_check(object):
    def make_ip(self,ip):
        """
        输入一个ip地址,将对应的ip地址转化为一个32位的二进制
        """
        ipbin=''
        ip_A=str(ip).split(".")
        for i in  ip_A:
            A=bin(int(i))
            ip_a=A[2:]#字符串除去前面的0b进行
            #print(ip_a)
            while len(str(ip_a))<8:
                #保证每一位都为8位
                a='0'
                ip_a=a+ip_a
            ipbin+=ip_a
        return ipbin
    def make_mask(self,mask):
        """
        输入一个1-32的整数或者类似于255.255.255.0的掩码,返回一个32位的2进制序列
        """
        if len(mask)<=2:
            make_list = []
            for i in range(32):
                #创建一个32全是0的空列表,输入的整数含有多少1,就在列表变为多少1
                make_list.append(0)
            for i in range(0,int(mask)):
                make_list[i]=1
            make_list=str(make_list)
            print(make_list)
            make_deal=(make_list.replace(", ",""))[1:-1]
        elif 32>=len(mask)!=1:
            make_deal=self.make_ip(mask)
        return make_deal
    def ip_check(self,ip,network):
        """
        输入一个ip,输入一个类似2.1.1.1/32的网络段,判断ip是否在这个网段内
        """
        make_network=network.split("/")
        network_ip=int(self.make_ip(make_network[0]),2)
        network_mask=int(self.make_mask(make_network[1]),2)
        Ip = int(self.make_ip(ip),2)
        #转为int数字,自动会将字符串前面的0去掉,导致保留位不到32,int(xx,2)表示一个字符串只存在0,1转化为10进制
        if network_ip & network_mask == Ip & network_mask:
            print("YES")
            return True
        else:
            print("NO")
            return False

if __name__ == "__main__":
    ip_1=IP_check()
    ip_1.ip_check(ip="23.2.1.1",network="23.1.1.1/255.255.0.0")


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值