View on GitHub

Angry IP Scanner

Fast and friendly network scanner


The easiest way to extend functionality of Angry IP Scanner is to write a plugin.

Angry IP Scanner’s source code is hosted on Github. Forking and pull-requests are very welcome! If you want to get an idea of what to do, check the bug reports.

In order to get the source code, the following command must be run (make sure you have git installed):

git clone git://

This command will fetch the current source code of the program with full history into local directory named ‘ipscan’. Or just browse the code repository on Github.

If the source of particular release is required, then you can later switch to particular tag using:

git checkout tag-name

where tag-name is the released version number (eg 3.5.5), for full list of available tags use:

git tag


In order to build the binaries, you need only to run ‘./gradlew’ in the ‘ipscan’ directory. Gradle will use the standard build.gradle script there and compile, test, and package the program for all platforms. Note: some packaging features were tested only on Linux.

The source code tree also includes the preconfigured Intellij IDEA project for convenience. Then, it can be run using the net.azib.ipscan.Main class.


If you know some language other than English well, then please help translating Angry IP Scanner into that language.

For that, you need to take the latest resources/ file, copy it with the ISO 2-letter language suffix (eg, translate all the messages and make a pull request or attach to an issue.


To test your translations, run Angry IP Scanner from the command-line after putting the translated file is in the same directory as the original jar or exe:

java -jar ipscan*.jar

Source structure


Java packages

Angry IP Scanner source code is in the net.azib.ipscan Java package.

Dependency injection

Angry IP Scanner uses dependency injection pattern in its design, provided by the Dagger 2, which was chosen for working at compile time. PicoContainer is not used anymore.

Dagger uses javax.inject annotations, thus all classes that can be injected must have an @Inject-annotated constructor. Dependent objects that are required to be provided by the injection are then either annotated as fields or constructor parameters.

Dagger then resolves these dependencies automatically, so that the classes themselves don’t have to worry where their dependencies come from. This eases both development and unit testing of the code.

Components are registered in the ComponentRegistry class.