Skip to content

Commit

Permalink
Extension of the NMAP functionality 07
Browse files Browse the repository at this point in the history
- Remove/streamline old code
- Prepare csv download for nmap scan per device
- Replace "static strings" with multi-language strings
- update language files

Regarding to #271
  • Loading branch information
leiweibau committed Mar 22, 2024
1 parent 292004f commit b4ea7b1
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 73 deletions.
12 changes: 0 additions & 12 deletions front/deviceDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -563,21 +563,9 @@ function speedtest_ookla(modus) {
?>
<h4 class="">Nmap Scans</h4>
<div style="width:100%; text-align: center;">
<script>

</script>

<button type="button" id="manualnmap_fast" class="btn btn-primary pa-btn" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'fast')">Loading...</button>
<button type="button" id="manualnmap_normal" class="btn btn-primary pa-btn" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'normal')">Loading...</button>
<button type="button" id="manualnmap_detail" class="btn btn-primary pa-btn" onclick="manualnmapscan(document.getElementById('txtLastIP').value, 'detail')">Loading...</button>

<!-- <div style="text-align: left;">
<ul style="padding:20px;">
<li><?=$pia_lang['DevDetail_Tools_nmap_buttonFast_text'];?></li>
<li><?=$pia_lang['DevDetail_Tools_nmap_buttonDefault_text'];?></li>
<li><?=$pia_lang['DevDetail_Tools_nmap_buttonDetail_text'];?></li>
</ul>
</div> -->
</div>

<div id="scanoutput" style="margin-top: 30px;">
Expand Down
57 changes: 57 additions & 0 deletions front/download/hostnmapresultscvs.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
foreach (glob("../db/setting_language*") as $filename) {
$pia_lang_selected = str_replace('setting_language_', '', basename($filename));
}
if (strlen($pia_lang_selected) == 0) {$pia_lang_selected = 'en_us';}

require '../php/server/db.php';
require '../php/server/journal.php';
require '../php/templates/language/' . $pia_lang_selected . '.php';

$DBFILE = '../../db/pialert.db';
$PIA_HOST_IP = $_REQUEST['host'];
$PIA_SCAN_TIME = date('Y-m-d H:i:s');

OpenDB();

function crosscheckIP($query_ip) {
global $db;

$sql = 'SELECT dev_LastIP FROM Devices WHERE dev_LastIP="' . $query_ip . '" UNION
SELECT icmp_ip AS dev_LastIP FROM ICMP_Mon WHERE icmp_ip="' . $query_ip . '"';
$result = $db->query($sql);
$row = $result->fetchArray(SQLITE3_ASSOC);
$neededIP = $row['dev_LastIP'];
return $neededIP;
}

if (filter_var($PIA_HOST_IP, FILTER_VALIDATE_IP)) {

// Check if IP is already known and in DB
$db_crosscheck = crosscheckIP($PIA_HOST_IP);
if (isset($db_crosscheck)) {

$CSVFILE = '"test","Test2","Test3"';

header('Content-Description: File Transfer');
header("Content-Type: text/csv");
header('Content-Disposition: attachment; filename=Host_'.str_replace(".", "-", $PIA_HOST_IP).'.csv');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . strlen($CSVFILE));
echo $CSVFILE;

// Logging
//pialert_logging('a_002', $_SERVER['REMOTE_ADDR'], 'LogStr_0210', '', $PIA_SCAN_MODE . ' Scan: ' . $PIA_HOST_IP);
} else {
echo "Unknown IP";
// Logging
//pialert_logging('a_002', $_SERVER['REMOTE_ADDR'], 'LogStr_0210', '', $PIA_SCAN_MODE . ' Scan: ' . $PIA_HOST_IP);
exit;}
} else {
echo "Wrong parameter";
exit;
}

