diff --git a/back/pialert.py b/back/pialert.py index 5582bb1f..75a11163 100644 --- a/back/pialert.py +++ b/back/pialert.py @@ -34,6 +34,7 @@ import csv #=============================================================================== PIALERT_BACK_PATH = os.path.dirname(os.path.abspath(__file__)) PIALERT_PATH = PIALERT_BACK_PATH + "/.." +STOPARPSCAN = PIALERT_PATH + "/db/setting_stoparpscan" if (sys.version_info > (3,0)): exec(open(PIALERT_PATH + "/config/version.conf").read()) @@ -81,8 +82,10 @@ def main (): res = update_devices_MAC_vendors() elif cycle == 'update_vendors_silent': res = update_devices_MAC_vendors('-s') - else : + elif os.path.exists(STOPARPSCAN) == False : res = scan_network() + elif os.path.exists(STOPARPSCAN) == True : + res = 0 # Check error if res != 0 : @@ -457,7 +460,6 @@ def execute_arpscan (pRetries): # Default arp-scan # arpscan_args = ['sudo', 'arp-scan', SCAN_SUBNETS, '--ignoredups', '--retry=' + str(pRetries)] - # print (arpscan_args) # TESTING - Fast Scan diff --git a/docs/img/5_maintain.jpg b/docs/img/5_maintain.jpg index 98ec38b9..00d33b05 100644 Binary files a/docs/img/5_maintain.jpg and b/docs/img/5_maintain.jpg differ diff --git a/front/css/dark-patch.css b/front/css/dark-patch.css index 5acac727..799786fb 100644 --- a/front/css/dark-patch.css +++ b/front/css/dark-patch.css @@ -664,3 +664,19 @@ input[type="password"]::-webkit-caps-lock-indicator { .db_info_table_cell:nth-child(1) {background: #272c30} .db_info_table_cell:nth-child(2) {background: #272c30} +.db_tools_table_cell_a:nth-child(1) {background: #272c30} +.db_tools_table_cell_a:nth-child(2) {background: #272c30} +.db_tools_table_cell_b:nth-child(1) {background: #272c30} +.db_tools_table_cell_b:nth-child(2) {background: #272c30} + +.db_info_table { + display: table; + border-spacing: 0em; + font-weight: 400; + font-size: 15px; + width: 95%; + margin: auto; + margin-top: 40px; + margin-bottom: 40px; + border: solid 1px #606060; +} diff --git a/front/css/pialert.css b/front/css/pialert.css index 8b6bf4bf..14217cdf 100644 --- a/front/css/pialert.css +++ b/front/css/pialert.css @@ -11,50 +11,49 @@ Global Variables ----------------------------------------------------------------------------- */ :root { - --color-aqua: #00c0ef; - --color-green: #00a65a; + --color-aqua: #00c0ef; + --color-green: #00a65a; --color-yellow: #f39c12; - --color-red: #dd4b39; + --color-red: #dd4b39; } - /* ----------------------------------------------------------------------------- Text Classes ----------------------------------------------------------------------------- */ .text-center { - text-align: center; + text-align: center; } .text-right { - text-align: right; + text-align: right; } .text-white { - color: white; + color: white; } .text-gray50 { - color: #808080; + color: #808080; } .text-gray-20 { - color: rgba(192,192,192,20%); + color: rgba(192, 192, 192, 20%); } .text-aqua-20 { - color: rgba(0,192,239,20%); + color: rgba(0, 192, 239, 20%); } .text-green-20 { - color: rgba(0,166,90,20%); + color: rgba(0, 166, 90, 20%); } .text-yellow-20 { - color: rgba(243,156,18,20%); + color: rgba(243, 156, 18, 20%); } .text-red-20 { - color: rgba(221,75,57,20%); + color: rgba(221, 75, 57, 20%); } .no-border { @@ -65,94 +64,82 @@ Main Sections ----------------------------------------------------------------------------- */ .content-header { - padding-top: 5px; + padding-top: 5px; } -.content-header > .breadcrumb { - background: transparent; +.content-header>.breadcrumb { + background: transparent; } .content { - padding-bottom: 0px; + padding-bottom: 0px; } .box-body { - padding-top: 0px; - padding-bottom: 0px; + padding-top: 0px; + padding-bottom: 0px; } .main-footer { - padding: 5px; - color: gray; + padding: 5px; + color: gray; } - /* ----------------------------------------------------------------------------- Customized Main Menu ----------------------------------------------------------------------------- */ .main-header .logo { - width: 150px; + width: 150px; } -.main-header > .navbar { - margin-left: 150px; +.main-header>.navbar { + margin-left: 150px; } -.main-sidebar, .left-side { - width: 150px; +.main-sidebar, +.left-side { + width: 150px; } -.content-wrapper, .right-side, .main-footer { - margin-left: 150px; +.content-wrapper, +.right-side, +.main-footer { + margin-left: 150px; } @media (max-width: 767px) { - .main-header .logo { - width: 100%; - } + .main-header .logo { + width: 100%; + } - .main-header .navbar { - margin: 0; - } - - .content-wrapper, .main-footer { - margin-left: 0px; - } - - .fix_maintain_section { - min-height: 650px; - } + .main-header .navbar { + margin: 0; + } + .content-wrapper, + .main-footer { + margin-left: 0px; + } } - -@media (max-width: 520px) { - .fix_maintain_section { - min-height: 900px; - } - -} - -.sidebar-open .content-wrapper, .sidebar-open .main-footer { +.sidebar-open .content-wrapper, +.sidebar-open .main-footer { -webkit-transform: translate(150px, 0); -ms-transform: translate(150px, 0); -o-transform: translate(150px, 0); transform: translate(150px, 0) } - -.skin-yellow-light .sidebar-menu > li > a:hover { +.skin-yellow-light .sidebar-menu>li>a:hover { background: #f0f0f0; border-left-color: rgb(243, 156, 18); } -.skin-yellow-light .sidebar-menu > li.active > a { +.skin-yellow-light .sidebar-menu>li.active>a { background: #e0e0e0; border-left-color: rgb(243, 156, 18); } - - /* ----------------------------------------------------------------------------- Customized Boxes ----------------------------------------------------------------------------- */ @@ -163,185 +150,183 @@ } .pa-small-box-2 .inner h3 { - margin-left: 0em; - margin-bottom: 1.3em; + margin-left: 0em; + margin-bottom: 1.3em; } .pa-small-box-footer { - color: white !important; - font-size: 18px; + color: white !important; + font-size: 18px; } - /* -------------------------------------------------------------------------- */ .pa-small-box-aqua { - border-top: 3px solid #00c0ef; - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); + border-top: 3px solid #00c0ef; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); } .pa-small-box-aqua .inner { - color: #00c0ef; - background-color:#FFFFFF; + color: #00c0ef; + background-color: #FFFFFF; } .pa-small-box-aqua .inner h3 { - margin-left: 0.5em; + margin-left: 0.5em; } .pa-small-box-aqua .icon { - color: #00c0ef; + color: #00c0ef; } /* -------------------------------------------------------------------------- */ .pa-small-box-green { - border-top: 3px solid #00a65a; - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); + border-top: 3px solid #00a65a; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); } .pa-small-box-green .inner { - color: #00a65a; - background-color:#FFFFFF; + color: #00a65a; + background-color: #FFFFFF; } .pa-small-box-green .inner h3 { - margin-left: 0.5em; + margin-left: 0.5em; } .pa-small-box-green .icon { - color: #00a65a; + color: #00a65a; } /* -------------------------------------------------------------------------- */ -.pa-small-box-yellow { - border-top: 3px solid #f39c12; - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); +.pa-small-box-yellow { + border-top: 3px solid #f39c12; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); } .pa-small-box-yellow .inner { - color: #f39c12; - background-color:#FFFFFF; + color: #f39c12; + background-color: #FFFFFF; } .pa-small-box-yellow .inner h3 { - margin-left: 0.5em; + margin-left: 0.5em; } .pa-small-box-yellow .icon { - color: #f39c12; + color: #f39c12; } /* -------------------------------------------------------------------------- */ .pa-small-box-red { - border-top: 3px solid #dd4b39; - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); + border-top: 3px solid #dd4b39; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); } .pa-small-box-red .inner { - color: #dd4b39; - background-color:#FFFFFF; + color: #dd4b39; + background-color: #FFFFFF; } .pa-small-box-red .inner h3 { - margin-left: 0.5em; + margin-left: 0.5em; } .pa-small-box-red .icon { - color: #dd4b39; + color: #dd4b39; } - /* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ .pa-small-box-gray { - border-top: 3px solid #a0a0a0; - box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); + border-top: 3px solid #a0a0a0; + box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); } .pa-small-box-gray .inner { - color: #a0a0a0; - background-color:#FFFFFF; + color: #a0a0a0; + background-color: #FFFFFF; } .pa-small-box-gray .inner h3 { - margin-left: 0.5em; + margin-left: 0.5em; } .pa-small-box-gray .icon { - color: #a0a0a0; + color: #a0a0a0; } - /* ----------------------------------------------------------------------------- Customized Box Borders ----------------------------------------------------------------------------- */ .box.box-aqua { - border-top-color: #00c0ef; + border-top-color: #00c0ef; } .box.box-green { - border-top-color: #00a65a; + border-top-color: #00a65a; } .box.box-yellow { - border-top-color: #f39c12; + border-top-color: #f39c12; } .box.box-red { - border-top-color: #dd4b39; + border-top-color: #dd4b39; } - /* ----------------------------------------------------------------------------- Custom Border ----------------------------------------------------------------------------- */ .bottom-border-aqua { - border-bottom-color: #00c0ef; - border-bottom-style: solid; - border-bottom-width: 3px + border-bottom-color: #00c0ef; + border-bottom-style: solid; + border-bottom-width: 3px } .bottom-border-primary { - border-bottom-color: #3c8dbc; - border-bottom-style: solid; - border-bottom-width: 3px + border-bottom-color: #3c8dbc; + border-bottom-style: solid; + border-bottom-width: 3px } - /* ----------------------------------------------------------------------------- Customized Tabs ----------------------------------------------------------------------------- */ .nav-tabs-custom { - background: transparent; + background: transparent; } -.nav > li > a { +.nav>li>a { position: relative; display: block; padding: 10px 10px; } - /* ----------------------------------------------------------------------------- Customized Menu dropdown ----------------------------------------------------------------------------- */ .dropdown-menu { max-height: 250px; overflow-x: hidden; - box-shadow: 0px 3px 20px rgba(0,0,0,0.2); + box-shadow: 0px 3px 20px rgba(0, 0, 0, 0.2); } - /* ----------------------------------------------------------------------------- Default Table config ----------------------------------------------------------------------------- */ -.table > tbody > tr > td { - padding:4px; +.table>tbody>tr>td { + padding: 4px; } -.table-hover tbody tr:hover td, .table-hover tbody tr:hover th { - background-color: #FFFFD0; +.table-hover tbody tr:hover td, +.table-hover tbody tr:hover th { + background-color: #FFFFD0; } -.dataTables_info, .dataTables_paginate, .dataTables_length, .dataTables_filter { - color: #B0B0B0; +.dataTables_info, +.dataTables_paginate, +.dataTables_length, +.dataTables_filter { + color: #B0B0B0; } /* ----------------------------------------------------------------------------- @@ -353,27 +338,29 @@ } .pa-btn-delete { - border-color:#ffb060; - background-color:#ffd080; + border-color: #ffb060; + background-color: #ffd080; } .pa-btn-delete:hover { - border-color:#ffb060; - background-color:#ffb060; + border-color: #ffb060; + background-color: #ffb060; } -.pa-btn-records, .pa-btn-records:hover, .pa-btn-records:focus, .pa-btn-records:active { - border-color:#ddd; - background-color:#f4f4f4; +.pa-btn-records, +.pa-btn-records:hover, +.pa-btn-records:focus, +.pa-btn-records:active { + border-color: #ddd; + background-color: #f4f4f4; cursor: default; } - /* ----------------------------------------------------------------------------- Customized Full Calendar ----------------------------------------------------------------------------- */ .fc h2 { - font-size: 20px; + font-size: 20px; } .fc-weekend { @@ -392,7 +379,9 @@ background-color: #FFF0E0; } -.fc-resized-row { height: 26px !important; } +.fc-resized-row { + height: 26px !important; +} .fc-transparent-border { border-Color: transparent !important; @@ -407,82 +396,131 @@ border-right: 5px solid #606060; } - - /* ----------------------------------------------------------------------------- Spin ----------------------------------------------------------------------------- */ .pa_semitransparent-panel { position: absolute; - width: 100%; //calc (100% -40px); - height: 100%; + width: 100%; //calc (100% -40px); + height: 100%; left: 0; top: 0; - display: block; + display: block; - opacity: 0.8; + opacity: 0.8; background-color: #fff; - z-index: 99; + z-index: 99; } .pa_spinner { - position: absolute; - left: 0; - right: 0; - top: 20px; - margin-left: auto; + position: absolute; + left: 0; + right: 0; + top: 20px; + margin-left: auto; margin-right: auto; - padding: 15px; - width: 200px; + padding: 15px; + width: 200px; background-color: #fff; - z-index: 100; + z-index: 100; } /* ----------------------------------------------------------------------------- Notification float banner ----------------------------------------------------------------------------- */ .pa_alert_notification { - text-align: center; - font-size: large; - font-weight: bold; - color: #258744; + text-align: center; + font-size: large; + font-weight: bold; + color: #258744; background-color: #d4edda; - border-color: #c3e6cb; - border-radius: 5px; + border-color: #c3e6cb; + border-radius: 5px; - max-width: 1000px; /* 80% wrapper 1250px */ - width: 80%; - z-index: 9999; + max-width: 1000px; + /* 80% wrapper 1250px */ + width: 80%; + z-index: 9999; - position: fixed; - top: 30px; - margin: auto; - transform: translate(0,0); + position: fixed; + top: 30px; + margin: auto; + transform: translate(0, 0); - display: none; + display: none; } .dbtools-button { - margin: 5px; display: inline-block; width: 140px; height: 100px; white-space: normal; word-wrap: break-word; font-size: 16px; border-radius: 10px; margin-bottom: 25px; + display: inline-block; + width: 160px; + height: 60px; + white-space: normal; + word-wrap: break-word; + font-size: 16px; + border-radius: 10px; + padding: 4px; } -.db_info_table_cell:nth-child(1) {background: white} -.db_info_table_cell:nth-child(2) {background: white} - - -.db_info_table { - display: table; - border-spacing: 0em; - font-weight: 400; - font-size: 15px; - width: 95%; - margin: auto; - margin-top: 40px; - margin-bottom: 40px; - border: solid 1px #ddd; +.db_info_table_cell:nth-child(1) { + background: white } -.db_info_table_row {display: table-row; padding: 3px; } -.db_info_table_cell {display: table-cell; padding: 3px; padding-left: 10px;} +.db_info_table_cell:nth-child(2) { + background: white +} + +.db_tools_table_cell_a:nth-child(1) { + background: white +} + +.db_tools_table_cell_a:nth-child(2) { + background: white +} +.db_tools_table_cell_b:nth-child(1) { + background: white +} + +.db_tools_table_cell_b:nth-child(2) { + background: white +} +.db_info_table { + display: table; + border-spacing: 0em; + font-weight: 400; + font-size: 15px; + width: 95%; + margin: auto; + margin-top: 40px; + margin-bottom: 40px; + border: solid 1px #ddd; +} + +.db_info_table_row { + display: table-row; + padding: 3px; +} + +.db_info_table_cell { + display: table-cell; + padding: 3px; + padding-left: 10px; +} + +.db_tools_table_cell_a { + display: table-cell; + text-align: center; + padding: 10px; + min-width: 180px; + width: 20%; + vertical-align: middle; +} +.db_tools_table_cell_b { + display: table-cell; + text-align: justify; + font-size: 16px; + vertical-align: middle; + padding: 10px; + padding-right: 15px; +} \ No newline at end of file diff --git a/front/maintenance.php b/front/maintenance.php index a37f27a6..27fe8792 100644 --- a/front/maintenance.php +++ b/front/maintenance.php @@ -28,7 +28,7 @@ -
+
&1'; -$pia_arpscans = ""; -exec($execstring, $pia_arpscans); -$execstring = 'ps -f -u pi | grep "nmap" 2>&1'; -$pia_nmapscans = ""; -exec($execstring, $pia_nmapscans); +if (!file_exists('../db/setting_stoparpscan')) { + $execstring = 'ps -f -u root | grep "sudo arp-scan" 2>&1'; + $pia_arpscans = ""; + exec($execstring, $pia_arpscans); + $pia_arpscans_result = sizeof($pia_arpscans).' scan(s) currently running'; +} else { + $pia_arpscans_result = 'arp-scan is currently disabled'; +} $Pia_Archive_Path = str_replace('front', 'db', getcwd()).'/'; $Pia_Archive_count = 0; @@ -91,77 +93,121 @@ if (submit) { ?>
-
-
Database-Path
-
-
-
-
Database-Size
-
-
-
-
last Modification
-
-
-
-
DB Backup
-
-
-
-
Scan Status (arp)
-
scan(s) currently running
-
-
-
Scan Status (nmap)
-
scan(s) currently running
-
+
+
Database-Path
+
+ +
+
+
+
Database-Size
+
+ +
+
+
+
last Modification
+
+ +
+
+
+
DB Backup
+
+ +
+
+
+
Scan Status (arp)
+
+
+
-
-
-
Theme Selection:
-
-
-
-
-
+
+
+
Theme Selection:
+
+
+
+ +
+
+
-
- - - - - - - - - - - - - - - +
+
+
+ +
+
Toggle between dark mode and light mode. If the switch does not work properly, try to clear the browser cache.
+
+
+ +
+
Switching the arp-scan on or off. When the scan has been switched off it remains off until it is activated again. Active scans are not canceled.
+
+
+
+ +
+
Before using this function, please make a backup. The deletion cannot be undone. All devices without MAC will be deleted from the database.
+
+
+
+ +
+
Before using this function, please make a backup. The deletion cannot be undone. All devices will be deleted from the database.
+
+
+
+ +
+
Before using this function, please make a backup. The deletion cannot be undone. All devices named (unknown) will be deleted from the database.
+
+
+
+ +
+
Before using this function, please make a backup. The deletion cannot be undone. All events in the database will be deleted. At that moment the presence of all devices will be reset. This can lead to invalid sessions. + This means that devices are displayed as "present" although they are offline. A scan while the device in question is online solves the problem.
+
+
+
+ +
+
The database backups are located in the database directory as a zip-archive, named with the creation date. There is no maximum number of backups.
+
+
+
+ +
+
The latest backup can be restored via the button, but older backups can only be restored manually. After the restore, make an integrity check on + the database for safety, in case the db was currently in write access when the backup was created.
+
+
+ +
@@ -170,7 +216,6 @@ if (submit) { - // delete devices with emty macs - function askDeleteDevicesWithEmptyMACs () { // Ask showModalWarning('Delete Devices', 'Are you sure you want to delete all devices with empty MAC addresses?
(maybe you prefer to archive it)', 'Cancel', 'Delete', 'deleteDevicesWithEmptyMACs'); } - - function deleteDevicesWithEmptyMACs() { // Delete device @@ -202,8 +244,6 @@ function askDeleteAllDevices () { showModalWarning('Delete Devices', 'Are you sure you want to delete all devices?', 'Cancel', 'Delete', 'deleteAllDevices'); } - - function deleteAllDevices() { // Delete device @@ -218,8 +258,6 @@ function askDeleteUnknown () { showModalWarning('Delete (unknown) Devices', 'Are you sure you want to delete all (unknown) devices?', 'Cancel', 'Delete', 'deleteUnknownDevices'); } - - function deleteUnknownDevices() { // Execute @@ -234,8 +272,6 @@ function askDeleteEvents () { showModalWarning('Delete Events', 'Are you sure you want to delete all Events?', 'Cancel', 'Delete', 'deleteEvents'); } - - function deleteEvents() { // Execute @@ -251,8 +287,6 @@ function askPiaBackupDBtoArchive () { showModalWarning('DB Backup', 'Are you sure you want to exectute the the DB Backup? Be sure that no scan is currently running.', 'Cancel', 'Run Backup', 'PiaBackupDBtoArchive'); } - - function PiaBackupDBtoArchive() { // Execute @@ -268,8 +302,6 @@ function askPiaRestoreDBfromArchive () { showModalWarning('DB Restore', 'Are you sure you want to exectute the the DB Restore? Be sure that no scan is currently running.', 'Cancel', 'Run Restore', 'PiaRestoreDBfromArchive'); } - - function PiaRestoreDBfromArchive() { // Execute @@ -284,8 +316,6 @@ function askPiaEnableDarkmode () { showModalWarning('Switch Theme', 'After the theme switch, the page tries to reload itself to activate the change. If necessary, the cache must be cleared.', 'Cancel', 'Switch', 'PiaEnableDarkmode'); } - - function PiaEnableDarkmode() { // Execute @@ -294,6 +324,20 @@ function PiaEnableDarkmode() }); } +// Toggle the Arp-Scans +function askPiaToggleArpScan () { + // Ask + showModalWarning('Toggle arp-Scan on or off', 'When the scan has been switched off it remains off until it is activated again.', + 'Cancel', 'Switch', 'PiaToggleArpScan'); +} +function PiaToggleArpScan() +{ + // Execute + $.get('php/server/devices.php?action=PiaToggleArpScan', function(msg) { + showMessage (msg); + }); +} + diff --git a/front/php/server/devices.php b/front/php/server/devices.php index abee84d2..d8151fdd 100644 --- a/front/php/server/devices.php +++ b/front/php/server/devices.php @@ -42,6 +42,7 @@ case 'PiaBackupDBtoArchive': PiaBackupDBtoArchive(); break; case 'PiaRestoreDBfromArchive': PiaRestoreDBfromArchive(); break; case 'PiaEnableDarkmode': PiaEnableDarkmode(); break; + case 'PiaToggleArpScan': PiaToggleArpScan(); break; case 'getDevicesTotals': getDevicesTotals(); break; case 'getDevicesList': getDevicesList(); break; @@ -318,10 +319,10 @@ function PiaRestoreDBfromArchive() { } //------------------------------------------------------------------------------ -// Switch Themes +// Toggle Dark/Light Themes //------------------------------------------------------------------------------ function PiaEnableDarkmode() { - $file = '../../../db/darkmode'; + $file = '../../../db/setting_darkmode'; if (file_exists($file)) { echo 'Darkmode Disabled'; @@ -335,6 +336,22 @@ function PiaEnableDarkmode() { } +//------------------------------------------------------------------------------ +// Toggle on/off Arp-Scans +//------------------------------------------------------------------------------ +function PiaToggleArpScan() { + $file = '../../../db/setting_stoparpscan'; + + if (file_exists($file)) { + echo 'Arp-Scan Enabled'; + unlink($file); + echo(""); + } else { + echo 'Arp-Scan Disabled'; + $startarpscan = fopen($file, 'w'); + echo(""); + } + } //------------------------------------------------------------------------------ // Query total numbers of Devices by status diff --git a/front/php/templates/footer.php b/front/php/templates/footer.php index a5cdd03d..ae604c36 100644 --- a/front/php/templates/footer.php +++ b/front/php/templates/footer.php @@ -17,7 +17,6 @@ $conf_data = parse_ini_file($conf_file); echo '© '. $conf_data['VERSION_YEAR'] .' Puche'; ?> -
diff --git a/front/php/templates/header.php b/front/php/templates/header.php index 662ab471..d226e7e1 100644 --- a/front/php/templates/header.php +++ b/front/php/templates/header.php @@ -9,7 +9,7 @@ - +