Ejemplo n.º 1
0
	def __init__(self):
		BaseBackend.__init__(self, models.Subnet)
		self.ipcalc = IPCalc()
		self.asnum = ASNum()
		self.country = Country()
		self.rir = RIR()
Ejemplo n.º 2
0
class Subnet(BaseBackend):
	name = "Subnet"
	def __init__(self):
		BaseBackend.__init__(self, models.Subnet)
		self.ipcalc = IPCalc()
		self.asnum = ASNum()
		self.country = Country()
		self.rir = RIR()

	def has(self, *args, **kwargs):
		if "/" in kwargs['subnet']:
			kwargs['subnet'] = kwargs['subnet'].split("/")[0]
		subnet = self.ipcalc.dqtoi(kwargs['subnet'])
		return BaseBackend.has(self, subnet=subnet)

	def get(self, *args, **kwargs):
		if kwargs.has_key('subnet'):
			if "/" in kwargs['subnet']:
				kwargs['subnet'] = kwargs['subnet'].split("/")[0]
			subnet = self.ipcalc.dqtoi(kwargs['subnet'])
			return BaseBackend.get(self, subnet=subnet)
		else:
			return BaseBackend.get(self, *args, **kwargs)

	def contains(self, *args, **kwargs):
		ip = self.ipcalc.dqtoi(kwargs["ip"])
		net = models.Subnet.objects.filter(subnet__lte=ip).filter(last__gte=ip)
		if net:
			return (True, net)
		else:
			return (False, "No network found for %s" % (kwargs["ip"]))

	def add(self, *args, **kwargs):
		if not "/" in kwargs['subnet']:
			return (False, "%s is not a subnet" % (kwargs['subnet']))

		(net, mask) = kwargs['subnet'].split("/")
		asn = kwargs['asn']
		af = self.ipcalc.af(kwargs['subnet'])

		(result, subnet) = self.get(subnet=net)
		if result:
			return (True, subnet)

		if kwargs['asn'] == 0:
			(result, rir) = self.rir.get(name="Unknown")
			if not result:
				return (False, rir)

		(result, country) = self.country.get(code=kwargs['cc'])
		if not result:
				return (False, country)

		(result, asnum) = self.asnum.get(asnum=kwargs['asn'])
		if not result:
			(result, asnum) = self.asnum.add(asnum=asn, name=kwargs['asn_name'], whois_data=kwargs['whois_data'], country=country, rir=rir)
			if not result:
				return (False, asnum)

		net_first=self.ipcalc.dqtoi(net)
		net_last = net_first + self.ipcalc.bittoip[int(mask)]

		subnet = models.Subnet(
			subnet=net_first,
			last=net_last,
			mask=int(mask),
			asnum=asnum,
			af=af,
			country=country,
			rir=asnum.rir,
			regdate=datetime.now()
		)
		subnet.save()
		return (True, subnet)

	@transaction.commit_manually
	def bulk_import(self, import_data):
		t_start = mktime(datetime.now().timetuple())
		data = []
		failed = []
		num_failed = 0
		for entry in import_data:
			if entry[0] == "":
				num_failed += 1
				failed.append(entry)
				continue
			(net, mask) = entry[0].split("/")
			tmp = {}
			tmp["subnet"] = self.ipcalc.dqtoi(net)
			tmp["mask"] = mask
			tmp["name"] = entry[1]
			try:
				tmp["asnum"] = models.ASNum.objects.filter(name=entry[2])[0]
			except:
				tmp["asnum"] = None
			data.append(tmp)
		for entry in data:
			subnet = models.Subnet(
				subnet=entry["subnet"],
				mask=entry["mask"],
				name=entry["name"],
				asnum=entry["asnum"],
			)
			subnet.save()
		transaction.commit()
		reset_queries()
		t_end = mktime(datetime.now().timetuple())
		return (t_end - t_start, num_failed, failed)
Ejemplo n.º 3
0
	def __init__(self):
		BaseBackend.__init__(self, models.ASNum)
		self.rir = RIR()
		self.country = Country()
Ejemplo n.º 4
0
class ASNum(BaseBackend):
	name = "ASNum"
	def __init__(self):
		BaseBackend.__init__(self, models.ASNum)
		self.rir = RIR()
		self.country = Country()

	def add(self, *args, **kwargs):
		if isinstance(kwargs['asnum'], int):
			kwargs['asnum'] = str(kwargs['asnum'])

		kwargs['regdate'] = datetime.now()

		if not 'name' in kwargs.keys():
			kwargs['name'] = 'Unknown'

		if not 'country' in kwargs.keys():
			(result, country) = self.country.get(code='EU')
			if not result:
				return (False, country)

		(result, rir) = self.rir.get(name=kwargs['rir'])
		if not result:
			return (False, rir)

		asnum = models.ASNum(
			asnum=kwargs['asnum'],
			name=kwargs['name'],
			country=country,
			rir=rir,
			regdate=kwargs['regdate'],
		)
		asnum.save()
		return (True, asnum)

	@transaction.commit_manually
	def bulk_import(self, import_data):
		t_start = mktime(datetime.now().timetuple())
		data = []
		failed = []
		num_failed = 0
		for entry in import_data:
			tmp = {}
			if entry[0] == "":
				num_failed += 1
				failed.append(entry)
				continue
			
			tmp["asnum"] = entry[0]
			tmp["rir"] = models.RIR.objects.get(name=entry[1])
			data.append(tmp)
		for entry in data:
			asnum = models.ASNum(
				asnum=int(entry["asnum"]),
				rir=entry["rir"],
			)
			asnum.save()
		transaction.commit()
		reset_queries()
		t_end = mktime(datetime.now().timetuple())
		return (t_end - t_start, num_failed, failed)
Ejemplo n.º 5
0
 def __init__(self):
     BaseBackend.__init__(self, models.ASNum)
     self.rir = RIR()
     self.country = Country()
Ejemplo n.º 6
0
class ASNum(BaseBackend):
    name = "ASNum"

    def __init__(self):
        BaseBackend.__init__(self, models.ASNum)
        self.rir = RIR()
        self.country = Country()

    def add(self, *args, **kwargs):
        if isinstance(kwargs['asnum'], int):
            kwargs['asnum'] = str(kwargs['asnum'])

        kwargs['regdate'] = datetime.now()

        if not 'name' in kwargs.keys():
            kwargs['name'] = 'Unknown'

        if not 'country' in kwargs.keys():
            (result, country) = self.country.get(code='EU')
            if not result:
                return (False, country)

        (result, rir) = self.rir.get(name=kwargs['rir'])
        if not result:
            return (False, rir)

        asnum = models.ASNum(
            asnum=kwargs['asnum'],
            name=kwargs['name'],
            country=country,
            rir=rir,
            regdate=kwargs['regdate'],
        )
        asnum.save()
        return (True, asnum)

    @transaction.commit_manually
    def bulk_import(self, import_data):
        t_start = mktime(datetime.now().timetuple())
        data = []
        failed = []
        num_failed = 0
        for entry in import_data:
            tmp = {}
            if entry[0] == "":
                num_failed += 1
                failed.append(entry)
                continue

            tmp["asnum"] = entry[0]
            tmp["rir"] = models.RIR.objects.get(name=entry[1])
            data.append(tmp)
        for entry in data:
            asnum = models.ASNum(
                asnum=int(entry["asnum"]),
                rir=entry["rir"],
            )
            asnum.save()
        transaction.commit()
        reset_queries()
        t_end = mktime(datetime.now().timetuple())
        return (t_end - t_start, num_failed, failed)