Я ищу, чтобы очистить данные SSL из списка имен хостов. Все работает, как и ожидалось, за исключением того, что функция get_cert_data возвращает None из-за отсутствия сертификата SSL или невозможности подключения к хосту. Значение None добавляется в certs_list в любом случае. Я использую большой список из 1 миллиона хостов, и я ожидаю, что большинство из них не будет иметь SSL-сертификата из-за характера данных. Понятно, что я хотел бы сохранить память, а не хранить 900K Нет значений в списке. Спасибо, что нашли время, чтобы прочитать это далеко! Бонус: имеет ли смысл использовать доменное имя или имя хоста для получения этих данных и почему?
import concurrent.futures
import pandas as pd
df = pd.read_csv('hostnames.csv')
hosts_list = df['Host name'].tolist()
def get_cert_data(hostname):
try:
ctx = ssl.create_default_context()
s = ctx.wrap_socket(socket.socket(), server_hostname=hostname)
s.connect((hostname, 443))
cert = s.getpeercert()
issuer = dict(x[0] for x in cert['issuer'])
issued_by = issuer['organizationName']
if not "COMODO" in issued_by.upper():
pass
else:
print(issued_by)
return cert
except Exception as e:
pass
with concurrent.futures.ThreadPoolExecutor(max_workers = 16) as pool:
certs_list = list(pool.map(get_cert_data, hosts_list))