For a number of years I maintained a small collection of open source
written in Bash. The main purpose of these scripts was to act as a
wrapper around other open source tools. Why try to remember long and
awkward command line parameters, when you can ask a script to do that
for you ?
Bash was chosen, as it was distribution-independent. It works almost
everywhere (although sometimes OSX support is troublesome, due to
outdated Bash versions).
After more and more (requested) features crept in, the
Bash script became more and more complex. That's
why I decided to port the script to Python. In my experience, it's
at-least-as portable, and the usage of third party (pip) packages means
that less time is spent on re-inventing the weel, and more on the actual
Yes, sometimes people talk about the dependency hell of Python, and in
some cases, the usage of third party packages means you have to be
careful of what you're doing.
However, when using virtual environments each Python script and its
dependencies can be safely separated from the 'main' Python. For
example, the following commands create a separate virtual environment
for the security scripts repo:
`` cd security-scripts virtualenv .``
Voila, a safe working environment. As Linux and Windows virtual
environments differ a bit, the following commands can be used to
switch to the virtual environment and works on either platform.
`` [[ -f bin/activate ]] && source bin/activate [[ -f Scripts/activate ]] && source Scripts/activate``
The following command installs the recommended pip packages (currently
`` pip install -r requirements.txt``
If you want to switch back to the main environment, use the command
Although the Python version of
script doesn't have
all the functionality the Bash version has (yet), it already contains
a significant number of other features, and is a bit smarter with
regards to working on a large number of hosts.
For instance, when running the script on a subnet, it first creates a
queuefile containing all targeted hosts. If a host has been scanned,
it will automatically be removed from the queuefile. The script
doesn't handle forks and subprocesses (yet), but you can safely
execute it in parallel specifying different queue- and output files.
The script can be found on
As always, feedback and pull requests are appreciated :smile: