From 934958c3c4d264498970dceb975dcb1a42cd3afd Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 27 Sep 2020 23:17:52 +0100 Subject: [PATCH 1/4] Added DNS lookup using Google DNS, refactored IP code --- Cargo.lock | 512 +++++++++++++++++++++++++++++++++- Cargo.toml | 1 + src/main.rs | 84 ++++-- src/rustscan_scripting_engine | 1 - 4 files changed, 563 insertions(+), 35 deletions(-) delete mode 160000 src/rustscan_scripting_engine diff --git a/Cargo.lock b/Cargo.lock index 478547c25..22f107305 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,20 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "addr2line" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + [[package]] name = "aho-corasick" version = "0.7.13" @@ -15,7 +30,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi", + "winapi 0.3.9", ] [[package]] @@ -24,7 +39,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "winapi", + "winapi 0.3.9", ] [[package]] @@ -95,7 +110,7 @@ dependencies = [ "vec-arena", "waker-fn", "wepoll-sys-stjepang", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -141,6 +156,17 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c17772156ef2829aadc587461c7753af20b7e8db1529bc66855add962a3b35d3" +[[package]] +name = "async-trait" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687c230d85c0a52504709705fc8a53e4a692b83a2184f03dae73e38e1e93a783" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atomic-waker" version = "1.0.0" @@ -155,7 +181,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -164,6 +190,20 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +[[package]] +name = "backtrace" +version = "0.3.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.11.0" @@ -207,6 +247,12 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + [[package]] name = "cache-padded" version = "1.1.1" @@ -261,7 +307,7 @@ checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" dependencies = [ "atty", "lazy_static", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -319,7 +365,7 @@ checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" dependencies = [ "libc", "redox_users", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -328,6 +374,18 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "enum-as-inner" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "env_logger" version = "0.7.1" @@ -353,6 +411,22 @@ version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c85295147490b8fcf2ea3d104080a105a8b2c63f9c319e82c02d8e952388919" +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + [[package]] name = "futures" version = "0.3.5" @@ -480,6 +554,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" + [[package]] name = "gloo-timers" version = "0.2.1" @@ -511,6 +591,17 @@ dependencies = [ "libc", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi 0.3.9", +] + [[package]] name = "humantime" version = "1.3.0" @@ -520,6 +611,38 @@ dependencies = [ "quick-error", ] +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "ipconfig" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" +dependencies = [ + "socket2", + "widestring", + "winapi 0.3.9", + "winreg", +] + [[package]] name = "itertools" version = "0.9.0" @@ -538,6 +661,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + [[package]] name = "kv-log-macro" version = "1.0.7" @@ -559,6 +692,12 @@ version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235" +[[package]] +name = "linked-hash-map" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" + [[package]] name = "log" version = "0.4.11" @@ -568,12 +707,85 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + [[package]] name = "memchr" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +[[package]] +name = "miniz_oxide" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c60c0dfe32c10b43a144bad8fc83538c52f58302c92300ea7ec7bf7b38d5a7b9" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mio" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +dependencies = [ + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "net2" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" +dependencies = [ + "cfg-if", + "libc", + "winapi 0.3.9", +] + [[package]] name = "num-bigint" version = "0.3.0" @@ -614,6 +826,12 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" + [[package]] name = "once_cell" version = "1.4.1" @@ -626,6 +844,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + [[package]] name = "pin-project" version = "0.4.23" @@ -668,7 +892,7 @@ dependencies = [ "libc", "log", "wepoll-sys-stjepang", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -813,6 +1037,31 @@ version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" +[[package]] +name = "resolv-conf" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "ring" +version = "0.16.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "952cd6b98c85bbc30efa1ba5783b8abf12fec8b3287ffa52605b9432313e34e4" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + [[package]] name = "rlimit" version = "0.4.0" @@ -835,6 +1084,25 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rustc-demangle" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" + +[[package]] +name = "rustls" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + [[package]] name = "rustscan" version = "1.9.0" @@ -857,6 +1125,17 @@ dependencies = [ "shell-words", "structopt", "toml", + "trust-dns-resolver", +] + +[[package]] +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -888,6 +1167,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +[[package]] +name = "smallvec" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" + [[package]] name = "socket2" version = "0.3.12" @@ -897,9 +1182,15 @@ dependencies = [ "cfg-if", "libc", "redox_syscall", - "winapi", + "winapi 0.3.9", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "strsim" version = "0.8.0" @@ -959,6 +1250,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thiserror" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thread_local" version = "1.0.1" @@ -968,6 +1279,39 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "tinyvec" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238ce071d267c5710f9d31451efec16c5ee22de34df17cc05e56cbc92e967117" + +[[package]] +name = "tokio" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" +dependencies = [ + "bytes", + "iovec", + "lazy_static", + "memchr", + "mio", + "pin-project-lite", + "slab", +] + +[[package]] +name = "tokio-rustls" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15cb62a0d2770787abc96e99c1cd98fcf17f94959f3af63ca85bdfb203f051b4" +dependencies = [ + "futures-core", + "rustls", + "tokio", + "webpki", +] + [[package]] name = "toml" version = "0.5.6" @@ -977,6 +1321,83 @@ dependencies = [ "serde", ] +[[package]] +name = "trust-dns-proto" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd7061ba6f4d4d9721afedffbfd403f20f39a4301fee1b70d6fcd09cca69f28" +dependencies = [ + "async-trait", + "backtrace", + "enum-as-inner", + "futures", + "idna", + "lazy_static", + "log", + "rand", + "smallvec", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f23cdfdc3d8300b3c50c9e84302d3bd6d860fb9529af84ace6cf9665f181b77" +dependencies = [ + "backtrace", + "cfg-if", + "futures", + "ipconfig", + "lazy_static", + "log", + "lru-cache", + "resolv-conf", + "rustls", + "smallvec", + "thiserror", + "tokio", + "tokio-rustls", + "trust-dns-proto", + "trust-dns-rustls", + "webpki-roots", +] + +[[package]] +name = "trust-dns-rustls" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "365f4f7efd5f7ab30c143ad4172534077f32ccb16b1977d13e9259d2457744c2" +dependencies = [ + "futures", + "log", + "rustls", + "tokio", + "tokio-rustls", + "trust-dns-proto", + "webpki", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.6.0" @@ -995,6 +1416,23 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +dependencies = [ + "idna", + "matches", + "percent-encoding", +] + [[package]] name = "vec-arena" version = "1.0.0" @@ -1101,6 +1539,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab146130f5f790d45f82aeeb09e55a256573373ec64409fc19a6fb82fb1032ae" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739" +dependencies = [ + "webpki", +] + [[package]] name = "wepoll-sys-stjepang" version = "1.0.6" @@ -1110,6 +1567,18 @@ dependencies = [ "cc", ] +[[package]] +name = "widestring" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a763e303c0e0f23b0da40888724762e802a8ffefbc22de4127ef42493c2ea68c" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + [[package]] name = "winapi" version = "0.3.9" @@ -1120,6 +1589,12 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1132,7 +1607,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi", + "winapi 0.3.9", ] [[package]] @@ -1140,3 +1615,22 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] diff --git a/Cargo.toml b/Cargo.toml index 811e8a312..ce3783b0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ serde = "1.0.116" serde_derive = "1.0.116" cidr-utils = "0.5.0" itertools = "0.9.0" +trust-dns-resolver = { version = "0.19.5", features = ["dns-over-rustls"] } [package.metadata.deb] depends = "$auto, nmap" diff --git a/src/main.rs b/src/main.rs index 24e436d66..cb1945a34 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,8 +26,9 @@ use std::io::prelude::*; use std::io::BufReader; use std::net::ToSocketAddrs; use std::process::Command; -use std::str::FromStr; use std::{net::IpAddr, time::Duration}; +use trust_dns_resolver::config::*; +use trust_dns_resolver::Resolver; extern crate colorful; extern crate dirs; @@ -208,6 +209,47 @@ fn build_nmap_arguments<'a>( arguments } +/// Goes through all possible IP inputs (files or via argparsing) +/// Parses the string(s) into IPs +fn parse_addresses(opts: &Opts) -> Vec { + // Construct a new Resolver with default configuration options, DNS. + let mut ips: Vec = Vec::new(); + + for ip_or_host in &opts.addresses { + match read_ips_from_file(ip_or_host.to_owned()) { + Ok(x) => ips.extend(x), + _ => match parse_single_ip_or_host(ip_or_host.to_owned()) { + Ok(x) => ips.extend(x), + _ => { + warning!( + format!("Host {:?} could not be resolved.", ip_or_host), + opts.greppable, + opts.accessible + ); + } + }, + } + } + println!("Ips is {:?}", ips); + ips +} + +/// Uses DNS to get the IPS assiocated with host +fn get_ips_from_host(ip_or_host: &String) -> Result, std::io::Error> { + let mut ips: Vec = Vec::new(); + let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); + + match resolver.lookup_ip(&ip_or_host) { + Ok(x) => { + for ip in x.iter() { + ips.push(ip); + } + } + _ => (), + }; + return Ok(ips); +} + #[cfg(not(tarpaulin_include))] /// Parses an input file of IPs and uses those fn read_ips_from_file(ips: String) -> Result, std::io::Error> { @@ -218,37 +260,29 @@ fn read_ips_from_file(ips: String) -> Result, std::io::Err let mut ips: Vec = Vec::new(); for str_ip in reader.lines() { - match IpAddr::from_str(&str_ip.unwrap()) { - Ok(x) => ips.push(x), - Err(y) => panic!("File does not contain valid IP address. Error at {}", y), - } + // This code assumes that every line in the file is a valid + ips.extend(parse_single_ip_or_host(str_ip.unwrap()).unwrap()); } Ok(ips) } -fn parse_addresses(opts: &Opts) -> Vec { +/// Given a string, parse it as an host, IP address, or CIDR. +/// This allows us to pass files as hosts or cidr or IPs easily +/// Call this everytime you have a possible IP_or_host +fn parse_single_ip_or_host(ip_or_host: String) -> Result, std::io::Error> { let mut ips: Vec = Vec::new(); - - for ip_or_host in &opts.addresses { - match IpCidr::from_str(ip_or_host) { - Ok(cidr) => cidr.iter().for_each(|ip| ips.push(ip)), - _ => match format!("{}:{}", &ip_or_host, 80).to_socket_addrs() { - Ok(mut iter) => ips.push(iter.nth(0).unwrap().ip()), - _ => match read_ips_from_file(ip_or_host.to_owned()) { - Ok(x) => ips.extend(x), - _ => { - warning!( - format!("Host {:?} could not be resolved.", ip_or_host), - opts.greppable, - opts.accessible - ); - } - }, + match IpCidr::from_str(&ip_or_host) { + Ok(cidr) => cidr.iter().for_each(|ip| ips.push(ip)), + _ => match format!("{}:{}", &ip_or_host, 80).to_socket_addrs() { + Ok(mut iter) => ips.push(iter.nth(0).unwrap().ip()), + _ => match get_ips_from_host(&ip_or_host) { + Ok(hosts) => ips.extend(hosts), + _ => (), }, - } - } + }, + }; - ips + Ok(ips) } fn adjust_ulimit_size(opts: &Opts) -> rlimit::rlim { diff --git a/src/rustscan_scripting_engine b/src/rustscan_scripting_engine deleted file mode 160000 index 13c3fabca..000000000 --- a/src/rustscan_scripting_engine +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 13c3fabcacee38deeee56a681e0fdf1404eefa4b From bddb864ed3c77f4ca8eeac1632f23e06c313c5e2 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 27 Sep 2020 23:28:29 +0100 Subject: [PATCH 2/4] fixed comments & cargo fmt --- src/main.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index cb1945a34..0e972252c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -212,7 +212,6 @@ fn build_nmap_arguments<'a>( /// Goes through all possible IP inputs (files or via argparsing) /// Parses the string(s) into IPs fn parse_addresses(opts: &Opts) -> Vec { - // Construct a new Resolver with default configuration options, DNS. let mut ips: Vec = Vec::new(); for ip_or_host in &opts.addresses { @@ -235,9 +234,11 @@ fn parse_addresses(opts: &Opts) -> Vec { } /// Uses DNS to get the IPS assiocated with host -fn get_ips_from_host(ip_or_host: &String) -> Result, std::io::Error> { +fn get_ips_from_host( + ip_or_host: &String, + resolver: Resolver, +) -> Result, std::io::Error> { let mut ips: Vec = Vec::new(); - let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); match resolver.lookup_ip(&ip_or_host) { Ok(x) => { @@ -271,11 +272,13 @@ fn read_ips_from_file(ips: String) -> Result, std::io::Err /// Call this everytime you have a possible IP_or_host fn parse_single_ip_or_host(ip_or_host: String) -> Result, std::io::Error> { let mut ips: Vec = Vec::new(); + let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); + match IpCidr::from_str(&ip_or_host) { Ok(cidr) => cidr.iter().for_each(|ip| ips.push(ip)), _ => match format!("{}:{}", &ip_or_host, 80).to_socket_addrs() { Ok(mut iter) => ips.push(iter.nth(0).unwrap().ip()), - _ => match get_ips_from_host(&ip_or_host) { + _ => match get_ips_from_host(&ip_or_host, resolver) { Ok(hosts) => ips.extend(hosts), _ => (), }, From 5a01dac53b6933ae7273e15fc494007ad2d331b3 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 28 Sep 2020 12:50:03 +0100 Subject: [PATCH 3/4] Fixed code review comments, added tests, removed unwrap() panics --- fixtures/hosts.txt | 6 ++++++ src/main.rs | 47 +++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 fixtures/hosts.txt diff --git a/fixtures/hosts.txt b/fixtures/hosts.txt new file mode 100644 index 000000000..ef3dcb813 --- /dev/null +++ b/fixtures/hosts.txt @@ -0,0 +1,6 @@ +127.0.0.1 +google.com +example.com +66666666666666.666666666666666666.66666666666666666.6666666666 +.... +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.radiatorFixtures \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 0e972252c..4812aed79 100644 --- a/src/main.rs +++ b/src/main.rs @@ -213,11 +213,12 @@ fn build_nmap_arguments<'a>( /// Parses the string(s) into IPs fn parse_addresses(opts: &Opts) -> Vec { let mut ips: Vec = Vec::new(); + let resolver = &Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); for ip_or_host in &opts.addresses { - match read_ips_from_file(ip_or_host.to_owned()) { + match read_ips_from_file(ip_or_host.to_owned(), &resolver) { Ok(x) => ips.extend(x), - _ => match parse_single_ip_or_host(ip_or_host.to_owned()) { + _ => match parse_to_ip(ip_or_host.to_owned(), &resolver) { Ok(x) => ips.extend(x), _ => { warning!( @@ -229,18 +230,17 @@ fn parse_addresses(opts: &Opts) -> Vec { }, } } - println!("Ips is {:?}", ips); ips } /// Uses DNS to get the IPS assiocated with host -fn get_ips_from_host( - ip_or_host: &String, - resolver: Resolver, +fn resolve_ips_from_host( + source: &String, + resolver: &Resolver, ) -> Result, std::io::Error> { let mut ips: Vec = Vec::new(); - match resolver.lookup_ip(&ip_or_host) { + match resolver.lookup_ip(&source) { Ok(x) => { for ip in x.iter() { ips.push(ip); @@ -253,7 +253,10 @@ fn get_ips_from_host( #[cfg(not(tarpaulin_include))] /// Parses an input file of IPs and uses those -fn read_ips_from_file(ips: String) -> Result, std::io::Error> { +fn read_ips_from_file( + ips: String, + resolver: &Resolver, +) -> Result, std::io::Error> { // if we cannot open it as a file, it is not a file so move on let file = File::open(ips)?; let reader = BufReader::new(file); @@ -261,8 +264,17 @@ fn read_ips_from_file(ips: String) -> Result, std::io::Err let mut ips: Vec = Vec::new(); for str_ip in reader.lines() { - // This code assumes that every line in the file is a valid - ips.extend(parse_single_ip_or_host(str_ip.unwrap()).unwrap()); + match str_ip { + Ok(x) => match parse_to_ip(x, resolver) { + Ok(result) => ips.extend(result), + Err(e) => { + debug!("{} is not a valid IP or host", e); + } + }, + Err(_) => { + debug!("Line in file is not valid"); + } + } } Ok(ips) } @@ -270,15 +282,14 @@ fn read_ips_from_file(ips: String) -> Result, std::io::Err /// Given a string, parse it as an host, IP address, or CIDR. /// This allows us to pass files as hosts or cidr or IPs easily /// Call this everytime you have a possible IP_or_host -fn parse_single_ip_or_host(ip_or_host: String) -> Result, std::io::Error> { +fn parse_to_ip(address: String, resolver: &Resolver) -> Result, std::io::Error> { let mut ips: Vec = Vec::new(); - let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); - match IpCidr::from_str(&ip_or_host) { + match IpCidr::from_str(&address) { Ok(cidr) => cidr.iter().for_each(|ip| ips.push(ip)), - _ => match format!("{}:{}", &ip_or_host, 80).to_socket_addrs() { + _ => match format!("{}:{}", &address, 80).to_socket_addrs() { Ok(mut iter) => ips.push(iter.nth(0).unwrap().ip()), - _ => match get_ips_from_host(&ip_or_host, resolver) { + _ => match resolve_ips_from_host(&address, resolver) { Ok(hosts) => ips.extend(hosts), _ => (), }, @@ -456,4 +467,10 @@ mod tests { assert_eq!(ips.is_empty(), true); } + #[test] + fn parse_hosts_file_and_incorrect_hosts() { + // Host file contains IP, Hosts, incorrect IPs, incorrect hosts + let mut opts = Opts::default(); + opts.addresses = vec!["../fixtures/hosts.txt".to_owned()]; + } } From 321b5be691bf29de3a22958bd04c65c07cfb7ca6 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 28 Sep 2020 14:36:34 +0100 Subject: [PATCH 4/4] Added assertion to test --- src/main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 4812aed79..1e3738629 100644 --- a/src/main.rs +++ b/src/main.rs @@ -471,6 +471,8 @@ mod tests { fn parse_hosts_file_and_incorrect_hosts() { // Host file contains IP, Hosts, incorrect IPs, incorrect hosts let mut opts = Opts::default(); - opts.addresses = vec!["../fixtures/hosts.txt".to_owned()]; + opts.addresses = vec!["fixtures/hosts.txt".to_owned()]; + let ips = parse_addresses(&opts); + assert_eq!(ips.len(), 3); } }