?>
62 changes: 43 additions & 19 deletions front/php/server/nmap_scan.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,12 @@
// Check given host/mac
function crosscheckIP($query_ip) {
global $db;
$sql = 'SELECT * FROM Devices WHERE dev_LastIP="' . $query_ip . '"';

$sql = 'SELECT dev_LastIP FROM Devices WHERE dev_LastIP="' . $query_ip . '" UNION
SELECT icmp_ip AS dev_LastIP FROM ICMP_Mon WHERE icmp_ip="' . $query_ip . '"';
$result = $db->query($sql);
$row = $result->fetchArray(SQLITE3_ASSOC);
$neededIP = $row['dev_LastIP'];
if ($neededIP == "") {
$sql = 'SELECT * FROM ICMP_Mon WHERE icmp_ip="' . $query_ip . '"';
$result = $db->query($sql);
$row = $result->fetchArray(SQLITE3_ASSOC);
$neededIP = $row['icmp_ip'];
}
return $neededIP;
}
// Find start and end of the nmap port list
Expand Down Expand Up @@ -83,26 +79,40 @@ function create_portlist_table($portliststring) {
}

function create_scanoutput_box($date, $type, $target, $box_type) {
global $pia_lang;

if ($box_type == 'previous') {
$headline = 'Previous Nmap scan results of';
$headline = $pia_lang['DevDetail_Tools_nmap_head_prev'];
$text_color = '';}
elseif ($box_type == 'latest') {
$headline = 'Latest Nmap scan results of';
$headline = $pia_lang['DevDetail_Tools_nmap_head_latest'];
$text_color = '';}
elseif ($box_type == 'current') {
$headline = 'Current Nmap scan results of';
$headline = $pia_lang['DevDetail_Tools_nmap_head_cur'];
$text_color = "text-danger";}

if ($type == 'fast') {
$type_lang = $pia_lang['DevDetail_Tools_nmap_buttonFast'];}
elseif ($type == 'normal') {
$type_lang = $pia_lang['DevDetail_Tools_nmap_buttonDefault'];}
elseif ($type == 'detail') {
$type_lang = $pia_lang['DevDetail_Tools_nmap_buttonDetail'];}

echo '<div class="col-md-6" style="margin-bottom:20px">
<div class="row" style="padding-bottom:5px;">
<div class="col-xs-12"><p class="'.$text_color.'" style="font-size:18px">'.$headline.' ' . $target . '</p></div>
<div class="col-xs-12"><p class="'.$text_color.'" style="font-size:18px">'.$headline.'</p></div>
</div>
<div class="row" style="padding-bottom:5px;">
<div class="col-xs-4"><b>Scan Date:</b></div>
<div class="col-xs-6 '.$text_color.'"> '.$date.'</div>
<div class="col-xs-4"><b>'.$pia_lang['ookla_devdetails_table_time'].':</b></div>
<div class="col-xs-6 '.$text_color.'">'.$date.'</div>
</div>
<div class="row" style="padding-bottom:5px;">
<div class="col-xs-4"><b>Scan Mode:</b></div>
<div class="col-xs-6"> '.$type.'</div>
<div class="col-xs-4"><b>'.$pia_lang['nmap_devdetails_scanmode'].':</b></div>
<div class="col-xs-6">'.$type_lang.'</div>
</div>
<div class="row" style="padding-bottom:5px;">
<div class="col-xs-4"><b>'.$pia_lang['WebServices_tablehead_TargetIP'].':</b></div>
<div class="col-xs-6">' . $target . '</div>
</div>
<div class="row" style="">
<div class="col-xs-2 text-uppercase"><strong>Port</strong></div>
Expand Down Expand Up @@ -169,7 +179,7 @@ function create_scanoutput_box($date, $type, $target, $box_type) {

// Save to db, only if results available
$sql = 'INSERT INTO "Tools_Nmap_ManScan" ("scan_date", "scan_target", "scan_type", "scan_result", "reserve_a", "reserve_b", "reserve_c", "reserve_d") VALUES("' . $PIA_SCAN_TIME . '", "' . $PIA_HOST_IP . '", "' . $PIA_SCAN_MODE . '", "' . $PIA_SCAN_RESULT . '", "", "", "", "")';
$result = $db->exec($sql);
$result = $db->exec($sql);
} else {
echo '<div class="col-md-6">'.$pia_lang['nmap_no_scan_results'].'</div>';
}
Expand All @@ -180,6 +190,10 @@ function create_scanoutput_box($date, $type, $target, $box_type) {
echo '<div class="col-md-6">'.$pia_lang['nmap_no_scan_results'].'</div></div>';
}

$query = 'SELECT COUNT(*) AS count_entries FROM Tools_Nmap_ManScan WHERE scan_target = "' . $PIA_HOST_IP . '"';
$scancounter = $db->querySingle($query);
echo 'Es befinden sich ' . $scancounter . ' Scan-Ergebnisse in der Datenbank';

} elseif ($_REQUEST['mode'] == "view") {
// Main action (View Mode)-------------------------------------------------------
if (filter_var($PIA_HOST_IP, FILTER_VALIDATE_IP)) {
Expand All @@ -193,10 +207,20 @@ function create_scanoutput_box($date, $type, $target, $box_type) {
echo '<div class="row">';
create_scanoutput_box($row['scan_date'], $row['scan_type'], $row['scan_target'], 'latest');
create_portlist_table($row['scan_result']);
echo '</div>
</div>';
echo '</div>';

echo 'Es befinden sich ' . $scancounter . ' Scan-Ergebnisse in der Datenbank';
echo '<div class="col-md-6">
<div class="row">
<div class="col-xs-12 text-center" style="margin-top:30px">Es befinden sich ' . $scancounter . ' Scan-Ergebnisse in der Datenbank</div>
</div>';
echo ' <div class="row">
<div class="col-xs-12 text-center" style="margin-top:20px">
<button type="button" id="manualnmap_fast" class="btn btn-primary pa-btn">'.$pia_lang['nmap_devdetails_download'].'</button>
</div>
</div>
</div>';
// Close row
echo '</div>';
}
}
}
Expand Down
27 changes: 17 additions & 10 deletions front/php/templates/language/de_de.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
<?php
unset($pia_lang);

