A high performance TCP SYN port scanner.

Overview

Armada

A High-Performance TCP SYN scanner

What is Armada?

Armada is a high performance TCP SYN scanner. This is equivalent to the type of scanning that nmap might perform when you use the -sS scan type. Armada's main goal is to answer the basic question "Is this port open?". It is then up to you, or your tooling, to dig further to identify what an open port is for.

How do I install Armada?

If you don't have rustup installed, visit the rustup website and follow the instructions there to get started.

After you have cargo installed, run cargo install armada.

As Armada uses raw sockets to perform port scanning, you'll either need to be running as root or give the Armada binary the CAP_NET_RAW capability. My suggestion is the latter.

A full installation, after cargo has been installed via rustup, looks like this:

cargo install armada

sudo setcap 'cap_net_raw+ep' $(which armada)

How do I run Armada?

Armada comes with help docs by running armada -h; however, if you want to get started immediately, the typical way to perform a port scan is the following:

armada <IP or CIDR> -p <PORT or PORT RANGE>

e.g.

armada 8.8.8.0/24 -p 1-1000

Happy Scanning

Comments
  • RUST_BACKTRACE=1 problem

    RUST_BACKTRACE=1 problem

    i run this command :sudo armada --target_file sortip -p 1-444

    but output is:

    thread 'main' panicked at 'Unable to parse target ''.: IncorrectIpCIDRString', /home/k/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/args.rs:93:58 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

    opened by kacakb 6
  • Installarion problem

    Installarion problem

    Hi I'm having problems installing Armada on an Ubuntu VPS. It's Ubuntu 20.04.3 LTS and uname -r shows 5.4.0-120-generic. I install cargo via rust up with no problem. I then run cargo install armada, but everytime it gets to the Compiling armada v1.1.2 stage, it throws the errors below:

       Compiling armada v1.1.2
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:45:24
        |
    45  |             .set_style(ProgressStyle::default_spinner().template("{spinner:.yellow} Found: {msg:.green}"));
        |              --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `ProgressStyle`, found enum `Result`
        |              |
        |              arguments to this function are incorrect
        |
        = note: expected struct `ProgressStyle`
                     found enum `Result<ProgressStyle, TemplateError>`
    note: return type inferred to be `ProgressStyle` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:134:12
        |
    134 |     pub fn set_style(&self, style: ProgressStyle) {
        |            ^^^^^^^^^
    
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:46:57
        |
    46  |         found_and_stats_progress_bar.enable_steady_tick(50);
        |                                      ------------------ ^^ expected struct `Duration`, found integer
        |                                      |
        |                                      arguments to this function are incorrect
        |
    note: return type inferred to be `Duration` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:152:12
        |
    152 |     pub fn enable_steady_tick(&self, interval: Duration) {
        |            ^^^^^^^^^^^^^^^^^^
    
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:51:24
        |
    51  |             .set_style(ProgressStyle::default_spinner().template("{spinner:.yellow} In-flight Packets: {msg:.blue}"));
        |              --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `ProgressStyle`, found enum `Result`
        |              |
        |              arguments to this function are incorrect
        |
        = note: expected struct `ProgressStyle`
                     found enum `Result<ProgressStyle, TemplateError>`
    note: return type inferred to be `ProgressStyle` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:134:12
        |
    134 |     pub fn set_style(&self, style: ProgressStyle) {
        |            ^^^^^^^^^
    
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:52:50
        |
    52  |         inflight_progress_bar.enable_steady_tick(50);
        |                               ------------------ ^^ expected struct `Duration`, found integer
        |                               |
        |                               arguments to this function are incorrect
        |
    note: return type inferred to be `Duration` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:152:12
        |
    152 |     pub fn enable_steady_tick(&self, interval: Duration) {
        |            ^^^^^^^^^^^^^^^^^^
    
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:56:43
        |
    56  |         total_scan_progress_bar.set_style(ProgressStyle::default_bar().template(get_progress_stylization(&rate_limit, retries)));
        |                                 --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `ProgressStyle`, found enum `Result`
        |                                 |
        |                                 arguments to this function are incorrect
        |
        = note: expected struct `ProgressStyle`
                     found enum `Result<ProgressStyle, TemplateError>`
    note: return type inferred to be `ProgressStyle` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:134:12
        |
    134 |     pub fn set_style(&self, style: ProgressStyle) {
        |            ^^^^^^^^^
    
    error[E0308]: mismatched types
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:57:52
        |
    57  |         total_scan_progress_bar.enable_steady_tick(50);
        |                                 ------------------ ^^ expected struct `Duration`, found integer
        |                                 |
        |                                 arguments to this function are incorrect
        |
    note: return type inferred to be `Duration` here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:35:26
        |
    35  |       ) -> Vec<SocketAddr> {
        |  __________________________^
    36  | |         let mut total_open_ports = Vec::new();
    37  | |         let total_ports: u128 = targets.size() * ports.size() as u128;
    38  | |         let _total_packets = total_ports * (1 + retries) as u128;
    ...   |
    103 | |         total_open_ports
    104 | |     }
        | |_____^
    note: associated function defined here
       --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/indicatif-0.17.0/src/progress_bar.rs:152:12
        |
    152 |     pub fn enable_steady_tick(&self, interval: Duration) {
        |            ^^^^^^^^^^^^^^^^^^
    
    error[E0599]: no method named `join_and_clear` found for struct `MultiProgress` in the current scope
      --> /home/xnl/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/run_variants/run_with_stats.rs:59:69
       |
    59 |         let mpb_thread_handle = std::thread::spawn(move || multi_pb.join_and_clear());
       |                                                                     ^^^^^^^^^^^^^^ method not found in `MultiProgress`
    
    Some errors have detailed explanations: E0308, E0599.
    For more information about an error, try `rustc --explain E0308`.
    error: could not compile `armada` due to 7 previous errors
    error: failed to compile `armada v1.1.2`, intermediate artifacts can be found at `/tmp/cargo-installcABU4s`
    

    I'm sure this is something obvious I haven't done, or something else set up incorrectly, but can anyone help with this? Regards Xnl

    bug 
    opened by xnl-h4ck3r 4
  • -t flag causes a panic bug when you add a txt list to it

    -t flag causes a panic bug when you add a txt list to it

    On Armada 1.1.2, whenever I run armada -t ips.txt -p 1-65535 I get this error:

    $  armada -t ips.txt -p 1-65535
    thread 'main' panicked at 'Unable to parse target 'ips.txt'.: IncorrectIpCIDRString', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.2/src/args.rs:93:58
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    However when I run armada --target_file ips.txt -p 1-65535 it worked as intended. If that is the intention then it might be worth revising the docs or changing the functionality to be that -t targets ips and files

    opened by falcantaralinode 3
  • Cannot compile newest Armada version (1.1.1)

    Cannot compile newest Armada version (1.1.1)

    Upon attempting to install Armada, I'm unable to compile Armada because of this error error[E0658]: use of unstable library feature 'stdin_forwarders' whenever I run cargo install armada.

    Full error prompt below:

     Compiling armada v1.1.1
    error[E0658]: use of unstable library feature 'stdin_forwarders'
      --> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/armada-1.1.1/src/args.rs:80:14
       |
    80 |             .lines()
       |              ^^^^^
       |
       = note: see issue #87096 <https://github.com/rust-lang/rust/issues/87096> for more information
    
    For more information about this error, try `rustc --explain E0658`.
    error: could not compile `armada` due to previous error
    error: failed to compile `armada v1.1.1`, intermediate artifacts can be found at `/tmp/cargo-installUewA9u`
    
    bug 
    opened by frederickalcantara 2
  • fix error

    fix error "source_ips not an id of an argument or group"

    A typo in args.rs makes armada scans panic because clap is looking for the wrong string to match to, this does not affect the current release of armada on cargo, but does affect armada when building from source

    opened by Melidee 1
  • Added support for getting targets from file and stdin

    Added support for getting targets from file and stdin

    You can now specify targets using:

    1. --targets (-t)
    armada -t 1.1.1.1 -p 80,443
    
    1. --target_file
    armada --target_file ips_and_cidrs.txt -p 80,443
    
    1. stdin
    cat ips_and_cidrs.txt | armada -p 80,443
    
    enhancement 
    opened by d0nutptr 0
  • Output Formats

    Output Formats

    A handy feature that would be useful is the ability to be able to output my scans over to a CSV, table, or json format. That would be a major key when it comes to automating armada for my port scans.

    opened by frederickalcantara 0
  • setting rate limit lower than 10 stuck forever

    setting rate limit lower than 10 stuck forever

    Failed examples: armada 74.125.130.147 --top100 --rate-limit 2 armada 58.250.137.36 --top100 --rate-limit 9

    Working examples: armada 74.125.130.147 --top100 --rate-limit 10 armada 58.250.137.36 --top100 --rate-limit 11

    ~# armada --version armada 1.0.2

    bug documentation 
    opened by AaronChen0 4
A open port scanner.

opscan A open port scanner. Install With cargo cargo install --force opscan With docker docker run --rm -it sigoden/opscan opscan.nmap.org Binaries

null 17 Feb 19, 2023
Simple utility to ping a TCP port.

TcpPing Simple utility to ping a TCP port. Example > tcpping 1.1.1.1 53 -b en0 -i 1 -t 4 Connected to 1.1.1.1:53 in 21 ms Connected to 1.1.1.1:53 in 3

null 11 Nov 24, 2022
A tcp port forwarding system like ngrok.

Pruxy A tcp port forwarding system like ngrok. Todo http request handler agent <-> server connection agent How to use Generate cert files mkdir ssl_ce

null 1 Jan 24, 2022
TCP is so widely used, however QUIC may have a better performance.

TCP is so widely used, however QUIC may have a better performance. For softwares which use protocols built on TCP, this program helps them take FULL advantage of QUIC.

zephyr 15 Jun 10, 2022
High-performance link shortener

shorty High-performance link shortener written in Rust ?? Hosting In addition to being easy to build from source, shorty is available as a Docker imag

Caleb Denio 49 Jan 3, 2023
Drpc-Correct, high performance, robust, easy use Remote invocation framework

Drpc - Correct, high performance, robust, easy use Remote invocation framework

darkrpc 30 Dec 17, 2022
High performance I/O framework written by Rust inspired by Netty

Introduction Retty is a High performance I/O framework written by Rust inspired by Netty 基于mio的IO多路复用高并发、高性能网络通信开发框架 Feature Rayon 线程池包装 EventLoop / E

lgphp 9 Dec 25, 2022
Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.

Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.

CloudWeGo 1.3k Jan 2, 2023
A high performance/low-overhead OpenMetrics library for Rust

* * * EXPERIMENTAL * * * discreet-metrics A high-performance/low-overhead metrics library aiming to conform with OpenMetrics and to satisfy the follow

null 2 Sep 14, 2022
Cloud Native high performance security and privacy SQL proxy.

Fern proxy With the advent of Cloud Native applications, architecture patterns evolved and emerged to take advantage of cloud computing, and build mor

Fern 12 Nov 7, 2022
🚀 10x easier, 🚀 10x cheaper, 🚀 high performance, 🚀 petabyte scale - Elasticsearch/Splunk/Datadog alternative for 🚀 (logs, metrics, traces).

?? 10x easier, ?? 10x cheaper, ?? petabyte scale - Elasticsearch/Splunk/Datadog alternative for ?? (logs, metrics, traces). ZincObserve ZincObserve is

Zinc Labs Inc. 80 Feb 22, 2023
The High Performance Proxy/Load Balancer

Silverwind-The Next Generation High-Performance Proxy English 简体中文 The Silverwind is a high-performance reverse proxy/load balancer. And it could be a

null 112 Apr 7, 2023
A library-first, lightweight, high-performance, cloud-native supported API gateway🪐 by RUST

Preview version, will not guarantee the stability of the API! Do NOT use in production environment! A library-first, lightweight, high-performance, cl

Ideal World 4 May 7, 2023
A high-performance, lightweight, and cross-platform QUIC library

TQUIC English | 中文 TQUIC is a high-performance, lightweight, and cross-platform library for the IETF QUIC protocol. Advantages High performance: TQUIC

Tencent 11 Oct 27, 2023
a smol tcp/ip stack

smoltcp smoltcp is a standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems. Its design goals are simplicity and rob

smoltcp 2.8k Jan 4, 2023
A tcp over http2 + tls proxy

mtunnel A tcp over http2 + tls proxy. Usage 1. get certificates, by following steps. 2. make your config client config: { "local_addr": "127.0.0.1

cssivision 9 Sep 5, 2022
🤖 brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers

brwrs is a new protocol running over TCP/IP that is intended to be a suitable candidate for terminal-only servers (plain text data). That is, although it can be accessed from a browser, brwrs will not correctly interpret the browser's GET request.

daCoUSB 3 Jul 30, 2021
Library + CLI-Tool to measure the TTFB (time to first byte) of HTTP requests. Additionally, this crate measures the times of DNS lookup, TCP connect and TLS handshake.

TTFB: CLI + Lib to Measure the TTFB of HTTP/1.1 Requests Similar to the network tab in Google Chrome or Mozilla Firefox, this crate helps you find the

Philipp Schuster 24 Dec 1, 2022
Transforms UDP stream into (fake) TCP streams that can go through Layer 3 & Layer 4 (NAPT) firewalls/NATs.

Phantun A lightweight and fast UDP to TCP obfuscator. Table of Contents Phantun Latest release Overview Usage 1. Enable Kernel IP forwarding 2. Add re

Datong Sun 782 Dec 30, 2022