Compare commits

...
32 Commits
Author SHA1 Message Date
Brandon e0d1fbb860 readme updates 2020-07-19 12:51:25 +01:00
Brandon f330b7b3e6 Merge branch 'master' of github.com:brandonskerritt/RustScan 2020-07-19 12:46:38 +01:00
Brandon 617e77e428 making public 2020-07-19 12:46:26 +01:00
Brandon a86b6ffbae Update README.md 2020-07-19 10:56:32 +01:00
Brandon 22abe4ddda Update README.md 2020-07-19 10:49:48 +01:00
Brandon 80d066abfd Update README.md 2020-07-19 10:48:13 +01:00
Brandon 88fba17fc5 cleaning up 2020-07-19 10:44:22 +01:00
Brandon b7874574ec fixed tables 2020-07-19 10:30:20 +01:00
Brandon 548d76591b fixed tables 2020-07-19 10:28:42 +01:00
Brandon 2fedb1ccf8 fixed alignment issues 2020-07-19 10:26:41 +01:00
Brandon a5fbdd9441 made gifs 2020-07-19 10:24:37 +01:00
Brandon 176ec018d5 merge 2020-07-19 00:55:15 +01:00
Brandon e4b24eb2ae readme changes 2020-07-19 00:49:38 +01:00
Brandon d0b71449d0 Merge pull request #8 from brandonskerritt/all-contributors/add-brandonskerritt
docs: add brandonskerritt as a contributor
2020-07-18 22:20:10 +01:00
allcontributors[bot] fb93c454b1 docs: create .all-contributorsrc [skip ci] 2020-07-18 21:17:01 +00:00
allcontributors[bot] accc28b82f docs: update README.md [skip ci] 2020-07-18 21:17:00 +00:00
Brandon 55fb5a5547 Merge pull request #7 from brandonskerritt/mutex
mutex
2020-07-18 22:15:32 +01:00
Brandon e941869316 readme changes 2020-07-18 22:04:44 +01:00
Brandon 366c628b39 cargo updates 2020-07-18 21:18:28 +01:00
Brandon affa6b3ee4 fixes of toml 2020-07-18 21:10:21 +01:00
Brandon 9a843c99fd readme updates 2020-07-18 21:08:29 +01:00
Brandon f0c4163f0b optimised the code 2020-07-18 20:51:07 +01:00
Brandon 2594f40596 Added systemcalls 2020-07-18 12:17:44 +01:00
Brandon 232c34da4e added no ports found dialog 2020-07-17 23:40:23 +01:00
Brandon bcccca3785 yup 2020-07-17 20:56:37 +01:00
Brandon 7a4cc771c3 creating nmap string 2020-07-17 19:02:17 +01:00
Brandon 62c4b09268 switching branches 2020-07-17 18:53:53 +01:00
Brandon acb13f44d2 force 2020-07-17 17:39:53 +01:00
Brandon f229c9a2ac it now is a vector 2020-07-17 17:31:48 +01:00
Brandon bf6b70dc78 more arguments 2020-07-17 11:37:19 +01:00
Brandon 8b42d5d09d fixed arg parsing 2020-07-17 02:03:59 +01:00
Brandon 07aea167ca arch and deb builds 2020-07-14 14:21:44 +01:00
21 changed files with 2087 additions and 108 deletions

No files matched your search

