def test_get_current(self):
        leases = IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases")
        result = leases.get_current()
        self.assertEqual(len(result), 0)

        leases = IscDhcpLeases("isc_dhcp_leases/test_files/pfsense.leases")
        result = leases.get_current()
        self.assertEqual(len(result), 2)

        self.assertTrue("14:da:e9:04:c8:a3" in result)
        self.assertTrue("64:5a:04:6a:07:a2" in result)
        self.assertTrue(result["14:da:e9:04:c8:a3"].valid)
        self.assertTrue(result["64:5a:04:6a:07:a2"].valid)
Пример #2
0
    def test_get_current(self):
        leases = IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases")
        result = leases.get_current()
        self.assertEqual(len(result), 0)

        leases = IscDhcpLeases("isc_dhcp_leases/test_files/pfsense.leases")
        result = leases.get_current()
        self.assertEqual(len(result), 2)

        self.assertTrue("14:da:e9:04:c8:a3" in result)
        self.assertTrue("64:5a:04:6a:07:a2" in result)
        self.assertTrue(result["14:da:e9:04:c8:a3"].valid)
        self.assertTrue(result["64:5a:04:6a:07:a2"].valid)
    def test_get_current_ipv6(self):
        with freeze_time("2015-08-18 17:0:0"):
            leases = IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6.leases")
            result = leases.get_current()
            self.assertEqual(len(result), 2)
            self.assertIn('na-3464769c000100010239661996080027000000', result)
            self.assertIn('pd-3464769c000100010239661996080027000000', result)

            for key, r in result.items():
                self.assertTrue(r.valid, key)

        with freeze_time("2015-08-18 18:0:0"):
            leases = IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6.leases")
            result = leases.get_current()
            self.assertEqual(len(result), 0)
Пример #4
0
    def test_get_current_ipv6(self):
        with freeze_time("2015-08-18 17:0:0"):
            leases = IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.2.4.leases")
            result = leases.get_current()
            self.assertEqual(len(result), 2)
            self.assertIn('na-346476ea000100011d661fe20a0027000000', result)
            self.assertIn('pd-346476ea000100011d661fe20a0027000000', result)

            for key, r in result.items():
                self.assertTrue(r.valid, key)

        with freeze_time("2015-08-18 18:0:0"):
            leases = IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.2.4.leases")
            result = leases.get_current()
            self.assertEqual(len(result), 0)
Пример #5
0
 def GetDHCPRequests(self, data):
     if len(data) == 8:
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.APclients.keys():
                 self.APclients[data[4]] = {
                     'IP': data[2],
                     'device': data[5],
                     'in_tables': False,
                 }
                 self.StatusDHCPRequests(data[4])
     elif len(data) == 9:
         if Refactor.check_is_mac(data[5]):
             if data[5] not in self.APclients.keys():
                 self.APclients[data[5]] = {
                     'IP': data[2],
                     'device': data[6],
                     'in_tables': False,
                 }
                 self.StatusDHCPRequests(data[5])
     elif len(data) == 7:
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.APclients.keys():
                 leases = IscDhcpLeases('Settings/dhcp/dhcpd.leases')
                 hostname = None
                 try:
                     for item in leases.get():
                         if item.ethernet == data[4]:
                             hostname = item.hostname
                     if hostname == None:
                         item = leases.get_current()
                         hostname = item[data[4]]
                 except:
                     hostname = 'unknown'
                 if hostname == None: hostname = 'unknown'
                 self.APclients[data[4]] = {
                     'IP': data[2],
                     'device': hostname,
                     'in_tables': False,
                 }
                 self.StatusDHCPRequests(data[4])
                 self.APclients[data[4]] = {
                     'IP': data[2],
                     'device': hostname,
                     'in_tables': False,
                 }
     Headers = []
     for mac in self.APclients.keys():
         if self.APclients[mac]['in_tables'] == False:
             self.APclients[mac]['in_tables'] = True
             self.THeaders['mac-address'].append(mac)
             self.THeaders['ip-address'].append(self.APclients[mac]['IP'])
             self.THeaders['device'].append(self.APclients[mac]['device'])
             for n, key in enumerate(self.THeaders.keys()):
                 Headers.append(key)
                 for m, item in enumerate(self.THeaders[key]):
                     item = QTableWidgetItem(item)
                     item.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter)
                     self.TabInfoAP.setItem(m, n, item)
             self.TabInfoAP.setHorizontalHeaderLabels(self.THeaders.keys())
     self.connectedCount.setText(str(len(self.APclients.keys())))
