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.7.6), 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. Dependent classes are created automatically using the constructor injection by the Injector class.

Injector creates instances recursively, so classes themselves don’t have to worry where their dependencies come from. This eases both development and unit testing of the code. No frameworks nor annotations are used for this anymore.

Classes that cannot be auto-created or found are registered in the ComponentRegistry class, including implementations of Feeders, Fetchers, and Exporters.