diff --git a/README.md b/README.md index 59128b6..47918ca 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## About -It's a simple script running in python that collects SSL information then it returns the group of information in JSON. It can also connects trough your specified SOCKS server. +It's a simple script running in python that collects SSL information then it returns the group of information in JSON. It can also connects trough your specified SOCKS server. ## Requirements @@ -15,7 +15,8 @@ You only need to installl pyOpenSSL: ``` ./ssl_checker.py -h -usage: ssl_checker.py -H [HOSTS [HOSTS ...]] [-s HOST:PORT] [-j] [-p] [-h] +usage: ssl_checker.py -H [HOSTS [HOSTS ...]] [-s HOST:PORT] [-j] + [-c FILENAME.CSV] [-p] [-h] optional arguments: -H [HOSTS [HOSTS ...]], --host [HOSTS [HOSTS ...]] @@ -23,6 +24,8 @@ optional arguments: -s HOST:PORT, --socks HOST:PORT Enable SOCKS proxy for connection -j, --json Enable JSON in the output + -c FILENAME.CSV, --csv FILENAME.CSV + Enable CSV file export -p, --pretty Print pretty and more human readable Json -h, --help Show this help message and exit ``` @@ -31,13 +34,15 @@ optional arguments: Port is optional here. The script will use 443 if not specified. -`-j, --json` Use this if you want to only have the result in JSON - -`-p, --pretty` Use this with `-j` to print indented and human readable JSON +`-H, --host` Enter the hosts separated by space `-s, --socks` Enable connection through SOCKS server -`-H, --host` Enter the hosts separated by space +`-j, --json` Use this if you want to only have the result in JSON + +`-c, --csv` Enable CSV file export by specifying filename.csv after this argument + +`-p, --pretty` Use this with `-j` to print indented and human readable JSON `-h, --help` Shows the help and exit @@ -146,3 +151,28 @@ narbeh@narbeh-xps:~/ssl-checker$ ./ssl_checker.py -j -p -H narbeh.org:443 test. 'valid_till': '2020-01-24', 'validity_days': 1104}} ``` + + + +CSV export is also easy. After running the script with `-c/--csv` argument and specifying `filename.csv` after it, you'll have something like this: + +``` +narbeh@narbeh-xps:~/ssl-checker$ cat domain.csv +narbeh.org +issued_to,narbeh.org +valid_till,2018-07-20 +valid_from,2018-04-21 +issuer_ou,None +cert_ver,2 +cert_alg,sha256WithRSAEncryption +cert_exp,False +issuer_c,US +issuer_cn,Let's Encrypt Authority X3 +issuer_o,Let's Encrypt +validity_days,90 +cert_sn,338163108483756707389368573553026254634358 + +``` + + + diff --git a/ssl_checker.py b/ssl_checker.py index d881e07..7c88c5d 100755 --- a/ssl_checker.py +++ b/ssl_checker.py @@ -99,7 +99,7 @@ def show_result(user_args): hosts = user_args.hosts if not user_args.json_true: - print('Analyzing {} host(s):\n{}\n'.format(len(hosts), '-' * 20)) + print('Analyzing {} host(s):\n{}\n'.format(len(hosts), '-' * 21)) for host in hosts: host, port = filter_hostname(host) @@ -123,7 +123,11 @@ def show_result(user_args): if not user_args.json_true: print('\n{} successful and {} failed\n'.format(len(hosts) - failed_cnt, failed_cnt)) - # Enable JSON output if -j argument specified + # CSV export if -c/--csv is specified + if user_args.csv_enabled: + export_csv(context, user_args.csv_enabled) + + # Enable JSON output if -j/--json argument specified if user_args.json_true: if user_args.pretty_output: from pprint import pprint @@ -132,6 +136,15 @@ def show_result(user_args): print(context) +def export_csv(context, filename): + """Export all context results to CSV file.""" + with open(filename, 'w') as csv_file: + for host in context.keys(): + csv_file.write('{}\n'.format(host)) + for key, value in context[host].items(): + csv_file.write('{},{}\n'.format(key, value)) + + def filter_hostname(host): """Remove unused characters and split by address and port.""" host = host.replace('http://', '').replace('https://', '').replace('/', '') @@ -153,6 +166,9 @@ def get_args(): parser.add_argument('-j', '--json', dest='json_true', action='store_true', default=False, help='Enable JSON in the output') + parser.add_argument('-c', '--csv', dest='csv_enabled', + default=False, metavar='FILENAME.CSV', + help='Enable CSV file export') parser.add_argument('-p', '--pretty', dest='pretty_output', action='store_true', default=False, help='Print pretty and more human readable Json')