+27
View File
@@ -0,0 +1,27 @@
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "brandonskerritt",
"name": "Brandon",
"avatar_url": "https://avatars3.githubusercontent.com/u/10378052?v=4",
"profile": "https://skerritt.blog",
"contributions": [
"infra",
"test",
"code",
"design"
]
}
],
"contributorsPerLine": 7,
"projectName": "RustScan",
"projectOwner": "brandonskerritt",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true
}
+32
View File
@@ -13,3 +13,35 @@ Cargo.lock
#Added by cargo
/target
# Created by https://www.toptal.com/developers/gitignore/api/rust,archlinuxpackages
# Edit at https://www.toptal.com/developers/gitignore?templates=rust,archlinuxpackages
### ArchLinuxPackages ###
*.tar
*.tar.*
*.jar
*.exe
*.msi
*.zip
*.tgz
*.log
*.log.*
*.sig
pkg/
src/
### Rust ###
# Generated by Cargo
# will have compiled files and executables
/target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# End of https://www.toptal.com/developers/gitignore/api/rust,archlinuxpackages
+12 -3
View File
@@ -1,8 +1,15 @@
[package]
name = "RustScan"
version = "0.1.0"
name = "rustscan"
version = "1.0.1"
authors = ["Bee <[email protected]>"]
edition = "2018"
description = "Faster Nmap Scanning with Rust"
homepage = "https://github.com/brandonskerritt/rustscan"
repository = "https://github.com/brandonskerritt/rustscan"
license = "MIT"
keywords = ["port", "scanning", "nmap"]
categories = ["command-line-utilities"]
readme="README.md"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -10,4 +17,6 @@ edition = "2018"
colored = "1.9.3"
clap = "2.33.0"
rayon = "1.3.1"
arrayvec = "0.5.1"
[package.metadata.deb]
depends = "$auto, nmap"
+12 -20
View File
@@ -1,24 +1,16 @@
# Maintainer: Ciphey <[email protected]>
pkgname=Ciphey
pkgver='5.0.0rc2'
# Maintainer: Bee <[email protected]>
pkgname=RustScan-bin
pkgver=0.1.0
pkgrel=1
pkgdesc="Automated Description Tool"
arch=('any')
url="https://github.com/ciphey/ciphey"
license=('MIT')
depends=('python>=3.7')
makedepends=('python>=3.7')
install=
changelog=
#source=("$pkgname-$pkgver.tar.gz"
#"$pkgname-$pkgver.patch")
noextract=()
md5sums=()
validpgpkeys=()
pkgdesc="Faster Nmap Scanning with Rust"
url="https://github.com/brandonskerritt/rustscan"
license=("GNU")
arch=("x86_64")
provides=("RustScan")
options=("strip")
source=("https://github.com/brandonskerritt/rustscan/releases/download/v$pkgver/RustScan-$pkgver-x86_64.tar.gz")
sha256sums=("0ab268ae43a79cad6e9f75b650629208061590b3311780d55b8a03d35a8d90b0")
prepare() {
python3 -m pip install --upgrade pip
}
package() {
python3 -m pip install ciphey
install -Dm755 RustScan -t "$pkgdir/usr/bin/"
}
+84 -20
View File
@@ -2,24 +2,64 @@
<img src="pictures/rustscan.png"><br>
Find all open ports <b>fast</b> with Rustscan, automatically pipe them into Nmap. Built with Rust.
</p>
<p align="center">
<img alt="Crates.io" src="https://img.shields.io/crates/d/rust_scan">
</p>
<hr>
| General Linux | Cargo | Arch |
| ------------- | ------------- | ------------ |
| img1 | img2 | img3 |
| Binaries | Cargo install | yay rustscan |
| <p align="center"><a href="https://crates.io/crates/rust_scan">🔧 Cargo (Universal) </a></p> | <p align="center"><a href="https://pypi.org/project/ciphey"> Arch </a></p> | <p align="center"><a href="https://pypi.org/project/ciphey"> HomeBrew </a></p> | <p align="center"><a href="https://pypi.org/project/ciphey"> Kali / Debian </p> |
| ---- | ---- | ---- | --- |
| <p align="center"><img src="pictures/rust.png" /></p> | <p align="center"><img src="pictures/arch.png" /></p> | <p align="center"><img src="pictures/apple.png" /></p> | <p align="center"><img src="pictures/kali.png" /></p> |
| `cargo install rust_scan` | `yay rustscan` | `brew install rustscan` | `dpkg -i rustscan.deb` |
**Note**: You must have Nmap installed.
<hr>
# 🤔 What is this?
If you are a competitive CTF player and often find yourself running masscan / a basic nmap scan before running a more comprehensive scan, this tool is for you.
1. Find ports quickly using Rustscan.
2. Automatically runs `nmap -A -sV -p $ports -vvv` on those ports.
1. Find ports quickly using Rustscan (**26 seconds**).
2. Automatically runs `nmap -A -p $ports -vvv` on those ports.
3. Profit???
![gif](/pictures/intro.gif)
Rustscans **only** job is to reduce the friction between finding open ports and inputting them into nmap.
# RustScan vs Nmap vs MassScan
# ✨ Features
* Scans all 64k ports in 26 seconds (on 1k threads).
* 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!
# 🔭 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 64k ports in less than a minute?
## 🔬 Nmap with and without RustScan
<table>
<tr>
<th>Name</th>
<th>⚡ Nmap with RustScan ⚡ </th>
<th>🐢 Nmap 🐢</th>
</tr>
<tr>
<th>Gif</th>
<td><img src="pictures/with_rustscan.gif" alt="The guy she tells you not to worry about"></td>
<td><img src="pictures/without_rustscan.gif" alt="You"></td>
</tr>
<tr>
<th>Time</th>
<td>39 seconds</td>
<td>17 minutes and 41 seconds</td>
</tr>
<tr>
<th>Setup</th>
<td><ul><li>Set threads to 1000</li></ul></td>
<td><ul><li>Run nmap with -A for all scripts</li><li>Run Nmap with -p- for all ports</li></ul></td>
</tr>
</table>
<sub><b>Note</b> The nmap command used was the same for both of them. Nmap -A.</sub><br>
## 📊 RustScan vs Nmap vs MassScan
| **Name** | RustScan | Nmap | Masscan |
| ------------------------------------------------------------------------------------------ | -------- | ---- | ------- |
@@ -28,9 +68,9 @@ Rustscans **only** job is to reduce the friction between finding open ports and
| Realises it's not useful, and pipes the only useful data into the only useful port scanner | ✅ | ❌ | ❌ |
## FAQ
## 🙋 FAQ
> I think this would be a great port scanner on its own without Nmap!
>
No. If you want a fast port scanner, use Masscan.
> I have this great idea for a script to get information on ports / hosts
@@ -41,18 +81,42 @@ If you're a pentester, then yes, you have Nmap installed.
> I want to contribute!
The only contributions RustScan are accecpting is:
* User Experience
* Making port scanning faster
Great! I'd love some help with this. Read the [contributing.md file](contributing.md) file for more information!
# Other Hacking Projects
## Ciphey
# 📖 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).
# Ideas
If you face any issues at all, please leave a GitHub issue. I have only tested this on Linux, so there may be issues for Mac OS or Windows.
- [ ] Do popular ports first (80, 445, 8080, 21, 22)
- [ ] Option for top 1k ports
- [ ] Affter 1k ports print the nmap command to scan the first 1k so user can run while rustscanner finishes
- [ ] Tar pit prevention (look for different sized payloads)
# 🎪 Contributing
Please read the [contributing.md file](contributing.md)
# 💻 Other Hacking Projects By This Author
## 🧮 Ciphey
Ciphey is an automated decryption tool using artifical intelligence & natural language processing.
[Check it out here!](https://github.com/ciphey/ciphey)
## Contributors ✨
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://skerritt.blog"><img src="https://avatars3.githubusercontent.com/u/10378052?v=4" width="100px;" alt=""/><br /><sub><b>Brandon</b></sub></a><br /><a href="#infra-brandonskerritt" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/brandonskerritt/RustScan/commits?author=brandonskerritt" title="Tests">⚠️</a> <a href="https://github.com/brandonskerritt/RustScan/commits?author=brandonskerritt" title="Code">💻</a> <a href="#design-brandonskerritt" title="Design">🎨</a></td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+8
View File
@@ -0,0 +1,8 @@
This is my first Rust project! As such, I expect there are many, many bugs involved or things that can be sped up.
In particular, here is my roadmap:
* Tokio async
* Better UX
* Optimised code
Please leave issues / pull requests, I'd love to learn more about this amazing language :)
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

File diff suppressed because it is too large. Load diff
Binary file not shown.
+13
View File
@@ -0,0 +1,13 @@
# Generated by makepkg 5.2.1
# using fakeroot version 1.24
pkgname = RustScan-bin
pkgbase = RustScan-bin
pkgver = 0.1.0-1
pkgdesc = Faster Nmap Scanning with Rust
url = https://github.com/brandonskerritt/rustscan
builddate = 1594732664
packager = Unknown Packager
size = 911768
arch = x86_64
license = GNU
provides = RustScan
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
/home/bee/Documents/RustScan/RustScan-0.1.0-x86_64.tar.gz
+112 -65
View File
@@ -1,94 +1,138 @@
use clap::{App, Arg};
use colored::*;
use clap::{App, crate_authors, Arg};
use std::{str::FromStr, net::{IpAddr, TcpStream, SocketAddr}, ops::Range, u16, io};
use rayon::{current_num_threads, prelude::*};
use arrayvec::ArrayVec;
use std::{sync::Mutex, time::Duration};
use rayon::prelude::*;
use std::process::Command;
use std::time::Duration;
use std::{
net::{IpAddr, SocketAddr, TcpStream},
str::FromStr,
};
/// Faster Nmap scanning with Rust
///
fn main() {
let vals = 0..100;
// NMAP top 1k ports
// let NMAP_1000 = vec!(1,3,4,6,7,9,13,17,19,20,21,22,23,24,25,26,30,32,33,37,42,43,49,53,70,79,80,81,82,83,84,85,88,89,90,99,100,106,109,110,111,113,119,125,135,139,143,144,146,161,163,179,199,211,212,222,254,255,256,259,264,280,301,306,311,340,366,389,406,407,416,417,425,427,443,444,445,458,464,465,481,497,500,512,513,514,515,524,541,543,544,545,548,554,555,563,587,593,616,617,625,631,636,646,648,666,667,668,683,687,691,700,705,711,714,720,722,726,749,765,777,783,787,800,801,808,843,873,880,888,898,900,901,902,903,911,912,981,987,990,992,993,995,999,1000,1001,1002,1007,1009,1010,1011,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1102,1104,1105,1106,1107,1108,1110,1111,1112,1113,1114,1117,1119,1121,1122,1123,1124,1126,1130,1131,1132,1137,1138,1141,1145,1147,1148,1149,1151,1152,1154,1163,1164,1165,1166,1169,1174,1175,1183,1185,1186,1187,1192,1198,1199,1201,1213,1216,1217,1218,1233,1234,1236,1244,1247,1248,1259,1271,1272,1277,1287,1296,1300,1301,1309,1310,1311,1322,1328,1334,1352,1417,1433,1434,1443,1455,1461,1494,1500,1501,1503,1521,1524,1533,1556,1580,1583,1594,1600,1641,1658,1666,1687,1688,1700,1717,1718,1719,1720,1721,1723,1755,1761,1782,1783,1801,1805,1812,1839,1840,1862,1863,1864,1875,1900,1914,1935,1947,1971,1972,1974,1984,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2013,2020,2021,2022,2030,2033,2034,2035,2038,2040,2041,2042,2043,2045,2046,2047,2048,2049,2065,2068,2099,2100,2103,2105,2106,2107,2111,2119,2121,2126,2135,2144,2160,2161,2170,2179,2190,2191,2196,2200,2222,2251,2260,2288,2301,2323,2366,2381,2382,2383,2393,2394,2399,2401,2492,2500,2522,2525,2557,2601,2602,2604,2605,2607,2608,2638,2701,2702,2710,2717,2718,2725,2800,2809,2811,2869,2875,2909,2910,2920,2967,2968,2998,3000,3001,3003,3005,3006,3007,3011,3013,3017,3030,3031,3052,3071,3077,3128,3168,3211,3221,3260,3261,3268,3269,3283,3300,3301,3306,3322,3323,3324,3325,3333,3351,3367,3369,3370,3371,3372,3389,3390,3404,3476,3493,3517,3527,3546,3551,3580,3659,3689,3690,3703,3737,3766,3784,3800,3801,3809,3814,3826,3827,3828,3851,3869,3871,3878,3880,3889,3905,3914,3918,3920,3945,3971,3986,3995,3998,4000,4001,4002,4003,4004,4005,4006,4045,4111,4125,4126,4129,4224,4242,4279,4321,4343,4443,4444,4445,4446,4449,4550,4567,4662,4848,4899,4900,4998,5000,5001,5002,5003,5004,5009,5030,5033,5050,5051,5054,5060,5061,5080,5087,5100,5101,5102,5120,5190,5200,5214,5221,5222,5225,5226,5269,5280,5298,5357,5405,5414,5431,5432,5440,5500,5510,5544,5550,5555,5560,5566,5631,5633,5666,5678,5679,5718,5730,5800,5801,5802,5810,5811,5815,5822,5825,5850,5859,5862,5877,5900,5901,5902,5903,5904,5906,5907,5910,5911,5915,5922,5925,5950,5952,5959,5960,5961,5962,5963,5987,5988,5989,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6009,6025,6059,6100,6101,6106,6112,6123,6129,6156,6346,6389,6502,6510,6543,6547,6565,6566,6567,6580,6646,6666,6667,6668,6669,6689,6692,6699,6779,6788,6789,6792,6839,6881,6901,6969,7000,7001,7002,7004,7007,7019,7025,7070,7100,7103,7106,7200,7201,7402,7435,7443,7496,7512,7625,7627,7676,7741,7777,7778,7800,7911,7920,7921,7937,7938,7999,8000,8001,8002,8007,8008,8009,8010,8011,8021,8022,8031,8042,8045,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8093,8099,8100,8180,8181,8192,8193,8194,8200,8222,8254,8290,8291,8292,8300,8333,8383,8400,8402,8443,8500,8600,8649,8651,8652,8654,8701,8800,8873,8888,8899,8994,9000,9001,9002,9003,9009,9010,9011,9040,9050,9071,9080,9081,9090,9091,9099,9100,9101,9102,9103,9110,9111,9200,9207,9220,9290,9415,9418,9485,9500,9502,9503,9535,9575,9593,9594,9595,9618,9666,9876,9877,9878,9898,9900,9917,9929,9943,9944,9968,9998,9999,10000,10001,10002,10003,10004,10009,10010,10012,10024,10025,10082,10180,10215,10243,10566,10616,10617,10621,10626,10628,10629,10778,11110,11111,11967,12000,12174,12265,12345,13456,13722,13782,13783,14000,14238,14441,14442,15000,15002,15003,15004,15660,15742,16000,16001,16012,16016,16018,16080,16113,16992,16993,17877,17988,18040,18101,18988,19101,19283,19315,19350,19780,19801,19842,20000,20005,20031,20221,20222,20828,21571,22939,23502,24444,24800,25734,25735,26214,27000,27352,27353,27355,27356,27715,28201,30000,30718,30951,31038,31337,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,33354,33899,34571,34572,34573,35500,38292,40193,40911,41511,42510,44176,44442,44443,44501,45100,48080,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49163,49165,49167,49175,49176,49400,49999,50000,50001,50002,50003,50006,50300,50389,50500,50636,50800,51103,51493,52673,52822,52848,52869,54045,54328,55055,55056,55555,55600,56737,56738,57294,57797,58080,60020,60443,61532,61900,62078,63331,64623,6 Line truncated
let matches = App::new("RustScan")
.author(crate_authors!())
.author("Bee https://github.com/brandonskerritt")
.about("Fast Port Scanner built in Rust")
.version("0.01")
// IP address is a required argument
.arg(Arg::with_name("i")
.required(true)
.index(1)
.long("--ip-address")
.long("ip-address")
.help("The IP address to scan"))
.arg(Arg::with_name("p")
.index(2)
.long("--ports")
.help("The port range you want to scan"))
.arg(Arg::with_name("t")
.short("t")
.long("threads")
.takes_value(true)
.default_value("250")
.help("How many threads do you want to use? Default 1000"))
.arg(Arg::with_name("T")
.short("T")
.long("timeout")
.takes_value(true)
.default_value("250")
.help("The timeout before a port is assumed to be close. Default 250, but can go up to 1000."))
/*.arg(Arg::with_name("n")
.short("n")
.long("nmap-1000")
.takes_value(true)
.help("Use the nmap top 1k ports"))*/
.get_matches();
print_opening();
let ip = matches.value_of("i").unwrap_or("None");
if ip == "None"{
println!("{}", "Error: No input was given.".red());
return ();
}
let threads_str: &str = matches.value_of("t").unwrap_or("None");
// let nmap_arg = matches.value_of("n").unwrap_or("None");
let threads: usize = threads_str.parse::<usize>().unwrap();
// gets timeout duration
let duration_timeout = Duration::from_millis(
matches
.value_of("T")
.unwrap_or("None")
.parse::<u64>()
.unwrap(),
);
// let ports = if !(nmap_arg == "None") { NMAP_1000.iter() } else {(1..65536)};
// validatses the IP address and turns it into an IpAddr type
let addr = IpAddr::from_str(&ip)
.expect("IPADDR must be a valid IPv4 or IPv6 address");
// validates the IP address and turns it into an IpAddr type
let addr = IpAddr::from_str(&ip).expect("IPADDR must be a valid IPv4 or IPv6 address");
println!("IP is {}", addr);
// increases thread pool
rayon::ThreadPoolBuilder::new()
.num_threads(threads)
.build_global()
.unwrap();
rayon::ThreadPoolBuilder::new().num_threads(1000).build_global().unwrap();
thread_scan(addr);
// let _nmap: &str = "nmap -A -sV -vvv -p $ports $ipaddr"
}
/// Runs Rayon to paralleise the scan
fn thread_scan(addr: IpAddr){
// timeout in miliseconds
// TODO set this to ping
let duration_timeout = Duration::from_millis(600);
let mut arr = Mutex::new(Vec::new());
// collect_into_vec is faster than into_vec
let mut ports_full: Vec<bool> = vec![false; 65536];
// performs the scan using rayon
// 65535 + 1 because of 0 indexing
(1..100).into_par_iter().for_each(|x: i32| {
// if valid port,
let result = scan(addr, x, duration_timeout);
if result.0 == true{
arr.push(result.2);
}
}
)
}
// TODO let the user decide max port number
(1..65536)
.into_par_iter()
.map(|x: i32| scan(addr, x, duration_timeout))
.collect_into_vec(&mut ports_full);
fn scan(addr: IpAddr, port_num: i32, duration_timeout: Duration) -> (bool, IpAddr, String){
// pings it to see if its open
let string_list = vec![addr.to_string(), ].join(":");
let server: SocketAddr = string_list
.parse()
.expect("Unable to parse socket address");
// match TcpStream::connect_timeout(&server, duration_timeout) {
match TcpStream::connect_timeout(&server,duration_timeout) {
// prints ports and places them into nmap string
let mut nmap_str_ports = Vec::new();
// makes vector of open ports
for (i, item) in ports_full.iter().enumerate() {
if item == &true {
// appends it to port
nmap_str_ports.push((i + 1).to_string());
}
}
// if no ports are found, suggest running with less threads
if nmap_str_ports.is_empty() {
panic!("{} Looks like I didn't find any open ports. This is usually caused by too many threads. \n*I used {} threads, consider lowering to {} with {} or a comfortable number lfor your system. \n Alternatively, increase the timeout if your ping is high. Rustscan -T 1500 for 1.5 second timeout.", "ERROR".red(), threads_str, (threads / 2).to_string().green(), "'rustscan -t <thread_nums> <ip address>'".green());
}
// Tells the user we are now switching to Nmap
println!(
"{} -A -p {:?} -vvv {}",
"Starting nmap".blue(),
nmap_str_ports,
ip
);
// nmap port style is 80,443. Comma seperated with no spaces.
let ports_str = nmap_str_ports.join(",");
// Runs the nmap command and spawns it as a process.
Command::new("nmap")
.arg("-A")
.arg("-p")
.arg(ports_str)
.arg("-vvv")
.arg(ip)
.spawn()
.expect("failed to execute process");
}
fn scan(addr: IpAddr, port: i32, duration_timeout: Duration) -> bool {
let string_list = vec![addr.to_string(), port.to_string()].join(":");
let server: SocketAddr = string_list.parse().expect("Unable to parse socket address");
match TcpStream::connect_timeout(&server, duration_timeout) {
Ok(_) => {
// Found open port, indicate progress and send to main thread
println!("{}", server.to_string().green());
return (true, addr, port_num.to_string());
// Found open port, indicate progress
println!("{} open", port.to_string().green());
true
}
Err(_) => {
return (false, addr, port_num.to_string());
false
}
}
}
fn print_opening(){
fn print_opening() {
let s = "
_____ _ _____
| __ \\ | | / ____|
@@ -96,8 +140,11 @@ fn print_opening(){
| _ / | | / __| __|\\___ \\ / __/ _` | '_ \\
| | \\ \\ |_| \\__ \\ |_ ____) | (_| (_| | | | |
|_| \\_\\__,_|___/\\__|_____/ \\___\\__,_|_| |_|
Faster nmap scanning with rust.";
println!("{} \n {} \n {}", s.green(), "Automated Decryption Tool - https://github.com/ciphey/ciphey".red(),"Creator https://github.com/brandonskerritt".green());
Faster nmap scanning with rust.";
println!(
"{} \n {} \n {}",
s.green(),
"Automated Decryption Tool - https://github.com/ciphey/ciphey".red(),
"Creator https://github.com/brandonskerritt".green()
);
}