$pia_lang['Maintenance_Tool_del_nmapscans'] = 'Alle Nmap Scans löschen';
$pia_lang['Maintenance_Tool_del_nmapscans_text'] = 'Es werden alle Scan-Ergebnisse von allen Geräten gelöscht.';
$pia_lang['BackDevices_DBTools_DelNmapScans'] = 'Die Nmap-Scans wurden gelöscht.';
$pia_lang['BackDevices_DBTools_DelNmapScansError'] = 'Fehler beim löschen der Nmap-Scans.';
$pia_journ_lang['LogStr_0037'] = 'Nmap Resultate löschen';
$pia_journ_lang['LogStr_0038'] = 'Nmap Resultate löschen (mit Fehler)';

//////////////////////////////////////////////////////////////////
// About - Update by @TeroRERO 07ago2022
//////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -278,8 +271,9 @@
$pia_lang['DevDetail_Tools_WOL'] = 'Sende Wol Befehl an ';
$pia_lang['DevDetail_Tools_WOL_noti'] = 'Wake-on-LAN';
$pia_lang['DevDetail_Tools_WOL_noti_text'] = 'Das Wake-on-LAN Kommando wird an die Broadcast Adresse gesendet. Wenn das Ziel nicht in dem Subnet/vlan von Pi.Alert ist, wird das Ziel-Gerät nicht reagieren.';
$pia_lang['BackDevDetail_Tools_WOL_okay'] = 'Das Kommando wurde ausgeführt';
$pia_lang['BackDevDetail_Tools_WOL_error'] = 'Das Kommando wurde nicht ausgeführt';
$pia_lang['DevDetail_Tools_nmap_head_latest'] = 'Ergebnis des letzten Nmap Scans';
$pia_lang['DevDetail_Tools_nmap_head_cur'] = 'Ergebnis des aktuellen Nmap Scans';
$pia_lang['DevDetail_Tools_nmap_head_prev'] = 'Ergebnis des vorherigen Nmap Scans';
$pia_lang['DevDetail_Speedtest_note_a'] = 'Der automatische Speedtest startet ';
$pia_lang['DevDetail_Speedtest_note_b'] = ' und ';
$pia_lang['DevDetail_Speedtest_note_c'] = ' Uhr';
Expand Down Expand Up @@ -485,6 +479,8 @@
$pia_lang['Maintenance_Tool_del_ActHistory_noti_text'] = 'Sind Sie sicher, dass Sie die Netzwerkaktivität zurücksetzen möchten?';
$pia_lang['Maintenance_Tool_del_speedtest'] = 'Speedtest Resultate löschen';
$pia_lang['Maintenance_Tool_del_speedtest_text'] = 'Alle gespeicherten Speedtest Ergebnisse werden gelöscht. Bereits Konfigurierte automatische Speedtests werden weiterhin ausgeführt.';
$pia_lang['Maintenance_Tool_del_nmapscans'] = 'Alle Nmap Scans löschen';
$pia_lang['Maintenance_Tool_del_nmapscans_text'] = 'Es werden alle Scan-Ergebnisse von allen Geräten gelöscht.';
$pia_lang['Maintenance_Tool_loginenable'] = 'Login aktivieren';
$pia_lang['Maintenance_Tool_loginenable_text'] = 'Nach der Aktivierung gelangst du automatisch auf die Anmeldeseite. Wenn du zuvor noch kein Passwort gesetzt hast, ist "123456" das Standardpasswort.';
$pia_lang['Maintenance_Tool_loginenable_noti'] = 'Login aktivieren';
Expand Down Expand Up @@ -588,6 +584,10 @@
$pia_lang['BackDevices_table_filter_error_e'] = 'Fehler beim Erstellen der Filter-Tabelle';
$pia_lang['BackDevices_Upd_Filter'] = 'Filter erfolgreich aktualisiert.';
$pia_lang['BackDevices_Upd_FilterError'] = 'Fehler beim Aktualisieren des Filters.';
$pia_lang['BackDevices_DBTools_DelNmapScans'] = 'Die Nmap-Scans wurden gelöscht.';
$pia_lang['BackDevices_DBTools_DelNmapScansError'] = 'Fehler beim Löschen der Nmap-Scans.';
$pia_lang['BackDevDetail_Tools_WOL_okay'] = 'Das Kommando wurde ausgeführt';
$pia_lang['BackDevDetail_Tools_WOL_error'] = 'Das Kommando wurde nicht ausgeführt';

