network.py
1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'eduardo'
from iptools.ipv4 import netmask2prefix
from netaddr import IPNetwork, IPSet
from ..model import Base
from sqlalchemy.schema import Column
from sqlalchemy.types import String, Integer
class Network(Base):
"""
Rede onde a busca será realizada
"""
__tablename__ = 'network'
ip_network = Column(String(16), nullable=False, primary_key=True)
network_file = Column(String)
netmask = Column(String(16))
prefixlen = Column(Integer)
name = Column(String)
def __init__(self,
network_ip,
network_file=None,
netmask=None,
prefixlen=None,
name=None
):
"""
:param network_ip: Ip da rede
:param netmask: Máscara da rede
:param cidr: CIDR para calcular a máscara da rede
:param name: Nome da rede
"""
self.network_ip = network_ip
self.netmask = netmask
self.prefixlen = prefixlen
self.name = name
self.network_file = network_file
if self.netmask is None:
self.netmask = self.network_ip.netmask
if self.prefixlen is None:
self.prefixlen = self.network_ip.prefixlen
# SQLAlchemy attribute
self.ip_network = str(self.network_ip.ip)
@property
def network_ip(self):
return self._network_ip
@network_ip.setter
def network_ip(self, value):
self._network_ip = IPNetwork(value)
if self._network_ip.prefixlen == 32:
if self.netmask is not None:
prefixlen = netmask2prefix(self.netmask)
self._network_ip = IPNetwork(str(self._network_ip.ip) + "/" + str(prefixlen))
self.prefixlen = prefixlen
def ip_list(self):
"""
Método que encontra a lista de IP's da subrede
:return: Conjunto de IP's para realizar a interação
"""
return IPSet(self.network_ip)