Пример #6
0
 def get_DHCP_Requests_clients(self, data):
     ''' filter: data info sended DHCPD request '''
     self.APclients = {}
     if len(data) == 8:
         device = sub(r'[)|(]', r'', data[5])
         if len(device) == 0: device = 'unknown'
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.HomeDisplay.APclients.keys():
                 self.APclients[data[4]] = {
                     'IP': data[2],
                     'device': device,
                     'MAC': data[4],
                     'Vendors': self.get_mac_vendor(data[4])
                 }
                 self.add_DHCP_Requests_clients(data[4],
                                                self.APclients[data[4]])
     elif len(data) == 9:
         device = sub(r'[)|(]', r'', data[6])
         if len(device) == 0: device = 'unknown'
         if Refactor.check_is_mac(data[5]):
             if data[5] not in self.HomeDisplay.ClientTable.APclients.keys(
             ):
                 self.APclients[data[5]] = {
                     'IP': data[2],
                     'device': device,
                     'MAC': data[5],
                     'Vendors': self.get_mac_vendor(data[5])
                 }
                 self.add_DHCP_Requests_clients(data[5],
                                                self.APclients[data[5]])
     elif len(data) == 7:
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.HomeDisplay.ClientTable.APclients.keys(
             ):
                 leases = IscDhcpLeases(C.DHCPLEASES_PATH)
                 hostname = None
                 try:
                     for item in leases.get():
                         if item.ethernet == data[4]:
                             hostname = item.hostname
                     if hostname == None:
                         item = leases.get_current()
                         hostname = item[data[4]]
                 except:
                     hostname = 'unknown'
                 if hostname == None or len(hostname) == 0:
                     hostname = 'unknown'
                 self.APclients[data[4]] = {
                     'IP': data[2],
                     'device': hostname,
                     'MAC': data[4],
                     'Vendors': self.get_mac_vendor(data[4])
                 }
                 self.add_DHCP_Requests_clients(data[4],
                                                self.APclients[data[4]])
     if self.APclients != {}:
         self.add_data_into_QTableWidget(self.APclients)
         self.parent.connectedCount.setText(
             str(len(self.HomeDisplay.ClientTable.APclients.keys())))
Пример #7
0
    def GetDHCPRequests(self,data):
        if len(data) == 8:
            if Refactor.check_is_mac(data[4]):
                if data[4] not in self.APclients.keys():
                    self.APclients[data[4]] = {'IP': data[2],
                    'device': sub(r'[)|(]',r'',data[5]),'in_tables': False,}
                    self.StatusDHCPRequests(data[4],self.APclients[data[4]])
        elif len(data) == 9:
            if Refactor.check_is_mac(data[5]):
                if data[5] not in self.APclients.keys():
                    self.APclients[data[5]] = {'IP': data[2],
                    'device': sub(r'[)|(]',r'',data[6]),'in_tables': False,}
                    self.StatusDHCPRequests(data[5],self.APclients[data[5]])
        elif len(data) == 7:
            if Refactor.check_is_mac(data[4]):
                if data[4] not in self.APclients.keys():
                    leases = IscDhcpLeases('/var/lib/dhcp/dhcpd.leases')
                    hostname = None
                    try:
                        for item in leases.get():
                            if item.ethernet == data[4]:
                                hostname = item.hostname
                        if hostname == None:
                            item = leases.get_current()
                            hostname = item[data[4]]
                    except:
                        hostname = 'unknown'
                    if hostname == None:hostname = 'unknown'
                    self.APclients[data[4]] = {'IP': data[2],'device': hostname,
                    'in_tables': False,}
                    self.StatusDHCPRequests(data[4],self.APclients[data[4]])

        Headers = []
        for mac in self.APclients.keys():
            if self.APclients[mac]['in_tables'] == False:
                self.APclients[mac]['in_tables'] = True
                self.THeaders['mac-address'].append(mac)
                self.THeaders['ip-address'].append(self.APclients[mac]['IP'])
                self.THeaders['device'].append(self.APclients[mac]['device'])
                for n, key in enumerate(self.THeaders.keys()):
                    Headers.append(key)
                    for m, item in enumerate(self.THeaders[key]):
                        item = QTableWidgetItem(item)
                        item.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter)
                        self.TabInfoAP.setItem(m, n, item)
                self.TabInfoAP.setHorizontalHeaderLabels(self.THeaders.keys())
        self.connectedCount.setText(str(len(self.APclients.keys())))