//////////////////////////////////////////////////////////////////
// Network Page
Expand Down Expand Up @@ -696,7 +696,13 @@
$pia_lang['ookla_devdetails_table_down'] = 'Download';
$pia_lang['ookla_devdetails_table_up'] = 'Upload';

//////////////////////////////////////////////////////////////////
// Manuel Nmap
//////////////////////////////////////////////////////////////////

$pia_lang['nmap_no_scan_results'] = 'Keine offenen Ports entdeckt';
$pia_lang['nmap_devdetails_scanmode'] = 'Modus';
$pia_lang['nmap_devdetails_download'] = 'Scans als CVS speichern';

// =============================================================================================================

Expand Down Expand Up @@ -768,7 +774,8 @@
$pia_journ_lang['LogStr_0034'] = 'Nicht scanbares Gerät bearbeitet (Hubs, PoE Geräte, Docker, etc.)';
$pia_journ_lang['LogStr_0035'] = 'Nicht scanbares Gerät gelöscht (Hubs, PoE Geräte, Docker, etc.)';
$pia_journ_lang['LogStr_0036'] = 'Geräte, Web Services und ICMP Hosts im CSV-Format exportiert.';

$pia_journ_lang['LogStr_0037'] = 'Nmap Resultate löschen';
$pia_journ_lang['LogStr_0038'] = 'Nmap Resultate löschen (mit Fehler)';
$pia_journ_lang['LogStr_0041'] = 'Fehler beim Speichern des vordefinierten Filters';
$pia_journ_lang['LogStr_0042'] = 'Vordefinierter Filter wurde gespeichert';
$pia_journ_lang['LogStr_0043'] = 'Vordefinierter Filter war unvollständig und wurde nicht gespeichert';
Expand Down
22 changes: 15 additions & 7 deletions front/php/templates/language/en_us.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
<?php
unset($pia_lang);

$pia_lang['Maintenance_Tool_del_nmapscans'] = 'Delete All Nmap Scans';
$pia_lang['Maintenance_Tool_del_nmapscans_text'] = 'All scan results from all devices will be deleted.';
$pia_lang['BackDevices_DBTools_DelNmapScans'] = 'The Nmap scans have been deleted.';
$pia_lang['BackDevices_DBTools_DelNmapScansError'] = 'Error deleting the Nmap scans.';
$pia_journ_lang['LogStr_0037'] = 'Delete Nmap Results';
$pia_journ_lang['LogStr_0038'] = 'Delete Nmap Results (with error)';

