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)
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)
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())))
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())))
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())))
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())))
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()
# 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()
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())))