1717identity_manager = IdentityManager ()
1818
1919
20- def setup_aiohttp_debug_logging () :
20+ def setup_aiohttp_debug_logging (verbose : bool ) -> list [ aiohttp . TraceConfig ] :
2121 """Setup detailed aiohttp logging and tracing for debugging purposes."""
2222 # Enable aiohttp internal logging
2323 aiohttp_logger = logging .getLogger ('aiohttp' )
2424 aiohttp_logger .setLevel (logging .DEBUG )
2525 aiohttp_client_logger = logging .getLogger ('aiohttp.client' )
2626 aiohttp_client_logger .setLevel (logging .DEBUG )
27-
27+
2828 # Create trace config for detailed aiohttp logging
2929 trace_config = aiohttp .TraceConfig ()
30-
30+
31+ if verbose :
32+ return []
33+
3134 async def on_request_start (session , trace_config_ctx , params ):
3235 logger .debug ("aiohttp: Starting request %s %s" , params .method , params .url )
33-
36+
3437 async def on_request_end (session , trace_config_ctx , params ):
35- logger .debug ("aiohttp: Request completed %s %s -> %s" ,
38+ logger .debug ("aiohttp: Request completed %s %s -> %s" ,
3639 params .method , params .url , params .response .status )
37-
40+
3841 async def on_connection_create_start (session , trace_config_ctx , params ):
3942 logger .debug ("aiohttp: Creating connection" )
40-
43+
4144 async def on_connection_create_end (session , trace_config_ctx , params ):
4245 logger .debug ("aiohttp: Connection created" )
43-
46+
4447 async def on_dns_resolvehost_start (session , trace_config_ctx , params ):
4548 logger .debug ("aiohttp: Starting DNS resolution for %s" , params .host )
46-
49+
4750 async def on_dns_resolvehost_end (session , trace_config_ctx , params ):
4851 logger .debug ("aiohttp: DNS resolution completed for %s" , params .host )
49-
52+
5053 async def on_connection_queued_start (session , trace_config_ctx , params ):
5154 logger .debug ("aiohttp: Connection queued" )
52-
55+
5356 async def on_connection_queued_end (session , trace_config_ctx , params ):
5457 logger .debug ("aiohttp: Connection dequeued" )
55-
58+
5659 async def on_request_exception (session , trace_config_ctx , params ):
57- logger .error ("aiohttp: Request exception for %s %s: %s" ,
60+ logger .error ("aiohttp: Request exception for %s %s: %s" ,
5861 params .method , params .url , params .exception )
5962 # Check if it's an SSL-related exception
6063 if hasattr (params .exception , '__class__' ):
6164 exc_name = params .exception .__class__ .__name__
6265 if 'ssl' in exc_name .lower () or 'certificate' in str (params .exception ).lower ():
6366 logger .error ("aiohttp: SSL/Certificate error detected: %s" , params .exception )
64-
67+
6568 async def on_request_redirect (session , trace_config_ctx , params ):
6669 logger .debug ("aiohttp: Request redirected from %s %s to %s" ,
6770 params .method , params .url , params .response .headers .get ('Location' , 'unknown' ))
68-
71+
6972 trace_config .on_request_start .append (on_request_start )
7073 trace_config .on_request_end .append (on_request_end )
7174 trace_config .on_connection_create_start .append (on_connection_create_start )
@@ -76,8 +79,21 @@ async def on_request_redirect(session, trace_config_ctx, params):
7679 trace_config .on_connection_queued_end .append (on_connection_queued_end )
7780 trace_config .on_request_exception .append (on_request_exception )
7881 trace_config .on_request_redirect .append (on_request_redirect )
79-
80- return trace_config
82+
83+ return [trace_config ]
84+
85+
86+ def setup_tcp_connector () -> aiohttp .TCPConnector :
87+ """
88+ Setup a TCP connector with a default SSL context and cleanup enabled.
89+ """
90+ ssl_context = ssl .create_default_context (cafile = certifi .where ())
91+ ssl_context .minimum_version = ssl .TLSVersion .TLSv1_2
92+ connector = aiohttp .TCPConnector (
93+ ssl = ssl_context ,
94+ enable_cleanup_closed = True
95+ )
96+ return connector
8197
8298
8399async def analyze_scan_path (
@@ -106,28 +122,13 @@ async def analyze_scan_path(
106122
107123 # Server signatures do not contain any information about the user setup. Only about the server itself.
108124 try :
109- # Setup debugging if verbose mode is enabled
110- trace_configs = []
111- if verbose :
112- trace_config = setup_aiohttp_debug_logging ()
113- trace_configs .append (trace_config )
125+ trace_configs = setup_aiohttp_debug_logging (verbose = verbose )
126+ tcp_connector = setup_tcp_connector ()
114127
115- # explicitly creating the ssl context sidesepts SSL issues
116- ssl_context = ssl .create_default_context (cafile = certifi .where ())
117-
118- if verbose :
119- logger .debug ("aiohttp: SSL context created - verify_mode=%s, check_hostname=%s" ,
120- ssl_context .verify_mode , ssl_context .check_hostname )
121-
122- connector = aiohttp .TCPConnector (
123- ssl = ssl_context ,
124- enable_cleanup_closed = True
125- )
126-
127128 if verbose :
128129 logger .debug ("aiohttp: TCPConnector created" )
129-
130- async with aiohttp .ClientSession (connector = connector , trace_configs = trace_configs ) as session :
130+
131+ async with aiohttp .ClientSession (connector = tcp_connector , trace_configs = trace_configs ) as session :
131132 async with session .post (url , headers = headers , data = payload .model_dump_json ()) as response :
132133 if response .status == 200 :
133134 results = AnalysisServerResponse .model_validate_json (await response .read ())
0 commit comments