Python - Как напечатать, сколько веб-сайтов поддерживают каждый запрос ciphersuite - PullRequest
0 голосов
/ 31 октября 2019

Итак, у меня есть 20 сайтов в моем файле hosts.txt, каждый из которых запускает WeakCipher , KnownCipher, ModernCipher, чтобы проверить, можно ли установить соединение.

Это школьное задание, в котором мне приказывают протестировать 3 вида шифров.

Как я могу напечатать, сколько веб-сайтов поддерживают каждый набор шифров?

import socket
import ssl
import grequests
import re


WeakCipher = 'NULL-MD5'

KnownCipher = 'DHE-RSA-AES256-GCM-SHA384'

ModernCipher = 'ECDHE-RSA-AES256-SHA384'

#Read from txt file and convert it into a List.
List = open("C:\\Users\\Farzad\\Desktop\\hosts.txt").read().splitlines()

#async method to do more than 1 URL at a time
rs = (grequests.get(url) for url in List)
requests = grequests.map(rs)


for response in requests:
    urlfix = re.compile(r"https?://(www\.)?")
    urlre = urlfix.sub('', response.url).strip().strip('/')

    context = ssl.create_default_context()
    context.set_ciphers(WeakCipher)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ssl_sock = context.wrap_socket(s, server_hostname=urlre)
    try:
        ssl_sock.connect((urlre, 443))
    except Exception as e:
        print("ERROR:", response.url, "DOES NOT SUPPORT YOUR WEAK CIPHER")
    else:
        print(response.url,"CONNECTION ESTABLISHED WITH YOUR WEAK CIPHER")


    context = ssl.create_default_context()
    context.set_ciphers(KnownCipher)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ssl_sock = context.wrap_socket(s, server_hostname=urlre)
    try:
        ssl_sock.connect((urlre, 443))
    except Exception as e:
        print("ERROR:", response.url, "DOES NOT SUPPORT YOUR MODERN CIPHER")
    else:
        print(response.url,"CONNECTION ESTABLISHED WITH YOUR KNOWN CIPHER" )


    context = ssl.create_default_context()
    context.set_ciphers(ModernCipher)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ssl_sock = context.wrap_socket(s, server_hostname=urlre)
    try:
        ssl_sock.connect((urlre, 443))
    except Exception as e:
        print("ERROR:", response.url, "DOES NOT SUPPORT YOUR MODERN CIPHER" '\n')
    else:
        print(response.url,"CONNECTION ESTABLISHED WITH YOUR MODERN CIPHER" '\n')

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете написать скрипт bash для тестирования комплектов шифров. Он должен получить список поддерживаемых наборов шифров из OpenSSL и попытаться подключиться, используя каждый из них. Если рукопожатие прошло успешно, оно должно вывести ДА. Если рукопожатие не было успешным, оно печатает НЕТ, за которым следует текст ошибки OpenSSL.

nmap содержит пример сценария, к которому вы можете обратиться. Nmap с ssl-enum-шифрами

WeakCipher = 'NULL-MD5'

t_weak=0

context = ssl.create_default_context()
context.set_ciphers(WeakCipher)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname=urlre)
try:
    ssl_sock.connect((urlre, 443))
except Exception as e:
    print("ERROR:", response.url, "DOES NOT SUPPORT YOUR WEAK CIPHER")
else:
    t_weak +=1
    print(response.url,"CONNECTION ESTABLISHED WITH YOUR WEAK CIPHER")

print("Number of websites with Weak cipher", t_weak)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...