-
Notifications
You must be signed in to change notification settings - Fork 436
/
running-a-scan-in-python.html
718 lines (613 loc) · 78.3 KB
/
running-a-scan-in-python.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<title>Running a Scan in Python — SSLyze 6.0.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" />
<script src="_static/documentation_options.js?v=12958129"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Exporting and processing scan results in JSON" href="json-output.html" />
<link rel="prev" title="SSLyze" href="index.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="running-a-scan-in-python">
<h1>Running a Scan in Python<a class="headerlink" href="#running-a-scan-in-python" title="Link to this heading">¶</a></h1>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">¶</a></h2>
<p>SSLyze’s Python API can be used to run scans and process results in an automated fashion.</p>
<p>Every SSLyze class has typing annotations, which allows IDEs such as VS Code and PyCharms to auto-import modules
and auto-complete field names. Make sure to leverage this typing information as it will make it significantly easier
to use SSLyze’s Python API.</p>
<p>To run a scan against a server, the scan can be described via the <code class="docutils literal notranslate"><span class="pre">ServerScanRequest</span></code> class, which contains
information about the server to scan(hostname, port, etc.):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
<span class="n">all_scan_requests</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">ServerScanRequest</span><span class="p">(</span><span class="n">server_location</span><span class="o">=</span><span class="n">ServerNetworkLocation</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="s2">"cloudflare.com"</span><span class="p">)),</span>
<span class="n">ServerScanRequest</span><span class="p">(</span><span class="n">server_location</span><span class="o">=</span><span class="n">ServerNetworkLocation</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="s2">"google.com"</span><span class="p">)),</span>
<span class="p">]</span>
<span class="k">except</span> <span class="n">ServerHostnameCouldNotBeResolved</span><span class="p">:</span>
<span class="c1"># Handle bad input ie. invalid hostnames</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error resolving the supplied hostnames"</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
<p>More details can optionally be supplied to the <code class="docutils literal notranslate"><span class="pre">ServerScanRequest</span></code>, including:</p>
<ul class="simple">
<li><p>Server settings via the <code class="docutils literal notranslate"><span class="pre">server_location</span></code> argument, for example to use an HTTP proxy, or scan a specific IP address.</p></li>
<li><p>Network settings via the <code class="docutils literal notranslate"><span class="pre">network_configuration</span></code> argument, for example to configure a client certificate, or scan a non-HTTP server.</p></li>
<li><p>A specific of specific TLS checks to run (Heartbleed, cipher suites, etc.), via the <cite>scan_commands</cite> argument. By default, all the checks will be enabled.</p></li>
</ul>
<p>Every type of TLS check that SSLyze can run against a server (supported cipher suites, Heartbleed, etc.) is
represented by a <code class="docutils literal notranslate"><span class="pre">ScanCommand</span></code>. Once a <code class="docutils literal notranslate"><span class="pre">ScanCommand</span></code> is run against a server, it returns a “result” object with
attributes containing the results of the scan command.</p>
<p>All the available <code class="docutils literal notranslate"><span class="pre">ScanCommands</span></code> and corresponding results are described in <a class="reference internal" href="available-scan-commands.html"><span class="doc">Appendix: Scan Commands</span></a>.</p>
<p>Then, to start the scan, pass the list of <code class="docutils literal notranslate"><span class="pre">ServerScanRequest</span></code> to <code class="docutils literal notranslate"><span class="pre">Scanner.queue_scans()</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">scanner</span> <span class="o">=</span> <span class="n">Scanner</span><span class="p">()</span>
<span class="n">scanner</span><span class="o">.</span><span class="n">queue_scans</span><span class="p">(</span><span class="n">all_scan_requests</span><span class="p">)</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">Scanner</span></code> class, uses a pool of workers to run the scans concurrently, but without DOS-ing the servers.</p>
<p>Lastly, the results can be retrieved using the <code class="docutils literal notranslate"><span class="pre">Scanner.get_results()</span></code> method, which returns an iterable of
<code class="docutils literal notranslate"><span class="pre">ServerScanResult</span></code>. Each result is returned as soon as the server scan was completed:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">server_scan_result</span> <span class="ow">in</span> <span class="n">scanner</span><span class="o">.</span><span class="n">get_results</span><span class="p">():</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n\n</span><span class="s2">****Results for </span><span class="si">{</span><span class="n">server_scan_result</span><span class="o">.</span><span class="n">server_location</span><span class="o">.</span><span class="n">hostname</span><span class="si">}</span><span class="s2">****"</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="full-example">
<h2>Full Example<a class="headerlink" href="#full-example" title="Link to this heading">¶</a></h2>
<p>A full example of running a scan on a couple servers follow:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">main</span><span class="p">()</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"=> Starting the scans"</span><span class="p">)</span>
<span class="n">date_scans_started</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span>
<span class="c1"># First create the scan requests for each server that we want to scan</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">all_scan_requests</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">ServerScanRequest</span><span class="p">(</span><span class="n">server_location</span><span class="o">=</span><span class="n">ServerNetworkLocation</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="s2">"cloudflare.com"</span><span class="p">)),</span>
<span class="n">ServerScanRequest</span><span class="p">(</span><span class="n">server_location</span><span class="o">=</span><span class="n">ServerNetworkLocation</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="s2">"google.com"</span><span class="p">)),</span>
<span class="p">]</span>
<span class="k">except</span> <span class="n">ServerHostnameCouldNotBeResolved</span><span class="p">:</span>
<span class="c1"># Handle bad input ie. invalid hostnames</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error resolving the supplied hostnames"</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Then queue all the scans</span>
<span class="n">scanner</span> <span class="o">=</span> <span class="n">Scanner</span><span class="p">()</span>
<span class="n">scanner</span><span class="o">.</span><span class="n">queue_scans</span><span class="p">(</span><span class="n">all_scan_requests</span><span class="p">)</span>
<span class="c1"># And retrieve and process the results for each server</span>
<span class="n">all_server_scan_results</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">server_scan_result</span> <span class="ow">in</span> <span class="n">scanner</span><span class="o">.</span><span class="n">get_results</span><span class="p">():</span>
<span class="n">all_server_scan_results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">server_scan_result</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n\n</span><span class="s2">****Results for </span><span class="si">{</span><span class="n">server_scan_result</span><span class="o">.</span><span class="n">server_location</span><span class="o">.</span><span class="n">hostname</span><span class="si">}</span><span class="s2">****"</span><span class="p">)</span>
<span class="c1"># Were we able to connect to the server and run the scan?</span>
<span class="k">if</span> <span class="n">server_scan_result</span><span class="o">.</span><span class="n">scan_status</span> <span class="o">==</span> <span class="n">ServerScanStatusEnum</span><span class="o">.</span><span class="n">ERROR_NO_CONNECTIVITY</span><span class="p">:</span>
<span class="c1"># No we weren't</span>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Error: Could not connect to </span><span class="si">{</span><span class="n">server_scan_result</span><span class="o">.</span><span class="n">server_location</span><span class="o">.</span><span class="n">hostname</span><span class="si">}</span><span class="s2">:"</span>
<span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">server_scan_result</span><span class="o">.</span><span class="n">connectivity_error_trace</span><span class="si">}</span><span class="s2">"</span>
<span class="p">)</span>
<span class="k">continue</span>
<span class="c1"># Since we were able to run the scan, scan_result is populated</span>
<span class="k">assert</span> <span class="n">server_scan_result</span><span class="o">.</span><span class="n">scan_result</span>
<span class="c1"># Process the result of the SSL 2.0 scan command</span>
<span class="n">ssl2_attempt</span> <span class="o">=</span> <span class="n">server_scan_result</span><span class="o">.</span><span class="n">scan_result</span><span class="o">.</span><span class="n">ssl_2_0_cipher_suites</span>
<span class="k">if</span> <span class="n">ssl2_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">ERROR</span><span class="p">:</span>
<span class="c1"># An error happened when this scan command was run</span>
<span class="n">_print_failed_scan_command_attempt</span><span class="p">(</span><span class="n">ssl2_attempt</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">ssl2_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">COMPLETED</span><span class="p">:</span>
<span class="c1"># This scan command was run successfully</span>
<span class="n">ssl2_result</span> <span class="o">=</span> <span class="n">ssl2_attempt</span><span class="o">.</span><span class="n">result</span>
<span class="k">assert</span> <span class="n">ssl2_result</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Accepted cipher suites for SSL 2.0:"</span><span class="p">)</span>
<span class="k">for</span> <span class="n">accepted_cipher_suite</span> <span class="ow">in</span> <span class="n">ssl2_result</span><span class="o">.</span><span class="n">accepted_cipher_suites</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"* </span><span class="si">{</span><span class="n">accepted_cipher_suite</span><span class="o">.</span><span class="n">cipher_suite</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="c1"># Process the result of the TLS 1.3 scan command</span>
<span class="n">tls1_3_attempt</span> <span class="o">=</span> <span class="n">server_scan_result</span><span class="o">.</span><span class="n">scan_result</span><span class="o">.</span><span class="n">tls_1_3_cipher_suites</span>
<span class="k">if</span> <span class="n">tls1_3_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">ERROR</span><span class="p">:</span>
<span class="n">_print_failed_scan_command_attempt</span><span class="p">(</span><span class="n">ssl2_attempt</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">tls1_3_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">COMPLETED</span><span class="p">:</span>
<span class="n">tls1_3_result</span> <span class="o">=</span> <span class="n">tls1_3_attempt</span><span class="o">.</span><span class="n">result</span>
<span class="k">assert</span> <span class="n">tls1_3_result</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Accepted cipher suites for TLS 1.3:"</span><span class="p">)</span>
<span class="k">for</span> <span class="n">accepted_cipher_suite</span> <span class="ow">in</span> <span class="n">tls1_3_result</span><span class="o">.</span><span class="n">accepted_cipher_suites</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"* </span><span class="si">{</span><span class="n">accepted_cipher_suite</span><span class="o">.</span><span class="n">cipher_suite</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="c1"># Process the result of the certificate info scan command</span>
<span class="n">certinfo_attempt</span> <span class="o">=</span> <span class="n">server_scan_result</span><span class="o">.</span><span class="n">scan_result</span><span class="o">.</span><span class="n">certificate_info</span>
<span class="k">if</span> <span class="n">certinfo_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">ERROR</span><span class="p">:</span>
<span class="n">_print_failed_scan_command_attempt</span><span class="p">(</span><span class="n">certinfo_attempt</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">certinfo_attempt</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">ScanCommandAttemptStatusEnum</span><span class="o">.</span><span class="n">COMPLETED</span><span class="p">:</span>
<span class="n">certinfo_result</span> <span class="o">=</span> <span class="n">certinfo_attempt</span><span class="o">.</span><span class="n">result</span>
<span class="k">assert</span> <span class="n">certinfo_result</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Leaf certificates deployed:"</span><span class="p">)</span>
<span class="k">for</span> <span class="n">cert_deployment</span> <span class="ow">in</span> <span class="n">certinfo_result</span><span class="o">.</span><span class="n">certificate_deployments</span><span class="p">:</span>
<span class="n">leaf_cert</span> <span class="o">=</span> <span class="n">cert_deployment</span><span class="o">.</span><span class="n">received_certificate_chain</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">leaf_cert</span><span class="o">.</span><span class="n">public_key</span><span class="p">()</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">leaf_cert</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">rfc4514_string</span><span class="p">()</span><span class="si">}</span><span class="s2">"</span>
<span class="sa">f</span><span class="s2">" (Serial: </span><span class="si">{</span><span class="n">leaf_cert</span><span class="o">.</span><span class="n">serial_number</span><span class="si">}</span><span class="s2">)"</span>
<span class="p">)</span>
<span class="c1"># etc... Other scan command results to process are in server_scan_result.scan_result</span>
<span class="c1"># Lastly, save the all the results to a JSON file</span>
<span class="n">json_file_out</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">"api_sample_results.json"</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n\n</span><span class="s2">=> Saving scan results to </span><span class="si">{</span><span class="n">json_file_out</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="n">example_json_result_output</span><span class="p">(</span><span class="n">json_file_out</span><span class="p">,</span> <span class="n">all_server_scan_results</span><span class="p">,</span> <span class="n">date_scans_started</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">())</span>
<span class="c1"># And ensure we are able to parse them</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="se">\n\n</span><span class="s2">=> Parsing scan results from </span><span class="si">{</span><span class="n">json_file_out</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="n">example_json_result_parsing</span><span class="p">(</span><span class="n">json_file_out</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="classes-for-starting-a-scan">
<h2>Classes for Starting a Scan<a class="headerlink" href="#classes-for-starting-a-scan" title="Link to this heading">¶</a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerScanRequest">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerScanRequest</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">server_location</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">network_configuration=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scan_commands=<factory></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scan_commands_extra_arguments=<factory></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uuid=<factory></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerScanRequest" title="Link to this definition">¶</a></dt>
<dd><p>A request to scan a specific server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>server_location</strong> (<a class="reference internal" href="#sslyze.ServerNetworkLocation" title="sslyze.server_setting.ServerNetworkLocation"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerNetworkLocation</span></code></a>) – The server to scan.</p></li>
<li><p><strong>network_configuration</strong> (<a class="reference internal" href="#sslyze.ServerNetworkConfiguration" title="sslyze.server_setting.ServerNetworkConfiguration"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerNetworkConfiguration</span></code></a>) – An optional network configuration. If not supplied, a default configuration will be used.</p></li>
<li><p><strong>scan_commands</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">Set</span></code>[<a class="reference internal" href="available-scan-commands.html#sslyze.ScanCommand" title="sslyze.plugins.scan_commands.ScanCommand"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScanCommand</span></code></a>]) – An optional list of scan commands to run against the server. If not supplied, all available
scan commands will be run.</p></li>
<li><p><strong>scan_commands_extra_arguments</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">ScanCommandsExtraArguments</span></code>) – An optional list of extra arguments specific to some scan commands. If not
supplied, no extra arguments will be set.</p></li>
<li><p><strong>uuid</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">UUID</span></code>) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerNetworkLocation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">hostname</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">443</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ip_address</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">http_proxy_settings</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerNetworkLocation" title="Link to this definition">¶</a></dt>
<dd><p>All the information needed to connect to a server.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation.hostname">
<span class="sig-name descname"><span class="pre">hostname</span></span><a class="headerlink" href="#sslyze.ServerNetworkLocation.hostname" title="Link to this definition">¶</a></dt>
<dd><p>The server’s hostname.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation.port">
<span class="sig-name descname"><span class="pre">port</span></span><a class="headerlink" href="#sslyze.ServerNetworkLocation.port" title="Link to this definition">¶</a></dt>
<dd><p>The server’s TLS port number.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation.connection_type">
<span class="sig-name descname"><span class="pre">connection_type</span></span><a class="headerlink" href="#sslyze.ServerNetworkLocation.connection_type" title="Link to this definition">¶</a></dt>
<dd><p>How sslyze should connect to the server: either directly, or via an HTTP proxy.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation.ip_address">
<span class="sig-name descname"><span class="pre">ip_address</span></span><a class="headerlink" href="#sslyze.ServerNetworkLocation.ip_address" title="Link to this definition">¶</a></dt>
<dd><p>The server’s IP address; only set if sslyze is connecting directly to the server. If no IP address
is supplied and connection_type is set to DIRECT, sslyze will automatically lookup one IP address for the
supplied hostname.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkLocation.http_proxy_settings">
<span class="sig-name descname"><span class="pre">http_proxy_settings</span></span><a class="headerlink" href="#sslyze.ServerNetworkLocation.http_proxy_settings" title="Link to this definition">¶</a></dt>
<dd><p>The HTTP proxy configuration to use in order to tunnel the scans through a proxy; only set
if sslyze is connecting to the server via an HTTP proxy. The proxy will be responsible for looking up the
server’s IP address and connecting to it.</p>
</dd></dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>hostname</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – </p></li>
<li><p><strong>port</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>) – </p></li>
<li><p><strong>ip_address</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]) – </p></li>
<li><p><strong>http_proxy_settings</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">HttpProxySettings</span></code>]) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.Scanner">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">Scanner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">per_server_concurrent_connections_limit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">concurrent_server_scans_limit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">observers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.Scanner" title="Link to this definition">¶</a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>per_server_concurrent_connections_limit</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>]) – </p></li>
<li><p><strong>concurrent_server_scans_limit</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>]) – </p></li>
<li><p><strong>observers</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">Sequence</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">ScannerObserver</span></code>]]) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<section id="additional-settings-starttls-sni-etc">
<h3>Additional settings: StartTLS, SNI, etc.<a class="headerlink" href="#additional-settings-starttls-sni-etc" title="Link to this heading">¶</a></h3>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerNetworkConfiguration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tls_server_name_indication</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_opportunistic_encryption</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_client_auth_credentials</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xmpp_to_hostname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">network_timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">network_max_retries</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration" title="Link to this definition">¶</a></dt>
<dd><p>Additional network settings to provide fine-grained control on how to connect to a specific server.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.tls_server_name_indication">
<span class="sig-name descname"><span class="pre">tls_server_name_indication</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.tls_server_name_indication" title="Link to this definition">¶</a></dt>
<dd><p>The hostname to set within the Server Name Indication TLS extension.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.tls_wrapped_protocol">
<span class="sig-name descname"><span class="pre">tls_wrapped_protocol</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.tls_wrapped_protocol" title="Link to this definition">¶</a></dt>
<dd><p>The protocol wrapped in TLS that the server expects. It allows SSLyze to figure out
how to establish a (Start)TLS connection to the server and what kind of “hello” message
(SMTP, XMPP, etc.) to send to the server after the handshake was completed. If not supplied, standard
TLS will be used.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.tls_client_auth_credentials">
<span class="sig-name descname"><span class="pre">tls_client_auth_credentials</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.tls_client_auth_credentials" title="Link to this definition">¶</a></dt>
<dd><p>The client certificate and private key needed to perform mutual authentication
with the server. If not supplied, SSLyze will attempt to connect to the server without performing
client authentication.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.xmpp_to_hostname">
<span class="sig-name descname"><span class="pre">xmpp_to_hostname</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.xmpp_to_hostname" title="Link to this definition">¶</a></dt>
<dd><p>The hostname to set within the <cite>to</cite> attribute of the XMPP stream. If not supplied, the
server’s hostname will be used. Should only be set if the supplied <cite>tls_wrapped_protocol</cite> is an
XMPP protocol.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.network_timeout">
<span class="sig-name descname"><span class="pre">network_timeout</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.network_timeout" title="Link to this definition">¶</a></dt>
<dd><p>The timeout (in seconds) to be used when attempting to establish a connection to the
server.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerNetworkConfiguration.network_max_retries">
<span class="sig-name descname"><span class="pre">network_max_retries</span></span><a class="headerlink" href="#sslyze.ServerNetworkConfiguration.network_max_retries" title="Link to this definition">¶</a></dt>
<dd><p>The number of retries SSLyze will perform when attempting to establish a connection
to the server.</p>
</dd></dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>tls_server_name_indication</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – </p></li>
<li><p><strong>tls_opportunistic_encryption</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.ProtocolWithOpportunisticTlsEnum" title="sslyze.connection_helpers.opportunistic_tls_helpers.ProtocolWithOpportunisticTlsEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProtocolWithOpportunisticTlsEnum</span></code></a>]) – </p></li>
<li><p><strong>tls_client_auth_credentials</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.ClientAuthenticationCredentials" title="sslyze.server_setting.ClientAuthenticationCredentials"><code class="xref py py-class docutils literal notranslate"><span class="pre">ClientAuthenticationCredentials</span></code></a>]) – </p></li>
<li><p><strong>xmpp_to_hostname</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>]) – </p></li>
<li><p><strong>network_timeout</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>) – </p></li>
<li><p><strong>network_max_retries</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ProtocolWithOpportunisticTlsEnum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum" title="Link to this definition">¶</a></dt>
<dd><p>The list of plaintext protocols supported by SSLyze for opportunistic TLS upgrade (such as STARTTLS).</p>
<p>This allows SSLyze to figure out how to complete an SSL/TLS handshake with the server.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.SMTP">
<span class="sig-name descname"><span class="pre">SMTP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'SMTP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.SMTP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.XMPP">
<span class="sig-name descname"><span class="pre">XMPP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'XMPP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.XMPP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.XMPP_SERVER">
<span class="sig-name descname"><span class="pre">XMPP_SERVER</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'XMPP_SERVER'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.XMPP_SERVER" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.FTP">
<span class="sig-name descname"><span class="pre">FTP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'FTP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.FTP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.POP3">
<span class="sig-name descname"><span class="pre">POP3</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'POP3'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.POP3" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.LDAP">
<span class="sig-name descname"><span class="pre">LDAP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'LDAP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.LDAP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.IMAP">
<span class="sig-name descname"><span class="pre">IMAP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'IMAP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.IMAP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.RDP">
<span class="sig-name descname"><span class="pre">RDP</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'RDP'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.RDP" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.POSTGRES">
<span class="sig-name descname"><span class="pre">POSTGRES</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'POSTGRES'</span></em><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.POSTGRES" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="sslyze.ProtocolWithOpportunisticTlsEnum.from_default_port">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_default_port</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">port</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ProtocolWithOpportunisticTlsEnum.from_default_port" title="Link to this definition">¶</a></dt>
<dd><p>Given a port number, return the protocol that uses this port number by default.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>port</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>) – </p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.ProtocolWithOpportunisticTlsEnum" title="sslyze.connection_helpers.opportunistic_tls_helpers.ProtocolWithOpportunisticTlsEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProtocolWithOpportunisticTlsEnum</span></code></a>]</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="enabling-ssl-tls-client-authentication">
<h3>Enabling SSL/TLS client authentication<a class="headerlink" href="#enabling-ssl-tls-client-authentication" title="Link to this heading">¶</a></h3>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ClientAuthenticationCredentials">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ClientAuthenticationCredentials</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">certificate_chain_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key_password</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">OpenSslFileTypeEnum.PEM</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ClientAuthenticationCredentials" title="Link to this definition">¶</a></dt>
<dd><p>Everything needed by a client to perform SSL/TLS client authentication with the server.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ClientAuthenticationCredentials.certificate_chain_path">
<span class="sig-name descname"><span class="pre">certificate_chain_path</span></span><a class="headerlink" href="#sslyze.ClientAuthenticationCredentials.certificate_chain_path" title="Link to this definition">¶</a></dt>
<dd><p>Path to the file containing the client’s certificate.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ClientAuthenticationCredentials.key_path">
<span class="sig-name descname"><span class="pre">key_path</span></span><a class="headerlink" href="#sslyze.ClientAuthenticationCredentials.key_path" title="Link to this definition">¶</a></dt>
<dd><p>Path to the file containing the client’s private key.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ClientAuthenticationCredentials.key_password">
<span class="sig-name descname"><span class="pre">key_password</span></span><a class="headerlink" href="#sslyze.ClientAuthenticationCredentials.key_password" title="Link to this definition">¶</a></dt>
<dd><p>The password to decrypt the private key.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ClientAuthenticationCredentials.key_type">
<span class="sig-name descname"><span class="pre">key_type</span></span><a class="headerlink" href="#sslyze.ClientAuthenticationCredentials.key_type" title="Link to this definition">¶</a></dt>
<dd><p>The format of the key file.</p>
</dd></dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>certificate_chain_path</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">Path</span></code>) – </p></li>
<li><p><strong>key_path</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">Path</span></code>) – </p></li>
<li><p><strong>key_password</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – </p></li>
<li><p><strong>key_type</strong> (<a class="reference internal" href="#sslyze.OpenSslFileTypeEnum" title="nassl.ssl_client.OpenSslFileTypeEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">OpenSslFileTypeEnum</span></code></a>) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.OpenSslFileTypeEnum">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">OpenSslFileTypeEnum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.OpenSslFileTypeEnum" title="Link to this definition">¶</a></dt>
<dd><p>Certificate and private key format constants which map to the SSL_FILETYPE_XXX OpenSSL constants.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.OpenSslFileTypeEnum.PEM">
<span class="sig-name descname"><span class="pre">PEM</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1</span></em><a class="headerlink" href="#sslyze.OpenSslFileTypeEnum.PEM" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.OpenSslFileTypeEnum.ASN1">
<span class="sig-name descname"><span class="pre">ASN1</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#sslyze.OpenSslFileTypeEnum.ASN1" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
</dd></dl>
</section>
</section>
<section id="classes-for-processing-scan-results">
<h2>Classes for Processing Scan Results<a class="headerlink" href="#classes-for-processing-scan-results" title="Link to this heading">¶</a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerScanResult">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerScanResult</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">uuid</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">server_location</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">network_configuration</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">connectivity_status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">connectivity_error_trace</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">connectivity_result</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scan_status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scan_result</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerScanResult" title="Link to this definition">¶</a></dt>
<dd><p>The result of scanning a server.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.uuid">
<span class="sig-name descname"><span class="pre">uuid</span></span><a class="headerlink" href="#sslyze.ServerScanResult.uuid" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.server_location">
<span class="sig-name descname"><span class="pre">server_location</span></span><a class="headerlink" href="#sslyze.ServerScanResult.server_location" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.network_configuration">
<span class="sig-name descname"><span class="pre">network_configuration</span></span><a class="headerlink" href="#sslyze.ServerScanResult.network_configuration" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.connectivity_status">
<span class="sig-name descname"><span class="pre">connectivity_status</span></span><a class="headerlink" href="#sslyze.ServerScanResult.connectivity_status" title="Link to this definition">¶</a></dt>
<dd><p>Whether SSLyze was able to connect to the server, or not.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.connectivity_error_trace">
<span class="sig-name descname"><span class="pre">connectivity_error_trace</span></span><a class="headerlink" href="#sslyze.ServerScanResult.connectivity_error_trace" title="Link to this definition">¶</a></dt>
<dd><p>The connectivity error; only set if SSLyze was NOT able to connect to the server.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.connectivity_result">
<span class="sig-name descname"><span class="pre">connectivity_result</span></span><a class="headerlink" href="#sslyze.ServerScanResult.connectivity_result" title="Link to this definition">¶</a></dt>
<dd><p>The result of connectivity testing; only set if SSLyze was able to connect to the server.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.scan_status">
<span class="sig-name descname"><span class="pre">scan_status</span></span><a class="headerlink" href="#sslyze.ServerScanResult.scan_status" title="Link to this definition">¶</a></dt>
<dd><p>Whether SSLyze was able to complete the scan, or not.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ServerScanResult.scan_result">
<span class="sig-name descname"><span class="pre">scan_result</span></span><a class="headerlink" href="#sslyze.ServerScanResult.scan_result" title="Link to this definition">¶</a></dt>
<dd><p>The result of the scan; only set if SSLyze was able to complete the scan.</p>
</dd></dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>uuid</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">UUID</span></code>) – </p></li>
<li><p><strong>server_location</strong> (<a class="reference internal" href="#sslyze.ServerNetworkLocation" title="sslyze.server_setting.ServerNetworkLocation"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerNetworkLocation</span></code></a>) – </p></li>
<li><p><strong>network_configuration</strong> (<a class="reference internal" href="#sslyze.ServerNetworkConfiguration" title="sslyze.server_setting.ServerNetworkConfiguration"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerNetworkConfiguration</span></code></a>) – </p></li>
<li><p><strong>connectivity_status</strong> (<a class="reference internal" href="#sslyze.ServerConnectivityStatusEnum" title="sslyze.scanner.models.ServerConnectivityStatusEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerConnectivityStatusEnum</span></code></a>) – </p></li>
<li><p><strong>connectivity_error_trace</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">TracebackException</span></code>]) – </p></li>
<li><p><strong>connectivity_result</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.ServerTlsProbingResult" title="sslyze.server_connectivity.ServerTlsProbingResult"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerTlsProbingResult</span></code></a>]) – </p></li>
<li><p><strong>scan_status</strong> (<a class="reference internal" href="#sslyze.ServerScanStatusEnum" title="sslyze.scanner.models.ServerScanStatusEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerScanStatusEnum</span></code></a>) – </p></li>
<li><p><strong>scan_result</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.AllScanCommandsAttempts" title="sslyze.scanner.models.AllScanCommandsAttempts"><code class="xref py py-class docutils literal notranslate"><span class="pre">AllScanCommandsAttempts</span></code></a>]) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerConnectivityStatusEnum">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerConnectivityStatusEnum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerConnectivityStatusEnum" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerScanStatusEnum">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerScanStatusEnum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerScanStatusEnum" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ServerTlsProbingResult">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ServerTlsProbingResult</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">highest_tls_version_supported</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cipher_suite_supported</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_auth_requirement</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">supports_ecdh_key_exchange</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ServerTlsProbingResult" title="Link to this definition">¶</a></dt>
<dd><p>Additional details about the server, detected via connectivity testing.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>highest_tls_version_supported</strong> (<a class="reference internal" href="available-scan-commands.html#sslyze.TlsVersionEnum" title="sslyze.server_connectivity.TlsVersionEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">TlsVersionEnum</span></code></a>) – </p></li>
<li><p><strong>cipher_suite_supported</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – </p></li>
<li><p><strong>client_auth_requirement</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">ClientAuthRequirementEnum</span></code>) – </p></li>
<li><p><strong>supports_ecdh_key_exchange</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">bool</span></code>) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.AllScanCommandsAttempts">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">AllScanCommandsAttempts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">certificate_info</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ssl_2_0_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ssl_3_0_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_1_0_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_1_1_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_1_2_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_1_3_cipher_suites</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_compression</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_1_3_early_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">openssl_ccs_injection</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tls_fallback_scsv</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">heartbleed</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">robot</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session_renegotiation</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session_resumption</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elliptic_curves</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">http_headers</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.AllScanCommandsAttempts" title="Link to this definition">¶</a></dt>
<dd><p>The result of every scan command supported by SSLyze.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>certificate_info</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CertificateInfoScanAttempt</span></code>) – </p></li>
<li><p><strong>ssl_2_0_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>ssl_3_0_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_1_0_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_1_1_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_1_2_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_1_3_cipher_suites</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CipherSuitesScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_compression</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">CompressionScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_1_3_early_data</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">EarlyDataScanAttempt</span></code>) – </p></li>
<li><p><strong>openssl_ccs_injection</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">OpenSslCcsInjectionScanAttempt</span></code>) – </p></li>
<li><p><strong>tls_fallback_scsv</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">FallbackScsvScanAttempt</span></code>) – </p></li>
<li><p><strong>heartbleed</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">HeartbleedScanAttempt</span></code>) – </p></li>
<li><p><strong>robot</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">RobotScanAttempt</span></code>) – </p></li>
<li><p><strong>session_renegotiation</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">SessionRenegotiationScanAttempt</span></code>) – </p></li>
<li><p><strong>session_resumption</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">SessionResumptionSupportScanAttempt</span></code>) – </p></li>
<li><p><strong>elliptic_curves</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">SupportedEllipticCurvesScanAttempt</span></code>) – </p></li>
<li><p><strong>http_headers</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">HttpHeadersScanAttempt</span></code>) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ScanCommandAttempt">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ScanCommandAttempt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_reason</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_trace</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">result</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ScanCommandAttempt" title="Link to this definition">¶</a></dt>
<dd><p>The result of a single scan command.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandAttempt.status">
<span class="sig-name descname"><span class="pre">status</span></span><a class="headerlink" href="#sslyze.ScanCommandAttempt.status" title="Link to this definition">¶</a></dt>
<dd><p>Whether this specific scan command was ran successfully.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandAttempt.error_reason">
<span class="sig-name descname"><span class="pre">error_reason</span></span><a class="headerlink" href="#sslyze.ScanCommandAttempt.error_reason" title="Link to this definition">¶</a></dt>
<dd><p>The reason why the scan command failed; None if the scan command succeeded.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandAttempt.error_trace">
<span class="sig-name descname"><span class="pre">error_trace</span></span><a class="headerlink" href="#sslyze.ScanCommandAttempt.error_trace" title="Link to this definition">¶</a></dt>
<dd><p>The exception trace of when the scan command failed; None if the scan command succeeded.</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandAttempt.result">
<span class="sig-name descname"><span class="pre">result</span></span><a class="headerlink" href="#sslyze.ScanCommandAttempt.result" title="Link to this definition">¶</a></dt>
<dd><p>The actual result of the scan command; None if the scan command failed. The type of this attribute is
the “ScanResult” object corresponding to the scan command.</p>
</dd></dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>status</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">ScanCommandAttemptStatusEnum</span></code>) – </p></li>
<li><p><strong>error_reason</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<a class="reference internal" href="#sslyze.ScanCommandErrorReasonEnum" title="sslyze.scanner.scan_command_attempt.ScanCommandErrorReasonEnum"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScanCommandErrorReasonEnum</span></code></a>]) – </p></li>
<li><p><strong>error_trace</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">TracebackException</span></code>]) – </p></li>
<li><p><strong>result</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">TypeVar</span></code>(<code class="docutils literal notranslate"><span class="pre">_ScanCommandResultTypeVar</span></code>)]) – </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="sslyze.ScanCommandErrorReasonEnum">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">sslyze.</span></span><span class="sig-name descname"><span class="pre">ScanCommandErrorReasonEnum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">names</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">module</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qualname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">boundary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#sslyze.ScanCommandErrorReasonEnum" title="Link to this definition">¶</a></dt>
<dd><dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandErrorReasonEnum.BUG_IN_SSLYZE">
<span class="sig-name descname"><span class="pre">BUG_IN_SSLYZE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'BUG_IN_SSLYZE'</span></em><a class="headerlink" href="#sslyze.ScanCommandErrorReasonEnum.BUG_IN_SSLYZE" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandErrorReasonEnum.CLIENT_CERTIFICATE_NEEDED">
<span class="sig-name descname"><span class="pre">CLIENT_CERTIFICATE_NEEDED</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'CLIENT_CERTIFICATE_NEEDED'</span></em><a class="headerlink" href="#sslyze.ScanCommandErrorReasonEnum.CLIENT_CERTIFICATE_NEEDED" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandErrorReasonEnum.CONNECTIVITY_ISSUE">
<span class="sig-name descname"><span class="pre">CONNECTIVITY_ISSUE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'CONNECTIVITY_ISSUE'</span></em><a class="headerlink" href="#sslyze.ScanCommandErrorReasonEnum.CONNECTIVITY_ISSUE" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="sslyze.ScanCommandErrorReasonEnum.WRONG_USAGE">
<span class="sig-name descname"><span class="pre">WRONG_USAGE</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'WRONG_USAGE'</span></em><a class="headerlink" href="#sslyze.ScanCommandErrorReasonEnum.WRONG_USAGE" title="Link to this definition">¶</a></dt>
<dd></dd></dl>
</dd></dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">SSLyze</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Running a Scan in Python</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="#full-example">Full Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="#classes-for-starting-a-scan">Classes for Starting a Scan</a></li>
<li class="toctree-l2"><a class="reference internal" href="#classes-for-processing-scan-results">Classes for Processing Scan Results</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="json-output.html">Exporting and processing scan results in JSON</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="available-scan-commands.html">Appendix: Scan Commands</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="index.html" title="previous chapter">SSLyze</a></li>
<li>Next: <a href="json-output.html" title="next chapter">Exporting and processing scan results in JSON</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
©Copyright 2024 Alban Diquet.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
|
<a href="_sources/running-a-scan-in-python.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>