Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*.egg-info
.DS_Store
.DS_Store
__pycache__
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ This document records all notable changes to [LimberDuck NFA (nessus file analyz
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.1] - 2026-01-18

### Fixed

- Software listing for ubuntu without two lines
- `+++-==========..`
- `Desired=Unknown/Install/Remove/Purge/Hold`
- Software description moved to correct column.


## [0.1.0] - 2026-01-18

Expand Down
2 changes: 1 addition & 1 deletion nfa_plugin_software_enumeration/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
Software Enumeration Plugin for NFA.
"""

__version__ = "0.1.0"
__version__ = "0.1.1"
17 changes: 11 additions & 6 deletions nfa_plugin_software_enumeration/software_enumeration.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def get_metadata(self) -> PluginMetadata:
return PluginMetadata(
name="Software Enumeration",
id="software_enumeration",
version="0.1.0",
version="0.1.1",
description="Generate inventory of installed software on Windows and Linux hosts",
author="NFA Plugin Examples",
plugin_ids=[20811, 22869]
Expand Down Expand Up @@ -195,6 +195,10 @@ def _parse_unix_software(self, plugin_output: str) -> List[Dict[str, str]]:
skip_count += 1
continue

# Skip separator lines and Debian package status legend
if stripped_line.startswith('+++') or stripped_line.startswith('Desired='):
continue

# Check for Debian/Ubuntu dpkg format: " ii/rc package version arch description"
if line.startswith(' ii') or line.startswith(' rc'):
# Remove the " ii" or " rc" prefix
Expand All @@ -204,19 +208,20 @@ def _parse_unix_software(self, plugin_output: str) -> List[Dict[str, str]]:
parts = re.split(r' +', line, maxsplit=3)

if len(parts) >= 4:
# Full format with all fields
# Full format with all fields: name version arch description
name = parts[0].strip()
version = parts[1].strip()
architecture = parts[2].strip()
description = parts[3].strip()
elif len(parts) == 3:
# Missing description
# Format without architecture: name version description
# The third field is description, not architecture
name = parts[0].strip()
version = parts[1].strip()
architecture = parts[2].strip()
description = ''
architecture = ''
description = parts[2].strip()
elif len(parts) == 2:
# Missing architecture and description
# Only name and version
name = parts[0].strip()
version = parts[1].strip()
architecture = ''
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="nfa-plugin-software-enumeration",
version="0.1.0",
version="0.1.1",
author="Damian Krawczyk",
author_email="damian.krawczyk@limberduck.org",
description="Software Enumeration report plugin for LimberDuck NFA (nessus file analyzer)",
Expand Down