├── .gitignore
├── img
└── kurl-demo.jpg
├── src
├── tests.rs
├── print.rs
└── main.rs
├── .github
└── workflows
│ └── rust.yml
├── Cargo.toml
├── LICENSE
├── README.md
└── Cargo.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | .DS_Store
3 | tmp*
4 | .tmp*
5 |
--------------------------------------------------------------------------------
/img/kurl-demo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gbrls/kurl/HEAD/img/kurl-demo.jpg
--------------------------------------------------------------------------------
/src/tests.rs:
--------------------------------------------------------------------------------
1 | #[cfg(test)]
2 | mod tests {
3 | use crate::*;
4 |
5 | #[test]
6 | fn a() {}
7 | }
8 |
--------------------------------------------------------------------------------
/.github/workflows/rust.yml:
--------------------------------------------------------------------------------
1 | name: Rust
2 |
3 | on:
4 | push:
5 | branches: [ "main" ]
6 | pull_request:
7 | branches: [ "main" ]
8 |
9 | env:
10 | CARGO_TERM_COLOR: always
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | steps:
18 | - uses: actions/checkout@v3
19 | - name: Build
20 | run: cargo build --verbose
21 | - name: Run tests
22 | run: cargo test --verbose
23 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "kurl"
3 | version = "0.2.1"
4 | edition = "2021"
5 | license = "MIT"
6 | description = "CLI HTTP client for Security Researchers"
7 | homepage = "https://github.com/gbrls/kurl"
8 | repository = "https://github.com/gbrls/kurl"
9 | readme = "README.md"
10 | categories = ["command-line-utilities"]
11 | keywords = ["http", "security"]
12 |
13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
14 |
15 | [dependencies]
16 | reqwest = {version = "0.11", features = ["blocking", "json", "native-tls"]}
17 | clap = {version = "4.1", features = ["derive"]}
18 | serde_json = "1.0"
19 | colored = "2.0"
20 | xmltree = "0.10"
21 | itertools = "0.10.5"
22 | anyhow = "1.0.70"
23 | thiserror = "1.0"
24 | threadpool = "1.8"
25 | snailquote = "0.3"
26 | strip-ansi-escapes = "0.1"
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Gabriel Schneider
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Kurl
2 |
3 | A Fast and Simple HTTP Client for Security Researchers
4 |
5 |
6 |
7 | Install
8 | •
9 | Usage
10 | •
11 | Concept
12 |
13 |
14 |
15 |
16 |
17 |
18 | 
19 |
20 |
21 |
22 |
23 |
24 | # Install Kurl
25 |
26 | ```bash
27 | cargo install kurl
28 | ```
29 | _For this to work you need to have [Rust installed](https://rustup.rs/)_
30 |
31 | # Concept
32 |
33 | **Kurl** was created to aid my work as a Red Teamer.
34 | Kurl creates an easy to view data sent via HTTP requests by the URLs provided, showing:
35 |
36 | - Status code.
37 | - Response length.
38 | - HTTP Verb.
39 | - **Data format** (json or xml).
40 | - Content-Type.
41 | - The URL itself.
42 |
43 | With kurl it's easy to parse through many URLs to find relevant data. You can visually find what's important for you,
44 | or even output to a file and grep things.
45 |
46 | # Usage
47 |
48 | ```
49 | kurl --help
50 | ```
51 |
52 | Will show the command line usage.
53 |
54 |
55 | ```console
56 | Simple CLI HTTP client focused on security research
57 |
58 | Usage: kurl [OPTIONS]
59 |
60 | Arguments:
61 | URL or file with URLs to send the request
62 |
63 | Options:
64 | -p
65 | Number of parallel threads to send the requests [default: 4]
66 | -X
67 | [default: GET] [possible values: POST, GET, HEAD]
68 | -b, --body
69 |
70 | -d, --data
71 | Data to be sent in the request body
72 | --verbosity-level
73 | [default: 0]
74 | -o