Чтобы получить список всех сертификатов на сервере данного IP-адреса поток высокого уровня будет идти, как это:
For each IP:
For every port:
initiate a TLS/SSL connection
collect SSL Certificate information
then do your parsing, extraction etc
Стандартная библиотека Python имеет важное значение вам нужно, чтобы идти с основной частью:
>>> import ssl
>>> ssl.get_server_certificate(('www.google.com', 443,))
'-----BEGIN CERTIFICATE-----\nMIIEgDCCA2igAwIBAgIIcdMVyU ...
[...]
\nsaofrQ==\n-----END CERTIFICATE-----\n'
Те же работы для IP-:
>>> ssl.get_server_certificate(('109.88.203.241', 443,))
Вы можете написать сканирование цикл более или менее таким образом:
import ssl
for ip in ips_to_scan:
for port in range(65536):
try:
yield ssl.get_server_certificate((ip, port,))
except:
pass
Примечание: я игнорирую вопросы сетевой вежливости, и оставляя в стороне Nmap, так как это вопрос Python. Проба try/except тоже жестока, но это пример. Конечно, вы можете, конечно, усовершенствовать управление ошибками.
Существует много доступных библиотек, которые имеют дело с этим слишком за пределами этого и для более продвинутых продуктов. Некоторые из них включают в себя:
Судя по всему вы имеете в виду порт или SNI или оба? –
Это может быть либо. –
Порт может быть хорошей задачей для nmap. Для этого есть сценарий сканера. Чтобы сделать это с помощью SNI, вам нужно сначала узнать имена хостов. –