> For the complete documentation index, see [llms.txt](https://docs.shakiba.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shakiba.net/tools/curly.md).

# 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
```
