Skip to content

Optimize Masscan Usage: Speed Testing and Colorful Output

Explore the functionalities of net-analyzer/masscan on Gentoo Linux with this detailed guide. Install masscan and learn how to perform speed testing and customize output with colorful highlights using awk. Experiment with different speed rates and visualize scan results efficiently.


Install net-analyzer/masscan
emerge --ask net-analyzer/masscan
Testing --rate speeds

masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 1 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
 masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 10 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
 masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 100 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
 masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 1000 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 10000 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 100000 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
masscan 90.224.0.0-90.239.255.255 \
	--port 80 \
	--banner \
	--exclude 255.255.255.255 \
	-vvv \
	--max-rate 1000000 \
	--http-user-agent "(Amiga  v1; Win64; x64; rv:67.0)"
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG -
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '/open/ {print "IP:", $4, "up"}'
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '\
    /open/ {
        print "IP:", $4, "\033[0;32mUP\033[0m"
    }
    /closed/ {
        print "IP:", $4, "\033[0;31mCLOSED\033[0m"
    }'
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '\
    /\/closed\// {
        sub(/\/.*$/, "", $0);
        print $4 ":" $7 "\033[0;31mCLOSED\033[0m"
    } \
    /\/open\// {
        sub(/\/.*$/, "", $0);
        print $4 ":" $7 "\033[0;32mOPEN\033[0m"
    }'

Generate Colorful Output for Open and Closed Ports

masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '\
    /\/closed\// {
        sub(/\/.*$/, "", $0);
        color = int(rand() * 256);
        printf "\033[38;5;%dm%s:%s\033[0m closed\n", color, $4, $7
    } \
    /\/open\// {
        sub(/\/.*$/, "", $0);
        color = int(rand() * 256);
        printf "\033[38;5;%dm%s:%s\033[0m open\n", color, $4, $7
    }'
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '\
    /\/closed\// {
        sub(/\/.*$/, "", $0);
        print $4 ":" $7 "\033[0;31m\033[0m"
    } \
    /\/open\// {
        sub(/\/.*$/, "", $0);
        print $4

 ":" $7 "\033[0;32m\033[0m"
    }' | awk -F':' '{print $1 ":" $2}'
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oG - | awk '\
    /\/open\// {
        sub(/\/.*$/, "", $7)
        print $4 ":" $7
    }'

Scan target specification

masscan 10.0.0.1 
masscan 10.0.0.0/24 192.168.1.0/24

Exclude IP addresses from file

masscan 10.0.0.1/24 --excludeFile=foo.txt

Exclude a single IP from the scan

masscan 180.215.0.0/16 --exclude=180.215.122.120

Port specification with examples

masscan 10.0.0.0.1 -p 80
masscan 10.0.0.0.1 -p 0-65535
masscan 10.0.0.0.1 -p 80,443

UDP Scan

masscan 10.0.0.0.1 -pU 53

Scan in offline mode

masscan 0.0.0.0/24 --offline

Using the rate to send X packets per second

masscan 10.0.0.1/24 --rate 10000

Scan the internet at super high speeds

masscan 0.0.0.0/0 -p5900 -vvv --banner --exclude 255.255.255.255 --max-rate 100000 --open-only

Scan the internet at super speed but only print open ports

masscan 0.0.0.0/0 -p5900 -vvv --banner --exclude 255.255.255.255 --max-rate 100000 --open-only

You can use the --source-ip option to assign another IP and prevent

masscan 10.0.0.1 --banners

Assign masscan to another IP

masscan 10.0.0.1 --source-ip 192.168.1.200

Include a ping

masscan 10.0.0.1 --ping

Change the default user agent

masscan 10.0.0.1 --http-user-agent <user-agent>

Report only open ports

masscan 10.0.0.1 --open-only

Save sent packet in PCAP

masscan 10.0.0.1 --pcap foo.pcap
masscan 10.0.0.1 --packet-trace

Output in binary mode

massscan 10.1.1.1/24 -p 80 -oB scan.bin

Output in XML format

massscan 10.1.1.1/24 -p 80 -oX foo.xml

Output in grepable format

massscan 10.1.1.1/24 -p 80 -oG grep.txt

Output in JSON format

massscan 10.1.1.1/24 -p 80 -oJ foo.json

Output in simple list format

massscan 10.1.1.1/24 -p 80 -oL foo.list

Read a binary output and write it to the console

masscan --readscan bin-test.scan

Read a binary scan and convert it to another format

masscan --readscan bin-test.scan -oX bin-test.xml
masscan 0.0.0.0/0 -p22 --banner --max-rate 10000 --exclude 255.255.255.255  
	--http-user-agent "Microsoft (Amiga  v1; Win64; x64; rv:67.0) Gecko/20100101 RedFox/1.0" --open-only

Complete commands

masscan 10.1.1.1/24 -p 0-65535 \
    --rate 1000000 \
    --open-only \
    --http-user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" \
    -oL "output.txt"

Multiple target-specific scan

masscan <target1> <target2> <target3>  -p 80,433 \
    --rate 100000 --banners --open-only \
    --http-user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" \
    --source-ip 192.168.100.200 -oL "output.txt" 
masscan <target> -p 21,22,23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 \
    --http-user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" \
    --rate 100000 --oL "output.txt"
sudo masscan 0.0.0.0/16 -p 22 --rate 2000 -oX output_port_22.xml

Scan entire 80.76 range

masscan 80.76.157.0/16 -p80 --max-rate 100000 -oG - | awk '\
    /open/ {
        print "IP:", $4, "\033[0;32mUP\033[0m"
    }
    /closed/ {
        print "IP:", $4, "\033[0;31mCLOSED\033[0m"
    }'