diff --git a/front/css/app.css b/front/css/app.css index dea0ce5c..5afd72ee 100755 --- a/front/css/app.css +++ b/front/css/app.css @@ -31,7 +31,11 @@ { width: 100%; } -.logs-row button{ +.logs-row .button-wrap{ + /* margin: 2px; */ + +} +.logs-row .button{ margin: 2px; } .logs-row diff --git a/front/php/components/logs.php b/front/php/components/logs.php index 840900f3..feeb0242 100755 --- a/front/php/components/logs.php +++ b/front/php/components/logs.php @@ -29,16 +29,26 @@ function renderLogArea($params) { // Prepare buttons HTML $buttonsHtml = ''; + $totalButtons = count($buttons); + if ($totalButtons > 0) { + $colClass = 12 / $totalButtons; + // Use $colClass in your HTML generation or further logic + } else { + // Handle case where $buttons array is empty + $colClass = 12; + } + foreach ($buttons as $button) { $labelStringCode = isset($button['labelStringCode']) ? $button['labelStringCode'] : ''; $event = isset($button['event']) ? $button['event'] : ''; $buttonsHtml .= ' -
- +
+
'; } + // Render the log area HTML $html = '
@@ -48,12 +58,12 @@ function renderLogArea($params) { '
-
' . htmlspecialchars($fileName) . ' +
' . htmlspecialchars($fileName) . '
' . number_format((filesize($filePath) / 1000000), 2, ",", ".") . ' MB' . $downloadButtonHtml . '
-
' +
' . $buttonsHtml . '
diff --git a/front/php/templates/language/es_es.json b/front/php/templates/language/es_es.json old mode 100644 new mode 100755 index 53a87299..53d83824 --- a/front/php/templates/language/es_es.json +++ b/front/php/templates/language/es_es.json @@ -767,4 +767,4 @@ "settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. O la validación no se realiza.", "test_event_icon": "fa-vial-circle-check", "test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes." -} +} \ No newline at end of file diff --git a/front/php/templates/language/it_it.json b/front/php/templates/language/it_it.json index a8fa952a..6e719823 100755 --- a/front/php/templates/language/it_it.json +++ b/front/php/templates/language/it_it.json @@ -687,4 +687,4 @@ "settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. La convalida non viene eseguita.", "test_event_icon": "fa-vial-circle-check", "test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni." -} +} \ No newline at end of file diff --git a/front/php/templates/language/pl_pl.json b/front/php/templates/language/pl_pl.json old mode 100644 new mode 100755 index 5e21518b..96251f94 --- a/front/php/templates/language/pl_pl.json +++ b/front/php/templates/language/pl_pl.json @@ -687,4 +687,4 @@ "settings_update_item_warning": "Zaktualizuj poniższą wartość. Zachowaj ostrożność i postępuj zgodnie z poprzednim formatem. Walidacja nie jest wykonywana.", "test_event_icon": "fa-vial-circle-check", "test_event_tooltip": "Zapisz zmiany zanim będziesz testować swoje ustawienia." -} +} \ No newline at end of file diff --git a/front/plugins/snmp_discovery/README.md b/front/plugins/snmp_discovery/README.md index b598dde4..52ce83e0 100755 --- a/front/plugins/snmp_discovery/README.md +++ b/front/plugins/snmp_discovery/README.md @@ -1,17 +1,19 @@ ## Overview -A plugin for importing devices from an SNMP enabled router or switch. Using SNMP offers an efficient way to discover IPv4 devices across one or more networks/subnets/vlans. +A plugin for importing devices from an SNMP-enabled router or switch. Using SNMP offers an efficient way to discover IPv4 devices across one or more networks/subnets/vlans. ### Usage Specify the following settings in the Settings section of NetAlertX: -- `SNMPDSC_routers` - A list of `snmpwalk` commands to execute against IP addresses of roputers/switches with SNMP turned on. For example: +- `SNMPDSC_routers` - A list of `snmpwalk` commands to execute against IP addresses of routers/switches with SNMP turned on. For example: - `snmpwalk -v 2c -c public -OXsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2` - `snmpwalk -v 2c -c public -Oxsq 192.168.1.1 .1.3.6.1.2.1.3.1.1.2` (note: lower case `x`) +If unsure, please check [snmpwalk examples](https://www.comparitech.com/net-admin/snmpwalk-examples-windows-linux/). + ### Setup Cisco IOS Enable IOS SNMP service and restrict to selected (internal) IP/Subnet. @@ -35,5 +37,24 @@ show snmp ### Notes - Only IPv4 supported. -- The SNMP OID `.1.1.1.3.6.1.2.1.3.1.1.2` is specifically for devices IPv4 ARP table. This OID has been tested on Cisco ISRs and other L3 devices. Support may vary between other vendors / devices. -- Expected output (ingestion) in format `iso.3.6.1.2.1.3.1.1.2.3.1.192.168.1.2 "6C 6C 6C 6C 6C 6C "`. +- The SNMP OID `.1.1.1.3.6.1.2.1.3.1.1.2` is specifically for devices IPv4 ARP table. This OID has been tested on Cisco ISRs and other L3 devices. Support may vary between other vendors/devices. +- Expected output (ingestion) in formats: + + - `iso.3.6.1.2.1.3.1.1.2.3.1.192.168.1.2 "6C 6C 6C 6C 6C 6C "`. + - `ipNetToMediaPhysAddress[3][192.168.1.9] 6C:6C:6C:6C:6C:b6C1`. + + +### Finding your OID + +- Ssh into the router (in this example the IP of the router is `192.168.1.1`) +- On the router execute `snmptranslate -On -IR ipNetToMediaPhysAddress` (This is a UniFi router example, and the `object_id` is `ipNetToMediaPhysAddress`. This might vary between vendors, google your router manufacturer examples.) + +```bash +jokob@SecurityGateway-USG:~$ snmptranslate -On -IR ipNetToMediaPhysAddress +.1.3.6.1.2.1.4.22.1.2 +``` + +- Use the `snmpwalk -v 2c -OXsq -c public 192.168.1.1 .1.3.6.1.2.1.4.22.1.2` command in NetAlertX + + + diff --git a/front/plugins/snmp_discovery/script.py b/front/plugins/snmp_discovery/script.py index 3bb4019e..cc11fff3 100755 --- a/front/plugins/snmp_discovery/script.py +++ b/front/plugins/snmp_discovery/script.py @@ -60,11 +60,9 @@ def main(): for line in lines: - tmpSplt = line.split('"') - + tmpSplt = line.split('"') if len(tmpSplt) == 3: - ipStr = tmpSplt[0].split('.')[-4:] # Get the last 4 elements to extract the IP macStr = tmpSplt[1].strip().split(' ') # Remove leading/trailing spaces from MAC @@ -86,6 +84,26 @@ def main(): else: mylog('verbose', [f'[SNMPDSC] ipStr does not seem to contain a valid IP:', ipStr]) + + elif line.startswith('ipNetToMediaPhysAddress'): + # Format: snmpwalk -OXsq output + parts = line.split() + if len(parts) == 2: + + ipAddress = parts[0].split('[')[-1][:-1] + macAddress = parts[1] + + mylog('verbose', [f'[SNMPDSC] IP: {ipAddress} MAC: {macAddress}']) + + plugin_objects.add_object( + primaryId = handleEmpty(macAddress), + secondaryId = handleEmpty(ipAddress.strip()), + watched1 = '(unknown)', + watched2 = handleEmpty(snmpwalkArgs[6]), + extra = handleEmpty(line), + foreignKey = handleEmpty(macAddress) + ) + mylog('verbose', ['[SNMPDSC] Entries found: ', len(plugin_objects)]) plugin_objects.write_result_file()