0000: 23 20 47 72 6f 75 70 2c 4e 61 6d 65 2c 43 6f 6e # Group,Name,Con
0010: 73 74 72 61 69 6e 74 73 2c 53 65 74 75 70 2c 42 straints,Setup,B
0020: 6f 64 79 2c 43 6c 65 61 6e 75 70 2c 4d 61 74 63 ody,Cleanup,Matc
0030: 68 2c 52 65 73 75 6c 74 2c 4f 75 74 70 75 74 2c h,Result,Output,
0040: 45 72 72 6f 72 20 4f 75 74 70 75 74 2c 52 65 74 Error Output,Ret
0050: 75 72 6e 20 43 6f 64 65 73 0a 63 6f 6d 6d 61 6e urn Codes.comman
0060: 64 2c 70 61 63 6b 61 67 65 20 70 72 65 66 65 72 d,package prefer
0070: 20 6c 61 74 65 73 74 2c 2c 2c 2c 2c 2c 2c 2c 2c latest,,,,,,,,,
0080: 0a 63 6f 6d 6d 61 6e 64 2c 70 61 63 6b 61 67 65 .command,package
0090: 20 72 65 71 75 69 72 65 20 74 6c 73 2c 2c 2c 2c require tls,,,,
00a0: 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 70 61 ,,,,,.command,pa
00b0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 68 74 ckage require ht
00c0: 74 70 2c 2c 2c 2c 2c 2c 2c 2c 2c 0a 2c 2c 2c 2c tp,,,,,,,,,.,,,,
00d0: 2c 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 23 ,,,,,,.command,#
00e0: 20 43 6f 6e 73 74 72 61 69 6e 74 73 2c 2c 2c 2c Constraints,,,,
00f0: 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 73 65 ,,,,,.command,se
0100: 74 20 64 69 72 20 5b 66 69 6c 65 20 6a 6f 69 6e t dir [file join
0110: 20 5b 70 77 64 5d 20 5b 66 69 6c 65 20 64 69 72 [pwd] [file dir
0120: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 name [info scrip
0130: 74 5d 5d 5d 2c 2c 2c 2c 2c 2c 2c 2c 2c 0a 63 6f t]]],,,,,,,,,.co
0140: 6d 6d 61 6e 64 2c 73 6f 75 72 63 65 20 5b 66 69 mmand,source [fi
0150: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 6f 6d le join $dir com
0160: 6d 6f 6e 2e 74 63 6c 5d 2c 2c 2c 2c 2c 2c 2c 2c mon.tcl],,,,,,,,
0170: 2c 0a 2c 2c 2c 2c 2c 2c 2c 2c 2c 2c 0a 63 6f 6d ,.,,,,,,,,,,.com
0180: 6d 61 6e 64 2c 23 20 48 65 6c 70 65 72 20 66 75 mand,# Helper fu
0190: 6e 63 74 69 6f 6e 73 2c 2c 2c 2c 2c 2c 2c 2c 2c nctions,,,,,,,,,
01a0: 0a 63 6f 6d 6d 61 6e 64 2c 73 65 74 20 3a 3a 63 .command,set ::c
01b0: 61 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e afile [file join
01c0: 20 24 64 69 72 20 63 65 72 74 73 20 63 61 63 65 $dir certs cace
01d0: 72 74 2e 70 65 6d 5d 2c 2c 2c 2c 2c 2c 2c 2c 2c rt.pem],,,,,,,,,
01e0: 0a 63 6f 6d 6d 61 6e 64 2c 73 65 74 20 3a 3a 65 .command,set ::e
01f0: 6e 76 28 53 53 4c 5f 43 45 52 54 5f 46 49 4c 45 nv(SSL_CERT_FILE
0200: 29 20 24 3a 3a 63 61 66 69 6c 65 2c 2c 2c 2c 2c ) $::cafile,,,,,
0210: 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 3a 3a 68 ,,,,.command,::h
0220: 74 74 70 3a 3a 72 65 67 69 73 74 65 72 20 68 74 ttp::register ht
0230: 74 70 73 20 34 34 33 20 5b 6c 69 73 74 20 3a 3a tps 443 [list ::
0240: 74 6c 73 3a 3a 73 6f 63 6b 65 74 20 2d 63 61 66 tls::socket -caf
0250: 69 6c 65 20 24 3a 3a 63 61 66 69 6c 65 5d 2c 2c ile $::cafile],,
0260: 2c 2c 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c ,,,,,,,.command,
0270: 22 70 72 6f 63 20 67 65 74 5f 75 72 6c 20 7b 75 "proc get_url {u
0280: 72 6c 7d 20 7b 0a 20 20 20 20 73 65 74 20 74 6f rl} {. set to
0290: 6b 65 6e 20 5b 3a 3a 68 74 74 70 3a 3a 67 65 74 ken [::http::get
02a0: 75 72 6c 20 24 75 72 6c 5d 0a 20 20 20 20 73 65 url $url]. se
02b0: 74 20 62 6f 64 79 20 5b 3a 3a 68 74 74 70 3a 3a t body [::http::
02c0: 64 61 74 61 20 24 74 6f 6b 65 6e 5d 0a 20 20 20 data $token].
02d0: 20 3a 3a 68 74 74 70 3a 3a 63 6c 65 61 6e 75 70 ::http::cleanup
02e0: 20 24 74 6f 6b 65 6e 0a 20 20 20 20 72 65 74 75 $token. retu
02f0: 72 6e 20 24 62 6f 64 79 0a 7d 0a 22 2c 2c 2c 2c rn $body.}.",,,,
0300: 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 22 70 ,,,,,.command,"p
0310: 72 6f 63 20 67 65 74 5f 64 61 74 61 20 7b 75 72 roc get_data {ur
0320: 6c 7d 20 7b 0a 20 20 20 20 73 65 74 20 74 6f 6b l} {. set tok
0330: 65 6e 20 5b 3a 3a 68 74 74 70 3a 3a 67 65 74 75 en [::http::getu
0340: 72 6c 20 24 75 72 6c 5d 0a 20 20 20 20 73 65 74 rl $url]. set
0350: 20 62 6f 64 79 20 5b 3a 3a 68 74 74 70 3a 3a 64 body [::http::d
0360: 61 74 61 20 24 74 6f 6b 65 6e 5d 0a 20 20 20 20 ata $token].
0370: 3a 3a 68 74 74 70 3a 3a 63 6c 65 61 6e 75 70 20 ::http::cleanup
0380: 24 74 6f 6b 65 6e 0a 20 20 20 20 73 65 74 20 70 $token. set p
0390: 61 74 74 65 72 6e 20 7b 3c 62 6f 64 79 2e 2a 3f attern {<body.*?
03a0: 3e 28 2e 2a 3f 29 3c 2f 62 6f 64 79 3e 7d 0a 20 >(.*?)</body>}.
03b0: 20 20 20 73 65 74 20 64 61 74 61 20 22 22 22 22 set data """"
03c0: 0a 20 20 20 20 72 65 67 65 78 70 20 2d 6e 6f 63 . regexp -noc
03d0: 61 73 65 20 24 70 61 74 74 65 72 6e 20 24 62 6f ase $pattern $bo
03e0: 64 79 20 6d 61 74 63 68 20 64 61 74 61 0a 20 20 dy match data.
03f0: 20 20 72 65 74 75 72 6e 20 24 64 61 74 61 0a 7d return $data.}
0400: 0a 22 2c 2c 2c 2c 2c 2c 2c 2c 2c 0a 2c 2c 2c 2c .",,,,,,,,,.,,,,
0410: 2c 2c 2c 2c 2c 2c 0a 63 6f 6d 6d 61 6e 64 2c 23 ,,,,,,.command,#
0420: 20 62 72 6f 77 73 65 72 6c 65 61 6b 73 2e 63 6f browserleaks.co
0430: 6d 20 54 65 73 74 73 2c 2c 2c 2c 2c 2c 2c 2c 2c m Tests,,,,,,,,,
0440: 0a 42 72 6f 77 73 65 72 4c 65 61 6b 73 2c 54 4c .BrowserLeaks,TL
0450: 53 20 31 2e 33 2c 4f 70 65 6e 53 53 4c 33 2e 32 S 1.3,OpenSSL3.2
0460: 2c 2c 67 65 74 5f 75 72 6c 20 68 74 74 70 73 3a ,,get_url https:
0470: 2f 2f 74 6c 73 31 33 2e 62 72 6f 77 73 65 72 6c //tls13.browserl
0480: 65 61 6b 73 2e 63 6f 6d 2c 2c 2c 54 4c 53 20 31 eaks.com,,,TLS 1
0490: 2e 33 2c 2c 2c 0a 42 72 6f 77 73 65 72 4c 65 61 .3,,,.BrowserLea
04a0: 6b 73 2c 54 4c 53 20 31 2e 32 2c 4f 70 65 6e 53 ks,TLS 1.2,OpenS
04b0: 53 4c 33 2e 32 2c 2c 67 65 74 5f 75 72 6c 20 68 SL3.2,,get_url h
04c0: 74 74 70 73 3a 2f 2f 74 6c 73 31 32 2e 62 72 6f ttps://tls12.bro
04d0: 77 73 65 72 6c 65 61 6b 73 2e 63 6f 6d 2c 2c 2c wserleaks.com,,,
04e0: 54 4c 53 20 31 2e 32 2c 2c 2c 0a 42 72 6f 77 73 TLS 1.2,,,.Brows
04f0: 65 72 4c 65 61 6b 73 2c 54 4c 53 20 31 2e 31 2c erLeaks,TLS 1.1,
0500: 4f 70 65 6e 53 53 4c 33 2e 32 2c 2c 67 65 74 5f OpenSSL3.2,,get_
0510: 75 72 6c 20 68 74 74 70 73 3a 2f 2f 74 6c 73 31 url https://tls1
0520: 31 2e 62 72 6f 77 73 65 72 6c 65 61 6b 73 2e 63 1.browserleaks.c
0530: 6f 6d 2c 2c 2c 66 61 69 6c 65 64 20 74 6f 20 75 om,,,failed to u
0540: 73 65 20 73 6f 63 6b 65 74 2c 2c 2c 31 0a 42 72 se socket,,,1.Br
0550: 6f 77 73 65 72 4c 65 61 6b 73 2c 54 4c 53 20 31 owserLeaks,TLS 1
0560: 2e 30 2c 4f 70 65 6e 53 53 4c 33 2e 32 2c 2c 67 .0,OpenSSL3.2,,g
0570: 65 74 5f 75 72 6c 20 68 74 74 70 73 3a 2f 2f 74 et_url https://t
0580: 6c 73 31 30 2e 62 72 6f 77 73 65 72 6c 65 61 6b ls10.browserleak
0590: 73 2e 63 6f 6d 2c 2c 2c 66 61 69 6c 65 64 20 74 s.com,,,failed t
05a0: 6f 20 75 73 65 20 73 6f 63 6b 65 74 2c 2c 2c 31 o use socket,,,1
05b0: 0a 42 72 6f 77 73 65 72 4c 65 61 6b 73 2c 4a 41 .BrowserLeaks,JA
05c0: 34 20 52 61 77 20 46 69 6e 67 65 72 70 72 69 6e 4 Raw Fingerprin
05d0: 74 2c 4f 70 65 6e 53 53 4c 33 2e 32 2c 2c 67 65 t,OpenSSL3.2,,ge
05e0: 74 5f 64 61 74 61 20 68 74 74 70 73 3a 2f 2f 74 t_data https://t
05f0: 6c 73 2e 62 72 6f 77 73 65 72 6c 65 61 6b 73 2e ls.browserleaks.
0600: 63 6f 6d 2f 69 66 72 61 6d 65 2f 6a 61 34 2c 2c com/iframe/ja4,,
0610: 67 6c 6f 62 2c 74 2a 2c 2c 2c 0a 42 72 6f 77 73 glob,t*,,,.Brows
0620: 65 72 4c 65 61 6b 73 2c 22 4a 41 34 20 52 61 77 erLeaks,"JA4 Raw
0630: 20 46 69 6e 67 65 72 70 72 69 6e 74 2c 20 4f 72 Fingerprint, Or
0640: 69 67 69 6e 61 6c 20 4f 72 64 65 72 22 2c 4f 70 iginal Order",Op
0650: 65 6e 53 53 4c 33 2e 32 2c 2c 67 65 74 5f 64 61 enSSL3.2,,get_da
0660: 74 61 20 68 74 74 70 73 3a 2f 2f 74 6c 73 2e 62 ta https://tls.b
0670: 72 6f 77 73 65 72 6c 65 61 6b 73 2e 63 6f 6d 2f rowserleaks.com/
0680: 69 66 72 61 6d 65 2f 6a 61 34 5f 6f 2c 2c 67 6c iframe/ja4_o,,gl
0690: 6f 62 2c 74 2a 2c 2c 2c 0a 42 72 6f 77 73 65 72 ob,t*,,,.Browser
06a0: 4c 65 61 6b 73 2c 4a 41 33 20 52 61 77 20 46 69 Leaks,JA3 Raw Fi
06b0: 6e 67 65 72 70 72 69 6e 74 2c 4f 70 65 6e 53 53 ngerprint,OpenSS
06c0: 4c 33 2e 32 2c 2c 67 65 74 5f 64 61 74 61 20 68 L3.2,,get_data h
06d0: 74 74 70 73 3a 2f 2f 74 6c 73 2e 62 72 6f 77 73 ttps://tls.brows
06e0: 65 72 6c 65 61 6b 73 2e 63 6f 6d 2f 69 66 72 61 erleaks.com/ifra
06f0: 6d 65 2f 6a 61 33 2c 2c 67 6c 6f 62 2c 2a 2c 2c me/ja3,,glob,*,,
0700: 2c 0a 42 72 6f 77 73 65 72 4c 65 61 6b 73 2c 22 ,.BrowserLeaks,"
0710: 4a 41 33 20 52 61 77 20 46 69 6e 67 65 72 70 72 JA3 Raw Fingerpr
0720: 69 6e 74 2c 20 4f 72 69 67 69 6e 61 6c 20 4f 72 int, Original Or
0730: 64 65 72 22 2c 4f 70 65 6e 53 53 4c 33 2e 32 2c der",OpenSSL3.2,
0740: 2c 67 65 74 5f 64 61 74 61 20 68 74 74 70 73 3a ,get_data https:
0750: 2f 2f 74 6c 73 2e 62 72 6f 77 73 65 72 6c 65 61 //tls.browserlea
0760: 6b 73 2e 63 6f 6d 2f 69 66 72 61 6d 65 2f 6a 61 ks.com/iframe/ja
0770: 33 5f 6e 2c 2c 67 6c 6f 62 2c 2a 2c 2c 2c 0a 42 3_n,,glob,*,,,.B
0780: 72 6f 77 73 65 72 4c 65 61 6b 73 2c 45 6e 63 72 rowserLeaks,Encr
0790: 79 70 74 65 64 20 43 6c 69 65 6e 74 20 48 65 6c ypted Client Hel
07a0: 6c 6f 2c 4f 70 65 6e 53 53 4c 33 2e 32 2c 2c 67 lo,OpenSSL3.2,,g
07b0: 65 74 5f 64 61 74 61 20 68 74 74 70 73 3a 2f 2f et_data https://
07c0: 74 6c 73 2e 62 72 6f 77 73 65 72 6c 65 61 6b 73 tls.browserleaks
07d0: 2e 63 6f 6d 2f 69 66 72 61 6d 65 2f 65 63 68 2c .com/iframe/ech,
07e0: 2c 67 6c 6f 62 2c 20 2a 46 61 6c 73 65 2a 2c 2c ,glob, *False*,,
07f0: 2c 0a ,.