Fast and configurable TLS grabber focused on TLS based data collection.
Fast and configurable TLS grabber focused on TLS based data collection.
Features • Installation • Usage • Running tlsx • Join Discord
A fast and configurable TLS grabber focused on TLS based data collection and analysis.
tlsx requires Go 1.25 to install successfully. To install, just run the below command or download pre-compiled binary from release page.
go install github.com/projectdiscovery/tlsx/cmd/tlsx@latesttlsx -hThis will display help for the tool. Here are all the switches it supports.
…Examples of using tlsx as library are provided in the examples folder.
tlsx requires ip to make TLS connection and accept multiple format as listed below:
AS1449 # ASN input
173.0.84.0/24 # CIDR input
93.184.216.34 # IP input
example.com # DNS input
example.com:443 # DNS input with port
https://example.com:443 # URL input portInput host can be provided using -host / -u flag, and multiple values can be provided using comma-separated input, similarly file input is supported using -list / -l flag.
Example of comma-separated host input:
$ tlsx -u 93.184.216.34,example.com,example.com:443,https://example.com:443 -silentExample of file based host input:
$ tlsx -list host_list.txtPort Input:
tlsx connects on port 443 by default, which can be customized using -port / -p flag, single or multiple ports can be specified using comma sperated input or new line delimited file containing list of ports to connect.
Example of comma-separated port input:
$ tlsx -u hackerone.com -p 443,8443Example of file based port input:
$ tlsx -u hackerone.com -p port_list.txtNote:
When input host contains port in it, for example,
8.8.8.8:443orhackerone.com:8443, port specified with host will be used to make TLS connection instead of default or one provided using-port / -pflag.
This will run the tool against the given CIDR range and returns hosts that accepts tls connection on port 443.
$ echo 173.0.84.0/24 | tlsx
_____ _ _____ __
|_ _| | / __\ \/ /
| | | |__\__ \> `: Upload a specific JSONL file to PDCP
- `-auth `: PDCP API key (can also be set via environment or credentials handler)
- `-tid, --team-id `: Specify team ID for uploads
- `-aid, --asset-id `: Upload to an existing asset ID
- `-aname, --asset-name `: Set a custom name for the asset group
Example with all options:
```console
$ tlsx -u example.com -pd -json -tid team123 -aname "Production Scan"
…
console
$ echo tls-v1-0.badssl.com | tlsx -port 1010 -sm ztls
_____ _ _____ __
|_ _| | / __\ \/ /
| | | |__\__ \> **Note**:
> **pre-handshake** mode utilizes `ztls` (**zcrypto/tls**) which also means the support is limited till `TLS v1.2` as `TLS v1.3` is not supported by `ztls` library.
### TLS Version
**Minimum** and **Maximum** TLS versions can be specified using `-min-version` and `-max-version` flags, as default these value are set by underlying used library.
The acceptable values for TLS version is specified below.
- `ssl30`
- `tls10`
- `tls11`
- `tls12`
- `tls13`
Here is an example using `max-version` to scan for hosts supporting an older version of TLS, i.e **TLS v1.0**
```console
$ tlsx -u example.com -max-version tls10
_____ _ _____ __
|_ _| | / __\ \/ /
| | | |__\__ \> =` | Custom per-log index (repeatable). Sets starting index to _n_ for the specified log URL/ID. Example: `--ctl-index https://ct.googleapis.com/logs/argon2023=123456` |
```bash
# Replay the entire history
$ tlsx -ctl -cb -silent > all_certs.jsonl
# Resume at custom positions for two logs
$ tlsx -ctl -cti https://ct.googleapis.com/logs/argon2023=987654 -cti cloudflare-nimbus2024=543210 \
-silent | jq -r .ct_sourceBy default duplicates are filtered out using a large inverse bloom filter. Pass -v to observe verbose statistics.
No open issues yet, or sync has not completed.