Um alle Zertifikate auf einem Server Liste Fluss eine IP-Adresse des hohen Pegels gegeben, wie dies gehen würde:
For each IP:
For every port:
initiate a TLS/SSL connection
collect SSL Certificate information
then do your parsing, extraction etc
Die Standard-Python-Bibliothek hat die wesentlichen Sie mit dem Kernteil brauchen, um loslegen:
>>> import ssl
>>> ssl.get_server_certificate(('www.google.com', 443,))
'-----BEGIN CERTIFICATE-----\nMIIEgDCCA2igAwIBAgIIcdMVyU ...
[...]
\nsaofrQ==\n-----END CERTIFICATE-----\n'
das gleiche funktioniert für eine IP-:
>>> ssl.get_server_certificate(('109.88.203.241', 443,))
können Sie dann den Scan schreiben Schleife mehr oder weniger auf diese Weise:
import ssl
for ip in ips_to_scan:
for port in range(65536):
try:
yield ssl.get_server_certificate((ip, port,))
except:
pass
Anmerkung: Ich bin Fragen der Netzwerk Höflichkeit zu ignorieren, und nmap abgesehen, da dies eine Python Frage. Der Versuch/Ausnahme-Pass ist auch brutal, aber das ist ein Beispiel. Vielleicht möchten Sie das Fehlermanagement natürlich verfeinern.
Es gibt viele Bibliotheken, die sich mit diesem weit über dieses hinaus und für fortgeschrittenere Materialien ausführlich beschäftigen. Einige von ihnen gehören:
Durch alles, was Sie bedeuten durch Port oder von SNI oder beides? –
Es kann entweder sein. –
Per Port könnte eine gute Aufgabe für nmap sein. Dafür gibt es ein Scannerskript. Um dies mit SNI zu tun, müssen Sie die Hostnamen kennen, die zuerst abgefragt werden sollen. –