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")


你可能感兴趣的:(python,tcp/ip,开发语言)