//////////////////////////////////////////////////////////////////
// About - Update by @TeroRERO 07ago2022
//////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -278,6 +271,9 @@
$pia_lang['DevDetail_Tools_WOL'] = 'Send Wol command to ';
$pia_lang['DevDetail_Tools_WOL_noti'] = 'Wake-on-LAN';
$pia_lang['DevDetail_Tools_WOL_noti_text'] = 'The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/vlan of Pi.Alert, the target device will not respond.';
$pia_lang['DevDetail_Tools_nmap_head_latest'] = 'Result of the latest Nmap Scan';
$pia_lang['DevDetail_Tools_nmap_head_cur'] = 'Result of the current Nmap Scan';
$pia_lang['DevDetail_Tools_nmap_head_prev'] = 'Result of the previous Nmap Scan';
$pia_lang['BackDevDetail_Tools_WOL_okay'] = 'The command was executed';
$pia_lang['BackDevDetail_Tools_WOL_error'] = 'The command was not executed';
$pia_lang['DevDetail_Speedtest_note_a'] = 'The automatic speed test starts at ';
Expand Down Expand Up @@ -485,6 +481,8 @@
$pia_lang['Maintenance_Tool_del_ActHistory_noti_text'] = 'Are you sure you want to reset the network activity?';
$pia_lang['Maintenance_Tool_del_speedtest'] = 'Delete Speed Test Results';
$pia_lang['Maintenance_Tool_del_speedtest_text'] = 'All saved Speed Test results will be deleted. Already configured automatic Speed Tests will continue to run.';
$pia_lang['Maintenance_Tool_del_nmapscans'] = 'Delete All Nmap Scans';
$pia_lang['Maintenance_Tool_del_nmapscans_text'] = 'All scan results from all devices will be deleted.';
$pia_lang['Maintenance_Tool_loginenable'] = 'Enable Login';
$pia_lang['Maintenance_Tool_loginenable_text'] = 'After activation, you will automatically be taken to the login page. If you have not set a password before, "123456" is the default password.';
$pia_lang['Maintenance_Tool_loginenable_noti'] = 'Enable Login';
Expand Down Expand Up @@ -560,6 +558,8 @@
$pia_lang['BackDevices_DBTools_DelInactHostsError'] = 'An error occurred when trying to delete inactive hosts.';
$pia_lang['BackDevices_DBTools_DelSpeedtest'] = 'The Speed Test results have been deleted.';
$pia_lang['BackDevices_DBTools_DelSpeedtestError'] = 'Error deleting Speed Test results.';
$pia_lang['BackDevices_DBTools_DelNmapScans'] = 'The Nmap scans have been deleted.';
$pia_lang['BackDevices_DBTools_DelNmapScansError'] = 'Error deleting the Nmap scans.';
$pia_lang['BackDevices_Login_disabled'] = 'Login disabled.';
$pia_lang['BackDevices_Login_enabled'] = 'Login enabled.';
$pia_lang['BackDevices_Theme_set'] = 'Theme applied';
Expand Down Expand Up @@ -691,7 +691,13 @@
$pia_lang['ookla_devdetails_table_down'] = 'Download';
$pia_lang['ookla_devdetails_table_up'] = 'Upload';

//////////////////////////////////////////////////////////////////
// Manuel Nmap
//////////////////////////////////////////////////////////////////

$pia_lang['nmap_no_scan_results'] = 'No open ports discovered';
$pia_lang['nmap_devdetails_scanmode'] = 'Mode';
$pia_lang['nmap_devdetails_download'] = 'Save All Scans as CVS';

// =============================================================================================================

Expand Down Expand Up @@ -763,6 +769,8 @@
$pia_journ_lang['LogStr_0034'] = 'Edited non-scannable device (Hubs, PoE devices, Docker, etc.)';
$pia_journ_lang['LogStr_0035'] = 'Deleted non-scannable device (Hubs, PoE devices, Docker, etc.)';
$pia_journ_lang['LogStr_0036'] = 'Devices, Web Services, and ICMP Hosts exported in CSV format.';
$pia_journ_lang['LogStr_0037'] = 'Delete Nmap Results';
$pia_journ_lang['LogStr_0038'] = 'Delete Nmap Results (with error)';
$pia_journ_lang['LogStr_0041'] = 'Error while saving the predefined filter';
$pia_journ_lang['LogStr_0042'] = 'Predefined filter has been saved';
$pia_journ_lang['LogStr_0043'] = 'Predefined filter was incomplete and was not saved';
Expand Down
Loading

0 comments on commit b4ea7b1

Please sign in to comment.