diff --git a/README.md b/README.md index 6957b8082..d91e55ab4 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,18 @@

➡️ Discord | - Installation Guide | + Installation Guide | Usage Guide ⬅️

- Turns a 17 minutes Nmap scan into 19 seconds.
Find all open ports fast with RustScan, automatically pipe them into Nmap. + The Modern Port Scanner.
Fast, smart, effective.

AUR version -GitHub commit activity GitHub All Releases Crates.io Discord @@ -21,49 +20,26 @@


-|

🐋 Docker (Recommended)

|

👩‍💻 Kali / Debian

|

🏗️ Arch

|

🔧 Cargo (Universal)

| +|

🐋 Docker (Recommended)

|

👩‍💻 Kali / Debian

|

🏗️ Arch

|

🔧 Homebrew

| | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -|

|

|

|

| -| `docker pull rustscan/rustscan:1.10.0`

[Usage](https://github.com/RustScan/RustScan#docker-whale) | [Read the install guide](https://github.com/Rustscan/RustScan/blob/master/README.md#%EF%B8%8F-debian--kali) | `yay -S rustscan` | `cargo install rustscan` | +|

|

|

|

| +| `docker pull rustscan/rustscan:2.0.0`

[Usage](https://github.com/RustScan/RustScan#docker-whale) | [Read the install guide](https://github.com/Rustscan/RustScan/blob/master/README.md#%EF%B8%8F-debian--kali) | `yay -S rustscan` | `brew install rustscan` |


# 🤔 What is this? -1. Find ports quickly using Rustscan (**3 seconds at its fastest**). -2. Automatically runs `nmap` on those ports. -3. ??? -4. Profit! +![fast](pictures/fast.gif) - - - - - - - - - - - - - - - - -
Name⚡ Nmap with RustScan🐢 Nmap 🐢
GifThe guy she tells you not to worry aboutYou
Time39 seconds17 minutes and 41 seconds
- -Note This is an older gif. RustScan's current top speed is 3 seconds for all 65k ports. This gif is 26 seconds.
- -RustScans **only** job is to reduce the friction between finding open ports and inputting them into nmap. +The Modern Port Scanner. **Find ports quickly (3 seconds at its fastest)**. Run scripts through our scripting engine (Python, Lua, Shell supported). # ✨ Features -- Scans all 65k ports in **8 seconds** (on 10k batch size). -- Saves you time by automatically piping it into Nmap. No more manual copying and pasting! -- Does one thing and does it well. **Only** purpose is to improve Nmap, not replace it! -- Let's you choose what Nmap commands to run, or uses the default. -- IPv6 Support +- Scans all 65k ports in **3 seconds**. +- Full scripting engine support. Automatically pipe results into Nmap, or use our scripts (or write your own) to do whatever you want. +- Adaptive learning. RustScan improves the more you use it. No bloated machine learning here, just basic maths. +- The usuals you would expect. IPv6, CIDR, file input and more. +- Automatically pipes ports into Nmap. ## ‼️ Important Links @@ -73,132 +49,71 @@ RustScans **only** job is to reduce the friction between finding open ports and ## 🙋 Table of Contents -- 📖 [Installation Guide](https://github.com/RustScan/RustScan#-full-installation-guide) -- 🐋 [Docker Usage](https://github.com/RustScan/RustScan#docker-whale) +- 📖 [Installation Guide](https://github.com/RustScan/RustScan/wiki/Installation-Guide) +- 🐋 [Docker Usage](https://github.com/RustScan/RustScan/wiki/Installation-Guide) - 🦜 [Discord](https://discord.gg/GFrQsGy) -- 🤸 [Usage](https://github.com/RustScan/RustScan#-usage) +- 🤸 [Usage](https://github.com/RustScan/RustScan/wiki/Usage) - 🎪 [Community](https://github.com/RustScan/RustScan#-community) # 🔭 Why RustScan? -Why spend time running fast scans and manually copying the ports, or waiting for a 20 minute scan to finish when you can just do all 65k ports in less than a minute? - -![gif](https://github.com/RustScan/RustScan/blob/master/pictures/8seconds.gif?raw=true) - -**RustScan running in 8 seconds and finding all open ports out of 65k.** - -## 📊 RustScan vs Nmap vs MassScan - -| **Name** | RustScan | Nmap | Masscan | -| ------------------------------------------------------------------------------------------ | -------- | ---- | ------- | -| Fast | ✅ | ❌ | ✅ | -| Actually useful | ❌ | ✅ | ❌ | -| Realises it's not useful, and pipes the only useful data into the only useful port scanner | ✅ | ❌ | ❌ | - -# 📖 Full Installation Guide - -**You need Nmap**. If you have Kali Linux or Parrot OS installed, you already have Nmap. If not, [follow the nmap install guide](https://nmap.org/download.html). - -The easiest way to install RustScan is to use one of the packages provided for your system, such as HomeBrew or Yay for Arch Linux. - -The most universal way is to use `cargo`, Rust's built in package manager (think Pip but for Rust). [Follow this guide to installing Rust & Cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html). - -If you face any issues at all, please leave a GitHub issue. We have only tested this on Linux, so there may be issues for Mac OS or Windows. - -Note: sometimes Rust doesn't add Cargo to the path. Please see [this issue](https://github.com/rust-lang/rustup/issues/2436) for how to fix that. - -## 🖥️ Debian / Kali - -Download the .deb file from the releases page: - -[https://github.com/RustScan/RustScan/releases](https://github.com/RustScan/RustScan/releases) +RustScan is a modern take on the port scanner. Sleek & fast. All while providing extensive extendability to you. -Run the command `dpkg -i` on the file. +Not to mention RustScan uses Adaptive Learning to improve itself over time, making it the best port scanner for **you**. -Note: sometimes you can double click the file to achieve the same result. +## 🧋 Speed -## Docker :whale: +![fast](pictures/fast.gif) -Docker is the recommended way of installing RustScan. This is because: +Speed is guaranteed via RustScan. However, if you want to run a slow scan due to stealth that is possible too. -- It has a high open file descriptor limit, which is one of the [main problems](https://github.com/RustScan/RustScan/issues/40) with RustScan. Now you don't have to fiddle around trying to understand your OS. -- It works on all systems, regardless of OS. Even Windows, which we don't officially support. -- The Docker image uses the latest build from Cargo, our main source-of-truth package. This means that you will always be using the latest version. -- No need to install Rust, Cargo, or Nmap. +Firstly, let's talk code. -To install Docker, [follow their guide](https://docs.docker.com/engine/install/). +We have tests that check to see if RustScan is significantly slower than the previous version. If it is, the continuous integration fails and we can't commit code to master unless we make it faster. -**Once Docker is installed, you can either build your own image using the `Dockerfile` (alpine) provided in the repo, or alternatively, use the published Docker image like below (most convenient)** +[HyperFine](https://github.com/sharkdp/hyperfine) is used to monitor RustScan's performance over time to answer the question "Are we getting faster? Are we getting slower?". -Please see our [DockerHub](https://hub.docker.com/repository/docker/rustscan/rustscan) for further our published versions. However, we recommend using our latest **major** release [1.10.0](https://github.com/RustScan/RustScan/releases/tag/1.10.0) +Every pull request is reviewed by 1 person, but more often than not 2 people review it. We test it manually and make sure the code doesn't affect performance negatively. -``` -Stable and supported: rustscan/rustscan:1.10.0 +[Read more here](https://github.com/RustScan/RustScan/wiki/Increasing-Speed-&-Accuracy). -Bleeding edge (run at your own risk!): rustscan/rustscan:latest -``` +## ⚙️ Extensible -We strongly recommend using the `1.10.0` tag, as this is the latest major - stable - release of RustScan. This README uses the `1.10.0` image by default, however, note that the `latest` image is considered experimental. You can use all releases of Docker by visiting the [DockerHub Tags](https://hub.docker.com/r/rustscan/rustscan/tags) and replacing the command with the tag you desire. i.e. `docker pull rustscan/rustscan:1.10.0` can be `docker pull rustscan/rustscan:1.6.0` +![scripts](pictures/scripts.gif) -#### To get started: +_RustScan piping results into the custom Python script_ -Simply run this command against the IP you want to target: +RustScan has a new scripting engine which allows anyone to write scripts in most languages. Python, Lua, Shell are all supported. -```bash -docker run -it --rm --name rustscan rustscan/rustscan:1.10.0 -``` +Want to take your found ports and pipe them into Nmap for further analysis? That's possible. Want to run `smb-enum` if SMB is found open? Possible. -Note: this will scan the Docker's localhost, not your own. +The possibilities are endless -- and you can write scripts in whatever language you feel comfortable with. -Once done, you will no longer need to re-download the image (except when RustScan updates) and can use RustScan like a normal application. +[Read more here](https://github.com/RustScan/RustScan/wiki/RustScan-Scripting-Engine). -You will have to run this command every time, so we suggest aliasing it to something memorable. +## 🌊 Adaptive -```bash -alias rustscan='docker run -it --rm --name rustscan rustscan/rustscan:1.10.0' -``` +![adaptive](pictures/adaptive.gif) -Then we can scan: +_RustScan automatically fine-tuning itself to match the host OS_. -```bash -rustscan 192.168.1.0/24 -t 500 -b 1500 -- -A -``` +RustScan has a cool set of features called "Adaptive Learning". These features "learn" about the environment you are scanning and how _you_ use RustScan to **improve itself over time**. -#### To build your own image: +This is an umbrella term we use for any feature that fits this criteria. The list is constantly changing, so [check out our wiki for more information](https://github.com/RustScan/RustScan/wiki/Adaptive-Learning). -Download the repo: +## 👩‍🦯 Accessible -```bash -git clone https://github.com/RustScan/RustScan.git -``` +![fast](pictures/accessible.gif) -Ensure you navigate to the download location of the repo: +RustScan is one of the first penetration testing tools that aims to be entirely accessible. -```bash -cd /path/to/download/RustScan -``` +[Most penetration testing tools are not accessible](https://bees.substack.com/p/making-hacking-accessible), which negatively affects the whole industry. -Build away! +RustScan has continuous integration testing that aims to make sure it is accessible, and we are constantly working on ways to improve our accessibility and make sure _everyone_ can use RustScan. -```bash -docker build -t . -``` - -## 🍺 HomeBrew - -**Note for Mac users** Mac OS has a very, very small ulimit size. This will negatively impact RustScan by a significant amount. Please use the Docker container, or tell RustScan to up the ulimit size on every run. - -``` -brew install rustscan -``` - -## 🔧 Building it yourself +# 📖 Full Installation Guide -1. Git clone the repo. -2. Install Rust. You can do this with `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` which we took from the Rust website https://www.rust-lang.org/tools/install -3. cd into the Git repo, and run `cargo build --release` -4. The binary is located at `target/release/rustscan` -5. Symlink to the binary or something. Whatever you want! +You can find our guide [here](https://github.com/RustScan/RustScan/wiki/Installation-Guide). ## 🦊 Community Distributions @@ -213,221 +128,13 @@ If you maintain a community distribution and want it listed here, leave an issue # 🤸 Usage -```console -$ rustscan -h - -Fast Port Scanner built in Rust. WARNING Do not use this program against sensitive infrastructure since the specified -server may not be able to handle this many socket connections at once. - Discord https://discord.gg/GFrQsGy - GitHub -https://github.com/RustScan/RustScan - -USAGE: - rustscan [FLAGS] [OPTIONS] [addresses]... [-- ...] - -FLAGS: - --accessible Accessible mode. Turns off features which negatively affect screen readers - -g, --greppable Greppable mode. Only output the ports. No Nmap. Useful for grep or outputting to a file - -h, --help Prints help information - -n, --no-config Whether to ignore the configuration file or not - --no-nmap Turns off Nmap - --top Use the top 1000 ports - -V, --version Prints version information - -OPTIONS: - -b, --batch-size The batch size for port scanning, it increases or decreases the speed of scanning. - Depends on the open file limit of your OS. If you use 65535 it will scan every port - at the same time. Although, your OS may not support this [default: 4500] - -p, --ports ... A list of comma separed ports to be scanned. Example: 80,443,8080 - -r, --range A range of ports with format start-end. Example: 1-1000 - --scan-order The order of scanning to be performed. The "serial" option will scan ports in - ascending order while the "random" option will scan ports randomly [default: - serial] [possible values: Serial, Random] - -t, --timeout The timeout in milliseconds before a port is assumed to be closed [default: 1500] - --tries The number of tries before a port is assumed to be closed. If set to 0, rustscan - will correct it to 1 [default: 1] - -u, --ulimit Automatically ups the ULIMIT with the value you provided - -ARGS: - ... A list of comma separated CIDRs, IPs, or hosts to be scanned - ... The Nmap arguments to run. To use the argument -A, end RustScan's args with '-- -A'. Example: - 'rustscan -T 1500 127.0.0.1 -- -A -sC'. This command adds -Pn -vvv -p $PORTS automatically to - nmap. For things like --script '(safe and vuln)' enclose it in quotations marks \"'(safe and - vuln)'\"") -``` - -The format is `rustscan -b 500 -t 1500 192.168.0.1` to scan 192.168.0.1 with 500 batch size with a timeout of 1500ms. The timeout is how long RustScan waits for a response until it assumes the port is closed. - -The batch size determines how fast RustScan is. Set it to 65k, and it will scan all 65k ports at the same time. This means at at 65k batch size, RustScan will take TIMEOUT long to scan all ports. Essentially, if timeout is 1000ms, **RustScan can scan in 1 second**. - -Your operating system may not support this, but it is worth it to play around and see where your open file limit is. Shortly we will be releasing a dockerised version with a much larger open file limit, so this will be possible. - -## Configuration file - -This binary accepts a configuration file, named `.rustscan.toml`, that is read from the home directory of the user. It follows the TOML format -and accepts the following fields: - -- `addresses` -- `ports` -- `range` -- `scan_order` -- `command` -- `accessible` -- `greppable` -- `batch-size` -- `timeout` -- `tries` -- `ulimit` - -### Format example - -```toml -addresses = ["127.0.0.1", "192.168.0.0/30", "www.google.com"] -command = ["-A"] -ports = [80, 443, 8080] -range = { start = 1, end = 10 } -greppable = false -accessible = true -scan_order = "Serial" -batch_size = 1000 -timeout = 1000 -tries = 3 -ulimit = 1000 -``` - -## ⚠️ WARNING - -This program, by default, scans 5000 ports at a time (5000 per second). - -This may cause damage to a server, or may make it incredibly obvious you are scanning the server. - -Servers as well as individual services can block your IP completely after a huge amount of simultaneous connections/tries, Possibly causing you to see false positives. False positives are open ports at the initial scanning process later found closed when you want to do further scanning, or connect to it. - -There are 2 ways to deal with this; - -1. Decrease batch size - `rustscan -b 10` will run 10 port scans for 1 second, and then another 10 for 1 second and so on. -2. Increase timeout - `rustscan -T 5000` will mean RustScan waits 5 seconds until it scans the next ports. - -You can also use both of these at the same time, to make it as slow or as fast as you want. A fun favourite is 65535 batch size with 1 second timeout. Theoretically, this scans all 65535 ports in 1 second. +We have 2 usage guides. [Basic Usage](https://github.com/RustScan/RustScan/wiki/Usage) and [Things you may want to do](https://github.com/RustScan/RustScan/wiki/Things-you-may-want-to-do-with-RustScan-but-don't-understand-how). -**Please** do not use this tool against sensitive servers. It is designed mainly for Capture the Flag events, not real world servers with sensitive data. - -## 🚨 Thread Panicked at Main: Too Many Open Files - -This is the most common error found in RustScan. - -The open file limit is how many open sockets you can have at any given time. - -This limit changes from OS to OS. - -RustScan does not automatically create defaults (other than 5000) like Nmap does with their -T1, -T2 system. - -By figuring out for yourself the optimal batch size, you will know that RustScan is the most optimised port scanner for your system. - -There are 2 things you can do: - -1. Decrease batch size -2. Increase open file limit - -Decreasing batch size slows down the program, so as long as it isn't too drastic, this is a good option. - -Run these 3 commands: - -```bash -ulimit -a -ulimit -Hn -ulimit -Sn -``` - -They will give you an idea on the open file limit of your OS. - -If it says "250", run `rustscan -b 240` for a batch size of 240. - -Increasing the open file limit increases speed, but poses danger. Although, **opening more file sockets on the specified IP address may damage it**. - -To open more, set the ulimit to a higher number: - -```bash -ulimit -n 5000 -``` - -**Mac OS** -Mac OS has, from what we can tell, a naturally very low open file descriptor limit. The limit for Ubuntu is 8800. The limit for Mac OS is 255! - -In this case, we would say it is safe to increase the open file limit. As most Linux based OS' have limits in the thousands. - -Although, if this breaks anything, please don't blame us. - -**Windows Subsystem for Linux** -Windows Subsystem for Linux does not support ulimit (see issue #39). - -The best way is to use it on a host computer, in Docker, or in a VM that isn't WSL. - -**Automatic Ulimit updating** -We are currently working on automatic Ulimit updating. If it is too high, it will lower itself. If it is too low, it will suggest a higher Ulimit. Watch [this issue](https://github.com/RustScan/RustScan/issues/25) for more. - -## 🔌 Nmap Custom Flags - -To run your own nmap commands, end the RustScan command with `-- -A` where `--` indicates "end of RustScan flags, please do not parse anything further" and any flags after that will be entered into nmap. - -RustScan automatically runs `nmap -vvv -p $PORTS $IP`. To make it run `-A`, execute the command `rustscan 127.0.0.1 -- -A`. - -If you want to run commands such as `--script (vuln and safe)`, you will need to enclose it in quotations like so `--script '"(vuln and safe) or default"'`. - -## 🎯 Increasing speed / accuracy - -- Batch size - -This increases speed, by allowing us to process more at once. Something experimental we are working on is changing the open file limit. You can do this manually with `ulimit -n 70000` and then running rustscan with `-b 65535`. This _should_ scan all 65535 ports at the exact same time. But this is extremely experimental. - -For non-experimental speed increases, slowly increase the batch size until it no longer gets open ports, or it breaks. - -- Accuracy (and some speed) - -To increase accuracy, the easiest way is to increase the timeout. The default is 1.5 seconds, by setting it to 4 seconds (4000) we are telling RustScan "if we do not hear back from a port in 4 seconds, assume it is closed". - -Decreasing accuracy gives some speed bonus, but our testing found that batch size dramatically changed the speed whereas timeout did, but not so much. +We also have documentation about our config file [here](https://github.com/RustScan/RustScan/wiki/Config-File). # 🎪 Community -Howdy Space Cow-Person 🤠🌌 - -RustScan is always looking for contributors. Whether that's spelling mistakes or major changes, your help is **wanted** and welcomed here. - -Before contributing, read our [code of conduct](https://github.com/RustScan/RustScan/blob/master/CODE_OF_CONDUCT.md). - -TL;DR if you abuse members of our community you will be **perma-banned** 🤗 - -RustScan has 2 major labels for GitHub issues you should look at: - -- Good First issue - These are issues for newcomers to open source! - [https://github.com/RustScan/RustScan/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22](https://github.com/RustScan/RustScan/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) -- Help wanted - These are issues that aren't really for newcomers, but we could still do wiht help! - [https://github.com/RustScan/RustScan/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+label%3A%22help+wanted%22](https://github.com/RustScan/RustScan/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+label%3A%22help+wanted%22) - -If you want to, solve the issue or comment on the issue for help. - -The flow for contributing to open source software is: - -- Fork the repo -- Make changes -- Pull request to the repo - -And then comment on the issue that you've done. - -RustScan also has some `// TODO`'s in the codebase, which are meant more for the core team but we wouldn't say no to help with these issues. - -If you have any feature suggestions or bugs, leave a GitHub issue. We welcome any and all support :D - -We communicate over Discord. [Click here](https://discord.gg/GFrQsGy) to join our Discord community! - -## Rewarding you - -We cannot pay you :-( But, We can place your GitHub profile on the README under `#Contributors` as a thank you! :) - -Please read the [contributing.md file](contributing.md) +[Read this to learn how to contribute](https://github.com/RustScan/RustScan/wiki/Contributing). ## Contributors ✨ diff --git a/pictures/accessible.gif b/pictures/accessible.gif new file mode 100644 index 000000000..10d78ca35 Binary files /dev/null and b/pictures/accessible.gif differ diff --git a/pictures/accessible.yml b/pictures/accessible.yml new file mode 100644 index 000000000..9b430ffb2 --- /dev/null +++ b/pictures/accessible.yml @@ -0,0 +1,131 @@ +# The configurations that used for the recording, feel free to edit them +config: + + # Specify a command to be executed + # like `/bin/bash -l`, `ls`, or any other commands + # the default is bash for Linux + # or powershell.exe for Windows + command: zsh + + # Specify the current working directory path + # the default is the current working directory path + cwd: /home/bee/Documents/RustScan + + # Export additional ENV variables + env: + recording: true + + # Explicitly set the number of columns + # or use `auto` to take the current + # number of columns of your shell + cols: 107 + + # Explicitly set the number of rows + # or use `auto` to take the current + # number of rows of your shell + rows: 43 + + # Amount of times to repeat GIF + # If value is -1, play once + # If value is 0, loop indefinitely + # If value is a positive number, loop n times + repeat: 0 + + # Quality + # 1 - 100 + quality: 100 + + # Delay between frames in ms + # If the value is `auto` use the actual recording delays + frameDelay: auto + + # Maximum delay between frames in ms + # Ignored if the `frameDelay` isn't set to `auto` + # Set to `auto` to prevent limiting the max idle time + maxIdleTime: 2000 + + # The surrounding frame box + # The `type` can be null, window, floating, or solid` + # To hide the title use the value null + # Don't forget to add a backgroundColor style with a null as type + frameBox: + type: floating + title: Terminalizer + style: + border: 0px black solid + # boxShadow: none + # margin: 0px + + # Add a watermark image to the rendered gif + # You need to specify an absolute path for + # the image on your machine or a URL, and you can also + # add your own CSS styles + watermark: + imagePath: null + style: + position: absolute + right: 15px + bottom: 15px + width: 100px + opacity: 0.9 + + # Cursor style can be one of + # `block`, `underline`, or `bar` + cursorStyle: block + + # Font family + # You can use any font that is installed on your machine + # in CSS-like syntax + fontFamily: "Monaco, Lucida Console, Ubuntu Mono, Monospace" + + # The size of the font + fontSize: 12 + + # The height of lines + lineHeight: 1 + + # The spacing between letters + letterSpacing: 0 + + # Theme + theme: + background: "transparent" + foreground: "#afafaf" + cursor: "#c7c7c7" + black: "#232628" + red: "#fc4384" + green: "#b3e33b" + yellow: "#ffa727" + blue: "#75dff2" + magenta: "#ae89fe" + cyan: "#708387" + white: "#d5d5d0" + brightBlack: "#626566" + brightRed: "#ff7fac" + brightGreen: "#c8ed71" + brightYellow: "#ebdf86" + brightBlue: "#75dff2" + brightMagenta: "#ae89fe" + brightCyan: "#b1c6ca" + brightWhite: "#f9f9f4" + +# Records, feel free to edit them +records: + - delay: 436 + content: "\e[1m\e[7m%\e[27m\e[1m\e[0m \r \r\e]2;bee@beehive:~/Documents/RustScan\a\e]1;..ents/RustScan\a" + - delay: 162 + content: "\r\e[0m\e[27m\e[24m\e[J\r\n\e[1m\e[0m\e[1m\e[36mRustScan\e[0m\e[36m\e[39m\e[1m \e[0m\e[1mon \e[0m\e[1m\e[37m\e[1m\e[37m\e[0m\e[37m\e[1m\e[37m\e[35m master\e[0m\e[35m\e[39m\e[1m\e[0m\e[1m\e[0m\e[1m\e[31m [?]\e[0m\e[31m\e[39m\e[1m\e[0m\e[0m\e[39m\e[1m \e[0m\e[1mis \e[0m\e[1m\e[31m\U0001F4E6 vrustscan:1.10.0\e[0m\e[31m\e[39m\e[1m \e[0m\e[1mvia \e[0m\e[1m\e[31m\U0001D5E5 v1.46.0\e[0m\e[31m\e[39m\e[1m \e[0m\r\n\e[1m\e[0m\e[1m\e[32m➜ \e[0m\e[32m\e[39m\e[1m\e[0m\e[K\e[?1h\e=\e[?2004h" + - delay: 471 + content: "r\brustscan 127.0.0.1 --accessible --no-nmap --ulimit 5000\e[55D\e[7mr\e[7mu\e[7ms\e[7mt\e[7ms\e[7mc\e[7ma\e[7mn\e[7m \e[7m1\e[7m2\e[7m7\e[7m.\e[7m0\e[7m.\e[7m0\e[7m.\e[7m1\e[7m \e[7m-\e[7m-\e[7ma\e[7mc\e[7mc\e[7me\e[7ms\e[7ms\e[7mi\e[7mb\e[7ml\e[7me\e[7m \e[7m-\e[7m-\e[7mn\e[7mo\e[7m-\e[7mn\e[7mm\e[7ma\e[7mp\e[7m \e[7m-\e[7m-\e[7mu\e[7ml\e[7mi\e[7mm\e[7mi\e[7mt\e[7m \e[7m5\e[7m0\e[7m0\e[7m0\e[27m" + - delay: 269 + content: "\e[55D\e[27mr\e[27mu\e[27ms\e[27mt\e[27ms\e[27mc\e[27ma\e[27mn\e[27m \e[27m1\e[27m2\e[27m7\e[27m.\e[27m0\e[27m.\e[27m0\e[27m.\e[27m1\e[27m \e[27m-\e[27m-\e[27ma\e[27mc\e[27mc\e[27me\e[27ms\e[27ms\e[27mi\e[27mb\e[27ml\e[27me\e[27m \e[27m-\e[27m-\e[27mn\e[27mo\e[27m-\e[27mn\e[27mm\e[27ma\e[27mp\e[27m \e[27m-\e[27m-\e[27mu\e[27ml\e[27mi\e[27mm\e[27mi\e[27mt\e[27m \e[27m5\e[27m0\e[27m0\e[27m0\e[?1l\e>\e[?2004l\r\r\n\e]2;rustscan 127.0.0.1 --accessible --no-nmap --ulimit 5000\a\e]1;rustscan\aAutomatically increasing ulimit value to 5000.\r\n" + - delay: 1536 + content: "Open 127.0.0.1:38602\r\n" + - delay: 395 + content: "Open 127.0.0.1:50078\r\n" + - delay: 450 + content: "127.0.0.1 -> [38602,50078]\r\n\e[1m\e[7m%\e[27m\e[1m\e[0m \r \r\e]2;bee@beehive:~/Documents/RustScan\a\e]1;..ents/RustScan\a" + - delay: 143 + content: "\r\e[0m\e[27m\e[24m\e[J\r\n\e[1m\e[0m\e[1m\e[36mRustScan\e[0m\e[36m\e[39m\e[1m \e[0m\e[1mon \e[0m\e[1m\e[37m\e[1m\e[37m\e[0m\e[37m\e[1m\e[37m\e[35m master\e[0m\e[35m\e[39m\e[1m\e[0m\e[1m\e[0m\e[1m\e[31m [?]\e[0m\e[31m\e[39m\e[1m\e[0m\e[0m\e[39m\e[1m \e[0m\e[1mis \e[0m\e[1m\e[31m\U0001F4E6 vrustscan:1.10.0\e[0m\e[31m\e[39m\e[1m \e[0m\e[1mvia \e[0m\e[1m\e[31m\U0001D5E5 v1.46.0\e[0m\e[31m\e[39m\e[1m \e[0m\e[1mtook \e[0m\e[1m\e[33m2s\e[0m\e[33m\e[39m\e[1m \e[0m\r\n\e[1m\e[0m\e[1m\e[32m➜ \e[0m\e[32m\e[39m\e[1m\e[0m\e[K\e[?1h\e=\e[?2004h" + - delay: 563 + content: "\e[?2004l\r\r\n" diff --git a/pictures/adaptive.gif b/pictures/adaptive.gif new file mode 100644 index 000000000..f983b843a Binary files /dev/null and b/pictures/adaptive.gif differ diff --git a/pictures/apple.png b/pictures/apple.png index 50ba5b64e..cf58fec8a 100644 Binary files a/pictures/apple.png and b/pictures/apple.png differ diff --git a/pictures/fast.gif b/pictures/fast.gif new file mode 100644 index 000000000..cdd896ff7 Binary files /dev/null and b/pictures/fast.gif differ diff --git a/pictures/scripts.gif b/pictures/scripts.gif new file mode 100644 index 000000000..5f643ee51 Binary files /dev/null and b/pictures/scripts.gif differ