# curly

### Description&#x20;

curly is a bash CLI with three things in mind

1. modern user interface and usage
2. scalable base code
3. simplifying workflow for troubleshooting or testing
4. Bash Tab Completion

### install

```bash
# first
git clone https://github.com/k-five/curly.git

# second
sudo mv curly/curly.sh /usr/local/bin/curly

# third, check dependencies
curly --command check
```

### or

```bash
# first
curl -sL https://raw.githubusercontent.com/k-five/curly/master/curly.sh | sudo tee /usr/local/bin/curly

# second
curly --command check
```

### Bash Tab Completion

`curly` has script for tab-completion and you can either install it or loading while you are working with it.

### install

```bash
# first
git clone https://github.com/k-five/curly.git

# second
sudo mv curly/_comp_curly.sh /etc/bash_completion.d/
```

or load it to memory&#x20;

```bash
source curly/_comp_curly.sh
```

###

### Use it without install it

**See the** `--help`

```bash
bash <(curl -sL curl -sL https://raw.githubusercontent.com/k-five/curly/master/curly.sh) --help
```

sampel output

```bash
 /dev/fd/63 help ...

definition:
 doing things in a 'curl' way ...

arguments:
 -F | --ftp             FTP actions ...
    |                   check: checking FTP connection
    |                   mount: mount over FTP
    |                   umount: umount: umount FTP mount point
    |                   upload: upload: upload to a FTP account
    |                   download: download: download from a FTP account
    | --fc              ftp configuration file
    | --fmp             ftp mount point (local machine)
    | --fl              ftp local file for upload
    | --fr              ftp remote path

 -S | --ssl             SSL actions ...
    |                   valid: checking if SSL of a domain is valid
    |                   date: check start and end date of the certificate
    |                   cert: show the certificate
    |                   name: name of domains the certificate issued for
    |                   issue_dv: issue Domain Validation cert
    |                   issue_wc: issue Wild Card cert

 -H | --http            HTTP actions ....
    |                   response: print response header of server
    |                   redirect: check if redirect id done or not
    |                   status: print status for the GET request
    |                   ttfb: print statistics about Time to First Byte
    |                   gzip: check if gzip is enabled or not
                        
 -D | --dns             DNS actions ...
    |                   root: check on root DNS servers
    |                   public: check on public DNS servers e.g 1.1.1.1
    |                   trace: trace from a public DNS server to main server
    | --dc              dns servers to use, default is: 1.1.1.1
    |                   or a file containing some DNS servers ( IPs | names )

 -I | --ip              IP actions ...
    |                   info: any info based on shodan dB
    |                   port: quick check open ports
    |                   route: trace route
    | --ia              ip address e.g. : 1.1.1.1
    | --im              maximum number of hops
    | --ic              set the number of pings sent

 -E | --email           Email actions ...
    |                   send: send an email
    | --ec              email configuration file for sending an email
    | --eb              email body (= contents) of the email that is send

 -C | --command         Command actions ...
    |                   check: check prerequisite for run curly
    |                   install: install all prerequisite

 -h | --help            print this help
 -d | --domain          name of a domain, e.g. example.com

Copyright (C) 2020 Shakiba Moshiri
https://github.com/k-five/curly 
```

**Check the dependencies**

```bash
bash <(curl -sL curl -sL https://raw.githubusercontent.com/k-five/curly/master/curly.sh) --command check
```

sample out

```bash
curl ................ [ OK ]
curlftpfs ........... [ OK ]
perl ................ [ OK ]
nmap ................ [ OK ]
openssl ............. [ OK ]
certbot ............. [ OK ]
dig ................. [ OK ]
grep ................ [ OK ]
sed ................. [ OK ]
shodan .............. [ OK ]
mtr ................. [ OK ]
echo ................ [ OK ]

option: command
action: check
status: OK
```

**Run it**

```bash
bash <(curl -sL curl -sL https://raw.githubusercontent.com/k-five/curly/master/curly.sh) --http ttfb -d shakiba.net
url_effective       http://shakiba.net/
time_namelookupe    0.510002 | DNS lookup
time_connect        0.651661 | TCP connection
time_appconnect     0.000000 | App connection
time_redirect       0.000000 | Redirection time
time_starttransfer  0.825659 | TTFB
time_total          0.825722

option: http
action: ttfb
status: OK
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.shakiba.net/tools/curly.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