Пример #8
0
 def GetDHCPRequests(self, data):
     if len(data) == 8:
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.APclients.keys():
                 self.APclients[data[4]] = {"IP": data[2], "device": data[5], "in_tables": False}
                 self.StatusDHCPRequests(data[4])
     elif len(data) == 9:
         if Refactor.check_is_mac(data[5]):
             if data[5] not in self.APclients.keys():
                 self.APclients[data[5]] = {"IP": data[2], "device": data[6], "in_tables": False}
                 self.StatusDHCPRequests(data[5])
     elif len(data) == 7:
         if Refactor.check_is_mac(data[4]):
             if data[4] not in self.APclients.keys():
                 leases = IscDhcpLeases("Settings/dhcp/dhcpd.leases")
                 hostname = None
                 try:
                     for item in leases.get():
                         if item.ethernet == data[4]:
                             hostname = item.hostname
                     if hostname == None:
                         item = leases.get_current()
                         hostname = item[data[4]]
                 except:
                     hostname = "unknown"
                 if hostname == None:
                     hostname = "unknown"
                 self.APclients[data[4]] = {"IP": data[2], "device": hostname, "in_tables": False}
                 self.StatusDHCPRequests(data[4])
                 self.APclients[data[4]] = {"IP": data[2], "device": hostname, "in_tables": False}
     Headers = []
     for mac in self.APclients.keys():
         if self.APclients[mac]["in_tables"] == False:
             self.APclients[mac]["in_tables"] = True
             self.THeaders["mac-address"].append(mac)
             self.THeaders["ip-address"].append(self.APclients[mac]["IP"])
             self.THeaders["device"].append(self.APclients[mac]["device"])
             for n, key in enumerate(self.THeaders.keys()):
                 Headers.append(key)
                 for m, item in enumerate(self.THeaders[key]):
                     item = QTableWidgetItem(item)
                     item.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter)
                     self.TabInfoAP.setItem(m, n, item)
             self.TabInfoAP.setHorizontalHeaderLabels(self.THeaders.keys())
     self.connectedCount.setText(str(len(self.APclients.keys())))
Пример #9
0
    def run_normalizer(self, timestamp):
        """
        :return: raw_devices
        """

        try:

            log_content = IscDhcpLeases(self.logfile)
            current_devices = log_content.get_current()

            if len(current_devices) > 0:

                for device in current_devices:
                    yield SampleDevice(deviceIP=current_devices[device].ip, deviceTimeStamp=timestamp,
                                       deviceStatus=c.DEVICE_STATUS_INIT, deviceServicePlugin=c.SERVICEPLUGIN_DHCP)

        except IOError:
            self.logger.info('PROVLOG: Can\'t open logfile: %s ', self.logfile)
            sys.exit()
Пример #10
0
# https://github.com/MartijnBraam/python-isc-dhcp-leases

leasefile = "/var/lib/dhcpd/dhcpd.leases"

import web
from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases  # Lease and IscDhcpLeases

# For SSL support:
#from web.wsgiserver import CherryPyWSGIServer
#CherryPyWSGIServer.ssl_certificate = "/path/to/ssl_certificate"
#CherryPyWSGIServer.ssl_private_key = "/path/to/ssl_private_key"

urls = (
    '/ip_by_mac/(.*)', 'get_ip_by_mac',
)

app = web.application(urls, globals())

leases = IscDhcpLeases(leasefile)
cur_leases = leases.get_current()

class get_ip_by_mac:
    def GET(self, mac):
        if mac not in cur_leases.keys():
            return "None"
        this_lease = cur_leases[mac]
        return str(this_lease.ip)

if __name__ == "__main__":
    app.run()
Пример #11
0
from isc_dhcp_leases.iscdhcpleases import Lease, IscDhcpLeases
import socket
import time

leases = IscDhcpLeases('/var/lib/dhcp/dhcpd.leases')
active_leases = leases.get_current()
print('ffrn.' + socket.getfqdn() + '.dhcp.active_leases ' +
      str(len(active_leases)) + ' ' + str(int(time.time())))