IPとマスク長でセグメント範囲を判断する

2019 ワード

#!/usr/bin/env: python

import re
import struct


class CIDRHelper:
        @staticmethod
        def start():
                print "Hello"

        def ipFormatChk(self, ip_str):
                pattern = r"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
                if re.match(pattern, ip_str):
                        return True
                else:
                        return False

        def masklenChk(self, masklen):
                if masklen > 0 and masklen < 32:
                        return true
                else:
                        return false

        def Parse(self, ip, masklen):
                if False == self.ipFormatChk(ip) :
                        return False

                ips = ip.split(".")
                binip = 0
                for id in ips:
                        binip = binip << 8
                        binip += int(id)

                mask = (1 << 32) - 1 - ((1<<(32-masklen))-1)

                a,b,c,d = struct.unpack('BBBB', struct.pack('>I',(binip & mask)))
                print ".".join([str(a),str(b),str(c),str(d)])
                a,b,c,d = struct.unpack('BBBB', struct.pack('>I',(binip & mask)+(2<<(32-masklen-1)) - 1))
                print ".".join([str(a),str(b),str(c),str(d)])


ch = CIDRHelper()
ch.Parse("183.60.143.187",28)

#
#python a.py
#183.60.143.176
#183.60.143.191
#

オンライン検索:http://jodies.de/ipcalc